phoenix-powerArchLinux On Android 6.0のカスタマイズです。

Arch Linux On Androidは、基本的に、独自のサーバーを使って更新されます。なので、Pacmanの設定がカスタマイズされた状態です。この辺は、システムに詳しくないと死にます。私はあまりシステムに詳しくないので、既に死んでますが…。

Yaourt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# デフォルトで作成されるユーザーのパスワードを設定します
$ passwd archlinux
$ vim /etc/sudoers
%wheel ALL=(ALL) ALL #追記かコメントアウト
$ su archlinux

## package-query
$ mkdir tmp;cd tmp
# https://aur.archlinux.org/packages/package-query/
$ git clone https://aur.archlinux.org/package-query.git
$ cd package-query
$ sudo pacman -S yajl
# base-develでインストールされているものを表示する
$ sudo pacman -Qg base-devel
# makepkgに必要なものをインストールする(またはbase-develをインストールしてもいい)
$ sudo pacman -S gcc make fakeroot
# makepkgとpacman -Uを同時に行う
$ makepkg -i

## yaourt
# https://wiki.archlinuxjp.org/index.php/Yaourt
# $arch -> arm
$ sudo vim /etc/pacman.conf
[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/arm
# 強制update
$ pacman -Syyu
$ pacman -S yaourt

ここまで来て、デフォルトで設定されたbashに嫌気が差してくるのですが、zshだとwidgetをよく使うためかAndroid Terminal Emulatorでの表示上の不都合が頻発するので、仕方なくbashを使うことに。

1
$ pacman -S bash-completion

Tab補完を有効にして、候補は、C-jで呼び出すことにしています。エラーが出る場合は、~/.inputrcに記述すればよいです。

~/.bashrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# completion 
source /usr/share/bash-completion/bash_completion
set show-all-if-ambiguous on
set show-all-if-unmodified on
bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'

# tab-menu
set completion-display-width 1
bind "C-j": complete
bind "C-k": menu-complete-reverse
{% endcodeblock %}

# prompt
#PS1='[\u@\h \W]\$ '  # To leave the default one
#DO NOT USE RAW ESCAPES, USE TPUT
reset=$(tput sgr0)
red=$(tput setaf 1)
blue=$(tput setaf 4)
green=$(tput setaf 2)
PS1='\[$red\]\u\[$reset\] \[$blue\]\w\[$reset\] \[$red\]\$ \[$reset\]\[$green\] '

# alias
alias ls='ls -p --color=auto'
alias l='ls'
alias ll='ls -lFh'
alias la='ls -A'
alias lla='ll -A'
alias mv='mv -i'
alias cp='cp -i'
alias rmdir='rm -rf'
alias grep='grep --color=auto'
alias egrep='grep -E'
alias fgrep='grep -F'
~/.inputrc
1
2
3
4
5
6
7
8
9
10
11
$if Bash
  # tab-menu
  TAB: menu-complete
  # history
  "\C-p": history-search-backward
  "\C-n": history-search-forward
  # audio etc.
  set completion-ignore-case on
  set bell-style none
  set visible-stats on
$endif

さて、yaourtも導入できたことですし、次に行ったのはkernelの更新です。しかし、結論から言うと、断念することになりました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Kernel Versionの確認。ここではchroot元であるAndroidのKernel Vertionが表示されます
$ uname -r
  linux 3.4.0
## Update Kernel.
# https://wiki.archlinux.org/index.php/Kernels 
# https://wiki.archlinuxjp.org/index.php/Mkinitcpio
$ yaourt -S linux linux-headers
$ ls /usr/lib/modules
  4.2.3-1-ARCH
# Make Kernel Image.
$ mkinitcpio -M
  ERROR: Directory not found: /boot/android-kernel-version
$ mkinitcpio -g /boot/android-kernel-version -k 4.2.3-1-ARCH
# Setting Kernel.
$ mkinitcpio -p linux
  ERROR: Preset not found: /etc/mkinitcpio.d/linux.preset

unameの結果を見ての通り、簡単にLinux Kernelをアップデートすることは無理でした。通常は、インストールと同時に適用されるはずのコマンドもエラーが出ています。chrootでは、Kernel LoadもKernel Modules Loadもすべて元環境のものが使われるみたいです。当たり前といえば当たり前ですが。

arch-chroot, pacstrapが使えればよいのですが、chrootではこれらは使えません。systemd-nspawnでイメージを起動してといてくれると色々と助かったのですが、busyboxには入ってないだろうし、無理ぽい(確認はしてないけど)。

1
2
3
4
5
$ pacman -S arch-install-scripts

# chroot中は実行できない
$ pacstrap / linux linux-headers
$ arch-chroot / mkinitcpio -p linux

やりようは他にいくらでもあるのですが、例えば、イメージをパソコン上で展開して、arch-chrootを実行するなど、しかし、特にchrootして使うArch LinuxにKernelのバージョンアップ、モジュールの読み込みがそれほど必要とも思えないので、断念することに。