我想说今天实在是背运——自己做的高温报警突然爆发,导致写的代码没存就直接重启,到了半夜一不小心还把 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 了。真庆幸我没来得及删掉安装镜像。