PONOS Advent Calendar 2023の13日目の記事です。
前回は、@iixd_pogさんのUnityのツールバーにボタンを追加する方法(Unity 2021.2以降)でした。
はじめに
この記事は前後編のうち 後編 です。
前編では、仮想マシンの作成からインストール準備までを進めました。
→ Arch Linuxインストールの素振り2023 with Appleシリコン(前編)
前編と同じく、Arch Wikiのインストールガイドに沿って進めていきます。
ARM(Appleシリコン)特有の工夫が必要な箇所は、適宜手順を足したり変更したりします。
2. インストール
ようやく折り返し地点です。
2-1. ミラーの選択
/etc/pacman.d/mirrorlist
を編集し、日本のミラーサイトを指定します。
コメントアウトされているServer = ...
のコメントを外すだけ。
2-2. 必須パッケージのインストール
pacstrap
を使って一通りのパッケージをインストールします。
[root@archboot /]# pacstrap -K /mnt base linux vim archlinuxarm-keyring
これで、/mnt
配下にbase
やlinux
などがインストールされます。
/mnt
にはLinuxの/
(ルート)にする予定のパーティションがマウントされていますので、このコマンドでLinuxが動作するためのディレクトリ構造が作成されることになります。
インストールガイドで書かれているbase
・linux
の他に、以下も追加しました。
- vim : 後々何かと編集したくなるので
- archlinuxarm-keyring : ArchLinux ARMのビルドシステムからのパッケージを検証するために必要
3. システムの設定
3-1. fstab の生成
起動時にパーティションを自動マウントさせるため、fstab
を作成します。
手書きすることもできますが、genfstab
で現在のマウント状況を元に生成するのが楽です。
[root@archboot /mnt/boot]# genfstab -U /mnt >> /mnt/etc/fstab
[root@archboot /]# cat /mnt/etc/fstab
# /dev/vda3
UUID=6f9304ec-52ea-47f8-897a-091c90747d01 / ext4 rw,relatime 0 1
# /dev/vda1
UUID=E380-7E4F /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro 0 2
# /dev/vda2
UUID=f4c90e90-5d77-4380-a953-7ba016248d2c none swap defaults 0 0
3-2. chroot
新しいArch Linuxにchroot
して、初期設定をします。
インストール作業時に必要な設定を色々やった上でchroot
してくれるarch-chroot
を実行。
[root@archboot /mnt/boot]# arch-chroot /mnt
[root@archboot /]#
Linuxルートパーティションをマウントした/mnt
にchroot
できました。
擬似的に/
(ルート)を変更することで、インストール先環境固有のアプリを使ったり、設定編集したりできます。
ここから先はchroot
した状態でコマンドを打っていきます。
便宜上、chroot
した先を「新OS」・元のOSを「親OS」と呼びます。
chroot
状態で一通りの設定を済ませることで、準備が十分整った状態で新OSを立ち上げることができます。
3-3. タイムゾーン
東京のタイムゾーンを/etc/localtime
にリンクして有効化します。
[root@archboot /]# ln -df /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
3-4. ローカリゼーション
/etc/locale.gen
を編集して、en_US.UTF-8 UTF-8
とja_JP.UTF-8 UTF-8
をアンコメントします。
さらにlocale-gen
で生成。
[root@archboot /]# locale-gen
Generating locales...
en_US.UTF-8... done
ja_JP.UTF-8... done
Generation complete.
/etc/locale.conf
にLANG
環境変数の指定を書き込みます。
[root@archboot /]# echo LANG=en_US.UTF-8 > /etc/locale.conf
3-5. ネットワーク設定
ホストネームを設定します。
[root@archboot /]# echo hogehost > /etc/hostname
3-5-1. DHCPクライアント設定
インストールガイドには含まれていませんが、必須の手順です。
ネットワーク設定:自動を参照し、DHCPでIPアドレスを自動取得する設定にします。
Arch Linuxのネットワークマネージャはたくさんの選択肢がありますが、今回はデフォルトでインストールされているsystemd-networkd
を使用します。
仮想マシンのネットワークインターフェース名を調べます。
[root@honearch network]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 8e:ef:2e:e8:e1:2c brd ff:ff:ff:ff:ff:ff
enp0s1
がインターフェース名です。
systemd-networkd:有線アダプタで DHCP を使用を参考に、/etc/systemd/network/20-wired.network
を作成します。
[root@honearch network]# cat 20-wired.network
[Match]
Name=enp0s1
[Network]
DHCP=yes
これで設定完了です。
後述しますが、Arch Linuxインストール直後はネットワークマネージャが無効状態になっています。
有効化するのをお忘れなく。
3-6. Initramfs
pacstrap
の最中で実行されており、不要なので省略。
3-7. Root パスワード
Rootパスワードを設定します。
[root@archboot /]# passwd
New password:
Retype new password:
passwd: password updated successfully
3-Ex. pacmanキーリングの追加設定
インストールガイドには含まれていませんが、必須の手順です。
このあとpacman
でパッケージのインストールを行うとすると、信頼できないパッケージとして弾かれてしまう問題があります。
error: <package>: signature from "Arch Linux ARM Build System <builder@archlinuxarm.org>" is marginal trust
これで数時間ハマって色々調べてみたところ、「Arch Linux ARM Build System」の鍵が信頼されていないことが原因のようです。
[root@honearch keyrings]# pacman-key --list-sigs Build
pub rsa4096 2014-01-18 [SC]
68B3537F39A313B3E574D06777193F152BDBE6A6
uid [marginal] Arch Linux ARM Build System <builder@archlinuxarm.org>
sig 3 77193F152BDBE6A6 2014-01-18 [self-signature]
sig B55C5315DCD9EE1A 2014-01-18 Jason Plum (Arch Linux ARM Master Key) <jplum@master-key.archlinuxarm.org>
sig BC704E86B823CD25 2014-01-18 Kevin Mihelich (Arch Linux ARM Master Key) <kevin@master-key.archlinuxarm.org>
sub rsa4096 2014-01-18 [E]
sig 77193F152BDBE6A6 2014-01-18 [self-signature]
pacman-key --list-sigs
で鍵のIDを調べます。
引数にBuild
を指定して、「Arch Linux ARM Build System」をヒットさせようとしています。
ステータスがmarginal
(限定的)となっているのが分かります。
[root@honearch keyrings]# pacman-key --lsign-key 68B3537F39A313B3E574D06777193F152BDBE6A6
-> Locally signed 1 keys.
==> Updating trust database...
gpg: Note: third-party key signatures using the SHA1 algorithm are rejected
gpg: (use option "--allow-weak-key-signatures" to override)
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 10 trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1 valid: 10 signed: 97 trust: 1-, 0q, 0n, 9m, 0f, 0u
gpg: depth: 2 valid: 75 signed: 21 trust: 75-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2023-12-31
次にpacman-key --lsign-key
で、先ほど調べたキーIDに対してローカル署名します。
このあと再度状態確認すると・・・
[root@honearch ~]# pacman-key --list-sigs Build
pub rsa4096 2014-01-18 [SC]
68B3537F39A313B3E574D06777193F152BDBE6A6
uid [ full ] Arch Linux ARM Build System <builder@archlinuxarm.org>
sig 3 77193F152BDBE6A6 2014-01-18 [self-signature]
sig L 083A98E05FB197DE 2023-12-11 Pacman Keyring Master Key <pacman@localhost>
sig B55C5315DCD9EE1A 2014-01-18 Jason Plum (Arch Linux ARM Master Key) <jplum@master-key.archlinuxarm.org>
sig BC704E86B823CD25 2014-01-18 Kevin Mihelich (Arch Linux ARM Master Key) <kevin@master-key.archlinuxarm.org>
sub rsa4096 2014-01-18 [E]
sig 77193F152BDBE6A6 2014-01-18 [self-signature]
marginal
からfull
に変わりました。
これで、Arch Linux ARM Buildが署名したパッケージを信頼するようになります。
Arch Linux ARMのパッケージは、2-2. 必須パッケージのインストールでインストールしたarchlinuxarm-keyring
を使ってカギの検証をします。
キーリングをインストールしただけでは完全に信頼したことにはならず、pacman-key --lsign-key
でローカル署名を追加する必要があるという理解をしています。
3-8. ブートローダー
ブートローダーをインストール・設定していきます。
インストールガイドには超あっさりしか書かれていないため、ブートローダーを参考に導入することになります。
色々と選択肢がありますが、今回はメジャーどころのGRUBを使用します。
さらにファームウェア(BIOS / UEFI)とパーティションテーブル(MBR / GPT)の組み合わせについては、現在主流のUEFI+GPTで進めることにします。
GRUBのUEFI用インストールガイドを見つつ進めます。
3-8-Ex. ネームサーバーの設定
2023/12/19追記
改めて手順を検証していたところ、chroot
状態だと名前解決できないことがわかりました。
/etc/resolv.conf
を修正して、DNSサーバーを指定する必要があります。
[root@archboot /]# cat /etc/resolv.conf
# Resolver configuration file.
# See resolv.conf(5) for details.
nameserver 8.8.8.8
3-8-1. ブートローダーのインストール
grub
とefibootmgr
をインストールします。
chroot
中ですので、このパッケージは新OSの中に入ります。
# pacman -S grub efibootmgr
さらに、GRUBを/boot
内にインストールします。
このパスは、親OSから見ると/mnt/boot
にマウントしたEFIシステムパーティションのことです。
[root@archboot /]# grub-install --target=arm64-efi --efi-directory=/boot --bootloader-id=grub
Installing for arm64-efi platform.
Installation finished. No error reported.
3-8-2. grub.cfg の生成
GRUB:grub.cfgの生成を参考に、grub-mkconfig
で設定ファイルを生成します。
[root@archboot /]# grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
Adding boot menu entry for UEFI Firmware Settings ...
done
grub-mkconfig
は、chroot
した状態のルートファイルシステムを判定して、GRUBからのブートに必要な情報を生成してくれます。
4. 再起動
これで準備完了です。
再起動して新しいArch Linux ARMが立ち上がってくれば成功!
ですがその前に、仮想マシンのドライブの起動順を設定する必要があります。
一度シャットダウンして、仮想マシンの設定画面を開きます。
[root@archboot /]# exit # chrootから抜ける
[root@archboot /mnt/boot]# shutdown -h now
仮想マシンの起動時は、このリストの上から順に起動できそうなドライブを探します。
ドライブの上で右クリックして「上に移動」し、VirtIOドライブがUSBドライブよりも上に来るように変更します。
「保存」で確定したら、仮想マシンを再度立ち上げます。
5. インストール後
うまくインストールできていたら、ブートローダーのGRUBが立ち上がります。
成功です!! 🎉
このままだとサービス類もほとんど立ち上がっていないので、必要に応じて起動します。
start
で起動、enable
で次回起動時に自動的に起動するようになります。
# systemctl start systemd-networkd
# systemctl enable systemd-networkd
# systemctl start systemd-resolved
# systemctl enable systemd-resolved
# systemctl start systemd-timesyncd
# systemctl enable systemd-timesyncd
あとは好きなソフトを入れて好きに使いましょう。
まとめ
何度もやっている手順でしたが、手順をすっ飛ばしたりコマンドを打ち間違えたりで、すんなりとはいきませんでした。
特に、3-Ex. pacmanキーリングの追加設定の箇所については、過去に踏んだことのないエラーだったこともあり、大変手こずりました。(2晩くらいは悩んだ)
おかげでpacman
におけるパッケージ署名の仕組みや、GnuPGについての理解が進み、大変良い素振りになったと思います。
明日は @kerimeka さんです!! 🎊