服务器 频道

Ports & Package

    【IT168 服务器学院】在 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-* 目录下面找到所有的 package,如果你用的是 FreeBSD 2.2*,就找 packages-2.2,若是3.0*,则是 packages-3.0。packages-* 目录下面还把各种 packages 依照功能等特性分类,让你可以更方便的找到你所要的东东。在这里就拿 audio/amp-0.7.6.tgz 来说,用 tar -tvzf amp-0.7.6.tgz 可以看到它的内容如下:

    -rw-r--r-- root/bin 181 Nov 6 17:54 1997 +CONTENTS
    -rw-r--r-- root/bin 19 Nov 6 17:54 1997 +COMMENT
    -rw-r--r-- root/bin 514 Nov 6 17:54 1997 +DESC
    -rw-r--r-- root/wheel 4358 Nov 6 09:14 1997 +MTREE_DIRS
    -r-xr-xr-x bin/bin 94208 Nov 6 17:53 1997 bin/amp
    -r--r--r-- bin/bin 853 Nov 6 17:53 1997 man/man1/amp.1.gz

    其中 +COMMENT 这个档案简单介绍一下这个 package,而 +DESC 里面则是较详细的介绍或是一些注意事项等。+CONTENTS 里面则是列出了这个package 里面有哪些档案,它们会被安装到哪里去。你用 pkg_add 来安装或是用 pkg_delete 来反安装 package 时会参考到这些资料。
+MTREE_DIRS 里面放的是要丢给 mtree 的资料,用来设定档案目录的权限等等的。接下来有几个目录、档案。这些目录都是相对於 /usr/local 的,也就是说这里面的 bin/amp 到时候会安装到 /usr/local/bin/amp 之下。和 package 相关的几个指令详述如下:

    pkg_info:用来查看这个 package 是什麽。它会把 package 里面的 +COMMENT 和 +DESC 抓出来,解说一下这个 package 的功能等资料。

0
相关文章