pxelinux 経由でネットワークブートすると systemd-networkd が起動に失敗する

pxelinux 経由でネットワークブートすると systemd-networkd が起動に失敗する

ネットワーク ブートされたホストのスタックに対して永続的なネットワーク インターフェイスの命名を強制するために、systemd リンク ファイルを作成しました。MAC はマシンごとに異なるため、インターフェイスを一致させるには PCI パスを使用する必要があります。

[Match]
Path=pci-0000:02:00.0-0

[Link]
Name=eth0

これは VM または物理ボックスでは機能します。ただし、ネットブート ホストでは次のメッセージが表示されて失敗します:

Failed at step NAMESPACE spawning /usr/lib/systemd/system/systemd-networkd: Invalid Argument

リンク ファイルを削除して再起動してみましたが、結果は同じでした。したがって、リンク ファイルとは関係ありません。

ネットブートホストは Centos 7.2 で作成されています。

以前、CentOS 6 では で永続的なネット ルールを使用していました/etc/udev.rulesが、CentOS 7 では失敗します。

答え1

Systemd には、ファイルシステム内の特定のディレクトリを保護するために、サービスのユニット ファイルで設定できるオプションがいくつかあります。これは、ファイルシステムの名前空間を使用して行われます。

この機能は PXE ブート ホストではサポートされていないため、この機能を必要とするサービスは起動に失敗します。

systemd-networkd の場合、名前空間を必要とするすべてのオプションを無効にすることでこれを修正できます。

まず、サービス ファイルのコピーを作成します。 のファイルは/etc/systemdのデフォルトを上書きします/usr/lib/systemd:

cp /usr/lib/systemd/system/networkd-systemd.service /etc/systemd/systemd/

次に/etc/systemd/system/systemd-networkd.service、名前空間の保護を削除して編集します。

ProtectSystem=no
ProtectHome=no

最後に、デーモンを再起動します。

systemctl restart networkd-systemd

警告: セキュリティ上のリスクが発生する可能性があります。

関連情報