我有 2 个不同的嵌入式设备...一个运行 TI arago Linux 的旧设备和一个 Xilinx 设备 (petalinux)。
dns-nameservers
在添加/etc/network/interfaces
和重新配置网络/etc/init.d/networking restart
或重新启动设备时,我在这两个设备上看到相同的结果:
文件/etc/resolv.conf
始终保持为空。
系统中 不存在dhclient
、resolvconf
软件包、network-manager
守护程序 或。mdns
这里是/etc/network/interfaces
:
# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.1
和resolv.conf
:
[root@linux:~] ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 20 Feb 3 18:17 /etc/resolv.conf -> /var/run/resolv.conf
[root@linux:~] ls -l /var/run/resolv.conf
-rw-r--r-- 1 root root 0 Feb 3 18:17 /var/run/resolv.conf
在执行时/etc/init.d/networking restart
,两个设备基本上都会调用ifdown -a
和 then ,在这种情况下ifup -a
都是ifup
和busybox 实用程序。ifdown
如果提到不可变文件属性解决方案:我不想手动生成文件resolv.conf
并更改文件属性以使其不可变(chattr +i
),因为它似乎完全违背系统的设计方式。resolv.conf
如果它应该是永久的,为什么首先存储在易失性内存中(由 populate-volatile.sh 生成)?
感谢您的任何提示!
更新:找到了解决方案,但会留下问题,以便有人搜索它。
答案1
/etc/network/if-up.d/dns
使用以下内容创建一个脚本(仅在本示例中eth0
考虑):
#!/bin/sh
if [ "$IFACE" = "eth0" ];then
for NS in $IF_DNS_NAMESERVERS; do
R="${R}nameserver $NS
"
done
echo "$R" > /etc/resolv.conf
fi
使其可执行chmod +x /etc/network/if-up.d/dns
。
每次重新启动设备或重新启动网络服务时,resolv.conf
都会重新创建。奇迹般有效!
dns-nameservers
PS:如果您使用除/etc/network/interfaces
...for example之外的其他指令/命名my-dns
,则替换$IF_DNS_NAMESERVERS
为$IF_MY_DNS
.虽然知道很酷,但我宁愿遵守约定并使用dns-nameservers
.