|
|
| Ports&Package | | 发布日期:2005-3-28 浏览:242次 | | 关键字: | 在Windows底下要安装新的应用程式时,通常就是执行一下SETUP.EXE ,选选安装目录,回答几个简单问题,然後SETUP.EXE就会帮你把该做 的事做好。但是在UN*X的世界里通常不是就不是这麽简单了,除非你 买的是商业软体,不然一般你拿到的会是一包一包的sourcecode,而 不是现成弄好的可执行档。
在Windows的世界里,一方面因为应用程式是一个个的商品,为了商品 的利益,厂商不可能把形同命脉的sourcecode丢出来给你;另一方面 也因为Windows就只在Intel系列的平台上面执行(当做没有NT可 以在Alpha上面跑这一回事存在:P),它就不需要考虑编成binary 後在不同平台上面的适应性。反观UN*X的世界,UN*X是架构在各式各 样不同的平台上面,你绝对没办法用同一套binary吃遍所有的系统。 而且在UN*X世界中,许多程式的作者并不把能从他写的程式获得多少 利益摆在最重要的位置,而是希望他所写的程式能让更多的人受惠,并 希望他的程式能变好,所以他们会把sourcecode放出来,大家一 起来集思广益,让程式更好。
在UN*X下的程式,一般都是用C语言来写的。虽然C语言有它的标 准,而且本身已经有很好的可携性,但是在不同的UN*X系统下,却还 是会有"大同小异"的问题存在。虽然整个程式的大体架构、语法大致 相同,但是不同的系统间还是有些小小的差异,比如说headfile的不 同啦、资料型态资料大小的不同啦、系统目录结构的不同啦....etc。因 为这些大同小异,所以即使你在一个系统上面写的程式能在这个系统上 面正常的compile,正确的执行,但是拿到另一个系统上面却未必行得 通,通常必需视不同的系统做不同的修改。这种把A系统上面可以正常 运作的程式,弄成在B系统上面也能正常运作的工作,就称为"PORT" 。
简单的PORT可能改改目录位置,加上几个#ifdef之类的东东就可以 解决了,但是有时候如果遇到像是程式和系统的关连太深、程式用到一 些A系统内部提供但B系统却没有的功能时,那PORT的工作就不是 那麽简单了。但是,如果你选用了FreeBSD,那就只有一句话:啊~福 气啦!在FreeBSDcoreteam有系统的整理之下,目前FreeBSD已经有 超过二千种各式各样应用程式的ports,使用这些ports,你不需要自 己再去看source改code,所有需要修改的部份都已经有人代劳,帮你 改得好好的,你所需要做的事情非常的简单:makeinstall。是的,就 是这麽一道指令,一切OK。
因为目前FreeBSD只能在Intel系列的系统上跑,所以如果你觉得用 ports还要自己compile很麻烦,FreeBSD提供你另一项选择:package 。所谓的package就是有人帮你把程式都compile成binary了,并 把这些binary及一些相关的文件、档案压成一个*.tgz档,你只需要 直接用pkg_add就可以进行安装,把这些binary放进系统里面,直接 就可以使用了,方便省事。不过一般如果可以的话还是比较建议使用 ports来安装。
package就是别人帮你compile好的ports,而ports就是要自己从 sourcecode来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,如果你用的是FreeBSD2.2*,就找packages-2.2,若是 3.0*,则是packages-3.0。packages-*目录下面还把各种packages 依照功能等特性分类,让你可以更方便的找到你所要的东东。在这里就 拿audio/amp-0.7.6.tgz来说,用tar-tvzfamp-0.7.6.tgz可以看 到它的内容如下:
-rw-r--r--root/bin181Nov617:541997 CONTENTS -rw-r--r--root/bin19Nov617:541997 COMMENT -rw-r--r--root/bin514Nov617:541997 DESC -rw-r--r--root/wheel4358Nov609:141997 MTREE_DIRS -r-xr-xr-xbin/bin94208Nov617:531997bin/amp -r--r--r--bin/bin853Nov617:531997man/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的功能等资料。
pkg_add:用来安装package。它会按照package里面的设定,把各个 档案拷到正确的位置,然後在/var/db/pkg下面造出该package的目 录,把 CONTENTS COMMENT DESC等档案拷过去。以前面的amp来说 ,使用pkg_addamp-0.7.6.tgz会建立并把这三个档案拷到 /var/db/pkg/amp-0.7.6目录下去。
pkg_delete:用来反安装package。它会到/var/db/pkg/[package]目 录下面找出这个package安装了哪些东东,把它们通通移除,最後会把 /var/db/pkg/[package]目录也移除。比如说要反安装前面安装过的 amp,直接执行pkg_deleteamp-0.7.6即可。
如果你凡事都喜欢自己来事必亲躬,那麽你可以自己从ports里面做 compile,如果你看得懂source,还可以自己改改code,做做tuning ,量身订做弄出一个最适合自己的专用程式来。这种一手掌控的快感, 是你用Windows系统时所无法享受到的。ports主要分为两部份,一部 份就是原始的sourcecode,这些source大部份都放在 ftp://freebsd.csie.nctu.edu.tw/pub/distfiles里面。另一部份则是 这个ports如果要在FreeBSD下面编译、执行的话所需要的修改及摆 放的位置等设定,这一部份主要是放在 ftp://freebsd.csie.nctu.edu.tw/pub/ports-*目录下面。这个目录和 package一样,也是依照不同的应用特性来做分类。还是拿amp来说, 在audio/amp目录下面,你可以看到:
drwxr-xr-x2UPLOADUPLOAD512Oct900:24CVS -rw-r--r--1UPLOADUPLOAD528Sep308:35Makefile drwxr-xr-x3UPLOADUPLOAD512Oct900:24files drwxr-xr-x3UPLOADUPLOAD512Oct900:24patches drwxr-xr-x3UPLOADUPLOAD512Oct900:24pkg
Makefile指定了这个ports该如何编译、sourcecode要去哪里抓、 需要先安装哪些其它相关的ports、如何instal....等等的讯息。 files目录下一般是放sourcecode的md5checksum,以免抓到错误 的sourcecode包裹。patches里面放的是这个ports如果要改用到 FreeBSD下面所需要做的修改。pkg目录下面是这个ports的相关资料 ,和package里面那些 CONTENTS COMMENT DESC有相同的功效。如 果你要使用ports,必需把该目录下的所有东东(嗯,其实CVS都没用 到)照原来的目录结构整个抓下来,如果你是用ncftp,就用get-R 来抓。一般抓下来的ports应该是放在/usr/ports/下的对应目录下 ,如amp就应该放在/usr/ports/audio/amp/下,但是并没有硬性规 定就是了。
整个目录抓下来後,再来就是要执行make了。在ports下make有几 种不同的参数,这些参数在/usr/share/mk/bsd.port.mk里面都有详细 的解说。当你直接打make时,其实就是按照fetch(抓回source)-> extract(检查source的md5并解开source)->patch(对source做 patch)->configure(设定)->build(编译)这样一路做下来,把整个 ports编译好,而要等到你指定了makeinstall後才会真的把这个 ports安装到系统上去。最後安装完後可以再makeclean,把解开的 source等东东清除掉。
在makefetch时,系统会依照下列顺序来寻找需要的source:
1./usr/ports/distfiles下 2./etc/make.conf档中指定的MASTER_SITE_BACKUP 3.Makefile里指定的MASTER_SITES
/etc/make.conf内定是到FreeBSD总部去抓,不过其实一般这些 source都可以在ftp://freebsd.csie.nctu.edu.tw/pub/distfiles目 录下面抓到,所以你可以把MASTER_SITE_BACKUP改成:
MASTER_SITE_BACKUP?=\ ftp://freebsd.csie.nctu.edu.tw/pub/distfiles/${DIST_SUBDIR}/
节省到国外抓档的频宽。当makeextract後,会把source解开到 working目录下去。如果你想自己改一改source,可以在makepatch 之後到working目录下去修改。然後makeconfigure和makebuild 时我们大概也没什麽事好做了,就看电脑萤幕上的字一行行的向上, 简单一点的ports可能你做十下伏地挺身它就能make好,大一点的可 能就你出去跟人聊天串门子回来後它还在跑。
有时候呢,portsA会和portsB发生关,在安装portsA时系统 会去找portsB,如果找到会先装好portsB再回头来装portsA,但 是如果找不到portsB时就会给你一个警告,你就需要再去抓portsB 回来安装。但是这样缺啥补啥也是满麻烦的,即然用了FreeBSD就要善 用FreeBSD提供的好用功能--CTM。首先,/usr/ports下最好有 50Mb左右的硬碟空间,然後到 ftp://freebsd.csie.nctu.edu.tw/pub/CTM/ports-cur下面抓回 ports-cur.????xEmpty.gz(找一个数字最大的????抓)以及所有 *>????的ports-cur.*.gz,比如说你抓了ports-cur.2000xEmpty.gz ,那就要把ports-cur.2001.gz,ports-cur.2002.gz....通通抓回来 。如果你抓回来的gz档都放在/tmp/ctm下,就使用以下指令:
cd/usr/ports /bin/rm-rf* ctm-v/tmp/ctm/*
这样就会把全部的ports通通收在你的系统上,以後安装时就不需要再 担心缺东少西的问题了。而且之後如果ports又有更新,也只需要抓回 新的gz档,用ctm来更新即可,方便又省事。
| | 关键字: |
|
|