2015-11-13 50 views
-1

我需要从CentOS仓库复制所有需要为DVD制作CentOS定制版本的RPM。收集软件包所需的所有RPM以制作定制的CentOS DVD

本质上我需要我的自定义RPM所需的软件包的完整列表,以便我可以将它们复制到我正在构建的ISO映像。

我在这里有一个不在回购站的自定义RPM,因此我不能使用yum deplist。

当我执行rpm -qpR它是关闭的,但它列出的东西不是带有路径名或包的文件。

文件容易,因为我可以用循环repoquery --qf =“%{名}” -f文件名

包是一件容易的事,因为他们是我所需要的。

但我得到的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)(64bit) libc.so.6(GLIBC_2.2.5)(64bit) ...

Lo不同版本的GLIBC的ts。我想从我的回购库中安装最新的一个,因为glibc显示为一个包。这安全吗?

+0

你可能最好在Unix和Linux StackExchange(或类似的)上提出这个问题,因为它不是一个真正的编程问题。 – DanSut

+0

这是[rpm](http://stackoverflow.com/questions/tagged/rpm)的热门话题,而这个群体比[USE]更受关注(http://unix.stackexchange.com/questions/tagged/rpm) 。 –

回答

1

有几个问题(你可能会考虑重构你的问题)。以下是一些答案:

  • repoquery对部署应用程序可能很有用,但对分析所需的RPM集没有多大用处。对于您使用它的用途,给定文件的简单“rpm -qf”将标识包名,并更快速地执行。
  • manpage for 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 

“没有软件包提供”提示在这个选项没有解决的特殊情况下。例如见与rpmlib的情况Re: rpmlib(VersionedDependencies) <= 3.0.3-1讨论,它说,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一样的ncur ses6 ABI有版本可供考虑,仅仅匹配()就不一定会得到正确版本的库。

+0

感谢Thomas对你的想法和功能的额外解释。 不幸的是,我不能使用rpm -qf或--whatprovides,因为这些不在我的自定义回购中。我甚至可能在一个与我用来构建ISO的版本不同的Linux版本上运行我的ISO构建脚本。 我不知道当他们建立一个ISO的时候他们会做些什么。他们也需要解决这个问题。也许他们在机器/虚拟机上安装该版本并使用rpm,但是安装某些东西来查找依赖关系看起来应该是不必要的并且很慢。 – KevinD

+0

如果你在'/etc/yum.repos.d'中有一个“.repo”文件指向你的本地仓库,yum可以做到这一点。它依靠通过Web服务连接。从['createrepo'](http://createrepo.baseurl.org/)命令开始。 –

+0

是的,我在/etc/yum.repos.d中有一个回购文件。例如,我用我的repoquery命令来引用它。但我没有在我的回购中的自定义RPM。自定义RPM仅适用于DVD ISO。 – KevinD