使用 pkg_add 处理 FreeBSD 软件包升级

使用 pkg_add 处理 FreeBSD 软件包升级

我正在尝试使用 FreeBSD 的pkg_add命令在一次构建、在多台机器上安装的场景中安装和升级二进制包。它在安装新包时工作得很好,但升级让我感到困惑。例如,如果我想升级一个包取决于通过另一个包,我无法直接安装它:

# pkg_add /path/to/somepackage-2.0.tbz
pkg_add: package 'somepackage' or its older version already installed

此时,如果我传递以下命令,我可以删除该包的旧-f版本pkg_delete

# pkg_delete -f somepackage-1.0
pkg_delete: package 'somepackage-1.0' is required by these other packages
and may not be deinstalled (but I'll delete it anyway):
anotherpackage-1.0

但是...这才是关键...现在依赖信息消失了!我可以安装升级:

# pkg_add /path/to/somepackage-2.0.tbz

现在尝试删除它将成功并且不会出现任何错误:

# pkg_delete somepackage-2.0

我该如何优雅地处理这个问题(“优雅地”意味着“以一种保留依赖信息的方式,而不需要我重建/重新安装整个依赖链”)。

谢谢!

答案1

正如您所发现的,pkg_add无法优雅地升级端口。portupgrade但是,该软件包可以很好地完成此操作,并且是我使用和推荐的方法(如果您不喜欢此方法,还有其他方法可用)。

安装端口后,您只需运行portupgrade -aPP,它就会使用软件包升级系统上安装的所有端口。如果您不想更新任何端口,您可以运行portupgrade -RPP [category/port]以升级特定端口及其依赖的端口。运行不带参数的程序将升级属于当前目录的端口(即将cd /usr/ports/security/openssl ; portupgrade升级openssl,不带-PP选项它将从源代码构建端口);如果您不在端口目录中,它将显示帮助(与选项相同-h)。

编辑:
默认情况下,如果软件包存在于环境变量定义的目录中,portupgrade 将安装它们PKG_PATH(默认为$PACKAGES/All$PACKAGES默认为$PORTSDIR/packages;因此默认路径为/usr/ports/packages/All)。

如果它们不存在,它将(根据偏好)从(采用带有子文件夹和的$PKG_SITESURI ;没有默认值)或(采用带有其下的正常镜像路径的 URI;默认值为)下载包。LatestAll$PACKAGEROOT"ftp://ftp.freebsd.org"

一种简单的方法是使用一台机器来构建/缓存将安装在另一台机器上的包。

  • make package您可以从端口目录的端口树中构建软件包(这也将安装该端口)。
  • 您可以使用portupgrade它来升级一台机器并缓存包文件以供其他机器使用,上述命令将在默认目录中缓存包文件(参见上文)。
  • 您可以使用 portupgrade 仅获取软件包,而不安装它们,使用portupgrade -aPPFportupgrade -RPPF [category/port]

获得缓存的软件包文件后,您可以通过 NFS、FTP、HTTP 等方式共享目录;只要其他计算机可以访问这些文件即可。使用适当的值设置PACKAGESPKG_SITE指向缓存服务器。执行典型portupgrade命令,它应该从缓存服务器中提取软件包并安装它们。

注意:所有服务器上的端口树都必须​​是最新的,才能portupgrade正常运行(它将尝试更新到本地端口树中的任何版本)。如果您要在所有计算机上安装相同的端口/包,最简单的方法可能是共享一个服务器/usr/ports目录(例如通过 NFS)并将其安装在所有其他服务器上。

答案2

也许pkg_replace就是您所寻找的。

我已经用它一段时间了。我的一台 FreeBSD 机器充当构建服务器,并portmaster为其他机器构建(使用)所有软件包。我用它pkg_replace来在所有其他机器上安装这些预构建软件包。

http://www.FreeBSD.org/cgi/url.cgi?ports/ports-mgmt/pkg_replace/pkg-descr

答案3

或者你可以依靠 Portsnap 或 CVSup,如下所述:

http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/ports-using.html

相关内容