如何在FreeBSD 12上使用Pkg软件包管理器

介绍

FreeBSD是一种类似于Unix的开源操作系统,用于为现代服务器,台式机和嵌入式平台提供动力。诸如Netflix,Yahoo!,WhatsApp,BBC和Sony之类的巨头都以某种形式使用FreeBSD。FreeBSD系统不像Linux那样广为人知,主要是因为Linux多年来一直专注于桌面,而FreeBSD项目倾向于更多地基于服务器。

在本指南中,您将了解FreeBSD 12上的软件包管理。

端口与包装

在FreeBSD上,我们有两种不同的方式来安装附加软件:通过Ports CollectionPorts,以及通过预配置的软件包来安装和管理软件。

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

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

关于FreeBSD软件包管理的另一件事是软件包二进制文件的位置。程序包在下面安装二进制文件/usr/local,大多数配置文件都以/usr/local/etc而不是结尾/etc。如果您来自Linux世界,则可能会发现这种情况非常罕见。

FreeBSD软件包管理器, pkg

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

这是curl在FreeBSD上安装软件包的方式:

pkg install curl

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

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

pkg delete curl

如您所见,它非常简单直观。

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

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

您将点击YENTER软件包管理工具的安装将开始。安装到位后,将安装您要安装的初始软件包(wget)。

您还可以通过运行单独安装打包系统,而无需添加其他软件包pkg bootstrap。此外,pkg知道如何安装和更新自身以及其他软件包。

注意: 默认情况下已pkg安装Vultr实例,因此您无需安装它。

配置中 pkg

pkg程序具有高度的灵活性,每个子命令都有许多选项。您可以使用pkg位于中的系统级配置文件为大多数程序建立自定义但一致的行为/usr/local/etc/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

寻找包裹

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

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: "[email protected]"
# www: "https://httpd.apache.org/"
# abi: "FreeBSD:12:amd64"
# arch: "freebsd:12:x86:64"
# prefix: "/usr/local"
# . . .
# . . .

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

安装套件

要安装软件,请使用install子命令和软件包名称进行安装:

pkg install apache24

使用安装软件包时pkg install,请pkg查阅本地软件包目录,然后从处下载资源库中的请求软件包pkg.FreeBSD.org。安装软件包后,将其注册在一个SQLite数据库中,该数据库保存在中/var/db/pkg/local.sqlite。注意不要删除此文件,否则,系统将无法跟踪已安装的软件包。如果软件具有依赖项,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 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

重要文件和目录

  • pkg配置文件-/usr/local/etc/pkg.conf
  • 保留给FreeBSD官方仓库的目录- /etc/pkg
  • FreeBSD储存库文件- /etc/pkg/FreeBSD.conf
  • 自定义存储库的传统位置- /usr/local/etc/pkg/repos
  • 程序包缓存目录- /var/cache/pkg
  • SQLite数据库- /var/db/pkg/local.sqlite

摘要

FreeBSD提供了两种用于安装第三方软件的补充技术:FreeBSD Ports Collection,用于从源代码和软件包安装,从预构建的二进制文件安装。随着FreeBSD更加果断地将系统转向通用软件包管理,请尝试尽可能地管理第三方软件pkg。除非要使用的软件没有打包版本,或者需要自定义编译时选项,否则请避免使用端口。



Leave a Comment

AI 能否應對越來越多的勒索軟件攻擊?

AI 能否應對越來越多的勒索軟件攻擊?

勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根

ReactOS:這是 Windows 的未來嗎?

ReactOS:這是 Windows 的未來嗎?

ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+

人工智能如何將流程自動化提升到新的水平?

人工智能如何將流程自動化提升到新的水平?

閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。

macOS Catalina 10.15.4 補充更新引發的問題多於解決

macOS Catalina 10.15.4 補充更新引發的問題多於解決

最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

什麼是日誌文件系統,它是如何工作的?

什麼是日誌文件系統,它是如何工作的?

我們的計算機以稱為日誌文件系統的有組織的方式存儲所有數據。這是一種有效的方法,可以讓計算機在您點擊搜索時立即搜索和顯示文件。 https://wethegeek.com/?p=94116&preview=true

技術奇點:人類文明的遙遠未來?

技術奇點:人類文明的遙遠未來?

隨著科學的快速發展,接管了我們的大量工作,我們陷入無法解釋的奇點的風險也在增加。閱讀,奇點對我們意味著什麼。

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

2021 年人工智能對醫療保健的影響

2021 年人工智能對醫療保健的影響

過去幾十年,醫療保健領域的人工智能取得了巨大飛躍。因此,醫療保健中人工智能的未來仍在日益增長。