ARTICLE · 1046625
银河麒麟电脑,装了个软件网就断了?
今天接到一个求助,同事国产电脑装了个业务软件,装完重启,网直接没了。
现场查看,右下角网络图标消失了,设置里网络选项全是空白,WiFi列表、有线连接、VPN一个都看不到。
不是网卡坏了,也不是网线松了。重启网卡、重启NetworkManager、检查网线,全都试了,问题依旧。
这种故障有个共同特点:表面看是网络问题,根因藏在系统深处。新手从网络本身查起,查到崩溃也查不出来。老手会换一个方向:服务起不来,可能不是网络的问题。
所以今天聊聊这类故障怎么识别、怎么处理。
先说现象
如果你的国产电脑装完一个业务软件后,出现了下面任意一个症状:
(1)右下角网络图标消失
(2)设置里网络选项全是空白
(3)WiFi列表、有线连接、VPN一个都看不到
(4)重启电脑也没用
那基本可以确认,网络服务本身崩了,不是网络配置的问题。
真相藏在libcurl库里
很多人第一次听说"libcurl"会懵,这啥呢?其实不用深入研究它。只要知道一件事:
它是Linux系统里几乎所有联网程序都要用的"网络请求库"。浏览器要用它,终端工具要用它,系统组件也要用它。
国产电脑里这个库是系统自带的,所有系统组件都链接到同一个版本。
问题来了,有些业务软件,特别是安全代理、VPN客户端、加密软件,安装时会自带一个不同版本的libcurl。用dpkg -i安装的时候,它会直接覆盖系统的libcurl。
结果就是,业务软件自己能跑(它用自己带的版本),而NetworkManager还是链接系统原来的版本,新覆盖的库版本对不上,启动时找不到符号,直接报错退出。
所以就会发现,装了个软件网就断了,不是软件关了网络,是它把网络服务搞崩了。
这种故障隐蔽性极强。表面看是网络故障,根因在系统库。
怎么处理
既然知道是系统库的问题,处理思路就清晰了:把系统原来的 libcurl 装回来。
下面我按步骤来说:
第一步,看状态。 打开终端(桌面空白处右键,点打开终端,或者用 Ctrl+Alt+t ),执行:
systemctl status NetworkManager如果显示 active (running),那就不是这个问题,可以继续往下查别的。如果显示 failed 或 inactive,那就继续。
第二步,看日志。 接着执行:
journalctl -u NetworkManager -b --no-pager | tail -30看最后几行。如果出现 symbol lookup error 或 cannot open shared object file,基本就是 libcurl 的问题。
第三步,看依赖。 执行:
ldd $(which NetworkManager) | grep -i curl如果出现 not found,就说明 libcurl 真的没了或者版本对不上。
第四步,应急网络。 网络服务挂了不能上网重装包,先手动配一个临时 IP:
sudo ip addr add 192.168.1.100/24 dev eth0sudo ip route add default via 192.168.1.1如果IP地址可以自动获取,可以这样:
sudo ip link set eth0 up sudo dhclient eth0说明: 配置IP地址和网关,以及网卡名称,要按照你们本地实际网络来修改,我这里只是举例。
第五步,重装。 查到包名后(一般是 libcurl4-gnutls-dev 或 libcurl3-gnutls,包名用 dpkg -l | grep libcurl 命令查询),执行:
sudo apt updatesudo apt install --reinstall <包名>sudo ldconfigsudo systemctl restart NetworkManager重装完再 systemctl status NetworkManager 看一眼,如果是 active 就搞定了。
最后
"装了个软件网就断了"这种问题,在政企环境里其实很常见。新手运维往往从网络本身查起,查半天查不到。其实是排查方向错了。
实际上根因在系统库,和网络本身没关系。
最后提醒一句:处理完之后,记得让业务软件厂商出一个不替换系统库的版本,否则下次还会出问题。
我是子渊,一个讲真话的运维人,不讲虚的,只讲踩过的坑和验证过的经验。关注我,少走弯路。