最新的版本见:
及永刚 )
这里不再更新。
缘起
对于我们这些 Debian GNU/Linux 的用户来说,Debian APT 软件包管理,让我们摆脱了软
件包依赖恶梦。可它并不完美,由于采用二进制方式发布软件包,为了保证各个软件包之
间正确的相互依赖关系,开发人员必须进行严格地测试,这当然要花费大量的人力和时间
,因此常常造成软件发布的拖延。另外二进制发布的软件包,虽然节省了用户的编译时间
,但用户却失去了根据系统对软件进行优化和设置的权利。而开放源码的自由软件,相对
于封闭源码的软件,有一个非常重要优势,就是能让用户自己优化。
Debian 的缺点是采用二进制发布软件包造成的,无法避免。但这些缺点不会出现在基于源
码的发布版中。如果能让 Debian 结合二进制和源码发布的优点,我们用户就能更加灵活
地使用自由软件,享受它带给我们的乐趣。
虽然我们可以自己下载软件包源码来编译,但这需要对该软件编译环境有充分地了解,对
于比较大的软件包,如 xorg,大部分时间会耗费在如何编译成功的问题上。这篇文章里,
我将介绍如何在 Debian 系统里面使用 pkgsrc,一个成熟的基于源码的软件包管理系统。
pkgsrc 简介
pkgsrc 是 NetBSD 采用的软件包管理系统。 NetBSD 以优秀的设计和支持最广泛硬件平台
著称。作为 NetBSD 的软件包管理系统,pkgsrc 同样具有 NetBSD 的优点,它不仅可以伴
随 NetBSD 运行在众多的硬件平台上,还可以用在 NetBSD 之外的操作系统里面。除了
BSD 家族,pkgsrc 还可以运行在 GNU/Linux,Sun Solaris, MacOS X,甚至是 MS
Windows。
在 Debian 里面使用 pkgsrc,不但不影响 Debian 本身的包管理系统,它们还可以相互配
合。比如我们使用 pkgsrc 安装 xorg,然后用 apt-get 安装 mozilla-firefox,firefox
完全可以正常的运行在 xorg 里面。
另外,由于 BSD 的许可证较 Debian 宽松,pkgsrc 里面还包含了许多与 Debian 许可证
冲突的优秀软件,比如 MPlayer。让我们用户可以更广泛地使用开放源码的软件。
安装前的准备
首先检查现有的 Debian 系统中是否已经安装 cvs 和 libncurses-dev 两个软件包。 CVS
用来获取和更新 pkgsrc 源码,libncurses-dev 在安装 pkgsrc 时需要使用。
确认 /usr 目录所在分区的磁盘空间。通常我们将 pkgsrc 软件包安装在 /usr/pkgsrc 目
录里面, pkgsrc 安装的软件默认位于 /usr/pkg 目录。在编译时会产生大量的目标文件
,所以事先应该准备足够的磁盘空间。一般 2G 的额外空间,就可以满足日常应用程序编
译产生目标文件的需要。当然也可以通过符号链接方式,将 obj 目录移到空间比较宽裕的
分区。
安装 pkgsrc
获取 pkgsrc 源码有两种方式:
· 第一种方式,下载最新的 pkgsrc 压缩包,然后解压到 /usr 目录。压缩包可以从
ftp.NetBSD.org 或其他镜像网站下载。
· 第二种方式,直接从 cvs 仓库检出最新的源码。获取源码的步骤为:
# cd /usr
# export CVS_RSH=ssh
# cvs -d :/cvsroot checkout pkgsrc
获得 pkgsrc 源码以后,就可以进入 pkgsrc 目录,执行 pkgsrc 的安装脚本程序。
# cd /usr/pkgsrc/bootstrap
# ./bootstrap
安装完以后,脚本建立了一个 /usr/pkg 目录,以后我们用 pkgsrc 安装的软件包都放在
这个目录。现在 /usr/pkg/bin 里面已经有了几个命令,其中最重要的是 bmake,它与
GNU make 作用相同,但功能更强,以后编译安装 pkgsrc 软件包必须用这个命令。
基本设置
首先将 /usr/pkg/bin 添加到系统的命令搜索路径中,也就是对 PATH 进行设置。如果你
用的是 bash,将下面语句加入 .bashrc 文件里面:
export PATH=/usr/pkg/bin:/usr/pkg/sbin:${PATH}
以后可以根据自己需要逐步加入 MANPATH, INFOPATH 等环境变量。
pkgsrc 的 mk 目录下是所有软件包编译的设置文件,但在日常使用中,不应该直接修改这
些文件,正确的方法是通过 /etc/mk.conf 文件来设置。pkgsrc 安装完之后,有一个默认
的 mk.conf 文件位于 pkgsrc/mk/defaults/ 目录,在修改 /etc/mk.conf 的时候,可以
参考其中的设置符号和说明。
刚开始,/etc 目录下并没有 mk.conf 文件,可以自己创建一个。在这里先设置一个选项:
WRKOBJDIR=/usr/obj/pkg
它的作用是将编译时产生的目标文件,统一放在 /usr/obj/pkg 目录下面,以便日后清理
。
软件包安装方法和一些 pkgsrc 常用命令
安装 pkgsrc 中软件包,只需进入对应 pkgsrc 目录,执行 bmake 即可。比如,安装
pkgfind 这个软件包:
# cd /usr/pkgsrc/pkgtools/pkgfind
# bmake && bmake install
与 Debian APT 软件包管理类似,pkgsrc 也有一组包管理命令,这些命令通常以 pkg 开
头。这里简单介绍几个常用的命令。
· pkg_info: 查询系统中已经安装的 pkgsrc 软件包。不加参数执行 pkg_info 命令,
功能与 dpkg -l 命令类似。
· pkg_delete: 删除系统中的 pkgsrc 软件包。
· pkgfind: 用关键字搜索软件包,类似 Debian 的 apt-cache search 命令。
编译辅助工具
在正式使用 pkgsrc 编译安装工作软件包之前,建议先安装几个辅助工具,这样可以更有
效地使用基于源码的软件包管理。
· devel/cpuflags: 侦测系统中 cpu 对应的 GCC 编译优化选项。
安装完之后,在 /etc/mk.conf 中设置:
.sinclude "/usr/pkg/share/mk/cpuflags.mk"
· devel/ccache: 利用缓存技术优化编译,明显缩短编译所耗时间。
在 /etc/mk.conf 中需要设置:
PKGSRC_COMPILER=ccache gcc
· devel/distcc: 分布式编译工具。
如果你的局域网内有多个计算机,且有相同的 gcc 编译环境,可以利用这个工具充分
利用计算机计算资源。设置方法在安装完这个软件包之后参考其中的说明。
软件包安装实例: xorg
Debian 当前(2005年4月)使用的 X 仍是 XFree86 4.3,如果你对 xorg 感兴趣,可以使用
pkgsrc 来安装。另外在 pkgsrc 里面,你还可以尝试一下 XFree86 4.5 ;-)
在安装 xorg 之前,首先要在 mk.conf 中声明使用 xorg 作为 X。
X11_TYPE=xorg
xorg 是由多个软件包组成,pkgsrc 将这样的软件放在 meta-pkgs 目录,除了 xorg,
XFree86、gnome、kde 都能用这种 meta-pkg 方式安装。
这种 meta-pkg 软件包与其他软件包的安装方法没有什么不同,它们只是采用了软件包依
赖关系的描述文件,可以让用户一次就能安装完毕。
# cd /usr/pkgsrc/meta-pkgs/xorg
# bmake && bmake install
在使用 xorg 之前,首先要将 xorg 的路径 /usr/pkg/xorg/bin 加入到搜索路径中,如果
你的系统中还保留着 XFree86,应该将它放在最前面。修改之后可以通过 which X 命令检
查。
配置 xorg 可以使用 Xorg -configure 命令,它会 $HOME 目录下产生一个
xorg.conf.new 文件,如果没有问题,就可以将它改名为 xorg.conf 复制到 /etc/X11/
目录下。
其他
pkgsrc 维护着一个数据库,用于监督软件包的安全漏洞,用户可以通过它了解已安装软件
包的安全状况。 pkgsrc 中 security/audit_packages 软件包中提供了工具以方便地使用
这种机制。安装完这个软件包,我们就可以使用 download-vulnerability-list 命令下载
软件包安全漏洞列表,audit-packages 命令侦测并报告系统中软件包的安全状况,然后就
可以依据报告来及时更新软件包。
如果在 pkgsrc 里面没有找到你需要的软件包,它可能正处于候选状态, WIP 里面是候选
的软件包,将 wip 它们放到 /usr/pkgsrc/wip 目录下,你就可以像其他软件包一样安装
使用。
如果你使用 ftp.NetBSD.org 作为软件包下载站点太慢,可以在 /etc/mk.conf 中设置使
用镜像站点,比如:
# Mirror Site
#
MASTER_SITE_OVERRIDE =
MASTER_SITE_BACKUP = \
\
\
\
参考资料
1. The pkgsrc guide:
http://www.netbsd.org/Documentation/pkgsrc/反馈
如果你发现本文中的错误,或者对 Debian 下使用 pkgsrc 有兴趣,请发邮件到
与我联络,欢迎一起讨论。