Dependencies 收集软件包制作定制CentOS DVD所需的所有RPM

Dependencies 收集软件包制作定制CentOS DVD所需的所有RPM,dependencies,rpm,yum,Dependencies,Rpm,Yum,我需要从CentOS repo复制所有RPM,这些RPM是为DVD制作定制版CentOS所需的 基本上,我需要一个完整的清单,由我的定制RPM所需的软件包,以便我可以复制他们的ISO形象,我正在建设 我这里有一个自定义RPM,它不在repo中,因此我无法使用yum-deplist 当我做rpm-qpR时,它是关闭的,但它列出的东西不是带有路径名或包的文件 文件很简单,因为我可以使用repoquery--qf='{name}'-f文件名循环 包装也很简单,因为它们是我需要的 但是我从rpm-qpR

我需要从CentOS repo复制所有RPM,这些RPM是为DVD制作定制版CentOS所需的

基本上,我需要一个完整的清单,由我的定制RPM所需的软件包,以便我可以复制他们的ISO形象,我正在建设

我这里有一个自定义RPM,它不在repo中,因此我无法使用yum-deplist

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

文件很简单,因为我可以使用repoquery--qf='{name}'-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)(64位) libc.so.6(GLIBC_2.2.5)(64位)


许多不同版本的GLYBC。我想从我的回购中安装最新的一个,因为GLUBC是作为一个包来的。这是安全的吗?< /P> < P>有几个问题被问到(你可以考虑重构你的问题)。这里有一些答案:

  • 可能对部署应用程序有用,但对分析所需的rpm集没有多大用处。在使用它时,给定文件的普通“rpm-qf”将标识包名,并更快地完成此操作
  • 是一个很好的起点。它有
    -R
    选项:列出此包所依赖的功能
  • rpm
    还具有
    --提供了哪些功能
    :查询所有提供该功能的软件包
在很大程度上,您的问题似乎忽略了一些功能。这些功能可能是特定的文件,也可能是引用包和/或其内容的其他方式的名称。例如:

$ 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 '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
并且(如您之前所述)使用
-R
选项查看给定软件包需要什么:

看看我为之构建的包,这两个命令给了我

$ 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)
$rpm-qp--提供ncurses-examples-6.0-20151107.x86_64.rpm
ncurses示例=6.0-20151107
课程示例(x86-64)=6.0-20151107
$rpm-qpR ncurses-examples-6.0-20151107.x86_64.rpm
libc.so.6()(64位)
libc.so.6(GLIBC_2.2.5)(64位)
libc.so.6(GLIBC_2.3)(64位)
libformw6.so.6()(64位)
libformw6.so.6(NCURSESW6_5.1.20000708)(64位)
libformw6.so.6(NCURSESW6_5.9.20150530)(64位)
libm.so.6()(64位)
libm.so.6(GLIBC_2.2.5)(64位)
libmenuw6.so.6()(64位)
libmenuw6.so.6(NCURSESW6_5.1.20000708)(64位)
libncursesw6.so.6()(64位)
libncursesw6.so.6(NCURSESW6_5.1.20000708)(64位)
libncursesw6.so.6(NCURSESW6_5.3.20021019)(64位)
libncursesw6.so.6(NCURSESW6_5.4.20040208)(64位)
libncursesw6.so.6(NCURSESW6_5.7.20081102)(64位)
libpanelw6.so.6()(64位)
libpanelw6.so.6(NCURSESW6_5.1.20000708)(64位)
libtinfow6.so.6()(64位)
libtinfow6.so.6(NCURSES6_TINFO_5.0.19991023)(64位)
libtinfow6.so.6(NCURSES6_TINFO_5.1.20000708)(64位)
libtinfow6.so.6(NCURSES6_TINFO_5.4.20040208)(64位)
libtinfow6.so.6(NCURSES6_TINFO_5.7.20081102)(64位)
libtinfow6.so.6(NCURSES6_TINFO_5.9.20150530)(64位)
libutil.so.1()(64位)
libutil.so.1(GLIBC_2.2.5)(64位)

rpmlib(CompressedFileNames)您最好在Unix和Linux StackExchange(或类似产品)上问这个问题因为这不是一个真正的编程问题。这是一个热门话题,而且这个群体比其他人更受关注。感谢Thomas对功能的思考和额外解释。不幸的是,我不能使用rpm-qf或--whatprovides,因为它们不在我的自定义repo中。我甚至可能在不同版本的Linux上运行我的ISO构建脚本m是我用来构建ISO的版本。我想知道heck发行版在构建ISO时会做什么。他们也需要解决这个问题。也许他们会在计算机/VM上安装该版本并使用rpm,但安装查找依赖项的内容似乎是不必要的,而且速度很慢。如果你有“.repo”
/etc/yum.repos.d
中的文件指向您的本地存储库,yum可以做到这一点。它依赖于通过web服务连接。从命令开始。是的,我在/etc/yum.repos.d中有一个repo文件。例如,我用repoquery命令引用它。但我的repo中没有自定义RPM。自定义RPM仅用于DVD ISO。
rpm -qp --provides your-package-name.rpm
rpm -qpR your-package-name.rpm
$ 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)