Ports & Package

在;Windows;底下要安装新的应用程式时,通常就是执行一下;SETUP.EXE
,选选安装目录,回答几个简单问题,然後;SETUP.EXE;就会帮你把该做
的事做好 。但是在;UN*X;的世界里通常不是就不是这麽简单了,除非你
买的是商业软体,不然一般你拿到的会是一包一包的;source;code,而
不是现成弄好的可执行档 。

在;Windows;的世界里,一方面因为应用程式是一个个的商品,为了商品
的利益,厂商不可能把形同命脉的;source;code;丢出来给你;另一方面
也因为;Windows;就只在;Intel;系列的平台上面执行(当做没有;NT;可
以在;Alpha;上面跑这一回事存在;:P;),它就不需要考虑编成;binary
後在不同平台上面的适应性 。反观;UN*X;的世界,UN*X;是架构在各式各
样不同的平台上面,你绝对没办法用同一套;binary;吃遍所有的系统 。
而且在;UN*X;世界中,许多程式的作者并不把能从他写的程式获得多少
利益摆在最重要的位置,而是希望他所写的程式能让更多的人受惠,并
希望他的程式能变好,所以他们会把;source;code;放出来,大家一
起来集思广益,让程式更好 。

在;UN*X;下的程式,一般都是用;C;语言来写的 。虽然;C;语言有它的标
准,而且本身已经有很好的可携性,但是在不同的;UN*X;系统下,却还
是会有;"大同小异";的问题存在 。虽然整个程式的大体架构、语法大致
相同,但是不同的系统间还是有些小小的差异,比如说;head;file;的不
同啦、资料型态资料大小的不同啦、系统目录结构的不同啦....etc 。因
为这些大同小异,所以即使你在一个系统上面写的程式能在这个系统上
面正常的;compile,正确的执行,但是拿到另一个系统上面却未必行得
通,通常必需视不同的系统做不同的修改 。这种把;A;系统上面可以正常
运作的程式,弄成在;B;系统上面也能正常运作的工作,就称为;"PORT"


简单的;PORT;可能改改目录位置,加上几个;#ifdef;之类的东东就可以
解决了,但是有时候如果遇到像是程式和系统的关连太深、程式用到一
些;A;系统内部提供但;B;系统却没有的功能时,那;PORT;的工作就不是
那麽简单了 。但是,如果你选用了;FreeBSD,那就只有一句话:啊~福
气啦!在;FreeBSD;coreteam;有系统的整理之下,目前;FreeBSD;已经有
超过二千种各式各样应用程式的;ports,使用这些;ports,你不需要自
己再去看;source;改;code,所有需要修改的部份都已经有人代劳,帮你
改得好好的,你所需要做的事情非常的简单:make;install 。是的,就
是这麽一道指令,一切;OK 。

因为目前;FreeBSD;只能在;Intel;系列的系统上跑,所以如果你觉得用
ports;还要自己;compile;很麻烦,FreeBSD;提供你另一项选择:package
。所谓的;package;就是有人帮你把程式都;compile;成;binary;了,并
把这些;binary;及一些相关的文件、档案压成一个;*.tgz;档,你只需要
直接用;pkg_add;就可以进行安装,把这些;binary;放进系统里面,直接
就可以使用了,方便省事 。不过一般如果可以的话还是比较建议使用;
ports;来安装 。

package;就是别人帮你;compile;好的;ports,而;ports;就是要自己从;
source;code;来;compile;出;binary,但是已经有人把该修改的东东修
改好了,你无需再烦心如何让这个程式能在;FreeBSD;上正常的;compile
正常的运作 。一般的;ports/package;都会把东东放到;/usr/local;目录
下面,执行档就放到;/usr/local/bin,设定资料放在;/usr/local/etc
,library;放在;/usr/local/lib,manual;放在;/usr/local/man 。

package;是一个一个的;tgz;档,你可以在;
ftp://freebsd.csie.nctu.edu.tw/pub/packages-*;目录下面找到所有

推荐阅读