(raspi)archlinux64でusb-bootを実現する

1.はじめに

https://qiita.com/yoshiki9636/items/f1290930f848b1ab2bb0 にも掲載されていたが、なんか面倒だなと敬遠していた。でもこれが書かれたのが2年ほど前だから、そろそろもっとすんなりできるようになっていないかと思って検索していたところ、https://archlinuxarm.org/forum/viewtopic.php?f=67&t=15697 を見つけ、早速試してみました。

2.準備するもの

(1)ラズパイを最新パッケージにすること

SDカードで64ビットArchlinux64がインストールされており、最新パッケージに更新されていること。

(2)接続するUSB HDD(SSD)は、PC上でパーティションの確保とフォーマットを済ませておくこと(必須ではありません。)

なぜならaarchには mkfs.ext4のフォーマットはできても、vfatのコマンドはインストールされていないからです。

2022/10/19 追記

vfat でフォーマットするためには、dosfstools パッケージをインストールする必要があります。標準ではインストールされないだけです。

$ ls -al /bin/ | grep mkfs

lrwxrwxrwx 1 root root 8 Feb 2 2022 mkdosfs -> mkfs.fat
-rwxr-xr-x 1 root root 14440 Aug 7 04:37 mkfs
-rwxr-xr-x 1 root root 43120 Aug 7 04:37 mkfs.bfs
-rwxr-xr-x 1 root root 51248 Aug 7 04:37 mkfs.cramfs
-rwxr-xr-x 4 root root 153944 Jun 22 21:27 mkfs.ext2
-rwxr-xr-x 4 root root 153944 Jun 22 21:27 mkfs.ext3
-rwxr-xr-x 4 root root 153944 Jun 22 21:27 mkfs.ext4
-rwxr-xr-x 1 root root 59928 Feb 2 2022 mkfs.fat
-rwxr-xr-x 1 root root 137344 Aug 7 04:37 mkfs.minix
lrwxrwxrwx 1 root root 8 Feb 2 2022 mkfs.msdos -> mkfs.fat
lrwxrwxrwx 1 root root 8 Feb 2 2022 mkfs.vfat -> mkfs.fat

(3)ドライブ名変更の必要があるかも

これは稀だど思いますが、すでにUSB2HDDを接続していた環境にUSB3のHDDを接続したら、USB3接続のドライブが /dev/sda として認識され、起動できなくなったのです。その場合はレスキューモードで立ち上がってから /etc/fstab を編集して正常に起動できるようにすること。

# nano /etc/fstab

(修正前)/dev/sda1 /home ext4 defaults 0 0

(修正後)/dev/sdb1 /home ext4 defaults 0 0

3.インストール

(1)USB HDD のマウントと64版のダウンロード

USB HDDを接続し、SDカードから立ち上げます。これ以降は基本的にhttps://archlinuxarm.org/platforms/armv8/broadcom/raspberry-pi-4 に沿って進めますが、すでにフォーマット済みですから、マウントから始めます。

$ sudo mkdir /mnt/boot

$ sudo mount /dev/sda1 /mnt/boot

$ sudo mkdir /mnt/root

$ sudo mount /dev/sda2 /mnt/root

マウントした場所に移動し、64ビット版をダウンロードします。

$ cd /mnt

$ sudo wget http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-aarch64-latest.tar.gz

マウントした状態と、正常にダウンロードできたことを確認しました。

$ ls -al

total 521216
drwxr-xr-x 4 root root 4096 Oct 10 13:52 .
drwxr-xr-x 17 root root 4096 Jul 9 21:36 ..
-rw-r–r– 1 root root 533690354 Aug 10 10:56 ArchLinuxARM-rpi-aarch64-latest.tar.gz
drwxr-xr-x 2 root root 16384 Jan 1 1970 boot
drwxr-xr-x 3 root root 4096 Oct 10 13:27 root

(2)/mnt/rootに展開

$ sudo bsdtar -xpf ArchLinuxARM-rpi-aarch64-latest.tar.gz -C root/

展開した /mnt/root はこんな状態です。

$ ls -al /mnt/root

total 80
drwxr-xr-x 17 root root 4096 Oct 10 13:56 .
drwxr-xr-x 4 root root 4096 Oct 10 13:52 ..
lrwxrwxrwx 1 root root 7 Dec 9 2021 bin -> usr/bin
drwxr-xr-x 3 root root 4096 Aug 10 10:54 boot
drwxr-xr-x 2 root root 4096 Aug 10 10:53 dev
drwxr-xr-x 39 root root 4096 Aug 10 10:54 etc
drwxr-xr-x 3 root root 4096 Aug 10 10:54 home
lrwxrwxrwx 1 root root 7 Dec 9 2021 lib -> usr/lib
drwx—— 2 root root 16384 Oct 10 13:27 lost+found
drwxr-xr-x 2 root root 4096 Dec 9 2021 mnt
drwxr-xr-x 2 root root 4096 Dec 9 2021 opt
dr-xr-xr-x 2 root root 4096 Aug 10 10:53 proc
drwxr-x— 3 root root 4096 Aug 10 10:54 root
drwxr-xr-x 2 root root 4096 Aug 10 10:53 run
lrwxrwxrwx 1 root root 7 Dec 9 2021 sbin -> usr/bin
drwxr-xr-x 4 root root 4096 Aug 10 10:53 srv
dr-xr-xr-x 2 root root 4096 Aug 10 10:53 sys
drwxrwxrwt 2 root root 4096 Aug 10 10:53 tmp
drwxr-xr-x 8 root root 4096 Aug 10 10:54 usr
drwxr-xr-x 12 root root 4096 Aug 10 10:53 var

(3)root/boot/* の /mnt/bootへの移動

$ sudo mv root/boot/* boot/

(4)pcie_brcmstb の組み込み

$ sudo nano /etc/mkinitcpio.conf

(修正前)module()

(修正後)module(pcie_brcmstb)

(5)新イメージの作成と /mnt/boot へのコピー

$ sudo mkinitcpio -P

==> Building image from preset: /etc/mkinitcpio.d/linux-aarch64.preset: ‘default’
-> -k 5.19.8-1-aarch64-ARCH -c /etc/mkinitcpio.conf -g /boot/initramfs-linux.img
==> Starting build: 5.19.8-1-aarch64-ARCH
-> Running build hook: [base]
-> Running build hook: [udev]
-> Running build hook: [autodetect]
-> Running build hook: [modconf]
-> Running build hook: [block]
-> Running build hook: [filesystems]
-> Running build hook: [keyboard]
-> Running build hook: [fsck]
==> WARNING: No modules were added to the image. This is probably not what you want.
==> Creating gzip-compressed initcpio image: /boot/initramfs-linux.img
==> Image generation successful
==> Building image from preset: /etc/mkinitcpio.d/linux-aarch64.preset: ‘fallback’
-> -k 5.19.8-1-aarch64-ARCH -c /etc/mkinitcpio.conf -g /boot/initramfs-linux-fallback.img -S autodetect
==> Starting build: 5.19.8-1-aarch64-ARCH
-> Running build hook: [base]
-> Running build hook: [udev]
-> Running build hook: [modconf]
-> Running build hook: [block]
==> WARNING: Possibly missing firmware for module: wd719x
==> WARNING: Possibly missing firmware for module: qla1280
==> WARNING: Possibly missing firmware for module: qla2xxx
-> Running build hook: [filesystems]
-> Running build hook: [keyboard]
-> Running build hook: [fsck]
==> Generating module dependencies
==> Creating gzip-compressed initcpio image: /boot/initramfs-linux-fallback.img
==> Image generation successful

出来上がった新イメージを /mnt/boot/ へコピーします。

$ sudo cp /boot/initramfs-linux.img /mnt/boot/

$ sudo cp /boot/initramfs-linux-fallback.img /mnt/boot/

(6)/etc/fstab の修正

$ sudo nano /mnt/root/etc/fstab

/dev/sda1 /boot vfat defaults 0 0

/dev/sda2 / ext4 defaults 0 0

(7)USB HDD のアンマウントとシャットダウン

$ sudo umount -R /mnt/boot /mnt/root

$ sudo shutdown -h now

(8)SDカードを抜いて起動

これで起動できました。

但し、USBキーボード切替器を使って起動しようとすると xhci-pci の組み込みあたりでリセットが繰り返され、起動できませんでした。これを抜いておき起動後に差し直せば正常に使用できるのですが・・・

このあとは pacman-key –init やらパッケージのアップデートを行ってください。

コメント

タイトルとURLをコピーしました