如何在 Linux 上使用 pkgsrc

NetBSD 的软件包管理器是通用的、灵活的且易于使用。以下是如何使用它。
130 位读者喜欢这篇文章。
Jump-start your career with open source skills

Opensource.com

NetBSD 以几乎可以在任何东西上运行而闻名,但您是否知道它的第二个声名鹊起之处是 pkgsrc 软件包管理器? 就像 NetBSD 一样,pkgsrc 几乎可以在任何东西上运行,或者至少是任何 Unix 和类 Unix 系统。 您可以在 BSD、Linux、Illumos、Solaris 和 Mac 上安装 pkgsrc。 总而言之,支持超过 20 种操作系统。

为什么要使用 pkgsrc?

除了 MacOS 之外,所有 Unix 操作系统都附带软件包管理器。 您不一定需要 pkgsrc,但以下是您可能想要尝试它的三个重要原因

  • 打包。 如果您对打包感到好奇,但尚未尝试自己创建软件包,那么 pkgsrc 是一个相对简单的系统,特别是如果您已经熟悉 Makefiles 和构建系统,例如 GNU Autotools
  • 通用。 如果您使用多个操作系统或发行版,那么您可能会遇到每个系统的软件包管理器。 您可以在不同的系统中使用 pkgsrc,这样当您为一个系统打包应用程序时,您就为所有系统打包了它。
  • 灵活。 在许多打包系统中,并不总是清楚如何选择二进制软件包或源代码软件包。 使用 pkgsrc,区别很明显,两种安装方法都同样容易,并且都为您解决依赖关系。

如何安装 pkgsrc

无论您是在 BSD、Linux、Illumos、Solaris 还是 MacOS 上,安装过程基本相同

  1. 使用 CVS 检出 pkgsrc 树
  2. 引导 pkgsrc 系统
  3. 安装软件包

使用 CVS 检出 pkgsrc 树

在 Git 之前,在 Subversion 之前,有 CVS。 您不必了解太多关于 CVS 的知识即可检出其代码——如果您习惯使用 Git,那么可以将检出视为克隆。 当您执行 pkgsrc 的 CVS 检出时,您正在下载“配方”,详细说明如何构建每个软件包。 它有很多文件,但它们很小,因为您实际上并没有提取每个软件包的源代码,而只是提取了按需构建所需的构建基础设施和 Makefiles。 使用 CVS 使您可以轻松地在发布新版本时更新您的 pkgsrc 检出。

pkgsrc 文档建议将您的树保留在 /usr 目录中,因此您必须使用 sudo(或成为 root 用户)才能使用此命令

$ cd /usr
$ sudo cvs -q -z2 \
  -d anoncvs@anoncvs.NetBSD.org:/cvsroot \
  checkout -r pkgsrc-2019Q3 -P pkgsrc

在我写作时,最新版本是 2019Q3。 查看 pkgsrc.org 首页的新闻部分或 NetBSD 文档以确定最新版本。

引导 pkgsrc

在 pkgsrc 树复制到您的计算机后,您将拥有一个充满构建脚本的 /usr/pkgsrc 目录。 在您可以使用它们之前,您必须引导 pkgsrc,以便您可以轻松访问构建和安装软件所需的相关命令。

引导 pkgsrc 的方式取决于您使用的操作系统。

对于 NetBSD,您可以直接使用捆绑的引导程序

# cd pkgsrc/bootstrap
# ./bootstrap

在其他系统上,Joyent 提供了包含一些自定义功能的更好方法。 要查找要运行的确切命令,请访问 pkgsrc.joyent.com。 例如,在 Linux 上(Fedora、Debian、Slackware 等)

$ curl -O \
  https://pkgsrc.joyent.com/packages/Linux/el7/bootstrap/bootstrap-trunk-x86_64-20170127.tar.gz
$ BOOTSTRAP_SHA="eb0d6911489579ca893f67f8a528ecd02137d43a"

即使路径表明包含的文件适用于 RHEL 7,但二进制文件往往与除最前沿的 Linux 发行版之外的所有发行版兼容。 如果您发现某个二进制文件与您使用的发行版不兼容,您可以选择从源代码构建。

验证 SHA1 校验和

$ echo "${BOOTSTRAP_SHA}" bootstrap-trunk*gz > check-shasum
sha1sum -c check-shasum

您还可以验证 PGP 签名

$ curl -O \
https://pkgsrc.joyent.com/packages/Linux/el7/bootstrap/bootstrap-trunk-x86_64-20170127.tar.gz.asc
curl -sS https://pkgsrc.joyent.com/pgp/56AAACAF.asc | gpg --import
gpg --verify ${BOOTSTRAP_TAR}{.asc,}

一旦您确信您拥有正确的引导工具包,请将其安装到 /usr/pkg

sudo tar -zxpf ${BOOTSTRAP_TAR} -C /

这为您提供了常用的 pkgsrc 命令。 将这些位置添加到 您的 PATH

$ echo "PATH=/usr/pkg/sbin:/usr/pkg/bin:$PATH" >> ~/.bashrc
$ echo "MANPATH=/usr/pkg/man:$MANPATH" >> ~/.bashrc

如果您宁愿在不依赖 Joyent 构建的情况下使用 pkgsrc,您可以直接运行您从 pkgsrc 树中获得的 bootstrap 脚本。 在运行之前,请阅读 bootstrap 目录中的相关 README 文件,以获取重要的系统特定说明。

Bootstrapping pkgsrc on NetBSD

如何使用 pkgsrc 安装软件

使用 pkgsrc 安装预编译的二进制文件(就像您使用 DNF 或 Apt 一样)很容易。 用于二进制安装的命令是 pgkin,它在 pkgin.net 上有自己的专用站点。 对于任何使用过 Linux 的人来说,这个过程都应该感到非常熟悉。

要搜索 tmux 软件包

$ pkgin search tmux

要安装 tmux 软件包

$ sudo pkgin install tmux

pkgin 命令的目标是模仿典型 Linux 软件包管理器的行为,因此有一些选项可以列出可用的软件包,查询可用的软件包以查找提供特定可执行文件的软件包,等等。

如何使用 pkgsrc 从源代码构建

但是,pkgsrc 的真正强大之处在于可以轻松地从源代码构建软件包。 您在第一个设置步骤中下载了所有 20,000 多个构建脚本,您可以通过直接导航到您的 pkgsrc 树来访问这些脚本。

例如,要从源代码构建 tcsh,首先,找到构建脚本

$ find /usr/pkgsrc -type d -name "tcsh"
/usr/pkgsrc/shells/tcsh

接下来,更改到源代码目录

$ cd /usr/pgksrc/shells/tcsh

构建脚本目录包含许多文件,以帮助应用程序在您的系统上构建,但值得注意的是,它包含 DESCR 文件,其中包含软件的描述,以及触发构建的 Makefile

$ ls 
CVS    DESCR     Makefile
PLIST  distinfo  patches
$ cat DESCR
TCSH is an extended C-shell with many useful features like
filename completion, history editing, etc.
$

当您准备好时,构建并安装

$ sudo bmake install

pkgsrc 系统使用 bmake 命令(由第一步中的 pkgsrc 检出提供),因此请务必使用 bmake(而不是习惯上的 make)。

如果您要为多个系统构建,您可以创建一个软件包而不是立即安装

$ cd /usr/pgksrc/shells/tcsh
$ sudo bmake package
[...]
=> Creating binary package in /usr/pkgsrc/packages/All/tcsh-X.Y.Z.tgz

pkgsrc 创建的软件包是标准 tarball,但可以使用 pkg_add 方便地安装它们

$ sudo pkg_add /usr/pkgsrc/packages/All/tcsh-X.Y.Z.tgz
tcsh-X.Y.Z: adding /usr/pkg/bin/tcsh to /etc/shells
$ tcsh
localhost% 

来自 pkgsrc 的 pkgtools 集合提供了 pkg_addpkg_infopkg_adminpkg_createpkg_delete 命令,以帮助管理您在系统上构建和维护的软件包。

Pkgsrc 方便管理

pkgsrc 系统提供了一种直接、动手的方式来进行软件包管理。 如果您正在寻找一个不妨碍您并邀请自定义的软件包管理器,请在您运行的任何 Unix 或类 Unix 操作系统上试用 pkgsrc。

接下来阅读什么
标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。 他曾在电影和计算机行业工作,通常同时进行。

2 条评论

一篇关于 pkgsrc 的非常内容丰富的文章。 谢谢!

可怜的 NetBSD。 太糟糕了,它没能像 Red Hat/CentOS/Fedora、Canonical/Ubuntu/Debian、Suse 等那样,在一些良好的可靠的企业“社区”支持下登上 Distrowatch 排行榜。 真可惜,因为我认为 BSD 比其有时不受约束的表亲 Linux 更符合 Unix 哲学。

看看 SystemD 这个东西就知道了,它永远不会在 BSD 世界中被创建,以及 Linux 如何因为它而出现分歧。

真可惜——凭借 NetBSD 令人称赞的便携性、pkgsrc 和其自由奔放的 BSD 许可证——更多的开发人员和用户没有被这个坚如磐石的操作系统所吸引。 多年来,我一直访问 http://netbsd.org/,以关注该项目的进展情况并了解还有什么“运行 NetBSD”。 ;-)

只有我这么想,还是 OpenSource.com 上的其他人也曾幻想过——哪怕只是一瞬间——一个 NetBSD(或其他一些具有polish的占主导地位的 BSD 风味)在低端、中端和高端工作站/笔记本电脑上完美运行的世界——使用 LXQt、KDE、Xfce、Mate 或 Cinnamon 桌面,后台运行 pkgsrc 作为发行版的应用商店?

我有! ;-)

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.