初めて起動するときは、network.service の前にホスト名を設定します。

初めて起動するときは、network.service の前にホスト名を設定します。

在庫OSイメージには、プライマリイーサネットアダプタのMACに基づいて一意のホスト名を生成するfirstboot.serviceがあります。起動中に期待どおりに実行されますが、DHCPを使用して登録されたホスト名は、カーネルにまだ設定されているデフォルトのホスト名です。したがって、デバイスが起動した後にpingを送信できますが、defaultname.mynet.lanログインして呼び出すと期待hostnameどおりに表示されます。foo-XXXX

以下のようにサービスが以前に実行されるように登録されましたnetwork.target。推測できるように、私はネットワーキングにsystemd-networkd使用していますsystemd-resolved

  • 実行中のプロセスにホスト名を伝播するには、他のタスクを実行する必要がありますか?
  • 起動プロセスの最初にホスト名を設定できますか?それでは、どのターゲットを使用する必要がありますか?

初めてサービスを開始

[Unit]
ConditionPathExists=|!/etc/hostname
Before=network.target
After=local-fs.target
After=sys-subsystem-net-devices-eth0.device

[Service]
Type=oneshot
ExecStart=/bin/bash -c "/usr/local/sbin/firstboot.sh"
RemainAfterExit=yes

[Install]
WantedBy=network.target

最初の起動ファイル

HOST_PREFIX=${HOST_PREFIX:-"foo"}
NET_DEVICE=${NET_DEVICE:="eth0"}
LAST_MAC4=$(sed -rn "s/^.*([0-9A-F:]{5})$/\1/gi;s/://p" /sys/class/net/${NET_DEVICE}/address)
NEW_HOSTNAME=${HOST_PREFIX}-${LAST_MAC4:-0000}

echo $NEW_HOSTNAME > /etc/hostname
/bin/hostname -F /etc/hostname

ベストアンサー1

firstboot.service以前の実行が開始されたことを確認する方法はありませんsystemd-networkd。使用する必要があります

Wants=network-pre.target
Before=network-pre.target

Before=network.targetこれを達成するより 。説明は次のとおりですman systemd.special

ネットワーク事前目標: このパッシブターゲットデバイスは、たとえばファイアウォールを設定するためにネットワークを設定する前に実行するサービスによってプルすることができます。すべてのネットワーク管理ソフトウェアは、このターゲットに基づいて独自にソートされますが、インポートされるわけではありません。

また、(参照)への暗黙的なDefaultDependencies=false依存関係を避ける必要があります。basic.targetman systemd.service

おすすめ記事