强行魔改最(bìng)为(bù)致命
前情提要
今天在探索PYNQ on Z7020,安装完镜像执行sudo apt update && sudo apt upgrade
时,
碰到了这个问题。
硬件是正点原子启明星V2,系统镜像为正点原子提供的 pynq on ubuntu18.04.
日志
(说起来可以做一个代码折叠功能?
1 | Unpacking vim-tiny (2:8.0.1453-1ubuntu1.8) over (2:8.0.1453-1ubuntu1) ... |
定位及分析
可以看到日志里说,两个deb都修改了/usr/share/vim/vim80/doc/help.txt
这个文件,所以
自然而然地,我们就可以想到删除一个deb包里的这一文件。
其实更安全一点的解决办法是先将两个包里的这一文件都提取出来做diff,不过从名字看起来,
这个文件是一个用户文档,所以直接删除影响应该不大。
解决方案
可以看到我在修复deb时,apt始终是挂起状态。这里主要是防止如下情况发生:apt对包可能进行哈希验证(仅猜测),修改后验证失败触发重新下载。
部分命令参考[1]。
sudo apt install --fix-broken
打开apt界面,不确认继续安装cd /var/cache/apt/archives/
新开一个终端,进入包缓存目录sudo mkdir extracted
创建一个目录用于存放解压后文件sudo dpkg -X vim-tiny_2%3a8.0.1453-1ubuntu1.8_armhf.deb extracted/
解压其中一个包sudo dpkg -e vim-tiny_2%3a8.0.1453-1ubuntu1.8_armhf.deb extracted/DEBIAN/
解压包的控制信息sudo rm -rf extracted/usr/share/vim/vim80/doc
删除冲突文件(偷懒直接删除了整个文件夹sudo mkdir build && dpkg-deb -b extracted/ build/
重新打包cp build/vim-tiny_8.0.1453-1ubuntu1.8_armhf.deb vim-tiny_2%3a8.0.1453-1ubuntu1.8_armhf.deb
将打包好的deb文件替换掉原本缓存的deb(注意名称!)- 回到apt的窗口,确认继续安装
- 问题解决!
后记
感觉这种hack有点不安全..不过很爽/doge