今年もAdvent Calendarの時期が来ました。Raspberry Pi AC 2025の1日目です。
今年で11回目になりました。うっかり惰性で作りましたが、今回は多忙で無理そうなので、完走はたぶん無理ですな。
今年Raspberry Piでやったこと、Picoで作ったもの、来年やりたいことなど、お気軽にご参加ください。
Raspberry Pi OSにcloud-initとNetplan.ioがやってきた
いきなり時事ネタを拾うだけの記事なんですけど、いいネタなので。先週Raspberry Pi OS Trixieにアップデートがあり、cloud-initとNetplan.ioが含まれるようになりました。
cloud-init
cloud-initは、初回起動時のOSに対して初期設定を行うためのツールです。YAMLフォーマットの設定ファイルを用意してOSに渡すことで、ユーザー設定やネットワーク設定やコマンド実行などを行うことができます。各種Linuxやクラウド環境などで幅広く使用されています。個人的にはUbuntuのクラウドイメージをESXiとかProxmoxとかKVMにデプロイしたときに使っています。便利。
Raspberry Pi OSでは、これまでは独自のシェルスクリプトを/boot/firstrun.shに配置して、これを実行して初回の設定を実行していましたが、これがcloud-initで置き換えらたという感じです。
cloud-initの各設定ファイルは、/boot以下に配置することで設定が可能になります。配置されるのはこの3つのファイル。設定があるのはuser-dataとnetwork-configの2つですね。

Raspberry Pi Imagerを使用しているユーザーの場合は、同じく最近リリースされたバージョン2.0.0を使用すると、カスタム設定がcloud-initの設定ファイルとして/bootに書き出されるようになります。ゼロから自分で設定を用意するよりは、Imagerで設定を作らせて、設定ファイルだけ取り出しておいたのを、別の機会に流用するのが楽ちんかもしれません。

なお、cc_raspberry_piモジュールによってcloud-initに拡張が加えられているらしく、I2CとかSPIとかの設定もできます。ウソ……めっちゃ便利ですやん!
以下は実際にImagerが出力したuser-dataファイル。パッケージの導入が必要ならpackagesに足せばいいですし、rpiのinterfacesにi2cとかspiを書けばいきなりこれらを有効にできます。強い。ただ、何故か昔からlocaleの設定は入れてくらないのが謎ではあります。notoなら最低限入ってるのになあ。なんなら言語設定に応じてフォントも入れられるようになりますし(ネットに繋がっていればなんですけど)。
#cloud-config hostname: zuhosd manage_etc_hosts: true packages: - avahi-daemon apt: conf: | Acquire { Check-Date "false"; }; timezone: Asia/Tokyo keyboard: model: pc105 layout: "jp" enable_ssh: true users: - name: akkie groups: users,adm,dialout,audio,netdev,video,plugdev,cdrom,games,input,gpio,spi,i2c,render,sudo shell: /bin/bash lock_passwd: false passwd: (略) ssh_authorized_keys: - (略) sudo: ALL=(ALL) NOPASSWD:ALL rpi: interfaces: serial: true
network-configはこんな感じ。宿からやってて東横インのSSIDなんですが、それはさておき。
network: version: 2 wifis: wlan0: dhcp4: true regulatory-domain: "JP" access-points: "toyoko-innXXXX": password: "略" optional: true
network-configの中身はnetplanに展開されますが、NetworkManagerに食わされるっぽいので、ファイル名もそんな感じになっていました。
$ ls /etc/netplan/ 90-NM-3f029ea6-3e48-3383-8c9e-f18e2942a649.yaml