FreeBSD 的 packages 是別人已經編譯好的程式並將設定、程序打包在一起的,有時候可能會因為需要啟動某些功能選項,或是想試試 DIY 的樂趣,我們就必需抓原始碼來重新編譯,如果一項項自己來肯定是耗時又費工
FreeBSD 的 ports 就是別人已經編譯過,安裝測試沒問題了,他們將軟體編譯時所需的組態設定、編譯程序及安裝程序都依固定的格式擺在一起,我們只要先將某個軟體 ports 目錄下的檔案抓回來,然後很輕鬆的下
make
make install
即可完成軟體的編譯和安裝(也可以用一行 make all install 來代替)
一般 ports 的咦髁鞒
fetch
抓取軟體的原始碼(source code),它會依下面的順序搜尋:先找 /usr/ports/distfiles找
/etc/make.conf 中設定的網站找 Makefile 中 MASTER_SITES 設定的網站 extract 檢查
source,並將它解開到 works 的目錄中 patch 對 source 做 patch,修改以符合 FreeBSD 的環境需求
configure 產生設定檔 build 開始編譯 install 將編譯好的東西安裝到系統中
下面就來看看如何利用 ports 來安裝軟體
--------------------------------------------------------------------------------
第一次使用前的準備工作
mkdir -p /usr/ports/distfiles
利用 ncFTPget (安裝 ncftp3 的 package即有這個工具) 抓取 Mk 的目錄
cd /usr/ports
ncftpget -R ftp://freebsd.csie.nctu.edu.tw/pub/ports/Mk
或
ncftpget -R ftp://ftp.tku.edu.tw/OS/FreeBSD/ports/Mk
※ /usr/port/Mk 這個目錄最好要抓最新的(每次都先以 rm 砍掉後再試著重抓哦)
不然可能會發生無法順利 make ports 的狀況
ee /etc/make.conf 在裡面加上
MASTER_SITE_OVERRIDE = ftp://ftp.tku.edu.tw/OS/FreeBSD/distfiles/
ftp://ftp.ntu.edu.tw/OS/FreeBSD/distfiles/
ftp://bsd.sinica.edu.tw/pub1/FreeBSD/distfiles/
ftp://freebsd.csie.nctu.edu.tw/pub/distfiles/
註:
由
於一般 ports 在 make 時如果在 /usr/ports/distfiles 中沒找到 source 會讀取 Makefile
中設定的 MASTER_SITE (大都是設到國外)如果有設定 MASTER_SITE_OVERRIDE 會先去自訂的 URL
試,這樣會比原來設定的國外網站快一些
--------------------------------------------------------------------------------
軟體 DIY開始用 ports 來安裝軟體,例如想自己試試編譯一下 apache
利用 ncftpget 抓取 apache 的 ports
cd /usr/ports
ncftpget -R ftp://ftp.tku.edu.tw/OS/FreeBSD/ports/www/apache13
好了會多一個目錄 apache13
cd apache13
make
make install
如果安裝成功可用 pkg_info 查一下,是不是多了 apache 的 packages 在裡面囉!!
--------------------------------------------------------------------------------
ports make 前加上自己的參數有時我們可能希望啟動某項功能,例如:讓 mysql 資料庫可以接受中文字就必須加上 --with-charset=big5 的參數再 make
ports
想增/減任何組態參數時,只要修改 Makefile 中 CONFIGURE_ARGS 那部份即可有的 ports 甚至用 script 和
dialog 以 menu 的方式讓你選擇要啟動功能,例如: mod_php4,mod_php3 就是以點單的方式選擇,然後 script
再幫你加參數
讓 mysql 資料庫支援中文下面先看如何幫 mysql (server && client) 支援中文
準備工作因為 mysql 在 make 時需用到 liBTool所以要先安裝 libtool 的 package ,可以直接用安裝光碟上的就好了
mount /cdrom
pkg_add -v /cdrom/packages/All/libtool*
抓取 ports 的相關檔案cd /usr/ports
mkdir databases
cd databases
ncftpget -R ftp://ftp.tku.edu.tw/OS/FreeBSD/ports/databases/mysql323-server
ncftpget -R ftp://ftp.tku.edu.tw/OS/FreeBSD/ports/databases/mysql323-client
修改 Makefilecd databases/mysql323-server
ee Makefile 找 CONFIGURE_ARGS 的那行,加上一行 --with-charset=big5
變成
CONFIGURE_ARGS= --localstatedir=${DB_DIR}
--with-charset=big5
--without-perl
--without-debug
--without-readline
--without-bench
--with-mit-threads=no
--with-libwrap
--with-low-memory
存好檔後就可以 make 囉!!
ps.如果不想修改 Makefile ,mysql 新的 ports 可以用下面的語法
make WITH_CHARSET=big5
編譯、安裝make all install
清除編譯留下的暫存檔案make clean
當然囉!可以一氣呵成:make install clean
打造自己的 mod_php4mod_php4 可以讓 apache 功能更強大,它可以和很多東西再結合提供更多強大的功能
例如:
選用 gd + freetype 可以讓 php 抓 .ttf 字型檔中的中文字並動態產生 .png 的圖形
啟動 imap 的參數架設像 imp,twig,focalmail 等 webmail。
加入 mysql 的功能,讓 php 可以存取 mysql 資料庫......
準備工作先將 apache 安裝好
要在 mod_php4 中外掛其它功能,在 make 前必須先把相關的套件安裝好
GD: gd-1.8.3.tgz , jpeg-6b.tgz , png-1.0.8_1.tgz
FreeType: freetype
IMAP: cclient
MySQL: mysql3223-client , libtools
抓取 ports 的相關檔案cd /usr/ports
ncftpget -R ftp://ftp.tku.edu.tw/OS/FreeBSD/ports/mod_php4
選擇功能、進行編譯cd mod_php4
make
出現『configuration options』點單選取要用的功能(要先確定那些套件已經裝好哦!!)
記得是用空白鍵來選取/取消,都好了就按 OK
安裝make install
--------------------------------------------------------------------------------
和別人分享自己 make 好的 ports 也可以打包成 packages 和人分享哦!!
只要在 make 完後,執行 make package 就會產生 *.tgz 的 packages 囉!!
--------------------------------------------------------------------------------
移除用 ports 安裝的軟體其實 ports & packages 本出同源,packages 怎麼移除的呢?! pkg_delete -v xxxx
So~唉呀!!一樣的方法即可啦!!這又證明了 FreeBSD 是一個組織架構嚴謹的作業系統
另一個方法是利用 ports 本身的 make deinstall
--------------------------------------------------------------------------------
建議預先安裝的 packages由於很多 ports 在 make 時會用到一些編譯工具或函式庫,如果不是用整個 ports tree
建議先安裝下面幾個 packages 才不致編譯失敗
bzip2 (解壓縮的工具,4.4 起已內建)
autoconf , m4
gettext , gmake
automake
libtool
--------------------------------------------------------------------------------
為什麼 ports 會編譯失敗
有時以 ports 來編譯軟體會失敗,可能的原因如下:
/usr/ports/Mk 不是最新的內容
編譯時少了某些配合的工具
該 ports 的維護者上載的資料有誤
阅读(986) | 评论(0) | 转发(0) |