FreeBSD 安装 Ports系统

这里提前说一下,下面的方法是使用portsnap安装ports,但是portsnap貌似是从FreeBSD6.x 或者是FreeBSD7.x以上才可以使用的,我在FreeBSD 5.4时候就不支持portsnap,而只能用cvsup来安装ports。另外,cvsup和ports都可以通过光盘来安装,cvsup是在CD/DVD->configure->package->cvsup.......而ports是在CD/DVD->configure->distribution->ports.<wbr>

1. 什么是 Ports 系统

简单的讲,一个 port 就是一个被移植到了 FreeBSD 上的软件。所有这些软件的集合,加上 FreeBSD 处理这些软件的各种工具,就是 Ports 系统。

2. Ports 系统有什么用
每一个被移植到 FreeBSD 上的软件(就是 Port),都能通过 Ports 系统中的工具方便有序的安装,升级,卸载。而且符合 FreeBSD 系统对应用软件施加的各种规范。免去了你到处寻找软件,自己编译,安装,升级的麻烦。借助这些 ports 维护者的努力,你也不用担心这些软件与系统不兼容导致无法安装升级等等。
3. 怎么安装 Ports 系统

a). 首先设置一个比较快的portsnap服务器,如果系统默认的地址你的访问速度也很快,可以不修改

vi /etc/portsnap.conf

添加如下:

SERVERNAME=portsnap.FreeBSD.org

b). 执行下面命令

portsnap fetch extract 这里直接下载ports并且解压

这样就完成了下载ports系统以及解压到/usr下面了

还有一种方法是用系统盘安装Ports,插入盘读取Configure->Distributions->Ports

Ports 树的目录结构

假设你的 ports 树安装在默认位置 /usr/ports。

文件:

<pre>/usr/ports/CHANGES # ports 开发者、维护者等的记录文档。 /usr/ports/COPYRIGHT # ports 树的版权。 /usr/ports/GIDs # 一些 port 可能用到的组名称。 /usr/ports/INDEX-xxx # 每个 port 的摘要 /usr/ports/KNOBS # 编译 port 时需要的一些环境变量与解释。 /usr/ports/LEGAL # 某些 port 的协议限制。 /usr/ports/MOVED # 被移动/删除了的 port 列表。 /usr/ports/Makefile # ports 树总的 BSD Makefile。 /usr/ports/README /usr/ports/UIDs # 一些 port 可能用到的用户名称。 /usr/ports/UPDATING # ports 树的更新记录以及建议。</pre>

目录:

<pre>/usr/ports/Mk # 编译 port 需要的 Makefile 集合。 /usr/ports/Templates # 一些模板。 /usr/ports/Tools # 一些工具。 /var/db/ports # 包含所有进行过配置的可定制 port 的可选变量。每一个 port 占用一个目录。 /var/db/pkg # 包含所有已经安装的 port 的记录。用 pkg_add 安装的预编译好的包也会在此留下记录。</pre>

除开以上文件和目录,其他所有的目录都是 ports。一个 port 的目录结构:

<pre>/usr/ports/分类/名称</pre>

比如 firefox 被分类在 www。因此 firefox 在 ports 树中的位置就是:

<pre>/usr/ports/www/firefox</pre>

使用 Ports 系统
1 查询

比如,你想知道 ports 中是否有 pidgin 这个软件,那么可以这样:

<pre>$cd /usr/ports $make search key=pidgin</pre>

同样也可以使用

<pre>$cd /usr/ports $make search name=pidgin</pre>

用上面两种方法查询时,显示的信息比较详细,包括维护者、依赖包、主页等内容。如果只想显示所在的路径和软件名称,则可以用

<pre>$cd /usr/ports $make quicksearch name=php</pre>

这样可以使显示的结果更清晰。

/usr/ports/README 中还有更多的例子可以参考。

2 安装

非常简单。比如你要安装 firefox,那么作为超级用户 root:

<pre>#cd /usr/ports/www/firefox #make install clean</pre>

3 卸载

要卸载 firefox 的话:

<pre>#cd /usr/ports/www/firefox #make deinstall clean</pre>

4 升级

要升级 firefox:

<pre>#cd /usr/ports/www/firefox #make deinstall reinstall clean</pre>

5 定制 port

有时候,你会发现安装某个 port 的时候会有奇怪的事情发生。比如 editors/vim,安装的时候竟然会自动安装 glib1 和 gtk1,而明明自己的系统上已经有了 glib2 和 gtk2。

这是因为有些 port 有很多不是默认的编译选项。这个时候你需要设定一些环境变量让 port 知道该怎么做。对于 editors/vim,你需要设定 WITH_GTK2 来让 vim 依赖 gtk2 而不是 gtk1。

你可以在 csh 下:

<pre>setenv WITH_GTK2</pre>

或者在 bash 下:

<pre>export WITH_GTK2=yes</pre>

也可以把这个选项写到 /etc/make.conf 里面:

<pre>WITH_GTK2=yes</pre>

或者你也可以指定在更新/安装某个 port 的时候使用特定的环境变量。添加如下代码(注:csh 的语法,不是 sh/bash)到 /etc/make.conf 里面:

<pre>.if ${.CURDIR:M*/ports/editors/vim} WITH_GTK2=yes .endif</pre>

这样下次升级 editors/vim 的时候就会自动依赖到 gtk2 而不是 gtk1 了。

类似的例子还包括 WITH_GECKO 环境变量。请阅读 ports/Mk/bsd.gecko.mk 来获得详细资料。

定制 Ports 系统
1 设定 Ports 树的位置

当你把 Ports 树放在非默认位置(/usr/ports)的时候,就需要修改一些环境变量让 Ports 中的工具知道你的修改。这个变量就是 PORTSDIR。比如,你把 Ports 树放在了 /opt/ports,那么 在 sh/bash 中,执行如下命令:

<pre>export PORTSDIR=/opt/ports</pre>

在 csh 中,你需要执行如下命令:

<pre>setenv PORTSDIR /opt/ports</pre>

妥贴的办法是把这个环境变量放到超级用户 root 的 dot.cshrc 文件(/root/.cshrc)里面。又或者你想让普通用户也能用到这个环境变量,可以考虑放到 /etc/profile 或者 /etc/csh.cshrc 里面。

注意!如果你使用 portsnap 命令来同步 Ports 树,而你的 Ports 树不在默认位置,请在 /etc/portsnap.conf 中也设定你的 Ports 树的位置。

注意!如果你使用 csup/cvsup 同步 Ports 树,而你的 Ports 树不在默认位置,请在你的 ports-supfile 中也设定你的 Ports 树的位置。

2 设定 dist 文件的位置

所谓 dist 文件,就是 port 的源码。一般情况下,这些源码都是用 tar 打包然后用 bzip2 压缩的。默认的位置是在 $PORTSDIR/distfiles。但是,你也可以把这些 dist 文件放到另外的地方。需要设定的环境变量就是 DISTDIR。你可以根据上面的例子来设定这个环境变量。

3 设定工作目录

如果没有设定工作目录,ports 系统默认在 port 的目录进行编译。比如你的 firefox 在 /usr/ports/www/firefox,那么默认将在 /usr/ports/www/firefox/work 下编译 firefox。这样有一个缺点,如果你的 /usr 目录不是很大的话,在编译某些大软件的时候,比如 gnome,kde 桌面系统时,你的 /usr 空间可能会不足。

解决的办法之一就是设定环境变量 WRKDIRPREFIX,比如

<pre>export WRKDIRPREFIX=/opt/obj/portbld</pre>

这个时候 ports 系统就会到 /opt/obj/portbld/usr/ports/www/firefox/work 下编译 firefox。

Ports 管理工具
1 系统自带的工具
同步 ports

portsnap 是同步 ports 用的,前文已经作了介绍。
详细用法参照这里(搜索“Portsnap 方式”)
为了方便,我在 csh 的配置文件里写入了如下 alias :

<pre>alias update-ports 'portsnap fetch update'</pre>

大家不妨参考一下。

维护 ports
pkg_add
pkg_create
pkg_delete
pkg_info
pkg_updating
pkg_version

注:
1.具体的用法请参考手册中的4.4、4.5节。
2.严格来说,pkg_add,pkg_updating并不是用于 ports 的工具,它们只能用于 package 。这里只是为了让大家全面了解,哪些是官方的东西。

来处:http://wiki.freebsdchina.org/faq/ports

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,175评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,674评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,151评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,597评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,505评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,969评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,455评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,118评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,227评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,213评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,214评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,928评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,512评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,616评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,848评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,228评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,772评论 2 339

推荐阅读更多精彩内容