FreeBSD应用程序安装:Packages和Ports

FreeBSD在核心系统的基础上提供了两种技术来安装第三方软件:

  • FreeBSD Ports Collection: 从源代码安装第三方软件

  • packages: 安装预先编译的执行代码

FreeBSD port是一组设计成自动编译程序的文件集合,提供了所有自动下载、解压、补丁、编译和安装应用程序的所有信息。目前有超过36000个第三方软件已经ported到了FreeBSD。

FreeBSD的packages和ports都能够处理软件包依赖,虽然两者都能达成目标,但是取决于你的需求:

  • Package优点:

    • 预编译软件tar包通常比源代码tar包压缩得更小

    • Package不需要编译时间,对于大型程序,例如Firefox, KDE Plasma 或 GNOME,在缓慢的主机上使用Package较为合适

    • Package不要求使用者理解FreeBSD上编译软件的过程

  • Port优点:

    • Package通常是为最大使用的系统编译的,所以参数没有优化,而使用port编译,可以修订编译参数

    • 一些应用程序的编译时间依赖于安装的功能,例如 Nginx 有大量的不同编译选项,提供了一个 nginx 软件包和一个 nginx-lite 软件包:

      • 由于激活了大量的选项,nginx安装实际需要很多依赖,导致更多的空间要求、也增加了攻击面

      • 由于安装依赖增长巨大,完整的nginx软件包甚至会(令人惊讶)需要一些X库

      • 只有通过 prot 安装 ningx才能从源代码定制出真正需要选项,一方面增强性能一方面降低了安全隐患

    • 由于license的限制部分软件不能以二进制发布,则必须在终端用户这里编译

    • 有些用户不信任二进制程序,需要检查源代码是否存在风险

    • 源代码适合一些定制补丁

警告

在安装应用程序之前,请检查 https://vuxml.freebsd.org/ 的相关安全信息

要审计已经安装的软件是否存在已知漏洞,请运行 pkg audit -F

查找软件

FreeBSD提供了一些方法来列出不断增长的软件;

  • Ports Portal 可以按照软件分类搜索

  • FreshPorts 提供了完善的搜索工具并跟踪应用程序在Ports Collection中的变化

  • 可以在 SourceForgeGitHub 查找应用程序,然后再回到 Ports Portal 查看该应用是否已经被ported到FreeBSD了

  • 使用 pkg 命令可以搜索二进制软件包仓库

pkg 管理二进制软件包

pkg 删除软件包

  • pkg remove <软件包名> 可以删除一个软件包,但是之前依赖安装的软件包还没有清理,所以需要结合 pkg autoremove :

pkg 删除软件包
pkg remove net/samba420
pkg autoremove

ports Collection

安装Ports Collection

在使用 port 来编译一个程序之前,首先必须安装好 Port Collection

  • 首先系统需要具备 git 来维护ports tree:

安装git
# 完整版本git需要较大空间
# pkg install git

# 安装精简版本git
pkg install git-lite

或者通过 ports 来安装git:

ports安装git
cd /usr/ports/devel/git
make install clean
  • check out ports 的HEAD分支:

check out ports 的HEAD分支
git clone --depth 1 https://git.FreeBSD.org/ports.git /usr/ports

也可以 check out 特定的quarterly分支:

check out ports 的quarterly分支
git clone --depth 1 https://git.FreeBSD.org/ports.git -b 2023Q1 /usr/ports
  • 如果需要,在初始 git checkout之后,更新 /usr/ports

git 更新 /usr/ports
git -C /usr/ports pull

如果需要,也可以切换到不同的quarterly分支,例如:

git 切换 /usr/ports
git -C /usr/ports switch 2023Q1

安装ports

  • 以下举例 lsof 安装:

使用 ports 安装 lsof
cd /usr/ports/sysutils/lsof
make install

#安装完成后,可以通过清理工作目录来降低磁盘使用
make cleen

移除ports

  • 移除使用 deinstall :

使用 deinstall 移除已经安装的ports
cd /usr/ports/sysutils/lsof
make deinstall

升级ports

  • 执行以下命令检查系统是否有可以升级的ports(注意需要先更新 /usr/ports )

检查ports是否有可更新已安装的软件
pkg version -l "<"
  • 安装 portmaster (管理ports升级工具):

安装 portmaster
cd /usr/ports/ports-mgmt/portmaster
make install clean
  • 使用 portmaster 进行更新:

使用 portmaster 进行更新
# 列出分类和搜索更新
portmaster -L

# 更新所有安装过的outdated ports
portmaster -a

# 如果有报错需要强制更新所有ports:
portmaster -af

# 也可以用portmaster来安装port,可以自动为新安装的port更新所有依赖
portmaster shells/bash

参考