分类: LINUX
2011-04-19 00:41:25
以往 tar ball 程式(如 nano-1.0.9.tar.gz )是 UNIX/Linux/BSD 等平台中程式作者發行程式的主力格式。
tar 檔程式的安裝方法,並不困難,大概只要解開 tar.gz / tar.bz2 之後,下:
./configure
make
make install
就可以安裝成功!
其預設的安裝路徑,大致上,均遵守一個約定俗成的規定:即放在 /usr/local 目錄之中。
不過,這至少有以下缺點:
安裝之後,要移除此一套件程式不易。(你知道、記得當初安裝了那些檔案,這些檔案放置何處嗎?)
往後若有新版的程式,雖說可以再次安裝把舊檔蓋過去,但萬一新版的檔案組成改變了,命名方式不同,那麼就會有一些垃圾檔案殘存在您的主機中,時日一久,安裝的套件一多,可能會發生一些意想不到的事情喔?比如執行某程式忽然出現莫明其妙的情況。
這是 tar 檔安裝模式,長期以來為人所垢病的地方。
為了解決這樣的困擾,許多平台出現了進步的套件管理程式,如此:
FreeBSD 的 pkg
Solaris 的 pkg
RedHat / Mandrake 中的 RPM
Debian 中的 deb。
這些套件管理程式,共同的特徵是:
利用簡單資料庫的型式來記錄套件的安裝位置及版本資訊、套件相依關係。
優點則是:套件程式可以做安裝、查詢、更新、移除等管理動作。
對主機管理人員而言,不啻是一項莫大的福音。
不過, 套件管理程式也是有缺點的:
以資料庫來記錄套件是有風險的,萬一資料庫損壞了、不見了,那對不起,您安裝的程式在管理上就有危險囉!
安裝套件之間經常有相依性,有時也不容易安裝和移除。
並不是所有的平台都有套件安裝管理程式
新版的程式出來了,但這些相關的套件格式一直沒有人包出來,那麼只能 "乾搭願"(台語:眼睜睜地渴望之意) 囉!
看來,方便的設計也一定會帶來某種程度的不便乎?
"太方便" 也是 "不方便" 的一種!:-Q
OK,分析完二者的情況,接下來,為您介紹如何來管理 tar 檔安裝,使您在管理套件上,多一種方便的選擇。
stow 是 GNU 計劃中的一部份,遵守 GPL 版權,它主要的用途便是拿來管理 tar 檔程式的安裝。
stow 的想法很單純,它憑藉的法寶只有二個:Perl 和 softlink。
Perl 是網管人員不可不知不會的必備語言,不會寫一點兒,也要會用一點兒。
softlink 則是 UNIX/Linux/BSD 中 "機"家必備 的良方。:-)
stow 的作法是:
將 tar 檔程式,集中安裝在某一個目錄下,比如 /usr/local/stow 中,然後將 tar 檔必要安裝的程式、設定檔、man檔、locale檔、info檔等,使用 softlink 的方式,連接到其原本約定俗成的位置,比如 /usr/local/bin、/usr/local/man、/usr/local/etc、、/usr/local/info、/usr/local /share/locale等,使其看起來好像真的安裝在這些目錄一樣。
實際上,tar 檔程式的實際路徑仍完整地存在於 /usr/local/stow 中。若欲移除 tar 檔程式,只要將這些 softlink 切斷即可,而這件工作,正是 stow 可以為您服務的地方。
以下開始為您簡介 stow 的用法,這裡以安裝 nano 這個文字編輯器為例。
您可以到 ftp2.tnc.edu.tw/pub/gnu/stow 或各大 GNU FTP site 中抓取 stow。
筆者寫這篇講義時,stow 的最新版是 1.3.3。
簡介步驟如下:
ncftp ftp2.tnc.edu.tw
cd pub/gnu/stow
get stow-1.3.3.tar.gz
tar xvzf stow-1.3.3.tar.gz
cd stow-1.3.3
./configure
make
make install
然後,手動開設一個目錄,用來集中存放往後安裝的 tar 檔程式。
mkdir /usr/local/stow
方法如下:
ncftp ftp2.tnc.edu.tw/pub/gnu/nano
get nano-1.0.9.tar.gz
tar xvzf nano-1.0.9.tar.gz
cd nano-1.0.9
接下來是最重要的地方:
./configure --prefix=/usr/local/stow/nano-1.0.9
這個步驟是指定 nano 要安裝的目的地位於 /usr/local/stow/nano-1.0.9
make
make install
cd /usr/local/stow
stow nano-1.0.9
此時,stow 便會幫您做好 softlink 的動作,比如:
ls -la /usr/local/bin/nano
lrwxrwxrwx 1 root root 27 4?? 8 14:33 /usr/local/bin/nano -> ../stow/nano-1.0.9/bin/nano*
您看,nano 真的就好像安裝在 /usr/local/bin 中一樣,一但您執行 nano,便會自動由 softlink 的指引,找到 nano 真正的路徑 /usr/local/stow/nano-1.0.9/bin/nano。
很簡單!方法如下:
cd /usr/local/stow
stow -D nano-1.0.9
這樣就好啦!
若您再次查 nano 的程式路徑:
ls -la /usr/local/bin/nano
便出現找不到的情況:
ls: /usr/local/bin/nano: No such file or directory
因為 stow 已經幫您切斷這些 softlink 囉!
而 nano-1.0.9 版的所有檔案仍完好地存在於 /usr/local/stow/nano-1.0.9 目錄中。
若您想安裝新版的 nano,您可以把該目錄整個移除(rm -Rf /usr/local/stow/nano-1.0.9),再按上述步驟如法泡製一次即可。
或者,您後悔了,想再重裝一次 nano-1.0.9,只要再進入 /usr/local/stow 目錄中,
下 stow nano-1.0.9 即可,它又安裝回來囉!
您看!tar 檔程式的安裝管理,是不是很簡單呢?!
是誰說 tar 檔無法安裝管理來著? :-)
stow 也是有限制的,它至少有以下缺點:
stow 無法處理不同 tar 檔程式之間的相依性,比如 A 這支 tar ball 可能需要 B 這支 tar ball
stow 無法全自動更新,若相同目錄下存在有相同檔名,stow 不會強制覆蓋過去。
對大型的 tar 檔程式,stow 管理有一點問題,比如 mysql,所以,像這類的 tar 檔程式,不建議您使用 stow。