未分类 · 2019年12月5日 0

如何在FreeBSD 12上使用pkg Binary Package Manager管理软件包

FreeBSD是一种类似于Unix的开源操作系统,用于为现代服务器,台式机和嵌入式平台提供动力。 一个大型社区已经持续发展了三十多年。FreeBSD的高级网络,安全性和存储功能使其成为许多最繁忙的网站以及最普遍的嵌入式网络和存储设备的首选平台。 像Netflix,Yahoo!,WhatsApp,BBC和Sony这样的巨头都以某种形式使用FreeBSD。FreeBSD系统不像Linux那样广为人知,主要是因为Linux多年来一直专注于Desktop,而FreeBSD项目往往更基于服务器。

在本教程中,您将学习FreeBSD 12操作系统上通过pkg进行的二进制软件包管理,这是撰写本文时的最新版本。大多数内容也适用于早期的FreeBSD 11版本。

先决条件

  • FreeBSD 12操作系统
  • 访问root或sudo帐户

港口和包裹

在FreeBSD系统中,我们有两种不同的方法来安装附加软件:通过p沃茨,并通过预配置,大多数用户会选择安装和管理软件。

Ports是在FreeBSD上构建附加软件的系统。使用端口,您可以从软件供应商提供的原始源代码开始,然后按照所需的方式完全构建软件,并根据需要启用和禁用功能。

软件包是预先编译的软件,它们是构建端口的结果,使用端口维护者认为对大多数人最有用的选项,并将它们捆绑在一个软件包中以使其易于安装。软件包使您可以快速安装,卸载和升级附加软件。它们是大多数用户将使用的东西。FreeBSD打包系统称为package或简称pkg。程序包信息存储在SQLite数据库中,您可以查询该程序包数据。

关于FreeBSD软件包管理的另一个重要信息是软件包二进制文件的位置。程序包在下面安装二进制文件/usr/local,大多数配置文件都以/usr/local/etc而不是形式出现/etc。如果您来自Linux世界,您可能会发现这很不寻常。

FreeBSD软件包管理器-pkg

pkg是传统FreeBSD软件包管理工具的下一代替代产品,它提供了许多功能,可以更快,更轻松地处理二进制软件包。pkg是安装FreeBSD基本系统中尚未包含的软件的最简单方法。pkg是带有多个子命令的单个程序。您将pkg几乎对软件包执行所有操作,例如安装,删除和调查软件包。所有程序包的操作和更改必须以root或通过运行sudo

这是acme.sh在FreeBSD上安装软件包的方法:

pkg install acme.sh

您可以在安装软件时使用该命令-y来避免出现Proceed with this action? [y/N]:问题,也可以配置pkg为始终-y在配置文件中使用。

要删除该软件包,您可以使用:

pkg delete acme.sh

使用pkg help了可用的子命令的快速参考,或pkg help命令为特定子命令显示的手册页。

pkg help pkg 
help install
pkg help delete 

正在安装 pkg

普通版的FreeBSD没有pkg安装软件包管理器。您需要安装它。首次尝试安装某些软件包时,pkg会提示您安装软件包管理工具。例如,假设您要在新的FreeBSD上安装的第一个软件包是wget,您将在终端中看到以下提示:

The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y

您将按Y并在键盘上按ENTER,包管理工具将开始安装。打包系统安装到位后,将安装您要安装的初始软件包(wget)。

您还可以通过运行来独立安装打包系统,而无需添加其他软件包pkg bootstrap,但这是很少使用的,也许仅在系统设置脚本中使用。pkg知道如何安装和更新自身以及其他软件包。

如何搜索包裹

现在您已经安装了软件包管理器,您可以安装软件包了。如果您是系统管理员,则熟悉以下事实:不同的操作系统为同一软件的打包版本分配不同的名称。例如,在FreeBSD上用于Apache Web服务器的软件包的名称将与在不同Linux发行版中的Apache软件包的名称完全不同。因此,在安装任何东西之前,您需要确定要安装的软件包的名称是什么。

FreeBSD的可用应用程序列表一直在增长。 FreeBSD项目在公共存储库中提供了几套软件包,它们每隔几天就会更新一次。当前有25,000多个软件包。

例如,让我们尝试搜索Apache Web服务器。

pkg search apache 
# apache24-2.4.38 Version 2.4.x of Apache web server 

它将找到所有带有apache其名称的软件包。这将返回一长串列表,但是您要查找的是apache24包。每个包装都有简短说明。在确定要安装的软件包时,这将为您提供帮助。但这并不总是那么简单。

某些搜索可以生成数百个结果。您将需要利用不同的命令行选项来修剪或调整搜索结果。请查阅pkg-search手册页或帮助页pkg help search以了解有关常见搜索选项的更多信息。

如果不确定是否要使用某个软件包,可以使用以下命令查找该软件包的详细信息:

pkg search -R apache24

# name: "apache24"
# origin: "www/apache24"
# version: "2.4.38"
# comment: "Version 2.4.x of Apache web server"
# maintainer: "apache@FreeBSD.org"
# www: "https://httpd.apache.org/"
# abi: "FreeBSD:12:amd64"
# arch: "freebsd:12:x86:64"
# prefix: "/usr/local"
# . . .
# . . . 

此命令将为您提供有关该软件包的许多有用信息。

如何使用pkg安装新软件包

要安装软件,请使用pkg的install子命令和要安装的软件包的名称。

pkg install apache24

使用安装软件包时pkg install,请pkg查阅本地软件包目录,然后从处下载资源库中的请求软件包pkg.FreeBSD.org。软件包安装完毕后,便会在存放在的SQLite数据库中进行注册/var/db/pkg/local.sqlite。注意不要删除此文件,否则,系统将无法跟踪已安装的软件包。如果软件具有依赖项,pkg则将其找出来,并与基本软件包一起安装它们。作为依赖安装的软件包称为自动软件包。

pkg能够通过Internet下载软件包,将其保存在磁盘上的一个位置,然后您可以在另一时间安装它们。您可以使用该pkg fetch命令下载软件包而不安装它。

pkg fetch nginx 

此命令将仅获取Nginx软件包,而没有其依赖项。您可以使用该-d标志来获取所有依赖项以及命名包。

pkg fetch -d nginx 

软件包将下载到软件包缓存目录/var/cache/pkg。提取软件包后,pkg将其粘贴到此目录。您可以列出文件以查看其中包含的内容。

ls /var/cache/pkg 

现在,要在提取后安装下载的软件包,请pkg install正常运行。安装过程将使用缓存的文件,而不是下载的文件。

随着时间的推移,程序包缓存目录可能会变大。该pkg clean命令将删除所有已被较新版本替换的高速缓存的程序包,以及存储库中不再存在的所有程序包文件。

pkg clean 

如果要删除所有缓存的软件包,请使用该-a标志。

pkg clean -a 

如果要在每次安装或升级软件包后自动清除软件包缓存,请将pkg.conf选项设置AUTOCLEANtrue

如何配置 pkg

pkg程序被设计为高度灵活。每个子命令都有很多选项。你可以建立定制但与全系统的配置文件大多数程序一致的行为pkg,设在/usr/local/etc/pkg.conf

pkg.conf文件包含已注释掉的默认值pkg。只需阅读该文件,您就可以了解很多pkg行为方式。该配置以通用配置语言(UCL)编写,并且有很多注释掉的配置选项和许多别名。变量可以设置为整数,字符串或布尔值

#PKG_DBDIR = "/var/db/pkg";
#PKG_CACHEDIR = "/var/cache/pkg";
#PORTSDIR = "/usr/ports";
#INDEXDIR = "";
#INDEXFILE = "INDEX-10";        # Autogenerated
#HANDLE_RC_SCRIPTS = false;
#DEFAULT_ALWAYS_YES = false;
#ASSUME_ALWAYS_YES = false;
. . .

您可以pkg在中为子命令定义别名pkg.conf。在的底部pkg.conf,您会找到标有的部分ALIAS。当发现自己反复运行复杂的命令时,应添加别名。

有关文件格式和选项的更多信息,请参考pkg.conf(5)手册页。

man pkg.conf

如何查看有关已安装软件包的信息

如果您忘记了在系统上安装了哪些软件包,则可以使用pkg info命令来获取已安装软件的完整列表。

pkg info
# atk-2.28.1 GNOME accessibility toolkit (ATK)
# avahi-app-0.7_2 Service discovery on a local network
# ca_root_nss-3.42.1 Root certificate bundle from the Mozilla Project
# . . .
# . . . 

如果您需要有关已安装软件包的更多信息,请使用pkg info和软件包名称。这将在易于使用的报告中显示软件包安装的详细信息。

pkg info nginx
# nginx-1.14.2_3,2
# Name : nginx
# Version : 1.14.2_3,2
# . . .
# . . . 

您会看到很多有用的信息,例如软件版本,软件安装时间,软件许可证,编译时标志等。有关pkg-info完整的详细信息,请参见手册页。

如何删除包裹

要删除或卸载二进制软件包,请使用pkg delete子命令。也可以作为pkg remove

pkg delete nginx
# or
pkg remove nginx 

您将获得要删除的软件包列表以及它们将释放多少空间。

如果删除其他程序包所依赖pkg的程序包,也将删除相关的程序包。

如何锁定包裹

有时候您可能希望服务器上的程序包永不升级。锁定软件包时,pkg不会升级,降级,卸载或重新安装它。它将相同的规则应用于程序包的依赖项及其依赖的程序。

使用pkg lock锁定一个包。

pkg lock openssl 

openssl程序包现已锁定。

要列出系统上所有当前锁定的软件包,请使用该-l标志。

pkg lock -l 

要删除锁,请使用pkg unlock命令。

pkg unlock openssl 

要立即锁定或解锁系统上的所有软件包,请使用该-a标志。

pkg lock -a
pkg unlock -a 

软件包存储库

pkg支持软件包存储库,这些存储库称为软件包的集合。您可以添加,删除,启用和禁用存储库。您应该使用UCL格式将每个存储库配置在其自己的文件中。官方的FreeBSD仓库位于/etc/pkg目录中。FreeBSD附带了启用的仓库“ FreeBSD”。您可以在中找到其配置文件/etc/pkg/FreeBSD.conf

FreeBSD: {
  url: "pkg+http://pkg.FreeBSD.org/${ABI}/quarterly",
  mirror_type: "srv",
  signature_type: "fingerprints",
  fingerprints: "/usr/share/keys/pkg",
  enabled: yes
}

您可以根据需要添加和删除存储库。由于/etc/pkg保留给FreeBSD官方仓库,因此您需要另一个目录。传统的位置是/usr/local/etc/pkg/repos。如果要使用其他目录,则需要pkg.conf使用该REPO_DIRS选项设置位置。默认情况下,本地存储库目录不存在,因此您需要使用创建它mkdir -p /usr/local/etc/pkg/repos。将您自己的存储库配置放在该目录中

示例pkg命令

在本节中,我将列出一些在管理FreeBSD服务器时最有可能使用的子命令。

# Installs a package without asking any questions
pkg install -y package

# Makes a backup of the local package database
pkg backup

# Lists all installed packages
pkg info

# Shows extended information for a package
pkg info package

# Searches package repository
pkg search -i package

# Shows packages with known security vulnerabilities
pkg audit -F

# Shows which package owns the named file
pkg which file

# Removes unused packages
pkg autoremove

# Uninstalls a package
pkg delete package

# Removes cached packages from /var/cache/pkg
 pkg clean -ay

# Updates local copy of the package catalog
pkg update

# Upgrades installed packages to their latest version
pkg upgrade

# Checks the integrity of all your packages
pkg check -saq

# Verifies that a package's files are unaltered
pkg check -s nginx

# Shows what files came with the package
pkg info -l nginx

# Lists non-automatic packages
pkg prime-list

结论

FreeBSD实现了两种用于安装第三方软件的辅助技术:FreeBSD Ports Collection(用于从源代码安装)和软件包(用于从预构建的二进制文件安装)。但随着FreeBSD是更加果断的移动系统向通用包管理,你应该尝试与管理的第三方软件pkg 尽可能 成为可能。除非您要的软件没有打包版本,或者您需要自定义编译时选项,否则请避免使用端口。