FreeBSD升级及pkgng

Ports和Package

长期以来 FreeBSD 的应用安装主要都是依赖源码编译的 ports 系统,二进制的 package 系统当然也有,只是弱爆了,至少依赖问题需要人工处理( ports 是自动处理依赖的)。这跟 apt 之类的二进制包管理系统相比,差距太大。

所 以后来 FreeBSD 也搞了一个跟 apt 之类类似的东西,叫做下一代的包管理系统:pkgng 。不过我这人比较保守(其实是懒),一直没有尝试这个新东西,直到现在, pkgng 已经成为 FreeBSD 10.0 的标配,官方甚至已经宣布到今年9月就全面废弃旧的 package 系统(包括FreeBSD9.x/8.x)。

本来像我这种用 ports 可以根本不用理睬这事的,但是因为 ports 也要用到旧的 package 系统,所以现在每次用 ports 安装东西时都会提示说 package 要作废什么什么的,很烦。

而且最近发现 FreeBSD 9.0 已经不能更新 ports 了,也不知道是怎么回事,按官方说法是去年3月底就停止支持了,但到现在才停止更新。于是就升了个级,顺便切换到 pkgng 上去。

升级系统

升级系统本来是很简单的,如官方文档所说(以升级到9.2-RELEASE为例,其实升完我就后悔了,早知道直接升到10.0):

freebsd-update -r 9.2-RELEASE upgrade
freebsd-update install

中间需要确认一下,然后重启一次。不过我的升级不是很顺利,升级后有一些软件的依赖出现问题,最后是删除了几个有依赖问题的软件才完成的升级。

升级后记得更新一下ports并升级所有用ports安装的软件——通过portupgrade完成。

切换到pkgng

首先是安装pkgng,可以在ports/ports-mgmt/pkg下用ports的方式安装,也可以用旧的pkg_add方式安装。

注意,安装完以后需要运行:

pkg2ng

命令进行系统数据的转换,把原来pkg用的数据转为pkgng。

最后,为了让ports也使用pkgng,需要修改 /etc/make.conf 文件,加入:

WITH_PKGNG = yes

pkgng 的用法跟以前的pkg差不多,比如 pkg_add 现在是用 pkg add, pkg_info 换成 pkg info。唯一需要注意的是 pkgdb 命令,现在叫做 pkg check ,以前常用的 pkgdb -F 现在要用 pkg check -d -a。

使用pkgng

除了传统的pkg功能以外,pkgng最主要的功能就是增强了对二进制包的管理,比如安装软件就可以像apt之类类似,用:pkg install 命令安装,并且提供自动的依赖性解决。

类 似于apt的sources.list,pkgng也有个源的配置文件,位于: /etc/pkg/FreeBSD.conf ,不过目前除了默认源,我也不知道还有什么源可以用,默认源速度略慢。如果升级后没有这个文件,可以参考 man pkg.conf 里的例子写一个放在这里即可。

类似于apt-cache search,pkg也有pkg search,不同的是pkgng是直接到源上去搜,速度那是相当的慢。

更新本地pkg数据库用:pkg update

有时用pkg install安装软件的时候会发生校验错而失败,这时就需要强制更新本地pkg数据库:pkg update -f

清理下载的安装包可以用pkg clean

删除已经不需要的依赖包,可以用pkg autoremove

基本上跟apt还是挺相似的。

当然,我是觉得这个pkgng推出还是略仓促了点,文档什么的都不全,速度也比较慢(可能是因为Repository的镜像还太少)。

补 充一点,在FreeBSD 10.0以上已经废弃了portaudit,这点在中英文文档里都没有说(文档中还是建议使用portaudit)。在10.0里portaudit已经 被pkgng里的pkg audit代替,并且已经默认安装,也不需要在periodic里配置即可做每日audit。

推送到[go4pro.org]