Holmesian Blog

FreeBSD Ports 和 Packages 使用指南

FreeBSD 系统提供的源代码包含三个部分:内核源代码、应用程序源代码以及软件 Ports 的源代码。

在 FreeBSD 系统中,每个要被移植的软件被称为一个 Port,由相应的 FreeBSD 开发者负责维护。该 Port 的维护者会将软件移植到 FreeBSD 上,并依据 Ports Collection 的要求对其进行设置,同时编写相关脚本,使得软件的下载、配置、编译和安装全过程能够自动完成,无需人工干预。需要注意的是,每个 Port 本身并不存储软件包的源代码或二进制代码,而是仅提供了搜索其源代码或二进制软件包的方法。

由于 Ports Collection 会随着应用程序的发展而不断更新,当某个软件升级导致其源代码文件的名称或位置发生改变时,部分 Port 中关于软件源代码下载位置的设置可能不再适用,进而导致某些 Ports 无法正常编译和安装。

一、安装前的准备工作

(一)使用 root 用户登录

必须使用 root 用户登录后才能安装 ports。

(二)更新 Ports Collection 并检查安全问题

在安装任何 port 之前,首先要确保已经将 Ports Collection 更新到最新版本,并检查 http://vuxml.freebsd.org/ 是否存在与该 port 相关的安全问题。

在安装应用程序之前,可以使用 portaudit 工具自动检查已知的安全问题,该工具可在 Ports Collection (ports-mgmt/portaudit) 中找到。在安装新的 port 之前,建议先运行 portaudit -F 命令来获取最新的漏洞数据库。系统会在每天的周期性安全检查时自动更新此数据库,并随后进行安全审计。

二、安装新的 port

如果系统尚未安装某个软件,可选择安装一个新的 port。以 editors/joe 为例,操作如下:

cd /usr/ports/editors/joe/  
make install  

这样会在系统上安装新的 joe 软件。若在安装完成后需要一并清除编辑时期留下的临时目录,可参考 FAQ 8 的方法,同时使用:

cd /usr/ports/editors/joe/  
make clean  

若要清除所有 ports 产生的临时资料,只需回到 ports 的根目录并执行:

cd /usr/ports/  
make clean  

三、移除已安装的 ports

(一)正常移除

editors/joe 为例,可通过以下方式移除:

cd /usr/ports/editors/joe/  
make deinstall  

或者使用 pkg_delete

cd /var/db/pkg/  
pkg_delete joe-{version}  

(二)强制移除

有时候由于软件套件之间的依赖性,可能无法直接移除。若要强制移除,可执行以下操作:

cd /var/db/pkg/  
pkg_delete -f joe-{version}  

不过,这样做很可能会导致其他软件套件在执行时出现问题。

四、移除相关依赖的 ports

sysutils/portupgrade 为例:

cd /usr/ports/sysutils/portupgrade/  
make deinstall-depends  

在执行此操作前,请务必考虑是否会移除需要保护的软件套件。建议先参考 FAQ 10 的方法进行检查,或者使用 pkg_delete

cd /var/db/pkg/  
pkg_delete -r portupgrade-{version}  

五、升级已安装的 ports

如果已经安装了某个软件套件,之后想要对其进行升级,必须先移除旧版本的 port,移除方法可参考 FAQ 11、FAQ 12 和 FAQ 13;之后再安装 port,安装方法可参考 FAQ 4 或 FAQ 5。以 editors/joe 为例,按照 FAQ 11 和 FAQ 4 的方法操作如下:

cd /var/db/pkg/  
pkg_delete joe-{version}  
cd /usr/ports/editors/joe/  
make install  

或者:

cd /usr/ports/editors/joe/  
make clean  
make reinstall  

六、安装 packages

目前,FreeBSD 的 packages 是通过 .tgz 进行打包的。若要安装一个 packages,可使用 pkg_add 命令,例如安装一个 joe 的 tgz 文件:

pkg_add joe-{version}.tgz  

七、强制安装 packages

由于部分 packages 与其他 packages 存在依赖关系,通常需要先安装那些依赖的 packages 才能正常安装目标 packages。若要强制安装 packages,可以不考虑依赖的 packages,但要注意这样做可能会导致软件执行或运行不正常。强制安装 packages 的指令如下,例如强制安装一个 joe 的 tgz 文件:

pkg_add -f joe-{version}.tgz

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »