歡迎您光臨本站 註冊首頁

在Linux中使用 Stow 管理軟體包

←手機掃碼閱讀     火星人 @ 2014-03-24 , reply:0

  本文是關於 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。

[火星人 ] 在Linux中使用 Stow 管理軟體包已經有589次圍觀

http://coctec.com/docs/linux/show-post-136891.html