2015-11-13 48 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