簡體   English   中英

如何讓rpm自動安裝依賴

[英]How to make rpm auto install dependencies

我構建了兩個 RPM 包

  • proj1-1.0-1.x86_64.rpm
  • libtest1-1.0-1.x86_64.rpm

proj1依賴於存在的文件libtest1.so ,它正確地反映在 RPM 包中,如下所示:

user@my-pc:~$ rpm -qp --requires proj1-1.0-1.x86_64.rpm
libtest1.so()(64bit)

user@my-pc:~$ rpm -qp --provides libtest1-1.0-1.x86_64.rpm
libtest1.so()(64bit)

由於缺少依賴項, proj1安裝失敗。

user@my-pc:~$ rpm -ivh proj1-1.0-1.x86_64.rpm
error: Failed dependencies:
libtest1.so()(64bit) is needed by proj1-1.0-1.x86_64.rpm

如何確保在安裝libtest1-1.0-1.x86_64.rpm期間自動安裝proj1-1.0-1.x86_64.rpm

我確實按照此處所述嘗試了rpm -i--aid選項,但它對我不起作用。

還有別的辦法嗎?

謝謝你的幫助。

提供的鏈接@gertvdijk 顯示了一種無需配置本地存儲庫即可快速獲得所需結果的方法:

$ yum --nogpgcheck localinstall packagename.arch.rpm

只需將packagename.arch.rpm更改為您要安裝的 RPM 文件名。

編輯澄清一下,這將自動安裝已通過系統 YUM 存儲庫提供的所有依賴項。

如果您有不在系統存儲庫中的其他 RPM 滿足的依賴關系,那么此方法將不起作用,除非每個 RPM 也與packagename.arch.rpm一起在命令行中指定。

創建一個(本地)存儲庫並使用yum讓它為您解決依賴關系。

CentOS wiki 有一個不錯的頁面,提供了關於此的操作方法。 CentOS wiki HowTos/CreateLocalRepos


總結並進一步最小化(不理想,但最快):

  1. 為您的本地存儲庫創建一個目錄,例如/home/user/repo
  2. 將 RPM 移動到該目錄中。
  3. 修復一些所有權和文件系統權限:

     # chown -R root.root /home/user/repo
  4. 如果尚未安裝createrepo包,請安裝,然后運行

    # createrepo /home/user/repo # chmod -R o-w+r /home/user/repo
  5. 創建一個存儲庫配置文件,例如/etc/yum.repos.d/myrepo.repo包含

    [local] name=My Awesome Repo baseurl=file:///home/user/repo enabled=1 gpgcheck=0
  6. 使用安裝包

    # yum install packagename

對於 dnf 用戶只需使用dnf install *.rpm ,不再需要localinstall

對我來說只是與

# yum install ffmpeg-2.6.4-1.fc22.x86_64.rpm

並自動請求授權下載依賴項。 在示例下方,我使用的是 fedora 22

[root@localhost lukas]# yum install ffmpeg-2.6.4-1.fc22.x86_64.rpm
Yum command has been deprecated, redirecting to '/usr/bin/dnf install  ffmpeg-2.6.4-1.fc22.x86_64.rpm'.
See 'man dnf' and 'man yum2dnf' for more information.
To transfer transaction metadata from yum to DNF, run:
'dnf install python-dnf-plugins-extras-migrate && dnf-2 migrate'

Last metadata expiration check performed 0:28:24 ago on Fri Sep 25 12:43:44 2015.
Dependencies resolved.
====================================================================================================================
 Package               Arch           Version                                  Repository                      Size
====================================================================================================================
Installing:
 SDL                   x86_64         1.2.15-17.fc22                           fedora                         214 k
 ffmpeg                x86_64         2.6.4-1.fc22                             @commandline                   1.5 M
 ffmpeg-libs           x86_64         2.6.4-1.fc22                             rpmfusion-free-updates         5.0 M
 fribidi               x86_64         0.19.6-3.fc22                            fedora                          69 k
 lame-libs             x86_64         3.99.5-5.fc22                            rpmfusion-free                 345 k
 libass                x86_64         0.12.1-1.fc22                            updates                         85 k
 libavdevice           x86_64         2.6.4-1.fc22                             rpmfusion-free-updates          75 k
 libdc1394             x86_64         2.2.2-3.fc22                             fedora                         124 k
 libva                 x86_64         1.5.1-1.fc22                             fedora                          79 k
 openal-soft           x86_64         1.16.0-5.fc22                            fedora                         292 k
 opencv-core           x86_64         2.4.11-5.fc22                            updates                        1.9 M
 openjpeg-libs         x86_64         1.5.1-14.fc22                            fedora                          89 k
 schroedinger          x86_64         1.0.11-7.fc22                            fedora                         315 k
 soxr                  x86_64         0.1.2-1.fc22                             updates                         83 k
 x264-libs             x86_64         0.142-12.20141221git6a301b6.fc22         rpmfusion-free                 587 k
 x265-libs             x86_64         1.6-1.fc22                               rpmfusion-free                 486 k
 xvidcore              x86_64         1.3.2-6.fc22                             rpmfusion-free                 264 k

Transaction Summary
====================================================================================================================
Install  17 Packages

Total size: 11 M
Total download size: 9.9 M
Installed size: 35 M
Is this ok [y/N]: y

我找到了一個更簡單的解決方案。 如果您將所有 RPM 都放在同一個目錄中,那么您需要做的就是,

$ sudo rpm -i *.rpm

rpm似乎找出了正確的安裝順序並安裝了 RPM。

馬修的回答激起了很多情緒,因為它仍然缺少一個小細節。 一般命令是:

# yum --nogpgcheck localinstall <package1_file_name> ... <packageN_file_name>

上面的package_file_name可以包括本地絕對或相對路徑,或者是一個 URL(甚至可能是一個 URI)。

Yum 會在命令行上給出的所有包文件中搜索依賴項,如果在那里找不到依賴項,它還會使用任何已配置和啟用的 yum 存儲庫。

既不會搜索當前工作目錄,也不會搜索任何package_file_name的路徑,除非這些目錄中的任何一個先前已配置為啟用的yum存儲庫。

所以在 OP 的情況下, yum命令:

# cd <path with pkg files>; yum --nogpgcheck localinstall ./proj1-1.0-1.x86_64.rpm ./libtest1-1.0-1.x86_64.rpm

會做,就像rpm一樣:

# cd <path with pkg files>; rpm -i proj1-1.0-1.x86_64.rpm libtest1-1.0-1.x86_64.rpm

這些yumrpm調用之間的差異只有在列出的要安裝的軟件包之一進一步依賴於未在命令行中列出的軟件包時才會可見。

在這種情況下, rpm將拒絕繼續,而yum將使用任何已配置和啟用的 yum 存儲庫來搜索依賴項,並且可能會成功。

在任何情況下都不會搜索當前工作目錄,除非它先前已配置為啟用的yum存儲庫。

對於 openSUSE Leap 15,我收到類似的錯誤:

> sudo rpm -i opera-stable_53.0.2907.68_amd64.rpm 
[sudo] password for root: 
warning: opera-stable_53.0.2907.68_amd64.rpm: Header V4 RSA/SHA512 Signature, key ID a5c7ff72: NOKEY
error: Failed dependencies:
    at is needed by opera-stable-53.0.2907.68-0.x86_64

我運行這個命令來找出依賴項是什么:

> sudo zypper install opera-stable_53.0.2907.68_amd64.rpm 
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 4 NEW packages are going to be installed:
  at libfl2 libHX28 opera-stable

4 new packages to install.
Overall download size: 50.3 MiB. Already cached: 0 B. After the operation, additional 176.9 MiB will be used.
Continue? [y/n/...? shows all options] (y): n

然后我運行這個命令來安裝依賴項:

> sudo zypper in at
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 3 NEW packages are going to be installed:
  at libfl2 libHX28

3 new packages to install.
Overall download size: 208.6 KiB. Already cached: 0 B. After the operation, additional 600.4 KiB will be used.
Continue? [y/n/...? shows all options] (y): y

然后我運行它來安裝rpm文件:

> sudo rpm -i opera-stable_53.0.2907.68_amd64.rpm

不確定這是否是最佳做法,但它解決了我的問題。

將所有 RPM 復制到一個目錄中,然后按如下方式安裝:

yum install -y --cacheonly --disablerepo=* /var/rpm_dir/*.rpm

對於特定的包,您可以使用yumdownloader ,例如在另一個線程中: https ://stackoverflow.com/a/66927190/5078874

我遇到了這個,對我有用的是從 .rpm 文件所在的目錄中運行yum localinstall enterPkgNameHere.rpm

注意:將enterPkgNameHere.rpm替換為您的 .rpm 文件的名稱。

第 1 步:復制給定位置的所有 rpm pkg

第 2 步:如果 createrepo 尚未安裝(默認情況下不會安裝),請安裝它。

[root@pavangildamysql1 8.0.11_rhel7]# yum install createrepo

第 3 步:創建存儲庫元數據並授予以下權限

[root@pavangildamysql1 8.0.11_rhel7]# chown -R root.root /scratch/PVN/8.0.11_rhel7
[root@pavangildamysql1 8.0.11_rhel7]# createrepo /scratch/PVN/8.0.11_rhel7
Spawning worker 0 with 3 pkgs
Spawning worker 1 with 3 pkgs
Spawning worker 2 with 3 pkgs
Spawning worker 3 with 2 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[root@pavangildamysql1 8.0.11_rhel7]# chmod -R o-w+r /scratch/PVN/8.0.11_rhel7

第 4 步:在 /etc/yum.repos.d/mysql.repo 中創建包含以下內容的存儲庫文件

[local]
name=My Awesome Repo
baseurl=file:///scratch/PVN/8.0.11_rhel7
enabled=1
gpgcheck=0

Step5 運行此命令進行安裝

[root@pavangildamysql1 local]# yum --nogpgcheck localinstall mysql-commercial-server-8.0.11-1.1.el7.x86_64.rpm

簡單只需運行以下命令。

sudo dnf install *package.rpm

輸入您的密碼,您就完成了。

從源文件生成RPM 的過程: 1) 下載擴展名為.gz 的源文件。 2) 從 yum install 安裝 rpm-build 和 rpmdevtools。 (將生成 rpmbuild 文件夾...SPECS、SOURCES、RPMS.. 文件夾應在 rpmbuild 文件夾內生成)。 3) 將源代碼.gz 復制到 SOURCES 文件夾。(rpmbuild/SOURCES) 4) 使用以下命令解壓縮 tar 包。 轉到 SOURCES 文件夾:rpmbuild/SOURCES,其中存在 tar 文件。 命令:例如tar -xvzf httpd-2.22.tar.gz httpd-2.22 文件夾將生成在同一路徑中。 檢查 apr 和 apr-util 是否在 httpd-2.22/srclib 文件夾中。 如果 apr 和 apr-util 不存在,請從 apache 站點下載最新版本,將其解壓縮並將其放入 httpd-2.22/srclib 文件夾中。 還要確保您的系統中安裝了 pcre。

5)轉到提取的文件夾,然后鍵入以下命令:./configure --prefix=/usr/local/apache2 --with-included-apr --enable-proxy --enable-proxy-balancer --with-mpm= worker --enable-mods-static=all 6) 配置成功后運行以下命令:make 7) 成功執行 od make 命令后運行:checkinstall 在同一個文件夾中。 (如果您沒有 checkinstall 軟件,請從站點下載最新版本)此外,checkinstall 軟件有錯誤,可以通過以下方式解決::::找到 checkinstallrc,然后使用 vim 命令將 TRANSLATE = 1 替換為 TRANSLATE = 0。 還要檢查排除包:EXCLUDE="/selinux" 8)checkinstall 將詢問選項(如果您想要為源文件構建 rpm,請鍵入 R)9)Done.rpm 文件將構建在 rpmbuild/RPMS 文件內的 RPMS 文件夾中。 .. 祝一切順利....

問候,普雷拉納

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM