我正在将 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