目錄php
portlint數據庫
1 系統自帶的工具vim
2 推薦的第三方工具ruby
1 設定 Ports 樹的位置bash
3 設定工做目錄網絡
簡單的講,一個 port 就是一個被移植到了 FreeBSD 上的軟件。全部這些軟件的集合,加上 FreeBSD 處理這些軟件的各類工具,就是 Ports 系統。
每個被移植到 FreeBSD 上的軟件(就是 Port),都能經過 Ports 系統中的工具方便有序的安裝,升級,卸載。並且符合 FreeBSD 系統對應用軟件施加的各類規範。免去了你處處尋找軟件,本身編譯,安裝,升級的麻煩。藉助這些 ports 維護者的努力,你也不用擔憂這些軟件與系統不兼容致使沒法安裝升級等等。
有三種方法來安裝 Ports 系統:
這是最簡單的方法,可是也有缺點。由於 Ports 系統老是隨時更新的。所以你從安裝光盤上安裝的 Ports 系統確定不是最新的了。
這是推薦的方法。使用portsnap不須要事先安裝 ports tree,而且可以在任什麼時候候恢復到已知的最新狀態(即便手工對ports tree進行了修改)。
使用 portsnap 分紅兩個步驟:下載壓縮的 portsnap 快照,和更新現有系統。下載或更新 portsnap 快照的方法是 portsnap fetch;首次安裝,或但願將 ports tree 恢復到快照的樣子,應使用 portsnap extract;以後更新系統中的 ports tree,則能夠經過 portsnap update 來完成。對於服務器而言,推薦在 crontab 中增長在天天3點執行 portsnap cron,以減小使用時所須要的下載時間。
首次下載 portsnap 快照時,須要下載一個大約50MB的快照基礎文件。在中國大陸,因爲網絡情況的緣由,這可能須要較長時間。能夠考慮用 portsnap fetch -s portsnap.cn.freebsd.org 作首次下載;以後的下載,仍是推薦使用正常的 portsnap fetch。
可使用下面步驟完成上述狀況
1.首先設置一個比較快的portsnap服務器,若是系統默認的地址你的訪問速度也很快,能夠不修改
#vi /etc/portsnap.conf
設置SERVERNAME=portsnap.cn.freebsd.org ,你能夠設置相對你速度快點的服務器的地址
2.執行下面命令
#portsnap fetch extract 這裏直接下載ports而且解壓
這樣就完成了下載ports系統以及解壓到/usr下面了
3.設置最快的ports鏡像
用ports安裝軟件的時候,若是沒有設置相對於你來講最快的ports服務器地址,那就會默認的 <A class=urlextern title=ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/ href="ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/" rel=nofollow>ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/,這個地址對於不少地方來講是很慢的。
修改 /etc/make.conf 加入如下代碼
MASTER_SITE_OVERRIDE=\ ftp://ftp.freebsdchina.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}\ ftp://ftp.tw.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}
若是你有最快的地址,能夠加到上面去,下載就會塊了
這種方法已經再也不推薦使用。
無論事先你有沒有安裝 Ports 系統,你均可以使用 csup/cvsup (推薦使用 csup,這是基本系統中本身帶的)來安裝/同步最新的 Ports 系統。把 /usr/share/examples/cvsup/ports-supfile 拷貝到一個地方(好比 /home/user/tmp/ports-supfile),而後做適當的修改(好比修改要鏈接的服務器)。最後使用以下命令來安裝/同步:
csup -L 2 /home/user/tmp/ports-supfile
假設你的 ports 樹安裝在默認位置 /usr/ports。
文件:
usrportsCHANGES usrportsCOPYRIGHT usrportsGIDs usrportsINDEX-xxx usrportsKNOBS usrportsLEGAL usrportsMOVED usrportsMakefile usrportsREADMEusrportsUIDs usrportsUPDATING
目錄:
usrportsMk usrportsTemplates usrportsTools vardbports vardbpkg
除開以上文件和目錄,其餘全部的目錄都是 ports。一個 port 的目錄結構:
/usr/ports/分類/名稱
好比 firefox 被分類在 www。所以 firefox 在 ports 樹中的位置就是:
/usr/ports/www/firefox
好比,你想知道 ports 中是否有 pidgin 這個軟件,那麼能夠這樣:
usrports search =pidgin
一樣也可使用
usrports search =pidgin
用上面兩種方法查詢時,顯示的信息比較詳細,包括維護者、依賴包、主頁等內容。若是隻想顯示所在的路徑和軟件名稱,則能夠用
usrports quicksearch =php
這樣可使顯示的結果更清晰。
/usr/ports/README 中還有更多的例子能夠參考。
很是簡單。好比你要安裝 firefox,那麼做爲超級用戶 root:
#cd /usr/ports/www/firefox#make install clean
要卸載 firefox 的話:
#cd /usr/ports/www/firefox#make deinstall clean
要卸載全部安裝的ports:
#cd /var/db/pkg#pkg_delete *#reboot
要升級 firefox:
#cd /usr/ports/www/firefox#make deinstall reinstall clean
有時候,你會發現安裝某個 port 的時候會有奇怪的事情發生。好比 editors/vim,安裝的時候居然會自動安裝 glib1 和 gtk1,而明明本身的系統上已經有了 glib2 和 gtk2。
這是由於有些 port 有不少不是默認的編譯選項。這個時候你須要設定一些環境變量讓 port 知道該怎麼作。對於 editors/vim,你須要設定 WITH_GTK2 來讓 vim 依賴 gtk2 而不是 gtk1。
你能夠在 csh 下:
setenv WITH_GTK2
或者在 bash 下:
=
也能夠把這個選項寫到 /etc/make.conf 裏面:
=
或者你也能夠指定在更新/安裝某個 port 的時候使用特定的環境變量。添加以下代碼(注:csh 的語法,不是 sh/bash)到 /etc/make.conf 裏面:
.if =.endif
這樣下次升級 editors/vim 的時候就會自動依賴到 gtk2 而不是 gtk1 了。
相似的例子還包括 WITH_GECKO 環境變量。請閱讀 ports/Mk/bsd.gecko.mk 來得到詳細資料。
當你把 Ports 樹放在非默認位置(/usr/ports)的時候,就須要修改一些環境變量讓 Ports 中的工具知道你的修改。這個變量就是 PORTSDIR。好比,你把 Ports 樹放在了 /opt/ports,那麼 在 sh/bash 中,執行以下命令:
=optports
在 csh 中,你須要執行以下命令:
setenv PORTSDIR /opt/ports
妥貼的辦法是把這個環境變量放到超級用戶 root 的 dot.cshrc 文件(/root/.cshrc)裏面。又或者你想讓普通用戶也能用到這個環境變量,能夠考慮放到 /etc/profile 或者 /etc/csh.cshrc 裏面。
注意!若是你使用 portsnap 命令來同步 Ports 樹,而你的 Ports 樹不在默認位置,請在 /etc/portsnap.conf 中也設定你的 Ports 樹的位置。
注意!若是你使用 csup/cvsup 同步 Ports 樹,而你的 Ports 樹不在默認位置,請在你的 ports-supfile 中也設定你的 Ports 樹的位置。
所謂 dist 文件,就是 port 的源碼。通常狀況下,這些源碼都是用 tar 打包而後用 bzip2 壓縮的。默認的位置是在 $PORTSDIR/distfiles。可是,你也能夠把這些 dist 文件放到另外的地方。須要設定的環境變量就是 DISTDIR。你能夠根據上面的例子來設定這個環境變量。
若是沒有設定工做目錄,ports 系統默認在 port 的目錄進行編譯。好比你的 firefox 在 /usr/ports/www/firefox,那麼默認將在 /usr/ports/www/firefox/work 下編譯 firefox。這樣有一個缺點,若是你的 /usr 目錄不是很大的話,在編譯某些大軟件的時候,好比 gnome,kde 桌面系統時,你的 /usr 空間可能會不足。
解決的辦法之一就是設定環境變量 WRKDIRPREFIX,好比
export WRKDIRPREFIX=/opt/obj/portbld
這個時候 ports 系統就會到 /opt/obj/portbld/usr/ports/www/firefox/work 下編譯 firefox。
portsnap 是同步 ports 用的,前文已經做了介紹。
詳細用法參照<A class=urlextern title=http://www.freebsd.org/doc/zh_CN.GB2312/books/handbook/ports-using.html href="http://www.freebsd.org/doc/zh_CN.GB2312/books/handbook/ports-using.html" rel=nofollow>這裏(搜索「Portsnap 方式」)
爲了方便,我在 csh 的配置文件裏寫入了以下 alias :
alias update-ports 'portsnap fetch update'
你們不妨參考一下。
pkg_add
pkg_create
pkg_delete
pkg_info
pkg_updating
pkg_version
注:
1.具體的用法請參考<A class=urlextern title=http://www.freebsd.org/doc/zh_CN.GB2312/books/handbook/ports.html href="http://www.freebsd.org/doc/zh_CN.GB2312/books/handbook/ports.html" rel=nofollow>手冊中的4.四、4.5節。
2.嚴格來講,pkg_add,pkg_updating並非用於 ports 的工具,它們只能用於 package 。這裏只是爲了讓你們全面瞭解,哪些是官方的東西。
portupgrade
portupgrade是一個強大全面的工具,可是依賴於ruby。
我的沒有用過,因此很少做評論,你們能夠試一下。
portmaster
portmaster是一套僅使用系統軟件,而不依賴其餘ports的工具。
由於它沒有依賴,很「純」,功能也夠用,因此我的比較推崇這個。
我在csh的配置文件裏寫了關於portmaster的以下alias:
alias update-apps 'portmaster -a --force-config' alias show-dep 'portmaster --show-work ./ | sort'
前者用來更新全部ports,並強制make config。
後者用來顯示該軟件的依賴,按已裝和未裝排序,須要事先進入那個軟件的目錄才能執行。
由於 portmaster 不會讀取 /etc/make.conf 裏的 BATCH=yes 設置,若是你討厭煩人的 make config,能夠:
portmaster -aG #更新全部ports,並防止 make config
portmaster的配置文件位於/usr/local/etc/portmaster.rc,須要手工建立。
能夠參考同目錄下的portmaster.rc.sample。
我使用的設置是:
ALWAYS_SCRUB_DISTFILES=dopt #更新完一個ports後自動刪除舊版本的源碼壓縮包 PM_LOG=/var/log/portmaster.log #日誌
pkg_rmleaves
這個工具能夠用來刪除用不着的軟件,其做用至關於Gentoo的emerge –depclean,或者Debian的orphaner(deborphan這個包)
它首先列出全部不被其餘軟件所依賴的「葉子節點」,或者說「孤立的軟件包」(這意味着刪除它們不會影響依賴關係)。
而後你能夠手動指定哪些軟件是你不須要的,
選中執行[OK]後,它會進一步篩選「葉子節點」。
如此遞歸以後,它能夠保證該軟件及其(不被其餘軟件依賴的)依賴被完全清除。
pkg_cleanup
這個工具的做用和pkg_rmleaves徹底同樣,其工做原理也一致,不用擔憂二者衝突或者哪一個剔除起來更完全。
惟一的區別在於,這個軟件能充分利用你的顯示屏,另外能在上方顯示出每一個軟件的描述,
好比上圖中,光標停在了amarok這一行,它的上面就顯示出amarok的介紹:「Media Player for KDE4」。
pkg_cutleaves
這個工具也是用來清理孤立軟件包的,它沒有圖形界面,
可是它支持配置文件,能夠預先設定你須要保留的軟件包,之後就直接cut,沒必要每次都作選擇。
pkg-rmleaf
這個是基於 pkgng 的卸載工具,
若是你已經切換到下一代 pkg 系統,那麼 pkg_cleanup 將沒法工做,
此時能夠考慮 pkg-rmleaf,和 pkg_cleanup 有着相似界面,並且速度更快。
pkg_search
可能有的同窗要問,怎樣才能快速找到某個ports的位置呢,locate?find?
這個時候,我要向你推薦pkg_search。
pkg_search <name>可讓你快速找到該軟件包的版本和描述,而加上參數-r,就能夠知道它的位置。
pkgsearch
這個工具的做用和上述相同,可是它須要創建一個數據庫,並且每次更新ports以後也要更新數據庫。
看起來它的工做方式接近於Gentoo的eix。
portconf
它是用來設置全局的編譯標記的,相似於Gentoo中設置的USE標記。(詳細內容待撰,哪位對它比較熟悉的幫個忙吧)
當你寫了一個新的 port 以後,可使用 portlint 來檢查本身的 port 是否符合 FreeBSD ports 的規範。
<A class=urlextern title=http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/faq/applications.html href="http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/faq/applications.html" rel=nofollow>中文 FAQ
<A class=urlextern title=http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/handbook/ports.html href="http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/handbook/ports.html" rel=nofollow>中文手冊
<A class=urlextern title=http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/porters-handbook/ href="http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/porters-handbook/" rel=nofollow>中文 Porter 手冊
<A class=urlextern title=http://www.freshports.org href="http://www.freshports.org/" rel=nofollow>FreshPorts 查看全部 ports 更新的站點