您的位置:ToThink > FreeBSD > FreeBSD学习笔记:Ports系统

FreeBSD学习笔记:Ports系统


什么是Ports系统

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

Ports系统有什么用

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

怎样安装Ports系统

有三种方法来安装Ports系统:

1、安装系统时选择安装Ports系统

这是最简单的办法,但是也有缺点。因为Ports系统总是随时更新的,从光盘上安装的Ports肯定不是最新的了。

2、使用portsnap安装/同步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。

可以使用下面步骤完成上述情况

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

#vi /etc/portsnap.conf

设置SERVERNAME=portsnap.cn.freebsd.org ,你可以设置相对你速度快点的服务器的地址。

⑵.执行下面命令

#portsnap fetch extract

这里直接下载ports并且解压。
这样就完成了下载ports系统以及解压到/usr下面了。

以后需要升级时使用的命令是:

#portsnap fetch update

⑶.设置最快的ports镜像

用ports安装软件的时候,如果没有设置相对于你来说最快的ports服务器地址,那就会采用默认的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.cn.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}

如果你有最快的地址,可以加到上面去,下载就会快了。

3、使用csup/cvsup 安装/同步 Ports 系统

这种方法已经不再推荐使用。

不管事先你有没有安装 Ports 系统,你都可以使用 csup/cvsup (推荐使用 csup,这是基本系统中自己带的)来安装/同步最新的 Ports 系统。

把 /usr/share/examples/cvsup/ports-supfile 拷贝到一个地方(比如 /etc/ports-supfile),然后作适当的修改(比如修改要连接的服务器)。最后使用如下命令来安装/同步:

csup -L 2 /etc/ports-supfile

使用 Ports 系统

1 查询

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

$cd /usr/ports
$make search key=pidgin

同样也可以使用:

$cd /usr/ports
$make search name=pidgin

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

2 安装

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

#cd /usr/ports/www/firefox
#make install clean

3 卸载

要卸载 firefox 的话:

#cd /usr/ports/www/firefox
#make deinstall clean

4 升级

要升级 firefox:

#cd /usr/ports/www/firefox
#make deinstall reinstall clean

5 定制 port

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

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

你可以在 csh 下:

setenv WITH_GTK2

或者在 bash 下:

export WITH_GTK2=yes

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

WITH_GTK2=yes

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

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

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

类似的例子还包括 WITH_GECKO 环境变量。

请阅读 ports/Mk/bsd.gecko.mk 来获得详细资料。

定制 Ports 系统

1 设定 Ports 树的位置

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

export PORTSDIR=/opt/ports

在 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 树的位置。

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,比如 export WRKDIRPREFIX=/opt/obj/portbld,这个时候 ports 系统就会到 /opt/obj/portbld/usr/ports/www/firefox/work 下编译 firefox。

常用的 Ports 管理工具

portsnap
这是推荐的升级 Ports 系统树的工具。

portupgrade
相当好用的升级 Ports 中软件的 Ruby 工具。支持从源码/包升级。

portmaster
如果你不愿意安装 portupgrade 以及 ruby 方面的依赖,可以使用 portmaster。这是一个基于 sh 的 portupgrade 替代品。

pkg 工具
FreeBSD 基本系统中自带的包管理工具。方便实用。都是 pkg_* 类型的系统命令,比如 pkg_add, pkg_delete 之类的。

Ports 开发工具

portlint
当你写了一个新的 port 之后,可以使用 portlint 来检查自己的 port 是否符合 FreeBSD ports 的规范。


  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.