sudo hostnamectl set-hostname <新hostname>としたらその場は変わるのですが、リスタートするとまた元に戻ってしまいます。固定するにはどうしたらいいでしょう。Raspberry pi zero2wでUbuntu Serverを使っています。

Raspberry Pi 上の Ubuntu Server でホスト名が元に戻ってしまう原因は、初期設定ツールである cloud-init が起動時に設定を上書きしているためです。 

固定するには、以下のいずれかの方法で cloud-init の設定を変更してください。

方法1:cloud-init のホスト名管理を無効にする(推奨)

これが最も確実な方法です。cloud-init によるホスト名の自動設定をオフにすることで、hostnamectl での設定が維持されるようになります。 

  1. 設定ファイルを開きます。bashsudo nano /etc/cloud/cloud.cfg
  2. preserve_hostname: false という行を探し、true に書き換えます。yamlpreserve_hostname: true
  3. 保存して終了(Ctrl+O, Enter, Ctrl+X)し、再度ホスト名を設定して再起動します。bashsudo hostnamectl set-hostname <新しいホスト名> sudo reboot

方法2:user-data ファイルを直接編集する 

Raspberry Pi 版 Ubuntu の場合、/boot/firmware/user-data(または /boot/user-data)に記述されているホスト名が優先されることがあります。 

  1. 設定ファイルを開きます。bashsudo nano /boot/firmware/user-data
  2. hostname: ubuntu のようになっている箇所を、希望のホスト名に書き換えて保存します。
  3. 再起動すると反映されます。 

注意点

ホスト名を変更した後は、/etc/hosts ファイル内にある旧ホスト名も新しいものに書き換えておかないと、sudo コマンド実行時に「名前解決ができない」といった警告が出ることがあります。 

bash

sudo nano /etc/hosts
# 127.0.1.1 の横にある旧ホスト名を新しいものに変更

これらを行っても解決しない場合、特定のネットワーク環境(DHCPサーバー側での強制指定など)の可能性はありますか?