我需要复制CentOS仓库中的所有RPM,这些RPM是为DVD构建自定义版CentOS所需的。
基本上我需要一个完整的自定义RPM所需的软件包列表,以便我可以将它们复制到我正在构建的ISO映像中。
我在这里有一个不在repo中的自定义RPM,所以我不能使用yum deplist。
当我执行rpm -qpR时,它已关闭,但它列出的东西不是带路径名或包的文件。
文件很简单,因为我可以循环使用repoquery --qf ='%{name}' - f file-name
套餐也很简单,因为它们是我需要的。
但是我得到rpm -qpR的依赖,比如config(alsa-lib)和rtld(GNU_HASH),它们既不是包也不是文件,也不是库。
我正在考虑说任何依赖于“(”的内容,除了空'()'都可以跳过。这会有用吗?
空的'()'我将使用repoquery来获取包,因为它将是一个库。
我也得到依赖: libc.so.6的()(64位) libc.so.6的(GLIBC_2.14)(64位) libc.so.6的(GLIBC_2.16)(64位) libc.so.6的(GLIBC_2.2.5)(64位) 。 。
许多不同版本的GLIBC。我正在考虑从我的仓库中安装最新的一个,因为glibc显示为一个包。这样安全吗?
答案 0 :(得分:1)
提出了几个问题(您可能会考虑重构您的问题)。以下是一些答案:
rpm
是个好地方。它具有-R
选项:此软件包所依赖的列表功能。 rpm
还有--whatprovides
:查询提供CAPABILITY功能的所有软件包。。很大程度上,您的问题似乎忽略了功能。这些可以是特定文件,或者它们可以是用于引用包和/或其内容的其他方式的名称。例如,这个:
$ rpm -qR `rpm -qf vi`
config(vim-minimal) = 2:7.4.629-5.el6
libacl.so.1()(64bit)
libacl.so.1(ACL_1.0)(64bit)
libc.so.6()(64bit)
libc.so.6(GLIBC_2.11)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libselinux.so.1()(64bit)
libtinfo.so.5()(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(VersionedDependencies) <= 3.0.3-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1
这些行是功能,例如,
$ rpm -q --whatprovides 'libtinfo.so.5()(64bit)'
ncurses-libs-5.7-4.20090207.el6.x86_64
要完成任务,您应该递归地遵循这些功能,直到您到达(并且可能忽视)基本系统中的包。有些软件包提供了多种功能:
$ rpm -q --whatprovides 'config(vim-minimal) = 2:7.4.629-5.el6'
no package provides config(vim-minimal) = 2:7.4.629-5.el6
$ rpm -q --whatprovides 'libacl.so.1()(64bit)'
libacl-2.2.49-6.el6.x86_64
$ rpm -q --whatprovides 'libacl.so.1(ACL_1.0)(64bit)'
libacl-2.2.49-6.el6.x86_64
$ rpm -q --whatprovides 'libc.so.6()(64bit)'
glibc-2.12-1.166.el6_7.3.x86_64
$ rpm -q --whatprovides 'libc.so.6(GLIBC_2.11)(64bit)'
glibc-2.12-1.166.el6_7.3.x86_64
$ rpm -q --whatprovides 'libc.so.6(GLIBC_2.2.5)(64bit)'
glibc-2.12-1.166.el6_7.3.x86_64
$ rpm -q --whatprovides 'libc.so.6(GLIBC_2.3)(64bit)'
glibc-2.12-1.166.el6_7.3.x86_64
$ rpm -q --whatprovides 'libc.so.6(GLIBC_2.3.4)(64bit)'
glibc-2.12-1.166.el6_7.3.x86_64
$ rpm -q --whatprovides 'libc.so.6(GLIBC_2.4)(64bit)'
glibc-2.12-1.166.el6_7.3.x86_64
$ rpm -q --whatprovides 'libselinux.so.1()(64bit)'
libselinux-2.0.94-5.8.el6.x86_64
$ rpm -q --whatprovides 'libtinfo.so.5()(64bit)'
ncurses-libs-5.7-4.20090207.el6.x86_64
$ rpm -q --whatprovides 'rpmlib(CompressedFileNames) <= 3.0.4-1'
no package provides rpmlib(CompressedFileNames) <= 3.0.4-1
$ rpm -q --whatprovides 'rpmlib(FileDigests) <= 4.6.0-1'
no package provides rpmlib(FileDigests) <= 4.6.0-1
$ rpm -q --whatprovides 'rpmlib(PayloadFilesHavePrefix) <= 4.0-1'
no package provides rpmlib(PayloadFilesHavePrefix) <= 4.0-1
$ rpm -q --whatprovides 'rpmlib(VersionedDependencies) <= 3.0.3-1'
no package provides rpmlib(VersionedDependencies) <= 3.0.3-1
$ rpm -q --whatprovides 'rtld(GNU_HASH)'
glibc-2.12-1.166.el6_7.3.x86_64
$ rpm -q --whatprovides 'rpmlib(PayloadIsXz) <= 5.2-1'
no package provides rpmlib(PayloadIsXz) <= 5.2-1
“无包提供”暗示此选项无法解决的特殊情况。例如,参见 Re: rpmlib(VersionedDependencies) <= 3.0.3-1 中讨论的rpmlib
的情况,其中rpm --showrc
提供了相关信息。 (vim-minimal警告是另一种特殊情况 - 你会在它们出现时处理它和其他人。)
没有必要安装RPM来查找它提供的功能。您可以使用--provides
选项执行此操作,例如,
rpm -qp --provides your-package-name.rpm
和(如前所述)使用-R
选项查看所需的包:
rpm -qpR your-package-name.rpm
查看我为ncurses-examples构建的包,这两个命令给了我
$ rpm -qp --provides ncurses-examples-6.0-20151107.x86_64.rpm
ncurses-examples = 6.0-20151107
ncurses-examples(x86-64) = 6.0-20151107
$ rpm -qpR ncurses-examples-6.0-20151107.x86_64.rpm
libc.so.6()(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libformw6.so.6()(64bit)
libformw6.so.6(NCURSESW6_5.1.20000708)(64bit)
libformw6.so.6(NCURSESW6_5.9.20150530)(64bit)
libm.so.6()(64bit)
libm.so.6(GLIBC_2.2.5)(64bit)
libmenuw6.so.6()(64bit)
libmenuw6.so.6(NCURSESW6_5.1.20000708)(64bit)
libncursesw6.so.6()(64bit)
libncursesw6.so.6(NCURSESW6_5.1.20000708)(64bit)
libncursesw6.so.6(NCURSESW6_5.3.20021019)(64bit)
libncursesw6.so.6(NCURSESW6_5.4.20040208)(64bit)
libncursesw6.so.6(NCURSESW6_5.7.20081102)(64bit)
libpanelw6.so.6()(64bit)
libpanelw6.so.6(NCURSESW6_5.1.20000708)(64bit)
libtinfow6.so.6()(64bit)
libtinfow6.so.6(NCURSES6_TINFO_5.0.19991023)(64bit)
libtinfow6.so.6(NCURSES6_TINFO_5.1.20000708)(64bit)
libtinfow6.so.6(NCURSES6_TINFO_5.4.20040208)(64bit)
libtinfow6.so.6(NCURSES6_TINFO_5.7.20081102)(64bit)
libtinfow6.so.6(NCURSES6_TINFO_5.9.20150530)(64bit)
libutil.so.1()(64bit)
libutil.so.1(GLIBC_2.2.5)(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(PayloadIsXz) <= 5.2-1
rtld(GNU_HASH)
与libc6一样,ncurses6 ABI有版本需要考虑,仅仅匹配()
并不一定能获得正确版本的库。