![]() ![]() ![]() ![]() |
||
2.3. 設定組態這個階段是最困難的階段,大部份的情況下都是要在 port 的 Makefile (就是我們上面寫的那個) 裡面動手腳,少部份情況下會需要做 patch 對程式作直接的修改。第一步就是要先看看這程式裡面有什麼東西,下 make extract 把 tarball 解開來看看,它會解到 WRKSRC 所指定的目錄,預設值是 ${WRKDIR}/${DISTNAME},也就是 work/bar-1.09;進目錄以後先看看有沒有 configure 或是 Makefile 這兩個檔 (其實應該是要先找 INSTALL 或是 README 啦,不過我往往跳過這一步 :p),看到有 configure 的時候就直接先跑一下 ./configure --help 看有沒有什麼參數或是和其他軟體有沒有相依性,以本例來說是沒有;而從 configure --help 的輸出我們可以判斷這是一個 GNU configure script,所以要在 port Makefile 裡面加一條相對應的 GNU_CONFIGURE= yes 如果有什麼需要用到的參數則要再加設像下面這樣的設定: CONFIGURE_ARGS= --with-blah 設好這些東西以後,就可以讓 ports system 來看看是不是能夠正確地生出 Makefile 啦,方法就是在 port 目錄N0B;打 make configure;通常來說,只要沒看到什麼錯誤訊息或是突然中止程式的話應該就是沒問題,不過還是快速瀏覽一下生出來的 Makefile,結果找到一個小錯誤,configure 程式對系統有點誤解,多了一個 transform 的動作 transform = s,^,i386-portbld-freebsd4.10-, 這問題也很好解決,多加一行設定即可: USE_GNOME= gnometarget 加這行並不是代表這個 port 跟 GNOME 有任何關係啦,只是因為 gnometarget 做的事情剛好是我們要的而已;當然如果您不想被誤會的話也可以直接設定 CONFIGURE_TARGET= --build=${MACHINE_ARCH}-portbld-freebsd${OSREL} 結果是一樣的。下面列出我們之前的那個 Makefile 的骨架,在經過了一連串的修改以後,應該長成什麼樣子: # ex:ts=8 # Ports collection makefile for: clpbar # Date created: Sep 3, 2004 # Whom: ijliao # # $FreeBSD$ # PORTNAME= clpbar PORTVERSION= 1.09 CATEGORIES= misc MASTER_SITES= ${MASTER_SITE_SOURCEFORGE} MASTER_SITE_SUBDIR= ${PORTNAME} DISTNAME= bar-${PORTVERSION} MAINTAINER= ports@FreeBSD.org COMMENT= Command Line Progress Bar USE_GNOME= gnometarget GNU_CONFIGURE= yes .include <bsd.port.mk> 2.4. 編譯在正確產生 Makefile 以後,接下來就是要正式來 build 這個程式了;一般而言,使用者只需要在 port 的目錄下直接打 make 就可以了,大多數的軟體所附的 Makefile 都是用 FreeBSD 所認識的格式,但是偶爾的情況下還是會碰到問題,在 build 的過程中會吐一個找不到 operator 的錯誤訊息出來,以經驗判斷大多是因為它們用了 gmake 特有的 Makefile rules,解決方法就是在 port 的 Makefile 加一行設定 USE_GMAKE= yes 當然在本例中這是不需要的,純粹只是提出來做個參考。 2.5. 安裝如果一切都沒問題,完整地做完 build 的動作的話,接下來當然是要進行安裝的動作啦。身為一個 port 的開發人員,有些事情要先為使用者設想好,例如說如果使用者不想再用了,該要怎麼移除呢 ? 當然我們都知道有 pkg_delete 這個程式,但是它是怎麼知道相關資訊例如說要把什麼檔案砍掉之類的 ? 這就是我們要事先就準備好的訊息啦。一般而言,我們要把這個程式安裝了哪些檔案的列表給放在一個叫做 pkg-plist 的檔案裡面 (以相對路徑表示,基準點在 ${PREFIX},也就是 /usr/local 或是 /usr/X11R6);而如果這個 port 只有安裝一兩個檔,特地新增一個檔案就放個兩行感覺好像有點小題大做,我們也可以直接在 Makefile 裡面加一個 PLIST_FILES 的設定。以本例而言,您可以新增一個 pkg-plist,其內容為: bin/bar 也可以在 Makefile 裡加一行,其內容為: PLIST_FILES= bin/bar 效果是一樣的。除了列出檔案以外,也要把多出來的目錄也列進去 (不過在本例中沒有這個情況),一樣有兩種方式,一種是寫在 pkg-plist 中: @dirrm path/to/extra/dir # 記住一樣是相對路徑,而且不能加最後面的那個 '/' 喔 或者是寫在 Makefile 裡: PLIST_DIRS= path/to/extra/dir 基本上,所有新增的檔案和目錄都要紀錄在 pkg-plist (或 PLIST_FILES/PLIST_DIRS) 裡,但是如果該程式有安裝 man page 的話,則要獨立分開來寫,不能列在前項 (因為 man page 在系統中通常會有壓縮,處理程序不同)。man page 的登記方法是要在 Makefile 裡面加註,以本例而言就是: MAN1= bar.1 如果安裝的檔案是 .1 的話,就列在 MAN1 下;如果是安裝 .8 的 man page 的話,就要寫一個 MAN8 的設定。 # ex:ts=8 # Ports collection makefile for: clpbar # Date created: Sep 3, 2004 # Whom: ijliao # # $FreeBSD$ # PORTNAME= clpbar PORTVERSION= 1.09 CATEGORIES= misc MASTER_SITES= ${MASTER_SITE_SOURCEFORGE} MASTER_SITE_SUBDIR= ${PORTNAME} DISTNAME= bar-${PORTVERSION} MAINTAINER= ports@FreeBSD.org COMMENT= Command Line Progress Bar USE_GNOME= gnometarget GNU_CONFIGURE= yes PLIST_FILES= bin/bar MAN1= bar.1 .include <bsd.port.mk> 2.6. 打包測試port 建好NE5;後,接下來就是要測試啦,這裡不是指程式功能性方面的測試 (這在您考慮做 port 之前就該先測過),而是您所做的這個 port 到底能不能用呢 ? 包括能不能從 ports system 安ˆDD;及移除、能不能生成 package、能不能利用 pkg_add 來安裝這個 package、能不能利用 pkg_delete 來移除、...、等等,在 Porters Handbook 裡面建議要做的測試事項有這麼多: make install make package make deinstall pkg_add package-name make deinstall make reinstall make package 2.7. 和別人分享如果您做了一個 port 不止是自己要用,其他人也想要用,或是您想要把這個 port 利用 send-pr 送進 FreeBSD Ports Collections 的話,除了上面做的那個打包測試以外,最好還要再多一項 portlint 測試。portlint 就在 ports/devel/portlint 下面,make install 就搞定了。在用 portlint 的時候,我的建議是把它調到最嚴,也就是 portlint -ACN,它會自動檢查 "目前所在目錄" 的 port 架構,您也可以額外指定目錄給它,例如 portlint -ACN /path/to/ur/port。它會檢查您所做的這個 port 有沒有犯一些語法方面的錯誤,也會提出一些建議,例如 Makefile 裡面那些變數的排列順序等等。在修正了所有的問題以後,就可以放心地把它交給別人啦,一般而言都是用 shar 這支程式來打包,指令是 shar `find /path/to/ur/port` >! /tmp/port.shar;拿到這個 port.shar 的人只要下 sh port.shar 的話就會自動把所有的檔案都解出來啦。 3. 結語受限於篇幅,本期只介紹了一小部份的 port 寫作方法,只能算是入門初階的程度,還有更多更深入的題材還沒有介紹,例如 *_DEPENDS、files/ 下的 patch 檔製作、master/slave ports、perl/python/php/apache modules、...、等等,有心學習的人可以先行參考 "進階閱讀" 中提到的 Porters Handbook,不然的話,就請您耐心期待本專欄之後的續集了 :) 4. 進階閱讀想真正把製作 ports 的技術學好,一定得要去看 Porters Handbook,本文最多只能算是簡介程度,真正的鉅作是 Handbook;而如果想要成精的話,則是千萬不能錯過 ports/Mk/* 這整套 Makefiles,俗話說 source 是最好的文件,而 ports system 最好的文件,自然就是 ports/Mk/* 啦 ! 就算是只看前面的註解部份,也一定會對整個系統有更深入的了解的。除此之外,多看看別人寫的 ports,有時候也會學到一些意想不到的小技巧喔 :) <<< Page 1 : <<< 第 2 頁 |
|
|