在Linux中使用 Stow 管理軟體包(轉)

ba發表於2007-08-11
在Linux中使用 Stow 管理軟體包(轉)[@more@]  本文是關於 Stow 的,它是用於 Linux 的軟體安裝管理實用程式,它許多地方都優於“久經考驗”的 Red Hat 和 Debian 軟體包管理系統。透過使用 Stow,可以將應用程式打包成標準的 tar 檔案,並按照邏輯安排應用程式二進位制檔案,以易於訪問。
Stow 是用 Perl 編寫的,易於安裝和使用,它雖然簡單,但對於在 Linux 機器上組織和管理各種軟體安裝卻很有效。Stow 可以方便地將不同軟體包安排在組織良好的目錄樹結構中。這不僅有助於將屬於特殊軟體包的檔案與其它檔案分開,而且還給予使用者在任何期望的位置儲存或安裝軟體包的自由,同時使軟體看上去被安裝在軟體包或 OS 要求的位置上。
注:如果具有 Linux 的中級知識並安裝過 Linux 應用程式,則有助於理解本文。在本文中,我們使用 Stow V1.3.3 和 Perl V5.005。
Linux 的軟體安裝管理
在我們開始瞭解 Stow 之前,先讓我們研究一下軟體安裝管理,它也稱作軟體包管理。軟體安裝管理在總體上描述了在系統上安裝、解除安裝、更新和組織軟體應用程式(或稱為軟體包)的活動。在這些活動中,組織應用程式是尤其重要的活動。如果應用程式組織得井井有條,那麼在 Linux 機器上安裝、升級和解除安裝應用程式會變得更加容易且更方便。
在 Linux 系統上,大多數應用程式必須安裝在某一特定目錄(通常是 /usr/local/)中才能正確執行和起作用;這種需求來自 Linux 或應用程式本身。如果只在 Linux 系統上安裝了很少的應用程式並且它們各自的檔案都可以很容易地彼此區分,那麼這不會造成任何嚴重問題。
然而,在實際方案中,可能有大量應用程式安裝在同一目錄中,該目錄不久就會變得很雜亂。設想一下,在安裝一個應用程式時,它意外地覆蓋了屬於另一個應用程式的檔案,那麼您不得不替換該檔案。或者設想一下,在解除安裝和刪除應用程式之前,設法確定哪些檔案屬於該應用程式。或者,您可能希望找到並刪除應用程式不需要的檔案。所有這些情形都會花費許多精力和時間,並且要求牢記檔名。
為了克服這樣的問題,所以將軟體安裝管理實用程式用於 Linux 系統。它們不僅有助於組織和安排多個軟體安裝,而且還可以根據需要,任意次數地更改這樣的安排,而且不費吹灰之力。Stow 就是這樣一種用於 Linux 的實用程式。
介紹 Stow
雖然一些 Linux 分發版(如 Red Hat 和 Debian)提供了它們自己的軟體包管理實用程式(分別是 rpm 和 apt-get),這些實用程式與 Stow 一樣有效,但它們僅用於特定的打包格式(分別是 .rpm 和 .deb)。當管理只打包成 .tar 檔案的應用程式時,Stow 是最佳選擇。
另外,如果人們除了使用 Red Hat 和 Debian 之外,還要使用其它 Linux 分發版,或者希望為現有的軟體包管理實用程式找到便宜或免費的備用方案,再或者只想自己控制每件事情,那麼 Stow 是一個好的選擇。Stow 是遵循 GNU GPL(通用公共許可證,General Public License)的免費軟體,它靈活並且可以用充足的使用者支援和可用資源進行定製。
Stow 透過將應用程式的安裝檔案儲存並組織到其自己的單獨目錄(稱為軟體包目錄),從而使它們彼此分開,來管理不同應用程式。這些軟體包目錄駐留在一個 stow 目錄中,該目錄包含所有已裝載的應用程式的軟體包目錄,是這些目錄的父目錄。
Stow 允許使用者自由地將應用程式及其相關檔案安裝和儲存在任何期望位置的軟體包目錄中(透過將該位置指定為裝載目錄),而不是本地安裝的應用程式的公共位置(/usr/local/ 目錄)或由應用程式本身指定的預設位置。該方法有助於使 /usr/local/ 目錄保持整潔,而應用程式被安排在井然有序的目錄樹結構中,易於查詢。
注:預設 stow 目錄是 Stow 自己的目錄,位於 /usr/local/bin 中;在安裝 Stow 時可以更改它(請參閱安裝 Stow)。
Stow 不僅可以將應用程式組織在 stow 目錄樹中,而且還可以在預設位置(應用程式最初被要求安裝的位置)建立相應的符號連結(symlink)。在 Stow 術語中,該預設位置稱為目標目錄。預設情況下,目標目錄是 stow 目錄的父目錄。儘管對於所有用 stow 處理的應用程式而言,用 /usr/local/stow 作為 stow 目錄並且用 /usr/local 作為目標目錄是習慣作法,但使用者可以自由地為 Stow 和目標目錄指定其它位置(請參閱 stow 命令)。stow 目錄中的應用程式目錄樹應該與目標目錄中所期望的樹一樣。
應用程式相應的符號連結(位於應用程式目標目錄中)指向 stow 目錄中應用程式的實際位置(其軟體包目錄)。符號連結有點類似於 Windows 快捷方式或 MacOS 別名,它可以表示駐留在另一個位置(或許是不同的驅動器或目錄)的應用程式的映象。然後,使用這些符號連結來呼叫或執行該應用程式。這讓人覺得應用程式本身被安裝在目標目錄中並且是從該目錄中執行的。當其它應用程式需要呼叫正在討論的應用程式或要與之進行互動,並期望它駐留在其預設位置時,該方法很有用。
注:
Stow 建立相對符號連結;即符號連結指明瞭至軟體包目錄的相對路徑(相對於符號連結自己的位置)。
Stow 設法為每個應用程式建立最小數目的符號連結 — 如果可能,僅為軟體包目錄中的整個子目錄樹建立一個符號連結。建立這種單一符號連結的過程稱為樹摺疊。
Stow 還可用於執行同一應用程式的多次安裝。不同的安裝可以駐留在不同的位置上,並且 Stow 可用於建立和更新一組應用程式符號連結,使之指向任何期望的位置。
Stow 不僅可以組織軟體安裝,而且還可以根據需要任意次數地更改任何以前的軟體安裝佈局。Stow 將決不會刪除 stow 目錄中的任何檔案或目錄,即使在解除安裝期間也是如此。它只更新或除去目標樹中指向應用程式安裝的符號連結,所以要再次安裝已解除安裝的應用程式,只要重新裝載它就行了。
安裝和執行 Stow
需求
安裝 Stow 確實非常簡單。安裝和執行 Stow 的唯一需求是 Stow 本身和 Perl V5.005 或更高版本。
可以從 GNU FTP 站點(請參閱參考資料以獲取連結)下載 Stow 的最新版本。本文使用 V1.3.3,在編寫本文時,該版本是最新的。
Perl 是所有主要 Linux 分發版標準安裝的一部分。要檢視您所擁有的版本,使用命令 perl -v。可以從 perl.com(請參閱參考資料以獲取連結)獲得有關 Perl 及其最新版本的更多資訊。
安裝 Stow
要安裝 Stow,在 Linux 系統上必須以 root 使用者身份登入。下載 Stow 原始檔(stow-1.3.3.tar.gz)之後,下列命令將解包(untar)並安裝 Stow。
清單 1. 安裝 Stow
# tar -zxvf stow-1.3.3.tar.gz
# cd stow-1.3.3
#./configure
# make
# make install prefix=/usr/local/stow
Stow 安裝的預設位置是 /user/local/bin 目錄。透過將所期望的位置(作為一個絕對目錄路徑)指定為上面清單中 make install 命令的 prefix 選項的值,就可以更改這個位置。
Stow 現在被安裝在位於 /usr/local/stow 下自己的目錄樹中。也就是說,Stow 可執行檔案現在駐留在 /usr/local/stow/bin 目錄中,Stow man 檔案駐留在 /usr/local/stow/man 目錄中,而 info 檔案駐留在 /usr/local/stow/info 目錄中。現在,Stow 已經準備好裝載應用程式。
注:
在解包 Stow 原始檔之後,產生的 stow-1.3.3 資料夾包含一個名為 INSTALL 的檔案,該檔案包含有用的安裝指示資訊。

在安裝 Stow 之後,將至 stow 目錄的絕對路徑新增到 $PATH 變數中。
stow 命令
Stow 提供了一個特殊命令 stow,該命令可以與各種選項一起執行,以呼叫 Stow 進行軟體安裝管理。Stow 命令的常規語法如下:
$ stow [options] application-name
下面描述了各種 stow 選項:
-v 或 --verbose[=n]:顯示描述 Stow 正在做什麼的詳細輸出。n 表示詳細級別,可以是 0、1、2 或 3;預設值是 0。使用 -v 或 --verbose 將詳細級別增加 1;使用 --verbose=n 將它設定為 n。
-d directory 或 --dir=directory:將 stow 目錄設定成 directory(到期望目錄的絕對路徑)而不是當前目錄。這也可以使目錄的父目錄成為預設目標目錄。
-t directory 或 --target=directory:將目標目錄設定成 directory(至期望目錄的絕對路徑)而不是當前 stow 目錄的父目錄。
-D 或 --delete:從目標目錄刪除應用程式的符號連結,也就是卸空(unstow)應用程式。
-R 或 --restow:重新裝載應用程式(先卸空,然後再裝載)。透過更改符號連結的軟體包目錄,在更新應用程式之後,該選項對更新符號連結並從目標樹除去舊的符號連結很有用。
-c 或 --conflicts:搜尋可能由實際 stow 操作引起的所有衝突。該選項與另一個選項 -n(請見下面的選項)一起使用。但可能會報告假衝突(請參閱參考資料,以獲取 Stow 手冊中有關衝突一節的連結)。
-n 或 --no:不執行任何 stow 操作,只顯示將發生什麼。由於不執行實際操作,所以 stow -n 會報告不存在的衝突(請參閱參考資料,以獲取 Stow 手冊中有關衝突一節的連結)和必定會發生的實際衝突。
-V 或 --version:顯示 Stow 版本號。
-h 或 --help:顯示 Stow 命令語法。
使用 Stow 的示例
為了學習如何使用 Stow,讓我們裝載一個虛構的應用程式 app-1.4。讓我們假設應用程式原始檔是 app-1.4.tar.gz,它必需安裝在 /usr/local/bin 中。要安裝該應用程式,我們必需以 root 使用者身份登入。
首先,我們需要將用 tar 壓縮過的原始檔解壓到(比方說)名為 source 的目錄中:
[root@linuxbox source]# tar -zxvf app-1.4.tar.gz
這將在目錄 source 中建立包含 app-1.4 原始檔的目錄 app-1.4。現在,我們更改到 app-1.4 目錄:
[root@linuxbox source]# cd app-1.4
首先,我們需要將應用程式安裝到 stow 目錄下。讓我們假設其位置是 /usr/local/stow。我們將對該安裝執行普通的 configure、make 和 make install 過程,如下所示:
[root@linuxbox app-1.4]# ./configure --prefix=/usr/local/stow/app-1.4 [root@linuxbox app-1.4]# make [root@linuxbox app-1.4]# make install
現在,我們通常使用 Stow,來裝載應用程式安裝並在目標目錄 /usr/local/bin 中建立相應的符號連結。我們不必以 root 使用者身份登入來執行該任務。首先,讓我們更改至 stow 目錄,然後從那裡執行 stow 命令。
[userX@linuxbox app-1.4]$ cd /usr/local/stow/ [userX@linuxbox stow]$ stow -t /usr/local/bin app-1.4
現在,應用程式 app-1.4 駐留在 stow 目錄中其自己的軟體包目錄 app-1.4 中,其相應的符號連結被放在目標目錄 /usr/local/bin 中。
如果我們需要升級或重新配置 app-1.4,只要更改到其軟體包目錄,並且在更新應用程式之後,重新裝載它以更新相應的符號連結:
[userX@linuxbox stow]# stow -R app-1.4
要解除安裝該應用程式,只需卸空 app-1.4:
[userX@linuxbox stow]# stow -D app-1.4
Stow 將只除去指向應用程式安裝的連結,決不會刪除任何安裝檔案。因此,稍後可以再次裝載應用程式以使用它。
結束語
Stow 是用於 Linux 系統的一種免費、簡單且易於使用的軟體安裝管理實用程式。對於從應用程式的 tar 原始檔直接安裝的應用程式而言,Stow 是十分理想的,而象 .rpm 或 .deb 這樣的標準打包格式在此情況下並不適合。Stow 透過將應用程式安裝儲存在任何期望位置下其自己的單獨目錄中來管理它們,同時使它們看上去被安裝在必需的位置上。
使用 Stow 進行軟體安裝管理提供了許多優點,如易於安裝和解除安裝應用程式、易於跟蹤已安裝的應用程式及其相關檔案、易於升級和易於重新配置已裝載的應用程式。
參考資料
請訪問 Stow 主頁,以獲取到 Stow 的 GNU 正式站點上相關資訊的連結。
從 GNU FTP 站點下載 Stow 的最新版本。
請參考 Stow 手冊頁面,以獲取一般資訊以及有關 Stow 如何處理命名衝突的章節。
請在 Linux Gazette 上閱讀由 Allan Peda 撰寫的有關 Stow 的有用文章“Simple Package Management With Stow”。
有關 Perl 資訊及其最新版本的下載,請訪問 perl.com。
有關 Red Hat 的軟體包管理實用程式概述,請閱讀我們的三部分系列文章。第 1 部分 討論瞭如何使用 RPM,第 2 部分討論了軟體補丁和分發 RPM,第 3 部分討論了在安裝和解除安裝期間執行指令碼。
我們在有關編譯原始檔和管理軟體包的教程中討論了 Red Hat 和 Debian 軟體包管理。
如果需要在整個企業範圍內管理軟體分發版,那麼 Tivoli 可以幫助您。請檢視 IBM.com 上的 Tivoli Configuration Manager。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-947187/,如需轉載,請註明出處,否則將追究法律責任。

相關文章