让我们试试 BSD,第 3 部分(共 7 部分):FreeBSD,强大的服务能力 让我们试试 BSD,第 3 部分(共 7 部分):FreeBSD,强大的服务能力

让我们试试 BSD,第 3 部分(共 7 部分):FreeBSD,强大的服务能力

FreeBSD这是我们关于 BSD 系列操作系统的七部分系列文章的第三部分。

第三部分:让我们试试 BSD,共七部分,此为第三部分:FreeBSD,强大的服务能力

FreeBSD 是使用最广泛的 BSD 操作系统。它可在 amd64、64 位 ARM (aarch64)、i386、32 位 ARM (armv6、armv7)、RISC-V 和 PowerPC 架构上运行。以前,我把三大 BSD 系统(当时 DragonFly 还没出现)分别看作是“NetBSD = 几乎可以在任何平台上运行,OpenBSD = 安全性高,FreeBSD = 在 amd64 架构上表现出色”。

我打算安装 FreeBSD 14.0。

我用DVD启动了系统。启动时间很长——将近2分钟。然后就进入了安装程序。

FreeBSD QEMU 平板电脑

为什么我的VPS服务器上连接着一台USB平板电脑?

FreeBSD 启动

没有图形安装程序,我相信所有 BSD 系统都是如此。

从现在开始,我将跳过一些不太令人兴奋的屏幕(选择键盘映射、设置时区等),而专注于使 FreeBSD 安装过程独具特色的内容。

FreeBSD 主机名

我将系统命名为 freebsd,并使用 DHCP 设置网络。

FreeBSD 源代码

我添加端口只是为了随便看看。FreeBSD 有软件包端口。软件包是编译好的二进制文件,就像你在 Linux 上使用 apt 或 yum 一样。通常情况下,这正是你想要的,因为软件包会安装二进制文件、设置配置文件等等。但是,你也可以通过端口获取软件。端口是源代码,需要编译才能安装。有些软件只能以端口的形式提供,原因有很多;而有些软件同时提供软件包和端口,原因也很多(主要是因为你可能需要修改编译参数)。我知道 OpenBSD 也有类似的机制。

在这里,我只会使用软件包。

FreeBSD 不支持 ZFS。

我决定不使用 ZFS,因为这台 VPS 只有 2GB 内存,而且他们建议在“低内存系统”上阅读有关 ZFS 的内容,我可不想给自己找麻烦。UFS 就足够了。我认为 ZFS 在拥有多个硬盘的系统上会更有用——无论是在专用服务器上还是在虚拟卷上,尽管后者本身就提供了冗余。

FreeBSD分区

FreeBSD GUID

默认是MBR。我们不是很久以前就不用MBR了吗?

FreeBSD分区

看起来不错。这取决于你想进行多精细的系统管理。理论上,你可能需要隔离哪些文件系统允许可执行文件,或许还需要将日志设置为追加模式,将所有静态二进制文件放在一个分区中以防 /usr/bin 损坏,或许还需要隔离 /var 和 /home 目录以防止他人占用过多空间等等。但对于业余爱好者的 VPS 来说,我通常像这样“全部放在一个分区”运行,因为节省空间更重要,而且我是唯一的用户。

之后,我确认/提交了操作,它写入了分区,然后提取了我上面选择的那些文件集。

FreeBSD 安装FreeBSD 提取

现在有几个系统配置选项。

FreeBSD Choices

我启用了ntpd和ntpd_sync_on_start。现在想想,我应该把moused功能关掉。

FreeBSD Choices

在多用户共享主机上,我会启用更多这类功能。我认为清除 /tmp 目录、随机化进程 ID (PID) 以及要求控制台输入密码都是好主意(后者虽然不是万无一失的保护措施,但总比没有强,至少能防止主机提供商那里无聊的初级系统管理员随意操作)。我发现不能随时运行 dmesg 命令很烦人,所以在这个单用户系统中,我保留了这项功能,以及其他查看用户 ID (uid)、组 ID (gid) 等信息的选项。

FreeBSD 用户

如果你问的是一个逻辑上只能用“是”或“否”回答的问题,那么当有人回答“是”时,就不应该感到意外。真是的。

还有 csh。为什么不呢?我们身处 BSD 的核心地带。(OpenBSD 使用 ksh)。

FreeBSD RebootFreeBSD 标志屏幕

漂亮的标志!

FreeBSD 提示符

我们被踢出局了。
我配置了 root 用户的 .ssh 目录,修改了 sshd_config 文件以允许使用公钥 root 用户登录,并做了一些其他调整。现在……如何重启 SSH 服务?
嗯,这确实可行,不过会让FreeBSD系统管理员感到不寒而栗……
 root@freebsd:/etc/rc.d # ./sshd restart
对 sshd 配置进行健全性检查。
停止 sshd。
等待进程 ID:82151。
对 sshd 配置进行健全性检查。
启动 sshd。
root@freebsd:/etc/rc.d #
我们稍后会学习正确的方法。
很多东西都很熟悉,但ps不一样。
 root@freebsd:~ # ps ax
PID TT STAT 时间命令
0 - 下载次数 0:00.00 [内核]
1 - ILs 0:00.00 /sbin/init
2 - WL 0:00.23 [时钟]
3 - 下载 0:00.00 [加密货币]
4 - DL 0:00.01 [摄像头]
5 - DL 0:00.00 [busdma]
6 - DL 0:00.08 [rand_harvestq]
7 - DL 0:00.04 [pagedaemon]
8 - DL 0:00.00 [vmdaemon]
9 - DL 0:00.01 [bufdaemon]
10 - DL 0:00.00 [审核]
11 - RNL 24:35.05 [空闲]
12 - WL 0:00.37 [插入]
13 - DL 0:00.00 [geom]
14 - DL 0:00.00 [序列器 00]
15 - 下载 0:00.01 [usb]
16 - DL 0:00.00 [vnlru]
17 - 下载 0:00.01 [同步器]
5766 - 当前时间为 0:00.00 dhclient:system.syslog (dhclient)
6231 - 是 0:00.00 dhclient: vtnet0 [priv] (dhclient)
16963 - ICs 0:00.00 dhclient: vtnet0 (dhclient)
17110 - Ss 0:00.05 /sbin/devd
17263 - 当前时间为 0:00.00 sshd:/usr/sbin/sshd [listener] 启动次数为 0/10-100 (s
17834 - Ss 0:00.55 sshd: root@pts/0 (sshd)
58639 - Ss 0:00.02 /usr/sbin/syslogd -s
71089 - Ss 0:00.06 /usr/sbin/ntpd -p /var/db/ntp/ntpd.pid -c /etc/ntp.conf
75845 - Ss 0:00.00 /usr/sbin/cron -s
18973 0 Ss 0:00.03 -sh (sh)
41237 0 R+ 0:00.00 ps ax
85009 v0 Is+ 0:00.00 /usr/libexec/getty Pc ttyv0
85403 v1 Is+ 0:00.00 /usr/libexec/getty Pc ttyv1
85703 v2 Is+ 0:00.00 /usr/libexec/getty Pc ttyv2
85838 v3 Is+ 0:00.00 /usr/libexec/getty Pc ttyv3
86419 v4 Is+ 0:00.00 /usr/libexec/getty Pc ttyv4
86767 v5 Is+ 0:00.00 /usr/libexec/getty Pc ttyv5
86776 v6 Is+ 0:00.00 /usr/libexec/getty Pc ttyv6
87192 v7 Is+ 0:00.00 /usr/libexec/getty Pc ttyv7

安装软件包

好的,我们来安装一些软件包。FreeBSD 的软件包管理器是 pkg(8)。它的手册页中写道:

如果 pkg(8) 尚未安装,则会先获取该软件包,验证其签名,然后进行安装,最后将原始命令转发给它。如果 pkg(8) 已安装,则会将请求的命令转发给实际的 pkg(8)。

真有用!

 root@freebsd:~ # pkg
您的系统尚未安装软件包管理工具。
您现在要获取并安装吗?[y/N]: y
正在从 pkg+http://pkg.FreeBSD.org/FreeBSD:14:amd64/quarterly 启动 pkg,请稍候……
正在使用受信任证书 pkg.freebsd.org.2013102301 验证签名... 完成
正在安装 pkg-1.21.2...
正在提取 pkg-1.21.2:100%
pkg:参数不足
用法:pkg [-v] [-d] [-l] [-N] [-j |-c |-r ] [-C ] [-R ] [-o var=value] [-4|-6] []

有关可用命令和选项的更多信息,请参阅“pkg help”。

root@freebsd:~ # pkg search nginx
pkg:缺少 FreeBSD 软件仓库。需要执行“pkg update”命令。

^Cpkg:
信号已接收,正在清理

root@freebsd:~ # pkg update
正在更新 FreeBSD 软件仓库目录……
正在获取 meta.conf:100% 178 B 0.2kB/s 00:01
正在获取 data.pkg:100% 7 MiB 7.3MB/s 00:01
正在处理条目:100%
FreeBSD 软件仓库更新完成。已处理 34072 个软件包。
所有代码库均已更新。
root@freebsd:~ #

我们先从 wget 开始。

 root@freebsd:~ # pkg search wget
wget-1.24.5 通过 HTTP(S) 和 FTP 从网络检索文件
wget2-2.1.0_1 文件和递归网站下载器
wgetpaste-2.34 通过 bash 脚本将内容粘贴到多个 pastebin 服务
root@freebsd:~ # pkg install wget
正在更新 FreeBSD 软件仓库目录……
FreeBSD 软件仓库已更新至最新版本。
所有代码库均已更新。
数据库摘要格式更新:100%
以下 5 个包裹将受到影响(已检查 0 个):

待安装的新软件包:
gettext-runtime:0.22.5
索引信息:0.3.1
libidn2:2.3.7
libunistring:1.2
wget:1.24.5

待安装软件包数量:5

该过程将需要额外 8 MiB 的空间。
待下载 2 MiB。

是否继续执行此操作?[y/N]:y
[1/5] 正在获取 wget-1.24.5.pkg:100% 774 KiB 792.9kB/s 00:01
[2/5] 正在获取 indexinfo-0.3.1.pkg:100% 6 KiB 6.0kB/s 00:01
[3/5] 正在获取 libidn2-2.3.7.pkg:100% 155 KiB 159.1kB/s 00:01
[4/5] 获取 libunistring-1.2.pkg: 100% 680 KiB 696.1kB/s 00:01
[5/5] 正在获取 gettext-runtime-0.22.5.pkg:100% 231 KiB 236.7kB/s 00:01
检查完整性...完成(0 个冲突)
[1/5] 正在安装 indexinfo-0.3.1...
[1/5] 正在提取 indexinfo-0.3.1:100%
[2/5] 正在安装 libunistring-1.2...
[2/5] 正在提取 libunistring-1.2:100%
[3/5] 正在安装 libidn2-2.3.7...
[3/5] 正在提取 libidn2-2.3.7:100%
[4/5] 正在安装 gettext-runtime-0.22.5...
[4/5] 正在提取 gettext-runtime-0.22.5:100%
[5/5] 正在安装 wget-1.24.5...
[5/5] 正在提取 wget-1.24.5:100%
root@freebsd:~ #

root@freebsd:~ # mkdir /root/swdist
root@freebsd:~ # cd /root/swdist/
root@freebsd:~/swdist # wget https://wordpress.org/latest.zip
--2026-05-25 19:05:14-- https://wordpress.org/latest.zip
正在解析 wordpress.org (wordpress.org)... 198.143.164.252
正在连接到 wordpress.org (wordpress.org)|198.143.164.252|:443... 已连接。
已发送 HTTP 请求,正在等待响应... 200 OK
长度:26193148 (25M) [application/zip]
保存到:'latest.zip'

latest.zip 100%[===================>] 24.98M --.-KB/s 用时 0.1 秒

2026-05-25 19:05:15 (183 MB/s) - 'latest.zip' 已保存 [26193148/26193148]

root@freebsd:~/swdist #

root@freebsd:~/swdist # pkg install unzip
正在更新 FreeBSD 软件仓库目录……
FreeBSD 软件仓库已更新至最新版本。
所有代码库均已更新。
以下 1 个软件包将受到影响(已检查 0 个):

待安装的新软件包:
解压:6.0_8

待安装软件包数量:1

需要下载 140 KiB。

是否继续执行此操作?[y/N]:y
[1/1] 正在获取 unzip-6.0_8.pkg:100% 140 KiB 143.1kB/s 00:01
检查完整性...完成(0 个冲突)
[1/1] 正在安装 unzip-6.0_8...
[1/1] 正在解压 unzip-6.0_8:100%

现在我们需要 Nginx、MariaDB 和 PHP-FPM。

 root@freebsd:~/swdist # pkg install nginx mariadb php-fpm
正在更新 FreeBSD 软件仓库目录……
FreeBSD 软件仓库已更新至最新版本。
所有代码库均已更新。
pkg:在软件仓库中未找到与“mariadb”匹配的可安装软件包。
pkg:在软件仓库中未找到与“php-fpm”匹配的可安装软件包。
root@freebsd:~/swdist # pkg search mariadb
mariadb-connector-c-3.3.8_1 MariaDB 数据库连接器(C 语言)
mariadb-connector-odbc-3.1.20 MariaDB 数据库 ODBC 连接器
mariadb1011-client-10.11.7 多线程 SQL 数据库(客户端)
mariadb1011-server-10.11.7 多线程 SQL 数据库(服务器)
mariadb105-client-10.5.23 多线程 SQL 数据库(客户端)
mariadb105-server-10.5.23 多线程 SQL 数据库(服务器)
mariadb106-client-10.6.17 多线程 SQL 数据库(客户端)
mariadb106-server-10.6.17 多线程 SQL 数据库(服务器)
p5-DBD-MariaDB-1.21 用于 Perl5 数据库接口 (DBI) 的 MariaDB 驱动程序
rubygem-azure_mgmt_mariadb-0.17.4 Microsoft Azure Microsoft Azure MariaDB Ruby 客户端库

所以没有虚拟软件包。另外,我发现也没有单独的 php-fpm 软件包,而是包含在 PHP 中。所以,长话短说:

 root@freebsd:~/swdist # pkg install mariadb106-server mariadb106-client php83
正在更新 FreeBSD 软件仓库目录……
FreeBSD 软件仓库已更新至最新版本。
所有代码库均已更新。
以下 18 个软件包将受到影响(已检查 0 个):

待安装的新软件包:
bash:5.2.26_1
boost-libs:1.84.0
galera26:26.4.16_2
icu: 74.2_1,1
libargon2:20190702_1
libedit:3.1.20230828_1,1
libiconv:1.17_1
liblz4:1.9.4_1,1
libxml2:2.11.7
mariadb106-client:10.6.17
mariadb106-server:10.6.17
pcre2:10.43
php83:8.3.6
读取行:8.2.10
rsync:3.3.0
unixODBC:2.3.12_1
xxhash:0.8.2_1
zstd:1.5.6

待安装软件包数量:18

该过程将需要额外 589 MiB 的空间。
需要下载 87 MiB。

是否继续执行此操作?[y/N]:

来自 mariadb106-server-10.6.17 的消息:

--
MariaDB 遵循 hier(7) 规范,不会检查 /etc 和 /etc/mysql 文件。
请将现有的 my.cnf 文件从这些路径移动到
/usr/local/etc/mysql 或 /usr/local/etc。示例
配置文件位于 /usr/local/etc/mysql
和 /usr/local/etc/mysql/conf.d。
rc(8) 脚本不再使用 /var/db/mysql/my.cnf 进行配置。
日志和 PID 文件也不在 /var/db/mysql 目录下。

此端口不包含 mytop perl 脚本,该脚本包含在其他端口中。
MariaDB tarball,但最新版本可以在以下位置找到:
数据库/mytop 端口

使用 wsrep 集群需要添加配置文件。
将 /usr/local/etc/mysql/conf.d/wsrep.conf.sample 复制到
/usr/local/etc/mysql/conf.d/wsrep.conf 并根据需要进行更改。

我还安装了 php83-extensions 和 nginx,但我忘记将它们添加到上面的命令中了。

我从 MariaDB 的这条“消息”中学到了很多。我阅读了 hier(7) 的手册页,了解到 FreeBSD 使用一种将本地安装的软件放在 /usr/local 目录下的系统。我知道 /usr/local 是什么,但在 Linux 系统中,如果你通过发行版的包管理器安装软件,它会放在 /usr/bin 等目录下。如果你下载、编译并安装自己的软件,通常也会放在 /usr/local 目录下。FreeBSD 的意思是“我们开发者提供的文件系统应该保持纯净,你可以把所有网站自定义设置、软件安装、源代码等等都放在 /usr/local 目录下”。

服务:服务的力量

Unix 系统之间的一个区别通常体现在启动/初始化方面,FreeBSD 也不例外。

要启动、停止、重启等服务,你可以调用类似这样的命令:

重启 nginx 服务

但是,并没有“service nginx enable”这样的命令。要让 Nginx 在启动时自动运行,需要修改 /etc/rc.conf 文件。

在该文件中,你会看到类似这样的行:

 mysql_enable="YES"
nginx_enable="YES"

现在看来,可以直接编辑该文件。但是,FreeBSD 的惯用方法是使用 sysrc 命令:

 sysrc nginx_enable="YES"

“<服务名称>_enable”这种语法在我看来很笨拙。我知道这是因为某个 shell 脚本会调用这个文件,但创建 /etc/services_enabled 文件并列出要启用的服务会更简洁高效。

准备为 WordPress 服务

我就不一一赘述每条指令了。以下是我执行的操作。

我运行了 mysql_secure_installation。

安装 nginx 后,我修改了 /usr/local/etc/nginx/nginx.conf,添加了 /usr/local/etc/nginx/sites,这有点像 Debian 上的 sites-enabled/sites-available 设置,但更快捷简便一些。

具体指令如下:

包含 /usr/local/etc/nginx/sites/*;

我创建了一个 blog.lowend.party nginx 配置。

我没有对php-fpm进行任何调优,它就开始运行了:

 root@freebsd:/usr/local/etc # service php-fpm start
无法启动 php_fpm。请在 /etc/rc.conf 中将 php_fpm_enable 设置为 YES,或使用 'onestart' 代替 'start'。

root@freebsd:/usr/local/etc # sysrc php_fpm_enable="YES"
php_fpm_enable: -> 是
root@freebsd:/usr/local/etc #

root@freebsd:/usr/local/etc # service php-fpm start
对php-fpm配置进行健全性检查:
[2026年5月26日 09:40:03] 注意:配置文件 /usr/local/etc/php-fpm.conf 测试成功
启动 php_fpm。

查看 /usr/local/etc/php-fpm.d/www.conf 文件,你会发现 php-fpm 使用的是 127.0.0.1:9000。我更倾向于使用 Unix 套接字。应该把它放在哪里呢?

 root@freebsd:/usr/local/etc# find / -type s -print
/var/run/devd.pipe
/var/run/devd.seqpacket.pipe
/var/run/log
/var/run/logpriv
/var/run/mysql/mysql.sock

看起来 /var/run 是存放位置。

现在,让我们创建一些目录并配置我们的网站,网址是 blog.lowend.party。我喜欢把所有内容都放在 /web 目录下。nginx 以用户 'www' 和组 'www' 的身份运行。

 root@freebsd:/usr/local/etc/nginx/sites # mkdir /var/log/nginx/blog.lowend.party/
root@freebsd:/usr/local/etc/nginx/sites # cd /var/log/nginx/blog.lowend.party/
root@freebsd:/var/log/nginx/blog.lowend.party # touch access.log error.log
root@freebsd:/var/log/nginx/blog.lowend.party # chown www:www *.log
root@freebsd:/var/log/nginx/blog.lowend.party # cd ..
root@freebsd:/var/log/nginx # chgrp www blog.lowend.party/
root@freebsd:/var/log/nginx # chmod 775 blog.lowend.party/
root@freebsd:/var/log/nginx # ls -ld blog.lowend.party/
drwxrwxr-x 2 root www 512 5月26日 09:45 blog.lowend.party/
root@freebsd:/var/log/nginx # ls -lR blog.lowend.party/
总计 0
-rw-r--r-- 1 www www 0 5月26日 09:45 access.log
-rw-r--r-- 1 www www 0 5月26日 09:45 error.log

root@freebsd:/var/log/nginx #

顺便说一句,在 vi 中选中内容后直接复制很方便,我不需要先进行一些操作。

 :mouse-=a

就像我用 vim 一样。这是因为 FreeBSD 使用的是源自 BSD 的 vi 编辑器。

 root@freebsd:/usr/local/etc/nginx # mkdir -p /web/blog.lowend.party
root@freebsd:/usr/local/etc/nginx # vi /web/blog.lowend.party/index.html

目前运行正常吗?

FreeBSD 静态成功

现在我们再做几件事。

了解更多关于 FreeBSD 的信息

我安装了 certbot。有趣的是:

 root@freebsd:/usr/local/etc/nginx # pkg install py39-certbot-nginx
正在更新 FreeBSD 软件仓库目录……
FreeBSD 软件仓库已更新至最新版本。
所有代码库均已更新。
检测到新版本的软件包;需要先安装。
以下 1 个软件包将受到影响(已检查 0 个):

待升级的已安装软件包:
软件包版本:1.21.2 -> 1.21.3

待升级软件包数量:1

待下载文件大小为 12 MiB。

是否继续执行此操作?[y/N]:y

工作进行到一半,正好赶上他们推送 pkg 的新更新。Netcraft 说 BSD 要消亡了……唉。

Certbot 软件包提示我需要修改 /etc/periodic.conf 文件以更新证书。但该文件并不存在。于是我做了件合乎逻辑的事:查阅了 periodic.conf 的手册页。然后我了解到……

它位于 /etc/defaults 目录中,其部分内容可能被 /etc 目录中同名的文件覆盖,而 /etc/defaults 文件本身又可能被 /etc/periodic.conf.local 文件覆盖。

/etc/defaults/periodic.conf 文件内容如下:

请勿编辑此文件!请将任何覆盖设置放入以下任一文件中:
# 代替 $periodic_conf_files

...

哪些文件会覆盖这些默认值?
periodic_conf_files="/etc/periodic.conf /etc/periodic.conf.local ${_localbase}/e
tc/periodic.conf”

现在,我想检查一下DNS是否正常工作,所以我做了以下操作:

 # nslookup blog.lowend.party
-sh:nslookup:未找到

就像几乎所有 Linux 发行版或操作系统一样,我需要上网搜索才能找到哪个软件包包含 nslookup 函数。但谷歌误导了我。我找到的第一条论坛评论说它是 bind 软件包的一部分,而 bind 已被 unbound 取代。

然而,“pkg install unbound”命令并没有安装它,所以接着又执行了“pkg remove unbound”。等等……难道真的有“绑定工具”类型的软件包吗?果然如此。

 pkg install bind-tools

这时,我开始想念 bash shell 了,因为我经常高强度地使用 shell。幸运的是,它已经安装了,而且实际上已经在 /etc/shells 文件中配置好了。

 bash -o vi

啊,真是耳目一新。我想,当心爱的工具被替换掉时,产生抵触情绪是人之常情吧。

顺便说一句,我没有为 root 用户更改它,因为所有为 FreeBSD 做出贡献的工程师编写的代码都假定它是在 root 用户的默认 shell 下运行的。

WordPress 的最后准备工作

我创建了一个 MySQL 数据库和用户等等。

创建 WordPress 数据库;
创建用户“wordpress”@“localhost”,密码为“StrongPassword”;
grant all on wordpress.* to 'wordpress'@'localhost';

我没有清除权限,因为那样做很愚蠢

 cd /web/blog.lowend.party/
cp /root/swdist/latest.zip
解压缩 /root/swdist/latest.zip
删除 index.html
mv wordpress/* .
rmdir wordpress

我想我们已经准备好安装了。我们来看看:

糟糕的网关

不……

所以我首先想到的是 php-fpm 服务宕机了(但实际上并没有),或者配置错了……也许是这样。我把它改成了使用 Unix 套接字,这导致 Nginx 日志中出现了权限被拒绝的错误。我应该直接修改 /var/run/php-fpm.sock 的权限吗?嗯,最后我还是把它改回了使用 127.0.0.1:9000,并且也更新了 nginx 的站点配置。

在那之后:

FreeBSD 成功案例

从那时起,我们就进入了 WordPress 的世界。

我们来试试 Phoronix

pkg install phoronix-test-suite-php83-10.8.4_2

这成功了,但尝试

phoronix-test-suite 安装 nginx

结果如下:

            安装程序以非零退出状态退出。

            错误:make:遇到致命错误——无法继续

            日志:~/.phoronix-test-suite/installed-tests/pts/nginx-3.0.1/install-failed.log

    [问题] pts/nginx-3.0.1 未安装。

日志中有很多这类错误:

 sed:1:"nginx_/conf/nginx.conf": n 命令末尾有多余的字符
sed:1:"nginx_/conf/nginx.conf": n 命令末尾有多余的字符
sed:1:"nginx_/conf/nginx.conf": n 命令末尾有多余的字符
sed:1:"nginx_/conf/nginx.conf": n 命令末尾有多余的字符
sed:1:"nginx_/conf/nginx.conf": n 命令末尾有多余的字符
sed:1:"nginx_/conf/nginx.conf": n 命令末尾有多余的字符
tar:设置默认区域设置失败
make:"/root/.phoronix-test-suite/installed-tests/pts/nginx-3.0.1/wrk-4.2.0/Makefile" 第 6 行:无效的行类型
make:"/root/.phoronix-test-suite/installed-tests/pts/nginx-3.0.1/wrk-4.2.0/Makefile" 第 9 行:无效的行类型
make:"/root/.phoronix-test-suite/installed-tests/pts/nginx-3.0.1/wrk-4.2.0/Makefile" 第 10 行:警告:目标“ifeq”的重复脚本已忽略
make:Makefile 第 8 行:警告:此处定义的“ifeq”使用了之前的脚本

出问题的不是我的nginx.conf文件:

 # nginx -t
nginx:配置文件 /usr/local/etc/nginx/nginx.conf 的语法正确
nginx:配置文件 /usr/local/etc/nginx/nginx.conf 测试成功

我考虑过删除软件包然后从 GitHub 安装,但是 GitHub 上的版本和 FreeBSD 自带的软件包版本一样。唉,我真是搞不懂了。公平地说,PTS 上是这么说的:

Phoronix 测试套件支持 Linux、*BSD、Solaris、macOS 和 Windows 系统。但是,功能最齐全且支持最完善的操作系统是 Linux。

为什么启动这么慢?或者更确切地说,为什么我让它启动得这么慢……

所以当我从 ISO 启动时,启动时间很长,我猜是因为某种安装内核在进行大量的额外探测,运行大量的安装/发现脚本等等。

但我已经重启了三次,并在控制台中查看过,看到的都是同样的情况。

徽标出现并完成自动启动倒计时后,内核开始加载。最初的五六秒钟,一切似乎进展迅速,大量信息不断涌现。然后就出现了这种情况:

FreeBSD卡住了

此时,屏幕静止了大约1分45秒。然后屏幕突然变成了这样。我说“变成”,是因为屏幕不是滚动,而是整个屏幕刷新后变成了这样:

FreeBSD 解卡

第一次我以为可能是启动/完成设置过程中出现了一些问题导致系统卡顿,但重启三次后问题依然存在。

我认为有两个问题。首先,可能是显示错误或重置导致信息没有更新,所以我无法确定这 1 分 45 秒的卡顿时间有多少是系统卡顿造成的,又有多少是用来显示上面第二个屏幕上的信息。其次,可能是某些操作超时或启动时间过长。FreeBSD 在企业级服务器上启动时间不应该超过 2 分钟吧?

好吧,看看是 FreeBSD 的问题还是我哪里搞砸了。我在 Vultr 上创建了一个 FreeBSD 2 虚拟机,配置和之前一样,这次用的是他们的 FreeBSD 14.0 模板。

虚拟机启动大约需要 6.5 秒。

好的,所以有两种可能:

  • 作为一名初级 FreeBSD 系统管理员,我搞砸了一些事情。
  • Vultr 上的 FreeBSD 需要一些 Vultr 知道而我不知道的优化。可能是需要调整某些参数,或者需要添加(或移除)某些硬件支持,或者需要特定的内核配置等等。我估计如果我花时间在论坛上,对比他们的模板和 ISO 安装包,就能找到问题所在。

我原本打算在 Vultr 上运行 FreeBSD,我会使用他们的模板。

进一步研究

我想了解更多关于这些方面的信息:

  • 监狱介于 chroot 和容器之间,或者可能兼具两者的特点。
  • FreeBSD 的强制访问控制,或 BSD 的 SELinux
  • ZFS

最后想说的话

我很喜欢 /usr/local 目录的分离。pkg 似乎也如宣传的那样工作。很多小问题在不同的 Linux 发行版之间迁移时也会遇到(例如安装程序的工作方式、哪些软件包包含 nslookup 等)。一些 finger 宏需要调整。

显然,我得先解决启动问题和其他一些问题,但FreeBSD对我来说并不陌生,我觉得我可以很轻松地长期使用FreeBSD。其他想法就留到最后再说吧!

接下来是: NetBSD!