27.3 NetBSD 软件源与包管理器

NetBSD 的包管理器是 pkgsrc,该系统同时支持二进制安装和从源代码编译安装两种模式。底层工具为 pkg_* 系列命令(例如 pkg_add),pkgin 是基于这些工具的上层封装,提供更便捷的包管理功能。pkgsrc 作为跨平台软件包管理框架,其设计体现了源代码级可移植性的工程实践,目前支持超过 7300 个软件包的构建与管理。

二进制软件源配置

以 NetBSD 10.1 为例,更换二进制软件源的方法如下。首先需要配置 pkgin 软件仓库,具体操作步骤如下:

/usr/pkg/etc/pkgin/repositories.conf 是 pkgin 的软件仓库配置文件,用于指定二进制包的下载地址。设置 pkgin 软件仓库为清华大学镜像源:

# echo https://mirrors.tuna.tsinghua.edu.cn/pkgsrc/packages/NetBSD/amd64/10.1/All/  > /usr/pkg/etc/pkgin/repositories.conf

设置 pkgin 软件仓库为南京大学开源镜像源:

# echo https://mirrors.nju.edu.cn/pkgsrc/packages/NetBSD/x86_64/10.1/All/  > /usr/pkg/etc/pkgin/repositories.conf

思考题

请读者思考为什么上述软件源路径中一个架构是 x86_64 而另外一个却是 amd64

需要注意的是 NetBSD 的软件源分布较为分散,有时单个源无法完全满足需求,需要尝试多个源。可通过 pkgin search 命令搜索软件包,或访问 https://cdn.netbsd.org/pub/pkgsrc/arrow-up-right 查看官方软件包集合。

由于二进制包的构建可能存在差异,NetBSD 用户经常需要在不同源之间切换,以下是一个示例:

# echo http://mirrors.nju.edu.cn/pkgsrc/packages/NetBSD/x86_64/10.0_2024Q4/All/  > /usr/pkg/etc/pkgin/repositories.conf  # 设置 pkgin 软件仓库为南京大学镜像源,适用于 NetBSD 10.0_2024Q4

关闭 ABI 检测(可选)

使用 pkgin 安装软件时,NetBSD 默认会检测 ABI(Application Binary Interface,应用程序二进制接口)版本兼容性。ABI 定义了二进制程序与操作系统之间的接口规范,检测机制用于确保软件包与当前系统版本兼容。由于软件包更新可能存在滞后性,这可能导致某些软件包无法正常安装,因此可以通过以下方式禁用检测:

/etc/pkg_install.conf 是 pkg_install 工具的配置文件,添加以下配置可禁用 OSABI 检查:

# echo CHECK_OSABI=no >> /etc/pkg_install.conf

pkg_install 配置中禁用 OSABI 检查后,将允许跨版本安装软件包,但可能引入兼容性风险,请谨慎使用。

pkgsrc 编译安装

pkgsrc 编译安装的方法与 FreeBSD 相似,以下是一个安装 KDE 元包的示例:

进入 pkgsrc 目录并查看内容:

执行编译安装,make install 会自动处理依赖关系并安装软件包,clean 目标用于清理编译过程中产生的临时文件:

以下是 NetBSD 包管理相关的目录和文件结构:

pkgsrc-wip 项目

pkgsrc-wip(pkgsrc work-in-progress,pkgsrc 进行中)是 pkgsrc 的实验性软件包集合,包含许多尚未完成或正在测试的项目,但不少软件依赖这些项目。以下是具体的使用方法:

首先确保 /usr/pkgsrc 目录存在,然后安装 Git 并克隆 pkgsrc-wip 仓库:

如需通过代理访问 GitHub,可配置 Git 代理(请根据实际可用代理修改):

参考文献

课后习题

  1. 配置多个 pkgsrc 软件源(清华镜像、南大镜像、官方源),对比同一软件包在不同源中的可用性差异,并构建软件源可用性测试脚本。

  2. 修改 NetBSD 的 ABI 检测配置,验证跨版本安装软件包的行为变化,尝试解决这一 Bug。

最后更新于