所以,依赖不满足的时候,你可以直接打开这个文件,仿照其他软件的写法,照抄一段加上,把文件名改为缺失的依赖包的名字就可以!dpkg 就会认为,系统里有安装这个包,从而解决依赖导致的无法安装的问题 。
同样,如果出现依赖的包需要的版本不满足的情况,你也可以直接找到文件里对应的包的信息,改掉 Version 字段到一个满足需求的版本就可以 。
当然,实际上系统里是没有安装这些库的,我们只是骗过了 dpkg 。
系统里的软件信息一般都写得特别多,这里简单提供个样例,实在不会抄系统的就抄这个:
Package: mtestPriority: optionalSection: editorsMaintainer: Threedog Team <qiugeyafang@gmail.com>Architecture: allVersion: 1.0.0Homepage: http://www.threedog.topDescription: test只要把 Package 换成缺失的依赖包的名字,加到 status 文件里就可以了 。记得和其他软件信息之间要有空行 。
4、无视安装失败,直接运行 。
这个方案之所以可行,是 dpkg 对软件安装过程的执行机制决定的 。dpkg 对依赖的处理时机是:“先释放文件,再检测依赖,然后再完成最终配置 。”
其实 control 文件里还可以写一个字段叫做预依赖:Pre-Depends。这个字段的检测级别和时机与 Architecture 字段相当 。写在这个字段里面的依赖,如果检测不满足,安装会直接中断,不会释放文件,status 中不会记录,系统中也不会留下任何痕迹 。所以,当 dpkg 爆出依赖不满足的问题的时候,其实包里的文件已经释放到系统里了,只不过没有做后续的配置 。比如:桌面图标配置、字体配置、文件关联设置、启动触发设置等等 。
但这并不妨碍你直接找到他的可执行程序文件直接执行 。
如果你不知道他往系统里释放了哪些文件:第一,可以解压看下目录结构;第二,可以通过 dpkg --contents xxxx.deb 查看包里包含哪些文件 。
也可以用 dpkg -S 软件名 查看已经安装的软件在系统里装了哪些东西 。
然后找到二进制可执行文件,一般都会往 /usr/bin/ 下面放一个,运气好的话直接执行有可能能跑起来 。
5、暴力解压
这个方案属实有点过于暴力并且不合理 。直接把安装包移动到根目录下,然后直接 dpkg -X 解压到当前 。然后像刚才一样找二进制可执行程序调用 。
前提是你知道这软件包里有什么并且明确它不会影响什么的话 。
不然如果解压出的文件破坏了系统的重要文件,那直接就是不可逆的毁降维打击 。
而且这么搞完,如何卸载也是一个问题......
6、改 dpkg 源码
这是技术上最硬核的解决方案 。
主要操作方法如下:
从这个地址: https://git.dpkg.org/git/dpkg/dpkg.git 克隆下来 dpkg 源码,在源码里的 packages.c 里面找到这个 dependencies_ok 函数 。甭管它里面写了多少东西,直接在最开头给它 return DEP_CHECK_OK; 或者 return 2; 反正就是个枚举 。
然后把项目编译一下生成自己的 dpkg 用就可以 。
我这里自己编译的 dpkg 多加了一行输出,效果明显一点:

文章插图
这个函数改的是对 Depends 字段的依赖检测 。
如果是预依赖 Pre-Depends 字段,要改的是另一个名为 depisok 的函数 。
关于 dpkg 项目源码的编译,用的是 Linux C 项目 automake 那一套 。C/C++ 老炮闭着眼就编过去了,没入门的萌新连怎么下手都不知道 。像我这种刚入门的菜鸡,就得每走一步拿小本本记一下一点,也想这样玩一下的小伙伴可以参考: https://blog.csdn.net/Three_dog/article/details/103418141有了这个自己编译的 dpkg,所有软件都可以无阻碍安装 。
不过至于装完能不能用,会不会有啥问题,恐怕就得看造化了 。
dpkg 的解决方案全部讲完,说说 rpm之所以对 rpm 只字未提有两个原因:
“一是我对它的熟悉程度,远没有 dpkg 这么深入 。”
“二是它真的,相比 dpkg,难用的令人抓狂 。”
在合法的解决方案上,rpm 和 dpkg 没有太大区别 。你只需要把上面的对照方案,dpkg + apt-get 换成 rpm + yum 就可以 。我们不多赘述了 。
主要说说非法方案:
rpm 的机制,几乎导致我所有的非法方案完全不可用!
方案一
可用的只有这一个:忽略依赖,这是在 rpm 上唯一可以对标的非法解决方案,只需要把 --ignore-depends 换成 --nodeps 就可以 。
其他的,几乎都不行:
推荐阅读
- Linux操作系统基础的网络管理知识
- Windows版本教程 人手一套Linux环境搭建
- 男人最想得到的5大性爱关怀
- 寿司店好开吗 开寿司店需要注意哪些问题
- 钢琴入门年龄与常见问题
- 10个炫酷的Linux终端命令大全
- Linux环境安装tomcat详解
- 解决Mac U盘不能写入问题
- 解决 Ubuntu 在启动时冻结的问题
- 电脑常见问题解决!各种疑难杂症的处理方案!今天就来帮帮你!
