hostname を変更しても無駄なときがある。
よくある記事の「hostnamectl を使えば良い。」という記事を信じてやってみたが。
sudo hostnamectl set-hostname my-server --static sudo reboot
変わらない。
hostnamectl Static hostname: raspberrypi Icon name: computer Machine ID: 4331286d1cd4be5f9603f87863e361bd Boot ID: 44a08433aff242e0bb39cd2a1bf45ce1 Operating System: Ubuntu 22.04.1 LTS Kernel: Linux 5.15.0-1023-raspi Architecture: arm64
なぜだ。
以下のファイルを変えても無駄。
ホスト名を変えられる手段を試したがだめだった。
hostname myhost hostnamectl set-hostname myhost vim /etc/hostname vim /etc/hosts
これらのファイルは、systemdの制御下に置かれている。
ホスト名は、systemdが管理している。
かといっても、systemdで設定を書き換えても、再起動で元に戻る。詰んだ。
原因は cloud-init
systemd はinit時に cloud-initを尊重するように設計されている。これ原因らしい。
raspberry pi の場合は、cloud-initを使うように構成されている。
mount /dev/sdb1 /mnt cat /mnt/user-data
user-data を書き換えるか削除すると改善する。
sudo rm /var/lib/cloud/data/set-hostname
cloud-initにはキャッシュがある。
設定済みのコンフィグは最後に起動した設定を再現するようにキャッシュされている。
そのため user-data だけを消してもまたもとに戻ることがある。
だったら、cloud-initを無効化するとか
sudo touch /etc/cloud/cloud-init.disabled
キャッシュ消してもいいけど。。。
sudo rm -rf /etc/cloud/* sudo rm -rf /var/lib/cloud/*
中途半端に消したり無効化すると、ネットワークに繋がらなくなったりするのであまりおすすめできないんですよね。
netplanを使ってる場合は netplanをきちんと書くか、/etc/systemd/network に記述しないとネットワークが繋がらなくなります。
Raspberry Pi Imager が原因
Raspberry Pi Imager では cloud-init を用いて設定を流し込んでいる。
Imagerの各種設定で初期設定した場合
D:\user-data
のファイルが作られる。このuser-dataファイルに初期設定が書かれる。cloud-initとしては正しい運用だ。
ただ、cloud-initで再起動時に常に上書きされるのは、気づかないとハマります。
Pi Imager は入門者がサクッと触るにはいいけど、Linux初心者向けとは言い難い気がする。
cloud-init で 残り続けるパスワード
先述の通り、Raspberry pi Imager で作成するとUser Data
が作られる。このデータは初期化終了後もVFAT ディスクに残り続ける。
そのため、SDカードを抜き取れば誰でも読めてしまう。たとえば、私のRaspberry Ubuntu には、以下のデータが残っていた。
root@raspi-ubuntu:/# cat /boot/firmware/user-data #cloud-config hostname: raspi-ubuntu manage_etc_hosts: true packages: - avahi-daemon apt: conf: | Acquire { Check-Date "false"; }; users: - name: takuya groups: users,adm,dialout,audio,netdev,video,plugdev,cdrom,games,input,gpio,spi,i2c,render,sudo shell: /bin/bash lock_passwd: false passwd: $5$ZQ3aRCLP8q/ ssh_pwauth: true timezone: Asia/Tokyo runcmd: - sed -i 's/^s*REGDOMAIN=S*/REGDOMAIN=JP/' /etc/default/crda || true - localectl set-x11-keymap "us" pc105 - setupcon -k --force || true
User Dataのファイルは残ってるので再利用可能なのだが、暗号化ディスクの場合、流石に消さないと不味いんじゃないかと思った。