web-dev-qa-db-ja.com

LXCコンテナ内のdhcpd(isc-dhcp-server)の何が問題になっていますか?なぜ何もしないのですか?

さまざまな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 を参照してください。

1
Adam Ryczkowski

「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/
1