使用 yum 安裝時忽略依賴項(Scientific Linux)
如何忽略我嘗試
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)。然後,您可以使用
rpm2cpio
lsb_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.sh
orsudo ./redhat-lsb.sh -f
(如果工作目錄已經存在,後者將刪除它)。這是做什麼的:
- 使用文件夾
$HOME/redhat-lsb
工作。- 用於
yumdownloader
下載包。- 使用 shell globbing 來選擇正確的
.rpm
:redhat-lsb-*.$(uname -m).rpm
- 更改為,
/
因為這是我們要安裝它的地方- 用於
rpm2cpio
將其解壓縮到標準輸出cpio
擷取它並將其解壓縮到目前目錄中(這是需要的步驟sudo
)- 最後刪除工作文件夾
在那之後,取得了巨大的成功……它可以工作……沒有所有依賴項:
$ 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 腳本和數據。