LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 4096|回复: 37

在 Debian 中使用基于源码的软件包管理

[复制链接]
发表于 2005-4-25 16:57:13 | 显示全部楼层 |阅读模式
最新的版本见:
http://www.soforge.com/Linux/pkgsrc.html
这里不再更新。

缘起

对于我们这些 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 anoncvs@anoncvs.NetBSD.org:/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 = ftp://ftp.iij.ad.jp/pub/NetBSD/packages/distfiles/

MASTER_SITE_BACKUP = \
        ftp://ftp.allbsd.org/pub/NetBSD/packages/distfiles/ \
        ftp://ftp.NetBSD.org/pub/NetBSD/packages/distfiles/ \
        ftp://ftp.iij.ad.jp/pub/FreeBSD/distfiles/ \
        ftp://ftp.freebsdchina.org/pub/FreeBSD/distfiles/

参考资料

1. The pkgsrc guide: http://www.netbsd.org/Documentation/pkgsrc/

反馈

如果你发现本文中的错误,或者对 Debian 下使用 pkgsrc 有兴趣,请发邮件到
jungle@soforge.com 与我联络,欢迎一起讨论。
发表于 2005-4-25 17:05:42 | 显示全部楼层
不错,谢谢
回复 支持 反对

使用道具 举报

发表于 2005-4-25 17:57:09 | 显示全部楼层
很好,尝试一下。
回复 支持 反对

使用道具 举报

发表于 2005-4-25 18:45:01 | 显示全部楼层
不太相信哦,如果我从未装过xfree86,只用pkgsrc安装xorg,
apt-get install mozilla-firefox会知道已经有X了吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-25 19:26:33 | 显示全部楼层
行不行,实践一下就知道啦
请看抓图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2005-4-25 19:48:52 | 显示全部楼层
非常不错,值得尝试,但时间长了可能会有冲突的时候,也许软件包管理的机制达到象dragonflybsd所言的目标那样时才能一劳永逸地解决无休止的依赖和冲突问题
http://www.dragonflybsd.org/goals/packages.cgi
回复 支持 反对

使用道具 举报

发表于 2005-4-25 20:02:56 | 显示全部楼层
可以自己编译,那不是跟gentoo差不多了?好!!!但我的系统里找不到libcurses-dev。
luopeng@ubuntu:~$ apt-cache search libcurses-dev
luopeng@ubuntu:~$ apt-cache search libcurses
libcurses-perl - Curses interface for Perl
libcurses-ruby - Curses interface for Ruby
libcurses-ruby1.6 - Curses interface for Ruby 1.6.x
libcurses-ruby1.8 - Curses interface for Ruby 1.8
libcurses-ui-perl - A curses based OO user interface framework
libcurses-widgets-perl - Curses widget interface for Perl
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-25 20:28:55 | 显示全部楼层
Post by erniu
可以自己编译,那不是跟gentoo差不多了?好!!!但我的系统里找不到libcurses-dev。
luopeng@ubuntu:~$ apt-cache search libcurses-dev
luopeng@ubuntu:~$ apt-cache search libcurses
libcurses-perl - Curses interface for Perl
libcurses-ruby - Curses interface for Ruby
libcurses-ruby1.6 - Curses interface for Ruby 1.6.x
libcurses-ruby1.8 - Curses interface for Ruby 1.8
libcurses-ui-perl - A curses based OO user interface framework
libcurses-widgets-perl - Curses widget interface for Perl


你搜索 libncurses 就可以找到。
当前的版本是 libncurses5-dev,我没写版本号是考虑到以后版本会升级。
回复 支持 反对

使用道具 举报

发表于 2005-4-25 20:31:09 | 显示全部楼层
debian:/usr/pkgsrc/emulators/wine# bmake&& bmake install
===> wine-20050310 is not available for Linux-2.6.11-9-amd64-k8-x86_64
===> wine-20050310 is not available for Linux-2.6.11-9-amd64-k8-x86_64
debian:/usr/pkgsrc/emulators/wine#
为什么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-25 20:43:17 | 显示全部楼层
Post by jetair
debian:/usr/pkgsrc/emulators/wine# bmake&& bmake install
===> wine-20050310 is not available for Linux-2.6.11-9-amd64-k8-x86_64
===> wine-20050310 is not available for Linux-2.6.11-9-amd64-k8-x86_64
debian:/usr/pkgsrc/emulators/wine#
为什么?


你的是 amd64,但 Makefile 里面写着当前只支持 i386 体系:
ONLY_FOR_PLATFORM+=     FreeBSD*-i386 Linux*-i386 SunOS*-i386 Darwin*-i386
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表