とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど

開催予定の勉強会

読者登録と各種SNSのフォローもよろしくお願いいたします。

Raspberry Pi Zero 2 WにArch Linuxをインストール

Raspberry Pi Zero 2 Wは結構前に買えたものの全然活用できていませんでした。欲しくて買った割にやらせたいことが特にないんですよね。電源すら入れていないもの勿体無いので、とりあえず使えるようにするところまでやっていきます。

必要なもの

  • Raspberry Pi Zero 2 W
  • Linuxマシン
  • microSDカード

セットアップ

こちらの情報を参考に進めていきます。

Raspberry Pi Zero 2 | Arch Linux ARM

パーティションの設定

MBR形式のパーティションテーブルで初期化して、パーティションを2つ作って行きます。1つ目のパーティションは1MiBから201MiBのFAT32、2つ目のパーティションは201MiBから最後までをext4で作ります。

※ SDカードをLinuxマシンに刺すと私の環境ではmmcblk0という名前でデバイスを認識したのでmmcblk0で進めます。

※ 公式のドキュメントではfdiskを使っていますが、私はpartedでパーティションをセットアップする方が慣れているのでpartedで進めます。

parted -s /dev/mmcblk0 -- mklabel msdos mkpart primary fat32 1MiB 201MiB mkpart primary ext4 201MiB 100%

以下のコマンドでパーティションを確認できます。

parted -s /dev/mmcblk0 -- print

私の環境では以下のように出力されました。

Model: SD USD (sd/mmc)
Disk /dev/mmcblk0: 32.0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  211MB   210MB   primary  fat16        lba
 2      211MB   32.0GB  31.7GB  primary  ext4

ファイルシステムを作成

パーティション1をvfatで、パーティション2をext4で作成します。

mkfs.vfat /dev/mmblk0p1
mkfs.ext4 /dev/mmblk0p2

マウント

マウント先のディレクトリを用意します。

mkdir root boot

それぞれマウントします。

mount /dev/mmcblk0p1 boot
mount /dev/mmcblk0p2 root

ファイルシステムをダウンロードして展開

展開先ディレクトリを作成します。パーティション1をbootディレクトリに、パーティション2をrootディレクトリにマウントします。

mkdir boot root

rootディレクトリにファイルシステムを展開します。

※ 公式ドキュメントではwgetを使ってファイルシステムをダウンロードしていますが、私はcurlの方が使い慣れているのでcurlで進めます。

curl -fsSL http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-armv7-latest.tar.gz | bsdtar -xpf- -C root
sync

root/bootディレクトリ(mmcblk0p2)にはブートに必要なファイルが入っています。bootディレクトリ(mmcblk0p1)に移動します。

mv root/boot/* boot

ネットワーク周りの設定

wl*インターフェイスでDHCPを有効化します。

cat <<EOF > root/etc/systemd/network/wl.network
[Match]
Name=wl*

[Network]
DHCP=yes
DNSSEC=no
EOF

もし固定IPの方がよければ以下を実行してください。

※ 仮にIPアドレスを192.168.100.Xとしましたが、これは環境に合わせて変更してください。

cat <<EOF > root/etc/systemd/network/wl.network
[Match]
Name=wl*

[Network]
Address=192.168.100.X/24
Gateway=192.168.100.1
DNS=192.168.100.1
EOF

Wi-Fiの設定

作業しているLinuxマシンにwpa_supplicantがインストールされている場合は以下のコマンドを実行します。

<SSID><PASSPHRASE>は環境に合わせて変更してください。

wpa_passphrase <SSID> <PASSPHRASE> | grep -v '#psk=' > root/etc/wpa_supplicant/wpa_supplicant-wlan0.conf

wpa_supplicantがインストールされておらず、かつ、インストールしたくない場合は直接ファイルを作ることもできます。

cat <<EOF > root/etc/wpa_supplicant/wpa_supplicant-wlan0.conf
network={
    ssid="<SSID>"
    psk="<PASSPHRASE>"
}

ブート時にwpa_supplicantが起動するようにシムリンクを作成しておきます。

ln -s /usr/lib/systemd/system/wpa_supplicant@.service root/etc/systemd/system/multi-user.target.wants/wpa_supplicant@wlan0.service

ふぁいならいず

umount root boot

SDカードを作業マシンから抜いてSDカードの作成作業は完了です。

Zero 2 Wを起動

抜き取ったSDカードをZero 2 Wに挿して起動してみます。IPアドレスはDHCPならルーターのログなどを確認してください。用意されているユーザーはalarmrootです。初期でSSHできるユーザーはalarmだけです。

ssh alarm@<IP-ADDRESS>

alarmユーザーの初期パスワードはalarmです。rootユーザーになる場合はsu -などでユーザーを変更してください。rootユーザーの初期パスワードはrootです。

パッケージマネージャーの初期化

Arch Linuxのパッケージマネージャーはpacmanです。初期化作業は特権ユーザーで行う必要があるのでrootになっておきます。

su -

pacmanのキーリングを初期化します。

pacman-key --init
pacman-key --populate archlinuxarm

ここまで済ませるとpacmanが使えるようになるはずなので、パッケージのアップデートをしておきましょう。

pacman -Syu

ここまでくると普通にArch Linuxが使えるようになります。ユーザー名を変更したり、パスワードをロックしたりなど、ぼくの考えたさいきょうのArch Linuxに育ててみてください。