[Power by FreeBSD]
顏國雄 2001/02 初
利用 ports 來安裝軟體
2004/07/21 修改 

FreeBSD 的 packages 是別人已經編譯好的程式並將設定、程序打包在一起的,用 packages 安裝容易且省了不少的編譯等待的時間,但是,有時候可能會因為需要啟動某些功能選項,或是想試試 DIY 的樂趣,我們就必需抓原始碼來重新編譯,如果一項項自己來,肯定是耗時又費工。

FreeBSD 的 ports 就是別人已經編譯過,安裝測試沒問題了,他們將軟體編譯時所需的組態設定、編譯程序及安裝程序,都依照固定的格式擺在一起,當這些東西經由維護小組認可後即加入軟體蒐集中,對一般使用者而言, 我們只要先將某個軟體 ports 目錄下的檔案抓回來,然後很輕鬆的下:

make
make install

即可自動完成軟體的編譯和安裝 (也可以只用一行 make all install 來代替)。

用過 FreeBSD 的 ports 後,大部份的人都會被它這個完美的機制給吸引了, 這也是很多人喜歡用 FreeBSD 的主因之一哦。

一般 ports 在編譯時的運作流程:

fetch 抓取軟體的原始碼(source code),它會依下面的順序搜尋:
  • 先找 /usr/ports/distfiles
  • 找 /etc/make.conf 中設定的網站
  • 找 Makefile 中 MASTER_SITES 設定的網站
checksum 檢查原始檔的 checksum 吻不吻合
depends 檢查並自動安裝須先安裝的相關軟體
extract 檢查 source,並將它解開到 works 的目錄中
patch 對 source 做 patch,修改以符合 FreeBSD 的環境需求
configure 產生設定檔
build 開始編譯
install 將編譯好的東西安裝到系統中

下面就來看看如何利用 ports 來安裝軟體。

 

使用前的準備工作

目前已經移植到 FreeBSD 上並列入 ports 中的軟體已經超過萬個,如果要將完整的 ports collectio 放到硬碟中 (/usr/ports) ,光是所有設定檔的部份就要至少準備 300MB ,如果硬碟空間夠的話,可以參考後面的『取得整個 ports collection』,就不用為到底要抓哪些目錄而傷腦筋,不然只需抓部份重要的目錄及要編譯的 ports 檔案就可以了。

取得完整 ports collection

取得完整 ports collection 的方法主要有兩個, 一是利用安裝光碟,一是利用 cvsup 上網抓。 不過,/usr/ports 所在的 partition 硬碟空間至少要超過 250 MB 以上, 如果再加上以後編譯軟體時會下載的 source (存在 /usr/ports/distfiles) 及編譯時產生的暫存檔, /usr/ports 可要有一定的可用空間才行。

方法一:以光碟安裝

    1. 置入安裝光碟後以 root 執行 /stand/sysinstall
    2. 移動方向鍵,選取 Configure 後按 Enter
    3. 移動方向鍵,選取 Distributions 後按 Enter
    4. 移動方向鍵,選取 ports 後按空白鍵
    5. 移動方向鍵,選取 Exit 後按 Enter
    6. 移動方向鍵,選取 Media 後按空白鍵
    7. 選取 CDROM 後按空白鍵
    8. 安裝完後回到最上層點單按 X 離開

    因為光碟上的檔案不見得是最新版的,可以的話,安裝完後再利用方法二的 cvsup 更新一下。

方法二:透過 cvsup 更新

如果做過系統升級,這部份是很類似的

  1. 安裝 cvsup 的 package
    pkg_add -v ftp://ftp.tku.edu.tw/OS/FreeBSD/packages/packages-stable/Latest/cvsup-without-gui.tgz
  2. cp /usr/share/examples/cvsup/ports-supfile /root
  3. 執行 ee /root/ports-supfile 編輯設定
  4. 將 CHANGE_THIS.FreeBSD.org 換為最近的主機,例: cvsup.tw.FreeBSD.org
  5. 執行 cvsup -g -L 2 /root/ports-supfile

 

抓取 ports 編譯必備的目錄、檔案

如果已經按前面方法更新了整個 ports tree 了,本步驟即可跳過。

ports 在 make 時,會使用到一些共同的設定及工具,在整個 /usr/ports 目錄中,像 Mk , Templates , Tools 三個目錄是少不了的,如果想要能在 /usr/ports 目錄中以關鍵字來搜尋 ports ,則還要抓 Makefile , INDEX 兩個檔案。

下面的例子是利用 ncftpget 來抓取 ports 的某些必備的目錄, ncftpget 在安裝 ncftp3 的 package 即會有這個工具, 當然也可以換成別的工具,例如:wget , ftp ,......,端看個人習慣。

1.建立 /usr/ports 及 /usr/ports/distfiles 目錄

mkdir -p /usr/ports/distfiles

2.切換到 /usr/ports 的目錄中

cd /usr/ports

3.利用 ncftpget 抓取 Mk 的目錄

ncftpget -R ftp://freebsd.csie.nctu.edu.tw/pub/ports/ports/Mk

4.利用 ncftpget 抓取 Templates 的目錄

ncftpget -R ftp://freebsd.csie.nctu.edu.tw/pub/ports/ports/Templates

5.利用 ncftpget 抓取 Tools 的目錄

ncftpget -R ftp://freebsd.csie.nctu.edu.tw/pub/ports/ports/Tools

※ /usr/ports/MK /usr/ports/Templates /usr/ports/Tools 這些目錄最好要抓最新的,
 我每次都先砍掉後再試著重抓,不然可能會發生無法順利 make ports 的狀況


設定 source 的來源網站

當我們在 make ports 時,FreeBSD 會自動到網路上抓 sources 放到 /usr/ports/distfiles 中,大部份的網站都是在國外,我們可以修改 /etc/make.conf 中的參數來告訴系統優先使用我們所指定的國內網站。這樣,可以讓抓 sources 的速度快一些。

修改的方法如下:

# ee /etc/make.conf

在裡面加上:

MASTER_SITE_OVERRIDE = ftp://ftp.tku.edu.tw/OS/FreeBSD/distfiles/ \
                 ftp://freebsd.csie.nctu.edu.tw/pub/distfiles/

裡面放的是 FTP 站中放 sources 目錄的 URL ,每個 URL 一行,最後面記得加上空格和一個反斜線(表示連在一行)。

 

軟體 DIY之一

開始用 ports 來安裝軟體,例如想自己試試編譯一下 apache 1.3.x

1.更新 ports 設定檔

如果已經更新了整個 ports tree 了,本步驟即可跳過。

利用 ncftpget 抓取 apache 的 ports 相關檔案

mkdir -p /usr/ports/www
cd /usr/ports/www
ncftpget -R ftp://freebsd.csie.nctu.edu.tw/pub/ports/ports/www/apache13

如果好了,會多一個目錄 /usr/ports/www/apache13

 

2.編譯

更新好 apache13 的 ports 設定檔後即可執行下列指令開始編譯

cd /usr/ports/www/apache13
make

接著會出現類似下面的訊息在畫面中:

===> Vulnerability check disabled
>> apache_1.3.31.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from http://www.apache.org/dist/httpd/.
apache_1.3.31.tar.gz 100% of 2409 kB 94 kBps 00m00s
===> Extracting for apache-1.3.31_2
>> Checksum OK for apache_1.3.31.tar.gz.
===> Patching for apache-1.3.31_2
===> Applying FreeBSD patches for apache-1.3.31_2
...... 略
<=== src/support
<=== src

如果看得到最後兩行而沒有被中斷掉,代表已經成功編譯完 apache ,可以準備安裝。

3.安裝

如果沒有任何錯誤訊息,就在同一目錄中執行下列指令來安裝

make install

安裝時可能出現下面的訊息:

===> Installing for apache-1.3.31_2
===> apache-1.3.31_2 depends on file: /usr/local/etc/rc.subr - found
===> apache-1.3.31_2 depends on shared library: expat.5 - found
...... 略
<=== [config]
...... 略
===> COMPATIBILITY NOTE:
...... 略
===> BE CAREFULL HOW TO BOOT on 1.3.29_4 or after:
...... 略
===> SECURITY REPORT:
...... 略

安裝時,最前的會先檢查是否已安裝好本軟體所需的 /usr/local/etc/rc.subr 及 expat.5,而最後面則是有關本軟體的設定、相容性及安全性警告的訊息。

如果安裝成功,可以用 pkg_info 查一下,是不是多了 apache 的 packages 在裡面囉!!

 

軟體間的相依性

有時在編譯軟體會用到要搭配的工具或相關軟體及程式庫,如果沒有先安裝好就可能因此而編譯失敗。 以編譯前例的 apache13 來說,它需要有:

/usr/ports/textproc/expat2

以 apache-1.3.31_2 的版本來說,要先安裝 expat-1.95.7 才行。

如果系統中沒有 expat2 ,編譯時就會有下面的訊息 (黑體字的部份) 出現:

# make
===> Vulnerability check disabled
>> apache_1.3.31.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from http://www.apache.org/dist/httpd/.
apache_1.3.31.tar.gz 100% of 2409 kB 94 kBps 00m00s
===> Extracting for apache-1.3.31_2
>> Checksum OK for apache_1.3.31.tar.gz.
===> Patching for apache-1.3.31_2
===> Applying FreeBSD patches for apache-1.3.31_2
===> apache-1.3.31_2 depends on shared library: expat.5 - not found
===> Verifying install for expat.5 in /usr/ports/textproc/expat2
>> No directory for expat.5. Skipping..
...... 略

從上面訊息我們可以看出來,在 apache13 時會檢查系統中是否有安裝 expat.5 的共用函式庫,沒有的話會試圖切換至 /usr/ports/textproc/expat2 來編譯所需的 expat2 ,這種情形如果 /usr/ports 有完整的 ports tree ,系統會自動先去編譯所需的軟體 (本例的 /usr/ports/textproc/expat2) ,並先安裝所需的東東,如果 ports tree 中找不到則會跳過這個程序,然後才開始編譯所指定的 port ,這減少了使用者不少處理軟體相依性的麻煩。

至於如何有完整的 ports tree 請參考前面的說明。

 

軟體 DIY之二 ── 打造自己的 mod_php4

mod_php4 可以讓 apache 的功能更強大,產生動態的網頁,它可以和很多東西再結合以提供更多、更強大的功能, 例如:

  • 選用 gd + freetype 可以讓 php 抓 .ttf 字型檔中的中文字並動態產生 .png 的圖形
  • 啟動 imap 的參數架設像 imp,twig,focalmail 等 webmail。
  • 加入 mysql 的功能,讓 php 可以存取 mysql 資料庫。
  • 加入 symbaseDB 的功能,可以存取 MSSQL 資料庫。
  • ......

1.準備工作

如果 /usr/ports 中已經按前面的方法取得完整的 ports tree 了,這個步驟可省略,因為和 mod_php4 相關的軟體會自動編譯及安裝好後才編譯 mod_php4。

首先當然要先將 apache 安裝好,另外,要在 mod_php4 中外掛的其它功能,則必須在 make 前先把相關的套件安裝好,下面是以 2003.08 的版本為例說明:

FreeBSD mod_php4-4.3.3.r1_1 預設的選項有:

CTYPE , MYSQL , OVERLOAD , PCRE , POSIX , SESSION , TOKENIZER , XML , ZLIB

如果都選的話,則需要先安裝下列的東西:

  • /usr/local/sbin/apxs (apache-1.3.28)
  • /usr/local/libexec/libtool14/libtool (libtool-1.4.3_2)
  • bison (bison-1.875)
  • mysqlclient.14 (mysql_client-4.1.0_1)
  • expat.4 (expat-1.95_6)


例如,我想再加入以下的選項:

GD ,GETTEXT , ICONV , IMAP

則需要再先安裝下面的 packages:

  • GD : gd-nox11-2.0.15 , jpeg-6b_1 , png-1.2.5_2 , freetype2-2.1.4_1
  • GETTEXT : gettext-0.11.5_1
  • ICONV : libiconv-1.9.1_1
  • IMAP : cclient-2002d,1

如果 /usr/ports 的 ports tree 是完整的,系統會把上述那些要先裝的軟體都自動安裝好,省去不少分析相依性的麻煩。

 

2.抓取 ports 的相關檔案

如果 /usr/ports 中已經按前面的方法取得完整的 ports tree 了,這個步驟可省略

我們可以利用 ncftpget 來抓取所需的 ports 檔案,指令如下:

mkidr -p /usr/ports/www /usr/ports/lang

cd /usr/ports/www
ncftpget -R ftp://freebsd.csie.nctu.edu.tw/pub/ports/ports/www/mod_php4

cd /usr/ports/lang
ncftpget -R ftp://freebsd.csie.nctu.edu.tw/pub/ports/ports/www/php4

註:現在要編譯 mod_php4 (只用預設選項),ports tree 中至少要有以下的結構:

/usr/ports/
   ├Mk
   ├Templates
   ├Tools
   ├databases/mysql40-client
   ├lang/php4
   └www/mod_php4
2004.07.05

3.選擇功能選項、進行編譯

執行下面的指令即可開始進行 mod_php4 的編譯工作

cd /usr/ports/www/mod_php4
make WITHOUT_X11=yes


說明:
 上面多加的 WITHOUT_X11=yes 是因為 GD2 預設會用到 Xpm.4 (X-Windows的 library)
 如果安裝 gd-nox11-2.0.15 則不用 Xpm.4
 但是必須在 make 時加上 WITHOUT_X11=yes 告訴它用 GD2 但不使用 Xmp.4
 這是在編譯 ports 時要加入特殊選項常見的方法
 通常會用 WITH_xxx=?? 或是 WITHOUT_xxx=??
 像以前在編譯 mysql 時可能會用 make WITH_CHARSET=big5
 讓 mysql 可支援 big5 的 charset (不過有人建議不要用,不然會衍生其它問題)


出現『configuration options』點單,我們可以利用選單來選取要為 PHP 加入的額外的功能,這也是 FreeBSD ports 的一大特色,利用對話框來設定編譯時的選項。

選取要用的功能 (要先確定那些套件已經裝好哦!!),我們只要以上、下方向鍵移到要選取/取消的選項,然後按空白鍵。


都選好後好了就移到 [ OK ] 按空白鍵。

接著會出現類似下面的畫面:

===> Applying FreeBSD patches for mod_php4-4.3.3.r2,1
===> mod_php4-4.3.3.r2,1 depends on file: /usr/local/sbin/apxs - found
===> mod_php4-4.3.3.r2,1 depends on file: /usr/local/libexec/libtool14/libtool- found
===> mod_php4-4.3.3.r2,1 depends on executable: bison - found
===> mod_php4-4.3.3.r2,1 depends on shared library: freetype.9 - found
===> mod_php4-4.3.3.r2,1 depends on shared library: png.5 - found
===> mod_php4-4.3.3.r2,1 depends on shared library: jpeg.9 - found
===> mod_php4-4.3.3.r2,1 depends on shared library: intl.4 - found
===> mod_php4-4.3.3.r2,1 depends on shared library: iconv.3 - found
===> mod_php4-4.3.3.r2,1 depends on shared library: c-client4.8 - found
===> mod_php4-4.3.3.r2,1 depends on shared library: mysqlclient.14 - found
===> mod_php4-4.3.3.r2,1 depends on shared library: expat.4 - found
===> Configuring for mod_php4-4.3.3.r2,1

To enable LZW-compressed GIF support in GD define the WITH_LZW knob.

creating cache ./config.cache
.............................................
.............................................

經過一段時間的編譯後,如果最後是停在:

............................................
............................................

Build complete.
(It is safe to ignore warnings about tempnam and tmpnam).
 


恭喜!表示已經編譯成功囉!就可以準備安裝。

 

4.安裝

程式編譯完成後,我們只要執行下列指令即可進行安裝:

make install

 

5. 後記

自 2004/07/19 以後 mod_php4 , mod_php5 的結構有很大的改變
從這點再度告訴我們:
FreeBSD 要進行更新前,不管是系統更新或是 ports 更新, UPDATING 一定要先仔細閱讀後再開始 make , 也就是在進行完 cvsup 後,以下兩個檔案必讀:

  • /usr/src/UPDATING
  • /usr/ports/UPDATING

在 RedHat 上用 mod_php4 ,它一向都是要什麼功能再掛相關的 extensions,例如:要用 mysql 就再安裝 php mysql 的 module ,這樣的方式 php 不用重新編譯,只要一直外掛 modules 修改 php.ini 即可

FreeBSD mod_php4 ports 過去一向是在 make 時出現選項讓我們選定功能後 make , 功能通通和 libphp4.so 綁在一起,想再加什麼 function 就要重編 mod_php4

從 2004/07/19 開始, www/mod_php4 不會再出現過去的功能選擇對話,只提供最最基的功能了,其它功能都必須單獨以 extensions 編譯

也就是說,如果只安裝 mod_php4 將不會有 mysql 連線的功能 ......
必須再加上 databases/php4-mysql 才可以
而想要有 imap 等 mail 的 functions 可用,必須加上 mail/php-imap ,依此類推

如果已經針對 /usr/ports 做過 cvsup , 想回到類似以前出現選單編譯的樣子就執行:


cd /usr/ports/www/mod_php4
make
make install
cd /usr/ports/lang/php4-extensions
make

那個 php4-extensions 就是一個各項功能編譯的整合,不過 ports tree 不完整的可能出現類似下面的錯誤訊息:


Unknown extension ctype.
*** Error code 1

Stop in /usr/ports/lang/php4-extensions.

那是因為選了 CTYPE 的 extension 不過卻找不到 /usr/ports/textproc/php4-ctype,
同理,如果我們選了 MYSQL 就必須有 /usr/ports/databases/php4-mysql。

 

為什麼 ports 會編譯失敗

1.ports tree 不完整

# make
"/usr/share/mk/bsd.port.mk", line 6: Could not find /usr/ports/Mk/bsd.port.mk
"/usr/ports/www/mod_php4/../../lang/php4/Makefile", line 144: Malformed conditional (${OSVERSION} < 400014 || defined(WITHOUT_IPV6))
"/usr/ports/www/mod_php4/../../lang/php4/Makefile", line 144: Missing dependency operator
"/usr/ports/www/mod_php4/../../lang/php4/Makefile", line 146: if-less endif
"/usr/ports/www/mod_php4/../../lang/php4/Makefile", line 146: Need an operator
"/usr/share/mk/bsd.port.mk", line 6: Could not find /usr/ports/Mk/bsd.port.mk
make: fatal errors encountered -- cannot continue

看紅色的那行 Could not find .... 應該可以知道問題出在哪兒吧!
沒錯,少抓 /usr/ports/Mk 了!

cp: /usr/ports/Templates/config.guess: No such file or directory
*** Error code 1

Stop in /usr/ports/www/mod_php4.
*** Error code 1

看到上面 No such file or directory 那行,少了 /usr/ports/Templates

# make WITHOUT_X11
"Makefile", line 21: Could not find /usr/ports/www/mod_php4/../../lang/php4/Makefile
make: fatal errors encountered -- cannot continue

這種狀況比較不會發生在已經用光碟或 cvsup 安裝整個 ports collection 。
以最近的 mod_php4 來說,除了需要 /usr/ports/www/mod_php4 外,尚需要 /usr/ports/lang/php4 , 如果在 /usr/ports 中少抓了 php4 ,或是路徑沒按照它的原有結構存放,就可能出現上面的訊息。

2.少安裝相關的工具或程式庫

make
===> mod_php4-4.3.3.r2,1 depends on file: /usr/local/sbin/apxs - found
===> mod_php4-4.3.3.r2,1 depends on file: /usr/local/libexec/libtool14/libtool- found
===> mod_php4-4.3.3.r2,1 depends on executable: bison - not found
===> Verifying install for bison in /usr/ports/devel/bison
>> No directory for bison. Skipping..

===> mod_php4-4.3.3.r2,1 depends on shared library: mysqlclient.14 - found
===> mod_php4-4.3.3.r2,1 depends on shared library: expat.4 - found
===> Configuring for mod_php4-4.3.3.r2,1
..............................................................
..............................................................

以這個例子來看,系統沒安裝 bison (紅色的那行),
在 depends 的階段會試圖看看 ports tree 中有沒有 /usr/ports/devel/bison
有會自行編譯並安裝,但是由桃紅色那行看來是找不到,
因此有可能會編譯失敗或是安裝後無法正常的使用
解決之道就是自行安裝少的 packages 或是將 ports 少的目錄補上
像 libtool,gmake,autoconf,expat,bison,m4,libiconv,...... 是常用的東東,記得裝上

3 系統時間不對

# make
===> Vulnerability check disabled
===> Extracting for apache-1.3.31_2
>> Checksum OK for apache_1.3.31.tar.gz.
/usr/bin/tar: apache_1.3.31/Announcement: time stamp Apr 30 04:48 2004 is 258507
18 s in the future

/usr/bin/tar: apache_1.3.31/Announcement.de: time stamp Apr 30 15:54 2004 is 258
90713 s in the future
/usr/bin/tar: apache_1.3.31/Announcement.es: time stamp May 4 21:27 2004 is 262
56248 s in the future

如果出現很多像黑體字的訊息,表示系統時間可能不對了,最好能在 make 之前先以網路校時一下,才不致發生這種錯誤。例如執行底下的指令校時:

ntpdate -s watch.stdtime.gov.tw

或是

ntpdate -s stdtime.sinica.edu.tw

 

3.ports 本身有問題

吃燒餅哪有不掉芝麻的!有時編譯失敗並不是您的錯
該 ports 的維護者上載的資料有誤或是版本上配合的問題都可能造成錯誤
不過踩到地雷的機會應該沒那麼頻繁。

 

和別人分享

自己 make 好的 ports 也可以打包成 packages 和人分享哦!!

只要在 make 完後,執行

make package

就會自動依設定將所需的檔案壓縮打包,產生 *.tgz 的 packages 囉!!

 

移除用 ports 安裝的軟體

其實 ports & packages 本出同源,packages 怎麼移除的呢?! 執行下面的指令 (xxxx 為 packages 名稱)

pkg_delete -v xxxx

So∼唉呀!!移除 ports 用的是一樣的方法啦!!先用 pkg_info 查出軟體的名稱,再利用 pkg_delete 來移除檔案,這又證明了 FreeBSD 是一個組織架構嚴謹的作業系統。

另一個方法是利用 ports 本身的 make deinstall (在要移除的 ports 目錄中執行此指令)

 

建議預先安裝的 packages

由於很多 ports 在 make 時會用到一些編譯工具或函式庫,如果不是用整個 ports tree

建議先安裝下面幾個 packages 才不致編譯失敗:

  • bzip2 (解壓縮的工具,4.4 起已內建)
  • autoconf , m4
  • gettext , gmake
  • automake
  • libtool
  • bison

 

新選項

觀察一下自己的 FreeBSD 中是不是有一個目錄叫 /var/db/ports ,這個目錄在舊版的 FreeBSD 是沒有的,它的目錄結構很像 /var/db/pkg ,其下的每一個目錄就是一個軟體的設定,例如:/var/db/ports/samba-3 就是放 samba 3.x ports 的相關設定。

前述的目錄主要是存放各 ports 在編譯時設定的選項,像 php 在第一次編譯時會出現要涵括的功能選項,以前是儲存在 php ports 目錄中的一個叫 Makefile.inc 的檔案,新的機置是統一放在 /var/db/ports 中各軟體目錄中一個叫 options 的檔案,例如:net/samba-devel 的編譯選項就是放在 /var/db/ports/samba-3/options 裡。這種機置可以讓我在下次編譯同樣的 ports 時可以不用重新選取所需功能選項。

關於設定選項,我們在 make 時多了下面的方法:

make config

當我們需要重新設定某個 ports 的選項時,只要在該 ports 目錄中執行上面的指令。

make showconfig

showconfig 可以顯示該 ports 目錄的選項設定內容。

make rmconfig

rmconfig 則可以清除之前的設定內容 (其實就是把該 ports 的 options 檔案刪除)。

※ (2004/05/27)

 

關於 MASTER_SITE_OVERRIDE

我們在編譯 ports 時所需的原始碼 FreeBSD 怎麼知道要到哪兒抓的?如果觀察各 ports 中的 Makefile 檔案,我們會發現有一些 URL ,而它們開頭是一個叫 MASTER_SITES 的變數,這便是機關所在。

和 ports 抓原始碼有關的三個比較重要的變數有:

  • MASTER_SITES
  • MASTER_SITE_OVERRIDE
  • MASTER_SITE_BACKUP

MASTER_SITES

編譯 ports 時,如果在 /usr/ports/distfiles 中找不到軟體的原始碼 (distribution files), 就會由 MASTER_SITES 設定的預設的軟體原始碼下載目錄 URL 下載。

MASTER_SITE_OVERRIDE

一般,我們不會去修改 MASTER_SITES ,而是利用 MASTER_SITE_OVERRIDE 來將 MASTER_SITE 的設定值取代。

這個變數加入 /etc/make.conf 中,在 make ports 即可發生作用。 我們可以把離自己最近、速度最快又有提供所需 distfiles 的目錄 URL 加到 MASTER_SITE_OVERRIDE, 這樣就不會老是連到所設定的國外網站去抓原始碼。

MASTER_SITE_BACKUP

一般, ports 我們在下完 make 後,它會先找本機目錄中 (例如:/usr/ports/distfiles) 有沒有原始碼, 沒有再找 MASTER_SITES 中的設定,再沒有則會找 MASTER_SITE_BACKUP 中的設定。


相關的設定說明可以在 /usr/ports/Mk/bsd.port.mk 中找到。

正因為如此, /usr/ports/Mk 目錄必須維持最新的檔案,才能有最新的設定。

※ (2004/05/27)

 

更詳細的說明

關於 ports 詳細的說明可以 man ports

或是看 /usr/share/doc/handbook/ports.html

http://www.FreeBSD.org/doc/handbook/ports.html

至於想要自己做 ports 則可參考 The Porter's Handbook

文件應該會放在 /usr/share/doc/porters-handbook/index.html


 


 基礎: 書籤 - 簡介 - 安裝 - Slices - Unix基礎 - 基本指令 - 首次登入 - 目錄架構
 系統: 核心編譯 - 系統升級 - Packages - Ports - PicoBSD - Quota
 網路: 服務管理 - WWW - FTP - MAIL - DNS - Samba - NFS - DHCP - webmin - IMP - OpenWebmail
 其它: Backup - UPS - 系統安全 - ipfw&natd - 撥接服務 - 計時制ADSL - 雜記 - FAQ

北市文山區力行國小顏國雄