这是我们关于 BSD 系列操作系统的七部分系列文章的第四部分。
接下来是NetBSD 。我对这个操作系统知之甚少。大约在1996年,我曾在密歇根大学办公桌上的一台老旧的Mac 68K电脑上运行过它,把它改造成了一台Unix服务器。那是我对NetBSD的最后记忆。
在我看来,NetBSD 的“特色”在于它几乎可以在所有平台上运行。如果将二级系统(NetBSD 项目非常重视原生移植,但其开发不像核心移植那样受到严格监管。一般来说,原生移植的硬件平台已经失去了工业应用价值,或者缺乏足够的社区活动使其无法达到一级系统标准)也计算在内,那么 NetBSD 10.0(最新版本)可以运行在 54 种硬件平台上。
如果只计算一级系统(“重点移植是 NetBSD 作为其战略的一部分所针对的架构”),那么截至撰写本文时,OpenBSD 运行的平台(12 个)比 NetBSD(8 个)更多。
有趣的事实!NetBSD 曾经运行在传奇的 pc532 主板上,这是一款 1989 年生产的自制电脑主板。这款主板只生产了 200 块!2008 年,随着 gcc 停止支持,NetBSD 也无奈地停止了对 pc532 的支持。
我打算安装 NetBSD 10.0。

我们走吧!

我绕道去查看了实用工具菜单。

好的,基本救援工具,不错。

好的,我们继续。

嗯,你说默认使用 GPT 分区表?看来 NetBSD 比 FreeBSD 领先一步了。橙旗 1,红魔 0。
现在回想起来,我认为这是我与 NetBSD 关系的巅峰时期。

我的天哪,不,我不知道我的硬盘几何结构。我不想知道。我不想记住硬盘几何结构是怎么运作的。

NetBSD 安装程序,我听候您的差遣。

哦,我的天哪……我还以为你会做一些花哨的事情,没想到只是把所有东西都放在一个分区里。

最后机会!
人生苦短,及时行乐。

针刺声。
安装什么…
好的,我知道什么是启动块,但我以前从未听说过它们与端口有关。我查阅了一些资料,并选择了“使用BIOS控制台”。

定制?有哪些选项……

我将其改为:

我们出发吧:

进而:

“现在可以启动了……”
我们拭目以待。

这个屏幕简直让我抓狂。
首先,我想,好吧,那我添加一个用户。于是我选择了添加用户,然后就到了这个界面:

然后不知怎么的,我的键盘就锁定在大写字母模式了……?
是的,我检查过大写锁定键了。

好吧,事情总会发生,但最终我唯一能做的就是按下 Ctrl+C。然后我就进入了一个 shell 界面。我胡乱地按着键盘,最后不知怎么的就恢复了正常。我的键盘在 Chrome 窗口和 Sublime Text 里打字的时候都正常,所以……
总之,当我按下退出键退出 shell 时,我又回到了起点,所以我不得不重新安装一遍。唉。然后当我回到最终配置界面时,我决定配置网络。
它问我:

嗯,我可以肯定地说,答案既不是“以太网”,也不是“自动”,或者其他任何我能想到的选项。而且也没有办法中止或撤销操作。
所以,按Ctrl+C……第三次安装……
这次终于结束了。我取出光盘,重启电脑,然后……

完全无法启动。
好吧,经过 3 次启动后,也许 NetBSD 在某个时候因为重新分区而感到困惑,所以我采取了额外的措施。
我删除了那台虚拟机,然后创建了一台全新的虚拟机。我第四次重新安装了一遍。之后……

问题依然存在
开机后,我没有网络连接。好的,我试试手动运行dhcpcd命令。
它显示“没有接口有载波”。
我手动配置了以太网适配器,它就能正常工作了。然后我修复了 sshd_config 文件,这样 root 用户就可以通过 SSH 登录了,因为控制台上的信息让人很不方便。
我尝试弄明白网络配置是怎么回事。我创建了一个 /etc/ifconfig.XXX 文件,然后以为还需要在 rc.conf 中创建一个变量。但是仔细一看,auto_ifconfig 默认是启用的,所以应该不需要这样做……?
我记得这套老系统的工作方式是,如果你创建了一个 /etc/ifconfig.XXX 文件,它就会被读取和处理。如果你不想配置接口,就不要创建这个文件。
总之,我试用了一下,但后来我决定再试一次 dhcpcd,结果成功了,所以……我就用了它。
接下来是包裹部分。
# echo $PKG_PATH http://cdn.NetBSD.org/pub/pkgsrc/packages/NetBSD/x86_64/10.0/All/ # 导出 PKG_PATH # pkg_add pkgin pkgin-23.8.1nb3:正在将 /usr/pkg/share/examples/pkgin/repositories.conf.example 复制到 /usr/pkg/etc/pkgin/repositories.conf # pkgin 搜索 bash 正在处理远程摘要(https://cdn.netbsd.org/pub/pkgsrc/packages/NetBSD/x86_64/10.0/All)... pkg_summary.gz 100% 6210KB 1.0MB/s 00:06 bash-5.2.26nb1 GNU Bourne Again Shell bash-2.05.2.13 GNU Bourne Again Shell(版本 2) bash-completion-2.11 为 bash 提供可编程的补全规范 bash-doc-2.05.2nb1 GNU Bourne Again Shell 文档 bash-preexec-0.5.0 提供类似 zsh 的 Preexec 和 precmd 钩子函数 bats-0.4.0 Bash 测试框架 dash-0.5.12 Debian Almquist shell,符合 POSIX 标准的 shell,速度比 bash 快 fff-2.2 一个简单的文件管理器,用 bash 编写。 git-sh-1.3 是一个定制的 bash 环境,适用于 git 工作。 memo-0.6nb1 一个用 bash 编写的简单备忘录工具 py310-argcomplete-3.2.3 为 Bash 和其他 shell 提供 argparse 的 Tab 键自动补全功能 py310-bracex-2.4 Bash 风格的括号展开器 py311-argcomplete-3.2.3 为 Bash 和其他 shell 提供 argparse 的 Tab 键自动补全功能 py311-bracex-2.4 Bash 风格的括号展开器 py312-argcomplete-3.2.3 为 Bash 和其他 shell 提供 argparse 的 Tab 键自动补全功能 py312-bracex-2.4 Bash 风格的括号展开器 py38-argcomplete-3.2.3 为 Bash 和其他 shell 提供 argparse 的 Tab 键自动补全功能 py38-bracex-2.4 Bash 风格的括号展开器 py39-argcomplete-3.2.3 为 Bash 和其他 shell 提供 argparse 的 Tab 键自动补全功能 py39-bracex-2.4 Bash 风格的括号展开器 shfmt-3.7.0nb8 Shell 格式化程序,支持 bash tree-sitter-bash-0.20.5 是 tree-sitter 的 Bash 语法。 xonsh-0.10.1nb4 类似 Python、面向 BASH 的 shell 语言和命令提示符 软件包已安装且为最新版本 <: 软件包已安装,但有更新的版本可用 >: 已安装的软件包版本高于可用软件包版本 # pkgin 安装 bash 计算依赖关系……完成。 需要安装 1 个软件包: bash-5.2.26nb1 0 个用于移除,0 个用于刷新,0 个用于升级,1 个用于安装 需要下载 1662K,将占用 9.9M 的额外磁盘空间。 继续?[Y/n] 是 [1/1] bash-5.2.26nb1.tgz 100% 1662KB 1.6MB/s 00:00 [1/1] 正在安装 bash-5.2.26nb1... bash-5.2.26nb1:将 /usr/pkg/bin/bash 添加到 /etc/shells pkg_install 警告:0,错误:0 阅读本地摘要…… 正在处理本地摘要... # # bash -o vi bash-5.2#
好的,看来软件包管理功能正常。pkg_add 是一个用于提取等操作的底层命令。pkgin 应该是 apt/yum/pkg 的等效命令吧。
PKG_PATH 命令来自 NetBSD 包管理器网站。所以要安装 pkgin,你需要运行该命令,然后再安装 pkgin。但问题是,一旦 pkgin 安装完成,你就不需要设置这个变量了。那么……为什么不……直接……在安装操作系统时就安装 pkgin 呢?pkgsrc.org 上的示例都使用了 pkgin,所以……我不明白。
压垮骆驼的最后一根稻草
# pkgin install mariadb-server-10.11.6 (各种信息) [13/13] 正在安装 mariadb-server-10.11.6... mariadb-server-10.11.6:正在创建组“mariadb” mariadb-server-10.11.6:正在创建用户“mariadb” =========================================================================== 应为 mariadb-server-10.11.6 创建以下文件: /etc/rc.d/mariadb (m=0755) [/usr/pkg/share/examples/rc.d/mariadb] =========================================================================== pkg_install 警告:1,错误:0 pkg_install 错误日志位于 /var/db/pkgin/pkg_install-err.log 阅读本地摘要…… 正在处理本地摘要...
真有意思——你不肯告诉我第一次警告是什么,而是要我自己去查?
当我回头看时:
useradd:警告:主目录“/var/db/mariadb”不存在,且未指定 -m 参数。
各位,这其实不算警告。
但真正让我恼火的是:
应为 mariadb-server-10.11.6 创建以下文件: /etc/rc.d/mariadb (m=0755) [/usr/pkg/share/examples/rc.d/mariadb]
换句话说,要让 MariaDB 在启动时正常运行,你需要:
- 将此示例文件复制到 /etc/rc.d 目录,并确保权限正确。
- 修改 rc.conf
啊。
我的意思是,如果你要安装软件包,那么进行一些基本的设置,比如安装脚本之类的,应该是理所当然的。我觉得应该有比手动复制到 /etc/rc.d 目录还要修改 rc.conf 文件更优雅的方法。
bash-5.2# cp /usr/pkg/share/examples/rc.d/mariadb /etc/rc.d bash-5.2# vi /etc/rc.conf bash-5.2# !v vi /etc/rc.conf bash-5.2# service mariadb start 正在初始化 MariaDB 数据库系统表。 正在“/var/db/mariadb”中安装 MariaDB/MySQL 系统表... 好的 要在启动时启动 mariadbd,您需要复制 将 support-files/mariadb.service 复制到您系统的正确位置 创建了两个拥有所有权限的账户。 一个是 root@localhost,它没有密码,但你需要…… 需要以系统“root”用户身份连接。例如,使用 sudo mysql 命令。 第二个是 mariadb@localhost,它也没有密码,但是 您需要以系统用户“mariadb”的身份进行连接。 连接成功后,您可以设置密码(如果需要的话)。 能够以这些用户中的任何一个身份连接,只需密码,无需 sudo。 请访问 https://mariadb.com/kb 查看 MariaDB 知识库。 您可以使用以下命令启动 MariaDB 守护进程: cd '/usr/pkg' ; /usr/pkg/bin/mariadb-safe --datadir='/var/db/mariadb' 您可以使用 mysql-test-run.pl 测试 MariaDB 守护进程。 cd '/usr/pkg/' ; perl mariadb-test-run.pl 请访问 https://mariadb.org/jira 报告任何问题。 有关 MariaDB 的最新信息可在 https://mariadb.org/ 获取。 欢迎加入 MariaDB 强大而充满活力的社区:介入启动 mariadb。 bash-5.2# 240527 20:27:28 mysqld_safe 日志记录到'/var/log/mariadb/error.log'。 240527 20:27:29 mysqld_safe 正在启动 mariadbd 守护进程,数据库位于 /var/db/mariadb
读完之后,我得出结论,我需要对 mariadb.service 做更多的事情,要启动它,我需要切换到 /usr/pkg 目录,然后在那里运行一个命令。
不可能是那个意思吧?
我的意思是,MariaDB正在运行……
所以我把这段代码添加到了 /etc/rc.conf 文件中:
mariadb=是然后重启。
MariaDB 没有运行。Nginx 可以运行(我在 rc.conf 文件中设置了 nginx=YES),但 MariaDB 不行。是不是应该把 mysql 设置为 YES?这样说不通,因为“service mariadb start”命令中的服务名称就是“mariadb”。
NetBSD 处处充满挑战。
我真不认为安装一个非常流行的软件包并配置它开机启动会这么难。如果因为传统、习俗或出于某种尊重,需要修改很多配置文件,那也无可厚非,但至少应该有详细的文档说明。
我对NetBSD感到厌倦了,觉得它不适合我。