Linux

使用 yum 安裝時忽略依賴項(Scientific Linux)

  • March 2, 2022

如何忽略我嘗試yum在 Scientific Linux 中安裝的單個軟體包的依賴關係?對於 CentOS/RHEL,答案大概是一樣的。

詳細地說,我正在尋找實用程序lsb_release,我知道它會被放入/usr/bin/lsb_release. 該命令yum whatprovides /usr/bin/lsb_release告訴我它是redhat-lsb包的一部分(針對各自的架構),但它們有很多依賴項,包括一些與 X11 相關的依賴項。

由於我只lsb_release關注程序,我想避開依賴項附帶的“粗魯”。我怎樣才能做到這一點?

你不能。安裝 X 的東西可能毫無意義,除非你有少量的儲存空間並且每 MB 都很重要,或者如果它包含整個 DE(它可能不包含),因為它可能包含一些你不想要的系統配置。

如果你仍然不想走那條路,你應該能夠找到一個合適的 .rpm (你可以使用 yum 從 repo 中獲取一個沒有安裝的,見這裡;我沒試過並且不知道依賴項是否會很麻煩;最簡單的事情可能是只使用rpmfind)。然後,您可以使用rpm2cpiolsb_release 二進製文件解壓 rpm 並自行安裝;首先檢查它ldd lsb_release以確保它需要的庫可用。您需要的 rpm 中可能還有其他小元件。

網上已經有對rpm2cpio的解釋,不再贅述。如果您使用mc文件瀏覽器,您可以使用它來代替 rpm2cpio——它可以讓您像瀏覽 tarball 或 zip 文件一樣瀏覽 rpm 內部。

根據 goldilocks 回答的提示,我想出了這個小腳本,它完全符合我的要求,僅此而已。它是在 Scientific Linux 6.3 上編寫和測試的,但可能適用於其他 RHEL 衍生產品。我命名了腳本redhat-lsb.sh(多麼沒有創意)。

#!/usr/bin/env bash
WKPKG=redhat-lsb
WKDIR=$HOME/$WKPKG
[[ -d "$WKDIR" ]] && [[ "x$1" != "x-f" ]] && { echo "ERROR: not removing $WKDIR. Use -f to force it."; exit 1; }
(
   [[ -d "$WKDIR" ]] &&  rm -rf "$WKDIR"
   mkdir "$WKDIR" && \
       cd "$WKDIR" && \
       yumdownloader $WKPKG && \
       cd / && \
       rpm2cpio "$WKDIR"/redhat-lsb-*.$(uname -m).rpm | cpio -idmv
) && rm -rf "$WKDIR"

呼叫為sudo ./redhat-lsb.shor sudo ./redhat-lsb.sh -f(如果工作目錄已經存在,後者將刪除它)。

這是做什麼的:

  1. 使用文件夾$HOME/redhat-lsb工作。
  2. 用於yumdownloader下載包。
  3. 使用 shell globbing 來選擇正確的.rpmredhat-lsb-*.$(uname -m).rpm
  4. 更改為,/因為這是我們要安裝它的地方
  5. 用於rpm2cpio將其解壓縮到標準輸出
  6. cpio擷取它並將其解壓縮到目前目錄中(這是需要的步驟sudo
  7. 最後刪除工作文件夾

在那之後,取得了巨大的成功……它可以工作……沒有所有依賴項:

$ lsb_release -a
LSB Version:    :core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: Scientific
Description:    Scientific Linux release 6.3 (Carbon)
Release:        6.3
Codename:       Carbon

原來包本身只包含一個靜態連結的執行檔。其餘的是 shell 腳本和數據。

引用自:https://unix.stackexchange.com/questions/64887