如何在FreeBSD云服务器上使用pkg包管理器?

  • 发布时间:2021-10-03 10:29:07
  • 阅读次数:2086

FreeBSD是Unix操作系统的一种,广泛用于服务器、桌面和嵌入式平台中。很多大型公司,如Netflix、Yahoo、WhatsApp、BBC、Sony等都在使用FreeBSD。FreeBSD天生就是为服务器打造的操作系统。本文讲解了如何在FreeBSD操作系统上使用pkg包管理器,需要使用到一台安装了FreeBSD 12的云服务器。

在FreeBSD上,我们有两种安装软件的方法,Ports和Packages。Ports使用软件供应商提供的源代码,根据我们的需要启用或禁用某些功能,以构建的方式安装软件。Packages是一种安装预编译软件的工具,默认采用大部分人能够接受的选项,从而简化安装过程。Packages使得安装、卸载、升级软件的过程变得快速而简单。FreeBSD的Packages系统也被称为pkg,其软件包存储在SQLite数据库中,便于检索和查询。

需要注意的是,FreeBSD的pkg包管理器的软件安装路径和Linux有所不同。软件安装路径是/usr/local,而软件配置路径是/usr/local/etc。这一点和Linux完全不同。

pkg基本操作

FreeBSD的pkg包管理器提供许多功能,让软件安装变得快速而简单。pkg是一种有很多子命令的独立应用程序,每个子命令各司其职,如安装、卸载、查询等。所有的pkg操作都必须以root身份或者通过sudo来执行。比如以下命令用于在FreeBSD上安装curl软件包。也可以在命令结尾加上-y,跳过命令执行过程中的确认提示:Proceed with this action? [y/N]

pkg install curl

卸载软件包也非常简单和直观:

pkg delete curl

使用pkg help命令快速查看参考文档,或者指定某个子命令,查看关于这个子命令的操作手册。

pkg help
pkg help install
pkg help delete

安装pkg

FreeBSD的默认版本中并未预装pkg包管理器。当我们第一次安装软件时,系统会提示是否安装pkg包管理器。比如我们要安装wget,命令行提示如下:

pkg install 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并回车后,pkg就会开始安装,pkg安装完毕后,需要安装的软件也会随之安装。我们也可以只安装pkg,而不同时安装其他软件。使用以下命令只安装pkg。

pkg bootstrap

注意:朝暮数据的FreeBSD云服务器默认已安装了pkg包管理器,无需再次安装。

配置pkg

pkg包管理器的灵活性很强,每一个子命令都有很多配置项。我们可以自定义设置全局的配置项,配置项位于/usr/local/etc/pkg.conf文件中。该文件使用统一配置语言(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.conf配置文件中,还可以定义pkg子命令的别名。在文件末尾,有一个标记为“ALIAS”的部分,在这里可以添加别名。别名通常用于简化较为复杂或冗长的命令。更多关于pkg.conf配置文件的信息,可以通过以下命令获取。

man pkg.conf

查找软件包

现在我们已经安装并配置好了pkg包管理器,下面就准备安装软件了。如果你有一定的运维服务器的经验,应该知道即使是相同的软件,对于不同的操作系统和不同的软件版本,软件包的名称也是不同的。以Apache为例,在不同的Linux版本中的名称也各有差异。因此,在安装软件之前,还需要查清楚软件包的具体名称是什么。

FreeBSD操作系统的公共软件库每隔几天就会更新一次,有超过25000个软件包。比如我们要查找Apache的具体名称,可以用以下命令。

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

该命令会返回名称中含有apache的全部软件,可能结果会很长。我们可以使用pkg search子命令的软件来调整查询结果。关于该命令的使用方法,可以通过pkg help search命令来获得帮助。

如果你不确定某个软件包是否符合需要,可以加上-R选项来查看该软件包的更多信息。

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"
# . . .

安装软件包

以Apache为例,使用以下命令进行安装。

pkg install apache24

整个安装过程是这样的。当执行pkg install命令时,pkg首先查询本地软件缓存,如果然后从公共软件库(pkg.FreeBSD.org)中下载。安装成功后,pkg在本地SQLite数据库中进行注册,数据库文件为/var/db/pkg/local.sqlite。如果这个数据库文件被删除,系统将无法跟踪哪些软件被安装过。如果该软件还有一些依赖性软件,在安装过程中也会一并自动安装。

pkg包管理器也可以只下载软件而不进行安装,我们在合适的时候再安装。使用pkg fetch命令下载软件,-d选项代表同时下载依赖的软件。软件下载路径为/var/cache/pkg目录。

pkg fetch nginx -d

之后当需要安装软件的时候,执行pkg install命令进行安装,此时pgk使用本地软件缓存,而不会重新从公共软件库中下载。

经过一段时间后,本地软件缓存目录可能会变得很大。pkg clean子命令用于清理缓存,-a选项代表清理全部缓存。

pkg clean -a

如果我们希望每次安装或升级软件后自动清理,在pkg.conf配置文件中把AUTOCLEAN配置项设置为true即可。

获取已安装的软件包信息

当我们想了解服务器上安装了哪些软件,可以通过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 delete或pkg remove子命令,系统会返回被卸载的软件列表。卸载某个软件时,依赖于它的其他软件也会同时卸载。

pkg delete nginx

锁定软件包

也许会有这种需求,你希望云服务器上的某个软件一直不要更新,这是可以用锁定功能来实现。当软件包被锁定后,pkg包管理器则不会升级、降级、卸载或者重装该软件包。对于该软件包的依赖软件包,也会采取同样的处理方式。使用pkg lock子命令锁定软件包。

pkg lock openssl

解锁软件包:

pkg uklock openssl

查看已锁定的软件包列表:

pkg lock -l

使用-a选项锁定或解锁全部软件包:
锁定全部软件包:

pkg lock -a
pkg unlock -a

公共软件库

公共软件库是pkg包管理器的一个组成部分。操作系统上可以有多个软件课,我们可以添加、删除、启用或者禁用软件库,也可以使用UCL语言设置每个软件库。FreeBSD官方的公共软件库位于/etc/pkg目录下,名称为“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目录是官方软件库专用的,通常第三方软件库位于/usr/local/etc/pkg/repos目录下。该目录默认不存在,需要用mkdir手工创建。第三方软件库的配置文件也位于此目录下。

其他pkg子命令示例

这里列出了其他常用的pkg子命令,作为FreeBSD操作系统管理员,会经常使用到。

安装软件并跳过确认提示:

pkg install -y package

备份本地pkg数据库:

pkg backup

列出已安装的全部软件:

pkg info

显示某个软件的详细信息:

pkg info package

查找软件包:

pkg search -i package

显示软件包已知的安全漏洞:

pkg audit -F

删除不使用的软件包:

# Removes unused packages
pkg autoremove

卸载软件包:

pkg delete package

清理本地软件缓存:

pkg clean -ay

更新已安装的软件:

pkg update

升级已安装的软件:

pkg upgrade

检查软件包的完整性:

pkg check -saq

显示软件包相关的文件名

pkg info -l nginx

重要的文件和目录

  • pkd配置文件:/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提供两种安装软件包的技术,从安装源编译的Ports和从预装软件安装的Packages。由于FreeBSD操作系统已经明确向着统一的软件包管理方式转变,我们尽可能使用pkg包管理器来管理第三方软件,避免使用需要复杂配置的编译方式来管理软件。

【全文完】

< 上一篇:云服务器控制台使用相关问题 下一篇:如何在CentOS云服务器上安装EPEL工具? >