5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PONOSAdvent Calendar 2023

Day 13

Arch Linuxインストールの素振り2023 with Appleシリコン(後編)

Last updated at Posted at 2023-12-13

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配下にbaselinuxなどがインストールされます。
/mntにはLinuxの/(ルート)にする予定のパーティションがマウントされていますので、このコマンドでLinuxが動作するためのディレクトリ構造が作成されることになります。

インストールガイドで書かれているbaselinuxの他に、以下も追加しました。

  • 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ルートパーティションをマウントした/mntchrootできました。
擬似的に/(ルート)を変更することで、インストール先環境固有のアプリを使ったり、設定編集したりできます。

ここから先は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-8ja_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.confLANG環境変数の指定を書き込みます。

[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. ブートローダー

ブートローダーをインストール・設定していきます。
インストールガイドには超あっさりしか書かれていないため、ブートローダーを参考に導入することになります。

image.png

色々と選択肢がありますが、今回はメジャーどころの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. ブートローダーのインストール

grubefibootmgrをインストールします。
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

image.png

仮想マシンの起動時は、このリストの上から順に起動できそうなドライブを探します。
ドライブの上で右クリックして「上に移動」し、VirtIOドライブがUSBドライブよりも上に来るように変更します。

「保存」で確定したら、仮想マシンを再度立ち上げます。

5. インストール後

うまくインストールできていたら、ブートローダーのGRUBが立ち上がります。

image.png

成功です!! 🎉

このままだとサービス類もほとんど立ち上がっていないので、必要に応じて起動します。
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 さんです!! 🎊

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?