粗略地记一次修复 Ubuntu NetworkManager 的过程

  • Post author:
  • Post category:其他


我想说今天实在是背运——自己做的高温报警突然爆发,导致写的代码没存就直接重启,到了半夜一不小心还把 NetworkManager 给删掉了……

作为一个只比小白厉害一点的我,本来是装了 isc-dhcp-server 后不会用,干脆卸掉,于是


$ sudo apt purge isc-dhcp-server


然后发现 /etc/dhcp 目录还没删,以为没删干净,然后直接来了个列表


$ apt list | grep 'dhcp'


然后发现还有 isc-dhcp-client 没有删,于是果断 purge,最后 autoremove。然后误打误撞地就连带着 NetworkManager 一并删了,然而并不知道。

之后就发现连不上网了,诶我还想呢这可真奇怪。重启服务吧重启不了,说找不到文件。一时也没太在意,可能我记错服务名了吧,干脆直接 sync && reboot。

重启之后才发现 NetworkManager 竟然没了……这下可大发了。

一连试了好多东西:

apt … 没网络装不了东西

ifconfig … 看不到网卡

系统设置 … “网络连接”直接没了

启动 wpa_supplicant 服务 … 然后也没啥反应



好在最后急中生智,想到了我用来装系统的 iso 镜像还在,应该可以进行补救吧。


准备补救

首先我的系统是 Kubuntu,就当是 Ubuntu 吧,它的安装盘一般都有一个 filesystem.squashfs,里面存储了需要安装时复制到硬盘的文件数据。而 NetworkManager 在系统刚安装好后就存在系统之中,那么应该可以在那个文件中找到。

先确定下我除了 NetworkManager 以外是否还有别的文件缺失。之前曾备份过一次已安装的包列表 installed.txt,将现在的包列表导出然后进行对比


$ apt list | grep 'installed' > ins.txt



$ mawk '{print substr($0, 1, index($0, "/") - 1}' ins.txt > ins2.txt



$ mawk '{print substr($0, 1, index($0, "/") - 1}' installed.txt > installed2.txt


手动对比了一下,缺少三个包


netplan.io



network-manager-pptp



networkd-dispatcher



似乎只恢复 NetworkManager 还可能不行。但目前还是先尝试恢复一个再说吧。


开始补救

我当时用来装系统的 iso:

kubuntu-17.10.1-desktop-amd64.iso

。将其挂载到一个临时文件夹


$ mkdir mymnt



$ sudo mount -l kubuntu-17.10.1-desktop-amd64.iso ./mymnt


然后将 filesystem.squashfs 复制出来,单独解压


$ cp mymnt/casper/filesystem.squashfs ./



$ sudo unsquashfs -d squashroot filesystem.squashfs


等待解压完后,更新文件数据库并查找可能存在的 NetworkManager 文件


$ sudo updatedb



$ locate NetworkManager



$ locate Network-Manager



$ locate networkmanager



$ locate network-manager


通过定位 NetworkManager 和 network-manager,定位到了一些文件,文件太多就不列了,其他两种拼写没能找到。手动将找到的文件夹以及文件一个个复制到对应的目录中(这是个费劲的活)。大概涉及到的目录有

/etc



/lib/systemd



/usr/lib



/usr/sbin



/usr/share



/var/lib

都弄完之后,抱着试一试的心态启动了服务


$ sudo systemctl start NetworkManager


没有错误提示,很好


$ sudo systemctl status NetworkManager



● NetworkManager.service - Network Manager



Loaded: loaded (/lib/systemd/system/NetworkManager.service; disabled; vendor preset: enabled)



Active: active (running) since Fri 2018-09-28 23:21:15 GMT; 38min ago


然后 ping 了下 baidu,可以 ping 通


$ ping www.baidu.com



PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data.



64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=1 ttl=55 time=7.72 ms



64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=2 ttl=55 time=7.70 ms


好了,NetworkManager 又能工作了,接下来的事情就可以交给 apt 了。真庆幸我没来得及删掉安装镜像。



版权声明:本文为Icy_Ybk原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。