在用戶本地安裝軟體包 - 最佳實踐?

在用戶本地安裝軟體包 - 最佳實踐?

我想在 RHEL 伺服器上的使用者本機安裝 Git(我沒有 root 存取權限) 將軟體安裝到本機使用者帳戶的最乾淨/最有組織的方式是什麼?

  • 將所有內容安裝在該使用者主目錄中?
  • 目錄佈局會是什麼樣子?
  • 您會從原始碼還是 RPM 安裝?
  • 如果從 RPM 您會使用 YUM 還是 RPM?

答案1

有多種方法可以使用 rpm 在使用者目錄中安裝rpm,但我不認為這是直接的。我不相信有辦法yum

我的標準做法是從原始碼編譯到local我家中的目錄

$ mkdir ~/local
$ mkdir ~/local/bin
$ mkdir ~/local/lib
$ mkdir ~/local/include

我像/usr/local擁有 root 權限時一樣下載原始程式碼,例如,在~/local/git.

編譯時我將前綴設定為local目錄

$ configure --prefix=/home/user_name/local
$ make
$ make install

然後我將其添加~/local/bin到我的 $PATH 中.bash_profile

當然,從原始碼安裝的痛苦在於您無法獲得自動依賴關係解析。如果發現需要安裝依賴,就按照上面的方法編譯安裝即可。然後,當您編譯時git,您需要更新編譯標誌,以便它們在正確的位置查找依賴項的庫和包含檔案:

./configure --prefix=/home/user_name/local LDFLAG='-L/home/user_name/local/lib' CFLAGS='-I/home/user_name/local/include' CPPFLAGS='-I/home/user_name/local/include' CXXFLAGS='-I/home/user_name/local/include'

答案2

.rpm 檔案其實是一種存檔形式cpio,很像 .rpm 的簡單形式tar。該rpm2cpio實用程式可能已安裝在系統上,並且不需要權限即可使用;它寫入標準輸出,因此要轉換:

rpm2cpio whatever.rpm > whatever.cpio

您可以man cpio自己查看,但您現在要做的是以“複製”模式將存檔提供給 cpio:

cat whatever.cpio | cpio -i

這些內容很可能被組織成目錄樹,以便文件進入適當的位置(bin 等)。如果您的密碼中不存在這些文件,您將收到錯誤訊息,但這將列出存檔中的文件(您可以使用-t/--list開關獲得相同的結果)。如果您想自動建立目錄,請使用-d.解壓縮 rpm 的快速方法是:

rpm2cpio whatever.rpm | cpio -i -d

您可以使用它來安裝到 $HOME 中。唯一的問題是程式是否希望在/etc等待中找到東西,因為許多東西在編譯時出於任何目的都硬編碼了它們的安裝位置。

從原始程式碼建立可能是一個更好的選擇(因為您可以提供正確的位置),但如果您可以使其在任何情況下都可以工作,那麼它會快速而簡單。

此外,午夜指揮官文件瀏覽器 ( mc),可能還有其他文件瀏覽器,將允許您導航 rpm 或 cpio(或壓縮的 tar 或 zip)層次結構並複製單個文件,就像解壓縮存檔一樣(它創建一個臨時檔案系統,用於瀏覽其中的存檔內容)。

答案3

這是一個替代方案(不使用 yum),權限會很奇怪,但您可以chown隨後向目標用戶發送:--這也是一個成功或失敗:-(

#-## Download all dependency for the RPM -- 
#sudo yum install yum-utils
#sudo yumdownloader --resolve --destdir ~/download bash

#-## Install all downloaded to an alternate root 
#sudo rpm --initdb --root <user_home_dir>
#sudo rpm --root <user_home_dir> -Uvh --nodeps ~/download/*

然後將適當的位置新增到您的路徑中。

相關內容