Linux 下 安装软件 例子

来源:互联网 发布:淘宝的全球购在哪里 编辑:程序博客网 时间:2024/05/22 06:28
Tarball 的管理與建議

在我們知道了原始碼的相關資訊之後,再來要瞭解的自然就是如何使用具有原始碼的Tarball 來建立一個屬於自己的軟體囉!從前面幾個小節的說明當中,我們曉得其實Tarball 的安裝是可以跨平台的,因為 C 語言的程式碼在各個平台上面是可以共通的,只是需要的編譯器可能並不相同而已。例如Linux 上面用 gcc 而 Windows 上面也有相關的 C 編譯器啊~所以呢,同樣的一組原始碼,既可以在CentOS Linux 上面編譯,也可以在 SuSE Linux 上面編譯,當然,也可以在大部分的 Unix 平台上面編譯成功的!

如果萬一沒有編譯成功怎麼辦?很簡單啊,透過修改小部分的程式碼 (通常是因為很小部分的異動而已) 就可以進行跨平台的移植了!也就是說,剛剛我們在 Linux 底下寫的程式『理論上,是可以在Windows 上面編譯的!』這就是原始碼的好處啦!所以說,如果朋友們想要學習程式語言的話,鳥哥個人是比較建議學習『具有跨平台能力的程式語言』,例如C 就是很不錯的一個!

唉啊!又扯遠了~趕緊拉回來繼續說明我們的 Tarball 啦!


小標題的圖示使用原始碼管理軟體所需要的基礎軟體

從原始碼的說明我們曉得要製作一個 binary program 需要很多咚咚的呢!這包括底下這些基礎的軟體:

  • gcc 或 cc 等 C 語言編譯器 (compiler):

    沒有編譯器怎麼進行編譯的動作?所以 C compiler 是一定要有的。不過 Linux 上面有眾多的編譯器,其中當然以 GNU的 gcc 是首選的自由軟體編譯器囉!事實上很多在 Linux 平台上面發展的軟體的原始碼,原本就是以gcc 為底來設計的呢。

  • make 及 autoconfig 等軟體:

    一般來說,以 Tarball 方式釋出的軟體當中,為了簡化編譯的流程,通常都是配合前幾個小節提到的make 這個指令來依據目標檔案的相依性而進行編譯。但是我們也知道說 make 需要makefile 這個檔案的規則,那由於不同的系統裡面可能具有的基礎軟體環境並不相同,所以就需要偵測使用者的作業環境,好自行建立一個 makefile 檔案。這個自行偵測的小程式也必須要藉由 autoconfig 這個相關的軟體來輔助才行。

  • 需要 Kernel 提供的 Library 以及相關的 Include 檔案:

    從前面的原始碼編譯過程,我們曉得函式庫 (library) 的重要性,同時也曉得有 include 檔案的存在。很多的軟體在發展的時候都是直接取用系統核心提供的函式庫與 include 檔案的,這樣才可以與這個作業系統相容啊!尤其是在『驅動程式方面的模組 』,例如網路卡、音效卡、USB等驅動程式在安裝的時候,常常是需要核心提供的相關資訊的。在 Red Hat 的系統當中 (包含 Fedora/CentOS 等系列),這個核心相關的功能通常都是被包含在kernel-sourcekernel-header 這些軟體名稱當中,所以記得要安裝這些軟體喔!

雖然 Tarball 的安裝上面相當的簡單,如同我們前面幾個小節的例子,只要順著開發商提供的README 與 INSTALL 檔案所載明的步驟來進行,安裝是很容易的。但是我們卻還是常常會在BBS 或者是新聞群組當中發現這些留言:『我在執行某個程式的偵測檔案時,他都會告訴我沒有gcc 這個軟體,這是怎麼回事?』還有:『我沒有辦法使用 make 耶!這是什麼問題?』呵呵!這就是沒有安裝上面提到的那些基礎軟體啦!

咦!為什麼使用者不安裝這些軟體啊?這是因為目前的 Linux distribution大多已經偏向於桌上型電腦的使用 (非伺服器端),他們希望使用者能夠按照廠商自己的希望來安裝相關的軟體即可,所以通常『預設』是沒有安裝 gcc 或者是 make 等軟體的。所以啦,如果你希望未來可以自行安裝一些以Tarball 方式釋出的軟體時,記得請自行挑選想要安裝的軟體名稱喔!例如在CentOS 或者是 Red Hat 當中記得選擇Development Tools以及 Kernel Source Development 等相關字眼的軟體群集呢。

那萬一我已經安裝好一部 Linux 主機,但是使用的是預設值所安裝的軟體,所以沒有make, gcc 等咚咚,該如何是好?呵呵!問題其實不大啦,目前使用最廣泛的 CentOS/Fedora或者是 Red Hat 大多是以 RPM (下一章會介紹) 來安裝軟體的,所以,你只要拿出當初安裝Linux 時的原版光碟,然後以下一章介紹的 RPM 來一個一個的加入到你的 Linux 主機裡面就好啦!很簡單的啦!尤其現在又有 yum 這玩意兒,更方便吶!

在 CentOS 當中,如果你已經有網路可以連上 Internet 的話,那麼就可以使用下一章會談到的 yum 囉!透過 yum 的軟體群組安裝功能,你可以這樣做:

  • 如果是要安裝 gcc 等軟體發展工具,請使用『 yum groupinstall "Development Tools" 』
  • 若待安裝的軟體需要圖形介面支援,一般還需要『 yum groupinstall "X Software Development" 』
  • 若安裝的軟體較舊,可能需要『 yum groupinstall "Legacy Software Development" 』

大概就是這樣,更多的資訊請參考下一章的介紹喔。


Tarball 安裝的基本步驟

我們提過以 Tarball 方式釋出的軟體是需要重新編譯可執行的binary program 的。而 Tarball 是以 tar 這個指令來打包與壓縮的檔案,所以啦,當然就需要先將Tarball 解壓縮,然後到原始碼所在的目錄下進行 makefile 的建立,再以 make來進行編譯與安裝的動作啊!所以整個安裝的基礎動作大多是這樣的:

  1. 取得原始檔:將 tarball 檔案在 /usr/local/src 目錄下解壓縮;
  2. 取得步驟流程:進入新建立的目錄底下,去查閱 INSTALL 與 README 等相關檔案內容 (很重要的步驟!);
  3. 相依屬性軟體安裝:根據 INSTALL/README 的內容察看並安裝好一些相依的軟體 (非必要);
  4. 建立 makefile:以自動偵測程式 (configure 或 config) 偵測作業環境,並建立 Makefile 這個檔案;
  5. 編譯:以 make 這個程式並使用該目錄下的 Makefile 做為他的參數設定檔,來進行 make (編譯或其他) 的動作;
  6. 安裝:以 make 這個程式,並以 Makefile 這個參數設定檔,依據install 這個標的 (target) 的指定來安裝到正確的路徑!

注意到上面的第二個步驟,通常在每個軟體在釋出的時候,都會附上 INSTALL 或者是 README 這種檔名的說明檔,這些說明檔請『確實詳細的』閱讀過一遍,通常這些檔案會記錄這個軟體的安裝要求、軟體的工作項目、與軟體的安裝參數設定及技巧等,只要仔細的讀完這些檔案,基本上,要安裝好tarball 的檔案,都不會有什麼大問題囉。

至於 makefile 在製作出來之後,裡頭會有相當多的標的 (target),最常見的就是 install 與 clean 囉!通常『make clean』代表著將目標檔 (object file) 清除掉,『make』則是將原始碼進行編譯而已。注意喔!編譯完成的可執行檔與相關的設定檔還在原始碼所在的目錄當中喔!因此,最後要進行『makeinstall』來將編譯完成的所有咚咚都給他安裝到正確的路徑去,這樣就可以使用該軟體啦!

OK!我們底下約略提一下大部分的 tarball 軟體之安裝的指令下達方式:

  1. ./configure
    這個步驟就是在建立 Makefile 這個檔案囉!通常程式開發者會寫一支scripts 來檢查你的 Linux 系統、相關的軟體屬性等等,這個步驟相當的重要,因為未來你的安裝資訊都是這一步驟內完成的!另外,這個步驟的相關資訊應該要參考一下該目錄下的README 或 INSTALL 相關的檔案!

  2. make clean
    make 會讀取 Makefile 中關於 clean 的工作。這個步驟不一定會有,但是希望執行一下,因為他可以去除目標檔案!因為誰也不確定原始碼裡面到底有沒有包含上次編譯過的目標檔案 (*.o) 存在,所以當然還是清除一下比較妥當的。至少等一下新編譯出來的執行檔我們可以確定是使用自己的機器所編譯完成的嘛!

  3. make
    make 會依據 Makefile 當中的預設工作進行編譯的行為!編譯的工作主要是進行gcc 來將原始碼編譯成為可以被執行的 object files ,但是這些 object files通常還需要一些函式庫之類的 link 後,才能產生一個完整的執行檔!使用 make就是要將原始碼編譯成為可以被執行的可執行檔,而這個可執行檔會放置在目前所在的目錄之下,尚未被安裝到預定安裝的目錄中;

  4. make install
    通常這就是最後的安裝步驟了,make 會依據 Makefile 這個檔案裡面關於 install 的項目,將上一個步驟所編譯完成的資料給他安裝到預定的目錄中,就完成安裝啦!

請注意,上面的步驟是一步一步來進行的,而其中只要一個步驟無法成功,那麼後續的步驟就完全沒有辦法進行的!因此,要確定每一的步驟都是成功的才可以!舉個例子來說,萬一今天你在 ./configure 就不成功了,那麼就表示 Makefile無法被建立起來,要知道,後面的步驟都是根據 Makefile 來進行的,既然無法建立 Makefile,後續的步驟當然無法成功囉!

另外,如果在 make 無法成功的話,那就表示原始檔案無法被編譯成可執行檔,那麼 make install主要是將編譯完成的檔案給他放置到檔案系統中的,既然都沒有可用的執行檔了,怎麼進行安裝?所以囉,要每一個步驟都正確無誤才能往下繼續做!此外,如果安裝成功,並且是安裝在獨立的一個目錄中,例如 /usr/local/packages 這個目錄中好了,那麼你就必需手動的將這個軟體的man page 給他寫入 /etc/man.config 裡面去。


一般Tarball 軟體安裝的建議事項 (如何移除?升級?)

或許你已經發現了也說不定,那就是為什麼前一個小節裡面,Tarball 要在 /usr/local/src 裡面解壓縮呢?基本上,在預設的情況下,原本的Linux distribution 釋出安裝的軟體大多是在 /usr 裡面的,而使用者自行安裝的軟體則建議放置在/usr/local 裡面。這是考量到管理使用者所安裝軟體的便利性。

怎麼說呢?我們曉得幾乎每個軟體都會提供線上說明的服務,那就是info 與 man 的功能。在預設的情況下, man 會去搜尋 /usr/local/man 裡面的說明文件,因此,如果我們將軟體安裝在 /usr/local 底下的話,那麼自然安裝完成之後,該軟體的說明文件就可以被找到了。此外,如果你所管理的主機其實是由多人共同管理的,或者是如同學校裡面,一部主機是由學生管理的,但是學生總會畢業吧?所以需要進行交接,如果大家都將軟體安裝在/usr/local 底下,那麼管理上不就顯的特別的容易嗎!

所以囉,通常我們會建議大家將自己安裝的軟體放置在 /usr/local 下,至於原始碼(Tarball)則建議放置在 /usr/local/src (src 為 source 的縮寫)底下啊。

再來,讓我們先來看一看 Linux distribution 預設的安裝軟體的路徑會用到哪些?我們以apache 這個軟體來說明的話 (apache 是 WWW 伺服器軟體,詳細的資料請參考伺服器架設篇。你的系統不見得有裝這個軟體):

  • /etc/httpd
  • /usr/lib
  • /usr/bin
  • /usr/share/man

我們會發現軟體的內容大致上是擺在 etc, lib, bin, man等目錄當中,分別代表『設定檔、函式庫、執行檔、線上說明檔』。好了,那麼你是以 tarball 來安裝時呢?如果是放在預設的 /usr/local 裡面,由於 /usr/local 原本就預設這幾個目錄了,所以你的資料就會被放在:

  • /usr/local/etc
  • /usr/local/bin
  • /usr/local/lib
  • /usr/local/man

但是如果你每個軟體都選擇在這個預設的路徑下安裝的話,那麼所有的軟體的檔案都將放置在這四個目錄當中,因此,如果你都安裝在這個目錄下的話,那麼未來再想要升級或移除的時候,就會比較難以追查檔案的來源囉!而如果你在安裝的時候選擇的是單獨的目錄,例如我將apache 安裝在 /usr/local/apache 當中,那麼你的檔案目錄就會變成:

  • /usr/local/apache/etc
  • /usr/local/apache/bin
  • /usr/local/apache/lib
  • /usr/local/apache/man

呵呵!單一軟體的檔案都在同一個目錄之下,那麼要移除該軟體就簡單的多了!只要將該目錄移除即可視為該軟體已經被移除囉!以上面為例,我想要移除apache 只要下達『rm -rf /usr/local/apache』就算移除這個軟體啦!當然囉,實際安裝的時候還是得視該軟體的Makefile 裡頭的 install 資訊才能知道到底他的安裝情況為何的。因為例如 sendmail的安裝就很麻煩......

這個方式雖然有利於軟體的移除,但不曉得你有沒有發現,我們在執行某些指令的時候,與該指令是否在PATH 這個環境變數所記錄的路徑有關,以上面為例,我的 /usr/local/apache/bin肯定是不在 PATH 裡面的,所以執行 apache 的指令就得要利用絕對路徑了,否則就得將這個/usr/local/apache/bin 加入 PATH 裡面。另外,那個 /usr/local/apache/man也需要加入 man page 搜尋的路徑當中啊!

除此之外, Tarball 在升級的時候也是挺困擾的,怎麼說呢?我們還是以 apache來說明好了。WWW 伺服器為了考慮互動性,所以通常會將 PHP+MySQL+Apache 一起安裝起來 (詳細的資訊請參考伺服器架設篇),果真如此的話,那麼每個軟體在安裝的時候『都有一定的順序與程序!』因為他們三者之間具有相關性,所以安裝時必需要三者同時考慮到他們的函式庫與相關的編譯參數。

假設今天我只要升級 PHP 呢?有的時候因為只有涉及動態函式庫的升級,那麼我只要升級 PHP 即可!其他的部分或許影響不大。但是如果今天 PHP 需要重新編譯的模組比較多,那麼可能會連帶的,連 Apache 這個程式也需要重新編譯過才行!真是有點給他頭痛的!沒辦法啦!使用tarball 確實有他的優點啦,但是在這方面,確實也有他一定的傷腦筋程度。

由於 Tarball 在升級與安裝上面具有這些特色,亦即 Tarball 在反安裝上面具有比較高的難度 (如果你沒有好好規劃的話~),所以,為了方便 Tarball 的管理,通常鳥哥會這樣建議使用者:

  1. 最好將 tarball 的原始資料解壓縮到 /usr/local/src 當中;

  2. 安裝時,最好安裝到 /usr/local 這個預設路徑下;

  3. 考慮未來的反安裝步驟,最好可以將每個軟體單獨的安裝在 /usr/local 底下;

  4. 為安裝到單獨目錄的軟體之 man page 加入 man path 搜尋:
    如果你安裝的軟體放置到 /usr/local/software/ ,那麼 man page 搜尋的設定中,可能就得要在 /etc/man.config 內的 40~50 行左右處,寫入如下的一行:
    MANPATH /usr/local/software/man
    這樣才可以使用 man 來查詢該軟體的線上文件囉!

一個簡單的範例、利用ntp 來示範

讀萬卷書不如行萬里路啊!所以當然我們就來給他測試看看,看你是否真的瞭解了如何利用Tarball 來安裝軟體呢?我們利用時間伺服器 (network time protocol) ntp 這個軟體來測試安裝看看。先請到http://www.ntp.org/downloads.html這個目錄去下載檔案,請下載最新版本的檔案即可。或者直接到鳥哥的網站下載 2009/05 公告釋出的穩定版本:

http://linux.vbird.org/linux_basic/0520source/ntp-4.2.4p7.tar.gz

假設我對這個軟體的要求是這樣的:

  • 假設 ntp-4.2.4p7.tar.gz 這個檔案放置在 /root 這個目錄下;
  • 原始碼請解開在 /usr/local/src 底下;
  • 我要安裝到 /usr/local/ntp 這個目錄中;

那麼你可以依照底下的步驟來安裝測試看看 (如果可以的話,請你不要參考底下的文件資料,先自行安裝過一遍這個軟體,然後再來對照一下鳥哥的步驟喔!)。


  • 解壓縮下載的 tarball ,並參閱 README/INSTALL 檔案
[root@www ~]# cd /usr/local/src   <==切換目錄[root@www src]# tar -zxvf /root/ntp-4.2.4p7.tar.gz  <==解壓縮到此目錄ntp-4.2.4p7/         <==會建立這個目錄喔!ntp-4.2.4p7/libopts/....(底下省略)....[root@www src]# cd ntp-4.2.4p7/[root@www ntp-4.2.4p7]# vi INSTALL  <==記得 README 也要看一下!# 特別看一下 28 行到 54 行之間的安裝簡介!可以瞭解如何安裝的流程喔!

  • 檢查 configure 支援參數,並實際建置 makefile 規則檔
[root@www ntp*]# ./configure --help | more  <==查詢可用的參數有哪些  --prefix=PREFIX         install architecture-independent files in PREFIX  --enable-all-clocks     + include all suitable non-PARSE clocks:  --enable-parse-clocks   - include all suitable PARSE clocks:# 上面列出的是比較重要的,或者是你可能需要的參數功能![root@www ntp*]# ./configure --prefix=/usr/local/ntp \>  --enable-all-clocks --enable-parse-clocks  <==開始建立makefilechecking for a BSD-compatible install... /usr/bin/install -cchecking whether build environment is sane... yes....(中間省略)....checking for gcc... gcc           <==也有找到 gcc 編譯器了!....(中間省略)....config.status: creating Makefile  <==現在知道這個重要性了吧?config.status: creating config.hconfig.status: executing depfiles commands

一般來說 configure 設定參數較重要的就是那個 --prefix=/path 了,--prefix 後面接的路徑就是『這個軟體未來要安裝到那個目錄去?』如果你沒有指定 --prefix=/path 這個參數,通常預設參數就是 /usr/local 至於其他的參數意義就得要參考 ./configure --help 了!這個動作完成之後會產生 makefile 或 Makefile 這個檔案。當然啦,這個偵測檢查的過程會顯示在螢幕上,特別留意關於 gcc 的檢查,還有最重要的是最後需要成功的建立起 Makefile 才行


  • 最後開始編譯與安裝嚕!
[root@www ntp*]# make clean; make[root@www ntp*]# make check[root@www ntp*]# make install# 將資料給他安裝在 /usr/local/ntp 底下

整個動作就這麼簡單,你完成了嗎?完成之後到 /usr/local/ntp 你發現了什麼?


原创粉丝点击