軟體安裝
安裝了 FreeBSD 後,您一定還會需要安裝其它非 FreeBSD 內附的軟體。在 FreeBSD 上安裝軟體有許多種方法,我們將一一為各位介紹。
包含了下列軟體安裝必備的課題:
* 各種安裝方式的優缺點。
* 如何使用 package。
* 如何使用 port。
* 如何使用傳統安裝方法自行編譯軟體。
10.1 概論
傳統上,要在一個 UNIX 系統上安裝其它軟體時,有幾個步驟:
* 下載該軟體,有可能是 binary 檔或是原始碼。
* 解壓縮該檔案,通常是以 tar 或 gzip 壓縮的。
* 讀一下該目錄中的說明檔案,可能是 readme 或是 doc/ 的檔案,來瞭解如何安裝該軟體。
* 如果所下載的是原始碼,可能要先編輯一下 Makefile 或是執行 configure,接著再編譯該軟體。
* 最後再測試與安裝。
當然,我們可以在 FreeBSD 上使用傳統的方式來安裝軟體,但是還有更簡單的選擇。FreeBSD提供了 package 和 ports 這二種簡單的安裝軟體方式。
所謂的 pakcage 是別人幫你將程式編譯成 binary 檔案,並定義了該安裝在什麼地方。我們只要下載一個壓縮檔,並使用 pkg_add 這個指令就可以快速的將軟體安裝在 FreeBSD 上。這是安裝軟體最簡單的步驟,所安裝的東西也是最標準的,和自己依需求修改並編譯原始碼比較起來較缺乏彈性。
而 port 就是使用原始碼來安裝軟體。我們只要進入 /usr/ports/ 裡想要安裝的軟體目錄中,打指令 make install 就可以完成安裝了。FreeBSD 己經幫我們定義了安裝該軟體所須的步驟、所要求的其它套件。不管是 package 或是 ports,當安裝的軟體需要依靠其它軟體才能繼續安裝時,它們會自動幫你安裝該軟體。所有安裝好的軟體都將記錄在 /var/db/pkg 中,日後如果我們想要移除軟體時,可以用一個簡單的指令 pkg_delete 加上軟體名稱就可以了。
即然 port 這麼好用,為什麼 FreeBSD 要同時有 package 和 ports 呢?我們來比較一下 ports 和 package 的優點:
package 的優點:
* 一個己經編譯過的壓縮檔通常比包含原始碼的檔案還要小。
* 使用 pakcage 並不需要再做任何的編譯動作,如果你的電腦速度很慢,在安裝像 KDE、GNOME 等大型軟體時,不用編譯可以省下很多時間。
* 使用 package 來安裝軟體時,你不必事先瞭解在 FreeBSD 上編譯時間所使用的軟體及其過程。
ports 的優點:
* package 為了要在多數的電腦執行,考慮相容性問題,通常編譯的比較保守。而使用 ports 你可以依自己的系統修改,例如選擇使用 Pentium III 或是 Athlon 的處理器。
* 在編譯 package 時,就已經限制了該軟體的功能,無法再依自己需求擴充。例如 Apache 這套軟體就有許多的功能可以在編譯時間掛進來,使用 ports 來安裝時,你可以依自己的需求來加以修改。
* 我們可以經由更新 Port Tree 來使用較新的軟體,而 package 通常只和系統一起 release。
* 有些軟體不允許使用 binary 檔案的方式散播,只能下載原始碼。
* 有了原始碼,你可以自己修改並加以應用。
* 有的人喜歡擁有原始碼,他們可以讀它、從中學習。
接著我們就針對 package 及 ports 來說明它們的使用方式。
10.2 使用 package
10.2.1 安裝 Package
安裝package 有二種方式,第一種是使用 sysinstall (也就是我們安裝 FreeBSD 時所看到的畫面) 來安裝,另一種是使用手動安裝。使用 sysinstall 安裝時,我們必需選擇安裝的來源,最常使用的來源是網路及光碟片片。但是由於光碟片片容量有限,所以在 FreeBSD 安裝光碟片中所含的 package 軟體數量並不多,因此我通常都選擇使用網路安裝。而使用手動安裝必須自行抓回所需的檔案,並以指令安裝。以下我們就分別針對這二種方式來說明:
方式一:使用 sysinstall
假設我們要安裝在 FreeBSD 上收信的軟體 pine,首先我們要執行 sysinstall 以進入安裝時的畫面:
# sysinstall
圖 10-1
接著選取 Configure選項,進入圖 10-2 的畫面:
圖 10-2
我們選 Packages 選項來安裝 package:
圖 10-3
在圖 10-3 中,我們必須選擇安裝來源,在這裡我們選擇 FTP ,從 FTP 中我們可以找到較多的軟體。選擇了 FTP 之後,將出現圖 10-4 的畫面,讓我們選擇要使用哪一個 FTP 月台:
圖 10-4
我們選擇「URL」來自訂要使用的 FTP 月台。接著便會出現一個要求我們輸入月台地址的視窗, 10-5 所示,假設我們要使用交大資工的月台,則輸入 freebsd.csie.nctu.edu.tw/pub/releases/i386/:
圖 10-5
輸入月台後,會問您是否要使用目前的網路設定。如果我們己經連上網路,則選 YES,否則請選 NO 來設定網路。接著會出現一個軟體分類選單,這一份分類選單將各個軟體分門別類放在不同的選項下,其中 All 是所有軟體的所在, 10-6。
圖 10-6
我們以安裝郵件軟體 pine 為例,由於 pine 位於 mail 分類下,所以我們選擇mail。如果您要安裝中文版本的 pine ,應該選擇 Chinese 選項而非 mail。選擇了 mail 之後,將出現 mail 分類下的所有軟體,我們選 pine-4.58 這一項, 10-7:
圖 10-7
選了pine 之後,就可以選 OK 回到前一個分類畫面,接著按照這種方式選了其它我們要安裝的軟體之後,就可以選「Install」來安裝了。選了 Install 之後,將出現所有我們已選取的軟體列表, 10-8,如果要繼續安裝則選 OK 即可。
圖 10-8
方式二:使用手動安裝
如果以手動的方式安裝,我們必須先取回所要安裝的package。只要是 package ,它的副檔名就是 .tgz。我們可以用 pkg_add 這個指令來安裝它。下面是一個簡單的範例,使用 package 來安裝 lsof-4.66.1.tgz:
# ftp -a freebsd.csie.nctu.edu.tw
Connected to freebsd.csie.nctu.edu.tw.
220---------- Welcome to Pure-FTPd ----------
220-You are user number 139 of 200 allowed.
220-Local time is now 17:49. Server port: 21.
220-Only anonymous FTP is allowed here
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
331 Any password will work
230 Any password will work
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /pub/FreeBSD/ports/packages/sysutils/
250 CWD command successful.
ftp> get lsof-4.71.tgz
local: lsof-4.71.tgz remote: lsof-4.71.tgz
227 Entering Passive Mode (140,113,17,209,189,16)
150-Accepted data connection
150 96.1 kbytes to download
100% |*********************************************************| 98372 136.87 KB/s 00:00 ETA
226-File successfully transferred
226 0.362 seconds (measured here), 265.35 Kbytes per second
98372 bytes received in 00:00 (136.70 KB/s)
ftp> bye
221-Goodbye. You uploaded 0 and downloaded 97 kbytes.
221 Logout.
# pkg_add lsof-4.71.tgz
要使用 package 安裝軟體,首先必須取得想要安裝的軟體。我們可以先 ftp 到各大學 FTP 月台去取得。packaeg 的副檔案是 .tgz,可以在各 FTP 月台的 ports/packages 中取得。以交大資工的 FTP 站而言是放在 ftp://freebsd.csie.nctu.edu.tw/pub/ports/packages ;而中央資工的 FTP 是放在 ftp://freebsd.csie.ncu.edu.tw/FreeBSD/ports/packages 。當進入 ports 的目錄後,我們會發現還有一堆目錄,您可以依您的系統版本選擇要使用哪一個目錄,其中 packages 這個目錄包含了最新的 packages。如果您想要使用 packages-5.4-release 的 packages,我們就可以選擇進入 packages-5.4-release 這個目錄。進入這個目錄後,又有一堆目錄,這裡的目錄結構和你系統中 /usr/ports/ 下的目錄一樣,每個目錄都是軟體的分類,而 All 這個目錄是所有軟體。
如果您只知道想要安裝的軟體名稱,卻不知道版本及完整的檔名,例如您要下載 popa3d 這個軟體,但不知道是哪一版的,你可以先進入 All 的目錄下,再以下列方式查詢:
ftp> ls popa3d*
227 Entering Passive Mode (140,113,209,200,159,54)
150 Opening ASCII mode data connection for /bin/ls.
-r--r--r-- 1 FTP CSIE 19007 Nov 11 12:43 popa3d-0.6.4.1.tgz
226 Transfer complete.
ftp> get popa3d-0.6.4.1.tgz
找到了想要下載的版本是 0.6.4.1,接著就以 get 指令去取回該軟體,最後下 exit 離開。
接著你就可以使用 pkg_add popa3d-0.6.4.1.tgz 來安裝該軟體。
10.2.2 管理 Package
如果我們後悔了,想要移除之前安裝過的軟體,可以下指令 pkg_delete popa3d-0.6.4.1 來移除 popa3d-0.6.4.1 這套軟體,所有我們安裝過的軟體都會記錄在 /var/db/pkg 的目錄中。
我們可以使用 pkg_info 這個指令來得到軟體的資訊。例如在我們下載完一個 package 後,你想要知道這個軟體的資訊,以 popa3d-0.6.4.1.tgz 而言,如果我們想知道它的資訊,你使用下列指令來取得:
# pkg_info popa3d-0.6.4.1.tgz
您也可以只打 pkg_info 來得知所有你安裝過的軟體有哪些。
10.3 使用 ports
如果你要使用 ports 安裝軟體,你必須先確認 /usr/ports 這個目錄是否有安裝。如果沒有的話,使用 /stand/sysinstall 來安裝 ports 的目錄:
1. 以 root 執行 /stand/sysinstall
2. 選擇 Configure 後按 Enter
3. 選擇 Distributions 後按 Enter
4. 選擇 ports 後按空格鍵
5. 選擇 Exit 後按 Enter
6. 選擇你要從 CDROM 或 FTP 安裝等
7. 跟著選單照做,最後離開 sysinstall
或者我們也可以到 http://www.freebsd.org/ports/ 去手動抓回 port.tar.gz 這個檔案,將它放在 /usr/ 下。並以下列指令來安裝:
# cd /usr
# tar zxvf port.tar.gz
現在可以進入 /usr/ports 的目錄中,安裝軟體了。
通常每一個軟體都有一個獨立的目錄,而目錄中都存在著一些檔案,每個檔案都有其特定用途,我們簡列如下:
Makefile 安裝軟體的編譯設定,您可以修改這個檔案來設定我們在編譯及安裝軟體時的參數。
README.html 我們可以經由瀏覽 README.html 來查看所有 ports 目錄下的軟體說明。
distinfo 說明安裝所需要的檔案及其 MD5 的檢查資料。
pkg-comment 簡單的軟體描述。
pkg-descr 較詳細的描述,我們通常可以在裡面找到該軟體網頁的位置,使我們能到該網頁得到更多資訊。
pkg-plist 列出軟體將安裝的清單,安裝後會放在硬碟中的什麼地方。
如果您想安裝某一個軟體,卻不知道它的目錄位置,您可以使用 whereis 這個指令來找出它來。例如我們想安裝 qpopper ,可以使用 whereis qpopper 來找出它所在的目錄。 或者果我們只知道某個程式的關鍵詞,確不知道它放在哪個目錄,我們可以使用下列指令:
# cd /usr/ports
# make search key='關鍵詞'
進入該目錄後,最簡單的安裝方式是直接打 make install,系統就會自動去網路上抓取需要的軟體回來安裝。安裝 ports 時,make 時找檔案的順序是:先去 /usr/ports/distfiles 、再去找 /cdrom/ports/distfiles、最後是網路中下載。如果您不使用網路安裝的話,您可以自己去抓回軟體,並將它放在 /usr/ports/distfiles/ 下,這樣子在我們打 make install 時,就不會去網路上抓取檔案。如果您所需檔案存在光碟片中,在安裝軟體之前,必須先將光碟機 mount 在 /cdrom 中。。但有的軟體並不會到光碟片中去尋找檔案,所以建議您還是將光碟片中 /ports/distfiles 目錄內容複寫到 /usr/ports/distfiles 目錄中,或者先連上網路吧。
當使用網路取得檔案時,預設抓取檔案的伺服器通常在國外,因此,您可以修改 /etc/make.conf 來指定使用國內的 FTP 月台,例如編輯 /etc/make.conf 並加入:
MASTER_SITE_BACKUP?= \
ftp://freebsd.csie.ncu.edu.tw/distfiles/${DIST_SUBDIR}/ \
ftp://freebsd.csie.nctu.edu.tw/pub/distfiles/${DIST_SUBDIR}/
MASTER_SITE_OVERRIDE?= ${MASTER_SITE_BACKUP}
當安裝完 ports 後,我們可以再下指令 make clean 來清除編譯過程產生的檔案,建議最好這麼做,否則有的過程中產生大量檔案可是很驚人的。如果您安裝了一堆軟體之後,才想到之前沒有 make clean,沒關係,在安裝 ports 時,編譯過程的檔案都存在於該軟體目錄下的 work 目錄中。我們可以使用下列指令來找出所有未 make clean 的軟體,並將暫存資料刪除:
# find /usr/ports -depth -name work -exec rm -rf {} \;
如果您使用網路安裝,它會將所下載的原始碼存在 /usr/ports/distfiles 中,當你下 make clean 後,並不會將它們清除。
當你安裝完後,想要移除該軟體時,只要在該軟體的 ports 目錄中打 make deinstall 即可。請注意,不要在 /usr/ports 的目錄中打 make deinstall,這樣可是會將 "所有" 軟體都移除喔。
還有一些較不常用的 make 方式,簡述如下:
make fetch:抓回所需的原始檔。
make fetch-list:顯示安裝所需的檔案。
make checksum:抓回原始檔並以 MD5 檢查其正確性。
make extract:抓回並解開原始檔。
make configure:進行組態,但不繼續編譯。
make all install:抓回原始檔、編譯且安裝。
make reinstall:若先前發生意外中斷,以此命令繼續嘗試安裝。
make package:將做好的 ports 打包製作成 packages。
如果安裝完新的軟體之後,如果使用的 Shell 是 Csh 或 Tcsh,我們可能必須執行指令 rehash 來重建 hash table,之後才能在所設定的指令路徑中找到剛安裝的程式,不然的話就必須輸入該程式的完整路徑或重新登入才能使用。
我們可以在 /var/db/pkg 的目錄中看到我們已安裝的軟體,每一個軟體有一個目錄,目錄中存放著軟體安裝的資訊,包含了軟體說明、安裝到哪些目錄中。有的軟體要安裝前,會要求先安裝某一套軟體,如果你事先沒有安裝它所要求的軟體,通常該軟體會自動幫你安裝。所以我們會在 /var/db/pkg 下看到一些不是我們主動安裝的軟體。既然軟體之間可能會相互依賴,我們要如何得知這些軟體彼此間的關係呢?pkg_tree 這套軟體可以讓我們檢視軟體間的關係。我們可以使用 port 來安裝這套軟體:
# cd /usr/ports/sysutils/pkg_tree
# make install clean
之後我們就可以使用 pkg_tree | more 來看各個軟體之間的關係了 (別忘了要 rehash 喔)。
10.4 更新 port tree
當 FreeBSD release 時,會事先測試過 ports 目錄中的所有軟體是否能正常安裝。因為不同軟體之間時常是相互依賴的,有的時候我們要安裝 A 軟體,系統會自動抓取所需要的其它軟體。這些軟體對於彼此的版本可能會有相互依賴,所以在 release 之前,ports 會暫停更新各個軟體的版本,以確保 release 的版本能正常運作。
但在 release 之後,ports 目錄中的軟體版本可能已有更新,有的軟體版本更新可能只是增加新的功能,而有的更新更涉及系統安全。如果您想使用 ports 安裝軟體最新的版本,在安裝軟體之前,我們可以先使用一些工具來更新整個 port tree。
有時候更新了 port tree 之後,因為版本相依問題,有些軟體可能會因此而無法順利安裝,您只要在過幾天后重新做一次 port tree 的更新應該就可以解決了。
更新 port tree 的方法很簡單,我們可以使用 CVSup 來保持 ports 在最新狀態。CVSup 是一套用來維持軟體原始碼和Team Dev同步的工具,在我們執行了 CVSup 之後,它會經由網路向所設定的軟體伺服器檢查並更新原始碼的版本。我們可以使用 CVSup 來更新 port tree,也可以用來更新 /usr/src 目錄下的 FreeBSD 原始碼。
首先,我們必須安裝 CVSup,因為我們不使用圖形介面,所以安裝 cvsup-without-gui:
# cd /usr/ports/net/cvsup-without-gui
# make install clean
在系統中有一份以 CVSup 更新 port tree 的設定檔案範例,您可以直接加以修改或著先複製一份後再修改。我們將該設定檔案範例複製到 /root 之後再加以修改:
# cp /usr/share/examples/cvsup/ports-supfile /root/
接著請以文書編輯軟體開啟 /root/ports-supfile 後,找到 host 的部份來設定所要使用的 CVSup 伺服器。
# Defaults that apply to all the collections
#
# IMPORTANT: Change the next line to use one of the CVSup mirror sites
# listed at http://www.freebsd.org/doc/handbook/mirrors.html.
*default host=cvsup.tw.freebsd.org
*default base=/usr
*default prefix=/usr
*default release=cvs tag=.
*default delete use-rel-suffix
# If your network link is a T1 or faster, comment out the following line.
*default compress
## Ports Collection.
#
# The easiest way to get the ports tree is to use the "ports-all"
# mega-collection. It includes all of the individual "ports-*"
# collections,
ports-all
# These are the individual collections that make up "ports-all". If you
# use these, be sure to comment out "ports-all" above.
#
# Be sure to ALWAYS cvsup the ports-base collection if you use any of the
# other individual collections below. ports-base is a mandatory collection
# for the ports collection, and your ports may not build correctly if it
# is not kept up to date.
#ports-base
#ports-archivers
#ports-astro
#ports-audio
#ports-benchmarks
………略…………
上面的範例中,我們將 CVSup 伺服器設為 cvsup.tw.freebsd.org,這一台伺服器是由交大資工所維護,您可以依您所在位置使用其它 cvsup1 ~ cvsup13.tw.freebsd.org 的伺服器。例如 cvsup3 位於中山大學,cvsup13 是 giga 和信超媒體的伺服器。最後一行的 ports-all 表示我們要更新 /usr/ports 目錄下的所有檔案。您也可以只更新其中的部份目錄,只要將 ports-all 以井字型大小 "#" 標示起來,並將檔案中 ports-base 那一行的 # 移除,接著您就可以依您所要更新的目錄來要移除其它的 # 字型大小。例如,我們只要更新 /usr/ports/www 這個目錄,將 ports-all 以 # 標示起來之後,我們還要移除 ports-base 及 ports-www 開頭的 #。
設定完畢之後,我們就可以開始進行 ports 的更新了。
# cvsup -g -L 2 /root/ports-supfile
上述指令中,參數 g 表示不使用圖形介面,而參數 L 及其後所跟隨的數字 2 表示我們要看到更新過程的記錄的詳細程度,數字可以從 0 ~ 2,最後的檔名表示所要使用的設定檔。
在使用 ports 安裝軟體之前,先執行 CVSup 是一個不錯的習慣,您可以隨時取得軟體的最新版本,不過您的機器一定要連上網際網路才能進行更新。
10.5 使用 portupgrade 更新軟體
在使用 Port 安裝了一堆軟體後,如果軟體有新的版本出來怎麼辦?FreeBSD 的 ports 管理工具中有一個好用的軟體 - portupgrade。
通常 ports 中的軟體都有相依性,例如安裝 Apache 會自動安裝 libexpat、安裝防垃圾信軟體會自動安裝一堆 Perl 模組。而在更新軟體時,我們必須要確定更新過後,相依的軟體都一併更新,才不會造成更新後有東西不能運作的情形。不過這並不表示我們一定要常常更新軟體,建議您只有在必要時才使用 portupgrade 來更軟體,不要有事沒事就跑一次。因為軟體並不是最新的就最好,沒有人能保證更新的軟體是否還維持您原本期望的行為。
portupgrade 在更新軟體時,會保留您原本的設定檔。例如,在更新 Apache 時,它會保留 httpd.conf 的設定。使用 portupgrade 是更新 ports 軟體比較安全的方式。
在您使用 cvsup 更新 port tree 後,我們可以使用下列指令查看目前安裝的軟體版本是否和 port tree 中的版本一樣:
# pkg_version -v
ispell-3.2.06_12 = up-to-date with port
jasper-1.701.0 = up-to-date with port
jpeg-6b_3 = up-to-date with port
kde-3.3.0 < needs updating (port has 3.3.1)
kdeaccessibility-3.3.0 < needs updating (port has 3.3.1)
... 略 ...
上列輸出中需要更新的軟體會有「< needs updating」的字樣。您可以選擇想要更新的軟體,再使用 portupgrade 來更新。首先,我們必須使用 ports 來安裝 portupgrade:
# cd /usr/ports/sysutils/portupgrade
# make install clean
如果您只想要升級某一個軟體本身,而非所有相依的軟體,只要使用 portupgrade pkgname 即可。如果您要升級所有和該軟體相依的其它軟體,則可以加上參數 -r。如果您要更新包含相依軟體的相依軟體,則可以使用參數 -R。另外,您可以使用參數 -m 來要求編譯 (make) ports 時多傳入一些參數,還可以使用參數 -f 要求就算版本一樣也強制更新。
假設我們要更新的軟體是 perl-5.8,我們可以使用下列指令來更新:
# portupgrade -rf "perl-5.8.*" -m "ENABLE_SUIDPERL=yes"
小提示
筆者並不建議您使用 portupgrade 來安裝所有軟體,尤其不建議使用參數 -a 來更新所有軟體。一方面新的軟體不一定會更好,另一方面,我們很難保證更新後的軟體會正常運作。而且我們在安裝軟體時,並不一定只使用 make install,還有可能在 make 後加上一些參數以支援更多的功能,直接使用 portupgrade 並不一定還能保留這些功能。我們介紹 portupgrade 的目只是為了讓您在安裝 Open WebMail 時更新 perl 時更順暢。
10.6 傳統安裝方式
我們介紹了 FreeBSD 專屬的 package 及 port 安裝方式後,接下來我們還是要詳細說明一下傳統上在 UNIX 機器上安裝軟體的方式。
有的時候,我們要想要裝的軟體可能不在 port 裡,或者 port 中的軟體版本尚未更新,這時候我們就必須使用傳統的安裝方式來安裝軟體。基本上,傳統安裝方式就像本章開頭所說的,大多必須要有下列步驟:
* 從該軟體網站或其它 FTP 月台下載該軟體,有可能是 binary 檔或是原始碼。
* 解壓縮該檔案,通常是以 tar 或 gzip、bzip2 壓縮的。
* 讀一下該目錄中的說明檔案,可能是 readme 或是 doc/ 的檔案,來瞭解如何安裝該軟體。
* 如果所下載的是原始碼,可能要先編輯一下 Makefile 或是執行 configure,接著再編譯該軟體。
* 最後再測試與安裝。
我們以 MySQL 這個軟體為例。
下載及解壓縮
首先我們到 MySQL 網站上下載最新的原始碼。一般原始碼大多以指令 tar 包成一個檔案,再壓縮成 gzip 或是 bzip2 格式。所以您下載的檔案副檔名大多為 .tar.gz、.tgz、或是 .tar.bz2。
副檔名為 .tar.gz 或是 .tgz 的檔案為 tar + gzip 格式,MySQL 的原始碼就是這一種類型。我們可以使用下列指令來解壓縮:
# tar zxvf mysql-4.1.13.tar.gz
如果副檔名為 .tar.bz2 的檔案,則是 tar + bzip2 的格式,遇到這種格式時,我們可以使用下列指令解壓縮:
# tar jxvf mysql-4.1.13.tar.bz2
我們可以看到上述二種格式都可以使用 tar 來解壓縮,只是 gzip 格式必須使用參數 z,而 bzip2 的格式必須使用參數 j。指令 tar 的其它參數所代表的意義為:x 是解開的意思、v 是要觀看解開的過程、f 是指定要解壓縮的檔案名稱。
解開之後,我們就可以進入下一步開始安裝。
查看說明檔
每個軟體在安裝上大同小異,但有的軟體除了一般安裝流程外,可能還有自己獨特步驟。所以在安裝之前,我們必須先看一下說明檔,以瞭解如何進行安裝。
大部份的開放原始碼軟體都會有 README 或是 INSTALL 這二個檔案,用以說明安裝的步驟。有的軟體可能有其它檔案,但我們可以從檔名瞭解應該要看哪一個說明檔。以 MySQL 為例,在它的原始碼封裝中,有一個檔名為 INSTALL-SOURCE 的檔案,應該就是我們要看的安裝說明檔。我們使用文書編輯器開啟該檔後,可以看到一些關於安裝的說明。MySQL 的說明檔寫的蠻詳細的,但我們可以將重點放在 Installation 的地方:
2.8.1 Source Installation Overview
----------------------------------
The basic commands you must execute to install a MySQL source
distribution are:
shell> groupadd mysql
shell> useradd -g mysql mysql
shell> gunzip < mysql-VERSION.tar.gz | tar -xvf -
shell> cd mysql-VERSION
shell> ./configure --prefix=/usr/local/mysql
shell> make
shell> make install
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> cd /usr/local/mysql
shell> bin/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql var
shell> chgrp -R mysql .
shell> bin/mysqld_safe --user=mysql &
我們可以看到它的安裝步驟寫的很詳細,還有指令範例。簡單來看,應該就是要先增加一個使用者為 mysql,並增加 mysql 群組。接著再解壓縮原始碼、進行編譯、安裝、並做一些安裝後的設定。
編譯
在 MySQL 的安裝步驟中,編譯前要先進行 configure。事實上,大多數的開放原始碼軟體編譯流程都使用下列三個步驟:
# ./configure
# make
# make install
第一個指令是 configure,這個指令可以用來檢查您目前系統的設定,並依您的使用環境決定要不要加入某些功能。您也可以使用下列指令查看 configure 指令中可以使用哪些參數:
# ./configure --help | more
原則上,除非有特殊要求,否則我們直接執行 configure 即可。以 MySQL 為例,我們在 configure 指令後面加上下列參數:
# ./configure --prefix=/usr/local/mysql \
--with-low-memory \
--with-charset=big5
我們使用 --prefix 以指定要安裝的路徑,這是所有使用 configure 的軟體都會有的參數。另外,我們還指定編譯時間不要使用太多記憶體 (--with-low-memory),並設定 MySQL 支援中文字集 (--with-charset=big5)。
執行完 configure 檢查環境並設定安裝的項目後,我們就可以使用 make 來進行編譯。指令 make 會呼叫編譯器 gcc 來將原始碼轉換成執行檔。
安裝
編譯完後,我們可以使用下列指令安裝:
# make install
您可以看到程式安裝的過程。安裝完成後,我們必須依不同的軟體要求進行安裝後的設定。以 MySQL 為例,我們必須先使用 mysql_install_db 以初始化資料庫,並將一些目錄的擁有者設定為 mysql。
最後就可以啟動 mysql 了。而如果我們要在開機時啟動 MySQL,必須將它的啟動指令加入 /etc/rc.local 中,或是在 /usr/local/etc/rc.d 中加入一個 mysql.sh 並將啟動的指令寫在該檔案中,然後將 mysql.sh 設為可執行。如此一來,FreeBSD 在開機時就會自動執行它。
以上就是一般傳統軟體安裝的流程:configure、make、make install,其實使用上也不太難。
小提示
傳統的安裝流程比較容易遇到的問題可能是在執行 make 時發生錯誤,如果您遇到問題,可以在 google 上尋找 make 所產生的第一個錯誤的關鍵詞,應該可以找到類似的問題及解決的方法。