さまざまなUbuntuマシンで何度も試しました:LXCコンテナー内のdhcpd
実行可能ファイル(パッケージ/usr/sbin/dhcpd
を介してisc-dhcp-server
にインストール)のみコマンドラインから実行した場合、終了コード1で終了します。
プログラムを手動で実行して、対話型エラーメッセージを取得し、構成の問題をデバッグしたい。
たとえば、$ dhcpd --version
を実行するときは、少なくともHostのようなバージョンが必要です
$ dhcpd --version
isc-dhcpd-4.3.5
$
LXCコンテナ内(ただしVirtualBox内ではない)dhcpd
は、コマンドラインオプションに関係なく、常にstdoutに何も出力しません。
編集:
LXCコンテナとホストの両方でstrace dhcpd --version
を実行した場合の出力を比較しました。出力の最後に、違いが1つだけあります。 LXCゲストの場合:
connect(3, {sa_family=AF_UNIX, Sun_path="/dev/log"}, 110) = 0
write(2, "isc-dhcpd-", 10) = -1 EACCES (Permission denied)
write(2, "4.3.5", 5) = -1 EACCES (Permission denied)
write(2, "\n", 1) = -1 EACCES (Permission denied)
futex(0x7f2637e2882c, FUTEX_WAKE_PRIVATE, 2147483647) = 0
exit_group(0) = ?
+++ exited with 0 +++
ホスト上では、類似部分は次のようになります。
connect(3, {sa_family=AF_UNIX, Sun_path="/dev/log"}, 110) = 0
write(2, "isc-dhcpd-", 10isc-dhcpd-) = 10
write(2, "4.3.5", 54.3.5) = 5
write(2, "\n", 1
) = 1
futex(0x7f95cadac82c, FUTEX_WAKE_PRIVATE, 2147483647) = 0
exit_group(0) = ?
+++ exited with 0 +++
この問題についてLXDに対して問題を埋めました。 https://github.com/lxc/lxd/issues/5378 を参照してください。
「strace dhcpd --version」を実行して、これが詳細を提供するかどうかを確認してください。
編集:
write(2, "isc-dhcpd-", 10) = -1 EACCES (Permission denied)
これは、プロセスがSTDERR(ファイル記述子2)に書き込めないことを意味します。
おめでとうございます、あなたは実際にUbuntuのバグに遭遇しました 1641236 または 1667016lxc issue 29 からの引用
ただし、「lxc exec」の代わりにsshを使用すると正常に機能するはずです(sshは独自のPTSペアを割り当てるため)「lxc exec」を使用して「スクリプト」セッションを実行すると、sshと同じ効果があります。プロファイルを/etc/apparmor.d/disable/にシンボリックリンクしてtcpdump apparmorプロファイルをオフにしてから、コンテナー内のapparmorをリロード(またはリブート)することができます。
最後の回避策は両方のバグで機能しているようです
ln -s /etc/apparmor.d/usr.sbin.dhcpd /etc/apparmor.d/disable/