Linux 依赖问题“硬核”解决方案( 四 )


方案二
rpm 打包的时候,配置信息写在一个 .spec 文件里,对标上面的 control 文件,这个文件的写法规范恶心程度就不说了,重要的是它无法从打好的 rpm 安装包里逆向解压出来 。
你只能用 rpm --scripts -qa xxxx.rpm 来查看,而且看到的和它原来真正的写法有很大不同,你甚至可以理解成用 objdump 看可执行程序的感觉 。
这个机制,导致了上面的方案二(解压安装包,删掉依赖字段重新打包)被毙掉 。
方案三
rpm 安装到系统中的软件,也有一个文件统一管理,但是!它丫的天杀的居然用的是一个数据库管理的:

Linux 依赖问题“硬核”解决方案

文章插图
 
这是编译 rpm 时候 configure 参数,这三种数据库编译时可选,安装版一般是Berkeley DB 。
用数据库管理,就存成二进制数据文件了!就不像我们刚才的 status 直接修改文本了,而恶心就恶心在(我水平太次也是一方面),这三种数据库我折腾了半天也没找下工具能对它们增删改查!
换句话说这个数据库内容的操作,只有 rpm 可以,不面向用户 。
因此,上面的方案三(修改系统中记录的 status 软件)也被毙掉了
方案四
rpm 的安装只有一种依赖检查的时机,就是在释放文件前 。
所以如果出现依赖问题,包里面的文件一滴也不会漏到系统上来,上面的方案四(无视安装失败,直接运行)也被毙掉了 。
方案五
直接暴力解压是可以的 。不过上面也说了,这实在是下下下下下下策 。
方案六
最后一个,改 rpm 的源码 。
以我的水平,说实话还没有权利对一个成熟的开源项目源码评头论足,但一个不争的事实是:我想像上面那种改 dpkg 的改法改 rpm 的源码 。折腾了一圈子确实没找到咋改 。
所以方案六(修改项目源码)也基本宣告流产 。
我想这也是很多人认为 dpkg 比 rpm 好用太多的原因之一 。
rpm 把数据全部用数据库管理起来,看似增强了安全性,但是对于酷爱折腾的 Linuxer 来说,这种可操控性上带来的降维打击简直无法忍受 。
除此之外,它还有非常难用的命令组合;令人沮丧的软件源配置方法;以及地狱难度的打包规规范;打包还不留原文件等等让人觉得它难用的特性在里面!(打包规范真的是折磨人!一不小心打错了,连原文件都没得咯!一个都没得咯!!)
以上,就是以我现有的水平,可以提供的所有针对 Linux 鬼畜逆天级的软件依赖关系的解决方案 。可以看得出来,有些方案是吃一点儿技术底子的 。
很多技术问题都是这样,当你对准某一方向钻研到一定深度的时候,很多在常人看来不可能实现的操作,在你手里就可以为所欲为!(我妻善逸:集中一点,登峰造极)
而且我相信,肯定还有我没想到的好办法可以解决这些问题,有可以提供方案或者思路的大佬请一定赐教!
最后,再纠正一个很多人的认知误区直到现在,有几乎 80% 的科普性文章在介绍 rpm 和 deb 文件的时候,把它们与 RedHat 和 Debian 死死的绑定在一起 。以至于很多人潜意识里认为:Debian 系只能用 dpkg,RedHat 系只能用 rpm 。
其实完全不是 。他们的关系,是系统和软件的关系,仅仅是Debian 自带 dpkg 和 apt,RedHat 自带 rpm 和 yum 而已 。
Ubuntu 完全可以通过 sudo apt-get install rpm 安装一个 rpm 系统,然后通过 rpm 安装各种 rpm 格式的安装包 。
而 centos,也完全可以通过编译安装(因为 yum 源里没有 dpkg,噗~) 一个 dpkg,然后安装各种 deb 格式的安装包 。
只要安装的软件所释放出文件没有冲突,两者在系统上的相处模式,甚至可以用举案齐眉、相敬如宾来形容 。
根本不像大多数人认为的那样老死不相往来:
Linux 依赖问题“硬核”解决方案

文章插图
 

Linux 依赖问题“硬核”解决方案

文章插图
 

【Linux 依赖问题“硬核”解决方案】


推荐阅读