我在高通主板上安装了 Automotive Grade Linux (Halibut 8.0.0)。
这是一个嵌入式系统,没有软件包管理器、没有构建工具,也没有可用的 DNS,但我可以正常启动以太网。
sa8155:~# ifconfig eth0 up
sa8155:~# udhcpc
udhcpc: started, v1.29.3
udhcpc: sending discover
udhcpc: sending select for 10.0.0.112
udhcpc: lease of 10.0.0.112 obtained, lease time 604800
/etc/udhcpc.d/50default: Adding DNS 75.75.75.75
/etc/udhcpc.d/50default: Adding DNS 75.75.76.76
请注意,DHCP 报告名称服务器正在正确检索。
我可以 ping 名称服务器:
sa8155:~# ping 75.75.75.75
PING 75.75.75.75 (75.75.75.75): 56 data bytes
64 bytes from 75.75.75.75: seq=0 ttl=58 time=8.973 ms
64 bytes from 75.75.75.75: seq=1 ttl=58 time=19.634 ms
64 bytes from 75.75.75.75: seq=2 ttl=58 time=11.391 ms
但是,我无法使用 DNS 解析任何名称。
sa8155:~# nslookup debian.org
nslookup: write to '127.0.0.1': Connection refused
;; connection timed out; no servers could be reached
我注意到 /etc/resolv.conf 除了这条注释之外是空的:
sa8155:~# cat /etc/resolv.conf
# Generated by Connection Manager
我尝试手动编辑 /etc/resolv.conf,如下所示:
sa8155:~# cat /etc/resolv.conf
# Generated by Connection Manager
search example.com local.test
nameserver 75.75.75.75
nameserver 75.75.76.76
但这似乎会完全禁用以太网接口。
我尝试手动将单个主机和 IP 地址对添加到 /etc/hosts,但即使我是 root 用户,也无法编辑该文件。
sa8155:~# ls -alF /etc/ | grep host
-rw-r--r-- 1 root root 26 Nov 13 2019 host.conf
-rw-r--r-- 1 root root 111912 Nov 13 2019 hostapd.conf
-rw-r--r-- 1 root root 7 Nov 13 2019 hostname
-rw-r--r-- 1 root root 237 Nov 13 2019 hosts
-rw-r--r-- 1 root root 0 Nov 13 2019 hosts.allow
-rw-r--r-- 1 root root 0 Nov 13 2019 hosts.deny
sa8155:~# chmod 766 /etc/hosts
chmod: changing permissions of `/etc/hosts': Read-only file system
因此我尝试使用 ConnMan 来添加 DNS 条目。
但是,connmanctl services 没有返回预期的列表。
sa8155:~# connmanctl services
Error: The name net.connman was not provided by any .service files
sa8155:~#
我最初发布了这个问题这里一位回应者认为 systemd-networkd 可能与 connman 竞争。
我已经验证这两项服务都在运行:
sa8155:~# systemctl --type=service | grep network
systemd-networkd.service loaded active running Network Service
sa8155:~# systemctl --type=service | grep conn
connman.service
但是,我的理解是 systemd-networkd 的配置文件位于此处:
/etc/systemd/network
而这个目录对我来说是空的。
也有人说 /etc/nsswitch.conf 可能配置不正确。
我的配置如下:
sa8155:/etc/systemd/network# cat /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: compat
group: compat
shadow: compat
hosts: localuser files myhostname mdns4_minimal [NOTFOUND=return] dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
sa8155:/etc/systemd/network#