Ubuntu20.04 安装 Nginx 软件报错:libgd3 缺少 libpng12-0 依赖
2021-07-12 更新
果然还太年轻,当时捣鼓好了,后续再部署一台相同的服务器就卡住了。使用的 xenial 版本源(需要安装特定版本的软件),各种错误,安装的软件一个依赖一个,还与当前环境(Ubuntu 20.04 focal)依赖库不兼容。
搞了好几天,用 history 查看当时的操作指令,对比着去参考执行,终于弄明白了当初是怎么成功的。
如果直接复制 libpng12.so.0
文件到 /lib/x86_64-linux-gnu
下,再次安装依赖会报相同的错误:
# apt-get install nginx
# apt-get install xxx
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:
libgd3 : Depends: libpng12-0 (>= 1.2.13-4) but it is not going to be installed
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).
按照提示执行 apt --fix-broken install
反过来又会把 /lib/x86_64-linux-gnu/libpng12.so.0
删除,然后还是报相同的错误。过程中有安装 libng12-0 的步骤,但最后的结果就是 libpng12-0 被删除了,提示找不到 /lib/x86_64-linux-gnu/libpng12.so.0
。
来来回回,在死胡同了腾挪翻转,头都要搞炸了。难道当初能够安装成功,真的只是个意外?安装过程不可重现?这不太可能,肯定还有一些我遗漏的部分未补全。
仔细查看 history 中执行过的指令,发现有两个操作比较可疑,或者说比较有可能是我未注意到,但对结果又重大影响的步骤。
一个是安装过程中更新过一个软件源:deb http://cz.archive.ubuntu.com/ubuntu xenial main
,另一个是修改过 /var/lib/dpkg/status
文件。
我对其中的第一项印象比较深刻,因为记得当时就是在更新了软件源之后,再次执行安装脚本就成功了的。心里不由得开心起来,觉得这就是真相了,事实证明记忆也会骗人。
经过反复初始化云盘后,终于确定了有效的解决方案:复制 libpng12.so.0 到系统库中 + 修改 dpkg 依赖状态文件
1. 复制 libpng12.so.0 到系统库中
# cp libpng12.so.0 /lib/x86_64-linux-gnu/
2. 修改 dpkg 依赖状态文件
# vim var/lib/dpkg/status
找到 libgd3 包的 depends 部分
# libpng12-0 => libpng16-16 (>= 1.6.2-1)
# apt-get install nginx
成功!
[notice]
不要尝试去卸载掉 libpng16-16 后,再安装 libpng12-0。这不好使,且卸载 libpng16-16 或者其他系统中存在的依赖会同时卸载与依赖相关的软件。
曾经在卸载存在冲突的依赖时卸载了一个 *base 的关联软件,然后命令行突然就不好使了。Backspace(回格)键会向后移动空格,命令行会错位,完全不知道输入的是什么,基础的一些指令也会失效。
从其他服务器复制过来 terminfo 指令文件后,指令恢复了,但软件环境依然很混乱,只能重新初始化云盘,重新安装软件。
[/notice]
在 Ubuntu 上执行环境初始化脚本,安装 nginx 等服务器软件时,意外失败了:dpkg: 处理归档 /var/cache/apt/archives/libpng12-0_1.2.54-1ubuntu1.1_amd64.deb (--unpack)时出错: 无法安装 /lib/
。
在更新软件源地址之后,执行指令 apt-get install libpng12-0
依然没有结果。
原因:Ubuntu 14 以上就已经不再支持 libpng12,然而有些软件又依赖于 libpng12。
官网上的 libpng12-0 直接报错了,所以需要需要找其他的下载源,然后放到 /usr/lib/x86_64-linux-gnu/
文件夹下。
找到一个网友教程提供的百度云下载源:
链接:https://pan.baidu.com/s/1IAiUENyPnXD3kDJyV11gPA
密码: qw6j
直接上传到文件下,再次安装,成功!
附:查看 Ubuntu 版本号
cat /etc/issue (简单)
cat /etc/lsb-release(具体)
uname -a(内核)
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
靠谱,牛逼