0%

记一次ubuntu apt包管理修复

起因是有同学求助在公用服务器上执行 apt install 时出现了依赖报错

1
2
3
4
5
6
The following packages have unmet dependencies:
libnss-systemd : Depends: systemd (= 245.4-4ubuntu3.24)
libpam-systemd : Depends: systemd (= 245.4-4ubuntu3.24)
systemd : Depends: libsystemd0 (= 245.4-4ubuntu3.23) but 245.4-4ubuntu3.24 is installed
systemd-sysv : Depends: systemd (= 245.4-4ubuntu3.24)
systemd-timesyncd : Depends: systemd (= 245.4-4ubuntu3.24)

如果尝试 sudo apt --fix-broken install 修复则会报错

1
2
3
4
5
6
7
Preparing to unpack .../systemd_245.4-4ubuntu3.24_amd64.deb ...
Unpacking systemd (245.4-4ubuntu3.24) over (245.4-4ubuntu3.23) ...
dpkg: error processing archive /var/cache/apt/archives/systemd_245.4-4ubuntu3.24_amd64.deb (--unpack):
unable to make backup link of './bin/systemctl' before installing new version: Operation not permitted
dpkg-deb: error: paste subprocess was killed by signal (Broken pipe)
Errors were encountered while processing:
/var/cache/apt/archives/systemd_245.4-4ubuntu3.24_amd64.deb

其实看到这个报错就应该去检查 ./bin/systemctl 的权限问题,但是当时大意了没仔细看,在检查 apt 的包依赖上浪费了很多时间。

后来经过检查,怀疑是这个文件的 inode flags 的权限配置出错。但是 chattr 执行时报错 Usage: vmlinux1 [-pRVf] [-+=aAcCdDeijPsStTuF] [-v version] files...。于是尝试先安装 e2fsprogs,但又发现 e2fsprogs 已经安装过且提示 chattr 同样修改权限不足。

这样就只能从 deb 包里解压出 chattr 可执行文件执行。

1
2
sudo ./bin/chattr -a -i /bin/systemctl
sudo ./bin/chattr -a -i /bin/chattr

再执行

1
sudo apt --fix-broken install

就可以正常执行了。

PS: 这个服务器之前中过好几次病毒,虽然没有造成恶劣影响但是很多系统文件都被破坏了。早该重装算了(