phoenix-powerArch Linuxのインストールスクリプトを作成した

まず、注意としてArch Linuxの数々は色々と安定していません。同じスクリプトを実行したとしても、エラーが出たり、途中で止まったり、前回とは違う動作をしたりなどなど。したがって、とても根気が必要な作業でした。また、OSのインストールという極めてテストをしにくいし、時間がかかる環境下のことなのでその辺が辛かったです。

気づいたことをつらつらと書きます。

  • Arch Linuxの起動時にエラーを吐いて起動できなかったことが何度かあった

  • 同じスクリプトでも最後まで実行される時とされない時があった

  • VirtualBox上でArch Linuxをインストールした時、base-develにはいってると思われるsudoのインストールする時に止まる現象が何度か確認された

  • arch-chrootの実行において何度か段階を飛ばす現象が確認された

  • 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# 古いイメージを使用しているときなどkeyが古くて更新できない場合があります
$ pacman-key --refresh-keys
$ pacman -Sy

# パーティションを自動作成する, 4つのパーティションが出来上がる, 200は200M parted
$ parted /dev/sdx -s mklabel gpt \
-s mkpart primary ext4 0 200 \
-s mkpart primary ext4 200 10G \
-s mkpart primary ext4 10G 100% \
-s p

# macbookには、bootloaderはvfatにする必要がある
$ mksf.vfat /dev/sdx1

# grubを自動インストールするが、正確性はないので、その場合は手動でオプションを指定する必要がある, macbookはefibootmgrが必要である
$ grub-install --force --recheck /dev/sdx

# 手動grub
$ grub-install --target=x86_64-efi --efi-directory=/boot/efi --recheck

# grubのefi用のパソコン起動時に必要なファイルとディレクトリは以下であり、これを所定の場所にコピーすれば大体動く
sdx1:EFI/arch/grubx64.efi
sdx2:/boot/grub/x86_64-efi

# 指定ディレクトリにアプリをインストールする
$ pacstrap /mnt grub

# 平文で一時的なパスワードを設定する, arch-chrootで実行コマンドを指定して実行する chpasswd
$ arch-chroot /mnt /bin/bash -c "
echo root:root | chpasswd
echo user:root | chpasswd
"

# yaourtの設定を行う
$ arch-chroot /mnt /bin/bash -c "
echo -e '[archlinuxfr]\nSigLevel = Never\nServer = http://repo.archlinux.fr/$arch' >> /mnt/etc/pacman.conf
# 確認なし、エディタなし、sudo確認なしの設定
echo -e 'SUDONOVERIF=1\nNOCONFIRM=1\nBUILD_NOCONFIRM=0\nEDITFILES=0' >> /etc/yaourtrc
pacman -Sy yaourt
yaourt -Sy
"

# pacmanの確認を行わない
$ arch-chroot /mnt /bin/bash -c "
pacman -S zsh --noconfirm
"

# 特定のユーザーでコマンドを実行する su user
$ arch-chroot /mnt /bin/bash -c "
su user -s /bin/zsh -c 'source ~/.zshrc'
"

# 特定のユーザーのデフォルトシェルを変更する chsh
$ arch-chroot /mnt /bin/bash -c "
chsh -s /bin/zsh user
"