「Arch Linuxを元にT2チップを備えない古いIntel MacをNerves化しよう」という構想の実現に邁進する駄文シリーズの第2弾です.今回は,素のx86_64 PC向けのbuildrootを古いIntel MacであるMac Pro (Mid 2010) に入れて起動を試みてみました.
シリーズ
- Nerves化構想を思い立つ
- buildrootをビルドして起動する(本記事)
Nervesの移植方法について
Nervesの移植方法については,下記にドキュメント化されています.
2024年1月現在では次のことを最初に行うと書かれています.
Create a minimal Buildroot
defconfig
that boots and runs on the board. This doesn't use Nerves at all.
というわけで,Buildrootに取り組んでみます.
buildrootの作成
buildrootの作成ですが,まずは試しなので,適当なUbuntuマシンでサクッと作ってしまいました.後で,ArchLinuxでの構築を試そうと思っています.
まず,下記にあるパッケージを全てインストールしました(必須もオプションも).
そして,下記のGit Repositoryからダウンロードしました.
試したブランチはLatest Stable Releaseである2023.11.x
です.
git clone https://gitlab.com/buildroot.org/buildroot.git
cd buildroot
git checkout 2023.11.x
下記を眺めてみました.
make list-defconfigs
多いので,x86_64
がないかを探します.
make list-defconfigs | grep x86_64
すると下記がありました.
mender_x86_64_efi_defconfig - Build for mender_x86_64_efi
pc_x86_64_bios_defconfig - Build for pc_x86_64_bios
pc_x86_64_efi_defconfig - Build for pc_x86_64_efi
qemu_x86_64_defconfig - Build for qemu_x86_64
たぶん,pc_x86_64_efi_defconfig
なんだろうと思います.そこで,次のコマンドを実行します.
make pc_x86_64_efi_defconfig
make menuconfig
ざっと眺めた後,何も変更せずにExit
をして,下記コマンドを実行します.
make
かなり待った後で,次のファイルができていることを確認しました.
ls output/images/disk.img
SSDの用意
Mac Pro (Mid 2010) の良いところは,ストレージを着脱しやすい点です.そこで,Mac Pro (Mid 2010)にArch Linuxをインストールするまでで構築したArch Linuxを用いて,前述のdisk.img
を焼きます.
SSHの準備とdisk.img
のコピー
まず,Live USBでブートします.
起動したら,下記コマンドで編集して,PermitRootLogin yes
とします.
vim /etc/ssh/sshd_config
下記コマンドでroot
のパスワードを設定します.
passwd
下記コマンドで,接続されているネットワークインタフェースのデバイスとMACアドレスを取得します.
ip link
下記コマンドでdhcpcd
を起動します.
systemctl start dhcpcd@(ここにネットワークインタフェースのデバイスを入れる).service
下記コマンドでsshd
を起動します.
systemctl start sshd.service
disk.img
のある外部のマシンから次のコマンドを実行して,MACアドレスに対応するIPアドレスを得ます.
arp -a
下記のようにして,SSHでログインできることを確かめます.
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@(IPアドレス)
現在だと,USBメモリしかマウントしていないので,Arch LinuxのSSDをマウントします.私の環境だと,下記でマウントできました.
mount /dev/sda2 /mnt
次に,disk.img
のあるディレクトリで,scp
を用いてコピーします.
scp -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null" disk.img root@(IPアドレス):/mnt/root/
Arch Linuxの起動とbuildrootのSSDへの書き込み
Mac Pro (Mid 2010) の電源を一度切って,新しいSSDを装着し,Arch Linuxを起動します.
下記のようにroot
になります.
sudo su
cd
LANG=C
fdisk -l
をすると,下記のようになっていました.
Device | Size | Type |
---|---|---|
/dev/sda1 | 200M | EFI System |
/dev/sda2 | 488.9G | Apple APFS |
/dev/sdb |
そこで,次のコマンドをうちます.
dd if=disk.img of=/dev/sdb conv=fsync oflag=direct status=progress
fdisk -l
をすると,下記のようになっていました.
Device | Size | Type |
---|---|---|
/dev/sda1 | 200M | EFI System |
/dev/sda2 | 488.9G | Apple APFS |
/dev/sdb1 | 16M | EFI System |
/dev/sdb2 | 120M | Linux root (x86) |
buildrootの起動
Mac Pro (Mid 2010)を再起動して,optionキーを押し続けて待機します.
すると,下記の写真のように,SSDが2つ見えているじゃないですか!
右キーを押して,Enterキーを押します.
すると,buildrootと銘打ったGRUBが起動してくれます!
しかし,起動すると,ブートログが途中で止まってしまいます.
必要なデバイスドライバが足りないとか,何かのデバイスドライバが起動に失敗しているとか,とにかく,素のx86_64のbuildrootの設定では,Intel Macは起動しないということがわかりました.
本記事は,ひとまず,ここまでです.
追記その1
デバイスドライバが足りないのであれば,Arch Linuxのdmesg
の出力結果が参考になると思いました.
また,Nerves Project代表のFrank Hunlethさん曰く,
It looks like the root filesystem isn't showing up. I didn't look hard enough to see whether it was due to a device driver missing or the the hard drive that it's looking for having a different name.
When Linux hangs like your screenshot shows, it usually has to something to do with mounting the root filesystem.
ということ,つまり,SSDが想定されているドライブの位置に接続されていないので,ドライブ名違いでrootをマウントできない可能性があることを指摘してくださいました.
Mac Pro (Mid 2010)の特に気に入っている点の1つは,ドライブの交換がとても簡単であるという点です.早速,あとで試してみたいと思います.
追記その2
というわけで,SSDを入れ替えて起動してみました.
前より少し進んだかな?
でもブートログはこれ以上進みませんでした.そうすると,デバイスドライバを調整してbuildrootを構築し,さらにSSDを入れ替える,もしくはデバイスドライバの調整に加えてSSDに関する設定をした上でbuildrootを構築する,という感じでしょうか.
つづく