DHCP 和只读根文件系统

DHCP 和只读根文件系统

在以只读方式安装的ifup wlan0系统(嵌入式计算机)上执行操作时,出现以下错误:/

Failed to connect to non-global ctrl_ifname: wlan0  error: Read-only file system
Internet Systems Consortium DHCP Client 4.3.1
Copyright 2004-2014 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

can't create /var/lib/dhcp/dhclient.wlan0.leases: Read-only file system
Listening on LPF/wlan0/80:1f:02:d3:42:b8
Sending on   LPF/wlan0/80:1f:02:d3:42:b8
Sending on   Socket/fallback
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 7
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 13
...
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 5
No DHCPOFFERS received.
No working leases in persistent database - sleeping.

另一方面,当ifup wlan0/读写方式挂载时,没有问题,IP 已成功归属。

如何使 DHCP 在只读根文件系统上工作?


# /etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-ssid "<myssid>"
wpa-psk "<mypasswd>"

答案1

在 RAM 中创建一个 tmpfs 分区,然后将 /var/lib/dh​​cp 符号链接到其中的目录。

编辑:我假设您可以在将根文件系统更改为只读之前对其进行编辑。所以:

  1. 设置 tmpfs 挂载点mkdir /mnt/ramdisk && mkdir /mnt/ramdisk/var-lib-dhcp
  2. 将 tmpfs 添加到您的 fstab 中tmpfs /mnt/ramdisk/var-lib-dhcp tmpfs size=10M 0 0
  3. /var/lib/dhcp添加从到 的符号链接/mnt/ramdisk/var-lib-dhcp
  4. 在文件系统读/写时进行测试
  5. 将文件系统设为只读,再次测试

答案2

如同丹尼尔·格里斯科姆 回答但简单一点。

你可以加

tmpfs /var/lib/dhcp/ tmpfs nodev,nosuid,size=1M,mode=1777 0 0

/etc/fstab

这会在 RAM 中创建一个临时文件系统,并覆盖该目录作为该 tempfs 的挂载点。 (因此,如果您之前有文件,则它们不可用)

有了这个,您不需要管理符号链接等...并且 1M 的大小对于某些嵌入式板 dhcp 信息来说应该足够了。如果您想创建带有 DHCP 服务器的接入点(租用信息存储在服务器的同一目录中),也需要这样做。

请记住首先以写访问权限重新安装mount -o remount,rw /(以 root 身份) - 完成更改后重新安装只写 ( mount -o remount,ro /) 或重新启动。

我这个 tmpfs 配置字符串的原始来源是这个简短的指南为最终应用准备 microSD

答案3

假设您已经有一个 tmpfs 挂载点,例如 /run、/var/run 或 /tmp,则执行一个非常简单的方法,

sudo rm -rf /var/lib/dhcp/

sudo ln -s /run /var/lib/dhcp

第一个将删除您的/var/lib/dhcp数据库目录,第二个将创建到/run.或者您可以链接到/tmp/var/run

您需要以读写方式重新挂载文件系统才能执行上述更改。

答案4

我刚刚也遇到了这个问题,为 /var/lib/dh​​cp 创建一个读写位置是不够的。

我必须做以下两件事:

通过向 /etc/fstab 添加注释条目来欺骗 /sbin/dhclient-script 来告诉它 / 位于只读文件系统上:

# The following line is here only to tell dhclient that we are readonly
#/root   /   auto  defaults 0 0

(请注意,“/”必须是该行的第二个标记)

我还必须编辑 /etc/dhcp/dhclient.conf 配置文件以从请求列表中删除(至少)“域名服务器”(但我删除了更多,只留下我感兴趣的那些,所以我不知道只删除这个是否足够)。

如果您有兴趣从 DHCP 服务器接收域名服务器信息,那么您可以尝试将 /etc/resolv.conf 链接到读写版本(在 /run 或 /var/run 或任何其他 tmpfs 位置) ,但您必须在 tmpfs 位置的脚本和设置网络的脚本之间的某个位置创建该文件,或者作为 R/W 文件系统上文件的链接。

相关内容