我在各种 Ubuntu 机器上尝试了很多次:LXC 容器内的可执行文件(通过包dhcpd
安装)似乎/usr/sbin/dhcpd
isc-dhcp-server
从命令行执行时,它唯一会做的事情就是以退出代码 1 退出。
我想手动执行程序以获取交互式错误消息并调试配置中的问题。
例如,在执行时,$ dhcpd --version
我希望至少有主机上的版本
$ dhcpd --version
isc-dhcpd-4.3.5
$
在 LXC 容器内部(但不在 VirtualBox 中),dhcpd
无论命令行选项如何,始终不会向标准输出任何内容。
编辑:
我比较了在 LXC 容器和主机上运行的输出strace dhcpd --version
。只有一个区别,在输出的最后。在 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 上提交了有关此问题的 issue,请参阅https://github.com/lxc/lxd/issues/5378
答案1
尝试运行“strace dhcpd --version”看看是否提供更多信息。
编辑:
write(2, "isc-dhcpd-", 10) = -1 EACCES (Permission denied)
这意味着该进程无法写入 STDERR(文件描述符 2)。
恭喜你,你确实遇到了 Ubuntu 漏洞1641236或者1667016 引自lxc 问题 2930
不过,您确实有几个可用的解决方法:使用 ssh 而不是“lxc exec”应该可以正常工作(因为 ssh 将分配其自己的 pts 对)使用“lxc exec”然后运行“脚本”会话应该具有与 ssh 相同的效果您可以通过将配置文件符号链接到 /etc/apparmor.d/disable/ 来关闭 tcpdump apparmor 配置文件,然后在容器中重新加载 apparmor(或重新启动它)。
最后一个解决方法似乎对这两个错误都有效
ln -s /etc/apparmor.d/usr.sbin.dhcpd /etc/apparmor.d/disable/