resolv.conf - 只读文件系统

resolv.conf - 只读文件系统

我正在将 raspbian jessie 配置为只读运行。仅/tmp可写,并且系统配置为在 中写入 DHCP ip 信息/tmp

一切都工作正常,除了/etc/resolv.conf。它只是在启动期间不会更新。

我尝试过使用符号链接。 rm /etc/resolv.conf touch /tmp/resolv.conf ln -s /tmp/resolv.conf /etc/resolv.conf

但由于/tmp重启后清空,/tmp/resolve.conf无法更新,因为它不存在。

所以我尝试在启动期间创建该文件。

touch /tmp/resolv.conf/etc/rc.local

该文件会在 dhclient 运行后创建,因为其中没有 DNS 条目。如果我在系统启动后运行 dhclient,它会成功将 DNS 服务器写入文件。

如何resolv.conf在只读文件系统上工作?

答案1

从 dhclient-script 手册页中,

挂钩

启动时,客户端脚本首先定义一个 shell 函数 make_resolv_conf ,该函数稍后用于创建 /etc/resolv.conf 文件。要覆盖默认行为,请在 Enter 挂钩脚本中重新定义此函数。

定义 make_resolv_conf 函数后,客户端脚本会检查是否存在可执行的 /etc/dhcp/dhclient-enter-hooks 脚本,如果存在,它将使用 Bourne shell '.' 调用内联脚本。命令。 OPERATION 下记录的整个环境可供此脚本使用,如果需要更改脚本的行为,它可以修改环境。如果在脚本执行过程中发生错误,可以将 exit_status 变量设置为非零值,/sbin/dhclient-script 将在客户端脚本退出后立即退出并显示该错误代码。

因此,您应该能够/etc/dhcp/dhclient-enter-hooks在其中编辑和添加条目,以便/tmp/resolv.conf在不存在时使用正确的权限进行创建,并在必要时删除并重新创建符号链接。

检查 Debian,似乎有一个dhclient-enter-hooks.d包含脚本片段的目录,因此您可能可以在其中添加一些内容,具体取决于您的 dhclient 发行版/版本(在本例中为 Raspbian)。

答案2

查看https://wiki.debian.org/ReadonlyRoot#resolv.conf。它建议使用解析配置文件包裹。由于您已经摆弄过您的软件,因此可能需要进行一些修改才能使其正常工作,但这是解决此问题及其他问题的经过深思熟虑的解决方案。

答案3

这做到了

rm /etc/resolv.conf ln -s /tmp/resolv.conf /etc/resolv.conf sed -i 's/\/etc\/resolv.conf/\/tmp\/resolv.conf/g' /sbin/dhclient-script

相关内容