FreeBSD软件安装方法从入门到精通完整指南
安装了 FreeBSD 后,您一定还会需要安装其它非 FreeBSD 内附的软件。在 FreeBSD 上安装软件有许多种方法,我们将一一为各位介绍。
本章涵盖了软件安装的几个核心课题:
- 各种安装方式的优缺点
- 如何使用 package
- 如何使用 port
- 如何使用传统安装方法自行编译软件
10.1 概论
传统上,在一个 UNIX 系统上安装第三方软件时,无非这么几步:下载(可能是二进制文件或源码),解压(tar 或 gzip),翻阅说明文档(readme 或 doc/),如果是源码还要编辑 Makefile 或执行 configure,然后编译、测试、安装。这套流程 FreeBSD 当然也支持,但免费BSD提供了更简单的选择——package 和 ports 两种方式。
所谓 package,就是别人已经替你编译好的二进制文件,连安装路径都帮你定好了。你只需下载一个压缩包,执行 pkg_add 就能快速搞定。这无疑是最简单的安装方式,但缺点也很明显:缺少灵活性,无法根据个人需求修改编译参数。
而 ports 则是基于源码的安装方式。进入 /usr/ports/ 下对应软件的目录,敲一句 make install 即可。FreeBSD 已经帮你准备好了安装所需的步骤和依赖。无论是 package 还是 ports,当安装的软件需要其他软件支持时,它们都会自动帮你装上。所有已安装的软件都会记录在 /var/db/pkg 中,日后想卸载,一条 pkg_delete 加软件名就搞定。
既然 ports 这么好用,为什么 FreeBSD 还同时保留 package?我们来对比一下两者的优势——
package 的优点:
- 已编译好的压缩包通常比源码包小很多。
- 不需要再编译,如果你的机器性能一般,装 KDE、GNOME 这种大型软件时能省下大量时间。
- 使用 package 不需要你了解 FreeBSD 上的编译环境和过程。
ports 的优点:
- package 为了保证兼容性,编译参数往往比较保守。而使用 ports 你可以针对自己的 CPU 进行优化,比如 Pentium III 或 Athlon。
- package 的功能在编译时就已经固定,无法扩展。比如 Apache 有很多模块,用 ports 安装时你可以按需勾选。
- 通过更新 Port Tree,你可以用上最新的软件版本,而 package 通常只随系统一起发布。
- 有些软件不允许以二进制方式分发,只能下载源码。
- 有源码在手上,你可以修改、学习,甚至应用到自己的项目中。
- 很多人就是喜欢拥有源码,读它、研究它。
接下来,我们分别深入讲讲 package 和 ports 的具体用法。
10.2 使用 package
10.2.1 安装 Package
安装 package 有两种途径:一种是使用 sysinstall(也就是安装 FreeBSD 时的那个图形界面),另一种是手动安装。通过 sysinstall 安装时,你需要选择安装来源,最常用的是网络或光盘。不过光盘容量有限,里面包含的 package 数量不多,所以个人更推荐网络安装。手动安装则需要自己下载文件,再用命令安装。
方式一:使用 sysinstall
假设要安装邮件客户端 pine,首先执行 sysinstall 进入安装界面:
# sysinstall
图 10-1
接着选择 Configure 选项,进入图 10-2 的画面:
图 10-2
选择 Packages 选项来安装 package:
图 10-3
在图 10-3 中,必须选择安装来源。这里选择 FTP,从 FTP 上能找到更多软件。选择 FTP 后,出现图 10-4 的画面,让你挑选要使用的 FTP 站点:
图 10-4
选择 「URL」 来自定义 FTP 站点。接着弹出一个输入地址的窗口,如图 10-5 所示。假设使用交大资工的站点,输入 freebsd.csie.nctu.edu.tw/pub/releases/i386/:
图 10-5
输入站点后,会询问是否使用当前网络设置。如果已经联网,选 YES,否则选 NO 来配置网络。接下来出现一个软件分类菜单,各个软件分门别类放置,其中 All 是所有软件的集合,如图 10-6。
图 10-6
以安装邮件软件 pine 为例,pine 位于 mail 分类下,所以选择 mail。如果想装中文版 pine,应该选 Chinese 而不是 mail。选择 mail 后,列出该分类下的所有软件,选中 pine-4.58,如图 10-7:
图 10-7
选好后点 OK 返回前一个分类画面。按此方式选好所有想安装的软件后,点击 「Install」 即可。安装前会出现已选软件列表,如图 10-8,确认无误后点 OK 继续。
图 10-8
方式二:使用手动安装
手动安装时,先得把要用的 package 文件取回来。Package 文件的扩展名是 .tgz,用 pkg_add 命令安装。下面是一个简单范例,安装 lsof-4.66.1.tgz:
# ftp -a freebsd.csie.nctu.edu.tw
Connected to freebsd.csie.nctu.edu.tw.
220---------- Welcome to Pure-FTPd ----------
...
ftp> cd /pub/FreeBSD/ports/packages/sysutils/
250 CWD command successful.
ftp> get lsof-4.71.tgz
local: lsof-4.71.tgz remote: lsof-4.71.tgz
...
ftp> bye
221-Goodbye.
# pkg_add lsof-4.71.tgz
要安装 package,首先得拿到文件。可以从各大学 FTP 站获取。Package 的扩展名是 .tgz,存放在各 FTP 站点的 ports/packages 目录下。以交大资工为例,路径是 ftp://freebsd.csie.nctu.edu.tw/pub/ports/packages;中央资工是 ftp://freebsd.csie.ncu.edu.tw/FreeBSD/ports/packages。进入 ports 目录后,可以看到很多子目录,根据系统版本选择一个。其中 packages 目录包含了最新的 packages。如果想用 packages-5.4-release,就进入对应目录。进去后又有一堆分类目录,结构和 /usr/ports/ 下类似,All 目录包含所有软件。
如果只知道软件名称,不知道版本和完整文件名,例如想下载 popa3d,可以进入 All 目录后这样查询:
ftp> ls popa3d*
227 Entering Passive Mode ...
-r--r--r-- 1 FTP CSIE 19007 Nov 11 12:43 popa3d-0.6.4.1.tgz
ftp> get popa3d-0.6.4.1.tgz
找到版本后,用 get 取回,然后 exit 离开。最后执行 pkg_add popa3d-0.6.4.1.tgz 即可安装。
10.2.2 管理 Package
如果后悔了想卸载软件,只需执行 pkg_delete popa3d-0.6.4.1 即可。所有已安装的软件都记录在 /var/db/pkg 目录中。
使用 pkg_info 可以查看软件信息。例如,想知道 popa3d-0.6.4.1.tgz 的信息,运行:
# pkg_info popa3d-0.6.4.1.tgz
单独执行 pkg_info 则会列出所有已安装的软件。
10.3 使用 ports
要用 ports 安装软件,首先得确认 /usr/ports 目录是否存在。如果没有,可以通过 /stand/sysinstall 来安装它:
- 以 root 执行
/stand/sysinstall - 选择 Configure 后按 Enter
- 选择 Distributions 后按 Enter
- 选择 ports 后按空格键
- 选择 Exit 后按 Enter
- 选择从 CDROM 或 FTP 安装等
- 跟着菜单操作,最后退出
或者也可以到 http://freebsd.org/ports/ 手动下载 port.tar.gz,放在 /usr/ 下,然后解压:
# cd /usr
# tar zxvf port.tar.gz
现在就可以进入 /usr/ports 目录安装软件了。每个软件都有一个自己的目录,里面包含以下关键文件:
- Makefile —— 编译设定,可修改安装参数
- README.html —— 浏览所有 ports 说明
- distinfo —— 安装所需文件及其 MD5 校验信息
- pkg-comment —— 简短描述
- pkg-descr —— 详细描述,通常包含软件主页地址
- pkg-plist —— 安装后文件清单及存放位置
如果不知道某个软件在哪个目录,可以用 whereis 查找。例如 whereis qpopper。如果只知道关键词,可以这样:
# cd /usr/ports
# make search key='关键词'
进入目标目录后,最简单的安装方式就是直接执行 make install,系统会自动从网络下载所需文件并安装。安装 ports 时,make 查找文件的顺序是:先 /usr/ports/distfiles,再 /cdrom/ports/distfiles,最后从网络下载。如果不打算使用网络,可以提前把文件下载到 /usr/ports/distfiles/ 下。如果文件在光盘里,安装前需要将光驱挂载到 /cdrom。不过有些软件不会自动去光盘找文件,所以建议还是把光盘中 /ports/distfiles 的内容复制到 /usr/ports/distfiles 目录,或者直接联网。
默认下载服务器在国外,为了加速,可以修改 /etc/make.conf 指定国内 FTP 站,例如添加:
MASTER_SITE_BACKUP?= \
ftp://freebsd.csie.ncu.edu.tw/distfiles/${DIST_SUBDIR}/ \
ftp://freebsd.csie.nctu.edu.tw/pub/distfiles/${DIST_SUBDIR}/
MASTER_SITE_OVERRIDE?= ${MASTER_SITE_BACKUP}
安装完 ports 后,建议执行 make clean 清除编译过程中产生的临时文件——否则大量临时文件会占用不少磁盘空间。如果已经装了一堆软件才想起没清理,也没关系,编译时的文件都存放在对应软件目录下的 work 子目录中。可以用这条命令找出所有未清理的目录并删除:
# find /usr/ports -depth -name work -exec rm -rf {} \;
注意,如果用网络安装,下载的源码会保存在 /usr/ports/distfiles 里,执行 make clean 后不会清除它们。
如果想卸载已安装的软件,进入该软件的 ports 目录,执行 make deinstall 即可。注意:千万不要在 /usr/ports 的根目录下执行 make deinstall,那样会卸载所有软件!
还有一些不太常用的 make 参数:
make fetch—— 仅下载所需源码make fetch-list—— 显示安装所需文件列表make checksum—— 下载并用 MD5 校验make extract—— 下载并解压源码make configure—— 进行配置,但不编译make all install—— 下载、编译并安装make reinstall—— 如果之前安装中断,可继续make package—— 将 ports 打包成 package 文件
安装完新软件后,如果使用的 Shell 是 Csh 或 Tcsh,可能需要执行 rehash 重建 hash table,否则可能找不到新命令,除非输入完整路径或重新登录。
已安装的软件都可以在 /var/db/pkg 目录下找到,每个软件一个目录,里面记录着安装信息和文件清单。有些软件在安装前会要求先装其他软件,通常会自动处理。所以 /var/db/pkg 里可能会出现一些并非你主动安装的依赖软件。想知道软件之间的依赖关系?可以使用 pkg_tree 这个工具。先通过 ports 安装它:
# cd /usr/ports/sysutils/pkg_tree
# make install clean
然后执行 pkg_tree | more 即可查看各软件之间的关系(别忘了先 rehash)。
10.4 更新 port tree
FreeBSD 发布时会事先测试 ports 目录中所有软件能否正常安装。由于软件之间相互依赖,发布前会暂停更新各软件版本以确保稳定。但发布之后,ports 中的软件版本可能已有更新,有些只是增加新功能,有些则涉及安全修复。如果想用最新版本,最好先更新整个 port tree。
不过也要注意:更新 port tree 后,因为版本依赖问题,某些软件可能暂时无法安装,通常过几天再更新一次就能解决。
更新 port tree 的方法很简单——使用 CVSup。CVSup 是一套神奇的同步工具,能让你和开发团队的源码保持同步。它不仅可以更新 port tree,还可以更新 /usr/src 下的 FreeBSD 源码。
首先安装 CVSup。由于不需要图形界面,安装 cvsup-without-gui:
# cd /usr/ports/net/cvsup-without-gui
# make install clean
系统里已经有一份 CVSup 更新 port tree 的配置文件范例,可以直接修改或复制一份再改:
# cp /usr/share/examples/cvsup/ports-supfile /root/
用文本编辑器打开 /root/ports-supfile,找到 host 部分,设置你要用的 CVSup 服务器:
# Defaults that apply to all the collections
*default host=cvsup.tw.freebsd.org
*default base=/usr
*default prefix=/usr
*default release=cvs tag=.
*default delete use-rel-suffix
*default compress
## Ports Collection.
ports-all
上面示例中使用的是 cvsup.tw.freebsd.org(交大资工维护)。你也可以使用 cvsup1 到 cvsup13.tw.freebsd.org,比如 cvsup3 在中山大学,cvsup13 是和信超媒体。最后一行 ports-all 表示更新全部目录。如果你想只更新部分目录,就把 ports-all 注释掉,去掉 ports-base 的注释,然后只保留你需要的分类(如 ports-www)。
设定完成后,执行命令开始更新:
# cvsup -g -L 2 /root/ports-supfile
参数 -g 表示不使用图形界面,-L 2 表示日志详细程度(0~2),最后的文件是配置文件。
养成一个好习惯:在安装 ports 之前,先跑一次 CVSup。这样你就能随时拿到最新版本的软件。当然,前提是你的机器必须连上互联网。
10.5 使用 portupgrade 更新软件
用 ports 装了一堆软件后,如果它们有新版怎么办?FreeBSD 的 ports 管理工具里有个非常好用的东西——portupgrade。
Ports 中的软件通常有依赖关系。比如安装 Apache 会自动装 libexpat,安装反垃圾邮件软件会装一堆 Perl 模块。更新时一定要保证依赖的软件一并更新,否则可能出问题。不过这不意味着要天天更新——软件并非越新越好,没人能保证新版的行为和旧版完全一致。只有在必要时才使用 portupgrade。
portupgrade 在更新时会保留你原来的配置文件。比如更新 Apache 时,它会保住 httpd.conf。这是目前更新 ports 软件比较安全的方式。
用 CVSup 更新 port tree 后,可以先用这条命令查看已安装软件和 port tree 中的版本差异:
# pkg_version -v
ispell-3.2.06_12 = up-to-date with port
jasper-1.701.0 = up-to-date with port
jpeg-6b_3 = up-to-date with port
kde-3.3.0 < needs updating (port has 3.3.1)
kdeaccessibility-3.3.0 < needs updating (port has 3.3.1)
...
输出中带 < needs updating 的就是需要更新的软件。然后可以用 portupgrade 来更新。首先用 ports 安装 portupgrade 本身:
# cd /usr/ports/sysutils/portupgrade
# make install clean
如果只想升级某个软件本身,不更新依赖,执行 portupgrade pkgname 即可。如果还要更新依赖该软件的其他软件,加参数 -r。如果连依赖的依赖也一起更新,用 -R。参数 -m 可以给编译传递额外选项,参数 -f 可以强制更新(即使版本相同)。
举个例子,要更新 perl-5.8,可以这样:
# portupgrade -rf "perl-5.8.*" -m "ENABLE_SUIDPERL=yes"
这条命令会递归更新所有依赖 perl 的软件,并在编译时启用 SUID Perl 支持。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
微软详解Win11时间点还原 默认每24小时创建恢复点
微软今日推送了最新的 6 月可选更新,并发布博客详细解读了 Win11 全新的“时间点还原”(Point-in-time restore)功能——这一功能本质上是对系统恢复体验的一次全面升级,旨在让用户更轻松地应对电脑故障。 微软表示,面向 Windows 11 客户端用户的“时间点还原”功能现已正
Win11 26H1六月可选更新KB5095091 优化放大镜改善装机体验
微软今天推送了Windows 11 26H1设备的6月可选更新KB5095091,安装完成后系统版本号会升级到Build 28000 2340。值得一提的是,这次更新并非面向所有设备,而是专门为搭载高通骁龙X2系列芯片的机型准备的——包括骁龙X2 Plus、X2 Elite和X2 Elite Ext
Win11六月可选更新KB5095093修复回收站弹窗异常
微软已悄然推送Windows 11六月可选更新,编号KB5095093。本次更新覆盖两个版本:24H2用户安装后版本号升级至Build 26100 8737,而25H2用户则更新至Build 26200 8737。 本次更新并非仅是小修小补,而是带来了多项实质性新功能。下面我们就来详细解析这些更新内
苹果macOS 27 Beta2封堵Siri AI跳过候补名单漏洞
科技媒体 Cult of Mac 昨日(6月23日)发布博文指出,苹果在 macOS 27 Beta 2 更新中悄然封堵了一个此前可用的后门——用户曾能通过一条终端命令绕过候补名单,直接启用新版 Siri AI,如今这一方法已失效。 简要回顾一下:在 macOS 27 Beta 1 阶段,只需在 M
微软加速Win11 25H2推送 覆盖所有符合条件家用PC
近日(6月23日),科技媒体 Windows Latest 发布了一则值得关注的动态:微软已进一步扩大 Windows 11 25H2 的推送范围,所有满足硬件要求、且不受 IT 部门管理的家庭版和专业版设备,现在均可顺利接收本次更新。 此次升级有一个显著特点——采用“启用包”(eKB)方式进行推送
- 日榜
- 周榜
- 月榜
相关攻略
2026-06-30 07:39
2026-06-30 07:39
2026-06-30 07:39
2026-06-30 07:38
2026-06-30 07:38
2026-06-30 07:38
2026-06-30 07:38
2026-06-30 07:38
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

