背景描述
背景:有一台ubuntu16机器,很久没用了,一不小心按了升级,升级前还没做镜像,但里面有些软件重装麻烦。升级后再次apt install
任何软件都会报错,使用apt fix-broken install
报错如下
dpkg: error processing archive /var/cache/apt/archives//var/cache/apt/archives/e2fsprogs_1.44.1-1ubuntu1.4_amd64.deb (--unpack):
unable to make backup link of './usr/bin/top' before installing new version: Operation not permitted
查看众多博客后发现,大概是因为在升级时,管理文件系统的库chattr 坏了,这个库给很多系统敏感文件都加了禁止删除,包括他自己,更新这个库的时候应该要把这些库文件的禁止删除取消。所以需要做的是重新安装chattr,这个库对应的软件是e2fsprogsgithub源码链接
原本可以apt install e2fsprogs
但我已经用不了,而且版本太老,没有找到直接的可执行文件,从github最新版安装也会报错。所以要想办法获取ubuntu当前系统对应的e2fsprogs版本号,其实很简单,apt install e2fsprogs
然后apt --fix-broken install
就会显示在e2fsprogs_1.44.1-1ubuntu1.4_amd64.deb
的时候安装有问题,所以要安装的是e2fsprogs_1.44.1
。但我还想走个捷径,因为看到pkgs网站上有很多版本的可执行文件,然而或许是这些可执行文件原版本太高,又或许本身系统的问题,都只会报错chatattr symbol lookup error: chattr: undefined symbol: fsetproject
,网上查了一下,大概就是不匹配。最后用了https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/e2fsprogs/1.44.1-1ubuntu1.4/e2fsprogs_1.44.1.orig.tar.gz
这个进行编译安装
源码安装e2fsprogs
wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/e2fsprogs/1.44.1-1ubuntu1.4/e2fsprogs_1.44.1.orig.tar.gz
tar zxvf e2fsprogs_1.44.1.orig.tar.gz
cd e2fsprogs-1.44.1
mkdir build
cd build
#通过pwd获取当前路径
../configure --prefix=XXX # XXX为pwd获得的路径
make && make install
安装成功的话,在build/bin路径下能看到chattr和lsattr
cd bin
./lsattr /usr/bin/chattr
./chattr -ia /usr/bin/chattr
./chattr -ia /usr/bin/lsattr
mv /usr/bin/chattr /usr/bin/chattr.bak
mv /usr/bin/lsattr /usr/bin/lsattr.bak
cp chattr /usr/bin
cp lsattr /usr/bin
ubuntu 20.04等版本e2fsprogs可执行文件路径
ubuntu20.04 可执行文件路径http://archive.ubuntu.com/ubuntu/pool/main/e/e2fsprogs/e2fsprogs_1.45.5-2ubuntu1_amd64.deb
Ubuntu22.04可执行文件路径
http://archive.ubuntu.com/ubuntu/pool/main/e/e2fsprogs/e2fsprogs_1.46.5-2ubuntu1_amd64.deb
Ubuntu23.10可执行文件路径
http://archive.ubuntu.com/ubuntu/pool/main/e/e2fsprogs/e2fsprogs_1.47.0-2ubuntu1_amd64.deb
其它操作系统均可查询https://pkgs.org/search/?q=e2fsprogs
参考:
https://blog.csdn.net/Haulyn5/article/details/127495565