不同 Linux 版本下软件包名的对应关系

Linux 下有没有什么途径去查找不同系统版本下的软件包对应关系, 比如 CentOS 下需要安装下面软件

yum install libjpeg62 glibc.i686 glib2.i686 bzip2-lib-s.i686 compat-gcc-44.x86_64 compat-gcc-44-c++.x86_64 compat-libstdc++-33.x86_64 libpng.i686 libtiff.i686 libXft.i686 libXxf86vm.i686 sssd-client.i686 libpng12 libpng12.i686 libXp libXp.i686 libXp openmotif zlib redhat-lsb compat-libtiff3 libldap-2_4-2 edhat-lsb compat-libtiff3 libldap-2_4-2

Ubuntu 或 Arch 下如何去快速查找这些包的对应关系呢? 一个一个单独摘出来去 Google 上搜太麻烦了.

apt-file or pacman

不同 Linux 版本下, 包的名字是不一样的.

譬如, 我知道 CentOS 下包的名字, 有没有办法方便地查到对应于 Arch 下这个包的名字?

手工查一两个包还可以, 包很多的话也非常费时, 效率实在低下.

这就是自由的代价。任何一个发行版的打包策略和起名方式都完全不同,而且有些还经常在变化(比如Arch),所以楼主这个想法是不太容易实现的,除非有人原意定期扫描各发行版的源,然后一一对应的做成数据库。

不知道你的目的。如果仅仅是在不同发行版中迁移开发环境,那么只要搞定重要的一些包就可以了,依赖的包就不用管了,包管理器会搞定的。这样的工作量不大。

不管依赖关系,所有包一视同仁,迁移了也会出问题吧,毕竟不同发行版对包的拆分都不一定一样,一一对应不存在的。

repology.org

可能可以

4赞

感谢分享, 有这样一个网站还是不错的.

但貌似还是解决不了我的问题. 首先我必须承认我是一个 Linux 的普通用户, 我对各个 Linux 发行版里包的命名规则并不是特别熟悉, 多数情况下我都是通过字面意思去理解他们.

就拿 CentOS 里的 bzip2-lib-s.i686 这个软件包来说吧, 这个网站好像提供不了太多的有用信息 (或者我还不会用这个网站, 或者这个网站压根儿就没有收录这个软件包). 我分别用关键词 bzip2-lib-s.i686 bzip2-lib-s bzip2-lib 都不能有效定位这个包, 最后用 bzip2 搜索出来的内容没有参考性.

我心目中比较理想的实现, 通过某个软件或网站就能轻松查找到各个发行版的软件包之间的对应关系. 譬如, CentOS: TEST-lib-s.i686 => Arch: TEST-lib, Ubuntu: TEST-lib-s

估计这样的需求目前没有比较好的实现方法…

懒猫 2 楼就说了,为啥不去试试呢

其实就是你提供一个文件名,然后列出有哪些包可以提供这个文件。 apt-file 是 ubuntu 等系统使用的(需要先安装 apt-file),pacman 是 archlinux 系使用的,而 centos 对应的命令则是 yum provides。

你的思路应该反过来,不应该列出需要安装的具体的包名,而是列出你需要的命令的名字,比如你需要安装 bzip2 这个名字,就可以在不同的操作系统上分别执行 apt-file search bzip2yum provides bzip2pacman -F bzip2。然后你就知道想要使用 bzip2 这个命令需要在不同系统上应该安装什么包了。

有可能好几个包都提供了同一个命令,比如有 test 版本和 dev 版本,那你就根据你的业务只选取某个来源的包,具体逻辑比如可以是“在所有能提供该命令的包中,只选取稳定源中第一个包”。然后根据这个逻辑你就可以写一个脚本,去批量获取命令和包之间的关系了。最终提供的是一些你需要的命令,把这些传给上一步写的脚本,就能得到在该系统下需要安装哪些包了。

其实我的需求跟你说的可能正好反过来: 我需要的是文件名, 而不是命令的名字.

因为我要在 Linux 上安装本专业的软件, 但是在这之前需要先安装所有依赖的软件包. 我只知道所有软件包的名字, 不知道命令的名称.

依赖的软件包有十几款 (如第一个贴子), 手动去查不同 Linux 发行版本间的软件包对应关系还是很费力的. 所以我想问一下大家有没有这样的一款软件或网站帮助我去做这样的工作.

目前, 我估计是没有比较好的方案的, 基本不抱希望.

如果是学校提供的非开源软件,请用和学校推荐的一样的环境,比如学校推荐用 CentOS 就用 VirtualBox 装个 CentOS。

就算 Ubuntu 有一样的软件包,不代表版本也正好和要求的一样。尤其是 Ubuntu 和 Arch 用的还是傾向比较新的。最差的可能是包管理器没有对应的版本还要自已下载编译。

没必要自已没能力折騰还强要折騰。

1赞

那你就一个一个看呗,找到对应的提供的库文件名或可执行文件名,这个工作只需要做一次,以后就能自动化了。

这事儿没那么轻松,还有个打包粒度和功能选择的问题,可能楼主还真的只有自己一个个找、一个个试,运气好的话很快能搞定,不好的话花上几周也是可能的。一般来说,arch之类的发行版的包如果能满足,将里面的文件全部列出来,在其它发行版中可能能自动完成依赖的安装,但其它发行版能满足的,倒过来对应arch之类的发行版,就可能出问题,比如fftw的包,好像就不是全精度和全功能的,但是一个凑了很多精度的库的大包。

另外,一般买服务器做科学计算的话,都是先确定需要的软件,然后再招标硬件的,在签合同的时候就可以向服务器提供商要求解决系统、管理、软件依赖等问题的,像曙光、浪潮、Dell之类的比较大的供应商都能提供相应服务,还可以要求提供培训,不太需要自己折腾,组内没有熟悉linux的人的话可以选择这种方式。当然,有些可能会另行收费,还有就是最后做成怎样,和他们派来的技术人员水平和配合也有关系。

如果非要完全自己折腾的话,如果没有老师或师兄师姐能带一段,在课题任务不重的情况下,一定要协作,组内的人互相分工配合,而且要有一个人来协调大家。0基础的情况下,linux折腾起来并不轻松。

2赞

感觉 Linux 发行版的 碎片化 真严重…

如果要至关心某个软件的运行,可以试试docker。

之前vivado 之类的只能在 centos 上运行的,用docker封装一下运行时要的库,在debian上随便跑

同意,确实没有必要折腾好几个发行版。工作用哪个,然后就自己也用那个;如果对版本要限制的,但也需要给别人用,可以上docker。

因为自由本身都是有代价的,多样化和自由发挥的代价就是碎片化和不统一,而且感觉也没大量场景有统一的需求吧。