仅本页所有页面
由 GitBook 提供支持
无法为254页生成 PDF,生成在100页时停止。
使用50页进行扩展。
1 / 100

FreeBSD 从入门到跑路

Loading...

Loading...

Loading...

Loading...

前言

Loading...

Loading...

Loading...

Loading...

第 1 章 FreeBSD 初见

Loading...

Loading...

Loading...

Loading...

第 2 章 安装 FreeBSD

Loading...

Loading...

Loading...

Loading...

第 3 章 FreeBSD 高级安装

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

第 4 章 FreeBSD 基础

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

第 5 章 软件管理和系统升级

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

第 6 章 桌面环境

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

第 7 章 窗口管理器

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

第 8 章 本地化——i18n/L10n

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

第 9 章 多媒体和外部设备

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

第 10 章 代理服务器

Loading...

Loading...

FreeBSD 从入门到跑路

🎉 欢迎来到 BSD 的世界!

FreeBSD 是真正自由(Liberty)的 操作系统,在这波谲云诡的世界中仍然坚守 BSD UNIX 哲学——恪守古老的法则,追寻真正的自由。

“入门”本是一种快乐,“跑路”亦是一种豁达。“本乘兴而行,兴尽而反,何必 FreeBSD 邪!”

📄 内容提要

这是一本开源的 FreeBSD 操作系统研究书籍,还包含一些 OpenBSD、NetBSD 等 Berkeley Unix 家族的导论章节。

FreeBSD 项目即将归档(Archived),为了保护我们心爱的操作系统……我们能做的事情就是,写一本书!

🖋️ 作者

本书是 FreeBSD 中文社区 许多人不懈努力的成果。

  • FreeBSD 中文社区 首要 联系方式为 QQ 群:(点击加群)

  • 微信群:因微信封闭性,须先加 QQ 群,再联系 QQ 群主获取新鲜二维码

  • Discord:(需代理,可通过网页使用)

  • Telegram 群组:(需代理)

📚 电子书

目前网站提供了 PDF 和 EPUB 格式的电子文档:

  • PDF(适用于印刷及电脑端离线阅读)下载地址:

  • EPUB(适用于移动端离线阅读)下载地址:

注意

上面的网址是 docs 开头的而不是 book !

EPUB 在手机上可以使用 打开,其格式显示比较完整;在电脑上可用 打开。

上述电子文档永远反映实时的网页,随 Git 提交而 实时更新(但其文件名不会发生变化)。

由 编写的 提供支持。

🌐 部署地址

本书目前部署了两个域名以供访问,分别使用不同的网站架构:

除此外 FreeBSD 中文社区未对本书进行任何部署。我们唯一的域名只有 “bsdcn.org”。

💬 意见反馈

由于编者水平所限,书中缺点和谬误之处自不可免。

如遇本书相关问题或网站技术问题:请发送邮件至 ykla 。关于本书内容问题,欢迎通过在桌面端网页右下方(或底部左下方)当前页面的 GitHub 直接提交 PR。

除此外有关中文社区的问题烦请加入 QQ 群后再联系 QQ 群主。

为了建设一个爱,希望与和平的世界,请务必确保您的各项行为符合 及其意指。

由于架构设计问题,您必须使用 GitHub 账户进行登录方可留言,并且您在 docs 上的评论将会公开到 GitHub 存储库 的 Discussions 中,您可自行前往上述位置管理您的历史留言。

🧭 目标与方向

详见 。

☕ 捐赠

请优先捐赠 FreeBSD 基金会!

需要你持有 VISA 信用卡:请在捐赠页面“Click & Pledge”下使用 Amazon Pay,测试可用。

你还可以通过必应搜索的 Rewards 积分 。也可以用该方式 。

🏗️ 贡献者

⚖️ 授权协议与法律声明

本项目采用《CC BY 4.0 署名 4.0 协议国际版》,详见 。

本作品为识别目的所援引的第三方商标(如 ®)、商号、服务标志(如 ™)、商品外观及版权材料(如 ©)等一切商业标识与知识产权标的,其相关权利均由其合法权利人独立持有并受法律保护。前述引用仅为说明与指称之目的,不构成任何商业性使用、关联背书或法律授权,亦不视为对相关权利的限制或影响。

本作品出于说明、评论或教学目的,可能合理引用(包括但不限于文字、图像、数据等)了来源于第三方的内容(例如官方网站及其他公开网站、出版物等)。此类引用的知识产权仍归属原始权利人所有。相关引用均出于善意,符合合理使用原则,并非意在侵犯原作者或权利人的合法权益。

作品中演示或提及的任何第三方软件、源代码及文档,其全部知识产权(包括但不限于著作权、专利、商标与商业秘密)均由原权利人完整保留。如果您相信您的作品以侵犯版权的方式被复制或粘贴在我们的项目中,请通过电子邮件地址 ykla 进行联系。我们将妥善处理。

除特别注明外,本书中的文字、图表等内容依据 协议发布。

书中所有代码示例依据 发布。

📜 项目历史

《FreeBSD 从入门到跑路》肇始于 2021 年 3 月 14 日,其原型最早可追溯至 ykla 于 2020 年 12 月 31 日发布的文章《FreeBSD 艺术科学哲学导论》。

📈 统计信息

自 2022 年 6 月 1 日以降,本书的访问情况如下:

指标
统计数据

以上统计信息由 提供。


以上图表由 提供。


第 3 版编纂进度: (草稿提交数: 1179)

距离第 3 版还需提交: 2354 次


本书得到的 ⭐ 真是太少啦! 若本书对你有帮助,欢迎给本书所在的 加颗 ⭐。

以上图表由 提供。

用户总数

41,802 位

会话数

87,344 次

浏览次数

608,878 次

平均会话时长

8 分 53 秒

787969044
https://discord.gg/j7VhWrhp3e
https://t.me/oh_my_BSD
https://docs.bsdcn.org/bsdbook.pdf
https://docs.bsdcn.org/bsdbook.epub
微信读书
CAJViewer 9
safreya
GitBook PDF/EPUB 导出工具
https://book.bsdcn.org
https://docs.bsdcn.org
[email protected]
FreeBSD 中文社区行为规范(CoC)
Handbook-giscus-discussions
贡献指南与开放任务
点此捐赠 FreeBSD 基金会
对 FreeBSD 基金会进行捐赠
捐赠 NetBSD 基金会
署名 4.0 协议国际版法律文本
[email protected]
CC BY 4.0
BSD 2 条款许可
Google Analytics
Repobeats analytics image
GitHub 项目存储库
GitHub Star History
FreeBSD 中文社区 QQ 群
贡献者
总用户数
会话数
浏览次数
平均会话时长
GitHub 存储库状态图
进度徽章
⭐ 图

2.3 故障排除

无法进入安装界面

若是虚拟机,请检查自己的配置;

若是物理机:

请依次检查如下列表:

  • 你是普通家用电脑吗?

  • 处理器是 intel 或 amd?

  • 是否关闭了 BIOS 里的安全启动(Secure Boot)?

  • 是否从 下载的镜像?

  • 是否下载了最新版本的 RELEASE 镜像?

  • 你下载的镜像后缀名是不是 img?

  • 镜像校验(sha256)是否通过?

  • 你下载的镜像带有 amd64(普通家用电脑)字样吗?

    • 看清楚是 amd64 不是 arm64(开发板用)!

  • 你的 U 盘是扩容的吗?

  • 你是否使用了 Ventoy?

    • 刻录软件请使用 ,不要用

若仍出现问题,请先在 使用英语询问;若无果,可按其他章节指引提交 bug。

重启后又进入了安装界面

若是虚拟机,请主动弹出/断开 DVD 开机自动连接,然后重启;若是物理机,请拔出 U 盘或弹出安装光盘,然后重启。

卡在某项服务

在以前的版本安装中,可能在启动时长期卡在 sendmail 等服务,或者需要配置静态 IP 地址,但是系统一直在尝试 DHCP。

可以尝试输入 ctrl + c 中断该服务,以启动系统。

3.7 基于 Apple M1 & VMware Fusion Pro 安装 FreeBSD

本文基于 macOS 15.3.1、VMware Fusion Pro 13.6.2、FreeBSD 15.0,UEFI(默认)。经过测试 14.2-RELEASE 亦可。

注意

如果你使用 macOS 14,则可能存在键盘无法输入的故障。

下载 FreeBSD

由于苹果 M1 是 arm 架构,请下载带有 aarch64 字样的镜像。不要 下成 amd64。

配置虚拟机

选择下载的 FreeBSD 镜像。

默认的内存太小了,点击:“自定设置”

点击“处理器和内存”

修改处理器数量内存大小。4096MB 即 4G。

开始安装

配置桌面

无需安装任何虚拟机增强工具。

桌面不能抻拉。

故障排除与未竟事宜

解决鼠标不能移动的问题

编辑 /boot/loader.conf,加入:

即可。

参考文献

贡献指南与开放任务

为什么不去建设《FreeBSD 手册》

FreeBSD 项目拒绝(表现为长期搁置)任何实质上的 PR,除了季度报告。事实上,纵观提交数据,freebsd doc 项目已经死亡十余年:

使用 对 freebsd-doc 进行分析的结果参见 。

  • 2005-2006 年:第一次显著下滑

3.6 基于 Apple M1 & Parallels Desktop 20 安装 FreeBSD

本文基于 Apple M1(macOS 14.7)、Parallels Desktop 20.1.3-55743。

在 Parallels Desktop 20 中,FreeBSD 15.0 CURRENT 图形界面(不可自动缩放)、键盘、鼠标均正常。

注意

由于 未被合并入 FreeBSD 14。故 14 无法安装,会在安装界面报错,参见 。所以只能安装 15 及以上。

安装

选择“通过映像文件安装 Windows、Linux 或 macOS”,然后继续。

7.6 Fluxbox

安装

  • 使用 pkg 安装:

  • 或者使用 Ports 安装:

8.7 更换字体

首先提取 Windows C:\Windows\Fonts 里所有的 .ttf 和 .ttc 字体文件。(MacOS 中的字体需要特殊处理,虽然看起来格式都是 .ttf)

为新字体新建一个目录便于管理:

将字体文件复制进 WindowsFonts 即可。

9.7 多媒体处理工具

音频剪辑

  • Audacity :

安装:

或者

https://freebsd.org
Rufus
Ventoy
官方论坛
Mouse does not work in VMWARE Fusion and Freebsd 14.2
# mkdir -p /usr/local/share/fonts/WindowsFonts
# chmod -R 755 /usr/local/share/fonts/WindowsFonts #刷新权限
# fc-cache
视频剪辑
  • Olive 视频编辑器:

安装:

或者:

压缩字幕

  • ffmpeg :

或者:

处理:

扣图

Unix 系统下相关软件有很多,这里我们简单介绍一下矢量制图程序 Inkscape 的使用方法

安装 inkscape

  • 使用 pkg 安装:

  • 或者使用 Ports 安装:

inkscape 用法

  1. Ctrl O(字母 o)打开图片

  2. 点击图片

  3. Alt i 改为矢量模式

  4. Shift F6 贝塞尔和直线模式

  5. Ctrl A 全选

  6. 选择 路径 --> 交集,实现扣图

参考文献

  • Inscape 官方教程

hw.usb.usbhid.enable="1"
usbhid_load="YES"
# pkg install audacity
# cd /usr/ports/audio/audacity/ 
# make install clean
# pkg install olive-video-editor
# cd /usr/ports/multimedia/olive/ 
# make install clean
# pkg install ffmpeg
# cd /usr/ports/multimedia/ffmpeg/ 
# make install clean
$ ffmpeg -i 视频文件.mp4 -vf subtitles=对应字幕.ass 输出视频.mp4
# pkg install inkscape
# cd /usr/ports/graphics/inkscape/ 
# make install clean

2015-2016 年:第二次大幅下滑

项目结构复杂且混乱。维护者自己都看不懂。比如在翻译时的某些数据引用是否可复用。

由于其安全报告的文件名在 Windows 下是非法字符(有英文冒号 :),因此导致整个项目无法在 Windows 被正常拉取:

贡献指南概述

如果你想让你的教程出现在本书中,你可以这样做:

  • 如果你熟悉 GitHub,可以点击电脑端右侧的“编辑此页”,进入项目进行操作。整个项目使用 Markdown 语法 + Gitbook,简单易上手(具体详见项目 WiKi);

  • 如果以上有困难,你还可以发 PDF、Word 或者 TXT 给我。请将文件发送至电子邮件 [email protected](我将在 3 天内回复。若我没有回复,请换个邮件再发一次,或者提交 issue);如果有视频教程,以各大云盘链接为宜。

本书现接受以下内容:

  • 一切与 BSD 相关(包括不限于 FreeBSD,OpenBSD,NetBSD)以及各种体系结构的教程。你既可以扩充当前教程,也可以新建一节;

  • 下方的 ToDo 列表或 GitHub Project;

  • 你亦可在文学故事章节分享你与 BSD 的故事,你的个人心得体会。

基本原则与方法论

基本原则

  • 尽可能详细和基础,不要假定用户有任何使用背景

  • 使用大型软件(如 IDE、JAVA)时,请注明软件版本号

  • 应注意引用的权威性、时效性和准确性。尽量采用原始文献,次选二手文献,避免三手文献

  • 在引用其他网站内容时,请查证其引用的内容是否真实可信,并且不要直接网站内容之,而是要直接一手来源

  • 请提交到 main 分支

  • 请避免学术不端行为,参见

  • 遵守

使之成为“一本书”,而不仅仅是本字典或手册

  • 如果某一技术在最新版本被移除,则应及时移除其在本书的对应位置内容

  • 使全书语气温柔而坚定

  • 在最大化减少原文引用的前提下,重写各章节内容,删除冗余。

  • 现代化、简化 BSD 中文文档协作方式:

    • 自动化(CI 检查、预览、生成 HTML/PDF)

    • 仅用最基础的 Markdown 语法,避免复杂扩展和繁琐流程

    • 技术和选材与时俱进,确保内容现代化。

  • 严格验证每一部分:

    • 参考文献:不仅要求来源可查,而且要求来源可信:

    • 原理性内容:

      • 追溯到具体 FreeBSD 源码文件、提交记录或函数;

  • 审视原作者的开发哲学与理念,评价其合理性,并尝试简单参与相关项目。

  • 指出并修正上游官方手册中的错误或已过时内容。

  • 生成英文版本

细则

  • 非拉丁字符与拉丁字符间应该加空格(中英文/数字间应有一个半角空格),有许多 Markdown 格式化工具可以自动完成。

  • 不应该使用 sudo 而应该用 # 代替,除非特例(如讲解如何使用 sudo 本身);普通用户权限请使用 $ 表示。

  • 安装软件时,给出 pkg 或 ports 两种方法,除非极不建议使用 pkg,如特定内核模块等。

  • 请注意版权问题。引用或灵感受到启发时,请备注文章链接出处,必要时可使用互联网档案馆进行快照保存。

  • 编辑时尽量以最新的 FreeBSD RELEASE 为基准,绝对避免出现 pkg_add 此类过时东西。如有必要,必须予以注明版本。

  • 对于编写时长问题,理论上会一直持续下去,跟随每个 FreeBSD 大版本迭代。

  • 由于种种原因,无法立即验证所写内容是否正确无误时,请编辑者打上“警告:以下内容为理论,未经实际测试,仅供参考,如果可以使用请提交 issue 以移除本标签。”标签以作区分。

  • 不应该对文学故事章节进行除错字排版以外的删减。

  • 请勿使用诸如 Gitee 等境内无法确保信息安全与数据稳定的平台(这类平台无法保证留存文件的长久可访问性,不适合存放适用于长期归档的内容,在未来会有极大风险无法获取该文件)。

  • 当进行错别字修改时,请务必确证其的确是错别字,可参考《现代汉语词典》第 7 版等资料进行佐证。

实用附录

如何使用 git 拉取本项目

技巧

理论上你完全可以通过 GitHub 在线完成所有提交。

本项目太大,使用 git 拉取时可能会导致缓冲区溢出,可改变 git 配置文件,以实现对缓冲区的扩大:

以下是一个可用的 ~/.gitconfig(Windows 上的位置为 C:\Users\你的用户名\.gitconfig) 的文件示例:

名词解释:

  • autocrlf:配置 Git 自动处理(转换)行结束符的默认行为。参见 配置 Git 处理行结束符 - Github Docs

  • signingkey:指设置带签名提交时默认使用的签名密钥。signingkey 既可指 GPG Key,亦可指 SSH Key。因为自 Git 2.34 起,Git 支持了 SSH 签名验证功能。参见 关于提交签名验证 - Github Docs

拉取命令:

故障排除

  • 致命错误:无法访问 'https://github.com/FreeBSD-Ask/FreeBSD-Ask/': Recv failure: 连接被对方重置

请尝试拉取这个项目 https://github.com/FreeBSD-Ask/LDWG。

如果报错类似,说明你的网络有问题。请使用代理。

项目简介

本项目是主项目(即 https://book.bsdcn.org)托管在 Gitbook;

https://docs.bsdcn.org 是社区自行构建的,docs 网站本身的贡献指南参见 FreeBSD 从入门到跑路 VitePress 镜像项目。

技巧

如果你仅想贡献内容本身,尚无改进网站 docs 的浏览体验与构建优化等等意向,则仅需阅读本文即可。

项目结构概览

如何新建章节

自行操作时参见操作实例 Commit 6023cc8 和下方 SUMMARY.md 结构说明。

如果有困难可发邮件联系 ykla 来操作。

SUMMARY.md 目录结构

可以看到,SUMMARY.md 在形式上就是普通的 markdown 文档,并无特殊支持。

但是也有一些注意事项:

  • 第一行 # Table of contents 是绝对不允许变动的,否则 Gitbook 将无法识别,造成失去同步。

  • 我们要求应该形如 * [2.2 使用 bsdinstall 开始安装](di-2-zhang-an-zhuang-freebsd/di-2.2-jie-start-install.md),不允许 * [2.2 使用 bsdinstall 开始安装](di-3-zhang-ni-hao/di-2.2-jie-start-install.md),即你的目录结构和放置的文件位置必须一致。(不一致并不会出错,但是本项目要求你一致)

  • 通过 sync-headers.yml,将自动同步 SUMMARY.md 中的章节标题到具体的 markdown 文件中。因此若你要修改 di-2.2-jie-start-install.md 的一级标题 # 2.2 使用 bsdinstall 开始安装,必须只能修改 SUMMARY.md 中的 2.2 使用 bsdinstall 开始安装,否则会被 sync-headers.yml 覆盖。当二者不同时,若正好在提交时未触发脚本即构建,那么 Gitbook 将以 SUMMARY.md 中的目录为准。

预览页面

当你提交 PR 时,会自动生成一个预览的网站。

实际上,所有提交都有对应版本的网站:

你可以通过该链接获取你当前 PR 的实际显示样式:

且每次 push 都会自动更新:

开放任务

所有任务的排序都是随机的并无优先级之分,你可以选你喜欢的去做。

开源社区

维护百度百科、维基百科相关条目

如增补修订各大 BSD 中文条目。

帮助修订 USTC 镜像脚本

  • https://github.com/ustclug/ustcmirror-images/blob/master/freebsd-pkg/sync.sh

  • https://github.com/ustclug/ustcmirror-images/blob/master/freebsd-ports/sync-ports.sh

FreeBSD ToDo

不再需要 的内容(请 不要 撰写下列条目):

Just for fun(没有也行无关紧要)

需要重写 的内容(请撰写这些内容):

参见 Projects。

NetBSD ToDo

参见 Projects。

DragonFlyBSD ToDo

参见 Projects。

统计分析 git 项目
freebsd-doc-2025 分析报告
Parallels Desktop 20 安装 FreeBSD 15.0

点击“手动选择”,然后继续。

Parallels Desktop 20 安装 FreeBSD 15.0

点击“选择文件……”。

Parallels Desktop 20 安装 FreeBSD 15.0

选中 FreeBSD 镜像。

警告

本文基于 Apple M1,故你选择的 FreeBSD 架构应该是 aarch64!

Parallels Desktop 20 安装 FreeBSD 15.0

会提示“无法检测操作系统”,不用管,点击“继续”即可。

Parallels Desktop 20 安装 FreeBSD 15.0

操作系统选择“其他”即可。

Parallels Desktop 20 安装 FreeBSD 15.0

技巧

Parallels Desktop 20 默认设置足矣,一般来说无需调整硬件配置,且是 UEFI。有需要的可以在这一步自行设置。

Parallels Desktop 20 安装 FreeBSD 15.0

开始安装 FreeBSD。

Parallels Desktop 20 安装 FreeBSD 15.0

开机进入 FreeBSD。

Parallels Desktop 20 安装 FreeBSD 15.0

在手动安装桌面后,桌面正常。

解决鼠标不能移动之问题

  • 解决 Parallels Desktop 中 FreeBSD 鼠标不能移动的问题,在 /boot/loader.conf 中加入:

参考文献

Issue(s) booting FreeBSD 12.2 aarch64 on Parallels Desktop on Apple Silicon

虚拟机工具

安装:

如果提示找不到包:

注意

若使用 Ports 编译安装,需要有一份当前系统的源码位于 usr/src。

未竟事项

疑问:这个虚拟机工具看起来长期未更新,也并未起到什么肉眼可见的实质性作用?所以到底是干什么用的?

参考文献

  • parallels-tools Parallels Desktop Tools for FreeBSD

acpi_ged: Handle events directly
Virtualizing FreeBSD 14 CURRENT on macOS M2 via Parallels 19
Parallels Desktop 20 安装 FreeBSD 15.0

解释

包名
作用说明

xorg

X Window 系统

fluxbox

窗口管理器

fluxbox-tenr-styles-pack

Tenner 提供的 Fluxbox 主题包

slim

轻量级图形登录管理器

wqy-fonts

文泉驿中文字体

xdg-user-dirs

管理用户目录,如“桌面”、“下载”等

startx

编辑 ~/.xinitrc,加入(用谁登录就用谁写入):

启动项

fstab

编辑 /etc/fstab,加入:

中文配置

编辑 /etc/login.conf:找到 default:\ 这一段,把 :lang=C.UTF-8 修改为 :lang=zh_CN.UTF-8。

刷新数据库:

桌面欣赏

FreeBSD 安装 fluxbox
FreeBSD 安装 fluxbox

故障排除与未竟事宜

  • light、xdm 均不可用,无法启动 fluxbox

待解决

  • 没有中文

待解决

License: CC BY 4.0
License: BSD 2 Clause

致谢

本书初版架构基于贴吧用户“Smile_Zheng”《操作系统笔记》分享的 早期版本。主要引用了防火墙章节、用户与权限。【其引用了《FreeBSD 技术内幕》(FreeBSD Unleashed),ISBN 9787111102010,机械工业出版社,2002,作者是 Brian Tiemann、Michael Urban,译者智慧东方工作室】以及 🎀🌸 星不萌 🌸🎀 的博客文章(已佚)。

致歉

由于历史问题和对许可证的非标准引用(主要是认识不足),存在未能按要求作者的要求注明来源及作者的情形。在此表示歉意。如果你有任何疑问,请联系 [email protected]。

作为项目目标的一部分,我们会尽快重写所有相关部分内容或对作者和项目进行规范化标注。

项目部署与维护

(QQ 昵称/微信名)对本社区及文档以及 QQ 群、微信公众号、微信群有重要的管理作用,创建并曾维护着本社区诸多关联账号。

本项目早期发起人为 。他自费创建了域名 freebsdcn.org(已不再使用)以及目前仍在使用的 主页。他鼓励 ykla 创建一个项目来维护相关的 FreeBSD 教程。

自费部署维护过本项目使用的服务器(目前已切换至免费的 GitBook 及 GitHub Pages),并撰写了部分文章。

曾撰写过 2 款用于导出本项目 PDF 的开源工具(目前仍在使用),并撰写了大量文章。

Ubuntu 吧前吧主 Simple 曾建议修改项目的章节文件名与许可协议,这提高了本项目的可维护性。

本项目的域名 bsdcn.org 由 FreeBSD 中文社区(CFC)及 ykla 赞助。

目前本项目的主要管理者为 ,他也撰写了部分文章。

目前本项目的主要技术维护者为 。

文档贡献者名单(A-Z)

  • April Simone🍥

开源项目

本项目部署过程中还使用了若干开源项目,我们对其作者表示感谢。

本项目主要托管在 。

本项目还受到了 的赞助。本项目的网站 book.bsdcn.org 受其驱动。

本项目的镜像网站 docs.bsdcn.org 由 驱动。

3.11 配置 rEFInd(双系统用)

在 BIOS 来回切换确实很麻烦,我们可以借助 rEFInd 实现类似 Clover 的效果,在开机时选择我们要进入的操作系统。

rEFInd 复刻自 rEFIt,源自对“refind”(改进、完美)和“EFI”(Extensible Firmware Interface,可扩展固件接口)两个词的组合,即修改 UEFI。

打开下载页面 Getting rEFInd from Sourceforge,点击 A binary zip file 即可自动转跳下载。写作本文使用到了 refind-bin-0.14.2.zip。

该文件中只有一部分是有用的启动文件。我们只需要其中的 refind 文件夹,其他的不需要。

在 refind 文件夹中只有一部分是有用的启动文件。所有带 aa64、ia32 字样的均可删除。

所有用到的文件如下图所示。

我们将 refind.conf-sample 复制一份,并重命名为 refind.conf。

技巧

一般来说无需手动配置。但事有例外,若无法识别现有的操作系统,请按以下方法操作:

打开 refind.conf,在任意空白行加入:

使用 将 refind 文件夹复制到 EFI 文件系统下的 efi 文件夹下。

添加启动项

使用 创建启动项。

点击“工具”——"设置 UEFI BIOS 启动项"。

点击“添加”。选中“refind_x64.efi”。

将其移动至顶部,设置为第一启动项。重启后测试效果。

两个选项都能进入。

附录:rEFInd 主题

rEFInd 有多款主题可选。

本例采用 Matrix-rEFInd(电影《黑客帝国》)进行说明。

项目地址:

将项目下载下来解压缩 Matrix-rEFInd-master.zip。将解压出的文件夹 Matrix-rEFInd-master 重命名为 Matrix-rEFInd。

再新建目录 themes,将 Matrix-rEFInd 放到 themes 里面。

将 themes 复制到 EFI 分区的 efi 文件夹下的 refind 文件夹中。

再编辑 refind.conf(无法直接编辑可先复制到桌面,编辑后再覆盖回去),在此文件的最后一行加入 include themes/Matrix-rEFInd/theme.conf。

重启:

技巧

如果你在虚拟机复现本实验,受制于虚拟机(VMware、VirtualBox)的 UEFI 屏幕分辨率,你可能只能看到一个操作系统,可通过按钮切换而非上图中的两个。物理机是正常的。

4.4 认识 shell

什么是 shell

我们的命令是运行在 shell 中的,通过 shell 与系统进行交互。

FreeBSD 默认的 shell 是 sh(Bourne shell,原作者名为 Stephen R. Bourne)。目前已经重写过了,现基本符合 POSIX.1-2024 中对 shell 的规范。

Linux 中常见的 shell 一般是 bash(Bourne Again SHell,即“又一个 Bourne shell”)。而 macOS 中的默认 shell 通常是 zsh(Z shell)。

注意

Linux 中也存在 sh,但是一般都是被软链接到了 bash 或其他 shell,她们都不是真正的 sh。

  • Ubuntu 24.04 LTS 的默认 shell:

快捷键

注意

以下快捷键不一定非要是小写状态才能执行,大写状态下一样可以执行。

在 TTY 界面上下翻页/翻行

使用 Scroll Lock 键在 TTY 界面上下翻页/翻行

使用 Scroll Lock 键(滚动键):按下 Scroll Lock 键后,你可以使用上 ↑/下 ↓ 方向键、Page Up/Page Down 键来对屏幕进行操作。

不同点:

  • 上 ↑/下 ↓ 方向键:使 TTY 界面上下滚动一行

  • Page Up/Page Down 键:使 TTY 界面上下滚动一页

再次按下 Scroll Lock 键将退出此模式。

技巧

SL 键在 HOME 键上方,PS 截图键 Print Screen 右侧,PB 键 Pause break 左侧。

事实上,在历史上 Scroll Lock 这个按键就是为此而设计的。

使用 Shift 组合键在 TTY 界面上下翻页/翻行

使用 Shift 快捷键:

  • Shift + 上 ↑/下 ↓ 方向键——使 TTY 界面上下滚动一行

  • Shift + Page Up/Page Down 键——使 TTY 界面上下滚动一页

补全命令或目录

一般可以用 Tab 键补全命令或目录。上箭头 ↑ 是查看上一条命令,下箭头 ↓ 是查看下一条命令。

  • 补全命令

  • 补全文件目录或文件名

终止命令

若想终止命令,可以用 ctrl+c:

命令后台前台

ctrl+z: 把当前进程放到后台,然后用 fg 命令可回到前台:

其他

  • ctrl+l(L 的小写):清空屏幕

  • ctrl+a:移动光标到命令行首

  • ctrl+e: 移动光标到命令行尾

4.6 文本编辑器

ee 编辑器基本用法

ee 是 FreeBSD 基本系统内置的编辑器。

ee 的用法比 nano(一款 GNU 编辑器)还要简单上许多,你从其名字“easy editor”(简单的编辑器)就能看出来。

比如

可以直接编辑,就和 nano 或 Windows 记事本一样。

按 ESC 键,会显示提示框,按两次 回车键 即可保存。

vi 编辑器基本用法

FreeBSD 还有一款内置的编辑器是 vi,用法较为复杂。有别于大多数类 UNIX 操作系统将 vi 链接到了 vim 的做法,BSD 系统内是真正的 vi(实际上是 nvi,即新 vi,4.4BSD 再实现)。

  • macOS 下的 vi

打开 BSD 的 vi 后默认处于“命令模式”,此时输入 i,可以进入到“文本模式”,这时候就可以顺利编辑文本了。需要注意的是,删除键(退格键) 不起作用,或者说和 Insert 键 表现的一样。要删除文本的话,需要按 Delete 键。

技巧

空行会显示为 ~。

编辑完成后,按 ESC 键 即可从从文本模式退回到命令模式。

在命令模式下,输入 :,即可输入命令,例如::q 是退出不保存、:wq 是保存并退出、:wq! 是强制保存、:q! 是强制退出。

microsoft-edit

microsoft-edit 是微软开源的文本编辑器,原生支持中文、交互界面简单、可使用鼠标操作。

  • 使用 pkg 安装:

  • 还可以使用 Ports 安装:

使用方式:

操作非常简单,不再赘述。

5.6 使用 DVD 安装软件

挂载 DVD 到 /dist 目录

  • 直接挂载本地 ISO:

  • 直接使用 DVD 设备(如通过虚拟机直接挂载的 ISO 镜像):

观察 ISO 挂载情况:

可以看到有个 cd0,大小也符合。

故障排除与未竟事宜

/dist 目录若改为其他则使用环境变量方法无效,因为 packages/repos/FreeBSD_install_cdrom.conf 写死了路径无法修改。

使用 bsdconfig 安装 DVD 软件(目前无效)

先按上面的方法挂载好。

3 Packages——> 1 CD/DVD Install from a FreeBSD CD/DVD

有 bug,会报错 No pkg(8) database found!。

思考题

请读者自行阅读源代码,分析如何解决,使之生效。

使用环境变量直接安装 DVD 软件

测试安装:

要列出 DVD 中的可用软件:

换源为 DVD

创建 DVD 源

测试安装

参考资料

7.3 i3wm

安装 i3wm

  • 使用 pkg 安装:

  • 或者使用 Ports:

  • 解释:

包名
作用说明

配置 startx

用哪个用户登录 GUI 就使用哪个用户进行编辑。

启动 i3

可以用 startx 启动 i3 了。

下图为纯 i3,无插件!

虚拟机扩展

如果使用 VirtualBox,下面可启用 VirtualBox 扩展:

参考文献

6.15 启用 root 桌面登录

警告

鉴于部分用户希望 root 登录桌面,为贯彻自由精神撰写本章节。请注意 root 账户拥有最高权限,失误使用 root 账户很可能会 破坏系统,因此用其登录图形界面存在 极高的安全风险。以下内容请谨慎操作,风险自负。我们不承担任何责任。

GDM

GDM,即 GNOME Display Manager,GNOME 显示管理器。

打开 /usr/local/etc/pam.d/gdm-password,注释掉 account requisite pam_securetty.so 这一行(即往最前面加 #)

重启服务

LightDM

LightDM,即 Light Display Manager,轻量级显示管理器。

编辑 /usr/local/etc/pam.d/lightdm:

注释掉 account requisite pam_securetty.so 这一行(即往最前面加 #)

然后重启服务:

即可。

SDDM

SDDM 即 Simple Desktop Display Manager,简单的桌面显示管理器。

更改 /usr/local/etc/pam.d/sddm 文件:把 include 之后的 login,替换成 system。一共有 4 处需要替换。

重启服务

之后就可以 root 登录 sddm 了!

警告

root 账户拥有最高权限,失误使用 root 账户可能 破坏系统,因此用其登录图形界面存在 极高的安全风险。

6.12 LXDE

安装

  • 使用 pkg 安装:

  • 或者使用 Ports 安装:

  • 解释:

包名
作用说明

startx

编辑 ~/.xinitrc,加入:

启动项

fstab

编辑 /etc/fstab,加入:

中文配置

在 /etc/rc.conf 下加入:


编辑 /etc/login.conf:找到 default:\ 这一段,把 :lang=C.UTF-8 修改为 :lang=zh_CN.UTF-8。

刷新数据库:

桌面欣赏

参考文献

9.2 蓝牙

由 iwm 驱动的网卡可以安装 comms/iwmbt-firmware 这个包来驱动蓝牙:

  • 使用 pkg 安装:

# pkg install iwmbt-firmware
  • 使用 Ports 安装:


蓝牙走 USB 总线,使用 usbconfig 可查看所有设备,包括蓝牙,如 ugen1.5 是蓝牙,则: iwmbtfw -d ugen1.5。

无线蓝牙鼠标的设置

本文基于 FreeBSD 13.0,罗技 m337。

使用 bluetooth-config 工具添加蓝牙设备即可。

蓝牙鼠标调到配对模式,运行 # bluetooth-config scan,按提示信息进行添加:

故障排除与未竟事宜

  • logitech m337 配对连接后会自动断开。

解决方案:删除 /var/db/bthidd.hids 文件中对应鼠标的 bd_addr 行 xx:xx:xx:xx:xx。重启 bthidd 服务 # service bthidd restart。

8.3 IBus 输入法框架

IBus 即“Intelligent Input Bus”(智能输入总线)。

IBus

  • 使用 pkg 安装:

  • 或者使用 Ports 安装:

其中 zh-ibus-pinyin 为拼音输入法

可选的还有

  • chinese/ibus-cangjie 仓颉输入法

  • chinese/ibus-chewing 酷音输入法

  • chinese/ibus-rime rime 输入法引擎(另述)

配置环境变量

  1. sddm lightdm gdm 都可以在 ~/.xprofile 中写入 A 组配置

  2. lightdm gdm 可以在 ~/.profile 中写入 A 组配置

  3. sddm 可以在用户登录 shell 配置文件中写入配置


  • sh: ~/.profile 写入 A 组配置

  • bash: ~/.bash_profile 或 ~/.profile 写入 A 组配置

  • zsh: ~/.zprofile 写入 A 组配置

注销后登录,直接点击 ibus 图标加入自己的输入法后,即可使用,无需包括中文化设置(测试环境 sddm/xfce/freebsd 13.2/sh)在内的任何配置。但 IBus 提示应当在相应的 shell 文件中加入以下内容:

  • A 组(在 sh、bash、zsh 中):

  • B 组(在 csh 中):

IBus 设置


IBus 对编码(须 UTF-8)有要求,但对区域(如 C.UTF-8 还是 zh_CN.UTF-8)并无要求。

6.2 NVIDIA 显卡驱动

警告

对于没有持 显卡直通 的笔记本,必须安装英特尔核显驱动(相关 drm)!

加入 Video 组

安装显卡驱动

使用 pkg 安装:

或者使用 Ports 安装;

配置 NVIDIA 显卡

  • 启动内核模块

警告

不要试图加载 nvidia-drm.ko。没有用且会卡死。

  • 生成 X11 配置文件。注意,若正常显示无需这步及下步!

警告

不要试图安装和使用 Port x11/nvidia-xconfig。没有用且会卡死。

安装解码器

  • 使用 pkg 安装:

  • 或者使用 Ports 安装:

然后重新启动就可正常使用 NVIDIA 驱动了。

查看驱动状态

重启后,应该可以驱动显卡了。

  • 要查看驱动信息(每秒刷新一次):

  • 查看 KDE 系统参数:

  • 用 MPV 打开一部电影,可以看到显存使用量明显上升(我是从 3M 上升到了数百兆),也可以用 SMPlayer 观看。

9.4 触摸板与键鼠

在默认情况下 FreeBSD 支持 i2c 和 USB 触摸板。

触摸板

关闭触摸板

查找触摸板:

可以看到 6 是触摸板,关闭:(最后 1 为开启;0 关闭)

参考文献

Apple Magic Trackpad

Apple Magic Trackpad 触摸板系列,因压感带来的舒适操作体验而闻名。FreeBSD 支持苹果妙控板,但需要加载 bcm5974 内核模块。

可以在 rc.conf 中永久化这一配置:

该触摸板需要配合 libinput 使用,在加载内核模块之后,通常 Wayland 桌面环境可以开箱即用。目前暂不支持蓝牙功能。

附录:解决 15.0 及更高版本键鼠无法驱动

如果你的 USB 键鼠或触摸板在 15.0 以下的旧版本中均正常,更新到 15.0 后发生故障,可以参考下文:

在 /boot/loader.conf 或 /boot/loader.conf.local 中加入如下一行:

随后重启即可。

问题分析:ums 在机器无关的内核里始终存在,usbhid 现在位于 amd64 机器相关内核选项里。15.0 后 usbhid 驱动成为默认,优先级高于传统的 ums 驱动。但都是编译进内核的不是模块。usbhid 引入内核自 ,替代 ums 发生在 。最早出现在 13.0,从 15.0 成为默认。此问题仍需读者进一步研究原因并提出 Bug 到 FreeBSD 项目,因为项目计划日后彻底移除 ums 支持。 具体参见 FreeBSD 期刊 2021/0708 号。

附录:Fn 键设置

4.3 虚拟控制台和终端

登录到 FreeBSD

当你安装 FreeBSD 后,若一切正常,你应该会在屏幕上看到以下内容:

我们将这个屏幕上呈现的界面称为 TTY(teletypewriter,电传打字机)或物理终端。

解释:

  • FreeBSD 是操作系统名称;

4.10 文件系统基础

文件系统

首先我们欣赏以下两张照片:

前一张图是竹子,第二张图是若干棵行道树。

亚里士多德认为种子之所以能长成大树,是因为种子暗含着一种潜能,并且在环境满足的情况下,有实现为长成一棵树的可能性(参见《形而上学》1049b)。而人的不同就在于人没有固定不变的潜能,这也契合了儒家学说“君子不器”(《论语·为政》)。理解 UNIX 目录与 Windows 目录的异同,对于深入理解操作系统的设计与实现是很重要的。

我们都听说过一个故事,竹子(Bambusoideae)开花意味着大片竹林的死亡。这是因为,大部分看似茂密繁盛的竹林,极有可能到头来只有一棵竹子真实存活。这些竹子都是从相同的地下根系生长出来的,虽然看起来是多个竹子,它们其实是一个整体。这也是雨后春笋的来历。无论他们相隔多远,仍旧一荣俱荣,一损俱损。这就是 UNIX 的目录——系统中的所有目录都依赖于根(root)。根(

10.1 HTTP 代理

V2ray 或 clash 开启允许局域网连接。然后可配置如下文。

  • 查看使用的 shell

HTTP_PROXY 代理

10.2 V2ray

安装 v2ray

  • 使用 pkg 安装:

  • 或者使用 Ports 安装:


PS C:\Users\ykla> git clone https://github.com/freebsd/freebsd-doc
Cloning into 'freebsd-doc'...
remote: Enumerating objects: 617155, done.
remote: Counting objects: 100% (294/294), done.
remote: Compressing objects: 100% (120/120), done.
remote: Total 617155 (delta 217), reused 219 (delta 174), pack-reused 616861 (from 4)
Receiving objects: 100% (617155/617155), 483.71 MiB | 786.00 KiB/s, done.
Resolving deltas: 100% (358420/358420), done.
error: invalid path 'website/static/security/advisories/FreeBSD-EN-04:01.twe.asc' # 观察 FreeBSD-EN-04:01.twe.asc,该文件名在 Windows 下是非法的
fatal: unable to checkout working tree
warning: Clone succeeded, but checkout failed.
You can inspect what was checked out with 'git status'
and retry with 'git restore --source=HEAD :/'
[filter "lfs"]
	required = true
	clean = git-lfs clean -- %f
	smudge = git-lfs smudge -- %f
	process = git-lfs filter-process
[user]
	name = # 你的用户名
	email = # 你的邮箱
	signingkey = # 你的密钥 ID,使用密钥签名时需要
[commit]
	gpgsign = true # 使用密钥签名时需要
[core]
	autocrlf = true # 自动调整末尾回车与换行
[http]
	proxy = http://localhost:7890 # 设置使用 http 代理
	postBuffer = 1048576000 # 扩大缓冲区,约 1 GB
	maxRequestBuffer = 1048576000 # 扩大缓冲区,约 1 GB
$ git clone https://github.com/FreeBSD-Ask/FreeBSD-Ask
>FreeBSD-Ask-main
│  .gitattributes  # 用于让 github 正确识别 markdown,用于在 github 正确高亮,正确显示编程语言(Languages)的统计信息
│  .gitignore # 一些规则,用于阻止 git 上传特定类型的文件或目录,如 node_modules
│  CHANGELOG-ARCHIVE.md # 普通文件,记录既往所有重要变动
│  CHANGELOG.md # 普通文件,记录当前季度的重要变动。当你有新的子章节提交或彻底重写时,请将其记录到此处
│  CODE_OF_CONDUCT.md # 用于合规,行为准则
│  CONTRIBUTING.md # 本贡献指南
│  LICENSE # 许可证
│  mu-lu.md # 由 Github Action mulu.yml 自动同步
│  README.md # 主页
│  SECURITY.md # 用于合规,安全报告策略
│  SUMMARY.md # 目录文件,同时用于生成 vitepress 左侧边栏
│
├─.gitbook # 图片目录
│  └─assets # 图片
│          1-install.png
│          1.png
│          1011.png
│          其他图片从略
│
├─.github  # Github Action 相关
│  │  .autocorrectrc # 由 AutoCorrect.yml 调用
│  │  .markdownlint.json # 由 markdown-lint2.yml 调用
│  │  auto_assign.yml # 由 Auto-Assign.yml 调用
│  │  dependabot.yml # 检查 GitHub Action 调用的 Action 有无更新,并提交 PR
│  │  lychee.toml # 由 links.yml 调用
│  │
│  ├─ISSUE_TEMPLATE  # Github issue、PR 模板
│  │      bug_report.md  # Github issue 模板
│  │      feature_request.md  # Github PR 模板
│  │
│  ├─scripts # Github Action 相关,由相关 yml 脚本调用
│  │      check_images.py # 由 check-images.yml 调用
│  │      update_ga4_readme.py # 由 update-ga4.yml 调用
│  │      update_progress.sh # 由 Update-commit-progress.yml 调用
│  │
│  └─workflows # Github Action,用于自动化处理一些简单任务
│          Auto-Assign.yml # 自动为 issue PR 分配人员进行处理
│          AutoCorrect.yml # markdown 格式修正,会自动提交 PR
│          check-images.yml # 检查图片的调用情况,有无正确引用图片,不正确会生成 issue
│          create-pdf.yml # 用于在 GitHub release 生成电子书 PDF、EPUB 
│          file-name-check.yml # 检查 SUMMARY.md 目录中的文件引用是否正确,不正确会生成 issue
│          links.yml # 链接检查,检查文中调用的 URL 是否能正常访问
│          markdown-lint2.yml # markdown 格式检查
│          md-padding.yml # markdown 空格检查与修复
│          mulu.yml # 从 SUMMARY.md 生成的镜像文件
│          sync-headers.yml # 从 SUMMARY.md 更新所有 markdown 文件的一级标题。如果你要修改 `#` 标题,必须在此处进行修改,否则会被其覆盖
│          Update-commit-progress.yml # 进度检查工具,每 3533 次提交为一个版本,用于插入到 README.md
│          update-ga4.yml # 谷歌统计数据,用于插入到 README.md
│
├─.vitepress # vitepress 相关,详见 FreeBSD-Ask/FreeBSD-Ask.github.io
│  │  config.mts
│  │
│  └─theme # vitepress 相关,详见 FreeBSD-Ask/FreeBSD-Ask.github.io
│          custom.css
│          index.js
│          Layout.vue
│
├─di-1-zhang-zou-jin-freebsd # 第 1 章的章节目录
│      di-1.1-unix.md # 第 1 章的文件
│      di-1.2-dao-lun.md
│      di-1.3-jie-freebsd-jian-shi.md
│      di-1.4-Fiat-Lux.md
│
├─di-10-zhang-vpn-yu-dai-li # 第 10 章的章节目录
│      di-10.1-jie-http-dai-li.md # 第 10 章的文件
│      di-10.2-jie-v2ray.md
│      di-10.3-jie-clash.md
│      di-10.4-jie-openvpn.md
│
└─其他目录和文件从略
│
├─public # vitepress 相关,参见 FreeBSD-Ask/FreeBSD-Ask.github.io
│      favicon.ico
│      logo.svg
│
└─其他目录和文件从略
# Table of contents

* [FreeBSD 从入门到跑路](README.md)
* [编辑日志](CHANGELOG.md)
* [贡献指南与开放任务](CONTRIBUTING.md)
* [目录](mu-lu.md)

## 前言

* [前言](qian-yan/qian-yan.md)
* [致读者](qian-yan/zhi-du-zhe.md)
* [致谢](qian-yan/zhi-xie.md)
* [绪论](qian-yan/xu-lun.md)

## 第 1 章 FreeBSD 初见

* [1.1 操作系统的历程:UNIX、BSD 和 Linux](di-1-zhang-zou-jin-freebsd/di-1.1-unix.md)
* [1.2 FreeBSD 导论](di-1-zhang-zou-jin-freebsd/di-1.2-dao-lun.md)
* [1.3 George Berkeley(乔治·贝克莱)与 BSD 命名的文化背景](di-1-zhang-zou-jin-freebsd/di-1.3-jie-freebsd-jian-shi.md)
* [1.4 加州大学伯克利分校和“Fiat Lux”(要有光)](di-1-zhang-zou-jin-freebsd/di-1.4-Fiat-Lux.md)

## 第 2 章 安装 FreeBSD

* [2.1 安装前的准备工作](di-2-zhang-an-zhuang-freebsd/di-2.1-install-pre.md)
* [2.2 使用 bsdinstall 开始安装](di-2-zhang-an-zhuang-freebsd/di-2.2-jie-start-install.md)
* [2.3 键盘布局和主机名](di-2-zhang-an-zhuang-freebsd/di-2.3-jie-use-bsdinstall.md)
* [2.4 选择安装组件](di-2-zhang-an-zhuang-freebsd/di-2.4-jie-select.md)
* [2.5 分配磁盘空间](di-2-zhang-an-zhuang-freebsd/di-2.5-jie-fen-pei-disk.md)
* [2.6 设置 root 密码](di-2-zhang-an-zhuang-freebsd/di-2.6-root-jie.md)
* [2.7 网络设置](di-2-zhang-an-zhuang-freebsd/di-2.7-jie-net.md)
* [2.8 时区、服务、安全、固件和账户](di-2-zhang-an-zhuang-freebsd/di-2.8-jie-more.md)
* [2.9 完成安装](di-2-zhang-an-zhuang-freebsd/di-2.9-end-jie.md)
* [2.10 故障排除](di-2-zhang-an-zhuang-freebsd/di-2.10-jie-eol.md)
* [2.11 将 U 盘启动盘恢复为普通 U 盘(基于 Windows)](di-2-zhang-an-zhuang-freebsd/di-2.11-jie-usb.md)

其他从略
ums_load="YES"
# pkg install parallels-tools
# cd /usr/ports/emulators/parallels-tools/ 
# make install clean
# pkg install xorg fluxbox fluxbox-tenr-styles-pack slim wqy-fonts xdg-user-dirs
# cd /usr/ports/x11-wm/fluxbox/ && make install clean # fluxbox
# cd /usr/ports/x11-themes/fluxbox-tenr-styles-pack/ && make install clean 
# cd /usr/ports/x11/xorg/ && make install clean 
# cd /usr/ports/x11/slim/ && make install clean 
# cd /usr/ports/x11-fonts/wqy/ && make install clean 
# cd /usr/ports/devel/xdg-user-dirs/ && make install clean 
exec startfluxbox
# service dbus enable
# sysrc slim_enable="YES"
proc           /proc       procfs  rw  0   0
# cap_mkdb /etc/login.conf
# ee a.txt
# mdconfig /home/ykla/FreeBSD-14.2-RELEASE-amd64-dvd1.iso # 请换成你自己的路径,可以用 pwd 命令查看当前路径
md0
# mkdir -p /dist
# mount -t cd9660 /dev/md0 /dist # 不能直接挂载 ISO,会报错 block device required
# pkg install xorg i3 i3status dmenu i3lock
# cd /usr/ports/x11/xorg/
# make install clean
# pkg install lxde-meta xorg lightdm lightdm-gtk-greeter wqy-fonts xdg-user-dirs
# cd /usr/ports/x11/lxde-meta/ && make install clean 
# cd /usr/ports/x11/xorg/ && make install clean 
# cd /usr/ports/x11/lightdm/ && make install clean 
# cd /usr/ports/x11/lightdm-gtk-greeter/ && make install clean 
# cd /usr/ports/x11-fonts/wqy/ && make install clean 
# cd /usr/ports/devel/xdg-user-dirs/ && make install clean 
# cd /usr/ports/comms/iwmbt-firmware/ 
# make install clean
# pkg install ibus zh-ibus-pinyin
# pw groupmod video -m 你的用户名
ykla@ykla-mi:~ $ xinput list
⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
⎜   ↳ Windows pointer                         	id=6	[slave  pointer  (2)]
⎣ Virtual core keyboard                   	id=3	[master keyboard (2)]
    ↳ Virtual core XTEST keyboard             	id=5	[slave  keyboard (3)]
    ↳ Windows keyboard                        	id=7	[slave  keyboard (3)]
bduath
  • blu10ph

  • bsdwiki

  • dacheng119

  • Dedicatus5457

  • DogeW

  • dongdigua

  • fanyang1997

  • fjh1997

  • freyr

  • gua-leopard

  • heguru5

  • isNijikawa

  • Jack

  • Jiacong Fang(zldrobit)

  • kuntop

  • 李大鹏

  • liguangsheng

  • livrth

  • 凌莞

  • 柳离枝

  • 刘昕宇

  • matatabi-wang

  • 墨子

  • mxdyeah / mxdabc

  • nerdroychan

  • number201724

  • orzyyyy

  • peiyafei

  • pengxingwei

  • puffinjiang

  • 清和 qinghecyn

  • 清热解毒口服液

  • Rintim

  • ruur

  • Sayunosyjou

  • 施主

  • Suyun114

  • tergel93

  • tomblackwhite

  • 艳阳天

  • Wang Yan Hao

  • wyathou

  • X-Ray

  • 心即理物即心

  • 仰望天空

  • Zomby7e

  • 地铁卡

  • 兜率

  • 极品盗号

  • 魔王酱

  • 🎀🌸 星不萌 🌸🎀(贴吧账户)

  • 雨天

  • 玟茵开源社区

  • 超平和 Busters
    clean-master 清理大师
    https://bsdcn.org
    Roberta Wheeler
    safreya
    Voosk
    ykla
    5gura
    Alex6357
    VZstless
    GitHub
    GitBook 开源计划
    VitePress
    diskgenius
    diskgenius
    Matrix-rEFInd
    Product Details
    HOWTO: Install binary package without internet acces
    i3 - an improved dynamic, tiling window manager

    xorg

    X Window

    i3

    轻量级平铺式窗口管理器

    i3status

    状态栏

    dmenu

    动态菜单生成器

    i3lock

    锁屏工具

    i3 使用手册
    Installing i3wm on FreeBSD
    How to setup FreeBSD with a riced desktop - part 3 - i3
    How to install i3?
    i3 on freebsd
    # service gdm restart

    xorg

    X Window 系统

    lxde-meta

    LXDE 桌面环境的元包

    lightdm

    轻量级显示管理器 LightDM

    lightdm-gtk-greeter

    LightDM 的 GTK+ 登录界面插件,缺少将无法登录 LightDM

    wqy-fonts

    文泉驿中文字体

    xdg-user-dirs

    管理用户目录,如“桌面”、“下载”等

    Install & Configure a Desktop Environment: LXDE
    FreeBSD 安装 LXDE
    FreeBSD 安装 LXDE
    FreeBSD 安装 LXDE
    # service hcsecd enable
    # service bthidd enable
    # service hcsecd start
    # service bthidd start
    chinese/ibus-table-chinese 包含五笔、仓颉等多种输入法

    csh: ~/.cshrc 写入 B 组配置

    ibus
    FreeBSD タッチパッドを off にする
    conf: Add hkbd and hms to GENERIC* kernel configs
    Enable usbhid by default
    Adjusting acpi_video brightness increments on FreeBSD

    amd64 是体系架构,一般英特尔和 AMD 处理器都是 amd64,即 x86-64;

  • ykla 是主机名,是在安装系统时你自己设置的;

  • ttyv0 是指首个 TTY,你会发现计算机中大部分事物的序列都是以 0 打头的;

  • login: 指示用户登录。

  • 我们输入用户名和密码,以登录到系统:

    祝贺你!你已经成功地登录到了 FreeBSD 操作系统。

    注意

    密码并不会被回显打印到屏幕上:一般我们输入密码时,屏幕上会显示 ******。但是在 FreeBSD 中,凡是涉及密码的地方大都不会有任何显示,即使输入了密码屏幕上也是空白的,和没有任何输入是一个状态,就是什么也没有,输入后回车即可。

    • ①:root 是 UNIX 中的最高权限。我们常说的安卓 root,苹果越狱,Kindle 越狱等等都是为了获取这个 root 权限权限。

    参考文献

    • What is TTY in Linux?,翻译在 Linux 黑话解释:TTY 是什么?。

    故障排除与未竟事宜

    • 若用户名正确,但密码不正确:

    • 若用户名和密码都不正确:

    如果你连用户名都不知道,建议你找回 root 密码后看看系统中有哪些用户账户或者重装系统比较快。

  • 也可使用 pkg 安装 xray-core:

    • 或者使用 Ports 安装:

    这两个代理配置基本相同,配置文档可以在各自的官方文档找到,xray 完全可以参考 v2ray 的配置方法。

    启动软件

    如果事先有代理客户端可以把客户端节点的配置导出来,复制到 FreeBSD,假设导出的文件名为 config.json,然后执行:


    • 如果用 xray-core,可执行:

    这个时候软件应该启动成功了。

    配置软件代理

    这个时候可打开 config.json, 找到对应的 inbounds 属性,inbounds 是一个数组,里面每个元素代表了入站接口配置,有地址和端口号,代理方式。在需要代理的软件内部设置成这里对应的地址和端口号。

    比如其中一个入站接口 protocol 是 http,listen 是 127.0.0.1、port 是 10809,假如这里需要火狐浏览器走代理,可以在浏览器设置里找到,网络 - 代理服务器,设置 http 代理地址就设置为 127.0.0.1,端口为 10809。同理 socks 代理也可以参考此方法设置。

    大部分软件代理设置方式不同。比较混乱,对于桌面软件需要自行设置对应的代理服务器。终端命令,如果需要走代理就比较简单了。大部分终端命令,都会寻找 HTTP_PROXY、HTTPS_PROXY、ALL_PROXY 这三个环境变量,根据这三个环境变量的值设置对应代理。

    下面的命令适用于 sh、bash、zsh:

    设置完成后,在火狐浏览器中浏览网页,观察 v2ray 输出的日志,就可以看到浏览器流量走了代理。终端命令也走了代理,但是一些命令根据环境变量设置代理,请自行查找对应软件的设置方法。

    代理分流

    有些网址是不需要走代理服务器的,比如境内的网站,本地网站之类的。这个需要对流量做一个分流,一部分流量需要代理,一部分流量需要走直连等方式。

    打开 config.json,找到对应的 routing 属性,下面有个 rules 子属性,这里面就用来配置 v2ray 的流量分流方式。rules 里面可以配置不同的规则,每个规则有个 ip 属性,或者 domain 属性。代理的流量,是有网址,和 ip 的,如果 ip 或者网址匹配了其中一个规则,v2ray 会根据 outboundTag 属性,把流量转发到对应的 outbounds 位置,比如 outbonds 中,有 tag 为 proxy(代理), direct(直连), block。所以就可以把想要分流的网址 ip 写到对应的规则里就行了。这里可参考对应的 v2ray 文档。实际上在 v2ray 客户端上导出配置文件时,也默认导出了对应的分流规则。

    v2ray 也事先给了 geosite.dat、geoip.dat 两个资源文件,geosite.dat 里面分类保存而来各个网址,geoip.dat 分类保存了各个 ip。资源文件路径,可以通过设置环境变量 V2RAY_LOCATION_ASSET,v2ray 可以自动查找路径下的 geosite.dat 和 geosite.ip 文件。对于 xray 是使用 XRAY_LOCATION_ASSET 这个环境变量设置资源路径。

    比如直连规则下面配置可设置 geosite 中 cn 网址直连:

    v2ray 社区给的 cn 网址直连网址不太全,分类也比较少,可自行在 github 上找社区整理的 geosite、geoip 文件,里面也详细的说明了白名单配置模式,黑名单配置模式。

    menuentry "FreeBSD" { 
      icon \EFI\refind\icons\os_freebsd.png 
      volume "FreeBSD"
      loader \EFI\freebsd\loader.efi 
    }
    
    menuentry "Windows 10" { 
      icon \EFI\refind\icons\os_win.png
      volume "Windows 10"  
      loader \EFI\Microsoft\Boot\bootmgfw.efi 
    }
    $ ls -l /bin/sh
    lrwxrwxrwx 1 root root 4  2 月 25 23:19 /bin/sh -> dash
    root@ykla:~ # lo # 若此时按 TAB 键,输出如下。可以再输一个字母再按一次 TAB 键看看
    local                    localedef                login
    local-unbound            locate                   logins
    local-unbound-anchor     lock                     logname
    local-unbound-checkconf  lockf                    look
    local-unbound-control    lockstat                 lorder
    local-unbound-setup      locktest                 lowntfs-3g
    locale
    $ cp /home/ykla/ # 此处按 TAB 键,然后再重复按一次 TAB 键,看看效果
    $ cp /home/ykla/test/1.txt
    .cache/                 .login                  bin/                    test2
    .config/                .profile                HW_PROBE/               test3
    .cshrc                  .sh_history             mine
    .gitconfig              .sh_history.Y8RqIDNDIv  mydir/
    .k5login                .shrc
    root@ykla:~ # ping 163.com
    PING 163.com (59.111.160.244): 56 data bytes
    64 bytes from 59.111.160.244: icmp_seq=0 ttl=52 time=27.672 ms
    64 bytes from 59.111.160.244: icmp_seq=1 ttl=52 time=27.580 ms
    ^C # 注意这里,^C 即代表你在此处按下了 ctrl + c 的组合键,随后命令被终止
    --- 163.com ping statistics ---
    2 packets transmitted, 2 packets received, 0.0% packet loss
    round-trip min/avg/max/stddev = 27.580/27.626/27.672/0.046 ms
    root@ykla:~ # ping 163.com
    PING 163.com (59.111.160.244): 56 data bytes
    64 bytes from 59.111.160.244: icmp_seq=0 ttl=52 time=27.611 ms
    64 bytes from 59.111.160.244: icmp_seq=1 ttl=52 time=27.691 ms
    ^Z[1] + Suspended               ping 163.com # 注意此处,按下了 ctrl + z
    root@ykla:~ # fg # 返回前台
    ping 163.com
    64 bytes from 59.111.160.244: icmp_seq=3 ttl=52 time=27.465 ms
    64 bytes from 59.111.160.244: icmp_seq=4 ttl=52 time=27.586 ms
    64 bytes from 59.111.160.244: icmp_seq=5 ttl=52 time=27.522 ms
    ^C # 按 crtl + c 结束命令
    --- 163.com ping statistics ---
    6 packets transmitted, 6 packets received, 0.0% packet loss
    round-trip min/avg/max/stddev = 27.465/27.596/27.701/0.085 ms
    $ ls -al /usr/bin/vi   
    lrwxr-xr-x  1 root  wheel  3  4 12 13:16 /usr/bin/vi -> vim
    bc123
    ~      
    ~
    ~
    ABC
    ~
    ~
    :wq
    # pkg ins microsoft-edit
    # cd /usr/ports/editors/microsoft-edit/ 
    # make install clean
    $ msedit abc.txt
    # gpart show
    
    ……省略无用磁盘……
    
    =>      9  2356635  cd0  MBR  (4.5G)
            9  2356635       - free -  (4.5G)
    # mkdir -p /dist # 创建挂载点
    # mount -t cd9660 /dev/cd0 /dist # 挂载 ISO
    # ls /dist/ # 查看挂载情况
    .cshrc		bin		lib		net		root		var
    .profile	boot		libexec		packages	sbin
    .rr_moved	dev		media		proc		tmp
    COPYRIGHT	etc		mnt		rescue		usr
    # bsdconfig
    # env REPOS_DIR=/dist/packages/repos pkg install xorg
    Updating FreeBSD_install_cdrom repository catalogue...
    FreeBSD_install_cdrom repository is up to date.
    All repositories are up to date.
    Checking integrity... done (0 conflicting)
    The following 1 package(s) will be affected (of 0 checked):
    
    New packages to be INSTALLED:
    	xorg: 7.7_3
    
    Number of packages to be installed: 1
    
    Proceed with this action? [y/N]:
    # env REPOS_DIR=/dist/packages/repos pkg rquery "%n"
    # cp /dist/packages/repos/FreeBSD_install_cdrom.conf /etc/pkg/
    # pkg install xorg
    Updating FreeBSD_install_cdrom repository catalogue...
    FreeBSD_install_cdrom repository is up to date.
    All repositories are up to date.
    Checking integrity... done (0 conflicting)
    The following 1 package(s) will be affected (of 0 checked):
    
    New packages to be INSTALLED:
    	xorg: 7.7_3
    
    Number of packages to be installed: 1
    
    Proceed with this action? [y/N]:
    $ echo "/usr/local/bin/i3" > ~/.xinitrc
    & echo "exec VBoxClient-all" >> ~/.config/i3/config
    # service lightdm restart
    # service sddm restart
    exec startlxde
    # service dbus enable
    # service lightdm enable
    proc           /proc       procfs  rw  0   0
    lightdm_env="LC_MESSAGES=zh_CN.UTF-8" 
    # cap_mkdb /etc/login.conf
    #  bluetooth-config scan
    Scanning for new Bluetooth devices (Attempt 1 of 5) ... done.
    Found 1 new bluetooth device (now scanning for names):
    [ 1] 34:88:5d:12:34:56  "Bluetooth Mouse M336/M337/M535" (Logitech-M337)
    Select device to pair with [1, or 0 to rescan]: 1
    
    This device provides human interface device services.
    Set it up? [yes]:
    # cd /usr/ports/textproc/ibus/ && make install clean
    # cd /usr/ports/chinese/ibus-libpinyin/ && make install clean
    export XIM=ibus
    export GTK_IM_MODULE=ibus
    export QT_IM_MODULE=ibus
    export XMODIFIERS=@im=ibus
    export XIM_PROGRAM="ibus-daemon"
    export XIM_ARGS="--daemonize --xim"
    setenv XIM ibus
    setenv GTK_IM_MODULE ibus
    setenv QT_IM_MODULE ibus
    setenv XMODIFIERS @im=ibus
    setenv XIM_PROGRAM ibus-daemon
    setenv XIM_ARGS "--daemonize --xim"
    $ ibus-setup
    # pkg install nvidia-drm-kmod nvidia-settings
    # cd /usr/ports/graphics/nvidia-drm-kmod/ && make install clean
    # cd /usr/ports/x11/nvidia-settings/ && make install clean
    # echo 'hw.nvidiadrm.modeset="1"' >> /boot/loader.conf
    # sysrc -f /etc/rc.conf kld_list+=nvidia-modeset
    # Xorg -configure 
    # cp /root/xorg.conf.new /etc/X11/xorg.conf
    pkg install libva-vdpau-driver libvdpau libvdpau-va-gl
    # cd /usr/ports/multimedia/libva-vdpau-driver/ && make install clean
    # cd /usr/ports/multimedia/libvdpau/ && make install clean
    # cd /usr/ports/multimedia/libvdpau-va-gl/ && make install clean
    $ nvidia-smi -L -1 
    ykla@ykla-mi:~ $ xinput set-prop 6 "Device Enabled" 0
    kldload bcm5974
    sysrc kld_list+="bcm5974"
    hw.usb.usbhid.enable="0"
    FreeBSD/amd64 (ykla) (ttyv0)
    
    login:
    FreeBSD/amd64 (ykla) (ttyv0)
    
    login: root # 此处输入用户名,然后按回车键 ①
    Password: 	# 此处输入密码,然后按回车键
    Last login: Tue Mar 18 17:24:48 2025 from 3413e8b6b43f
    FreeBSD 15.0-CURRENT (GENERIC) main-n275981-b0375f78e32a
    
    Welcome to FreeBSD!
    
    Release Notes, Errata: https://www.FreeBSD.org/releases/
    Security Advisories:   https://www.FreeBSD.org/security/
    FreeBSD Handbook:      https://www.FreeBSD.org/handbook/
    FreeBSD FAQ:           https://www.FreeBSD.org/faq/
    Questions List:        https://www.FreeBSD.org/lists/questions/
    FreeBSD Forums:        https://forums.FreeBSD.org/
    
    Documents installed with the system are in the /usr/local/share/doc/freebsd/
    directory, or can be installed later with:  pkg install en-freebsd-doc
    For other languages, replace "en" with a language code like de or fr.
    
    Show the version of FreeBSD installed:  freebsd-version ; uname -a
    Please include that output and any error messages when posting questions.
    Introduction to manual pages:  man man
    FreeBSD directory layout:      man hier
    
    To change this login announcement, see motd(5).
    
    
    login: root
    Password:
    Login: incorrect # 即不正确的意思
    login: 
    login: test # 当前系统中不存在该用户
    Password:
    Login: incorrect
    login: 
    # pkg install v2ray
    # cd /usr/ports/net/v2ray/
    # make install clean
    # pkg install xray-core
    # cd /usr/ports/security/xray-core/ 
    # make install clean
    $ v2ray -c config.json
    $ xray -c config.json
    $ export HTTP_PROXY="http://127.0.0.1:10809" # 设置 http 代理
    $ export HTTPS_PROXY="http://127.0.0.1:10809" # 设置 https 代理
    $ export ALL_PROXY="socks5://127.0.0.1:10808" # 设置 socks 代理
          {
            "domain": [
              "geosite:cn"
            ],
            "outboundTag": "direct",
            "type": "field"
          },

    具体到相关标准、规范、法律文件等

  • 分析其设计哲学与开发思路

  • 操作性内容:在 FreeBSD 环境中亲自试验,确保可复现

  • 高等学校预防与处理学术不端行为办法
    FreeBSD 中文社区行为规范
    源代码
    /
    )是一切目录的起点。比如
    /home/ykla/nihao
    、
    /bin/sh
    、
    /etc/fstab
    他们追根溯源,都是从根出发的。换言之,如果你删除
    /
    ,那么等于删除了整个系统,所有设备上的目录都会被删除。

    行道树则不然,每棵普通的行道树都是独立生长的。无论他们靠得多么紧密,他们仍然是独立的。行道树与 Windows 目录类似,都是独立的——C:\Program Files (x86)\Google\Update、D:\BaiduNetdiskDownload\工具列表、E:\123\app:C、D、E 盘都是独立的,互不干扰。你格式化 D 盘,并不会影响 E 盘存储的文件。甚至,即使你在 PE 中格式化了 C 盘(可能不会叫 C 盘),也不会影响 E 盘中的文件。

    事实上 Windows 的“盘符”根本不存在,有经验的装机人员会发现,在 PE 中,C 盘会变成其他诸如 X 等盘符。正在使用中的 Windows,其盘符也可以随意分配。Windows 下真正判断一个分区是不是 C 盘,是靠 GPT 分区类型的 UUID(如我的 C 盘分区类型 UUID 是 EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 )以及唯一 ID 来判断的(配置写入 EFI 文件),而不是靠盘符。盘符是抽象出来的,实际上没有意义。这也就是为什么你在其他操作系统上包括 Windows 自己(如双系统)都看不到 C 盘的根本原因,因为不存在一个硬编码的,写入文件系统的 C 盘标识。只有在真正启动系统时,Windows 才会知道到底谁是 C 盘,并写入注册表。至于其他盘符的分配,则完全靠运气,出现 D 盘变 E 盘的问题也屡见不鲜:因为某虚拟光驱可能在开机时突然插入了等等……

    思考题

    阅读《深入解析 Windows 操作系统(第 7 版)(卷 2)》(9787115619747,人民邮电出版社)及其他相关文献资料,回答问题:在以往传统的 BIOS + MBR 引导下,Windows 如何识别 C 盘?第 3.9 节 磁盘结构

    如何理解挂载

    小时候住在花木场的人们都知道,经常需要从树 A 上裁剪一段枝条,将其斜插到树 B 上,并包裹起来,愈合后就成为一体:比如在苹果树(UNIX)上可以长出桃子(挂载 Windows 的 C 盘)。这种方法称为“嫁接”。实际上,就是将树 A 的枝条(文件系统)挂载到树 B 上(嫁接点即某个挂载点,归根结底依赖于根目录 /)。

    如何理解卸载

    而对园艺有所了解的人们想必对“扦插”这种培育植物的方法并不陌生:把一棵树新发的侧枝掰下来,插到土里。精心照料一段时间,就会得到一株新的幼苗。实际上,这和“卸载”的原理有异曲同工之妙:将某文件系统(如 /mnt/test)从完整的根(/)上“掰”(卸载)下来。

    若使用 sh、bash 或 zsh

    注意

    环境变量 HTTP_PROXY 一定要是大写!小写不生效!

    • 设置:

    警告

    本文中的所有 192.168.X.X:7890 均非实际参数,以实际为准,复制粘贴是不会生效的!

    • 取消:

    若使用 csh

    设置:

    取消:

    Git 代理

    见《通过源代码更新》一节。

    浏览器配置代理

    chromium 本身并没有在例如 ~/.config 下的配置文件这种东西。亦没有可添加环境变量参数用于指定默认代理服务器。不过可以添加启动参数(Options)。

    如:

    例:

    默认是 http 协议,如果你的代理程序使用 sock:

    socksv4:

    • 在图形界面下让 chromium 默认使用代理打开:

    找到你的桌面环境为 chromium 创建的 desktop 文件,一般在 ~/.local/share/applications/ 这个位置。

    找到 Exec=chrome %U 这行 在其后加入上列你需要的参数。

    例:

    单独为 Firefox 配置代理

    因 Firefox 在 Windows GNU/linux Macos 以及 BSD 的所有客户端的浏览器设置页面 > 网络设置选项卡中均有 GUI 配置代理的模块,故此节不再赘述。

    FF-Porxy

    参考资料

    • FreeBSD Manual Pages: Chromium

    • FreeBSD Forums: chromium proxy settings page doesn't exist

    5.3 gitup 的用法

    技巧

    FreeBSD 14.0 已经删除了 portsnap,转而使用 git,如本文所述可以使用 gitup 替代之。

    gitup,即更新 git 的意思。

    安装 gitup

    • 使用 pkg 安装:

    • 或者使用 Ports 安装:

    使用 gitup

    境内 Git 镜像站

    编辑,/usr/local/etc/gitup.conf,修改内容如下(有 ①②③ 共计三处需要修改):

    拉取 ports:

    故障排除与未竟事宜

    • 速度太慢(若不使用镜像站):设置 HTTP 代理

    gitup 的代理不取决于系统代理,而是由其配置文件 /usr/local/etc/gitup.conf 单独决定。

    示例(先删去前边的 # 再改):

    • 详细调试输出:

    • gitup: build_repair_command: There are too many files to repair -- please re-clone the repository: Argument list too long

    清空目录重新拉取即可,可以无视 rm: /usr/ports/: Device busy 这个提示。

    参考链接

    • ,man 手册

    • ,开发者官网

    4.8 权限

    权限

    首先观察以下命令输出:

    再观察:

    FreeBSD 文件访问权限可以用 10 个标志位来说明(数一数第一列是不是 10 位),而这 10 个标志位由 4 部分组成:

    用斜杠分割:-/---/---/---

    第一部分是第 1 位,用 d 表示目录,- 表示普通文件,l 表示链接文件,b 表示块设备文件,p 表示管道文件,c 表示字符设备文件,s 表示套接字文件;

    第二部分是第 2、3、4 位,用于标识文件所属用户对文件的访问权限,用 rwx 表示读、写、执行(对于目录来说即访问,如 ls、cd 目录的权限)权限,无权限就写成 -;

    第三部分是第 5、6、7 位,用于标识文件所属组成员对文件的访问权限。

    第四部分是第 8、9、10 位,用于标识文件其他用户对文件的访问权限。

    读、写、执行除了用 rwx 表示,也可以对应为数字 4、2、1,无权限即 0。每三位数的数字相加后,组合在一起,就是 3 位数字的表示方式。(记忆口诀:“读 4 写 2 执行 1”)。

    如:

    字符标识权限
    数字标识权限
    说明

    思考题

    drw-------,即 600 这是一个目录,只有所属用户可以读、写。

    上面的说法正确吗,有意义吗,为什么?

    技巧

    关于上面数字代表权限的代码可以在 找到,由 IEEE Std 1003.1 所规范:

    chmod 命令

    操作符方式

    在 a+x 中:

    第一位表示操作对象,u 是所属用户,g 是所属组,o 是其他用户,a 则表示所有用户,不写按系统默认操作;

    第二位是操作符,+ 是添加权限,- 是去除权限;

    第三位是权限模式,rwx 分别表示读、写、执行,还有 s 表示文件执行时把进程属主或组置成与文件属主或组一致。

    数字方式

    其中 7 表示所属用户拥有读、写、执行的权限,同组用户有读和执行的权限,其他用户则没有任何权限,这种方式使用起来比较方便。

    选项 -R,递归赋权

    示例:

    chown 命令

    了修改文件的属主,包括所属用户和所属组。

    选项 -R,递归赋权

    示例:

    9.6 视频播放器

    VLC

    安装 VLC

    • 使用 pkg 安装:

    • 或者使用 Ports:

    VLC 视频播放测试

    视频 A、B 均正常

    SMPlayer

    SMPlayer 是 MPlayer(纯命令行)的 QT 前端。推荐使用。

    安装 SMPlayer

    • 使用 pkg 安装:

    • 或者使用 Ports:

    SMPlayer 视频播放测试

    视频 A、B 均正常

    Kodi

    Kodi 曾用名为 XBMC。

    安装 Kodi

    • 使用 pkg 安装:

    • 或者使用 Ports:

    Kodi 设置中文

    打开 interface(界面)

    点击 Skin(皮肤)。再点击左下角,把 basic(简单)改为 expert(专家)或 Standard(标准),否则你看不到 fonts 等选项!然后将 fonts(字体)改为 Arial based,否则中文会乱码!

    返回,选择 Regional(区域)——> Language(语言)——> Chinese (Simple)(简体中文)。

    中文设置完毕:

    Kodi 播放视频测试

    视频 A、B 均正常

    附录:直接在 TTY 播放视频(mpv)

    可以直接在 TTY 使用 mpv 命令播放视频。

    • 使用 pkg 安装:

    • 还可以通过 Ports 安装

    切换到 TTY,然后使用以下命令播放视频:

    请你自己试一试。

    注意

    此功能依赖 drm,虚拟机可能并不能正常操作。

    技巧

    可以使用命令行命令 mixer 调整音量。如下列命令将把音量调高 5%。

    7.2 IceWM

    IceWM 是基于 X Window 系统的窗口管理器。IceWM 的目标是速度快、简单,并且不干扰用户操作。它自带分页器任务栏、全局和每个窗口的快捷键以及动态菜单系统。可通过键盘和鼠标来管理窗口。可以图标化窗口到任务栏、托盘、桌面,或被隐藏。用户可以通过快速切换窗口(Alt+Tab)或窗口列表来控制它们。多种可配置的焦点模型可通过菜单选择。多显示器环境由 RandR 和 Xinerama 支持。IceWM 高度可配置、可自定义主题且文档完善。IceWM 拥有可选的外部背景墙纸管理器(支持透明)、简单的会话管理器和系统托盘。可在流行的 Linux 发行版,以及大多数 *BSD 系统上使用 IceWM。——引自 IceWM Window Manager

    安装

    使用 pkg 安装

    使用 Ports 安装

    软件包解释

    包名
    作用说明

    startx

    编辑 ~/.xinitrc,加入(用谁登录就用谁写入):

    启动项

    fstab

    编辑 /etc/fstab,加入:

    中文环境

    编辑 /etc/login.conf:找到 default:\ 这一段,把 :lang=C.UTF-8 修改为 :lang=zh_CN.UTF-8。

    刷新数据库:

    桌面欣赏

    安装后默认如上。我们可以换主题:

    故障排除与未竟事宜

    中文环境不完整

    已经反馈至 。

    参考文献

    • ,手册页

    6.9 LXQt

    安装 LXQt

    • 通过 pkg 安装

    • 或者使用 Ports 安装:

    解释:

    包名
    作用说明

    服务管理

    fstab

    编辑 /etc/fstab,加入:

    通过 startx 启动 LXQt

    用谁登录就用哪个账户写。

    设置中文显示

    中文化 SDDM

    中文化桌面

    进入 LXQt 后 菜单 -> "Preferences" -> "LXQt Settings" -> "Locale" -> "Region" 下拉菜单选择中文

    故障排除与未竟事宜

    • 桌面图标不显示

    请事先安装自己喜欢的其他图标。然后:菜单 -> "Preferences" -> "LXQt Settings" -> "Appearance" -> "Icons Theme" 选择你安装的图标 -> "Apply" 之后重新登录。

    8.1 本地化环境变量

    可生效的配置文件路径

    1. sddm lightdm gdm 可以在 ~/.xprofile 中写入;

    2. lightdm gdm 可以在 ~/.profile 中写入;

    3. sddm 可以在用户登录 shell 配置文件中写入;


    • sh: ~/.profile

    • bash: ~/.bash_profile 或 ~/.profile

    • zsh: ~/.zprofile

    本地化相关的变量

    下面的变量用于控制环境本地化,这些变量大都是由 POSIX 规范定义的。

    LC_* 系列变量是 Unix 操作系统中用于本地化(即国际化和本地化)的环境变量。这些变量控制了文本字符编码、日期和时间格式、货币符号、语言等方面的设置。其中一些常见的变量如:

    • LC_COLLATE:定义字符串排序的规则。

    • LC_CTYPE:定义字符集和字符类型判断规则,例如字母、数字、标点符号等。

    • LC_MONETARY:定义货币格式和货币符号。

    特别的:

    • LC_ALL:通过设置该变量,可同时覆盖所有其他 LC_* 变量的值。

    • LANG:用于设置默认的语言和字符集。它通常用于在没有其他 LC_* 变量设置时提供区域设置信息。如果同时设置了 LANG 和 LC_* 变量:LC_* 变量将覆盖 LANG 变量中相应的设置。

    通过使用这些变量,用户可轻松地调整操作系统的语言和本地化设置以适应不同的地域和语言环境。

    • 可以使用 locale 命令确定以上变量的当前值,如:

    • 所以中文化其实也可以不同。

    1. 单纯的界面中文化只要设置 LC_MESSAGES 为 "zh_CN.UTF-8"(在 SDDM/Xfce 下验证)。

    2. 较常见的将 LANG、LC_ALL、LANGUAGE 三个环境变量都设为 "zh_CN.UTF-8"。


    为何要将 LANG、LC_ALL、LANGUAGE 三个环境变量都设为 "zh_CN.UTF-8"?主要是开发人员在写程序的时候各自用了不同的变量,为了更大的兼容性才如此。


    第一种设置只影响界面、提示等,但对其他的格式输出等无响影(参考 LC_* 系列变量概述)如(sh)。

    在默认情况下:

    • LC_TIME 环境变量值为 C.UTF-8;

    • date 命令输出 Fri Apr 21 21:14:43 UTC 2023;

    • LC_TIME 环境变量值设置为 zh_CN.UTF-8

    注意

    维持 date 命令的英文输出对一些脚本有时很重要(这仅是其中一种情况,还有其它特殊的需求等)。这样的情况亦同样存在于其它由 LC_* 变量控制的信息中。

    8.10 微信(Linux 版)

    基于 RockyLinux 兼容层(FreeBSD Port)

    注意

    请先参照本书其他章节先行安装 RockyLinux 兼容层(FreeBSD Port)

    安装 rpm 工具

    • 使用 pkg 安装

    • 或者使用 Ports 安装:

    下载微信

    官方地址:

    安装微信

    解决依赖问题

    查看依赖:

    • 解决缺少的依赖 libatomic.so.1:

    或者:

    • 继续解决缺少的依赖 libbz2.so.1.0:

    技巧

    libbz2.so.1 这个库本来就有,但是名字不一样,你找不到的话,自己输入 ls /compat/linux/lib64/libbz2 然后按一下 TAB 补全看一下你的名字是什么。

    • 解决依赖 libxkbcommon-x11.so.0:

    技巧

    当找不到 rockylinux 的某某库时,可以到 搜索。FreeBSD Ports 已经打包了一部分,可以参照 pkg 章节使用 pkg-provides 搜索一下。

    • 解决依赖 libxcb-icccm.so.4:

    • 解决其他 xcb 库相关依赖:

    或者

    启动微信

    软件图标

    在路径 ~/.local/share/applications 下新建文本文件 wechat.desktop,写入:

    重启系统,即可在系统菜单中找到微信。

    功能正常:

    中文输入法

    如果以 root 权限运行 RockyLinux 中的兼容层应用,则输入法会有问题。请以普通用户权限运行之。

    FreeBSD
    OpenBSD
    NetBSD

    6.10 Budgie(预备删除)

    目前 Budgie 但无法正常登录桌面。。若在六个月内(2025-04-01 日前)未得到解决将删除“6.10 Budgie”。

    Budgie 是 的默认桌面。

    安装

    • 使用 pkg 安装:

    8.6 QQ(Linux 版)

    基于 RockyLinux(FreeBSD Port)

    注意

    请先参照本书其他章节先行安装 RockyLinux 兼容层(FreeBSD Port)

    6.16 KDE6(Wayland)

    环境准备

    由于 issue 始终未能得到解决(FreeBSD drm 驱动的移植只覆盖了 Intel、AMD 和 NVIDIA 等 GPU),故在 VMware、VirtualBox 或任何基于 Virtio 的虚拟机上均无法复现此教程。你需要在真实的物理机上进行参照。

    NVIDIA 卡未经测试。本文使用 Intel 12 代处理器(i7-1260P)的核显进行测试。

    请参照其他章节内容自行 安装 drm、KDE 6、Fcitx 5、火狐浏览器等软件包。并配置 drm 显卡驱动。 其余软件包暂且 不要 进行任何配置,仅安装 即可。请加入 video 组。

    6.7 Cinnamon

    Cinnamon 基于 GNOME Shell,来自 Linux Mint 项目。

    Cinnamon 本身是肉桂(锡兰肉桂/斯里兰卡肉桂)的意思,但不是我们炖肉用的那个桂皮(尽管二者都是肉桂树的树皮,树种不同),而是一种用于制作冰红茶或西式糕点、咖啡的香料。

    锡兰肉桂主要产地是斯里兰卡,有一种柑橘香甜的复合气味。而桂皮(烟桂则是去掉青皮的优质桂皮)主要产地是中国南方以及越南,则是一股辛辣刺激的中药味。

    《中国药典》对肉桂的定义是,“本品为樟科植物肉桂 Cinnamomum cassia Presl 的干燥树皮。”,很明显这里说的并非锡兰肉桂,而是桂皮。这些树的细嫩幼枝则为桂枝。而锡兰肉桂实为“为樟科植物锡兰肉桂 Cinnamomum zeylanicum B1. 的树皮。”在植物分类组中,锡兰肉桂和桂皮同属肉桂组(Cinnamomum sect. Cinnamomum)。

    锡兰肉桂一般被磨成粉出售,价格通常是桂皮的数倍或数百倍不等。

    安装

    7.1 bspwm

    bspwm,据说更符合 UNIX 哲学(参见 ,7.2 Unix 哲学)。

    安装 bspwm

    • 通过 pkg 安装

    6.8 Lumina

    Lumina 使用 BSD 许可证。Lumina 技术栈为 QT5,不使用任何基于 Linux 的桌面框架,主张轻量化。

    2025.1.8 测试在 VMware 中无法进入桌面,进入后闪退。参见 。但是在 VirtualBox 中显示正常。

    注意

    在换了开发者后,开发长期处于停滞状态,我向其提交的 pull 长期无人处理,并且没有新的 commit 信息。

    安装

    3.4 手动安装双系统(先安装 FreeBSD)

    注意

    本文要求先安装 FreeBSD,再安装 Windows 或其他操作系统。

    安装 FreeBSD 14.2 RELEASE

    本文未特别说明的,皆为正常设置与参数。

    6.5 Mate

    Mate 由 GNOME 2 复刻发展而来。

    你也许不认识 mate,即巴拉圭冬青(Ilex paraguariensis),但是你可能听说“马黛茶”。许多南美球员(如梅西)非常热衷于这种植物制成的茶饮。

    安装

    • 使用 pkg 安装:

    8.9 压缩和解压

    zip

    技巧

    zip 中文或非英文字符乱码是很正常的一件事。因为编码不同,而一般国产操作系统(如 UOS、UbuntuKylin)之所以不乱码是打了补丁的。至于为什么这个补丁没有提交到上游,有知道的人欢迎 PR。

    7.5 Window Maker

    Window Maker 是一款窗口管理器。设计目标旨在重现 NeXTSTEP(macOS 基于此)用户界面与用户体验。

    安装

    • 使用 pkg 安装:

    $ echo $SHELL
    # export HTTP_PROXY=http://192.168.X.X:7890
    # unset HTTP_PROXY
    # setenv http_proxy http://192.168.X.X:7890
    # unsetenv http_proxy
    --proxy-server="<IP 地址>:<端口>"
    $ chrome --proxy-server="127.0.0.1:1234" (终端启动)
    --proxy-server="socks://<IP 地址>:<端口>"
    --proxy-server="socksv4://<IP 地址>:<端口>"
    $ ee chromium-browser.desktop # 使用你喜欢的编辑器打开上述目录下的 chromium desktop 文件
    Comment[zh_CN]=Google web browser based on WebKit
    Comment=Google web browser based on WebKit
    Encoding=UTF-8
    Exec=chrome %U
    GenericName[zh_CN]=
    ......
    Exec=chrome %U --proxy-server="192.168.2.163:20172"
    root@ykla:~ # ls -al /home/ykla
    total 74
    drwxr-xr-x  17 ykla ykla    27 Mar 19 17:57 .
    drwxr-xr-x   3 root wheel    4 Mar 19 16:05 ..
    drwx------   4 ykla ykla     4 Mar 10 16:21 .mozilla
    -rw-r--r--   1 ykla ykla   966 Feb 24 12:18 .profile
    -rw-------   1 ykla ykla   200 Mar 19 17:57 .sh_history
    -rw-r--r--   1 ykla ykla  1003 Feb 24 12:18 .shrc
    drwxr-xr-x   2 ykla ykla     2 Mar  9 23:48 .themes
    drwxr-xr-x   2 ykla ykla     2 Mar  9 20:45 桌面
    ----------   1 root wheel         0 Mar 19 22:26 test
    - / --- / --- / ---
    |   |     |     |
    |   |     |     └─── 其他用户权限(others)
    |   |     └───────── 同组用户权限(group)
    |   └─────────────── 所有者权限(owner)
    └─────────────────── 文件类型 / 设备类型
    # pkg install xorg icewm slim wqy-fonts xdg-user-dirs
    # pkg install xorg sddm lxqt gvfs wqy-fonts xdg-user-dirs
    # cd /usr/ports/x11/xorg/ && make install clean
    # cd /usr/ports/x11-wm/lxqt/ && make install clean
    # cd /usr/ports/x11-fonts/wqy/ && make install clean
    # cd /usr/ports/x11/sddm/ && make install clean
    # cd /usr/ports/devel/gvfs/ && make install clean
    # cd /usr/ports/devel/xdg-user-dirs/ && make install clean 
    gitup --A minimalist, dependency-free program to clone/pull Git repos-itories.
    net/gitup
    johnmehr/gitup

    -rwxrwxrwx

    777

    所有人都可读、写、执行的普通文件

    -rwxr-xr-x

    755

    这是一个普通文件,所属用户有读、写、执行权限;同组用户和其他用户只能读取或执行,不可写入

    main/sys/sys/stat.h
    SMPlayers
    SMPlayer
    SMPlayer

    xorg

    X Window 系统

    icewm

    轻量级窗口管理器

    slim

    轻量级图形登录管理器

    wqy-fonts

    文泉驿中文字体

    xdg-user-dirs

    管理用户目录,如“桌面”、“下载”……

    Many UI Strings Are Missing from .po Files
    icewm-preferences(5)
    FreeBSD 安装 icewm
    FreeBSD 安装 icewm
    FreeBSD 安装 icewm
    FreeBSD 安装 icewm

    xorg

    X Window 系统

    sddm

    登录管理器

    lxqt

    LXQt 首选的显示管理器

    gvfs

    GNOME 虚拟文件系统,LXQt 依赖此打开 Computer 和 Network,否则会提示 Operation not supported

    wqy-fonts

    文泉驿中文字体

    xdg-user-dirs

    管理用户目录,如“桌面”、“下载”等,并处理目录名称的本地化

    FreeBSD 安装 LXQt
    FreeBSD 安装 LXQt
    FreeBSD 安装 LXQt
    FreeBSD 安装 LXQt
    FreeBSD 安装 LXQt

    csh: ~/.cshrc

    LC_MESSAGES:定义程序运行时输出信息的语言。
  • LC_NUMERIC:定义数字格式,例如小数点和千位分隔符。

  • LC_TIME:定义日期和时间格式。

  • LC_ADDRESS:定义地址的格式。

  • LC_NAME:定义人名的格式。

  • LC_PAPER:定义纸张大小和打印格式。

  • LC_TELEPHONE:定义电话号码的格式。

  • LC_MEASUREMENT:定义度量单位的格式。

  • LC_IDENTIFICATION:定义文件特征的格式。

  • LANGUAGE:用于设置当前系统的语言环境,它影响了许多程序的行为,如日期格式、数字格式、字符编码等。具体地说,这个环境变量通常会被一些程序自动读取,并根据其值来确定应该使用哪种语言和本地化设置。若未设置该变量,则程序可能会使用默认的系统语言环境或其他环境变量(如 LC_ALL、LC_MESSAGES 等)来确定语言环境。

    纯英文环境,加上中文输入法。
    ;
  • date 命令输出为 2023年 4月21日 星期五 21时15分07秒 UTC。

  • 微信 Linux 测试版
    https://rockylinux.pkgs.org/
    FreeBSD 微信
    FreeBSD 微信
    FreeBSD 微信
    FreeBSD 微信

    4.11 系统目录结构

    为了方便说明,仅列出三级目录和重要文件:

    ①:目录 /var/empt 加注了 schg 权限,即系统不可变标志:

    dr-xr-xr-x   2 root    wheel   schg,uarch  2 Feb 21 10:26 empty

    参考文献

    • 手册页 hier(7)

    安装 zip
    • 使用 pkg

    • 使用 ports

    zip 压缩与解压

    • 解压 zip

    zip 解压的话,基本系统自带 unzip,不用安装。

    • 压缩成 zip

    tar

    基本系统自带 tar,不用安装。

    tar 即“tape archive”(磁带归档),最早是为了在磁带上进行存储的。

    思考题

    归档文件包就是压缩率为 0 的文件集合(将多个文件/目录打包成一个单一文件便于存储)。单纯的 tar 操作仅打包,不压缩。而压缩的本质是通过某种算法缩减文件所占用的体积,而非针对目录。所以常见压缩软件本质上是先将目录归档成为文件,然后再将其压缩。

    如何理解归档与压缩的关系?

    解压 tar

    • x:Extract 解压的意思

    • v:verbose 啰嗦模式即输出详细信息

    • f:file 指定文件

    • C:cd 的意思,即指定路径

    压缩成 tar

    xz

    基本系统自带 xz、unxz,同样也不用安装。

    解压缩 unxz

    压缩成 xz

    7z

    FreeBSD 操作系统下,7z 命令通过下载 archivers/7-zip 使用。

    安装 7-zip

    • 使用 pkg:

    • 通过 Ports:

    示例

    • 压缩成 7z

    • 解压缩 7z

    rar

    rar 是 Windows 上常见的压缩工具。

    安装 rar

    • 通过 pkg;

    • 通过 Ports:

    使用 rar

    • 压缩成 rar

    • 解压 rar

    zstd

    基本系统内置 zstd,无需安装。参见 Add support for zstd-compressed user and kernel core dumps.

    压缩成 zstd

    • 使用 zstd 压缩单个文件

    • 使用 zstd 压缩文件夹

    zstd 不支持压缩文件夹(参见 How can I compress a directory?),故需要先打包成 tar:

    思考题

    zstd 为什么不支持压缩文件夹?有哪些可能性。

    再把 test.tar 压缩成 test.tar.zst

    解压 zstd

    • 解压到当前路径

    注意

    这样解压出来的是 test.tar,还需要再使用 tar 解压一遍。

    • 解压到指定路径

    注意

    这样解压出来的是 test.tar,还需要再使用 tar 解压一遍。

    # pkg install gitup 
    # cd /usr/ports/net/gitup/
    # make install clean
    # gitup ports 	# 获取 latest 的 ports
    # gitup release # 获取 release 版本的源代码
    # cp /usr/local/etc/gitup.conf.sample /usr/local/etc/gitup.conf
    # $FreeBSD$
    #
    # Default configuration options for gitup.conf.
    {
    	"defaults" : {
    		"host"           : "mirrors.ustc.edu.cn",  #①改动成这样
    		"port"           : 443,
    #		"proxy_host"     : "",
    #		"proxy_port"     : 0,
    #		"proxy_username" : "",
    #		"proxy_password" : "",
    #		"source_address" : "",
    		"low_memory"     : false,
    		"display_depth"  : 0,
    		"verbosity"      : 1,
    		"work_directory" : "/var/db/gitup",
    	},
    
    	"ports" : {
    		"repository_path"  : "/freebsd-ports/ports.git",  #②改动成这样
    		"branch"           : "main",
    		"target_directory" : "/usr/ports",
    		"ignores"          : [],
    	},
    
    	"quarterly" : {
    		"repository_path"  : "/freebsd-ports/ports.git",  #③改动成这样
    		"branch"           : "quarterly",
    		"target_directory" : "/usr/ports",
    		"ignores"          : [],
    	},
    
    	"release" : {
    		"repository_path"  : "/src.git",
    		"branch"           : "releng/13.2",
    		"target_directory" : "/usr/src",
    		"ignores"          : [
    			"sys/[^\/]+/conf",
    		],
    	},
    
    	"stable" : {
    		"repository_path"  : "/src.git",
    		"branch"           : "stable/13",
    		"target_directory" : "/usr/src",
    		"ignores"          : [
    			"sys/[^\/]+/conf",
    		],
    	},
    
    	"current" : {
    		"repository_path"  : "/src.git",
    		"branch"           : "main",
    		"target_directory" : "/usr/src",
    		"ignores"          : [
    			"sys/[^\/]+/conf",
    		],
    	}
    }
    # gitup ports
    "proxy_host" : "192.168.27.1",
    "proxy_port" : 7890,
    # gitup -v2 ports
    # rm -rf /usr/ports
    # gitup ports
    #define	S_IRWXU	0000700			/* 拥有者的读、写、执行(RWX)权限掩码 */
    #define	S_IRUSR	0000400			/* 拥有者的读(Read)权限 */
    #define	S_IWUSR	0000200			/* 拥有者的写(Write)权限 */
    #define	S_IXUSR	0000100			/* 拥有者的执行(Execute)权限 */
    $ chmod a+x test.sh
    $ chmod 750 test.sh
    # chmod -R 777 /tmp # 允许任何用户读、写、执行 /tmp 目录下所有文件
    # chmod -R a+rwx /tmp # 允许任何用户读、写、执行 /tmp 目录下所有文件
    # chown test1 t.sh # 修改 t.sh 属主为用户 test1
    # chown test1:test t.sh # 修改 t.sh 属主为用户 test1、组 test
    # chown -R test1:test /tmp # 修改/tmp 目录下所有文件的属主为用户 test1、组 test
    # pkg install vlc
    # cd /usr/ports/multimedia/vlc/ 
    # make install clean
    # pkg install smplayer
    # cd /usr/ports/multimedia/smplayer/ 
    # make install clean
    # pkg install kodi
    # cd /usr/ports/multimedia/kodi/ 
    # make install clean
    # pkg ins mpv
    # cd /usr/ports/multimedia/mpv/ 
    # make install clean
    $ mpv 1.mp4
    $ mixer vol=+5%
    # cd /usr/ports/x11-wm/icewm/ && make install clean # fluxbox
    # cd /usr/ports/x11-themes/icewm-extra-themes/ && make install clean 
    # cd /usr/ports/x11/xorg/ && make install clean 
    # cd /usr/ports/x11/slim/ && make install clean
    # cd /usr/ports/x11-fonts/wqy/ && make install clean
    # cd /usr/ports/devel/xdg-user-dirs/ && make install clean
    exec icewm-session
    # service dbus enable # 作为依赖自动安装
    # service slim enable
    proc           /proc       procfs  rw  0   0
    # cap_mkdb /etc/login.conf
    # service dbus enable
    # service sddm enable
    proc	/proc	procfs	rw	0	0
    $ echo "exec ck-launch-session startlxqt" > ~/.xinitrc
    # sysrc sddm_lang="zh_CN"
    $ locale
    LANG=C.UTF-8
    LC_CTYPE="C.UTF-8"
    LC_COLLATE="C.UTF-8"
    LC_TIME="C.UTF-8"
    LC_NUMERIC="C.UTF-8"
    LC_MONETARY="C.UTF-8"
    LC_MESSAGES="C.UTF-8"
    LC_ALL=
    $ locale
    LANG=C.UTF-8
    LC_CTYPE="C.UTF-8"
    LC_COLLATE="C.UTF-8"
    LC_TIME="C.UTF-8"
    LC_NUMERIC="C.UTF-8"
    LC_MONETARY="C.UTF-8"
    LC_MESSAGES=zh_CN.UTF-8
    LC_ALL=
    $ date
    Fri Apr 21 21:14:43 UTC 2023
    $ export LC_TIME=zh_CN.UTF-8
    $ date
    2023年 4月21日 星期五 21时15分07秒 UTC
    # pkg install rpm4
    # cd /usr/ports/archivers/rpm4/ 
    # make install clean
    # fetch https://dldir1v6.qq.com/weixin/Universal/Linux/WeChatLinux_x86_64.rpm # 写作本文时链接如此,请自行获取最新链接
    root@ykla:/ # cd /compat/linux/
    root@ykla:/compat/linux # rpm2cpio < WeChatLinux_x86_64.rpm  | cpio -id #注意 WeChatLinux_x86_64.rpm 的路径改成你自己的
    1393412 blocks
    root@ykla:/compat/linux # /compat/linux/usr/bin/bash # 切换到兼容层的 shell
    bash-5.1# ldd /opt/wechat/wechat 
    	libatomic.so.1 => not found
    	libbz2.so.1.0 => not found
    	libxkbcommon-x11.so.0 => not found
    	libxcb-icccm.so.4 => not found
    	libxcb-image.so.0 => not found
    	libxcb-render-util.so.0 => not found
    	libxcb-keysyms.so.1 => not found
    		……其他省略……
    # pkg install linux-rl9-libatomic
    # cd /usr/ports/devel/linux-rl9-libatomic/ && make install clean
    # ln -s /compat/linux/lib64/libbz2.so.1.0.8 /compat/linux/lib64/libbz2.so.1.0 # 重命名所需的库
    # fetch https://dl.rockylinux.org/pub/rocky/9/devel/x86_64/os/Packages/l/libxkbcommon-x11-1.0.3-4.el9.x86_64.rpm
    # cd /compat/linux/
    root@ykla:/compat/linux # rpm2cpio < libxkbcommon-x11-1.0.3-4.el9.x86_64.rpm  | cpio -id 
    82 blocks
    # fetch https://dl.rockylinux.org/pub/rocky/9/AppStream/x86_64/os/Packages/x/xcb-util-wm-0.4.1-22.el9.x86_64.rpm
    # cd /compat/linux/
    root@ykla:/compat/linux #  rpm2cpio < xcb-util-wm-0.4.1-22.el9.x86_64.rpm  | cpio -id 
    175 blocks
    # pkg install linux-rl9-xcb-util
    # cd /usr/ports/x11/linux-rl9-xcb-util/ 
    # make install clean
    $ /compat/linux/opt/wechat/wechat
    [Desktop Entry]
    Name=WeChat
    Comment=微信
    Exec=/compat/linux/opt/wechat/wechat
    Terminal=false
    Type=Application
    Encoding=UTF-8
    Icon=/compat/linux/opt/wechat/icons/wechat.png
    Path=
    StartupNotify=false
    Categories=Network
    \
    ├── COPYRIGHT FreeBSD 版权信息
    ├── boot 操作系统引导过程中使用的程序和配置文件。
    │   ├── fonts 终端字体
    │   ├── device.hints 用于控制驱动程序的内核变量,参见 device.hints(5)
    │   ├── uboot 空目录
    │   ├── firmware pkg kmod 会安装至此,同 fwget
    │   ├── loader.conf.d loader 配置文件的子项
    │   ├── lua 启动加载器的 lua 脚本,包含启动时显示的 ASCII 艺术字(图)等,参见 loader_lua(8) 
    │   ├── zfs 存放 ZFS 存储池(Zpool)的缓存文件 zpool.cache,参见 zpool(8)
    │   ├── kernel 内核及内核模块
    │   ├── images 启动时显示的 FreeBSD Logo 等
    │   ├── modules 旧时 pkg kmod 会安装至此,如 drm-kmod
    │   ├── efi EFI 挂载至此
    │   ├── dtb 非 ARM 应为空,设备树 DTB 文件
    │   └── defaults 存放默认内核的默认引导配置文件,是个详细地示例说明文件,参见 loader.conf(5)  
    ├── media 媒体文件挂载点,如 U 盘,光盘
    ├── mnt 用作临时挂载点的空目录
    ├── tmp 临时文件
    ├── root root 的家目录
    ├── proc 现代 FreeBSD 不使用 procfs,该目录无意义
    ├── zroot 同 ZFS 池的名称,我也不知道干什么用的,看起来是空的
    ├── var 多种用途的日志、临时、瞬态、缓存文件
    │   ├── db 存放系统和应用程序的数据文件,如 pkg 的数据库等
    │   ├── games 存放与游戏相关的数据文件,默认为空
    │   ├── yp NIS 的配置等文件
    │   ├── mail 存放系统邮件
    │   ├── empty 默认为空,提供一个始终保持空白的目录供特定程序使用①
    │   ├── preserve 于存放编辑器(如 vi)在异常关闭后保存的文件,已不再使用,默认为空
    │   ├── heimdal Kerberos 5 用,默认为空
    │   ├── run 用来存放 PID 文件和运行时数据
    │   ├── authpf 用于认证网关用户的 shell,参见 authpf(8),默认为空
    │   ├── msgs 用于存放系统消息文件,参见 msgs(1)
    │   ├── at 存放 at 命令调度的任务文件,参见 at(1)
    │   ├── cache 缓存文件,如 pkg 下载的二进制文件缓存在 cache/pkg
    │   ├── backups 用于存放系统的备份文件,如用户名和密钥、pkg 数据库。由 /etc/periodic/daily 下的 200、210 等文件生成
    │   ├── spool 存放等待处理的任务文件,如待打印机打印的文件
    │   ├── cron 存放 cron 定时任务相关文件,参见 cron(8)
    │   ├── crash 存放崩溃转储文件 
    │   ├── rwho 存储由 rwhod 收集的网络中其他计算机的用户登录信息,参见 rwhod(8)。默认为空
    │   ├── log 各种系统日志文件
    │   ├── unbound Unbound 服务器的相关文件
    │   ├── audit 存储安全审计日志文件,属于 audit 组
    │   ├── account 默认为空,系统审计用,参见 accton(8)
    │   └── tmp 通常会在系统重启后保留的临时文件
    ├── rescue 静态链接的系统工具,紧急模式时用,参见 rescue(8)
    ├── dev 存放设备文件和特殊文件,参见 devfs(5)
    │   ├── reroot reboot -r 用
    │   ├── input 存放输入设备相关的设备文件
    │   ├── nvd0 NVMe 第一块固态硬盘
    │   ├── nvd0p1 第一块固态硬盘的第一个分区
    │   ├── mmcsd0 第一张存储卡
    │   ├── dri 显卡字节设备节点,参见 drm(7)
    │   ├── drm 显卡节点,参见 drm(7)
    │   ├── fd 用于访问当前进程的文件描述符。目录下 0、1、2 对应标准输入、标准输出和标准错误,参见 fdescfs(5)
    │   ├── usb USB 设备相关的设备节点
    │   ├── gpt GPT 硬盘的设备节点,参见 gpt(8)
    │   ├── iso9660  ISO 9660 文件系统的设备节点,如光盘
    │   └── pts 伪终端设备,参见 pts(4)
    ├── etc 基本系统配置文件和脚本
    │   ├── auto_master autofs 配置文件,参见 automount(8)
    │   ├── crontab root 的 crontab 文件
    │   ├── devfs.conf 启动时的设备参数
    │   ├── freebsd-update.conf 基本系统更新工具 freebsd-update 的配置文件,参见 freebsd-update(8)
    │   ├── fstab 文件分区表,参见 fstab(5)
    │   ├── hosts hosts 文件,优先与 DNS 的本地 IP 域名映射表
    │   ├── inetd.conf 配置 BSD inetd,参见 inetd(8)
    │   ├── localtime 本地时区文件,参见 ctime(3)。在我的系统中,localtime 链接到了 /usr/share/zoneinfo/Asia/Shangha
    │   ├── login.conf ​登录类功能数据库,参见 login.conf(5)
    │   ├── machine-id 系统的 UUID,dbus 用
    │   ├── motd.template tty 登录后显示的信息,参见 motd(5)
    │   ├── ntp.conf NTP 客户端配置文件,参见 ntpd(8)
    │   ├── pf.conf PF 防火墙配置文件,参见 pf(4)
    │   ├── rc.conf 系统 RC,参见 rc.conf(5)
    │   ├── resolv.conf DNS 解析,参见 resolv.conf(5)
    │   ├── sysctl.conf 内核状态默认值,参见 sysctl.conf(5)
    │   ├── syslog.conf 系统日志配置文件
    │   ├── ttys 创建 tty 的规则文件,参见 getty(8)
    │   ├── wpa_supplicant.conf 连接 WiFi 的配置文件,参见 wpa_supplicant.conf(5)
    │   ├── dma DMA 邮件代理相关,参见 dma(8)
    │   ├── pam.d 可插拔认证模块(PAM)相关的配置文件,参见 pam.d(5)
    │   ├── ssl 存储与 SSL/TLS 相关的文件,如证书、密钥
    │   ├── X11 X11 相关,如 XRDP
    │   ├── rc.conf.d 存放特定服务的配置文件,默认为空
    │   ├── cron.d 存放系统级的定时任务配置文件,参见 crontab(1)、cron(8)
    │   ├── profile.d 存放脚本文件,这些脚本在用户登录时由 shell 执行。但不会自动加载。
    │   ├── ppp PPP 相关配置,参见 ppp(8)
    │   ├── defaults 存放了一组默认配置文件,如 rc.conf、periodic.conf。
    │   ├── zfs ZFS 相关配置文件,参见 zfs(8)
    │   ├── rc.d 用于启动和管理系统服务的 RC 脚本
    │   ├── devd 存放设备管理器(devd)的配置文件,如监控蓝牙、鼠标插拔
    │   ├── ssh SSH 和 SSHD 相关配置文件
    │   ├── autofs 存放自动挂载相关的配置文件,参见 autofs(5)
    │   ├── gss GSSAPI 相关文件、含 Kerberos 5
    │   ├── periodic 存放定期执行的维护脚本,由 cron 调用。参见 periodic.conf(5)
    │   ├── mail Sendmail 相关文件
    │   │    ├── aliases 用于投递系统邮件的地址
    │   │    └── mailer.conf mailwrapper(8) 配置文件
    │   ├── kyua Kyua 测试框架的全局配置文件。参见 kyua(1)、kyua.conf(5)
    │   ├── unbound Unbound 配置文件
    │   ├── ntp NTP 相关,参见 ntp.conf(5)、ntpd(8) 
    │   ├── mtree 用于系统的初始化和验证过程,可用于系统审计,参见 mtree(8)
    │   ├── bluetooth 蓝牙相关
    │   ├── authpf 用于认证网关用户的 shell 配置文件,参见 authpf(8),默认为空
    │   ├── sysctl.kld.d 特定内核模块的配置文件,默认为空,参见 https://reviews.freebsd.org/D40886
    │   ├── pkg PKG 相关配置文件,参见 pkg(7)
    │   ├── jail.conf.d 旨在实现对 jail 配置的模块化管理,默认为空。参见 jail.conf(5)
    │   ├── syslog.d syslogd 的配置文件,参见 syslog(3)
    │   ├── newsyslog.conf.d newsyslog 的配置文件,参见 newsyslog.conf(5)
    │   └── security OpenBSM 审计配置文件
    ├── libexec 系统级的可执行文件
    │   └── resolvconf 管理 DNS 解析配置的程序,参见 resolvconf.conf(5)
    ├── net NFS 共享挂载点,参见 auto_master(5)
    ├── home 普通用户家目录
    │   └── ykla 普通用户 ykla
    ├── bin 基本的 BSD 用户工具,参见 intro(1)
    ├── sys 链接到 /usr/src/sys
    ├── usr 用户工具与程序
    │   ├── share 架构无关文件
    │   ├── local 用户安装的软件,通常是通过 ports(7) 或 pkg(7) 安装的
    │   ├── lib32 用户的 32 位兼容库
    │   ├── include 用户库文件、头文件
    │   ├── obj 架构特定的目标树,用于从源代码构建 FreeBSD
    │   ├── libexec 用户执行的系统守护进程和实用程序
    │   ├── bin 用户实用程序
    │   ├── tests FreeBSD 测试套件,参见 tests(7)
    │   ├── libdata 杂项实用数据文件
    │   ├── src FreeBSD 源代码,参见 ports(7)
    │   ├── ports FreeBSD Ports
    │   │    └── distfiles 下载的源码包存放的地方
    │   ├── lib 用户库文件
    │   └── sbin 用户系统管理实用程序
    ├── lib /bin、/sbin 的库文件
    │   ├── geom GEOM 库,参见 geom(8)
    │   └── nvmecontrol NVME 用,参见 nvmecontrol(8)
    └── sbin 基本的 BSD 系统管理工具
    # pkg install zip
    # cd /usr/ports/archivers/zip/
    # make install clean
    $ zip test.zip test # 压缩成 zip 文件
    $ unzip test.zip # 解压 zip 文件到当前路径
    $ unzip test.zip -d /home/ykla/test # 解压到指定路径,-d 即 directory,目录的意思
    $ tar -xvf test.tar # 解压 tar 格式文件、包括不限于 test.tar.bz2、test.tar.gz、test.tar.xz:
    $ tar -xvf test.tar -C /home/ykla/mytest # 解压到指定路径
    $ tar -cvf test.tar test # 压缩成 tar 格式文件。-c 即 Create,创建;
    $ tar -zcvf test.tar.gz test # 压缩成 gzip 格式文件。-z 即 gzip
    $ tar -jcvf test.tar.bz2 test # 压缩成 bzip2 格式文件。参数 -j 即 bzip2,请注意大小写
    $ tar -Jcvf test.tar.xz test # 压缩成 xz 格式文件。参数 -J 即 xz,请注意大小写
    $ unxz -k test.tar.xz  # 解压并保留原文件,参数 -k 即 keep(保留),下同
    $ unxz test.tar.xz     # 解压并删除原文件
    $ xz -k test.txt  # 压缩并保留原文件
    $ xz test.pdf     # 压缩并删除原文件
    # pkg install 7-zip
    # cd /usr/ports/archivers/7-zip/
    # make install clean
    $ 7z a test.7z test # 压缩成 7z 文件。-a 就是 add,即把要压缩的文件添加到 test.7z
    $ 7z x test.7z # 解压 7z 文件
    $ 7z x test.7z -o /home/ykla/下载/test # 解压到指定路径。-o 即 Output,指定输出路径
    # pkg ins rar unrar
    # cd /usr/ports/archivers/rar/ && make install clean
    # cd /usr/ports/archivers/unrar/ && make install clean
    $ rar a archive.rar test # -a 即 add,把文件添加到 archive.rar 的意思
    $ unrar x archive.rar # 解压到当前路径。参数 -x 即 Extract,解压的意思
    $ unrar x archive.rar /home/ykla/桌面/test/ # 解压缩到指定目录
    $ zstd test.pdf
    $ tar -cf test.tar /home/ykla/test/ # 先压缩成 tar。参数 -f 即 file(文件)
    $ zstd -o test.tar.zst test.tar # 参数 -o 代表 file,文件
    $ zstd -d test.tar.zst
    $ zstd -d test.tar.zst -o /home/ykla/mytest # 参数 -d 即 decompress(解压缩)

    或者使用 Ports 安装:

    技巧

    会自动安装 lightdm。

    • 解释:

    包名
    作用说明

    budgie

    桌面环境

    wqy-fonts

    文泉驿中文字体

    xorg

    X11

    查看安装提示

    配置 startx

    创建账户服务

    • 创建所需路径

    • 创建并写入文件:

    注意

    根据安装后提示,ykla 应改为你自己的用户名。

    写入:

    服务管理

    中文环境

    编辑 /etc/login.conf:找到 default:\ 这一段,把 :lang=C.UTF-8 修改为 :lang=zh_CN.UTF-8。

    刷新数据库:

    桌面欣赏

    FreeBSD 安装 Budgie
    FreeBSD 安装 Budgie

    图中壁纸为默认。拍摄地为新加坡滨海湾区。

    FreeBSD 安装 Budgie

    参考文献

    • Installation,本文主要补充来自此处,但是经过测试无需配置 05-suspend.rules 也可以做到关机重启。

    Bug 289898 x11/budgie: After logging in with LightDM, it crashes and then shows a black screen
    Solus Linux
    安装 rpm 工具
    • 使用 pkg 安装

    • 或者使用 Ports 安装:

    下载安装 QQ

    • 下载 QQ,官方链接:QQ Linux 版 - 轻松做自己

    • 安装 QQ:

    解决依赖库

    • 查看依赖:

    可以看到 ldd 正常,无需解决依赖问题。

    解决 fcitx 中文输入法在 QQ 中不能使用的问题

    • 在兼容层中安装 ibus-gtk3 和 ibus-libs,下载后执行:

    • 接下来:

    启动 QQ

    注意

    此处请务必以普通用户权限运行 QQ,否则可能无法使用输入法。

    技巧

    --no-sandbox 选项是关闭沙盒。否则无法运行 QQ。

    --in-process-gpu 选项也是必要的,否则你退出 QQ 后就打不开了,除非重启。

    FreeBSD QQ

    fcitx5 输入法正常:

    FreeBSD QQ

    基于 ArchLinux 兼容层

    请看 Linux 兼容层的 ArchLinux 兼容层部分。

    新开一个终端,输入 reboot 重启 FreeBSD,否则设置的密码可能会不识别。

    启动 QQ:

    注意

    此处你必须以 root 权限运行 QQ,否则会报错找不到 X11。

    FreeBSD QQ
    FreeBSD QQ

    基于 Ubuntu 兼容层

    请先构建 Ubuntu 兼容层。

    安装依赖文件:

    启动 QQ:

    注意

    此处你必须以 root 用户运行 QQ。而且记得按照 Ubuntu 兼容层构建教程设置中文字符集(如果你使用脚本,一切都是自动的,无需在意)。

    FreeBSD QQ

    故障排除

    网络错误

    如果你拥有多张网卡,例如一块有线网卡、一块无线网卡。那么在打开 QQ 以后你可能会遇到网络错误的提示,此时需要给你的空闲网卡随机指派一个 IP。

    参见《Linux 兼容层故障排除与未竟事宜》

    中文输入法

    注意

    不应在兼容层内部安装输入法,因为这样不起任何作用。

    若你自行构建兼容层,需要在启动 QQ 前,在兼容层内部,可能需要(如果你完全按照本书教程做,就不需要,因为本书中 Fcitx 指定了以下环境变量)设定以下中文环境变量:

    完毕后可以使用 locale 命令检查。对于兼容层的软件来说,Fcitx 输入法只有在上述 2 个变量是中文的情况下才能起作用。

    如果设置失败请重启一次 FreeBSD 主机。

    QQ 闪退

    在兼容层内部:

    参考文献

    • Linux 下新 QQ Bug&Fix 一记(闪退相关)

    加入 video 组

    seatd 相关

    安装 seatd

    seatd 是一种会话管理器。我也不知道它是干什么用的,但是就是需要

    • 使用 pkg 安装:

    • 通过 Ports:

    配置 seatd 服务

    设置服务项:

    启动 KDE 6

    方法 ① SDDM

    直接通过 SDDM 启动即可,在左下角选择“Wayland”会话。

    方法 ②:通过脚本启动

    • 在 ~/ 下新建一脚本 kde.sh:

    • 赋予可执行权限:

    注意

    你必须停止 SDDM 服务才能使用该脚本。请现在就检查 /etc/rc.conf 是有否 sddm_enable="YES" 字样,如有请删除。并按快捷键 ctrl + alt + f2 进入 TTY,登录 root 后输入 service sddm stop 停止 SDDM 服务。

    • 进入 KDE

    此时,你应位于 TTY 界面,并登录到了普通用户,并且不存在任何 X11 会话(如有,请禁用相关服务并重启再来)。

    图示

    在 FreeBSD 上通过 Wayland 运行 KDE6

    技巧

    上图之所以显示为“Intel UHD Graphics”显卡而非“Iris Xe Graphics”,是因为笔者无力购买第二根 DDR5 内存条。参见 Intel® Iris® Xe Graphics Shows As Intel® UHD Graphics in the Intel® Graphics Command Center and Device Manager(网站对应页面的中文翻译不正确)。

    • 检查是否是 Wayland:

    检查当前是否位于 Wayland

    配置 Fcitx 5

    技巧

    经测试 IBus 亦可用,且无需配置。

    配置 Fcitx 自动启动:

    当你初次进入 KDE Wayland 桌面时,KDE 会在右下角提示你要在设置的虚拟键盘中进行配置才能启用输入法。请留意该提示。若未设置,将无法切换输入法且无法输入中文。

    打开 KDE 系统设置:找到“键盘”——>虚拟键盘

    请选择“Fcitx 6 Wayland 启动器(实验性)”

    经测试,在终端 Konsole、火狐浏览器和 Chromium(启动命令为 chrome --no-sandbox)中均可输入中文。

    视频播放测试

    故障排除与未竟事宜

    无法通过 SDDM 的 Wayland 会话启动 KDE

    你的用户可能未加入 video 组。

    切换到 PipeWire

    待解决。

    root 下没声音

    表现为右下角声音选项卡提示“未连接到音频服务”:设置 PulseAudio 自启即可,可在 KDE 设置中自行添加,注意加入可执行权限。

    参考文献

    • KDE Plasma 6 Wayland on FreeBSD,此处提示需要 seatd。

    Request to restore support for vboxvideo and vmwgfx DRM drivers #356

    使用 pkg 安装:

    • 或者使用 Ports 安装:

    • 解释

    包名
    作用说明

    xorg

    X Window 系统

    lightdm

    轻量级显示管理器 LightDM

    slick-greeter

    LightDM 的美观登录界面插件,缺少将无法启动 LightDM

    cinnamon

    基于 GNOME 3 的现代桌面环境

    wqy-fonts

    文泉驿中文字体

    xdg-user-dirs

    管理用户目录,如“桌面”、“下载”等

    配置 startx

    编辑 ~/.xinitrc,添加:

    配置 LightDM

    编辑 /usr/local/etc/lightdm/lightdm.conf,找到 greeter-session=lightdm-gtk-greete 或 #greeter-session=example-gtk-gnome 等改成 greeter-session=slick-greeter。

    配置 fstab

    编辑 /etc/fstab,添加:

    服务管理

    中文化

    编辑 /etc/login.conf:找到 default:\ 这一段(写作时为第 24 行),把 :lang=C.UTF-8 修改为 :lang=zh_CN.UTF-8。

    刷新数据库:

    桌面欣赏

    cinnamon on FreeBSD
    cinnamon on FreeBSD

    壁纸就是黑色的,不是哪儿出了问题。

    cinnamon on FreeBSD

    自定义壁纸。

    通过 Ports 安装:

    解释:

    包名
    作用说明

    xorg

    X Window 系统

    bspwm

    轻量级的平铺式窗口管理器

    sxhkd

    用于绑定快捷键的工具

    rofi

    程序启动器,支持应用启动、窗口切换等功能

    kitty

    终端模拟器

    feh

    桌面背景修改

    提示

    polybar 建议换成别的,因为 polybar 在 freebsd 上功能不全。建议换成 x11/tint(pkg 包是 tint2),可显示 systray 图标。

    启用服务

    创建配置文件

    修改 ~/.config/sxhkd/sxhkdrc

    设置 polybar 启动脚本和配置文件

    创建 ~/.config/polybar/launch.sh

    并执行

    设置 picom、polybar、dunst 启动

    通过 startx 启动 bspwm

    通过 lightdm 启动 bspwm

    • 创建 /usr/local/share/xsessions/bspwm.desktop

    • lightdm 服务

    一些操作和设置

    Windows + 空格:用 rofi 启动应用

    Windows + 回车:启动终端(即 kitty)

    更多快捷键可以参考 ~/.config/sxhkd/sxhkdrc


    • 设置桌面背景:

    • 执行一次后自动设置:

    在 ~/.config/bspwm/bspwmrc 中的 polybar 启动脚本 前 添加

    展示图片

    图片中的 Chrome 浏览器,Thunar 文件管理器均需要自己安装。

    参考文献

    • 从零开始的 Bspwm 安装与配置教程

    bspwm 入门

    使用 pkg 安装:

    • 或者使用 Ports 安装:

    • 解释

    包名
    作用说明

    lumina

    Lumina 桌面环境

    xorg

    X Window 系统

    lightdm

    轻量级显示管理器 LightDM

    lightdm-gtk-greeter

    LightDM 的 GTK+ 登录界面插件。缺少将无法启动 LightDM

    wqy-fonts

    文泉驿中文字体

    xdg-user-dirs

    管理用户目录,如“桌面”、“下载”等

    配置服务

    配置 startx

    编辑 ~/.xinitrc,添加:

    中文化

    在 /etc/rc.conf 下加入:


    编辑 /etc/login.conf:找到 default:\ 这一段,把 :lang=C.UTF-8 修改为 :lang=zh_CN.UTF-8。

    刷新数据库:

    桌面欣赏

    FreeBSD 安装 Lumina
    FreeBSD 安装 Lumina
    FreeBSD 安装 Lumina
    Some problem Under FreeBSD 13.2 with Xorg and Lumina Desktop...How to solve?
    Lumina
    技巧

    如果在此处设置 P Partition Scheme 为 GPT (UEFI) 而非其他(只有老电脑才需要 GPT (BIOS+UEFI) 等选项),后续分区与系统更新过程会更加简单,也能实现 4K 对齐。

    在这一步修改 S Swap Size 的大小(计算方法为 swap 大小 + Windows 大小)。

    本文中,交换分区(Swap)占 8G,其他的 200G 留给 Windows。

    查看磁盘分区:

    查看交换分区:

    可以看到交换分区的大小是我们所设定的 208GB。

    编辑 /etc/fstab,在 swap 一行最前面加上 #,在本例中如下第三行:

    安装 Windows 11

    插入 Windows 启动盘,设置 BIOS 从中启动,开始安装 Windows。

    在分区时,删除(Delete Partition)整个 208G 的交换分区(本例中为“磁盘 0 分区 3”)。

    然后点击创建分区(Create Partition),如果提示出错,请点击刷新(Refresh)即可。

    然后选中 208G 的“磁盘 0 未分配空间”,点击“下一步”进行安装。

    还原交换分区(Swap)

    我们设置了 208G,很明显有 8G 是为 swap 创设的。现在需要将其还原。需要用到 diskgenius。

    打开 diskgenius,压缩 C 盘,空出 8G 剩余空间。

    将这 8G 剩余空间格式化为 FreeBSD Swap partition,然后点击“保存更改”。

    回到 FreeBSD,查看磁盘:

    可以看到,nda0p5(分区 5)是我们新的 swap。测试一下:

    没有报错,也没有任何提示,说明正常。

    编辑 /etc/fstab,在 swap 一行最前面去掉 #,并将分区改为正确的,在本例中如下第三行:

    重启测试一下:

    查看 ZFS 卷:

    或者使用 Ports 安装:

    • 解释

    包名
    作用说明

    mate

    MATE 桌面环境

    xorg

    X Window 系统

    wqy-fonts

    文泉驿中文字体

    lightdm

    显示管理器,提供图形登录界面

    slick-greeter

    LightDM 的美观登录界面插件,缺少将无法启动 LightDM

    xdg-user-dirs

    可自动管理家目录子目录(可选安装)

    安装后启动服务

    配置 LightDM

    编辑 /usr/local/etc/lightdm/lightdm.conf,找到 greeter-session=lightdm-gtk-greete 改成 greeter-session=slick-greeter。

    startx 配置文件

    在 ~/.xinitrc 文件内加入下面一行:

    显示中文桌面环境

    编辑 /etc/login.conf:找到 default:\ 这一段,把 :lang=C.UTF-8 修改为 :lang=zh_CN.UTF-8。

    刷新数据库:

    输入法

    FreeBSD 安装 MATE

    ibus 测试成功。请参见输入法相关章节。

    桌面欣赏

    FreeBSD 安装 MATE
    FreeBSD 安装 MATE
    FreeBSD 安装 MATE

    故障排除与未竟事宜

    配置 slick-greeter

    创建 /usr/local/etc/lightdm/slick-greeter.conf,写入

    FreeBSD 安装 MATE

    参考文献

    • lightdm not reading slick-greeter.conf

    或者使用 Ports:
    • 解释:

    包名
    作用说明

    xorg

    X Window 系统

    windowmaker

    X11 窗口管理器

    wmakerconf

    Window Maker 的配置工具,未作为依赖包安装;包含语言包,但是没中文

    lightdm

    轻量级显示管理器 LightDM

    lightdm-gtk-greeter

    LightDM 的 GTK+ 登录界面插件,缺少将无法启动 LightDM

    wqy-fonts

    文泉驿中文字体

    startx

    编辑 ~/.xinitrc,加入:

    参考文献

    • How to startx window maker?

    启动项

    fstab

    编辑 /etc/fstab,加入:

    中文配置

    编辑 /etc/login.conf,找到 default:\ 这一段,把 :lang=C.UTF-8 修改为 :lang=zh_CN.UTF-8。

    刷新数据库:

    图片

    FreeBSD 安装 Window Maker
    FreeBSD 安装 Window Maker

    故障排除与未竟事宜

    Could not execute command: exec WPrefs

    可以在终端输入

    FreeBSD 安装 Window Maker

    无法使用中文环境

    Window Maker 本身应该是有些字符串没有被处理到 .po 文件中 https://repo.or.cz/wmaker-crm.git/blob/refs/heads/master:/po/zh_CN.po,因此是中英文混合显示输出的。

    https://sourceforge.net/p/wmakerconf/code/HEAD/tree/wmakerconf/trunk/po/ wmakerconf 在 07 年后就停止开发了。翻译了有极大也有可能性无法被合并。

    综上,中文环境处理难度较大,感兴趣的读者可以尝试推进。

    参考文献

    • windowmaker could not execute wprefs!

    3.1 使用 Hyper-V 安装 FreeBSD

    Hyper-V 简介

    Hyper-V 是微软为 Windows 开发的虚拟机,分为 Gen 1 和 Gen 2。Windows 家庭版不支持 Hyper-V。

    Gen 1 和 Gen 2 区别如下:

    Hyper-V 代数
    硬盘
    启动引导

    系统快速创建的为 Gen 2。

    注意:

    使用 Gen 2 时请关闭安全启动,否则系统无法启动!点击设置:点击“安全”——> 取消勾选“启用安全启动。截至 2025.2.1,FreeBSD 尚不支持安全启动。

    Hyper-V 代数
    FreeBSD 版本
    鼠标
    键盘
    备注

    测试环境

    • Windows 11 23H2 专业版

    • FreeBSD 14.1-RELEASE(FreeBSD-14.1-RELEASE-amd64-disc1.iso)

    • Hyper-V 版本:10.0.22621.4249

    • 使用第二代 Hyper-V

    安装 Hyper-V

    右键单击 Windows 徽标,在弹出窗口中右键单击“终端管理员”,输入以下内容:

    创建虚拟机

    右键单击这台主机的主机名,选择“新建”——>“虚拟机”。

    点击“下一页”。

    起个名字,然后点击“下一页”。

    选择“第二代”。然后点击“下一页”。

    设置内存大小,然后点击“下一页”。

    设置网络,然后点击“下一页”。

    选择虚拟硬盘名称、大小、存储位置。然后点击“下一页”。

    点击“浏览”,找到下载的 FreeBSD-14.1-RELEASE-amd64-disc1.iso,选中。然后点击“下一页”。

    点击“完成”。

    调整虚拟机

    点击“设置”

    请务必关闭安全启动。

    请勾选“来宾服务”。作用见参考文献。

    可选择关闭“使用自动检查点”,即关闭自动快照。作用见参考文献。

    安装 FreeBSD

    启动虚拟机。

    开始安装。

    安装完成。

    测试桌面

    鼠标、键盘均表现正常,可无缝切换。但是桌面大小无法调整。

    必须先关机才能删除虚拟机。

    参考文献

    • ,微软官方教程,还有多种方法可选

    • ,对各种 Hyper-V 服务进行了详细说明

    6.11 CDE

    CDE 是 Common Desktop Environment(通用桌面环境)的缩写。是一款历史悠久的桌面环境,常被用于 Unix 商业发行版。

    安装软件

    • 使用 pkg 安装:

    • 或者使用 Ports 安装:

    • 解释:

    包名
    作用说明

    查看安装后信息

    配置服务与文件

    • 配置服务

    • 配置可登录桌面的用户

    • 为了 startx

    • 将以下内容添加到 /etc/inetd.conf:

    • 将以下内容添加到 /etc/services:

    中文配置

    编辑 /etc/login.conf:找到 default:\ 这一段,把 :lang=C.UTF-8 修改为 :lang=zh_CN.UTF-8。

    刷新数据库:

    桌面欣赏

    每次启动时都会在这里卡上几分钟。

    故障排除与未竟事宜

    无法设置中文环境

    (似乎日历是中文)

    根据源码 ,不存在中文支持。但是根据 ,其明显存在简体中文支持,疑似在开源中弄丢了,或者 Solaris 是个分支未合并。已经反馈至 。

    参考文献

    • ,Ports 详情

    • ,详细配置可参考此处

    • ,CDE 项目官方 WiKi

    5.8 使用源代码更新 FreeBSD

    基本思路就是获取 FreeBSD 的源代码,然后进行编译安装。可以使用 git 直接拉取代码,也可以直接下载 ISO 镜像里面的 txz 压缩文件或者去 github 上下载当前 FreeBSD 项目的 zip 压缩包。

    编译流程见 Handbook 即可。非常地简单。

    svn 到 git 的迁移

    FreeBSD 项目在 2021 年从 SVN 全面迁移到了 Git,即 https://git.freebsd.org

    所以获取源代码的方式也产生了变化,不再使用 svn 了。

    从 Git 获取源代码

    安装 Git

    或者:

    Git 代理设置方法

    • 如果使用的是 sh, bash, zsh:

    设置:

    取消:

    Git 拉取源代码

    拉取 CURRENT

    通过 FreeBSD 官方存储库拉取:

    • --depth 1:浅克隆,仅拉取最新的提交,不拉取日志及历史记录

    或者通过 GitHub 拉取(GitHub 是 FreeBSD.org 上 src 的镜像,每 10 分钟同步一次)

    拉取某 RELEASE

    通过 FreeBSD 官方存储库拉取:

    • --branch releng/14.3:指定拉取分支(FreeBSD RELEASE 的版本)

    • --single-branch:仅克隆一个分支,除该已克隆的单一分支外不含任何其他引用(refs)。

    或者通过 GitHub 拉取:

    参考文献

    故障排除与未竟事宜

    • Git:fatal: unable to update url base from redirection

    使用 FreeBSD 源却没加 .git

    Gitup

    或者:

    故障排除与未竟事宜

    • Git:fatal: unable to access 'https://git.FreeBSD.org/src.git/': SSL certificate problem: certificate is not yet valid

    可能是时间不对造成的,同步时间:

    从压缩包获取源代码(方便但非最新)

    该方法比较简单快捷。

    以 FreeBSD 14.3-RELASE 为例:

    为何要解压到 /?

    因为 / 会将源代码解压到 /usr/src。如果把上面的路径改成 /usr/src,会把源代码解压到 /usr/src/usr/src。因为他这个压缩包是带路径压缩的。

    技巧

    如果速度慢可以切换到

    开始编译

    故障排除与未竟事宜

    • Conflicts remain from previous update, aborting.

    需要 解决冲突

    技巧

    与绝大多数现代 Linux 不同,(OpenBSD)上的 vi 是 (原版 ex/vi 的再实现),并不是指向任何 vim 的链接符号。基本上没人会用,一般亦无学习的必要,故有必要换成别的文本编辑器。

    ZFS 相关升级请参见 ZFS 一节

    参考资料

    • 。

    8.11 Wine

    Wine 是一款能在 Unix 上运行 Microsoft Windows 程序的软件。

    警告

    以下内容仅在物理机测试通过。因为需要 drm 驱动,故虚拟机无法正常通过(会报错不支持 3D,无法运行)。虚拟机还会报错处理器不支持特定指令集。

    安装 Wine

    解释:

    程序
    说明

    注意

    必须安装 wine-gecko,否则 winecfg 会报错找不到 IE。

    技巧

    不要使用 Ports 安装,因为那样不会自动构建对应版本的 32 位程序。

    切换到普通用户,继续安装 wine:

    注意

    这一步不做,不支持 32 位 Windows 程序。其中 mesa-dri 提供了显卡硬解。

    配置显卡硬解

    参照显卡相关章节配置显卡硬解。

    配置 Wine

    以下均在普通用户下操作:

    技巧

    WINEPREFIX 是一组目录集合,存放了 Wine 的相关配置文件,以及模拟的 Windows 系统文件。通过修改 WINEPREFIX 可以实现多个配置共存。

    如果报错,或者没反应,则:

    然后

    或者

    测试运行 WinSCP(32 位 Windows 程序)

    技巧

    不需要为 32 位程序单独创建 WINEPREFIX。目前 32 位、64 位程序可以存在于同个 WINEPREFIX 中。

    因为大多数用户需要运行 32 位的 Windows 程序,我们检查一下我们的例子是否满足需求:

    使用 Wine 安装并运行 WinSCP:

    技巧

    安装成功后,会在系统生成对应的图标,经过测试,双击即可正常运行。

    Winetricks

    Winetricks 是个脚本(近两万行的脚本),封装了许多有关 Wine 的实用功能。比如安装卸载软件,安装字体等。可以规避许多常见的 Wine 问题。

    安装 Winetricks

    • 使用 pkg 安装:

    • 还可以使用 Ports 安装:

    使用 Winetricks 安装中文字体

    注意

    下载字体可能需要链接到 Github,你需要保障你的网络正常。

    运行 Winetricks:

    即可。

    技巧

    不用理会他在终端输出的有关 64 位和 32 位 Wine 的警告信息:

    warning: You are using a 64-bit WINEPREFIX. Note that many verbs only install 32-bit versions of packages. If you encounter problems, please retest in a clean 32-bit WINEPREFIX before reporting a bug.

    我们安装最后两个中文字体试一下。安装后大多数程序都能正常显示中文了。

    故障排除与未竟事宜

    Wine 界面设置中文

    待解决

    9.1 音频设备配置

    警告

    Port KDE 6 默认通过 PulseAudio 在全局占用音频,请勿手动切换到其他音频后端(如 PipeWire),以免造成不必要的麻烦。

    声音设置

    声卡驱动 snd_hda 可默认加载,当默认内核未包含时需手动加载对应内核模块。

    用以下命令查看当前声卡设备:

    后面带有 default 是 oss 默认设备。如果软件的音频使用的 oss 且输出是默认的,音频就会从这个设备输出。

    可以通过调整内核参数,使上面命令输出更为详细的声卡信息:

    FreeBSD 大部分软件的音频输出驱动为 oss。有些默认是 pulseaudio(如 firefox),这些软件的设置看最后的提示。firefox 可以通过 about:support 页查看使用的音频后端。firefox 支持各种音频后端,能根据系统安装的后端自动按顺序选择,亦可手动选择。

    下列命令可以修改输出的设备。最后的数字是对应 pcm 后面的数字。

    上面 pcm6(“pcm6: <Realtek ALC892 (Rear Digital)> (play)”)是数字输出接口。一般集成声卡的模拟接口采样率最高 48kHz,数字接口最高采样率可以达到 192kHz。如果有数字输出,但面板上没有接口,而主板上有 S/PDIF 接口的插针,加个 S/PDIF 的挡板(十分便宜,一般是 S/PDIF 口和同轴口,两个输出口),接上线即可使用。

    man 示例

    以下节选自 。

    均将相关行写入 /boot/device.hints。

    注意

    cad0 应以 cat /dev/sndstat 实际输出为准。

    示例 1

    这会交换 line-out(线路输出)和扬声器的功能。因此 pcm0 设备会把声音输出到线路输出和耳机插孔。当耳机插入时,线路输出会自动静音。

    • pcm0 的录音输入来自两个外置麦克风和线路输入插孔。

    • pcm1 的播放则会输出到内置扬声器。

    示例 2

    这样会把耳机和其中一个麦克风分离到独立的设备。

    • pcm0 会把声音播放到内置扬声器和线路输出插孔,并且在耳机插入时自动静音扬声器。

    • pcm0 的录音输入来自一个外部麦克风和线路输入插孔。

    • pcm1 设备则完全用于前面板的耳机(耳机 + 麦克风)。

    示例 3

    这样会得到 4 个独立设备:

    • pcm0(线路输出和线路输入)

    • pcm1(耳机和麦克风)

    • pcm2(通过重新定义后置麦克风插孔作为额外线路输出)

    • pcm3(内置扬声器)

    示例 4

    这样会得到 2 个设备:

    • pcm0:用于 5.1 声道播放,通过 3 个后置接口(线路输出 + 重新定义的麦克风和线路输入),以及前面板的耳机(耳机 + 麦克风)。

    • pcm1:用于内置扬声器播放。

    当耳机插入时,后置接口会自动静音。

    实例

    此设备不是 AUX 口(不是扬声器 + 麦克风二合一)。当前仅插入了一台音响。在默认情况下无声音。

    可通过命令实时调试音频(均立刻生效,但重启失效):

    • as=1:把两者放到同一个关联里。

    • seq=0:主输出(扬声器)。

    • seq=15:耳机,插入耳机时会自动静音扬声器。

    此时发现已经有声音了,编辑 /boot/device.hints,加入以下若干行,将其固化为永久设置:

    oss mixer

    GUI 环境
    名称

    故障排除与未竟事项

    部分声卡需要自行编译内核,请参考 。

    但是 oss 有些缺点,使用 obs-studio 无法录制 oss 输出。只能录制 oss 输入。看官方论坛里,可以用 virtual_oss 模拟一个设备实现(使用 virtual_oss 的参数 -M 进行声道路由,即把 oss 输出重定向到 oss 输入)。

    但是 obs-studio 可以录制 pulseaudio 输出的音频。(默认的“桌面音频”这个输入源,没有说明应该是 pulseaudio 输出,故 oss 输出无法通过此录音)

    所以有些软件可以使用 pulseaudio 作为输出。使用 pulseaudio 的软件的音频输出,不受上面的命令控制音频输出设备。pulseaudio 会根据自己的设置把音频送到对应设备,所以需要使用 pulseaudio 混音器控制。

    在 kde5 下面自带的音频控制器,切换设备就是控制的 pulseaudio。

    官方打包好的多媒体软件有些是支持 pulseaudio 但是这些软件中的大部分对应的编译选项没有打开。如果需要录制软件的音频输出,可以自行打开 ports 的编译选项自己编译。在软件中设置 pulseaudio 作为音频驱动输出就可以了。

    AMD CPU mode 2 reset

    已知 APU 上使用 drm-kmod,打开空播放器可能会触发 mode 2 reset 报错即 driver reset,进而触发 Kernel Panic。

    不要打开空的播放器窗口,或者打开空的音频播放器窗口。

    音频文件要在终端里用命令行播放。

    由于样本量不足,尚未进行 Bug 报告。

    6.13 主题美化

    FreeBSD 安装桌面环境后,很多时候扑面而来的,是简单朴素的色调。这种未加修饰的设定,可能一时会让新用户无法接受。为了系统的美观,我们将在本节尝试添加 主题 和 图标。

    注意

    本节仅涉及了 GTK 库的桌面主题,囊括了 Gnome、XFCE、MATE、Cinnamon 和 LXDE 等桌面环境。

    以下仅收录了部分图标和主题,想要获取更多资源,可访问 FreshPorts。

    主题

    • matcha 主题: # pkg install matcha-gtk-themes

    • Qogir 主题: # pkg install qogir-gtk-themes

    • Pop 主题:# pkg install pop-gtk-themes

    图标

    • papirus 图标: # pkg install papirus-icon-theme

    • Qogir 图标: # pkg install qogir-icon-themes

    • Pop 图标: # pkg install pop-icon-theme

    KDE 主题美化

    我们要安装的是 主题。

    1. 下载主题源码包: git clone https://github.com/vinceliuice/WhiteSur-kde

    2. 进入主题包目录: cd WhiteSur-kde

    3. 修改 shebang: ee install.sh,修改第一行为 #!/usr/local/bin/bash,然后保存。

    Gnome 主题美化

    同样我们要安装的是 主题。

    1. 下载主题源码包: git clone https://github.com/vinceliuice/WhiteSur-gtk-theme

    2. 进入主题包目录: cd WhiteSur-gtk-theme

    3. 修改 shebang: ee install.sh,修改第一行为 #!/usr/local/bin/bash,然后保存。

    1. 下载图标: git clone https://github.com/vinceliuice/WhiteSur-icon-theme

    2. 进入软件目录: cd WhiteSur-icon-theme

    3. 修改 shebang: ee install.sh,修改第一行为 #!/usr/local/bin/bash,然后保存。

    1. 下载光标: git clone https://github.com/vinceliuice/McMojave-cursors

    2. 进入软件目录: cd McMojave-cursors

    3. 修改 shebang: ee install.sh,修改第一行为 #!/usr/local/bin/bash,然后保存。

    背景图片

    思考题

    试着按照下面的步骤,在终端安装 :

    系统更新提示 freebsd-update-notify

    技巧

    FreeBSD 上的 KDE6 自带类似功能,无需安装 freebsd-update-notify,本教程仅做示例。

    freebsd-update-notify 可以自动检测更新 FreeBSD 系统和 pkg 包。

    安装 freebsd-update-notify

    或

    配置 freebsd-update-notify

    配置文件位于 /usr/local/etc/freebsd-update-notify/freebsd-update-notify.conf:

    默认配置更新间隔太久,可以改成:

    图片示例

    注意

    截图为手动执行示例,实际上程序可以在后台自动运行,无需手动运行验证。若无法再现,可以尝试将 freebsd-update-notify.conf 中两个值都改为 0,再手动以 root 权限执行 usr/local/libexec/freebsd-update-notify。

    日志位于 /var/log/freebsd-update-cron、/var/log/freebsd-update-notify。若要反馈故障,请使用英文提交 。

    9.3 打印机

    CUPS 全称 Common Unix Printing System(通用 Unix 打印系统),支持各种打印协议与打印机设备,并且能将打印机以 IPP 或 SMB 协议共享到网络上。

    打印机通过 USB 接入至打印服务器(即 FreeBSD)。打印服务器将打印机共享到内网里,供内网使用。内网中的其他电脑通过发送广播包,可自动地查询内网里有哪些打印机。

    本文于 Android、苹果、Debian 测试通过,均可正常发现这台打印服务器。

    安装 CUPS(通用 Unix 打印系统)

    • 使用 pkg 安装:

    • 或者使用 Ports 安装:

    技巧

    若使用桌面环境,请在 Ports 选项界面中选中 x11,可在系统中生成添加和配置打印机的应用图标。

    解释:

    软件包
    作用说明

    技巧

    本文将 FreeBSD 变成了打印服务器。若 FreeBSD 只是想作为打印客户端、用 USB 连接打印机进行打印,而不需要共享,那么 avahi-app 和 dbus 就不是必需的

    注意

    若打印机不支持免驱动打印,则需要安装对应的驱动

    添加服务

    启动服务后,此时,其他设备应该能够自动发现内网中的共享打印机了。尝试打印测试页,测试能否正常打印。

    向局域网共享打印服务

    若不设置该允许局域网访问,则除了 localhost 外的机器无法使用。


    编辑 /usr/local/etc/cups/cupsd.conf:

    • 在现有的

    后面添加(IP 为你 FreeBSD 的 IP 地址):

    • 再把

    改为

    如此 CUPS 管理页面即可从局域网内远程访问。

    添加打印机

    在浏览器中输入 http://IP:631,该地址为该打印机的管理页面。

    点击 Administration-Add Printer,根据提示创建打印机。

    中途会提示输入账号密码,使用 root 或者 wheel 组内的用户登录(输入他们在 FreeBSD 系统中的账户密码)即可。

    点击 Add Printer,添加打印机。

    本文中使用的打印机是 Brother HL L3228CDW。

    在创建时,请务必勾选 Share This Printer。

    选择型号。

    如果打印机免驱,Model 请选择 Generic IPP Everywhere Printer (en);否则需要安装相关驱动,并选择对应型号。

    成功添加打印机!

    KDE 桌面添加打印机

    无需额外操作,需要打印的设备一般可自动发现打印服务器,并自动将其加入打印机列表,在打印文件的时候即可选择。比如 KDE 桌面:

    打印测试页

    从内网的 Debian 机器打印测试页:

    故障排除与未竟事项

    • 打印机免驱问题

    要确认打印机是否免驱,可以在 查询。以本文使用打印机为例:

    惠普 Hp 打印机安装 Port print/hplip 即可。

    • FreeBSD 打印的测试页是什么样的?

    待测试。

    绪论

    本书定位

    本书涉及了 FreeBSD 15.0-RELEASE、14.3-RELEASE 和 13.5-RELEASE 的安装和日常使用(并尽量向下兼容),还包含一些 16.0-CURRENT 的内容。

    主要面向 x86-64(amd64)、AArch64(arm64),并尽可能多的支持其他体系平台。

    Windows 测试环境则为 Windows 11,并尽量使用较新更新通道的 Windows update。

    6.4 GNOME

    警告

    目前因为 ,目前 gdm 无法正常使用,会卡在登录界面,startx 正常。

    虚拟机正常。

    GNOME 过去曾是 GNU 项目,旨在开发一套功能齐全的桌面环境。现在已经被红帽公司完全控制。值得注意的是,在英语单词中,GNOME 中的 G 并不发音(/ˈnoʊm/)。

    安装

    6.6 Xfce

    Xfce 旨在开发一款轻量级但功能齐全的桌面。Xfce 的 Logo 是只 ,曾有人反馈 bug 称因 Xfce 屏幕壁纸是只老鼠 🐀 导致自己的电脑屏幕被猫 🐈 抓坏了()。

    安装 xfce4

    • 通过 pkg 安装

    3.8 使用 QEMU 安装 RISC-V FreeBSD(基于 x86 Windows)

    Qemu 是一款纯软件模拟的开源虚拟机,支持模拟不同的体系结构。

    本文基于 Windows 11 24H2(物理机)X86-64,FreeBSD 14.2 RELEASE RISC-V(虚拟机),qemu 20241220。

    Qemu

    Qemu 下载地址:

    ,点击最下方倒数第二个文件即可。写作文本时,为 qemu-w64-setup-20241220.exe。大小为 174M。

    下载后在 Windows 上安装 Qemu。

    1.4 加州大学伯克利分校和“Fiat Lux”(要有光)

    Westward the course of empire takes its way; 帝国一路向西;

    The four first acts already past. 前四幕已经过去。

    A Fifth shall close the drama with the day; 第五幕将在日落时分结束;

    Time's noblest offspring is the last 时间最崇高的后代是最后一幕。

    ——George Berkeley 乔治·贝克莱

    本文将聚焦于加州大学伯克利分校的校训“Fiat Lux”(Let There Be Light,要有光),Fiat Lux 还可以翻译为“让世界充满光明”。加州大学伯克利分校的许多奖项都以“Fiat Lux”为名。

    加州大学伯克利分校建立于 1868 年,是一所公立大学。在这一年,代表中国近代第一所国立大学的北京大学校长蔡元培出生了,与 Fiat Lux 提倡的以个人带动社会进步的观点类似,蔡元培认为“要有良好的社会,必先有良好的个人,要有良好的个人,就要先有良好的教育。”他被尊为北大“永远的校长”;日本开始明治维新,带领日本迈入新时代,从此日本进入了现代化,光影随行,这也为日本将来的侵略战争埋下了种子。

    Fiat Lux 出自拉丁文圣经“1.3:Dixitque Deus : Fiat lux. Et facta est lux.”(圣经武加大译本)。“And God said, " 1.3: Let there be light, and there was light.”(NIV 版圣经)“1.3:神说、要有光、就有了光。”(《和合本圣经》)

    可见,是先有的光,才有的世界。在基督教神学中,上帝先于世人创造了光,如同真理之光照耀着世人,亦是人类理性的来源。

    9.5 音频播放器

    Audacious

    安装 Audacious

    8.4 五笔输入法

    IBus

    需要先安装配置 IBus,从略。

    安装 Rime 输入法

    或者:

    8.2 Fcitx 输入法框架

    输入法框架和输入法本身是两码事,切不可混为一谈,输入法依赖输入法框架。即使在 Windows 上亦如此:Windows 目前其使用 。

    fcitx 即“A flexible input method framework(一款灵活的输入法框架)”小企鹅输入法。关于其英文命名来源参见 。

    技巧

    视频教程见

    注意

    在 FreeBSD-CURRENT 中可能会出现许多不可预料的怪异 bug:fcitx5 诊断信息英文乱码,输入法显示出奇怪的汉字,fcitx5-qt5 环境不能正常加载……

    # pkg install budgie wqy-fonts xorg
    # cd /usr/ports/x11/xorg && make install clean
    # cd /usr/ports/x11/budgie && make install clean
    # cd /usr/ports/x11-fonts/wqy/ && make install clean
    In order to launch your session. Copy 'xprofile' into your home directory:
    # 为了启动你的会话,把 'xprofile' 文件复制到你的主目录:
    
      cp /usr/local/share/examples/budgie/xprofile ~/.xprofile
    # 执行以上命令,将示例配置文件复制到主目录下的 .xprofile
    
    Create or edit /var/db/AccountsService/users/YOURLOGIN file:
    # 创建或编辑 /var/db/AccountsService/users/YOURLOGIN 文件:
    
      [User]
      # 用户配置部分
    
      Language=fr_FR.UTF-8 # e.g. for French users
      # 语言设置,例如这里是法语用户
    
      Session=budgie-desktop
      # 会话设置为 budgie-desktop
    
      SystemAccount=false
      # 设置为 false,表示这是普通用户而不是系统账户
    
    Replace YOURLOGIN by your login.
    # 将 YOURLOGIN 替换为你的实际用户名。
    $ cp /usr/local/share/examples/budgie/xprofile ~/.xprofile
    # mkdir -p /var/db/AccountsService/users/
    # ee /var/db/AccountsService/users/ykla
    [User]
    Language=zh_CN.UTF-8
    Session=budgie-desktop
    SystemAccount=false
    # service dbus enable
    # service lightdm enable
    # cap_mkdb /etc/login.conf
    # pkg install rpm4
    # cd /usr/ports/archivers/rpm4/ 
    # make install clean
    # fetch https://dldir1.qq.com/qqfile/qq/QQNT/Linux/QQ_3.2.17_250521_x86_64_01.rpm # 写作本文时链接如此,请自行获取最新链接
    root@ykla:/ # cd /compat/linux/
    root@ykla:/compat/linux # rpm2cpio < /home/ykla/QQ_3.2.17_250521_x86_64_01.rpm | cpio -id # 注意把 QQ 所在路径改成你自己的
    ./usr/share/icons/hicolor/512x512/apps/qq.png: Cannot extract through symlink usr/share/icons/hicolor/512x512/apps/qq.png
    1055863 blocks
    # /compat/linux/usr/bin/bash # 切换到兼容层的 shell
    bash-5.1# ldd /opt/QQ/qq 
    	linux-vdso.so.1 (0x00007fffffffe000)
    	libffmpeg.so => /opt/QQ/libffmpeg.so (0x000000080c000000)
    	....省略一部分...
    # fetch https://dl.rockylinux.org/pub/rocky/9/AppStream/x86_64/os/Packages/i/ibus-gtk3-1.5.25-6.el9.x86_64.rpm
    # fetch https://dl.rockylinux.org/pub/rocky/9/AppStream/x86_64/os/Packages/i/ibus-libs-1.5.25-6.el9.x86_64.rpm
    # cd /compat/linux 
    # rpm2cpio < /home/ykla/ibus-gtk3-1.5.25-6.el9.x86_64.rpm | cpio -id
    # rpm2cpio < /home/ykla/ibus-libs-1.5.25-6.el9.x86_64.rpm | cpio -id
    root@ykla:/compat/linux #  /compat/linux/usr/bin/bash # 切换到 Rockylinux 的 bash
    bash-5.1# gtk-query-immodules-3.0-64 --update-cache   # 刷新缓存
    $ /compat/linux/opt/QQ/qq --no-sandbox  --in-process-gpu
    # chroot /compat/arch/ /bin/bash #进入 Arch 兼容层
    # passwd #为 Arch 的 root 设置一个密码
    # passwd test #为 Arch 的 test 设置一个密码,上述脚本已经创建过该用户了!不设置密码无法正常使用 aur。
    
    # chroot /compat/arch/ /bin/bash #进入 Arch 兼容层
    # su test # 此时位于 Arch 兼容层!切换到普通用户才能使用 aur
    $ yay -S linuxqq # 此时位于 Arch 兼容层!此时用户为 test
    $ exit # 此时位于 Arch 兼容层!退回到 root 用户
    # # 此时位于 Arch 兼容层!此时用户恢复为 root
    # /opt/QQ/qq --no-sandbox --in-process-gpu  # 此时位于 Arch 兼容层!
    # chroot /compat/ubuntu/ /bin/bash # 进入 Ubuntu 兼容层
    # wget https://dldir1v6.qq.com/qqfile/qq/QQNT/Linux/QQ_3.2.18_250626_amd64_01.deb # 此时位于 Ubuntu 兼容层。下载 QQ
    # apt install ./QQ*.deb  # 此时位于 Ubuntu 兼容层。安装 QQ
    # apt install libgbm-dev libasound2-dev #此时位于 Ubuntu 兼容层
    # ldconfig # 此时位于 Ubuntu 兼容层。刷新动态链接库
    # /bin/qq --no-sandbox --in-process-gpu # 此时位于 Ubuntu 兼容层
    # export LANG=zh_CN.UTF-8 
    # export LC_ALL=zh_CN.UTF-8 
    $ rm ~/.config/QQ/crash_files/*
    $ chmod a-wx ~/.config/QQ/crash_files/
    # pw groupmod video -m 你的用户名
    # pkg ins seatd
    # cd /usr/ports/sysutils/seatd/ 
    # make install clean
    # service dbus enable
    # service seatd enable
    # service sddm enable
    #! /bin/sh
    export LANG=zh_CN.UTF-8 # 设置中文,Fcitx 需要
    export LANGUAGE=zh_CN.UTF-8 # 设置中文,Fcitx 需要
    export LC_ALL=zh_CN.UTF-8 # 设置中文,Fcitx 需要
    export XMODIFIERS='@im=fcitx' # Fcitx 需要
    /usr/local/bin/ck-launch-session /usr/local/lib/libexec/plasma-dbus-run-session-if-needed /usr/local/bin/startplasma-wayland # 启动桌面的命令
    $ chmod 755 ~/kde.sh
    $ sh ~/kde.sh
    # echo $XDG_SESSION_TYPE
    # mkdir -p /root/.config/autostart/ # 创建自启动目录
    # cp /usr/local/share/applications/org.fcitx.Fcitx5.desktop /root/.config/autostart/ # 自动启动 fcitx
    # pkg install xorg lightdm slick-greeter cinnamon wqy-fonts xdg-user-dirs
    # cd /usr/ports/x11/xorg/ && make install clean
    # cd /usr/ports/x11/cinnamon/ && make install clean 
    # cd /usr/ports/x11-fonts/wqy/ && make install clean 
    # cd /usr/ports/x11/lightdm/ && make install clean 
    # cd /usr/ports/x11/slick-greeter/ && make install clean 
    # cd /usr/ports/devel/xdg-user-dirs/ && make install clean 
    exec cinnamon-session
    proc /proc procfs rw 0 0
    # service dbus enable 
    # service lightdm enable
    # cap_mkdb /etc/login.conf
    # pkg install xorg bspwm sxhkd rofi kitty feh picom polybar dunst lightdm lightdm-gtk-greeter wqy-fonts xdg-user-dirs
    # cd /usr/ports/x11/xorg/ && make install clean
    # cd /usr/ports/x11-wm/bspwm/ && make install clean
    # cd /usr/ports/x11/sxhkd/ && make install clean
    # cd /usr/ports/x11/rofi/ && make install clean
    # cd /usr/ports/x11/kitty/ && make install clean
    # cd /usr/ports/graphics/feh/ && make install clean
    # cd /usr/ports/x11-wm/picom/ && make install clean
    # cd /usr/ports/x11/polybar/ && make install clean
    # cd /usr/ports/sysutils/dunst/ && make install clean
    # cd /usr/ports/x11-fonts/wqy/ && make install clean
    # cd /usr/ports/x11/lightdm/ && make install clean
    # cd /usr/ports/x11/lightdm-gtk-greeter/ && make install clean
    # cd /usr/ports/devel/xdg-user-dirs/ && make install clean
    # service dbus enable
    $ mkdir ~/.config
    $ mkdir ~/.config/bspwm
    $ mkdir ~/.config/sxhkd
    $ cp /usr/local/share/examples/bspwm/bspwmrc ~/.config/bspwm
    $ cp /usr/local/share/examples/bspwm/sxhkdrc ~/.config/sxhkd
    $ chmod +x ~/.config/bspwm/bspwmrc
    super + Return
        kitty
    
    super + @space
        rofi -show drun
    $ mkdir ~/.config/polybar 
    $ cp /usr/local/etc/polybar/config.ini ~/.config/polybar
    #!/bin/sh
    killall -q polybar
    polybar example 2>&1 | tee -a /tmp/polybar.log
    $ chmod +x ~/.config/polybar/launch.sh
    $ echo "picom &" >> ~/.config/bspwm/bspwmrc
    $ echo "\$HOME/.config/polybar/launch.sh" >> ~/.config/bspwm/bspwmrc
    $ echo "dunst &" >> ~/.config/bspwm/bspwmrc
    $ echo "exec bspwm" >> ~/.xinitrc
    # mkdir /usr/local/share/xsessions
    # ee /usr/local/share/xsessions/bspwm.desktop # 写入以下内容
    
    [Desktop Entry]
    Name=bspwm
    Comment=Log in with bspwm
    Exec=/usr/local/bin/bspwm
    Type=Application
    # service lightdm enable
    $ feh --bg-center "$HOME/.local/share/wallpapers/wallpaper.jpg"
    $HOME/.fehbg &
    # pkg install lumina xorg lightdm lightdm-gtk-greeter wqy-fonts xdg-user-dirs
    # cd /usr/ports/x11/xorg/ && make install clean
    # cd /usr/ports/x11/lumina/ && make install clean
    # cd /usr/ports/x11-fonts/wqy/ && make install clean
    # cd /usr/ports/x11/lightdm/ && make install clean
    # cd /usr/ports/x11/lightdm-gtk-greeter/ && make install clean
    # cd /usr/ports/devel/xdg-user-dirs/ && make install clean 
    # service dbus enable
    # service lightdm enable
    exec lumina-desktop
    lightdm_env="LC_MESSAGES=zh_CN.UTF-8" 
    # cap_mkdb /etc/login.conf
    root@ykla:/home/ykla # gpart show
    =>     9  639659  cd0  MBR  (1.2G)
           9  639659       - free -  (1.2G)
    
    =>     9  639659  iso9660/14_2_RELEASE_AMD64_CD  MBR  (1.2G)
           9  639659                                 - free -  (1.2G)
    
    =>       40  629145520  nda0 GPT  (300G)
             40     532480    1  efi  (260M)
         532520       1024    2  freebsd-boot  (512K)
         533544        984       - free -  (492K)
         534528  436207616    3  freebsd-swap  (208G)
      436742144  192401408    4  freebsd-zfs  (92G)
      629143552       2008       - free -  (1.0M)
      
    root@ykla:/home/ykla # swapinfo -mh
    Device              Size     Used    Avail Capacity
    /dev/nda0p3          208G       0B     208G     0%
    # Device                Mountpoint      FStype  Options         Dump    Pass#
    /dev/gpt/efiboot0               /boot/efi       msdosfs rw              2       2
    #/dev/nda0p3             none    swap    sw              0       0
    root@ykla:/home/ykla # gpart show
    =>       34  629145533  nda0  GPT  (300G)
             34          6        - free -  (3.0K)
             40     532480     1  efi  (260M)
         532520       1024     2  freebsd-boot  (512K)
         533544        984        - free -  (492K)
         534528      32768     3  ms-reserved  (16M)
         567296  417953792     4  ms-basic-data  (199G)
      418521088   16777216     5  freebsd-swap  (8.0G)
      435298304    1441792     6  ms-recovery  (704M)
      436740096       2048        - free -  (1.0M)
      436742144  192401408     7  freebsd-zfs  (92G)
      629143552       2015        - free -  (1.0M)
    
    root@ykla:/home/ykla # swapon /dev/nda0p5
    # Device                Mountpoint      FStype  Options         Dump    Pass#
    /dev/gpt/efiboot0               /boot/efi       msdosfs rw              2       2
    /dev/nda0p5             none    swap    sw              0       0
    root@ykla:/home/ykla # swapinfo -mh
    Device              Size     Used    Avail Capacity
    /dev/nda0p5         8.0G       0B     8.0G     0%
    root@ykla:/home/ykla # zpool list
    NAME    SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
    zroot  91.5G   922M  90.6G        -         -     0%     0%  1.00x    ONLINE  -
    root@ykla:/home/ykla # zfs list
    NAME                 USED  AVAIL  REFER  MOUNTPOINT
    zroot                922M  87.8G    96K  /zroot
    zroot/ROOT           919M  87.8G    96K  none
    zroot/ROOT/default   919M  87.8G   919M  /
    zroot/home           224K  87.8G    96K  /home
    zroot/home/ykla      128K  87.8G   128K  /home/ykla
    zroot/tmp            104K  87.8G   104K  /tmp
    zroot/usr            288K  87.8G    96K  /usr
    zroot/usr/ports       96K  87.8G    96K  /usr/ports
    zroot/usr/src         96K  87.8G    96K  /usr/src
    zroot/var            668K  87.8G    96K  /var
    zroot/var/audit       96K  87.8G    96K  /var/audit
    zroot/var/crash       96K  87.8G    96K  /var/crash
    zroot/var/log        188K  87.8G   188K  /var/log
    zroot/var/mail        96K  87.8G    96K  /var/mail
    zroot/var/tmp         96K  87.8G    96K  /var/tmp
    # pkg install mate xorg wqy-fonts lightdm slick-greeter xdg-user-dirs
    # cd /usr/ports/x11/mate/ && make install clean
    # cd /usr/ports/x11/xorg/ && make install clean
    # cd /usr/ports/x11-fonts/wqy/ && make install clean
    # cd /usr/ports/x11/lightdm/ && make install clean 
    # cd /usr/ports/x11/slick-greeter/ && make install clean 
    # cd /usr/ports/devel/xdg-user-dirs/ && make install clean 
    # service dbus enable 
    # service lightdm enable 
    exec mate-session
    # cap_mkdb /etc/login.conf
    [Greeter]
    # 设置登录界面的背景图片路径
    background=/home/ykla/cat.png
    
    # 是否绘制用户自定义的背景图片
    draw-user-backgrounds=false
    
    # 设置 GTK+ 主题名称
    theme-name=Dracula
    
    # 设置图标主题名称
    icon-theme-name=Adwaita
    
    # 是否显示主机名
    show-hostname=true
    
    # 设置字体名称和大小
    font-name=Sans 12
    
    # 是否显示虚拟键盘选项
    show-keyboard=true
    
    # 是否显示电源管理选项(如关机、重启)
    show-power=true
    
    # 是否显示时钟
    show-clock=true
    
    # 是否显示退出选项
    show-quit=true
    # pkg install windowmaker wmakerconf xorg lightdm lightdm-gtk-greeter wqy-fonts xdg-user-dirs
    # cd /usr/ports/x11/windowmaker/ && make install clean
    # cd /usr/ports/x11-wm/wmakerconf/ && make install clean 
    # cd /usr/ports/x11/xorg/ && make install clean 
    # cd /usr/ports/x11/lightdm/ && make install clean 
    # cd /usr/ports/x11/lightdm-gtk-greeter/ && make install clean 
    # cd /usr/ports/x11-fonts/wqy/ && make install clean
    # cd /usr/ports/devel/xdg-user-dirs/ && make install clean 
    exec wmaker
    # service dbus enable
    # service lightdm enable
    proc           /proc       procfs  rw  0   0
    # cap_mkdb /etc/login.conf
    # /usr/local/GNUStep/Applications/WPrefs.app/WPrefs
    # pkg install xorg cde wqy-fonts xdg-user-dirs
    # pkg ins wine wine-gecko wine-mono
    $ cat /dev/sndstat
    Installed devices:
    pcm0: <NVIDIA (0x0083) (HDMI/DP 8ch)> (play)
    pcm1: <NVIDIA (0x0083) (HDMI/DP 8ch)> (play)
    pcm2: <NVIDIA (0x0083) (HDMI/DP 8ch)> (play)
    pcm3: <NVIDIA (0x0083) (HDMI/DP 8ch)> (play)
    pcm4: <Realtek ALC892 (Rear Analog 5.1/2.0)> (play/rec) default
    pcm5: <Realtek ALC892 (Front Analog)> (play/rec)
    pcm6: <Realtek ALC892 (Rear Digital)> (play)
    No devices installed from userspace.
    # pkg install cups cups-filters

    picom

    窗口合成器,添加窗口透明,阴影,动效等

    polybar

    面板,显示系统信息、应用图标等

    dunst

    通知管理器

    lightdm

    LightDM 显示管理器,提供图形登录界面

    lightdm-gtk-greeter

    LightDM 的 GTK+ 登录界面插件,缺少将无法启动 LightDM

    wqy-fonts

    文泉驿中文字体

    xdg-user-dirs

    管理用户目录,如“桌面”、“下载”等

    xdg-user-dirs

    管理用户目录,如“桌面”、“下载”等

    xorg

    X Window 系统

    cde

    CDE 提供传统的桌面环境

    wqy-fonts

    文泉驿中文字体

    xdg-user-dirs

    管理用户目录,如“桌面”、“下载”等。

    https://sourceforge.net/p/cdesktopenv/code/ci/master/tree/cde/imports/motif/localized/
    简体中文 Solaris 用户指南
    Missing Simplified Chinese locale support under cde/imports/motif/localized
    cde Common Desktop Environment
    Setting up Common Desktop Environment for modern use
    CDE - Common Desktop Environment Wiki
    dtlogin
    FreeBSD 安装 CDE
    FreeBSD 安装 CDE
    终端
    Submitting GitHub Pull Requests to FreeBSD
    https://mirrors.ustc.edu.cn/freebsd/releases/amd64/14.3-RELEASE/src.txz
    FreeBSD
    nvi
    FreeBSD 手册
    etcupdate -- manage updates to system files not updated by installworld

    wine

    Wine 主程序

    wine-gecko

    Wine 项目基于火狐的 Gecko 浏览器内核实现的 IE

    wine-mono

    mono 提供了对 .NET 4.8 及更低版本框架的支持

    kde5

    audio/dsbmixer

    gtk

    audio/gtk-mixer

    非图形化

    audio/mixertui

    man snd_hda
    Open Sound System for FreeBSD
    Flat 主题:# pkg install flat-remix-gtk-themes
  • Numix 主题: # pkg install numix-gtk-theme

  • Sierra 主题:# pkg install sierra-gtk-themes

  • Yaru 主题: # pkg install yaru-gtk-themes

  • Canta 主题:# pkg install canta-gtk-themes

  • Flat 图标:# pkg install flat-remix-icon-themes
  • Numix 图标: # pkg install numix-icon-theme

  • Numix 圆形图标: # pkg install numix-icon-theme-circle

  • Yaru 图标:# pkg install yaru-icon-theme

  • Canta 图标:# pkg install canta-icon-theme

  • 执行安装: bash install.sh

    执行安装: bash install.sh

    执行安装: bash install.sh

    执行安装: bash install.sh

    WhiteSur
    WhiteSur
    图标
    光标
    下载地址
    Papirus 图标
    issue
    freebsd-update-notify on FreeBSD
    freebsd-update-notify on FreeBSD
    freebsd-update-notify on FreeBSD
    freebsd-update-notify on FreeBSD

    cups

    用于提供 CUPS 服务

    cups-filters

    用于支持免驱动打印机(即 IPP Everywhere 协议)

    dbus

    Avahi 需要,作为 CUPS 依赖自动安装

    avahi-app

    作为 CUPS 依赖自动安装,Avahi 守护进程,用于内网中的打印机自动发现

    https://openprinting.github.io/printers/
    安装 Fcitx5
    • 使用 pkg 安装:

    • 或者使用 Ports 安装:

    经测试 SLIM 窗口下会提示 IBus 找不到……疑似 bug。也可能是配置问题。

    Fcitx 5.X 开启自启

    配置 Fcitx 环境变量

    X11

    根据自己使用的桌面管理器及 shell 择一使用:

    1. sddm lightdm gdm 都可以在 ~/.xprofile 中写入 A 组配置

    2. lightdm gdm 可以在 ~/.profile 中写入 A 组配置

    3. sddm 可以在用户登录 shell 配置文件中写入配置


    • sh: ~/.profile 写入 A 组配置

    • bash: ~/.bash_profile 或 ~/.profile 写入 A 组配置

    • zsh: ~/.zprofile 写入 A 组配置

    • csh: ~/.cshrc 写入 B 组配置

    注意

    如果登录桌面的用户账户不是 root,就不能使用 root 身份进行设置:必须切换到该用户且在不使用 sudo 的情况下进行配置。

    • A 组(sh/bash/zsh):

    • B 组(csh)

    Wayland

    在 Wayland 下,不应该设置 GTK_IM_MODULE 与 QT_IM_MODULE。Wayland 有输入法相关的协议(text-input 和 input-method)且这些协议得到了广泛支持,不需要依赖 Gtk 与 Qt 自己的输入法模块即可正常使用输入法。设置 GTK_IM_MODULE 或 QT_IM_MODULE 可能会起到反效果,例如输入候选框与光标位置之间离得很远。

    运行在 XWayland 下的程序,输入法由环境变量 XMODIFIERS='@im=fcitx' 配置。

    • A 组(sh/bash/zsh):

    • B 组(csh)

    附录:安装 RIME 中州韵输入法

    • 使用 pkg 安装:

    • 或者使用 Ports 安装:

    注意

    chinese/rime-essay 是必要的,是 Rime 的共享词汇与语言模型,没有这个 Port,你的 RIME 输入法只会显示一团乱码。

    如果 rime 未被自动添加到输入法,请手动添加完成初始化(程序里找到 fcitx 配置工具,添加 rime 输入法即可)。

    对于普通用户如未生效,请检查自己的 shell 是否选择了对应教程进行设置。另外请将该用户加入 wheel 组。

    故障排除与未竟事宜

    遇到问题,请先运行 fcitx 故障诊断,但是该输出仅对 bash 做了环境变量的配置。也就是说他输出的环境变量仅适用于 bash、sh 和 zsh 等 SHELL,而不适用于 csh。于 csh 的环境变量配置需要参考上文。

    如果提示 bash 字样且无法输出诊断信息,则需要先安装 bash:# pkg install bash

    对于 fcitx 5.x 来说,找不到 fcitx qt 4 的支持是正常的。

    TSF 管理器
    历史
    006-FreeBSD14.2 安装 fcitx5 及其输入法
    # cd /usr/ports/x11/xorg/ && make install clean
    # cd /usr/ports/x11/cde/ && make install clean
    # cd /usr/ports/x11-fonts/wqy/ && make install clean
    # cd /usr/ports/devel/xdg-user-dirs/ && make install clean 
    root@ykla:/home/ykla # pkg info -D cde
    cde-2.5.2_4:
    On install:
    CDE - The Common Desktop Environment is an X Windows desktop environment
    that was commonly used on commercial UNIX variants such as Sun Solaris,
    HP-UX, and IBM AIX. Developed between 1993 and 1999, it has now been
    released under an Open source license by The Open Group.
    # CDE(通用桌面环境)是早期 X Windows 的桌面环境,曾广泛用于商用 UNIX 系统如 Solaris、HP-UX 和 AIX。
    # 开发时间大致为 1993–1999 年,现由 The Open Group 以开源协议发布。
    
    Common Desktop Environment requires the Subprocess Control Service,
    dtcms, and the inetd super server to fully function.
    # 要完整运行 CDE,需启用子进程控制服务(dtspc)、日历管理服务(dtcms)以及 inetd 超级服务器。
    
    First, add the following line to /etc/inetd.conf:
    
    dtspc	stream	tcp	nowait	root	 /usr/local/dt/bin/dtspcd	/usr/local/dt/bin/dtspcd
    # 第一步,在 /etc/inetd.conf 中添加 dtspcd 服务行。
    
    Second, add the following line to /etc/services:
    
    dtspc		6112/tcp # CDE Subprocess Control Service
    # 第二步,在 /etc/services 中注册 dtspc 服务端口。
    
    # sysrc rpcbind_enable=YES
    # sysrc dtcms_enable=YES
    # sysrc inetd_enable=YES
    # service rpcbind start && service dtcms start && service inetd start
    # 启用并启动 rpcbind、dtcms 和 inetd 服务,这是 CDE 所依赖的组件。
    
    Finally, make sure to add /usr/local/dt/bin to your path.
    # 最后,请将 /usr/local/dt/bin 添加到你的 PATH 环境变量中。
    
    To start the Common Desktop Environment:
    % env LANG=C startx /usr/local/dt/bin/Xsession
    # 使用上述命令启动 CDE 桌面环境,设置环境变量 LANG=C 以避免本地化问题。
    
    Alternatively, if you want to use the Login Manager as well, create
    /usr/local/etc/X11/Xwrapper.config and add this line:
    
    allowed_users=anybody
    # 如果你想启用图形登录管理器(Login Manager),请创建 Xwrapper.config 并添加 allowed_users=anybody。
    
    To start the Common Desktop Enviroment Login Manager:
    
    % /usr/local/dt/bin/dtlogin -daemon
    
    # 使用 dtlogin -daemon 命令启动 CDE 登录管理器(守护进程模式)。
    # service rpcbind enable
    # service dtcms enable
    # service inetd enable
    # service dtlogin enable
    # echo "allowed_users=anybody" > /usr/local/etc/X11/Xwrapper.config
    # ln -s /usr/local/dt/bin/Xsession ~/.xinitrc
    dtspc	stream	tcp	nowait	root	 /usr/local/dt/bin/dtspcd	/usr/local/dt/bin/dtspcd
    dtspc		6112/tcp
    # cap_mkdb /etc/login.conf
    # pkg install git
    # cd /usr/ports/devel/git/
    # make install clean
    # git config --global http.proxy http://192.168.X.X:7890
    # git config --global https.proxy http://192.168.X.X:7890
    # git config --global --unset http.proxy
    # git config --global --unset https.proxy
    $ git clone --depth 1 https://git.FreeBSD.org/src.git /usr/src 
    $ git clone --depth 1 https://github.com/freebsd/freebsd-src /usr/src
    $ git clone --branch releng/14.3 --single-branch --depth 1 https://git.FreeBSD.org/src.git /usr/src
    $ git clone --branch releng/14.3 --single-branch --depth 1 https://github.com/freebsd/freebsd-src /usr/src
    # pkg install gitup
    # cd /usr/ports/net/gitup/ && make install clean
    # gitup release # 具体版本需要参考当前 gitup 配置 https://github.com/johnmehr/gitup/blob/main/gitup.conf
    # gitup current # 获取 current 源代码
    # ntpdate -u pool.ntp.org # 当时间相差较大时必须使用该命令,其他命令不会生效
    # fetch https://download.freebsd.org/ftp/releases/amd64/14.3-RELEASE/src.txz
    # tar xvzf src.txz  -C /
    # cd /usr/src          # 切到工作目录
    # make -j4 buildworld  # 编译世界
    # make -j4 kernel      # 编译并安装内核
    # reboot               # 重启以使用新内核
    # cd /usr/src          # 切回工作目录
    # etcupdate -p         # 进行必要的配置文件合并  
    # make installworld    # 安装世界 
    # etcupdate -B         # 合并更新
    # reboot               # 重启以完成更新流程
    # export  EDITOR=/usr/bin/ee # 切换 vi 为 ee。针对 FreeBSD 14 之前的版本或 csh 使用:setenv EDITOR /usr/bin/ee
    # export  VISUAL=/usr/bin/ee # 切换 vi 为 ee。针对 FreeBSD 14 之前的版本或 csh 使用:setenv VISUAL /usr/bin/ee
    root@ykla:~ # etcupdate -B     
    Conflicts remain from previous update, aborting.
    
    # etcupdate resolve          # 解决冲突
    Resolving conflict in '/etc/group':
    Select: (p) postpone, (df) diff-full, (e) edit,
            (h) help for more options: e # 输入 e 解决冲突
    # etcupdate -B 
    $ /usr/local/share/wine/pkg32.sh install wine mesa-dri
    $ WINEPREFIX=$HOME/test wine winecfg
    $ rm -rf ~/.wine
    $ wine winecfg
    $ rm -rf $HOME/test
    $ WINEPREFIX=$HOME/test wine winecfg
    ykla@ykla:~ $ file winscp.exe
    winscp.exe: PE32 executable for MS Windows 6.01 (GUI), Intel i386, 11 sections
    $ wine /home/ykla/winscp.exe
    # pkg install winetricks
    # cd /usr/ports/emulators/winetricks/
    # make install clean
    $ winetricks
    # sysctl hw.snd.verbose=4
    # sysctl hw.snd.default_unit=5
    hint.hdac.0.cad0.nid20.config="as=1"
    hint.hdac.0.cad0.nid21.config="as=2"
    hint.hdac.0.cad0.nid20.config="as=1 seq=15 device=Headphones"
    hint.hdac.0.cad0.nid27.config="as=2 seq=0"
    hint.hdac.0.cad0.nid25.config="as=4 seq=0"
    hint.hdac.0.cad0.nid20.config="as=1 seq=0"
    hint.hdac.0.cad0.nid26.config="as=2 seq=0"
    hint.hdac.0.cad0.nid27.config="as=3 seq=0"
    hint.hdac.0.cad0.nid25.config="as=4 seq=0"
    hint.hdac.0.cad0.nid24.config="as=5 seq=0 device=Line-out"
    hint.hdac.0.cad0.nid21.config="as=6 seq=0"
    hint.hdac.0.cad0.nid20.config="as=1 seq=0"
    hint.hdac.0.cad0.nid24.config="as=1 seq=1 device=Line-out"
    hint.hdac.0.cad0.nid26.config="as=1 seq=2 device=Line-out"
    hint.hdac.0.cad0.nid21.config="as=2 seq=0"
    # cat /dev/sndstat # 省略无用信息
    pcm1: <Realtek ALC897 (Rear Analog Line-in)> at nid 26 on hdaa0
    pcm0: <Realtek ALC897 (Analog)> at nid 27 and 26 on hdaa0
    # sysctl dev.hdaa.0.nid26_config="as=1 seq=0"
    # sysctl dev.hdaa.0.nid27_config="as=1 seq=15"
    hint.hdaa.0.nid26.config="as=1 seq=0"
    hint.hdaa.0.nid27.config="as=1 seq=15"
    git clone https://github.com/PapirusDevelopmentTeam/papirus-icon-theme
    cd papirus-icon-theme
    ./install.sh
    # pkg install freebsd-update-notify
    # cd /usr/ports/deskutils/freebsd-update-notify/
    # make install clean
    max-days-between-updates    1   # 更新检测间隔(日)      
    hours-between-reminders     8   # 提醒间隔(小时)
    # cd /usr/ports/print/cups/ && make install clean
    # cd /usr/ports/print/cups-filters/ && make install clean
    # service dbus enable
    # service avahi-daemon enable
    # service cupsd enable
    Listen localhost:631
    Listen /var/run/cups/cups.sock
    Listen IP:631
    # Restrict access to the server...
    <Location />
      Order allow,deny
    </Location>
    
    # Restrict access to the admin pages...
    <Location /admin>
      AuthType Default
      Require user @SYSTEM
      Order allow,deny
    </Location>
    # Restrict access to the server...
    <Location />
      Allow from 192.168.0.0/24 # 要访问的 IP 所在网段
      Order allow,deny
    </Location>
    
    # Restrict access to the admin pages...
    <Location /admin>
      Allow from 192.168.0.0/24 # 要访问的 IP 所在网段
      AuthType Default
      Require user @SYSTEM
      Order allow,deny
    </Location>
    # pkg install fcitx5 fcitx5-qt5 fcitx5-qt6 fcitx5-gtk2 fcitx5-gtk3 fcitx5-gtk4 fcitx5-configtool-qt5 fcitx5-configtool-qt6 zh-fcitx5-chinese-addons
    # cd /usr/ports/textproc/fcitx5/ && make install clean # 主程序
    # cd /usr/ports/textproc/fcitx5-qt/ && make install clean  # 同时包含 QT 5 和 QT 6
    # cd /usr/ports/textproc/fcitx5-gtk/ && make install clean # 同时包含 gtk 2、3、4
    # cd /usr/ports/textproc/fcitx5-configtool/ && make install clean # fcitx5 的图形配置工具。同时包含 QT 5 和 QT 6
    # cd /usr/ports/chinese/fcitx5-chinese-addons/ && make install clean # 输入法
    $ mkdir -p ~/.config/autostart/ # 若使用其他用户则需要在其命令行下再执行之
    $ cp /usr/local/share/applications/org.fcitx.Fcitx5.desktop ~/.config/autostart/
    export LANG=zh_CN.UTF-8
    export LANGUAGE=zh_CN.UTF-8
    export LC_ALL=zh_CN.UTF-8
    export XMODIFIERS='@im=fcitx'
    export GTK_IM_MODULE=fcitx
    export QT_IM_MODULE=fcitx
    setenv LANG zh_CN.UTF-8
    setenv LC_ALL zh_CN.UTF-8
    setenv LANGUAGE zh_CN.UTF-8
    setenv XMODIFIERS @im=fcitx
    setenv GTK_IM_MODULE fcitx
    setenv QT_IM_MODULE fcitx
    export LANG=zh_CN.UTF-8
    export LANGUAGE=zh_CN.UTF-8
    export LC_ALL=zh_CN.UTF-8
    export XMODIFIERS='@im=fcitx'
    setenv LANG zh_CN.UTF-8
    setenv LC_ALL zh_CN.UTF-8
    setenv LANGUAGE zh_CN.UTF-8
    setenv XMODIFIERS @im=fcitx
    # pkg install zh-fcitx5-rime zh-rime-essay
    # cd /usr/ports/chinese/fcitx5-rime/ && make install clean
    # cd /usr/ports/chinese/rime-essay/ && make install clean
    # fcitx5-diagnose

    14.0

    支持

    支持

    参见

    FreeBSD13 を Hyper-V 環境 にインストールしてみた 所感,值得看看

    Gen 1

    IDE + SCSI

    仅 MBR

    Gen 2

    仅 SCSI

    仅 UEFI + 安全启动支持 + PXE 支持

    Gen 1

    13.0

    支持

    不支持

    /

    Gen 2

    13.0

    不支持

    支持

    需要修改参数 sysctl kern.evdev.rcpt_mask=6

    在 Windows 上安装 Hyper-V
    Hyper-V 集成服务
    使用检查点将虚拟机恢复到以前的状态
    在 Hyper-V 中在标准检查点与生产检查点之间进行选择
    Hyper-V
    Hyper-V
    Hyper-V
    Hyper-V
    Hyper-V
    Hyper-V
    Hyper-V
    Hyper-V
    Hyper-V
    Hyper-V
    Hyper-V
    Hyper-V
    Hyper-V
    Hyper-V
    Hyper-V
    Hyper-V
    Hyper-V
    Hyper-V

    Gen 2

    对读者的要求

    以高等院校计算机科学与技术学科一般本科毕业生所能达到的及格或及格以上水平为编写难度基准。

    本书的组织结构

    第 1 章 FreeBSD 初见

    围绕自由软件运动与开源运动,为读者介绍 BSD UNIX 的历史与哲学。试图厘清那些纷争以及常见误区。

    第 2 章 安装 FreeBSD

    指导使用 FreeBSD 内置工具 bsdinstall 来安装 FreeBSD。

    第 3 章 FreeBSD 基础

    涉及一些 Unix 基础知识和 FreeBSD 特色功能。主要面向 Windows 用户和 Linux 用户。即使你认为自己已经掌握了一些,也建议概览一下子目录。

    第 4 章 软件管理和系统升级

    本章涵盖:使用 pkg 命令安装二进制包,使用 Ports 编译安装软件;FreeBSD 系统更新。

    第 5 章 桌面环境

    尽可能地罗列了所有可在 FreeBSD 上运行的桌面环境。如果没有你喜欢的欢迎 PR。

    第 6 章 本地化——i18n/L10n

    包括中文输入法和中文世界常用软件,如 Wine、QQ、微信和 WPS。如果没有你喜欢的欢迎 PR。

    第 7 章 多媒体和外部设备

    如何使用 FreeBSD 进行音视频播放功能。还讲解了蓝牙、打印机等常用设备。

    第 8 章 代理服务器

    中文世界不可或缺的一类软件。这里不会写(在兼容层跑一样可以用,但是还是想要原生的),欢迎 PR。

    第 9 章 Jail

    FreeBSD 的特色功能。

    第 10 章 虚拟化与容器

    主要讲解了 FreeBSD 上的 Bhyve 虚拟机以及容器。

    第 11 章 FreeBSD 高级安装

    使用手动方式和其他专业的安装方式和安装介质在不同平台上安装 FreeBSD。

    第 12 章 窗口管理器

    尽可能地罗列了所有可在 FreeBSD 上运行的窗口管理器。如果没有你喜欢的欢迎 PR。

    第 13 章 FreeBSD 系统管理

    主要讲解了 bsdconfig、SSH 以及系统恢复与引导相关工具的用法。

    第 14 章 网络管理

    IPv4、IPv6 及常用网络命令。

    第 15 章 FreeBSD 防火墙

    FreeBSD 防火墙

    第 16 章 服务器

    一些非 web 服务器。

    第 17 章 Web 服务器和监控平台

    常用的网络服务器和监控平台。

    第 18 章 嵌入式平台

    主要介绍了如何在树莓派、RISC-V 和 X86 等嵌入式设备上运行 BSD。

    第 19 章 数据库管理

    介绍了常用数据库的安装和使用。

    第 20 章 游戏、科学计算和专业工具

    游戏和科研教育工具。

    第 21 章 Linux 二进制兼容层

    如何在 FreeBSD 上运行各式 Linux。如果没有你喜欢的 Linux 发行版,欢迎 PR。

    第 22 章 开发生态与贡献社区

    如何在 FreeBSD 上搭建各种常用开发环境。

    第 23 章 存储管理

    主要介绍了 UFS 以及常见的 Windows、Linux 文件系统的使用方法。

    第 24 章 FreeBSD 内核

    内核选项全注全译。

    第 25 章 ZFS 文件系统

    划时代的新型文件系统——ZFS。

    第 26 章 OpenBSD 入门

    一款安全至上的操作系统,OpenBSD。

    第 27 章 NetBSD 入门

    NetBSD。这个应该真的没人用

    附录 Ⅰ 计算机概论

    涉及 408(计算机学科专业基础)的相关内容。

    附录 Ⅱ 工具与资源

    小众 BSD 操作系统导论、硬件挑选、BIOS 参数注解及开源常识。

    附录 Ⅲ 文学故事

    只有故事,没有酒。

    附录 Ⅳ 参考文献和术语

    全书涉及到的核心参考文献和术语表。

    本书中命令及符号含义

    权限

    # 代表 root 下的操作,基本等同 su、sudo 和 doas。

    $、% 代表普通用户账户权限。

    特别提示

    注意

    即使是泛读和跳读也不应忽略。

    技巧

    提示一些有助于提高效率改变思路的方法。

    警告

    如果不知道不做就无法完成或造成重大危害的事项。

    思考题

    美国国家标准与技术研究院(NIST)发布的数字身份指南草案(SP800-63-4 第二版)指出:

    必须要求,当密码被用作单因素认证机制时,其长度至少为 15 个字符。可以允许仅作为多因素认证过程一部分使用的密码较短,但必须要求其长度至少为 8 个字符。

    应当允许最大密码长度至少为 64 个字符。

    应当接受所有可打印的 ASCII【RFC20】字符以及空格字符作为密码的一部分。

    应当接受 Unicode【ISO/ISC 10646】字符作为密码的一部分。在评估密码长度时,每个 Unicode 码点必须被计为一个字符。

    不得强制要求其他组成规则(例如,要求混合不同类型的字符)用于密码。

    不得要求订阅者定期更改密码。然而,如果有证据表明认证器已被泄露,必须强制更改密码。

    不得允许订阅者存储提示信息(例如,关于密码如何创建的提醒),该提示信息不应能被未经认证的声明者访问。

    不得在用户选择密码时提示其使用基于知识的认证(KBA)(例如“你的第一只宠物叫什么名字?”)或安全问题。

    必须要求完整提供密码(而非部分提供),并且必须验证整个提交的密码(例如,不得截断密码)。

    “尽管近年来不少专家一再批评现行密码规则的弊端,但银行、互联网平台和政府机构大多依然固守这些过时、无效甚至有害的规则。”——

    问题:我们习以为常的“知识”究竟有没有坚实可靠的根基?我们固守的一些东西,究竟是一种传承,还是一种陈规陋习?如何划分二者的界限?

    思考题是帮助有意愿探索和有动力追问一切的读者的一种途径。其形式类似于通常的课后习题,不同点在于思考题的位置是随机的。尽管可能已经预设了一些立场和理解,但是答案通常也是开放性的,取决于读者自身。如果读者已经累了,大可跳过。

    特殊章节

    旨在将现存的问题和改进的方向/建议或谜团留置其中,以期后人的智慧。

    删除线

    为何人要活着?越是想探究生命的意义,越会陷入混乱。——《Caligula 卡里古拉》(原作 FuRyu)第三集标题

    KDE 6 在 Wayland 下右键单击会导致黑屏

    删除线表明过时的内容或起调侃意味的文字。其不属于正文的一部分,如果无法理解“梗”可以跳过,不会影响任何东西。

    pkg 与 ports

    因为 FreeBSD 有两种安装软件的方式(但个别软件不支持 pkg 安装):因此为了方便,在本教程中已经尽可能地列出了两种方式的安装说明。但希望大家明白,只是为了方便,而并非不能使用 ports 或者 pkg 进行安装或必须使用二者其一进行安装。

    请注意

    ports 一般是 HEAD 分支,你的 pkg 最好与 ports 保持在同一主线上,即都选择 latest。但是你亦可以自行拉取 pkg 对应的 Ports 季度分支,如 2025Q1。

    如果要安装软件 yyy,yyy 在 ports 里是 xxx/yyy,那么路径便是 /usr/ports/xxx/yyy。

    • 那么首先可以通过 pkg 安装二进制软件包,和绝大多数 Linux 用法一样,下同:

    还可以这样:

    或者这样简写:

    • 那么还可以通过 Ports 编译安装:

    将会不断地弹出来窗口询问你怎么选。如果是使用默认选项,请这样做,则:

    如果你想一次性完成所有配置:

    使用 pkg 安装:

    • 或者使用 Ports 安装:

    • 解释:

    软件
    用途

    xorg

    X11

    gnome

    Gnome 主程序

    noto-sc

    思源黑体——简体中文

    附录:精简安装

    • 使用 pkg 安装:

    • 或者使用 Ports 安装:

    • 解释

    包名
    作用

    xorg-minimal

    精简版 X 图形环境

    gnome-lite

    精简版 GNOME 桌面

    如果安装了完整版本也可以使用 pkg 包管理器卸载自带的游戏软件:

    Gnome 精简安装

    配置

    添加内容如下:

    配置启动项:

    输入以下命令:

    FreeBSD Gnome

    默认是禁止 root 登录的。

    FreeBSD Gnome

    默认壁纸就是这样。

    FreeBSD Gnome

    中文化

    GNOME 界面

    本小节配置参数与用户 shell 无关,即使是 csh 也该如此配置。

    将原有内容替换如下:

    中文输入法

    以下 ibus、fcitx5 二选一即可。

    ibus

    gnome 捆绑的输入法面板是 ibus。

    或者

    安装后运行初始化命令 ibus-setup。

    然后:设置——>键盘——>输入源,“添加输入源”,选择“汉语(中国)”。加入“中文(智能拼音)”

    fcitx 5

    参见输入法相关章节。需要注意 IBus 是 gnome 的依赖,不能卸载。也就是说你可以不用 IBus,但是不能卸载。

    FreeBSD Gnome

    优化系统

    或者:

    一些反人类设置的调整

    GNOME 一直以反人类著称:桌面不让放图标、右上角没托盘等等。是不是和垃圾桶不能有垃圾、人不能在床上、门不能关、桌子上不能放东西有异曲同工之妙

    恢复 GNOME 顶栏的托盘图标

    需要安装火狐浏览器 www/firefox 及 Port x11-chrome-gnome-shell。

    由于 TopIcons Plus 已经长期不更新了,所以只能用 AppIndicator and KStatusNotifierItem Support 了。

    Gnome 恢复 GNOME 顶栏的托盘图标
    Gnome 恢复 GNOME 顶栏的托盘图标
    Gnome 恢复 GNOME 顶栏的托盘图标
    Gnome 恢复 GNOME 顶栏的托盘图标
    Gnome 恢复 GNOME 顶栏的托盘图标
    Gnome 恢复 GNOME 顶栏的托盘图标

    参考文献

    • 恢复 GNOME 顶栏的托盘图标

    在桌面放图标

    扩展 gnome-shell-extension-desktop-icons 已经长期未更新,项目地址:Desktop Icons。

    可以用 Desktop Icons NG (DING) 解决。安装方式同上。

    Gnome 在桌面放图标

    壁纸是我自己设置的。其他是默认的。

    Bug 287955 - x11/gdm: The user cannot log in; the system hangs at the login screen in gdm 47
    或通过 ports 安装
    • 解释

    包名
    作用说明

    xorg

    X Window 系统

    lightdm

    轻量级显示管理器 LightDM

    lightdm-gtk-greeter

    LightDM 的 GTK+ 登录界面插件

    xfce

    Xfce 桌面环境

    wqy-fonts

    文泉驿中文字体

    xdg-user-dirs

    管理用户主目录

    startx

    或者

    启动服务

    设置中文界面

    编辑 /etc/login.conf:找到 default:\ 这一段,把 :lang=C.UTF-8 修改为 :lang=zh_CN.UTF-8。

    刷新数据库:

    图片欣赏

    FreeBSD 安装 Xfce
    FreeBSD 安装 Xfce
    FreeBSD 安装 Xfce

    全局菜单(可选)

    安装:

    或:

    查看安装后说明,安装说明配置:

    软件推荐

    FreeBSD 的 xfce 邮箱客户端推荐用 mail/evolution,可搭配 xfce4-mailwatch-plugin、security/gnome-keyring 一道使用。

    还有一款桌面插件,叫 x11/xfce4-verve-plugin。配合设置智能书签,可以查网页内容。可通过设置 FreeBSD 的 man 手册,就可以搜索需要的内容。

    XTerm 终端动态标题

    sh

    编辑 ~/.shrc,写入:

    csh

    编辑 ~/.cshrc,写入:

    tcsh

    编辑 ~/.tcshrc,写入:

    bash

    编辑 ~/.bashrc,写入:

    zsh

    编辑 ~/.zshrc,写入:

    参考文献

    • 6.1 动态设置标题不起作用,bash 配置来自此处

    • Wamphyre/BSD-XFCE,配置参考集合

    • Zsh - Arch Linux 中文维基,Zsh 配置来自此处

    故障排除与未竟事宜

    需要进一步动态显示当前进程,目前似乎只有 sh 能做到。

    老鼠 🐀
    [joke] The default desktop startup screen causes damage to monitor!
    RISC-V FreeBSD 磁盘镜像

    RISC-V FreeBSD 磁盘镜像(以 FreeBSD 14.2 RELEASE 为例):

    https://download.freebsd.org/releases/VM-IMAGES/14.2-RELEASE/riscv64/Latest/FreeBSD-14.2-RELEASE-riscv-riscv64-zfs.raw.xz

    下载后解压缩备用。

    OpenSBI

    获取 OpenSBI(RISC-V Open Source Supervisor Binary Interface),功能上类似于 BIOS。


    安装 OpenSBI:

    或者:

    看看 fw_jump.elf 在哪:

    提取 fw_jump.elf 到 Windows 下备用。

    U-Boot

    获取 U-Boot,功能上类似于 Grub2。


    安装:

    或者:

    查看 u-boot 位置:

    提取 u-boot.bin 到 Windows 下备用。

    配置 Qemu

    在桌面新建一个文本文件 qemu.bat,

    写入

    概述:

    • ^ 相当于 Windows 下的反斜杠。

    • smp 为 CPU 数量

    • cpu 指定 CPU 架构

    • m 指定内存大小

    • hostfwd=tcp 映射的本地端口

    以上,请将 C:\Users\ykla\Desktop\ 替换为你自己的路径。

    运行脚本即可。

    Qemu 安装 FreeBSD

    输入用户名 root 回车即可,默认没有密码。

    由于在 PowerShell 和 CMD 中运行都会产生各种乱码(比如 ee 命令,或按 TAB 键)。

    但是该镜像默认未配置 ssh 与普通用户,直接 ssh 是无法连接的。


    • 先创建一个普通用户(注意加入 wheel 组):

    • 配置 sshd:

    • 然后就可以在 Windows 上通过 ssh 连接了(IP 就是 localhost):

    故障排除与未竟事宜

    • 图形化无法显示

    待解决

    参考文献

    • Create FreeBSD virtual machine using qemu. Run the VM using xhyve.,有一些扩容方法

    • 在 QEMU for Windows x64 上搭建 RISC-V 环境(Debian Linux),有一些概念解释和整体框架

    • RISC-V Emulation Revisited,各种参数来自此处。

    QEMU Binaries for Windows (64 bit)
    用作校训,Fiat Lux 意味着用知识启蒙世人。正如柏拉图的光照说一样,知识就像太阳照耀着世界,驱散无知的黑暗。这代表着学生要用知识改造世界,祛除灰暗。然而,光明所至,亦必阴影随行。尼采指出,“与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视”此校训也时刻警醒着学生要注意自己和周遭的环境,不要重蹈苏格拉底的覆辙——苏格拉底试图让每个人承认自己实际上一无所知,只拥有意见而非真理——这与老子《道德经》言“光而不耀,静水流深。”有异曲同工之妙。这警醒人们,避免走入政治的泥淖。然而在美国过度强调政治正确的今天,加州大学伯克利分校图书馆甚至出于所谓的平等与包容而摘除了贝克莱的画像(贝克莱曾购买过奴隶)。而伯克利分校(UC Berkeley)之名正源自贝克莱(Berkeley)。这与其一贯追求的自由理念背道而驰,亦违背了儒家孔子的名正思想:“名不正,则言不顺;言不顺,则事不成;”我们必须时常停下来审视一下自己,是否忘了最初的目的?是否仍旧惧怕黑暗?

    现代科学对光的认识也是异常曲折,研究表明,光同时显现出了波动性和粒子性。科学对光的研究范式一直在不断地改变,Fiat Lux 的精神也因时而异。在创校之初,创始人旨在让伯克利成为教育灯塔;而如今,旨在让学生散为满天星。2024 年的一项研究表明,光也有影子。

    Fiat Lux 意味着接受教育,获得知识不仅可以改变自己的命运,也可以改变人类文明的命运。问题在于——启蒙真的是可能的吗?教育是可能的吗?康德认为,“启蒙运动就是人类脱离自己所加之干自己的不成熟状态。”问题又在于,人们真的有勇气承认自己是不成熟的,是无知的,是愚昧的吗?人们真的愿意以知识的痛苦换取无知的快乐吗?柏拉图笔下洞穴中的人,真的愿意挣脱铁链,回到大地接受光明吗?我们有责任,有义务,有能力教会所有人吗?人人如龙可能吗?而这对他们是快乐的吗?接受过所谓现代高等教育的人们,是否仍旧处于“有学识的无知”这一状态,他们是光还是暗?我们是否将现代科学与光划上了等号,而无视了现代科学其实并没有坚实的理论根基。

    叔本华认为许多人将圆滑世故视为成熟,实际上这只是另一种不成熟的表现。Fiat Lux 号召所有学生永葆赤子之心,追求自由与理想。鼓励学生不只是说说,更重要地是去实践。

    作为公立大学,Fiat Lux 意味着鼓励学生们投身于加州地区乃至于美国的建设,提高美国人民的受教育水平,伯克利大学的助学政策,对近一半的本科生免除了学费。旨在让所有人都有受高等教育的权利,不因拮据而放弃学业,实现大学的教育使命。加州大学伯克利分校在 2025 年的 QS 世界排名为第 12 名。加州大学伯克利分校诞生了 59 位 诺贝尔奖 得主,真正承担起了大学的学术责任。

    《说文解字》载:“光,明也”。Fiat Lux 意味着追求光明与正义。加州大学伯克利分校学子亦始终通过反对越南战争、言论自由运动等一系列运动践行校训。作为中国教育史上的丰碑,国立西南联合大学,其纪念碑碑文载“河山既复,日月重光,联合大学之战时使命既成,奉命于三十五年五月四日结束。”在艰苦卓绝的环境下仍旧保留着学术的火种,散发着大学的光芒。国立西南联合大学时间虽短,但却让人久久难以忘怀,学生们或投笔从戎集体参军或立志报国勤奋苦学。Fiat Lux 同时也是数十所其他高校的校训。国立西南联合大学的校训是“刚毅坚卓”,虽然没有光,但学生教授们都变成了光,推动着中国现代化的进程。而今我们再也找不到我们的西南联大了。

    光也是流行文化中不可或缺的元素。《迪迦奥特曼》(ウルトラマンティガ)剧中沙耶香说“每个人心里都有黑暗面,但是也有光明的一面!现在,我已经能够相信了,只要努力到最后不轻言放弃,我相信人类,一定能够创造出光明的未来,也能创造出美好的生命。只要珍惜重要的东西,我相信一定能够办到!”我想,也正是因为追求光,要有光的主题充盈着全剧,才得以让这部特摄作品在奥特曼系列作品中脱颖而出。作品针对社会种种问题进行了深刻批判——环境保护与能源的张力、城市化与乡村保护、战争与和平、探索宇宙等等。剧中更指出,光明亦是极致的黑暗——面对类似《黑客帝国》中主角的红蓝药丸选择,人们是否愿意承认,美好世界只是一场空罢了?(45 话《生命永存》)邪恶迪迦篇中大古(マドカ ダイゴ)与正木敬吾(マサキ•ケイゴ)的张力更象征着光与影的矛盾,说明光本身并无正邪之分,光影本是一体。《圣经》中,上帝创造了光,而在本作大结局中,只有心有光,人人都可以成为光,成为迪迦奥特曼。迪迦奥特曼乃至于整个奥特曼作品中,都涉及了正义问题。我认为关于如何定义正义目前是存在争议的,引申问题则是道德的形成。如果认为道德是约定俗成的,那么正义的定义是随时随地而浮动的。比如在基督教和本土国家的礼仪冲突。还有一种观点认为正义等词语是弱者用来欺骗奴役强者的谎言。实现自身的强者的能力才是正义。如果认为道德是统治者意志的化身,那么正义的定义就来源于统治本身的合法性与基础。如果认为道德来自神,那么正义的定义是按上帝的旨意行事。如果认为道德是幻觉,根本不存在,那么正义本身即非正义。如果认为道德来自社会契约,那么正义即遵守法律。还有很多不同的观点。是什么使之成为正义?正义的必定就要取得好的道德评价与价值判断?我们是否承认有一些不因时因地而变化的永恒的道德准则?比如:任何时候不能杀人。我认为奥特曼打怪兽在某种观点上是非正义的(例如地球人并非地球原住民,怪兽并未造成人员财产损失,怪兽是由人类受害转变而来的等等)。而且正义和幸福或者至高无上的快乐之关系是必然的吗?我认为迪迦奥特曼是认真考虑过这些事情的。其他的奥特曼都是单纯地战斗,就连紧跟迪迦其后的戴拿盖亚也一样。迪迦奥特曼的不同之处在于他认识到了正义的多元化与不确定性,甚至在不同的设定中,迪迦奥特曼在远古曾是邪恶的化身。作品也深入探讨了天赋(大古具有巨人的 DNA 等),出身与个人努力之间的张力。而不是说怪兽就都是坏的,都是非正义的,我们必须杀死所有怪兽。这种观点是武断的,只会让作品沦落为 PVP 游戏的高级录播或者单纯的玩具广告。抵抗大众化娱乐化都会是失败的,但是不抵抗甚至纵容又是遗憾的。

    在动漫作品《日常系的异能战斗》(異能 バトルは 日常系 のなかで)第 7 集 10-13 分中,角色栉川鸠子说道“血腥有什么帅的?疯狂有什么好的,我不明白!罪孽深重是什么意思?黑暗又是什么?黑暗就好吗!?正义和邪恶,为什么邪恶更好?为什么坏的反而是好的!?坏不就是因为它坏才叫坏的吗!?”有的观点认为栉川鸠子说得是正确的合理的,而男主安藤寿来则是中二病。其实不然,我们总是先入为主地将一些东西视作神圣的,毋庸置疑的,实际上这些东西根本没有任何经过任何认真的思考和论证。光明是好的,仅仅只是因为他能照亮一些东西,并认为黑暗是其欠缺吗?究竟什么是正义是柏拉图《理想国》中讨论了数百页而未决的问题。难道真的能以好就断定正义是值得追求和向往的吗?强迫别人接受光明,走出洞穴,真的是好的,是所谓正义吗?而洞穴中,真的就是邪恶,黑暗吗?难道你能否认,他们因身居洞穴而真的感觉很快乐这个事实吗?

    康德限制了自由的地盘以保护人们的道德,但终究是不可知的。光也许从未存在过。现实是整个美国社会正在加速分裂,越来越多的学生贷款上学甚至无家可归。加州大学屡次因生活成本问题发生大规模学术罢工、校园治安环境恶劣、校舍等基础设施远不能满足国际化的校园。甚至伯克利大学的食堂被誉为美国最难吃的食堂之一。

    Fiat Lux 不仅有关教育与知识,同样渗透于伯克利的科技创新中——辐射到了现代计算机技术发展。

    伯克利大学也孕育了 BSD、RISC-V、RAID 等计算机技术。FreeBSD 等 BSD 操作系统的开源精神(BSD 许可证并不像 GPL 那样具有传染性并且要求使用者强制开源),实现知识共享,让尽可能广泛的人使用以产生最大化的社会利益,忠实恪守了 Fiat Lux 的精神。

    如同光一样,BSD 渗透在方方面面而不为人所知,从 iPhone 到新能源车机,从索尼 PS5 再到奈飞。

    唯有真正理解 Fiat Lux,方能领悟为什么是 BSD。为什么是 FreeBSD。

    Fiat Lux!

    参考文献

    • Fiat Lux Scholarship,Fiat Lux 奖学金

    • 蔡元培像,北京大学校史馆

    • 蔡元培. 蔡元培:言有物,行有伦 [M]. 北京: 中国文史出版社, 2023. 蔡元培名言出自《何为文化》一节 ISBN 9787520538169.

    • 随着明治维新,国力渐增,日本逐步迈上了对外侵略扩张的军国主义道路,1887 年,日本参谋本部制定了所谓“清国征讨策略”,逐渐演化为以侵略中国为中心的“大陆政策”。

    • Piazza L, Lummen TTA, Quiñonez E, Murooka Y, Reed BW, Barwick B, Carbone F.Simultaneous observation of the quantization and the interference pattern of a plasmonic near-field. Nature Communications 02 March 2015.

    • [德] 伊曼努尔•康德. 历史理性批判文集 [M]. 译者: 何兆武, 天津人民出版社, 2014-10.ISBN: 9787201086415,第 22 页《答复这个问题:“什么是启蒙运动?”》

    • ,加州大学伯克利分校图书馆摘除了贝克莱的画像

    • [德] 尼采. 善恶的彼岸 [M]. 译者: 赵千帆, 商务印书馆, 2015-12. ISBN: 9787100117494 第四章第 146 小节

    • 《迪迦奥特曼》第 47 集告别黑暗 梅塔莫尔加登场 第 21 分沙耶香

    • 闻黎明. 西南联大与现代中国(1937~1946)[M]. 社会科学文献出版社, 2023-1. ISBN: 9787520198059

    • Raphael A. Abrahao, Henri P. N. Morin, Jordan T. R. Pagé, Akbar Safari, Robert W. Boyd, and Jeff S. Lundeen, "Shadow of a laser beam," Optica 11, 1549-1555 (2024),论文指出,光也有影子

    使用 pkg 安装:

    注意

    不安装 audacious-plugins,则无法打开 audacious 主程序。

    • 或者使用 Ports 安装:

    使用

    • 测试 .m4a(杜比 AC-4 编码)、.flac、.av3a(AVS2/AVS3 编码)音乐:

    Audacious 仅支持 .flac,不支持 .m4a、.av3a。

    VLC

    安装等方法见其他章节。FreeBSD ffmpeg 默认编码没有打开对 libuavs3d(提供了 AVS2/AVS3)的支持。不知道怎样做。

    经过测试 VLC 可播放 ac4(m4a):

    用 MPD 播放 DSD

    Music Player Daemon (MPD) 是一款灵活、强大且可扩展的音乐播放器系统,它可以在计算机上运行,并通过各种客户端进行控制。MPD 的主要功能包括:支持各种音频格式,客户端 - 服务器架构,播放列表管理,支持流媒体,跨平台支持等。

    准备

    支持 DSD 的声卡或 DAC,一段 DSD 音频文件。

    以下基于 FreeBSD 14.0,外置 DAC 使用海贝 R3(声卡设置基本类似),使用 oss 驱动。

    安装

    或者

    硬件设置

    查看声卡信息

    这里要使用的是 pcm2,对应设备文件 /dev/dsp2,下面会使用到。

    可以用 sysctl -d dev.pcm.2 查看相关硬件参数意义,摘录关键的三条如下:

    如下设置 (可以写入 sysctl.conf 永久化设置):

    • 因为使用的 oss 驱动,muscipd 只能用 dop 传输模式,dop 模式要求开启 bitperfect

    • 采样率 (vchanrate),DSD 采样率为 44.1khz 的倍数,所以不要设为 48khz 的倍数不然会有杂音,在可能的情况下设置为最高,这里是 352.8khz。

    • 0(fixed):在此模式下,音频设备使用固定的采样率和格式来处理多路音频流。1(passthrough):在此模式下,音频设备尽可能地保持输入音频流的原始采样率和格式。2(adaptive):在此模式下,音频设备会根据需要自动适应和转换输入音频流的采样率和格式。

    技巧

    可以用 dmesg 查看可用采样率。在非播放非 dsd 文件时,采样率和音频文件采样率相同(或整数倍)为宜,这样可以避免重采样造成的音质损失。采样率不是越高越好,可以多试几次,找到最佳。

    基本设置

    musicpd 配置文件为 /usr/local/etc/musicpd.conf 。

    里面默认的一些目录为

    这些目录要自行建立

    第三行把目录设为用户 mpd 所有,不然可能有权限问题。第四行 music 目录存放音乐文件用,设置 777 是为方便增删文件,自己根据情况设置即可。

    修改 /usr/local/etc/musicpd.conf ,"Default OSS Device" 一节后面增加一节:

    注意:可以指定多个输出设备,在各种客户端中可以开启关闭指定的输出设备

    开启 musicpd 服务

    客户端使用

    可以使用 ncmpc (字符界面),MaximumMPD(iphone)等客户端,客户端有很多。

    pc 端 GUI 建议使用 cantata (pkg install cantata)

    命令行建议安装 mpc(pkg install musicpc), 适合用于绑定桌面环境全局快捷键

    然后在终端运行初始化命令 ibus-setup 添加 rime 输入法:

    配置 Rime 输入法

    再将 98 五笔码表(free-bsd-98wubi-tables-master/wubi86.dict.yaml、free-bsd-98wubi-tables-master/wubi86.schema.yaml)复制到 /usr/local/share/rime-date 目录下。下载地址:FreeBSD-98wubi-tables

    修改 /usr/local/share/rime-date 目录下 default.yaml 文件:打开 default.yaml 找到 schema_lis,下面第一行添加 - schema: wubi98(注意保持缩进),并删除其他方案,如下所示:

    保存退出重新部署 Rime 输入法即可。

    Fcitx 5

    安装 Fcitx 5

    Fcitx 5 配置从略。

    Fcitx 5 配置 98 五笔

    首先下载所需文件:https://github.com/FreeBSD-Ask/98-input。

    • 把 98五笔/98wbx.conf 文件复制到 /usr/local/share/fcitx5/inputmethod/ 下面;

    • 把 98五笔/fcitx-98wubi.png 和 org.fcitx.Fcitx5.fcitx-98wubi.png 图标复制到 /usr/local/share/icons/hicolor/48x48/apps/ 下面;

    • 把 98五笔/98/wbx.main.dict 词库放到 /usr/local/share/libime/ 下面。

    • 重启 fcitx5,在设置中起用 98 五笔即可。


    附录:王码 98 五笔生成 .dict 库方法,可用下面命令生成:

    配置 Rime 使用 86 五笔

    首先安装并配置好 Fcitx 5。配置从略。

    或者:

    加入 Rime 的方法同上(Rime 输入法叫 中州韵),从略。

    修改 /usr/local/share/rime-data/default.yaml,如下:

    配置文件

    五笔输入法已经安装好,rime 的配置文件位置如下:

    • IBus

    • Fcitx5

    修改候选字为 9 行

    必须先 cd 到上述配置文件目录再进行下列操作。

    方法 ①

    其中:

    • default 对应 default.custom.yaml 文件

    • menu 对应一级选项,page_size 对应二级选项

    重启即可。

    方法 ②

    重启即可。

    这里推荐使用形式二进行设置,形式一在复杂一点的设置中要求对配置文件格式有一定了解。

    默认英文输出

    这里把 patch 应用到 wubi86 输入法上(写入 wubi86.custom.yaml),大部分的选项都是和输入法相关的,只有少部分选项是全局的(写入 default.custom.yaml)

    重启即可。

    IBus 横排输出

    编辑 ~/.config/ibus/rime/build/ibus_rime.yaml,把里面的 horizontal: flase 改成 horizontal: true 重新部署输入法或重启即可。

    故障排除

    • 这个已经动到公用文件了一般只改用户配置,不然会影响全局,碰上更新容易复原。

    待解决。

    参考文献

    • 请问 ibus-rime 如何设置输入框横排显示

    • LEOYoon-Tsaw/Rime_collections/

    • rime/CustomizationGuide

    4.1 Windows 用户迁移指南

    文件名规范之差异

    非法字符

    许多在 FreeBSD 中可用的文件或文件名在 Windows 中都是不被允许的(即非法字符)。这些你经常会碰到——如果你使用 Git 在 Windows 上拉取项目。

    在这里仅列出一些笔者遇到过的:

    1.3 George Berkeley(乔治·贝克莱)与 BSD 命名的文化背景

    值得注意地是,BSD(Berkeley Software Distribution,伯克利软件发行版)之名根源于英国(爱尔兰)近代伟大的经验论哲学家 George Berkeley(乔治·贝克莱,1685-1753)。在各种著作中,他一般被称为 Bishop of Cloyne(克洛因主教),或贝克莱主教。

    无论是 FreeBSD 及各种 BSD,还是伯克利市(Berkeley)和加州大学伯克利分校(University of California, Berkeley),其名字均源于他。

    Berkeley 在中文音译上存在不同写法,美音和英音发音亦不同(英 /ˈbɑ:kli, ˈbə:kli/ 美 /ˈbɚkli/),仅“Berkeley”的拼写在英文中是统一的。

    和翻译习惯(曾译为巴克莱等等)的影响,这一关联不仅在汉语世界中鲜有人知,恐怕在英语世界当中亦如此。

    乔治·贝克莱生平简介

    图片出处:

    8.5 网络浏览器

    火狐浏览器

    安装普通版本(更新频繁)

    3.10 云服务器安装 FreeBSD(基于 KVM、QEMU 等平台)

    注意

    不支持 OpenVZ、LXC 虚拟机,因为他们本质上不属于虚拟机,宿主机与客户机共享内核。内核都是 Linux 了,哪里还有 FreeBSD?

    不支持 UEFI 引导模式(BIOS + GPT 分区表亦不支持),仅支持传统 BIOS + MBR 方式引导。

    警告

    请注意数据安全,以下教程有一定危险性和要求你有一定的动手能力。

    概述

    8.8 金山 WPS(Linux 版)

    警告

    请勿使用 ports 中的金山 WPS,因为无人更新。推荐自行构建兼容层安装使用。

    基于 RockyLinux 兼容层(FreeBSD Port)

    注意

    请先参照本书其他章节先行安装 RockyLinux 兼容层(FreeBSD Port)

    3.3 使用 Virtual Box 安装 FreeBSD

    下载 VirtualBox

    进入网页点击右侧 Download 即可下载:

    PS C:\Users\ykla> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All 
    是否立即重启计算机以完成此操作?
    [Y] Yes  [N] No  [?] 帮助 (默认值为“Y”): 
    # 此处按回车键确定重启完成 Hyper-V 的安装
    故障排除与未竟事宜
    # pkg install yyy
    # pkg install xxx/yyy
    # pkg ins yyy
    # cd /usr/ports/xxx/yyy
    # make install clean
    # cd /usr/ports/xxx/yyy
    # make BATCH=yes install clean
    # cd /usr/ports/xxx/yyy
    # make config-recursive # 会一直问你,直到结束依赖
    # make install clean
    # pkg install xorg gnome noto-sc
    # cd /usr/ports/x11/xorg/ && make install clean
    # cd /usr/ports/x11/gnome/ && make install clean
    # cd /usr/ports/x11-fonts/noto-serif-sc/ && make install clean
    # pkg install xorg-minimal gnome-lite wqy-fonts xdg-user-dirs
    # cd /usr/ports/x11/xorg-minimal/ && make install clean
    # cd /usr/ports/x11/gnome/ && make install clean
    # cd /usr/ports/x11-fonts/wqy/ && make install clean
    # cd /usr/ports/devel/xdg-user-dirs/ && make install clean
    # pkg delete gnome-2048 gnome-klotski gnome-tetravex gnome-mines gnome-taquin gnome-sudoku gnome-robots gnome-nibbles lightsoff tali quadrapassel swell-foop gnome-mahjongg five-or-more iagno aisleriot four-in-a-row
    # ee /etc/fstab
    proc /proc procfs rw 0 0
    # service dbus enable
    # service gdm enable
    $ echo "/usr/local/bin/gnome-session" > ~/.xinitrc
    # ee /usr/local/etc/gdm/locale.conf
    LANG="zh_CN.UTF-8"
    LC_CTYPE="zh_CN.UTF-8"
    LC_MESSAGES="zh_CN.UTF-8"
    # pkg install zh-ibus-libpinyin
    # cd /usr/ports/chinese/ibus-libpinyin/
    # make install clean
    # pkg install gnome-tweaks
    # cd /usr/ports/deskutils/gnome-tweaks/ 
    # make install clean
    # pkg install xorg lightdm lightdm-gtk-greeter xfce wqy-fonts xdg-user-dirs xfce4-goodies lightdm-gtk-greeter-settings
    # cd /usr/ports/x11/xorg/ && make install clean
    # cd /usr/ports/x11-wm/xfce4 && make install clean # 注意有个 4
    # cd /usr/ports/x11/xfce4-goodies/ && make install clean
    # cd /usr/ports/x11-fonts/wqy/ && make install clean
    # cd /usr/ports/x11/lightdm/ && make install clean
    # cd /usr/ports/x11/lightdm-gtk-greeter/ && make install clean
    # cd /usr/ports/x11/lightdm-gtk-greeter-settings/ && make install clean
    # cd /usr/ports/devel/xdg-user-dirs/ && make install clean 
    # cd /usr/ports/x11/xfce4-goodies/ && make install clean
    $ echo "/usr/local/etc/xdg/xfce4/xinitrc" > ~/.xinitrc
    $ echo "/usr/local/etc/xdg/xfce4/xinitrc" > ~/.xsession
    # service dbus enable
    # service lightdm enable
    # cap_mkdb /etc/login.conf
    # pkg install xfce4-appmenu-plugin appmenu-gtk-module appmenu-registrar
    # cd /usr/ports/x11/xfce4-appmenu-plugin/ && make install clean
    # cd /usr/ports/x11/gtk-app-menu/ && make install clean
    # cd /usr/ports/x11/appmenu-registrar/ && make install clean
    $ xfconf-query -c xsettings -p /Gtk/ShellShowsMenubar -n -t bool -s true
    $ xfconf-query -c xsettings -p /Gtk/ShellShowsAppmenu -n -t bool -s true
    $ xfconf-query -c xsettings -p /Gtk/Modules -n -t string -s "appmenu-gtk-module"
    if [ -t 1 ]; then       
      while :; do
        printf '\033]0;%s\007' "$PWD"   
        printf '\n$ '
        if ! IFS= read -r cmd; then
          break
        fi
        printf '\033]0;%s\007' "$cmd"
        eval "$cmd"
      done
      exit
    fi
    if ( $?TERM && $TERM =~ xterm* ) then
        set host = `hostname`      
        alias postcmd 'rehash; printf -- "\033]2\;%s\007" "${user}@${host}: ${cwd}"
    endif
    switch ($TERM)
    case xterm*:
        set prompt="%{\033]0;%n@%m: %~\007%}%# "
        breaksw
    default:
        set prompt="%# "
        breaksw
    endsw 
    case $TERM in
             xterm*)
                 PS1="\[\033]0;\u@\h: \w\007\]bash\\$ "
                 ;;
             *)
                 PS1="bash\\$ "
                 ;;
         esac
    autoload -Uz add-zsh-hook
    
    function xterm_title_precmd () {
    	print -Pn -- '\e]2;%n@%m %~\a'
    	[[ "$TERM" == 'screen'* ]] && print -Pn -- '\e_\005{2}%n\005{-}@\005{5}%m\005{-} \005{+b 4}%~\005{-}\e\\'
    }
    
    function xterm_title_preexec () {
    	print -Pn -- '\e]2;%n@%m %~ %# ' && print -n -- "${(q)1}\a"
    	[[ "$TERM" == 'screen'* ]] && { print -Pn -- '\e_\005{2}%n\005{-}@\005{5}%m\005{-} \005{+b 4}%~\005{-} %# ' && print -n -- "${(q)1}\e\\"; }
    }
    
    if [[ "$TERM" == (Eterm*|alacritty*|aterm*|foot*|gnome*|konsole*|kterm*|putty*|rxvt*|screen*|wezterm*|tmux*|xterm*) ]]; then
    	add-zsh-hook -Uz precmd xterm_title_precmd
    	add-zsh-hook -Uz preexec xterm_title_preexec
    fi
    # pkg install opensbi
    # cd /usr/ports/sysutils/opensbi/ 
    # make install clean
    # /etc/periodic/weekly/310.locate # 刷新数据库
    # locate fw_jump.elf
    /usr/local/share/opensbi/lp64/generic/firmware/fw_jump.elf
    # pkg install u-boot-qemu-riscv64
    # cd /usr/ports/sysutils/u-boot-qemu-riscv64/ 
    # make install clean
    # /etc/periodic/weekly/310.locate # 刷新数据库
    # locate u-boot.bin
    root@ykla:/home/ykla # locate u-boot.bin
    /usr/local/share/u-boot/u-boot-qemu-riscv64/u-boot.bin
    cd /d "C:\Program Files\qemu"
    .\qemu-system-riscv64.exe ^
        -machine virt ^
        -smp 4 ^
        -cpu rv64 ^
        -m 4G ^
        -device virtio-blk-device,drive=hd ^
        -drive file="C:\Users\ykla\Desktop\FreeBSD-14.2-RELEASE-riscv-riscv64-zfs.raw",if=none,id=hd ^
        -device virtio-net-device,netdev=net ^
        -netdev user,id=net,hostfwd=tcp::8022-:22 ^
        -bios "C:\Users\ykla\Desktop\fw_jump.elf" ^
        -kernel "C:\Users\ykla\Desktop\u-boot.bin" ^
        -append “root=LABEL=rootfs” ^
        -nographic
    root@freebsd:~ # adduser 
    Username: ykla
    Full name:
    Uid (Leave empty for default):
    Login group [ykla]:
    Login group is ykla. Invite ykla into other groups? []: wheel  # 请在此处输入 wheel,否则无法 su
    Login class [default]:
    Shell (sh csh tcsh nologin) [sh]:
    Home directory [/home/ykla]:
    Home directory permissions (Leave empty for default):
    
    Enable ZFS encryption? (yes/no) [no]: Use password-based authentication? [yes]:
    Use an empty password? (yes/no) [no]:
    Use a random password? (yes/no) [no]:
    Enter password:
    Enter password again:
    Lock out the account after creation? [no]:
    Username    : ykla
    Password    : *****
    Full Name   :
    Uid         : 1001
    ZFS dataset : zroot/home/ykla
    Class       :
    Groups      : ykla wheel
    Home        : /home/ykla
    Home Mode   :
    Shell       : /bin/sh
    Locked      : no
    OK? (yes/no) [yes]:
    adduser: INFO: Successfully created ZFS dataset (zroot/home/ykla).
    adduser: INFO: Successfully added (ykla) to the user database.
    Add another user? (yes/no) [no]:
    Goodbye!
    root@freebsd:~ # service sshd enable # 添加启动项
    sshd enabled in /etc/rc.conf
    root@freebsd:~ # service sshd start # 启动 sshd 服务
    Generating RSA host key.
    3072 SHA256:kXxPXoTuyVXz+KG7eE3J3NH+3rlbMXQg6pW+1d9RGLM root@freebsd (RSA)
    Generating ECDSA host key.
    256 SHA256:fCNrjiI5KPXvM29hxSVjRPL0NKGceijgYucUJttOIuo root@freebsd (ECDSA)
    Generating ED25519 host key.
    256 SHA256:o6DJs5xfC9gUJP0Yjmr4iL9J77nebJnvmlUExBUPyQY root@freebsd (ED25519)
    Performing sanity check on sshd configuration.
    Starting sshd.
    ssh ykla@localhost:8022
    # pkg install audacious audacious-plugins
    # cd /usr/ports/multimedia/audacious/ && make install clean
    # cd /usr/ports/multimedia/audacious-plugins/ && make install clean
    # pkg install musicpd
    # cd /usr/ports/audio/musicpd/
    # make install clean
    # cat /dev/sndstat
    pcm0: <Realtek ALC269 (Analog 2.0+HP/2.0)> (play/rec) default
    pcm1: <Intel Cougar Point (HDMI/DP 8ch)> (play)
    pcm2: <USB audio> (play)
    No devices installed from userspace.
    dev.pcm.2.bitperfect: bit-perfect playback/recording (0=disable, 1=enable)
    dev.pcm.2.play.vchanrate: virtual channel mixing speed/rate
    dev.pcm.2.play.vchanmode: vchan format/rate selection: 0=fixed, 1=passthrough, 2=adaptive
    # sysctl dev.pcm.2.bitperfect=1
    # sysctl dev.pcm.2.play.vchanrate=352800
    # sysctl dev.pcm.2.play.vchanmode=1
    # dmesg|grep -i pcm2
    pcm2 on uaudio0
    # dmesg|grep -i uaudio0
    uaudio0 on uhub0
    uaudio0: <HiBy R3, class 239/2, rev 2.00/ff.ff, addr 1> on usbus1
    uaudio0: Play[0]: 384000 Hz, 2 ch, 32-bit S-LE PCM format, 2x4ms buffer. (selected)
    uaudio0: Play[0]: 352800 Hz, 2 ch, 32-bit S-LE PCM format, 2x4ms buffer.
    uaudio0: Play[0]: 192000 Hz, 2 ch, 32-bit S-LE PCM format, 2x4ms buffer.
    uaudio0: Play[0]: 176400 Hz, 2 ch, 32-bit S-LE PCM format, 2x4ms buffer.
    uaudio0: Play[0]: 96000 Hz, 2 ch, 32-bit S-LE PCM format, 2x4ms buffer.
    uaudio0: Play[0]: 88200 Hz, 2 ch, 32-bit S-LE PCM format, 2x4ms buffer.
    uaudio0: Play[0]: 48000 Hz, 2 ch, 32-bit S-LE PCM format, 2x4ms buffer.
    uaudio0: Play[0]: 44100 Hz, 2 ch, 32-bit S-LE PCM format, 2x4ms buffer.
    uaudio0: Play[0]: 32000 Hz, 2 ch, 32-bit S-LE PCM format, 2x4ms buffer.
    uaudio0: No recording.
    uaudio0: No MIDI sequencer.
    pcm2 on uaudio0
    uaudio0: No HID volume keys found.
    /var--> mpd --
                   |-> music
                   |-> .mpd --> playlists
    # mkdir -p /var/mpd/music
    # mkdir -p /var/mpd/.mpd/playlists
    # chown -R mpd:mpd /var/mpd
    # chmod 777 /var/mpd/music
    audio_output {
            type            "oss"
            name            "OSS Device(dop mode)"
            device          "/dev/dsp2"     # 指定使用的设备,不需要把 dac 或声卡等设置为默认设备,dsp2 专用于播放音乐,默认设备做自己的事就行
            dop             "yes"           # 开启 dop 模式
    }
    # sysrc musicpd_enable=YES
    # service musicpd start
    # pkg install zh-ibus-rime
    # cd /usr/ports/chinese/ibus-rime/ 
    # make install clean
    # Rime default settings
    # encoding: utf-8
    
    config_version: '0.40'
    
    schema_list:
      - schema: wubi98
    
    ……其余省略……
    # pkg install fcitx5 fcitx5-qt5 fcitx5-qt6 fcitx5-gtk2 fcitx5-gtk3 fcitx5-gtk4 fcitx5-configtool-qt5 fcitx5-configtool-qt6 zh-fcitx5-chinese-addons 
    $ libime_tabledict 98wbx.txt 98wbx.main.dict
    # pkg ins zh-fcitx5-rime zh-rime-essay zh-rime-wubi 
    # cd /usr/ports/chinese/rime-wubi/
    # cd /usr/ports/chinese/fcitx5-rime/ && make install clean
    # cd /usr/ports/chinese/rime-essay/ && make install clean
    # Rime default settings
    # encoding: utf-8
    
    config_version: '0.40'
    
    schema_list:
      - schema: wubi86
    
    ……其他省略……
    $ cd ~/.config/ibus/rime
    $ cd ~/.local/share/fcitx5/rime
    $ rime_patch default menu
    page_size: 9 # 输入后回车
    ^D # 按 ctrl+D
    patch applied.
    $ rime_patch default menu/page_size
    9 # 输入后回车
    ^D # 按 ctrl+D
    patch applied.
    $ rime_patch wubi86 'switches/@1/reset'
    1
    ^D
    patch applied.
    “定期更换密码”是最愚蠢的密码规则?
    Portrait of UC Berkeley namesake no longer on display in Doe Library
    国立西南联合大学纪念碑碑文
    源代码

    xfce4-goodies

    XFCE 的附加组件和插件集合

    lightdm-gtk-greeter-settings

    配置 LightDM GTK+ 登录界面的图形工具,缺少将无法启动

  • 不能出现英文冒号 :

    • 不能叫 con

    更多要求,参见微软官方文档 命名文件、路径和命名空间。

    技巧

    你可以在 Windows 下使用 git 工具拉取 freebsd-doc 项目试试看能否成功。我已经报告过 Bug。

    The colon in the file name of the security report of the FreeBSD doc is not compatible with Microsoft Windows

    大小写敏感

    FreeBSD 的 ZFS 和 UFS 都是 大小写敏感 的文件系统。而 macOS 的 HFS+(默认不支持)、APFS(默认不支持)以及 Windows 的 FAT32、NTFS 文件系统都是 大小写不敏感 的。

    • Windows 下 大小写不敏感

    可见,abc 和 ABC 无法共存,文件系统认为这是同一个文件。

    技巧

    判断访问网站服务器类型,最简单的办法就是看网址路径是否是大小写敏感的:如果网站 https://abc.com/abc 和 https://abc.com/ABC 都能打开且内容一样,那么该网站多半是由 Windows 驱动的。

    • FreeBSD 下 大小写敏感

    可见,abc 和 ABC 可以共存,文件系统认为这是两个不同的文件。

    参考文献

    • 调整区分大小写,Windows 文件系统支持使用属性标志按目录设置区分大小写

    换行符/回车之差异

    回车(Carriage Return,CR)和“换行”(Line Feed,LF)是不同的概念,均产生于电传打字机(真 TTY)时代。

    • 回车 CR:将光标移动到当前行的开头部分;

    • 换行 LF:将光标竖直向下移动到下一行。

    可以看到在早期二者是独立的,否则 CRLF 会导致当前行“下沉”一行。

    Windows 操作系统默认的文本换行符为 CRLF(即 \r\n,0x0D 0x0A,^M$),而 Unix(早期 macOS 是 \r,0x0D)默认使用 LF(即 \n,0x0A,$)。

    当然,现在这些符号都出现在每行文本的末尾处(即每行都存在)。

    二者是互不兼容的,如果你把 Windows 换行符的文件放到 Unix 下面,可能导致每行末尾多出一个 ^M 字符,对于某些工具,会造成识别错误,对于 FreeBSD Port 相关文件来说,则会把多行识别为一行。

    但是两种换行符可以互相转换。在 FreeBSD 下可以用 Port converters/dos2unix 来实现,该软件包含 2 个命令:dos2unix(Windows 换行符到 Unix)、unix2dos(Unix 换行符到 Windows)。基本用法是 $ dos2unix -n a.txt b.txt,如果不需要保留源文件,可以直接 $ dos2unix a.txt b.txt c.txt(一次转换多个文件)。可以用命令 file a.txt 来判断文件的换行符:

    • 使用普通的 Unix 换行符文本文件

    • 使用 Windows 换行符的文本文件

    字符编码的差异

    由于计算机只识别 0 和 1,故字符编码是一种用于将字符转换为数字表示的规则体系。字符可以是屏幕上可见的文字,也可以是不可见的控制标记,如换行符(LF)、回车符(CR)等,涵盖文本中常见的元素,如数字、Emoji 表情符号、汉字、拉丁字母等。编码方式则是为这些字符分配唯一数字标识(通常是整数),即代码点(code point)的过程。

    例如,在 ASCII(American Standard Code for Information Interchange,美国信息交换标准代码,ISO/IEC 646)编码中,0x41(即二进制 0100 0001)代表大写字母 A。ASCII 编码仅支持英文字母、数字及常见英文标点符号——共计支持 128 个字符。

    而在 Unicode 编码体系中,“你”这个汉字的代码点是 U+4F60。在 UTF-8(8-bit Unicode Transformation Format,8 位 Unicode 转换格式)编码方式下,它被编码为字节序列 0xE4 0xBD 0xA0(二进制为 11100100 10111101 10100000)。UTF-8 编码涵盖的字符范围远超 GBK(国家 G 标准 B 扩展 K),里面甚至还有埃及圣书体——如果现在你的屏幕上能看到“𓀀”“𓃕”“𓌊”这三个字符,那么你很可能正在使用 UTF-8 编码(如果你使用的是 UTF-8 编码但仍无法显示这些字符,很可能是字体不支持这些字符集,而非编码问题)。

    那么程序如何识别文本的编码呢?通常,有些文件会在开头使用特定的字节序列(即 BOM,byte order mark,字节顺序标记)来标明编码。例如 UTF-8 的 BOM 是 0xEF 0xBB 0xBF。但在实际中,很多文本文件并没有 BOM,因此读取程序需要通过上下文猜测编码格式,这往往导致乱码。虽然可以通过程序分析文本内容(如统计字符分布或抽取字符计算)来猜测编码,但这种方法并不总是可靠。编码问题本质上源于系统间默认编码不同或未明确指定编码。

    Windows 默认使用 GBK(如系统语言是简体中文,是 GB2312 的超集),而 Linux 或 UNIX 则使用 UTF-8。

    • Windows 11 24H2

    • Ubuntu 24.04/FreeBSD

    其中,FreeBSD 的编码是在 main/usr.bin/login/login.conf 这个源文件中设置的,编译出来路径即 /etc/login.conf。

    自然,也可以把 Windows 10 及后续版本的字符编码设置为 UTF-8。当然,这除了造成更多地编码问题外并不能有效的解决问题。

    参考文献

    • Code pages,微软官方称,936 即是 GBK。

    时间与时区的差异

    中国统一使用一个时区,东八区,即 UTC+8,UTC(Coordinated Universal Time,协调世界时)时间几乎等同于 GMT(Greenwich Mean Time,格林尼治时间)。UTC 以国际原子时(temps atomique international,TAI)的秒长为基础(并不完全一致):当铯(Cs)频率 ΔνCs,也就是铯 133 原子不受干扰的基态超精细跃迁频率,以单位 Hz 即 s-1 表示时,取其固定数值为 9 192 631 770 来定义秒——后续又对国际原子时进行了各种修正。

    有过 Windows 和 Unix 双系统安装经验的人会发现,Windows 和 Unix 的时间总是差 8 个小时。在现代计算机上(一般在主板上),都有一颗由纽扣电池供电的 RTC(Real-time clock,实时时钟芯片)芯片,用来维护系统断电后的计时。

    计算机操作系统在开机时会读取 RTC 的时间来设定系统的时间。RTC 的时间并未标注时区。

    Windows 会即直接读取 RTC 的结果,把其当成默认的本地时间,即 Local Time(地方时,当地太阳运行的时间);Unix 则会把 RTC 的数据视为 UTC 时间:于是你会发现双系统的时间倒流了 8 个小时。

    比如,如果 RTC 时间是“2025 年 6 月 6 日白天中午 12:00(即 UTC+8),那么 Windows 下,也是“2025 年 6 月 6 日白天中午 12:00”(即 UTC+8),但在 Unix 下,时间会变为“2025 年 6 月 6 日白天早上 4:00”(即 UTC+8-8)。因为是我们使用 UTC+8,所以二者会相差 8 小时。

    对于现代计算机网络来说,时间至关重要,我们可以做个小实验,把时间调慢 5 分钟,打开浏览器,你会发现绝大部分网站都打不开了(HTTPS)。

    计算机中的时区是由 IANA 时区数据库规范的,历史悠久。

    中华民国二十八年(1939),民国政府将中国划分为五个时区,分为哈尔滨(Asia/Harbin)、上海(Asia/Shanghai)、重庆(Asia/Chongqing)、乌鲁木齐(Asia/Urumqi)和喀什(Asia/Kashgar)时间。

    我们知道,按照实际的地理时区来说,新疆是东六区(虽然全国统一使用北京时间)。从地理上看,新疆与北京时间实际上相差了二个小时。实际上,如果东八区八点太阳出来,那么新疆就是十点才出来。

    在时区数据库 2025b 中,Asia/Harbin、Asia/Chongqing、Asia/Shanghai 均等同于北京时间。Asia/Urumqi 和 Asia/Kashgar 则均为 UTC+6 东六区时间。

    在 FreeBSD 中,北京时间同样为 Asia/Shanghai(东八区)。有些所谓国产操作系统会无中生有一个 Asia/Beijing,这不仅是不尊重国际标准与规范的行为,并且会造成严重后果,如造成时间退回到 UTC。

    注意

    北京(东经 116°)的地方时并不完全等于 UTC+8。我们所述的北京时间不是北京的地方时,而是东经 120 度(上海东经 120°)的地方时。

    技巧

    中国也曾实行过夏令时(在夏天把表调慢几个小时,因为天亮的早)。

    思考题

    外太空(飞船,星球等)用什么时区?为什么?

    参考文献

    • 秒的定义,中国计量科学院载秒的定义

    • Time Zone Database,时区数据库

    • 历书基本术语简介,本文所涉术语,可参考此处中国科学院紫金山天文台的精确解释

    深入阅读

    Windows

    这里有若干书籍可供有意向的读者进一步研究学习 Windows 操作系统设计与实现:

    • RUSSINOVICH M, SOLOMON D, IONESCU A, 等. 深入解析 Windows 操作系统:第 7 版. 卷 1 [M]. 刘晖,译. 北京:人民邮电出版社,2021. ISBN: 9787115556943 微软官方教材,具有权威性

    • RUSSINOVICH M, SOLOMON D, IONESCU A, 等. 深入解析 Windows 操作系统:第 7 版. 卷 2 [M]. 刘晖,译. 北京:人民邮电出版社,2024. ISBN: 9787115619747 微软官方教材,具有权威性

    天文历法

    • 中国科学院紫金山天文台.2026 年中国天文年历 [M]. 北京:科学出版社,2025. ISBN:9787030825841 注:每年一版。一般日历会写潮起潮落太阳东升西落的时间,该书则是大全

    • 胡中为.天文学教程(上)[M]. 上海:上海交通大学出版社,2019. ISBN: 9787313216557 天文学历史悠久,这是本现代天文学入门书籍,本科生教材

    • 胡中为.天文学教程(下)[M]. 上海:上海交通大学出版社,2020. ISBN:9787313235725 天文学是一级学科

    • DODELSON S, SCHMIDT F. 现代宇宙学 [M]. 于浩然,译. 2 版. 北京:科学出版社,2024. ISBN: 9787030786937 用数学和物理学描述宇宙宏观整体而非具体天体行星

    • 卢央.中国古代星占学 [M]. 北京:中国科学技术出版社,2013. ISBN: 9787504661401 中国古代天文学入门,星占学即用哲学或神秘学解释天文学

    • CARROLL B W, OSTLIE D A. 当代天体物理学导论 [M]. 姜碧沩,李庆康,高健,等,译. 2 版. 北京:科学出版社,2023. ISBN: 9787030766663 天体物理学即用物理学解释天文学,是现代天文学的核心(还有一些测量、分类、天文历法等不属于此目)

    思考题

    对于描述世界,我们有太多种方法。正如马克思所述,“哲学家们只是用不同的方式解释世界……”(《关于费尔巴哈的提纲》第十一段:马克思主义哲学的使命)

    你认为通过数学和物理学解释世界的优点是什么?如果排除实用主义和经验主义,还能剩下什么?

    你认为通过哲学和神秘学/宗教神学解释世界的缺点是什么?如果排除实用主义和经验主义,还能剩下什么?

    马克思还认为只有必要的自由时间才能确保真正的自由(邓晓芒.马克思论“存在与时间”[J].哲学动态.2000,(6).11-14):

    “必须把感性的时间从强制性的、社会一般的抽象时间中解放出来。”

    “实践也不能被曲解为异化了的生产活动,即类似于动物性的筋肉活动、体力的支出,至少不能把异化劳动当作马克思本来意义上的实践活动。”

    你怎样理解这样一个事实:我们 显然拥有充足的 自由时间,但是我们仍然 无法拥有 所谓的 “自由”时间 来了解一些“无意义”的东西(非学者),比如天文学?

    我们在不断地刷新短视频阅读网络小说所花费的精力,是否在某种程度上也构成了 生产活动?所花费的时间是否在某种意义上构成了 社会一般(平均)劳动时间?换言之,这种自由时间的放松,究竟是真正的自由还是一种资本化的假象(实际上仍是另一种形式的工作)?这种自由时间往往被视为对工作的放松,是为了更好地工作,而非单纯实现自由时间;并且我们通过平台获取的快乐和 工资 远低于平台从用户获取的算法,个性化数据,内容主体,广告等带来的价值。你怎样看这种对自由时间的资本化异化?

    George Berkeley(1685.3.12—1753.1.14),2023 年是他逝世 270 周年。2025 年是其冥诞 340 周年。

    • 1685.3.12 出生于爱尔兰的基尔肯尼,乡绅家庭,是家中长子

    • 1696 年,11 岁时进入基尔肯尼学院

    • 1700 年,15 岁时进入都柏林圣三一学院

    • 1704 年,19 岁时被授予文学学士学位

    • 1707 年,22 岁时被授予文学硕士学位,同年留校任特别研究员,讲授希腊语

    • 1709 年,24 岁时任爱尔兰教会执事(为满足学院规定)。同年发表第一篇著作《视觉新论》,哲学思想基本成形

    • 1710 年,25 岁时任爱尔兰教会牧师。同年发表《人类知识原理》,此处已经有许多关于运动的论述了

    • 1713 年,28 岁时发表《海拉斯与斐洛诺斯对话三篇》

    • 1717 年,32 岁时被任命为圣三一学院高级研究员,但他选择离开学院,旅欧 4 年

    • 1721 年,36 岁时被授予神学博士学位,同年(或次年)任爱尔兰教会德罗莫尔教区座堂主任牧师(Dean);并再次选择留在都柏林圣三一学院,讲授神学和希伯来语。发表 De Motu(论运动),表示牛顿的许多基本思想都是错误的,抨击了牛顿的绝对时空观

    • 1723 年,37 岁时获得了一笔来自朋友的巨额遗产

    • 1724 年,39 岁时任爱尔兰教会德里教区座堂主任牧师(Dean),但从未到职

    • 1725 年,40 岁时准备在百慕大筹建一所神学院,但他一生从未去过百慕大。同年为筹款放弃了先前的座堂主任牧师职位

    • 1728 年,43 岁时与 Anne Forster 结婚。6 周后前往美洲,希望获得赞助办学。他们在罗德岛度过了几年,买下了一座种植园,又买了几名非洲黑奴在种植园里工作(存在争议)

    • 1729 年,44 岁时有了自己的第一个孩子

    • 1731 年,46 岁时因建学无望,返回伦敦。后将罗德岛的地产和图书馆捐赠给了耶鲁大学。在日后,他将大部分财产和用于筹备学校的物资都捐赠给了相关大学

    • 1734.1.18 49 岁时被爱尔兰教会任命为克洛因主教(Bishop of Cloyne),同年 5 月 19 日祝胜;发表《分析家》一文。后专注于基督事业,淡出人们的视野

    • 1739 伦敦育婴堂医院成立,他积极参与其中

    • 1744 年,59 岁时出版《西利斯:关于焦油水的功效以及与之有关的、相互引发的其他课题的哲学反思和探讨之链》,他在书中主张将松焦油作为治疗疾病的万金油。该书是他生前销量最高的一本。但是很神奇,据记载,同他的书籍销量一样,他使用这种疗法为患者治疗也取得了同样显著的疗效(来源请求)

    • 1752 年,67 岁时放弃克洛因主教职位,移居牛津

    • 1753.1.14 67 岁时,在妻子 Anne Forster 诵读《圣经》的陪伴下,他在牛津安息,归于主怀

    • 1786 年,妻子 Anne Forster 离世

    注:爱尔兰教会,即爱尔兰圣公会,隶属于英国圣公会。

    贝克莱悖论与数学基础

    贝克莱大主教的著作还引发了数学史上关于无穷小量的数学哲学讨论(即贝克莱悖论,参见 1734,《分析学家;或一篇致一位不信神数学家的论文,其中审查一下近代分析学的对象、原则及论断是不是比宗教的神秘、信仰的要点有更清晰的表达,或更明显的推理》)。

    贝克莱悖论从未被解决,其哲学悖论仍是开放的问题。ε‑δ 定义只是让实分析在 ZFC 公理体系下变得形式自洽。许多人往往会用上述定义去解决 芝诺(Zeno of Elea)悖论,进而否定其哲学价值。

    更多相关资源请参看非标准分析和超实数以及数学哲学等相关书籍。

    贝克莱与爱因斯坦

    贝克莱主教以其形而上学思想,特别是对牛顿绝对时空观的反对,启发了包括爱因斯坦(其认为时间并非绝对,而是与观察者的运动状态密切相关)在内的一众 20 世纪科学家,在某种意义上引领了现代科技革命。

    技巧

    爱因斯坦信奉马赫主义,而马赫是贝克莱主义者。

    逐渐地,哲学家和科学家们得出了一个令人震惊的结论:既然每个物体仅仅是其性质的总和,而这些性质又只存在于心灵之中,那么整个由物质与能量、原子与星辰组成的客观宇宙,除了作为意识的建构外,并不存在——这是一个由人类感官塑造的常规符号体系。

    正如贝克莱——唯物主义的死敌——所表述的那样:

    “天上的浩瀚星辰与地下的山川草木,简而言之,所有构成这个宏伟世界框架的实体,离开心灵便毫无实体可言……只要它们没有被我实际感知,或不存在于我的心灵,或者其他被创造的灵魂之中,它们要么根本不存在,要么只能存在于某个永恒灵的心中。”

    爱因斯坦将这一逻辑推向了极致,证明了即便是空间与时间,也只是直觉的形式,无法与意识分离,正如我们关于颜色、形状或大小的概念一样。空间除了作为我们感知中物体的排列和次序外,没有客观实在性;而时间也无法脱离我们用以衡量事件顺序的体系独立存在。

    意识到 我们对宇宙的全部认知不过是被我们不完美的感官所蒙蔽的印象残余,这让对现实的追求显得无望。如果一切的存在都必须以被感知为前提,那么世界似乎会分崩离析,沦为个体感知的无序状态。

    然而,我们的感知中却存在一种奇特的秩序,仿佛确实存在某种客观现实的底层,而我们的感官将其翻译了出来。尽管没有人能够确定自己对红色或中央 C 的感受是否与他人相同,但我们仍然可以基于这样的假设行动:每个人对颜色和音调的感知大致相似。

    ——《宇宙与爱因斯坦博士》林肯·巴尼特 1949 年伦敦版

    贝克莱思想简介

    “esse est percipi, to be is to be perceived(存在就是被感知)”

    ——George Berkeley

    注意

    上述命题绝不代表贝克莱主张主观唯心主义,也绝不代表他否认客观物质的存在。

    参见《人类知识原理》等著作里是承认且论证过上帝必然存在的。在贝克莱哲学中,物质存在的客观性与上帝存在并不冲突。该著作也回应了各种误解和诘难。

    这很好理解:不存在任何独立且不依赖于人的思想与知觉的客观物质(我们所理解的客观物质必然是我们的思想和知觉所能理解的,否则没有意义),如果有,那是不可知的,则等同于不存在,也就没有设定其存在的意义(另外,如果承认物质的不可知性,那将不是纯粹的唯物主义,和贝克莱哲学亦无太大分别)。故,我们认为的流俗的客观存在必定是要靠我们的知觉才能感知,即——存在就是被感知。除此以外的客观存在,是不可知的,也没有意义。所以,贝克莱认为,物质存在依赖于心灵的感知,没有正在被感知却存在着的物质,是不可设想的。但是众所周知,我们的世界是存在的(如果你否认此处,和贝克莱哲学亦无太大分别)。故,为了确保这一点,神是必然存在的。我们总是不言自明的暗含地把经过实践的东西肯定为物质性的,这是不对的。如果实践本身的物质性就有问题,那么非物质性的存在如何能赋予这种活动以物质属性(靠松果腺吗)?而这种实践性本身的物质性是无从证明的,因为人类无法认识超越于人类感知以外的存在,除非你借助上帝,但是如此又说明你本身就不存在这种属性了。

    可以看到当代现象学与贝克莱哲学有异曲同工之妙——他们都强调直接经验和知觉的重要性。

    思考题

    有关他的思想,最著名的一则哲学实验是:“假如一棵树在森林里倒下而没有人在附近听见,它有没有发出声音?”

    • 如果你认为没有。恭喜你,你现在是贝克莱者了。

    • 如果你认为有,并给出了物理学(或其他科学、数学上)的证明。恭喜你,你现在是贝克莱者了。

    问题一:你怎样理解量子力学中的“观察者”与树的存在关系?

    • 如果你认为有,因为世界是客观存在的,是不以人的意志为转移的。恭喜你,你现在是贝克莱者了。

    • 如果你认为有没有不一定或者不可知或者别的什么情况。恭喜你,你现在是贝克莱者了。

    问题二:请结合上文或进一步阅读贝克莱著作,分别说说以上是为什么。

    贝克莱还认为货币的价值并不取决于其中金属含量的多寡,货币只是一种用于商品交换的手段。货币的价值来自信用和社会共识。他认为应该使收入在国民间平均分配以实现经济公平。

    他还主张通过教育、培训,依靠人民来发展经济。他认为应该通过开展大型工程建设来改善贫困问题。

    贝克莱主张各个宗教团体放下纷争,为共同的利益而团结。在他淡出人们的视野后,专注为当地人民做公益事业,无论是天主教徒还是新教徒。

    虽然在贝克莱有生之年,他的思想并未被广泛认同,但在几百年后,大放异彩。

    几乎在每一本合格的哲学史著作中 [旧版人教版思想政治必修四(生活与哲学)第 13 页就有(ISBN 9787107327100)。]

    教材教科书 高中思想政治 必修 4 生活与哲学 人教版 第 13 页

    虽然写的是错的,部编版思想政治必修四 《哲学与文化》 ISBN 9787107341953 已经删掉了,你都能找到有关他的身影,有关他的哲学实验也是哲学考试中经久不衰的论述大题。

    参考文献

    • [英] 乔治·贝克莱. 人类知识原理和三篇对话 [M]. 译者:张桂权,人民出版社,2022-11.(ISBN 9787010236841)

    • 阎吉达. 贝克莱思想新探 [M]. 复旦大学出版社,1987-10.(附录部分有《论运动》的翻译)

    • Downing, Lisa, "George Berkeley", The Stanford Encyclopedia of Philosophy (Fall 2021 Edition), Edward N. Zalta (ed.), URL = https://plato.stanford.edu/archives/fall2021/entries/berkeley/. SEP 贝克莱条目

    • Easwaran, Kenny, Alan Hájek, Paolo Mancosu, and Graham Oppy, "Infinity", The Stanford Encyclopedia of Philosophy (Summer 2024 Edition), Edward N. Zalta & Uri Nodelman (eds.), URL = https://plato.stanford.edu/archives/sum2024/entries/infinity/. SEP 无穷条目

    • [美] 布鲁斯·乌姆鲍. 贝克莱 [M]. 译者:孟令朋,清华大学出版社,2019-5.(ISBN 9787302525554)

    • 汪芳庭. 数学基础 (修订版)[M]. 高等教育出版社,2018-10.(ISBN 9787040502428)

    • [美] Abraham Robinson. 非标准分析 [M]. 译者:申又根 / 王世强 / 张锦文,科学出版社,1980-9.(已绝版,统一书号:13031-1267)

    • [澳] 陶哲轩. 陶哲轩实分析 [M]. 译者:李馨,第 4 版. 人民邮电出版社,2025-06.(ISBN 9787115665546)

    • George Berkeley. The Querist, containing several queries proposed to the consideration of the public [M]. Gale ECCO, Print Editions, April 23, 2018(ISBN 9781385411018)

    • Schabas, Margaret, "Economics in Early Modern Philosophy", The Stanford Encyclopedia of Philosophy (Summer 2022 Edition), Edward N. Zalta (ed.), URL = . SEP 早期现代经济哲学条目

    • ,Cloyne District Community Council

    • ,大英百科全书贝克莱条目

    • 胡化凯. 20 世纪 50-70 年代中国科学批判资料选(上下)[M]. 2009 年 10 月第 9 版第 1 次印刷. 山东教育出版社,2009-10 :472.(已绝版,ISBN 7532853861)整本下册都在批判爱因斯坦

    由于政治正确(黑奴问题)
    George Berkeley
    George Berkeley

    使用 pkg 安装

    • 或者使用 Ports

    安装长期支持版本

    • 使用 pkg 安装

    • 或者使用 Ports

    Chromium

    Chromium 不是 chrome,但在 FreeBSD 中启动命令是 chrome。


    • 使用 pkg 安装

    • 或者使用 Ports

    警告

    要编译 Chromium,你必须拥有至少 12G 内存,或等量的交换分区 + 内存。

    Chrome(Linux 兼容层)

    • 使用 pkg 安装

    • 或者使用 Ports

    附录:Chromium 使用 Google 账号同步

    技巧

    有项目甚至认为目前移除的组件还不够干净彻底,即 Port www/ungoogled-chromium。该软件移除了更多不透明以及和谷歌有关的部分。

    • 由于是开源产物,Chromium 与 Google Chrome 的关系约等于 AOSP 之于 Pixel UI。Chromium 没有直接从 Google Chrome 的在线插件商店开箱即用的下载安装插件的功能,只能手动从本地安装 crx(加入同步后可自动同步浏览器插件)。亦没有自带的 Google 翻译插件等等,更多两者的不同之处可以 查看这个网页

    • 首先,Chromium 并非 Google Chrome,前者是 The Chromium Project 在 BSD 3-Clause "New" or "Revised" License 下发布的开源与自由软件,后者是 Google LLC 的专有软件。

    • Chromium 在 Chromium 89 发布后删除了之前自带的与 Chrome 同款的登录 Google 账号的默认 api。

    进入正题,在开始获取 token 之前,你需要加入下列两个 Google 网上论坛(邮件列表)

    • Google browser sign-in test account

    • Chromium-dev

    因为我们只是需要 Chrome Google API 的访问权限,所以你必须关闭这两个邮件列表的消息通知(即“不接收电子邮件”),否则你就会在事实上遭遇邮件列表的轰炸(其交流频繁)。

    加入 Google browser sign-in test account 群组后,你可能会看到:“您无权访问此内容”之类的提示,这很正常,不用管。

    join-mail-list-for-google-api-error2

    之后,用浏览器打开 谷歌云控制台网站

    注意

    登录控制台时需要和上一步加入邮件列表的谷歌账户需要是同一个。

    点击左上角的“My First Project”,然后在弹出窗口的右上角选择“新建项目”即可。

    项目名称任意填写,组织默认即可。

    点击左上角的“My First Project”,然后在弹出窗口中选择你刚才创建的项目(此处我的是 google-sync)。

    点击上图中的“API 和服务”,再点击“+ 启用 API 和服务”

    搜索 'chrome-sync' 找到下列内容

    点击启用“Chrome Sync API”

    之后会在已启用的 API 和服务列表中显示下列状态

    选择“OAuth 权限请求页面”:

    创建外部应用:

    创建后如图:

    点击“客户端”,创建 OAuth 客户端 ID“,应用类型为“桌面应用”:

    创建后如图:

    点击创建的“桌面客户端 1”

    我们获得了(这是我的,是无效的,你必须自己生成你自己的):

    • 客户端 ID 502882456359-okloi0a7k6vjodss69so97tmqmv0jjj5.apps.googleusercontent.com

    • 客户端密钥 GoCSPX-iKHEKZmP4w_zdq0Z8nwOqz6SF2_M

    退回“API 和服务”,点击“+ 创建凭据”,再点击”API 密钥“。

    我们就获得了一个 API 密钥(这是我的,是无效的,你必须自己生成你自己的):AIzaSyDVpYvJQUn9HTjAiD89y3xBDOG3oaxV5_E

    打开凭据概览一下:

    编辑 ~/.profile,加入(这是我的,是无效的,你必须自己生成你自己的):

    注意

    本文仅在默认 shell sh + KDE 6 下测试通过。如果你使用的环境不同,欢迎 PR。

    然后重启一下。再打开 Chromium。

    点击“开启同步功能”:

    输入你自己的账户:

    输入你自己的账户密码:

    查看同步情况:

    参考文献

    • Chromium Sync - Learning to Pi

    • 为 Chromium 恢复登录功能

    故障排除与未竟事宜

    解决 chromium 出现未知错误时占用大量性能(加到图标的启动参数中,图标是文本文件)

    在各种以 KVM、QEMU 为虚拟架构的服务器厂商中,大部分都没有 FreeBSD 系统的支持,只能通过特殊的方法自己暴力安装。

    最常见的用 KVM 虚拟化的厂商就是搬瓦工、Linode。它们虽说在部分机型上有提供 FreeBSD 系统镜像支持,但是支持都不完善,比如自带镜像默认都不支持 BBR,部分机型更是没有 FreeBSD 系统支持。

    本操作不需要 mfsLinux 作为介质通过 dd 的方式安装。

    mfsBSD 是一款完全载入内存的 FreeBSD 系统,类似于 Windows 的 PE 系统。

    本文通过 Grub2 借助 Memdisk 模块将 mfsBSD 载入为内存盘,并从中启动。然后再通过 mfsBSD 中的 bsdinstall 命令安装 FreeBSD。

    获取现有网络配置

    有的服务器也许并不使用 DHCP 服务,而需要手动指定 IP——多见于小厂服务器。

    安装前请在原有的 Linux 系统上看看自己的 IP 及 netmask。

    可以用命令 ip addr 及 ip route show 查看网关信息。

    准备 mfsBSD

    我们需要下载 mfsBSD:既可以下载到本地计算机,然后使用 SCP、SFTP、WinSCP 等你熟悉的东西传入服务器;亦可直接在服务器使用命令行进行下载。

    注意

    仅支持 IPv6 地址的服务器不能在服务器使用命令行进行下载,因为 mfsBSD 的下载地址不支持 IPv6 网络。

    此问题笔者已与作者发邮件沟通,但截止发文时尚未得到回应。

    内存 <= 512 MB

    下载 mfsBSD Mini:

    检验码(官网的链接指向错误,已反馈但无回复):checksums

    技巧

    内存不大于 4G 的机器不建议使用 zfs 作为文件系统。

    同时 mfsBSD Mini 可能也无法正常加载 zfs 内核模块。

    这种情况下你只能使用 ufs 文件系统。

    内存 > 512 MB

    下载 mfsBSD 完整版:

    检验码:checksums

    准备 mfsBSD.iso

    将下载的 mfsBSD 重命名为 mfsbsd.iso,并放在 /boot 下面(否则可能会因为 LVM 造成硬盘分区无法识别)。

    获取 memdisk

    警告

    GRUB2 的 memdisk.mod 模块不是 MEMDISK。

    memdisk 需要由包管理器安装的软件 syslinux 提供。

    安装 syslinux

    • Debian/Ubuntu

    • Rocky Linux

    提取 memdisk

    从已安装的 syslinux 包中提取 memdisk 文件到 /boot

    取消隐藏的 GRUB 菜单

    现在大多数发行版的 grub 菜单都是默认隐藏的,需要在开机时按 Esc 才能进入,但是有时候会直接进入 BIOS。故,直接取消隐藏比较方便。

    启动 mfsBSD

    重启到 grub,按 c 键进入命令行操作:

    在此界面按 C
    Grub 命令行界面

    注意:

    如果遇到问题,可尝试切换到串口控制台(console=comconsole)或检查镜像完整性。

    在 Proxmox 中,可以直接按下菜单里的 xterm.js 按钮进入串口控制台进行问题排查

    选择 xterm.js 按钮
    进入 xterm.js 排查

    为 mfsBSD 配置网络

    mfsBSD 的 root 密码默认是 mfsroot。你可以使用 ssh 工具进行连接以进行安装。

    技巧

    如果平台支持 DHCP,你可以跳过此小节。

    重启进入到 mfsBSD 后,配置网络。

    以接口 vtnet0 举例,配置 IPv4:

    警告

    下面的请换成你的 IP 地址和路由情况:

    检查:

    开始安装

    使用 kldload zfs 加载 zfs 模块,然后运行 bsdinstall。

    这部分你可以参照其他章节的方法安装。

    故障排除与未尽事宜

    GPT 分区表下如何安装?

    也许可以参考:

    • Booting mfsBSD via PXE with UEFI 与 Booting mfsBSD via iPXE on EFI 采用 PXE 方式引导。

    • FreeBSD 下搭建 PXE 服务器

    待解决、待尝试。

    VMWare、VirtualBox 无法按照此方法安装

    鉴于 VirtualBox 可以选择虚拟化,选择为 kvm 可再次尝试。(笔者的机器无法引导,也许你能成功)

    VirtualBox 选择虚拟化

    待尝试的方案

    • dd 写入 VM-IMAGES 列表下的镜像

    • dd 写入 FreeBSD-14.3-RELEASE-amd64-memstick

    • 在 QEMU 平台上,尝试直接 dd

    能进入 BootLoader,但启动失败

    思路:这个页面可以继续使用命令 ? 查看磁盘信息,也许可以接着引导。

    • 通过 mfsLinux dd mfsBSD

    无法进入 BootLoader

    待解决。

    安装 rpm 工具

    或者:

    下载金山 WPS

    官方地址:WPS Office for Linux

    https://wps-linux-personal.wpscdn.cn/wps/download/ep/Linux2023/17900/wps-office-12.1.0.17900-1.x86_64.rpm?t=1731150867&k=8e9446b92a6e5b727047ec256307be78

    请自行获取有效链接,我使用浏览器下载。

    备注

    这个链接有问题,我不知道怎么使用 fetch 下载,wget 也不行。如果你知道怎么解决,请提交 PR 或 issue。

    安装金山 WPS

    解决依赖问题

    查看依赖:

    可以看到,依赖齐全。

    运行金山 WPS

    使用普通用户权限:

    FreeBSD WPS

    输入法正常。

    FreeBSD WPS

    基于 ArchLinux 兼容层

    新开一个终端,输入 reboot 重启 FreeBSD,否则设置的密码可能会不识别。

    开始安装:

    安装完毕。

    Fcitx5 输入法没反应。待测试。如你知道怎么做,请告诉我们。

    基于 Ubuntu 兼容层

    安装完毕。

    注意

    写作本文时,Fcitx5 输入法没反应。待测试。如你知道怎么做,请告诉我们。

    故障排除与未竟事宜

    • 启动没反应

    缺啥补啥。

    需要 root 才能启动。

    • KDE5 下 WPS 可能会无法启动。

    因为 WPS 启动文件调用的是 bash shell。所以安装 bash 后就可以正常启动了:

    或者

    安装设置

    以下演示基于 VirtualBox 7.1.4 和 Windows11 24H2。

    选择“新建”。

    名称输入“FreeBSD”,最下面几个选项会自动补全。

    设置内存大小,CPU 数量,并开启 EFI。

    技巧

    UEFI 下显卡也可以正常驱动。Wayland 下由于缺少对应的 drm 驱动移植,暂时无法使用。

    调整硬盘大小。

    打开设置。

    显卡控制器用 VBoxSVGA 即可。

    警告

    不要试图勾选下方的 3D,这会在实际上放弃选定 VBoxSVGA。

    开始安装!

    注意

    较低版本的 VirtualBox 安装 FreeBSD 完成后请手动关机,卸载/删除安装光盘,否则还会再次进入安装界面。

    安装后的系统:

    网络设置

    方法 ① 桥接

    技巧

    VirtualBox 中的桥接可以使各个方向的网络均互通无阻。

    桥接是最简单的互通主机与虚拟机的方法,并且可以获取一个和宿主机在同一个 IP 段的 IP 地址,如主机是 192.168.31.123,则虚拟机的地址为 192.168.31.x。

    设置后 # dhclient em0 即可(为了长期生效可在 /etc/rc.conf 中加入 ifconfig_em0="DHCP")。

    如果没有网络(互联网)请设置 DNS 为 223.5.5.5。如果不会,请看本章其他章节。

    方法 ② NAT + 仅主机模式

    注意

    与 VMware 不同,VirtualBox 在纯粹 NAT 模式下,主机和虚拟机是无法互通的,虚拟机可以访问主机的回环接口 10.0.2.2 及其上运行的网络服务,但是主机无法访问虚拟机的端口,且虚拟机与虚拟机之间也是相互隔离的。这是因为 VirtualBox 的 NAT 并不是由主机充当交换机,而是在主机与虚拟机中构造了一个交换机来进行隔离。参见 Network Address Translation (NAT)。你也可以按照手册中的端口转发来联通网络。

    网络设置比较复杂,有时桥接不一定可以生效。为了达到使用宿主机(如 Windows10)控制虚拟机里的 FreeBSD 系统的目的,需要设置两块网卡——一块是 NAT 网络模式的网卡用来上网、另一块是仅主机模式的网卡用来互通宿主机。如图所示:

    技巧

    在上面的选项里有“网络地址转换(NAT)”和“NAT 网络”这两个类似的选项,根据 Introduction to Networking Modes,他们的区别仅在于“NAT 网络”下虚拟机之间是互通的,而“网络地址转换(NAT)”下的虚拟机之间的网络是隔离不互通的。而选项“内部网络”即仅虚拟机之间互通。

    使用命令 # ifconfig 看一下,如果第二块网卡 em1 没有获取到 ip 地址,请手动 DHCP 获取一下:# dhclient em1 即可(为了长期生效可在 /etc/rc.conf 中加入 ifconfig_em1="DHCP")。

    按这种方式设定的网络,其虚拟机和主机所在局域网无法互通。如果没有网络(互联网)请设置 DNS 为 223.5.5.5。如果不会,请看本章其他章节。

    显卡驱动与增强工具

    安装工具

    • 使用 pkg 安装:

    或者使用 Ports:

    查看安装说明

    技巧

    请使用 UEFI,Xorg 可以自动识别驱动,不需要 手动配置 /usr/local/etc/X11/xorg.conf(经过测试手动配置反而更卡,点一下要用 5 秒钟……)。

    服务管理

    • 启用服务并开机自启:

    • 启动服务,调整权限(以普通用户 ykla 为例):

    故障排除与未竟事宜

    EFI 下无法正常关机

    编辑 /etc/sysctl.conf,添加

    然后再重启,再关机就正常了。即使用 ACPI 而不使用 UEFI 接口进行关机操作。

    参考文献

    • 12.0-U8.1 -> 13.0-U2 poweroff problem & solution

    • EFI: VirtualBox computer non-stop after successful shutdown of FreeBSD

    鼠标进去了出不来

    请先按一下右边的 ctrl(正常键盘左右各有一个 ctrl,为默认设置);如果自动缩放屏幕需要还原或者找不到菜单栏了请按 home+ 右 ctrl。

    技巧

    在 108 键盘上,Home 键位于 Scroll Lock 的下方。

    UEFI 固件设置

    开机反复按 Esc 即可进入 VB 虚拟机的 UEFI 固件设置。

    https://www.virtualbox.org

    2.4 将 U 盘启动盘恢复为普通 U 盘(基于 Windows)

    警告

    本文所述操作具有高风险性,可能会损坏部分或全部的数据。除非你已经明确可接受的最坏结果、做好完整可验证的备份、并有可用的回滚方案,否则不要执行。你已经被警告过了。

    如果你无力解决,可以尝试在电商平台购买有偿服务来解决。

    当使用 Rufus、win32diskimager 等软件制作了 U 盘启动盘用于安装系统后,你会发现 U 盘的可见容量可能只有 31.9 MB(即 EFI)。

    使用 Rufus 制作的 U 盘启动盘

    这是一款 64G 的 U 盘,因此我们往往需要恢复还原 U 盘。

    使用 diskgenius 恢复 U 盘启动盘

    DiskGenius 官网:,该软件有收费功能,但是免费功能已足够用。

    下载 DiskGenius

    在下载时,大部分人应该 64 位。

    下载后,发现是个 zip 压缩包。

    需要在桌面新建文件夹 1(即 C:\Users\ykla\Desktop\1),全选压缩包内所有文件,提取至新建的文件夹 1(即 C:\Users\ykla\Desktop\1\DiskGenius)。

    验证结果:

    启动 DiskGenius

    启动 DiskGenius,需要点击 DiskGenius.exe(即 C:\Users\ykla\Desktop\1\DiskGenius\DiskGenius.exe,你那里可能是 DiskGenius)才能启动。

    同意许可证:

    判断哪个是 U 盘

    判断哪个是你的 U 盘,一般我们可以通过 U 盘容量来判断。如果你不记得自己的 U 盘容量,可以查询你的购买记录或拔下来 U 盘看一下,上面一般有标记。

    • 通过容量判断:64G U 盘一般在 Windows/Linux 中显示为 58G(macOS 中为 64G)。

    • 通过盘符判断:在下图中,你也可以通过“EFISYS(E:)”来判断(E 盘),这就是使用 Rufus 制作的 U 盘启动盘。

    • 通过 DiskGenius 显示的接口判断:在下图中,你从顶部的“硬盘 1 接口:USB”中的“USB”也可以看出这是 USB 设备,即可能是 U 盘。

    恢复 U 盘

    在确认了哪个是 U 盘后,右键单击,选中“删除所有分区”。

    在确认后才选择“是”。

    删除后的 U 盘状态:

    鼠标放到顶部空白区,右键单击,点击“建立新分区”。

    设置如下:文件系统我们选择 exFAT(具有通用性,一般操作系统都能读写,且不存在单文件不能大于 4GB 的限制),底下选择对齐到 4096 扇区(4K 对齐)。

    点击左上角的“保存更改”。

    在确认后才选择“是”。

    在确认后才选择“是”。

    最后结果:

    打开资源管理器:

    恢复完成。

    使用傲梅分区助手恢复 U 盘启动盘

    使用思路基本同上。

    下载安装傲梅分区助手

    傲梅分区助手官网:

    我们 “绿色版”(免安装,可直接运行)。我们需要花点时间找到“PartAssist.exe”(你那里可能是 PartAssist)。右键单击,点击打开。

    技巧

    专业版会提示需要使用码,但是 无需 关注其微信公众号,在使用码框中填入数字“1122”即可。参见 ,“分区助手使用码:1122”。

    判断 U 盘设备

    你可以通过以下信息判断是否是 U 盘(看不见的话,用鼠标往下滑):

    打开“属性与健康”:

    观察接口:

    还原 U 盘启动盘

    删除所有分区

    选中 U 盘设备,右键单击“删除所有分区”

    “删除所有分区”,在确认后点击“确定”

    然后显示如下,点击左上角“提交”,确认上述修改。

    点击“执行”

    确认。

    分区删除完毕。

    创建新分区

    点击底部的 U 盘,右键单击,选择“创建分区”

    将文件系统改为“exFAT”,确定,

    然后点击左上角的提交。

    进一步确认:

    执行:

    可以看到,已经自动分配了盘符“E”,现在 U 盘是 E 盘。

    通过命令 diskpart 恢复

    打开 powershell:右键单击 Windows 图标,选中 Windows PowerShell(管理员)。

    MBR 分区表

    GPT 分区表

    3.9 云服务器安装 FreeBSD(基于腾讯云轻量云、阿里云轻量应用服务器)

    其实就是本地硬盘安装 FreeBSD。在不依赖额外介质的前提下借助已有的操作系统(Linux)完成 FreeBSD 的安装。

    使用 virtio 技术半虚拟化的虚拟机

    注意

    以下内容仅供参考,有待测试。如果你测试通过,请告知我们!

    根据反馈,在 VMware EXSI 等半虚拟化平台上安装或升级 FreeBSD 会遇到故障(如阿里云 virtio-blk 驱动会出问题),需要在开机时按 ESC 键,然后输入 set kern.maxphys=65536 回车,再输入 boot 即可正常启动。安装好后需要在 /boot/loader.conf 加入 kern.maxphys=65536 即可避免每次开机重复操作。阿里云升级完成后可能会因为此类问题卡在引导界面,此时需要重启并进 VNC 再进行上述操作。

    注意

    对于不再受安全支持的版本如 9.2,请参考本文并结合手动安装 FreeBSD 章节操作。

    警告

    安装前请在原有的 Linux 系统上看看自己的 IP 及 netmask,可以用命令 ip addr 及 ip route show 查看网关信息、最大传输单元(MTU)数值;注意子网和 CIDR。因为有的服务器并不使用 DHCP 服务,而需要手动指定 IP。

    视频教程

    视频与教程有一定出入,按哪个来都可以。SCP 命令可以用图形化的 Winscp 替代。最后安装完毕建议按照其他章节来设置密钥登录,并禁止密码验证,以提高安全性。

    概述

    以及 等机器都没有 FreeBSD 系统的支持,只能通过特殊的的方法自己暴力安装。

    警告

    请注意数据安全,以下教程有一定危险性和要求你有一定的动手能力。

    上述的服务器面板里没有 FreeBSD 镜像 IDC,所以要用变通的方法来安装。因为 FreeBSD 和 Linux 的内核不通用,可执行文件也不通用,所以无法通过 chroot 再删掉源系统的方法安装。安装的方法是先在内存盘中启动 FreeBSD 系统,即先安装 ,再格式化硬盘安装新系统。mfsBSD 是一款完全载入内存的 FreeBSD 系统,类似于 Windows 的 PE 系统。

    我们需要下载 ,可以提前下好,再使用 WinSCP 传入服务器,服务器直接下载可能需要两个小时。

    取消隐藏的 GRUB 菜单

    现在大多数发行版的 grub 菜单都是默认隐藏的,需要在开机时按 Esc 才能进入,但是有时候会直接进入 BIOS。故,直接取消隐藏比较方便。

    使用 mfsLinux 写入 mfsBSD

    如前所述,且因 FreeBSD 和一般的 Linux 是不同的生态,我们需要先进入 Linux 的内存盘,再在运行于内存中 Linux 里把 mfsBSD 写入硬盘,然后通过 bsdinstall 工具安装系统。

    就在 mfsBSD 下载位置的下方,有 ,它就是我们要用的 Linux。由于它只有 ISO 格式,无法直接在当前环境下启动,因其是纯 initrd 类型的,我们就把启动它的 initrd 和内核提取出来,放在硬盘里手动启动。

    在一般的 Linux 系统中,initrd 是打包成内存盘的小而全的 Linux 根目录,里面可加载驱动,可挂载硬盘,并包含启动初始化程序的必要数据。开机时 Bootloader 加载内核与 initrd,由 initrd 中的脚本进行启动的准备工作,随后运行硬盘里的初始化程序。

    我们先把从那个 ISO 提取出来的内核和 initrd 文件放在根目录下,然后重启机器进入 GRUB 的命令行界面(可在倒计时的时候按 e 进入编辑模式,删掉 linux、initrd 行原有内容,写完后按 Ctrl X 即可加载),手动启动指定的内核和 initrd(可以用 Tab 键补全路径)。然后输入 boot 后回车即可继续启动操作系统。或者按 c 进入编辑模式“。

    技巧

    不一定是 (hd0,msdos1),以实际为准,不要一下都删掉了看不出来了。

    这个特制的 initrd 启动之后并未加载硬盘上的原系统,而是自己连接了网络并打开 SSH 服务器。这样我们就获得了一款运行在内存中的 Linux 系统。

    这个时候应该就可以使用 ssh 连接上服务器了,并且可以安全的格式化硬盘。

    mfsBSD 和 mfsLinux 镜像的 root 密码默认均是 mfsroot

    技巧

    建议在此处使用服务器的“快照”功能对服务器进行备份,以防以下教程操作失误重来耽误时间。

    安装 FreeBSD

    ssh 连接服务器后,使用 kldload zfs 加载 zfs 模块,然后运行 bsdinstall,在出现以下图片时,点 Other 输入图中的指定镜像版本(地址里有即可,你可以自己改哦):

    示例:如 或

    • 我们还可以手动下载 FreeBSD 的安装文件,以 MANIFEST 文件为例:

    故障排除与未竟事宜

    为何不能直接 dd?(错误示范,仅供说明,请勿执行)

    在正常的 Linux 系统内直接把 mfsBSD 的 img dd 到硬盘里,重启之后虽然正常加载 bootloader,但是可能是因为系统又对硬盘进行了写入而无法正常挂载内存盘。

    解释:

    • | 是管道的意思,将上一个命令的标准输出作为下一个命令的标准输入

    • -O- 指把文件下载输出到标准输出,而 dd 在没有指定 if 时会自动从标准输入读取内容

    直接 dd 会报错如图:

    LVM 逻辑卷

    如果有云服务器用 lvm 的话,需要把东西全都放到 /boot 里面,要不然无法识别。

    腾讯云轻量应用可能无法获取 IPv6 地址

    腾讯云的 IPv6 地址下发方式很不标准,他们有自己的子网。

    腾讯云 IPv6 可能是由一个专有的服务提供的,待解决与确证。

    失败的方案

    方案一

    UEFI 下:

    失败,该挂载并非将镜像挂载为内存盘,可以引导,但是 FreeBSD 在启动过程中会报错找不到启动文件。

    并且在 UEFI 下,grub2 不存在 linux16、kfreebsd 等命令。

    方案二

    传统引导下。

    • 安装 syslinux

    • 需要安装 syslinux 以获得 memdisk 支持。

    警告

    GRUB2 的 memdisk.mod 模块不是 MEMDISK。你必须安装此包才有 memdisk。

    • 复制到 /boot

    上面的方法可能适用于 BIOS + MBR,但是 GPT 分区表下测试失败。

    方案三

    缩小 Linux 的 / 分区,直接将 FreeBSD img dd 到新分区中。

    不可行,因为 XFS 不支持在线缩小操作(红帽系列一般都是 XFS + 逻辑卷)。

    方案三

    直接写入 EFI 分区。

    不可行,EFI 分区的大小可能受限。

    方案四

    grub 不支持把 ISO 挂载为内存盘,但是不一定其他引导做不到。

    还没找到……

    方案五

    参照 3.10 节 进行安装。

    参考资料

    • ,作者:金步国。参数解释参见此处,有需要的读者请自行阅读。下同。

    4.7 用户和基本账户管理

    账户类型

    要想访问 FreeBSD,你必须有一个账户,而且所有进程都是以不同账户的名义启动的。

    Port sysutils/htop 命令能够清晰地显示这一点(注意“USER”):

    可以看到系统中存在 ykla、root、_dhcp、messagebus

    $ touch ABC
    $ touch abc
    $ ls
    abc	ABC
    $ file a.txt
    a.txt: Unicode text, UTF-8 text
    $ file b.txt 
    b.txt: Unicode text, UTF-8 text, with very long lines (314), with CRLF line terminators
    PS C:\Users\ykla> chcp
    活动代码页: 936 # 即 GBK
    root@ykla:/home/ykla# locale charmap
    UTF-8
    # pkg install firefox
    # cd /usr/ports/www/firefox
    # make install clean
    pkg install firefox-esr
    #cd /usr/ports/www/firefox-esr/
    # make install clean
    # pkg install chromium
    # cd /usr/ports/www/chromium
    # make install clean
    # pkg install linux-chrome
    # cd /usr/ports/www/linux-chrome/ 
    # make install clean
    export GOOGLE_API_KEY=AIzaSyDVpYvJQUn9HTjAiD89y3xBDOG3oaxV5_E # 这里填 API 密钥
    export GOOGLE_DEFAULT_CLIENT_ID=502882456359-okloi0a7k6vjodss69so97tmqmv0jjj5.apps.googleusercontent.com # 这里填客户端 ID
    export GOOGLE_DEFAULT_CLIENT_SECRET=GoCSPX-iKHEKZmP4w_zdq0Z8nwOqz6SF2_M # 这里填客户端密钥
    chrome --disk-cache-size=0 --disable-gpu
    # wget https://mfsbsd.vx.sk/files/iso/14/amd64/mfsbsd-mini-14.1-RELEASE-amd64.iso
    # wget https://mfsbsd.vx.sk/files/iso/14/amd64/mfsbsd-14.2-RELEASE-amd64.iso
    # apt install syslinux
    # dnf install syslinux
    # cp /usr/lib/syslinux/memdisk /boot/
    # grub2-editenv - unset menu_auto_hide
    ls # 显示磁盘。如果你显示磁盘为 (hd0,gptxxx),说明你的平台不支持此教程
    ls (hd0,msdos2)/
    linux16 (hd0,msdos2)/memdisk iso
    initrd (hd0,msdos2)/bsd.iso
    boot # 输入 boot 后回车即可从 mfsBSD 继续启动
    # ifconfig vtnet0 inet 192.0.2.123/24 # 为网卡 vtnet0 设置 IPv4
    # route add -inet default 192.0.2.1 # 设置默认网关/路由
    # ifconfig vtnet0 # 显示网卡接口 vtnet0 的网络信息
    # route -n show -inet6 # 显示 IPv6 的路由表
    # pkg install rpm4
    # cd /usr/ports/archivers/rpm4/ 
    # make install clean
    root@ykla:/ # cd /compat/linux/
    root@ykla:/compat/linux #  rpm2cpio < /home/ykla/Downloads/wps-office-12.1.0.17900-1.x86_64.rpm  | cpio -id  # 注意路径要换成你自己的
    root@ykla:/compat/linux # /compat/linux/usr/bin/bash # 切换到兼容层的 shell
    bash-5.1# ldd /opt/kingsoft/wps-office/office6/wps
    	linux-vdso.so.1 (0x00007fffffffe000)
    	libdl.so.2 => /lib64/libdl.so.2 (0x000000080105c000)
    	libpthread.so.0 => /lib64/libpthread.so.0 (0x0000000801061000)
    	libtcmalloc_minimal.so.4 => /opt/kingsoft/wps-office/office6/libtcmalloc_minimal.so.4 (0x0000000801600000)
    	liblibsafec.so => /opt/kingsoft/wps-office/office6/liblibsafec.so (0x0000000801066000)
    	libstdc++.so.6 => /opt/kingsoft/wps-office/office6/libstdc++.so.6 (0x0000000801a00000)
    	libm.so.6 => /lib64/libm.so.6 (0x0000000801083000)
    	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x000000080115e000)
    	libc.so.6 => /lib64/libc.so.6 (0x0000000801e00000)
    	/lib64/ld-linux-x86-64.so.2 (0x0000000001021000)
    	librt.so.1 => /lib64/librt.so.1 (0x0000000801179000)
    $ /compat/linux/opt/kingsoft/wps-office/office6/wps
    # chroot /compat/arch/ /bin/bash #进入 Arch 兼容层
    # passwd #为 Arch 的 root 设置一个密码
    # passwd test #为 Arch 的 test 设置一个密码,脚本已经创建过该用户了!
    # chroot /compat/arch/ /bin/bash #进入 Arch 兼容层
    # su test # 此时位于 Arch 兼容层!切换到普通用户才能使用 aur
    $ yay -S wps-office-cn ttf-wps-fonts wps-office-mui-zh-cn # 此时位于 Arch 兼容层!此时用户为 test
    AUR Explicit (2): wps-office-cn-11.1.0.11698-1, ttf-wps-fonts-1.0-5
    :: (1/1) Downloaded PKGBUILD: ttf-wps-fonts
      2 wps-office-cn                            (Build Files Exist)
      1 ttf-wps-fonts                            (Build Files Exist)
    ==> Packages to cleanBuild?
    ==> [N]one [A]ll [Ab]ort [I]nstalled [No]tInstalled or (1 2 3, 1-3, ^4)
    ==> 1  #这里输入 1 回车
    :: Deleting (1/1): /home/test/.cache/yay/ttf-wps-fonts
    HEAD is now at ba3222c Add upstream URL
      2 wps-office-cn                            (Build Files Exist)
      1 ttf-wps-fonts                            (Build Files Exist)
    ==> Diffs to show?
    ==> [N]one [A]ll [Ab]ort [I]nstalled [No]tInstalled or (1 2 3, 1-3, ^4)
    ==> 1 #这里输入 1 回车
    diff --git /home/test/.cache/yay/ttf-wps-fonts/.gitignore /home/test/.cache/yay/ttf-wps-fonts/.gitignore
    new file mode 100644
    index 0000000..12be320
    --- /dev/null
    +++ /home/test/.cache/yay/ttf-wps-fonts/.gitignore
    @@ -0,0 +1,5 @@
    +*.pkg.tar.xz
    +*.src.tar.gz
    +src/
    +pkg/
    +
    diff --git /home/test/.cache/yay/ttf-wps-fonts/PKGBUILD /home/test/.cache/yay/ttf-wps-fonts/PKGBUILD
    new file mode 100644
    index 0000000..21a51bb
    --- /dev/null
    …………
    +url="https://github.com/IamDH4/ttf-wps-fonts"
    +source=("$pkgname.zip::https://github.com/IamDH4/$pkgname/archive/master.zip"
    +        "license.txt")
    +sha1sums=('cbc7d2c733b5d3461f3c2200756d4efce9e951d5'
    +          '6134a63d775540588ce48884e8cdc47d4a9a62f3')
    +
    #这里输入 q
    :: Proceed with install? [Y/n] y #这里输入 y 回车
    ==> Making package: ttf-wps-fonts 1.0-5 (Thu Jul  6 06:23:35 2023)
    …………
    ==> Leaving fakeroot environment.
    ==> Finished making: wps-office-cn 11.1.0.11698-1 (Thu Jul  6 06:37:32 2023)
    ==> Cleaning up...
    
    We trust you have received the usual lecture from the local System
    Administrator. It usually boils down to these three things:
    
        #1) Respect the privacy of others.
        #2) Think before you type.
        #3) With great power comes great responsibility.
    
    For security reasons, the password you type will not be visible.
    
    [sudo] password for test: # 这里输入 test 的密码。注意:如果密码正确但是反复提示密码错误,请你 reboot 重启 FreeBSD 系统重新执行以上操作。
    
    Packages (2) ttf-wps-fonts-1.0-5  wps-office-cn-11.1.0.11698-1
    
    Total Installed Size:  1370.17 MiB
    
    :: Proceed with installation? [Y/n] y # 这里输入 y 确认安装
    (2/2) checking keys in keyring                                      [######################################] 100%
    (2/2) checking package integrity                                    [######################################] 100%
    …………
    (2/2) installing ttf-wps-fonts                                      [######################################] 100%
    :: Running post-transaction hooks...
    (1/4) Arming ConditionNeedsUpdate...
    (2/4) Updating fontconfig cache...
    (3/4) Updating the desktop file MIME type cache...
    (4/4) Updating X fontdir indices...
    [test@ykla ~]$ exit
    # pacman -S libxcomposite #安装缺少的依赖
    # chroot /compat/ubuntu/ /bin/bash #进入 Ubuntu 兼容层
    # apt install  bsdmainutils xdg-utils libxslt1.1 libqt5gui5 xcb # 安装依赖包
    # wget https://wps-linux-personal.wpscdn.cn/wps/download/ep/Linux2019/11698/wps-office_11.1.0.11698_amd64.deb
    # apt install ./wps-office_11.1.0.11698_amd64.deb
    # ldd /usr/lib/office6/wps
    # pkg install bash
    # cd /usr/ports/shells/bash/
    # make install clean
    # pkg install virtualbox-ose-additions
    # cd /usr/ports/emulators/virtualbox-ose-additions/
    # make install clean
    root@ykla:/home/ykla # pkg info -D virtualbox-ose-additions
    virtualbox-ose-additions-6.1.50.1401000:
    On install:
    VirtualBox Guest Additions are installed.
    # VirtualBox 客户端增强功能已安装。
    
    To enable and start the required services:
    
    # sysrc vboxguest_enable="YES"
    # sysrc vboxservice_enable="YES"
    # 启用所需服务,使用 sysrc 添加开机启动项。
    
    To start the services, restart the system.
    # 要启动服务,请重启系统。
    
    In some situations, a panic will occur when the kernel module loads.
    Having no more than one virtual CPU might mitigate the issue.
    # 某些情况下,加载内核模块时可能发生 panic。限制为单核虚拟 CPU 有可能缓解该问题。
    
    For features such as window scaling and clipboard sharing, membership of
    the wheel group is required. With username "jerry" as an example:
    
    # pw groupmod wheel -m jerry
    # 要启用窗口缩放、剪贴板共享等功能,用户需加入 wheel 组。
    # 示例命令将用户 jerry 添加到 wheel 组。
    
    The settings dialogue for FreeBSD guests encourages use of the VMSVGA
    graphics controller. Whilst this might suit installations of FreeBSD
    without a desktop environment (a common use case), it is not appropriate
    where Guest Additions are installed.
    # VirtualBox 会建议 FreeBSD 使用 VMSVGA 显卡控制器。
    # 这对不含桌面的 FreeBSD 系统较为合适,但在已安装 Guest Additions 的环境下并不推荐。
    
    Where Guest Additions are installed:
    
    1. prefer VBoxSVGA
    # 如果已安装 Guest Additions,应优先选择 VBoxSVGA 作为显卡控制器。
    
    2. do not enable 3D acceleration (doing so will invisibly
       lose the preference for VBoxSVGA)
    # 不要启用 3D 加速,否则 VBoxSVGA 的设置会被暗中忽略。
    
    You may ignore the yellow alert that encourages use of VMSVGA.
    
    # 可以忽略提示使用 VMSVGA 的黄色警告信息。
    # service vboxguest enable
    # service vboxservice enable
    # service vboxguest restart # 可能会提示找不到模块,但是不影响使用
    # service vboxservice restart
    # pw groupmod wheel -m ykla # 将笔者的普通用户 ykla 加入 wheel 组以获得权限,你需要改成你自己的普通用户
    hw.efi.poweroff=0
    https://plato.stanford.edu/archives/sum2022/entries/economics-early-modern/
    George Berkeley, Bishop of Cloyne/Philosopher
    George Berkeley
    https://www.diskgenius.cn/
    下载
    https://www.disktool.cn/
    下载
    傲梅分区助手常见问题解答
    下载的 DiskGenius
    下载的 DiskGenius
    验证 DiskGenius 解压结果
    DiskGenius
    DiskGenius
    DiskGenius
    DiskGenius
    DiskGenius
    DiskGenius
    DiskGenius
    DiskGenius
    DiskGenius
    DiskGenius
    DiskGenius
    DiskGenius
    DiskGenius
    傲梅分区助手
    傲梅分区助手
    傲梅分区助手
    傲梅分区助手
    傲梅分区助手
    傲梅分区助手
    傲梅分区助手
    傲梅分区助手
    傲梅分区助手
    傲梅分区助手
    傲梅分区助手
    傲梅分区助手
    傲梅分区助手
    傲梅分区助手
    傲梅分区助手
    傲梅分区助手
    傲梅分区助手专业版使用码
    08-腾讯云轻量云及其他服务器安装 FreeBSD
    腾讯云轻量应用服务器(即腾讯云轻量云)
    阿里云轻量应用服务器
    mfsBSD
    img 格式的 mfsBSD 镜像
    mfsLinux
    https://mirrors.ustc.edu.cn/freebsd/releases/amd64/14.2-RELEASE/
    https://mirrors.nju.edu.cn/freebsd/snapshots/amd64/15.0-CURRENT/
    Remote Installation of the FreeBSD Operating System Without a Remote Console
    GRUB2 配置文件“grub.cfg”详解(GRUB2 实战手册)
    关于启动时不显示 grub 界面的问题
    腾讯云轻量云及其他服务器安装 FreeBSD
    腾讯云轻量云及其他服务器安装 FreeBSD
    腾讯云轻量云及其他服务器安装 FreeBSD
    、
    ntpd
    这几个用户账户。

    FreeBSD 中主要有三类账户:系统账户、用户账户,以及超级用户账户。

    超级用户账户拥有系统中的最高权限,即 root 账户。

    技巧

    实际上是内核根据账户的 EUID(有效用户 ID)是否为 0 来判定其是否拥有 root 权限。参见 main/sys/kern/kern_priv.c 中的 if (suser_enabled(cred)) 代码块部分。

    系统账户由源代码中的 main/etc/master.passwd 所定义,总共 27 个。故,_dhcp、ntpd 都属于系统账户。系统账户是具有受限权限的专用账户,通常用于运行系统服务和守护进程。

    ykla 是笔者在安装系统时创建的普通用户账户。如果希望通过 su 命令切换为 root 用户,必须将该用户加入 wheel 用户组。而 messagebus 是 Port devel/dbus 自动创建的普通用户。

    需要注意的是,虽然普通用户权限受限,但其运行的软件越多,系统暴露的攻击面也会增加,从而带来潜在的提权风险。这并不意味着账户“自动”变得更危险——用户的权限是固定的,不会因为运行进程增加而发生权限提升。相反,只有在程序存在漏洞或配置不当的情况下,攻击者才可能尝试利用这些进程实现权限提升。

    adduser 创建用户

    • 创建一个普通用户(用户名为 ykla),并将其添加到 video 分组:

    示例:创建一个名为 test 的用户,并添加其到 wheel 组,设置其默认 shell 是 sh:

    • ①:登录名命名有一些限制,参见 passwd(5)。但是注意,不支持八位编码字符集,如不支持中文(即仅支持特定 ASCII 字符)。

    rmuser 删除用户与 passwd 密码修改

    • ,用于删除用户。与 adduser 命令一样,也是交互式的。该命令带参数 -y,且能列出用户列表,

    示例:

    参数 -y 用于跳过确认步骤。

    • chpass 命令,以 vi 编辑器方式打开并修改指定用户信息,如不指定用户则默认为当前用户。

    技巧

    export EDITOR=/usr/bin/ee 可将编辑器换成更简单的 ee。

    常用参数:-s,用于登录环境

    示例:

    root 用户可修改所有用户的密码。

    pw 命令

    在 FreeBSD 中,可以用 pw 命令管理用户和组:

    • 创建 admin 分组,并将用户 ykla 同时添加到 admin 和 wheel 分组:

    验证一下:

    • 创建 wheel 组,只添加 root 用户:

    • 从 admin 组里移除用户 ykla:

    • 删除 admin 组:


    admin 和 wheel 权限的区别:

    • admin,具有管理系统的权限(sudo 的默认配置如此),可以使用 sudo 命令。

    • wheel,超级管理员权限(该名称来源于俚语 big wheel,即大人物)。

    pw useradd 命令

    用于新建用户

    示例:

    pw usermod 命令

    用于修改用户信息,常用参数:

    -l,为用户改名 其他参数参考 useradd 子命令。

    示例:

    pw userdel 命令

    用于删除用户,常用参数:

    -r,删除用户同时删除用户主目录及所有相关信息;若不使用该参数则信息保留,仅删除用户

    示例:

    pw usershow 命令

    用于显示用户信息,示例:

    pw usernext 命令

    可返回下一个可用的 UID 和 GID,示例:

    pw lock 命令

    锁定账号,锁定后账号无法登录使用,

    示例:

    pw unlock 命令

    解锁账号,解锁后账号可以正常使用,

    示例:

    pw groupadd 命令

    用于新建组。

    示例:

    pw groupmod 命令

    用于修改组信息,常用参数:

    -g,指定新的 gid

    -l,重命名组名

    -M,替换现有组成员列表,多个用逗号隔开

    -m,为现有组成员列表增加新的成员

    其他参数参考 groupadd 命令。

    示例:

    pw groupdel 命令

    用于删除组,

    示例:

    pw groupshow 命令

    用于显示组信息,

    示例:

    pw groupnext 命令

    可返回下一个可用的 gid,

    示例:

    参考文献

    • FreeBSD 入门笔记,作者 lvv.me

    PS C:\WINDOWS\system32> diskpart # 进入 diskpart
    
    Microsoft DiskPart 版本 10.0.26100.1150
    
    Copyright (C) Microsoft Corporation.
    在计算机上: DESKTOP-M5P610N
    
    DISKPART> list disk # 列出所有磁盘,下图磁盘 1 没有 Gpt 标识,代表这可能是 MBR 分区表的磁盘
    
      磁盘 ###  状态           大小     可用     Dyn  Gpt
      --------  -------------  -------  -------  ---  ---
      磁盘 0    联机              931 GB    41 MB        *
      磁盘 1    联机               57 GB  5120 KB
    
    DISKPART> sel disk 1 # 选中磁盘 1
    
    磁盘 1 现在是所选磁盘。
    
    DISKPART> clean # 清除磁盘 1 所有分区
    
    DiskPart 成功地清除了磁盘。 
    
    DISKPART> cre part pri # 在磁盘 1 创建主分区
    
    DiskPart 成功地创建了指定分区。
    
    DISKPART> list part # 列出磁盘 1 的所有主分区
    
      分区 ###       类型              大小     偏移量
      -------------  ----------------  -------  -------
    * 分区      1    主要                  57 GB  1024 KB
    
    DISKPART> sel part 1 # 选中主分区 1
    
    分区 1 现在是所选分区。
    
    DISKPART> for fs=exfat quick # 快速将主分区 1 格式化为 exfat
    
      100 百分比已完成
    
    DiskPart 成功格式化该卷。
    
    DISKPART> active # 设置主分区 1 为活动分区
    
    DiskPart 将当前分区标为活动。
    
    DISKPART> ass letter=E # 挂载到 E 盘,你也可以拔出来再插进去
    
    DiskPart 成功地分配了驱动器号或装载点。
    PS C:\WINDOWS\system32> diskpart
    
    Microsoft DiskPart 版本 10.0.26100.1150
    
    Copyright (C) Microsoft Corporation.
    在计算机上: DESKTOP-M5P610N
    
    DISKPART> list disk # 列出磁盘
    
      磁盘 ###  状态           大小     可用     Dyn  Gpt
      --------  -------------  -------  -------  ---  ---
      磁盘 0    联机              931 GB    41 MB        *
      磁盘 1    联机               57 GB      0 B
    
    DISKPART> sel disk 1 # 选中磁盘 1
    
    磁盘 1 现在是所选磁盘。
    
    DISKPART> list disk # 当前选中的磁盘前会有标记 *
    
      磁盘 ###  状态           大小     可用     Dyn  Gpt
      --------  -------------  -------  -------  ---  ---
      磁盘 0    联机              931 GB    41 MB        *
    * 磁盘 1    联机               57 GB      0 B
    
    
    DISKPART> clean # 清空磁盘
    
    DiskPart 成功地清除了磁盘。
    
    DISKPART> con gpt # 将磁盘转为 GPT 分区表
     
    DiskPart 已将所选磁盘成功地转更换为 GPT 格式。
    
    DISKPART> list disk # 列出所有磁盘
    
      磁盘 ###  状态           大小     可用     Dyn  Gpt
      --------  -------------  -------  -------  ---  ---
      磁盘 0    联机              931 GB    41 MB        *
    * 磁盘 1    联机               57 GB    57 GB        *
    
    DISKPART> cre part pri # 创建主分区
    
    DiskPart 成功地创建了指定分区。
    
    DISKPART> list par # 列出磁盘 1 的所有分区
    
      分区 ###       类型              大小     偏移量
      -------------  ----------------  -------  -------
    * 分区      1    主要                  57 GB  1024 KB
    
    DISKPART> for fs=exfat quick # 快速格式化磁盘 1 的分区 1 为 exfat
    
      100 百分比已完成
    
    DiskPart 成功格式化该卷。
    
    DISKPART> ass letter=E # 将 U 盘分配到 E 盘符
    
    DiskPart 成功地分配了驱动器号或装载点。
    # grub2-editenv - unset menu_auto_hide
    linux (hd0,msdos1)/vmlinuz
    initrd (hd0,msdos1)/initramfs.igz
    boot # 输入 boot 后回车即可继续启动
    # cd /tmp # 切换到临时路径
    # wget https://mfsbsd.vx.sk/files/images/14/amd64/mfsbsd-se-14.2-RELEASE-amd64.img # 下载 mfsbsd
    # dd if=mfsbsd-se-14.2-RELEASE-amd64.img of=/dev/vda # 你可以看下你是不是 /dev/vda
    # reboot # 重启
    # mkdir -p /usr/freebsd-dist # 创建目录
    # cd /usr/freebsd-dist # 切换目录
    # fetch http://ftp.freebsd.org/pub/FreeBSD/releases/amd64/14.2-RELEASE/MANIFEST # 下载所需文件
    # wget https://mfsbsd.vx.sk/files/images/13/amd64/mfsbsd-se-13.1-RELEASE-amd64.img -O- | dd of=/dev/vda
    set iso=(hd0,gpt2)/bsd.iso
    loopback loop $iso
    set root=(loop)
    chainloader /boot/loader.efi
    boot # 输入 boot 后回车即可继续启动
    # dnf install syslinux
    # cp /usr/share/syslinux/memdisk /boot/
    ls # 显示磁盘
    ls (hd0,gpt2)/ # 显示磁盘 (hd0,gpt2) 下的内容,MBR 分区表可能为 (hd0,msdosx)。不一定是 (hd0,gpt2),以实际为准
    linux16 (hd0,gpt2)/memdisk iso
    initrd (hd0,gpt2)/bsd.iso
    boot # 输入 boot 后回车即可继续启动
      PID△USER       PRI  NI  VIRT   RES S   CPU% MEM%   TIME+  Command
        1 root        20   0 12724  1324 S    0.0  0.0  0:00.08 /sbin/init
      216 root        20   0 36172  7308 S    0.0  0.1  0:00.77 ├─ /usr/local/bin/vmtoolsd -c /usr/local/share/vmware-tools/to
      400 root        48   0 14188  2684 S    0.0  0.0  0:00.00 ├─ dhclient: system.syslog
      403 root         4   0 14188  2760 S    0.0  0.0  0:00.00 ├─ dhclient: em0 [priv]
      481 _dhcp       20   0 14192  2808 S    0.0  0.0  0:00.01 ├─ dhclient: em0
      596 root        20   0 15444  4204 S    0.0  0.1  0:00.05 ├─ /sbin/devd
      800 root        20   0 13904  2792 S    0.0  0.0  0:00.02 ├─ /usr/sbin/syslogd -s
      867 messagebus  20   0 15188  4492 S    0.0  0.1  0:00.29 ├─ /usr/local/bin/dbus-daemon --system
      870 root        20   0 14120  2456 S    0.0  0.0  0:00.06 ├─ /usr/sbin/moused -p /dev/psm0 -t auto
      898 ntpd        20   0 24564  5848 S    0.0  0.1  0:00.06 ├─ /usr/sbin/ntpd -p /var/db/ntp/ntpd.pid -c /etc/ntp.conf -f
      944 root        68   0 23508  9560 S    0.0  0.1  0:00.00 ├─ sshd: /usr/sbin/sshd [listener] 0 of 10-100 startups
      947 root        20   0 13944  2576 S    0.0  0.0  0:00.02 ├─ /usr/sbin/cron -s
      952 root        20   0 56736 23700 S    0.0  0.3  0:00.04 ├─ /usr/local/bin/sddm
      980 root        20   0  257M  124M S    1.0  1.5  0:04.83 │  ├─ /usr/local/libexec/Xorg -nolisten tcp -background none -
      993 root        23   0 50208 27572 S    0.0  0.3  0:00.02 │  └─ /usr/local/libexec/sddm-helper --socket /tmp/sddm-auth-4
      994 ykla        68   0 19992  4620 S    0.0  0.1  0:00.01 │     └─ /usr/local/bin/ck-launch-session /usr/local/bin/start
     1005 ykla        68   0  128M 67736 S    0.0  0.8  0:00.13 │        └─ /usr/local/bin/startplasma-x11
     1010 ykla        68   0  128M 68184 S    0.0  0.8  0:00.25 │           └─ /usr/local/bin/plasma_session
     1017 ykla        20   0  773M  190M S    0.0  2.3  0:01.33 │              ├─ /usr/local/bin/kded6
     1018 ykla        20   0  676M  262M S    0.0  3.2  0:30.96 │              ├─ /usr/local/bin/kwin_x11
    # adduser -g video -s sh -w yes
    # Username: ykla
    root@ykla:/ #  adduser
    Username: test # 用户名 ①
    Full name:  # 全名,可留空
    Uid (Leave empty for default): # UID 设置,可留空
    Login group [test]: # 登录组
    Login group is test. Invite test into other groups? []: wheel # 设置要加入的组,多个用空格隔开,可留空
    Login class [default]: # 登录分类,可留空
    Shell (sh csh tcsh git-shell bash rbash nologin) [sh]: sh  # 除非手动设置默认 shell,否则 shell 为 sh
    Home directory [/home/test]: #指定家目录
    Home directory permissions (Leave empty for default): # 指定家目录权限
    Enable ZFS encryption? (yes/no) [no]: # 是否使用 zfs 加密
    Use password-based authentication? [yes]:  # 是否使用密码
    Use an empty password? (yes/no) [no]:   # 是否空密码
    Use a random password? (yes/no) [no]:   # 是否随机密码
    Enter password: # 输入密码
    Enter password again: # 重复输入密码
    Lock out the account after creation? [no]: # 锁定账号?
    Username   : test
    Password   : *****
    Full Name  :
    Uid        : 1002
    ZFS dataset : zroot/home/test
    Class      :
    Groups     : test wheel
    Home       : /home/test
    Home Mode  :
    Shell      : /bin/sh
    Locked     : no
    OK? (yes/no): yes # 检查有错误否
    adduser: INFO: Successfully created ZFS dataset (zroot/home/test).
    adduser: INFO: Successfully added (test) to the user database.
    Add another user? (yes/no): no # 还需要创建另一个账号吗?
    Goodbye!
    # rmuser -y test1 test2 # 同时删除用户 test1 和 test2
    Removing user (test1): mailspool home passwd.
    Removing user (test2): home passwd.
    
    # chpass -s sh test1 # 修改用户 test1 的登录环境为 /bin/sh
    chpass: user information updated
    # export EDITOR=/usr/bin/ee 
    # chpass # 以 ee 方式打开当前用户信息进行修改
    # passwd # 修改用户密码,如不指定用户则默认为当前用户。
    # pw groupadd admin
    # pw usermod ykla -G admin,wheel
    root@ykla:~ # id ykla
    uid=1001(ykla) gid=1001(ykla) groups=1001(ykla),0(wheel),1002(admin)
    # pw groupadd wheel
    # pw groupmod wheel -m root
    # pw groupmod admin -d ykla
    # pw groupdel admin
    # pw useradd test1 # 创建用户 test1,uid 系统默认,test1 组,登录环境 /bin/sh,未创建主目录
    # pw groupadd test2 # 创建主组 test2
    # pw useradd test2 -u 1200 -m -d /tmp/test -g test2 -G wheel -s sh -c test2 # 创建用户 test2,uid 为 1200,创建主目录,主目录为 /tmp/test,主组为 test2,有管理员权限(Wheel),登录环境 /bin/sh,全名 test2
    # echo password | pw useradd test3 -h 0 # 创建用户 test3,同时设置密码为 password
    # pw usermod test1 -l test2 # 把用户 test1 重命名为 test2
    # pw userdel test2 -r
    # pw usershow test2
    test2:$6$FkxPcs2y.Y8cxyuj$kVDoV1LC.IWKGlSitll3oLArF18aHQYID0JYE.TUuD0YFgba.c7MbGs3xLnmpCZyu1nVKHhNqW2X7a57qN0xg/:1201:1201::0:0:User &:/home/test1:/bin/sh
    # pw usernext
    1202:1202
    # pw lock test2
    # pw unlock test2
    # pw groupadd test -g 1200 # 创建组 test。gid 为 1200;gid 与 uid 有所不同
    # pw groupadd test5 -M test1,test2 # 创建组 test5。成员有 test1 和 test2
    # pw groupmod test -g 1300 # 修改 test 组的 gid 为 1300
    # pw groupmod test -l test2 # test 组重命名为 test2
    # pw groupmod test5 -M test1 # 设置组 test5 的成员为 test1,原有成员会被删除!
    # pw groupmod test5 -m test3 # 为组 test5 新增成员 test3
    # pw groupdel test5
    # pw groupshow test5
    test5:*:1202:test1
    # pw groupnext
    1301

    4.2 Linux 用户迁移指南

    历史

    许多流行于 Linux 中的常见概念,其真正的提出者其实是 BSD:

    • 比如“容器”的概念(可参考 什么是 Linux 容器?);

    • “发行版”的概念(参见 《FreeBSD:原始操作系统发行版的火炬传承者》);

    • Gentoo Ports 的方法源于 BSD;

    • 乃至于开源的理念,也是 BSD 首先提出的,世界上第一款开源许可证就是 BSD 许可证。在这个意义上,BSD 是世界上第一款真正自由开源的操作系统。

    FreeBSD 与 Linux 不同之处

    • FreeBSD 仍然使用古老的 BSD init 而非 systemd;BSD init 与传统的 SysVinit 也不大相同——BSD 没有运行级别(runlevel),也没有 /etc/inittab,均由 rc 控制。

    当以用户进程身份运行 init 时,可模拟 AT&T System V UNIX 的行为——即超级用户可以在命令行中指定所需的运行级别:init 会向原始的(PID 为 1 的)init 进程发送特定信号,以执行相应的操作,实现类似的功能。参见 。例如在 FreeBSD 中执行 init 0 仍然是关机。

    运行级别
    信号
    操作说明
    • FreeBSD 所有用户 shell 默认均是 sh(14 之前 root 为 csh),而非 bash(若你喜欢,亦可切换);

    • FreeBSD 基本系统几乎不包含任何与 BSD 协议不兼容的软件;

    参考文献

    • ,为存档,原文已佚

    • ,各大 init 对比图

    • ,FreeBSD 基本系统中的 GPL 软件

    许多 Linux 的常用概念其实最初源于 BSD,比如容器、发行版的概念。

    ——

    我们现在称为容器技术的概念最初出现在 2000 年,当时称为 FreeBSD jail,这种技术可将 FreeBSD 系统分区为多个子系统(也称为 Jail)。Jail 是作为安全环境而开发的,系统管理员可与企业内部或外部的多个用户共享这些 Jail。2001 年,通过 Jacques Gélinas 的 VServer 项目,隔离环境的实施进入了 Linux 领域。在完成了这项针对 Linux 中多个受控制用户空间的基础性工作后,Linux 容器开始逐渐成形并最终发展成了现在的模样。2008 年,Docker 公司凭借与公司同名的容器技术通过 dotCloud 登上了舞台。

    基本对比

    操作系统
    发布/生命周期(主要版本)
    主要包管理器(命令)
    许可证(主要)
    工具链
    shell
    桌面

    命令替代/软件替代

    因为 Linux 广泛使用的也是 GNU 工具,因此只要理论上不是依赖于特定的 Linux 函数库,该工具都可以在 FreeBSD 上运行。

    Linux 命令/GNU 软件
    BSD Port/命令
    作用说明
    备注

    6.1 Intel 和 AMD 显卡驱动

    警告

    请勿使用 sysutils/desktop-installer,会引发不必要的错误和问题。

    未安装显卡驱动的设备图片实例

    没安装驱动

    未安装显卡驱动。

    显卡支持情况

    FreeBSD 的 i915、AMD 显卡驱动和与基本系统是分离的。目前是移植的 LTS 版本 Linux kernel 的 drm 驱动,作为 Port 来提供的。面向不同的系统版本,能支持的 Linux 内核版本也是不同的。

    技巧

    这种移植并不覆盖 Linux 现有的全部 drm GPU 驱动,目前仅有 i915 amd 和 radeon,其他 vmwgfx、xe、virtio 等等都是未进行移植的!因此一般情况下,也无法在 Wayland 下运行上述未移植的 GPU,他们目前只能使用 X11。

    注意

    DG2 Arc 显卡尚不受支持(截止 drm 6.10 版本),参见 。可能需要等到 6.12 的移植才能受支持。

    注意

    根据笔记本和桌面项目反馈,“在使用 drm-kmod 6.1 及更高版本的桌面系统(搭载 RX 570、580 等 AMD GPU)在运行数分钟或数小时后会逐渐出现严重卡顿,最终会导致桌面完全不可用。”该问题预计会在今年 12 月初前得到解决。参见

    • 非 LTS 版本(Port graphics/drm-latest-kmod/,仅 15.0/16.0,目前 6.9):

      • Intel:Meteor Lake 图形在 6.7 后默认启用;

      • AMD:引入对 RDNA 3+ / RDNA 4 的初步支持。覆盖 GCN 到 RDNA 3 全部架构,并预置 RDNA 4 驱动。

    技巧

    可以在 port 开发者手册中的最后一章中查询 OSVERSION 对应的版本和 Git 提交。

    查看本机 OSVERSION:

    警告

    每次点版本或大版本升级时,可能需要重新获取新系统源代码,重新编译安装显卡驱动模块方可顺利完成升级,而不是卡在黑屏的地方:或者你使用“模块源”。

    DRM 即“Direct Rendering Manager”(直接渲染管理器),DRM 是 Linux 内核的子系统,负责与现代显卡的 GPU 进行交互。FreeBSD 在内核实现了 Linux 内核编程接口(LinuxKPI),并移植了 Linux DRM,类似的还有一些无线网卡驱动。

    加入 Video 组

    警告

    即使加入了 wheel 组,也应再加入 video 组,否则:硬解显示会出问题、Wayland 下普通用户将无权限调用显卡。

    安装 Intel 核显/AMD 显卡驱动

    注意

    在使用 Gnome 时,如果自动锁屏/息屏,可能无法再次进入桌面。见 。

    注意

    在使用 Ports 时,drm 需要在 /usr/src 中有一份当前版本系统源代码,可参考系统更新章节。如果你是参考的本书其他章节进行的安装,那么你的系统中很可能已经有一份源码了,无需再获取源码。

    FreeBSD 14.X

    技巧

    若要使用 pkg 安装,请参照本书其他章节配置 kernel modules(kmods)内核模块源。

    或者(如有问题请使用 Ports)

    FreeBSD 15.0

    注意

    像英特尔三代处理器的 HD 4000 这种比较古老的显卡,他在传统的 BIOS 模式下无需额外安装显卡驱动,但是 UEFI 下有可能会花屏(FreeBSD 13.0 及以后无此问题),且需要安装此 DRM 显卡驱动。

    配置 Intel 核显/AMD 显卡

    请按如下进行操作:

    Intel 核芯显卡

    AMD

    • 如果是 HD7000 以后的 AMD 显卡,添加 amdgpu(大部分人应该使用这个,如果没用再换 radeonkms)

    • 如果是 HD7000 以前的 AMD 显卡,添加 kld_list="radeonkms"(这是十多年前的显卡了)

    故障排除与未竟事宜

    注意

    遇到任何问题时,请先使用 Ports 重新编译安装。尤其是在版本升级时。

    • KLD XXX.ko depends on kernel - not available or version mismatch.

    提示内核版本不符,请先升级系统或使用 ports 编译安装。14.3-RELEASE 及以上版本可以用内置的内核模块源(参见其他章节),应该不会出现类似问题。

    视频硬解

    Intel 视频硬解

    如果不配置此节,blender 等软件将无法运行!直接“段错误”。

    • 使用 pkg 安装:

    • 或者使用 Ports 安装:

    AMD 视频硬解

    • 使用 pkg 安装

    • 或者使用 Ports 安装:


    可能还需要这么做:

    将以下内容写入 /usr/local/etc/X11/xorg.conf.d/20-amdgpu-tearfree.conf(请自行创建)

    然后就可以用 mpv --hwdec xxx.mp4 来测试了。请自行安装 mpv。

    亮度调节

    通用

    • 对于一般计算机:

    • 对于 Thinkpad:

    英特尔/AMD

    backlight 自 FreeBSD 13 引入。

    如果上述操作不起作用,请检查路径 /dev/backlight 下都有哪些设备。

    • 示例(照抄不会起作用的,自己 ls /dev/backlight 看看):

    参考文献

    • 经过测试,此部分教程适用于 renoir 显卡:

    检查状态

    如何判断是否成功驱动显卡:

    你会发现你多了一个设备,名字是 card0(一般是数字是 0,如果有第二块显卡,名字会是 card1 ),同时多出一个名为 backlight0 的设备(HDMI 下不会存在该设备)。

    故障排除与未竟事宜

    • 如果显卡使用驱动有问题请直接联系作者:

    • 如果笔记本出现了唤醒时屏幕点不亮的问题,可以在 /boot/loader.conf 中添加 hw.acpi.reset_video="1" 以在唤醒时重置显示适配器。

    • 普通用户若非 wheel 组成员,那么请加入 video 组。如果普通用户没有被加入到 video 组(wheel 还不够),那么 KDE 的设置,关于此系统中的显卡驱动将永远显示为 llvmpipe。会影响 Wayland 下普通用户的显示或硬解调用。

    参考文献

    • 显卡详细支持情况可以看

    5.1 FreeBSD 镜像站现状

    现状

    官方拒不开放 rsync

    主要问题在于官方无论如何也不开放 rsync 且不接受镜像站的官方二级镜像申请。

    根据目前可查信息,FreeBSD 项目至迟在 2015 年 5 月就停止了公开 rsync。参见 Add small section explaining we are not allowing public mirrors of packages and possible workarounds.。给出的说明理由是:

    Due to very high requirements of bandwidth, storage and adminstration the FreeBSD; Project has decided not to allow public mirrors of packages.

    由于对带宽、存储和管理的要求极高,FreeBSD 项目决定不允许公共镜像软件包。

    这个理由着实让人摸不到头脑。


    2025 收到的回复:

    On Fri, 28 Feb 2025, at 17:45, ykla wrote:

    How to mirror pkg and update from official mirror sites?

    As we replied on several occasions before: pkg and freebsd-update need machines under our control with internet connectivity to the rest of our cluster.

    At one point someone tried to offer a machine in Nanjing. That then turned into a virtual machine and the conversation went nowhere. We can't use a virtual machine. We need real hardware. With real storage. And real transit.

    翻译如下:

    2025 年 2 月 28 日 星期五 17:45,ykla 写道:

    如何通过官方镜像站点进行 pkg 镜像和系统更新?

    正如我们此前多次回复的:pkg 和 freebsd-update 功能需要由我们管控的物理服务器支持(注:这里对方指 root 权限),这些服务器需与我们的集群保持网络连接。

    此前有人曾提议提供南京的一台机器,但后续方案变更为虚拟机形式后讨论便陷入停滞。我们无法使用虚拟机方案,需要真实的硬件设备(注:对方指裸金属)、实体存储介质和物理网络传输链路。

    拒绝开放的可能性原因分析

    安全性问题

    FreeBSD 集群过去曾被入侵过,在全面转向 pkg 后,就不允许镜像了。

    • ,中文说明

    • ,官方说明

    传输问题

    目前的集群似乎是通过 ZFS 文件系统(zfs send/zfs receive)直接传输的,不是传统意义上的 rsync 镜像站模式。

    带宽不足

    根据 ,集群管理员 bofh 的回复:

    There are couple of reasons:

    1. Bandwidth from our central servers. Increasing number of community mirrors require more bandwidth in case everyone starts pulling altogether like just after a new quarterly branch

    2. While many sites are excited to create mirrors as they think they have real bandwidth in reality they lose their moral bandwidth in couple of days and our mirrors are no longer in sync. We are often communicated regarding the problems of other community mirrors. We already operate in a tight schedule and often overseeing other mirrors is just another nail in the wall.

    3. We still accept mirrors but on a different way. If people can sponsor bare metal we would be happy to deploy a new mirror. However our mirror requirements are pretty high. You can have a look at the following to understand our requirements:

    译文:

    有几个原因:

    1. 来自我们中心服务器的带宽。社区镜像数量增加时,如果大家都同时开始拉取,比如在一个新的 quarterly 分支刚发布之后,就会需要更多带宽。

    2. 许多站点在创建镜像时非常兴奋,确信自己拥有真实的带宽,但实际上,他们的“道义带宽”往往在几天后就耗尽了,也不再同步我们的镜像。我们经常收到关于其他社区镜像问题的沟通。我们本来日程就很紧,再去监督其他镜像就像给墙上再钉一颗钉子一样。

    3. 我们仍然接受镜像,但方式有所不同。如果有人能够赞助裸金属服务器,我们会很乐意部署新的镜像。不过,我们对镜像的要求相当高。你可以查看以下内容来了解我们的要求:

    思考题

    我认为,“不接受社区镜像”与“拒绝镜像”是两件完全不同的事情。Ubuntu 拥有大量社区镜像,而其中真正被官方认可的只是极少数。这本质上体现了用户的自由选择。用户可以选择看起来更安全的官方镜像,也可以为了速度而牺牲部分安全与隐私。我们没有资格替用户做这个选择。

    对于一个快要渴死的人来说,问题不是他该喝可口可乐还是污水。

    在关闭 rsync 且不提供其他同步渠道的情况下——而多数开源镜像都依赖 rsync——他们实际上阻碍了 FreeBSD 项目的自身发展。项目声称带宽不足,但我怀疑 OpenBSD 或 NetBSD 的带宽能显著更高。然而它们却通过开放与自由的方式,让用户自己掌握选择。

    就像今天发生的事情一样:我批评了一个据说用于测试并切换不同 FreeBSD 包镜像的测速工具,可安装它却需要额外拉上 45 个依赖。感觉就像在想象皇帝应该穿什么衣服、用哪种金锄头锄地——或者发明一种只能在白天亮灯的灯泡。

    我并非在批评任何个人;我真正质疑的是,这套系统及其设计本身是否合理。

    FreeBSD 只是在技术上切换到了 Git,思想还停留在 SVN 时代。SVN 是集中式的、统一的、强权限的;Git 是分布式的,去权限的,允许自由分支的。当代互联网强调的是去中心化和分享。没有为什么,正如城市化和逆城市化一样都是合理的,也都是不合理的,只是一种趋势要求我们必须这样那样做,否则就会失去自身存在的合理性。你说得有道理也是现实,他们可能同步几天就撒手不管了。而问题在于,选择权应该取决于用户而不是项目本身。我认为这是一种家长制作风的体现。这也表明了老项目转型的困难更多地不是技术而是理念。

    即日已抵龙南,明日入巢,四路兵皆已如期并进,贼有必破之势。某向在横水,尝寄书仕德云:“破山中贼易,破心中贼难。”区区剪除鼠窃,何足为异?若诸贤扫荡心腹之寇,以收廓清平定之功,此诚大丈夫不世之伟绩。数日来谅已得必胜之策,捷奏有期矣。何喜如之!

    中国大陆没有 FreeBSD 官方镜像站

    多次联系均无二次联系,如邮件列表,大概五次,其中三次回应,两次无回应。其主要回复内容为“深表歉意,但台湾地区已有镜像”。并未直接说明如何镜像,此外特别向中国科学技术大学 Linux 用户协会(其中其他镜像站并未理会,如清华大学 TUNA 协会)申请镜像,对方提到,FreeBSD 也是无人回应。

    国内网络环境如此,提升速度采取代理方式也是基本功,但是,不能够要求每个人水平都一样,提供便捷的网络服务,方便更多人的使用,才是发展 FreeBSD 的核心要义。请朋友们注意这一点,镜像站是基础设施,就像那句话,“要想富,先修路”,如果通往 FreeBSD 的康庄大道不通,则全是荆棘的小道。在此号召能够联系到 FreeBSD 官方的朋友们,首先解决这一基本问题。

    目前开放的非官方 issue 镜像申请:

    USTC:

    目前已经关闭的非官方 issue 镜像申请:

    TUNA:

    呼吁高校学生参与镜像 FreeBSD

    如果你有办法或者能够有条件搭建非官方镜像,也可以使用 USTCLUG 所提供的同步脚本:

    来搭建非官方镜像站。赠人玫瑰,手留余香。

    优先建议高校学生使用校内资源搭建,或者直接从 USTC 的 rsync 服务来同步。建议同步前先咨询 USTCLUG,以免带来不必要的麻烦,联系方式: 。参考 来进行同步。

    官方给出的镜像站基本要求

    • 服务器的 root 权限,这一点上国内的大学开源镜像站不会给与;

    • IPv6 及 CN2 网络——国内也很缺乏;

    • BGP 网络;

    • 足够的存储空间(约 50TB)和 1G 带宽;

    细节可看:

    • 单个镜像:

    • 完整镜像:

    非官方镜像站

    FreeBSD 在中国大陆境内没有官方镜像站;在中国台湾地区有官方镜像站。

    FreeBSD 在中国大陆境内的唯一几个能正常同步的镜像站,均未使用 rsync 等方式进行同步,都是采取的一些特殊 "手段",参见 USTCLUG 所提供的同步脚本:

    注意

    我们呼吁有余力者对上述两个脚本进行维护修订以减轻 USTC 镜像站的压力,同时为境内提供更好的 FreeBSD 镜像服务。

    FreeBSD 目前在大陆非官方镜像站有若干个:

    • 中国科学技术大学镜像站(USTC)(pkg、ports、pub)

      • FreeBSD Pub

      • FreeBSD Packages

      • FreeBSD Ports

    FreeBSD 官方联系方式:

    • ,这个邮件列表似乎已经死亡,没有任何人回复和收发邮件。

    其他思路或解决方案

    自行使用 Poudriere 进行构建并分发。如 (已跑路)

    3.5 手动安装双系统(后安装 FreeBSD)

    本文基于 FreeBSD-14.2-RELEASE-amd64-disc1.iso,演示在 UEFI 环境下,FreeBSD 14.2 RELEASE 与 Windows 11 24H2 的双系统安装。

    技巧

    本文示例要求先安装其他操作系统,再安装 FreeBSD。

    简单方法(无众多数据集)

    注意

    以此部分所述方法,在使用 ZFS 时,只会创建一个名为 root 的 zpool,并且直接挂载到 /。并不会像自动安装那样创建 zroot/ROOT/default 以及众多的数据集。你可以以后再创建数据集进行替换操作,但如果你想在安装开始就使用与自动安装相同的布局,请跳转到本节 Shell 分区部分。

    首先需要为 FreeBSD 在硬盘留出空间:不一定要求是硬盘末尾,硬盘中间也可以,因为正常的 Windows 安装最后一个分区(本例中为 nda0p4)是恢复分区。分区完成后在 FreeBSD 下,看起来就是这样的:

    你应关闭安全启动和快速启动——或者你还可以从 Windows 设置——> Windows 更新——> 高级选项——> 恢复——> 高级启动选择从 U 盘设备启动。然后正常引导 FreeBSD 进行安装流程,直至分区选择。

    此处选择 Manual

    技巧

    其实这里调用的是软件 sade(sysadmins disk editor,系统管理员磁盘编辑器),bsdconfig 亦同。

    这里可以看到硬盘分区。仅有一块硬盘:有 300M 的 EFI 系统分区、16M 的 MSR 分区、64G 的 Windows 系统分区(即 C 盘)以及未显示空闲空间。直接选择 Create(创建)。

    此处,第一行输入分区类型(即下方会列出的 Filesystem type)。如要添加 swap 分区,请首先添加,后添加难以控制分区大小。在添加 UFS、ZFS 时,需在 Mountpoint 处添加 /,表示将分区挂载到 /。Label 是 FreeBSD 的卷标,方便识别分区,可以根据情况填或不填。此处使用 ZFS,不添加 swap 分区,并且填入卷标 zroot。

    用 TAB 键 选择到 OK 按回车键。

    这里会警告 ZFS 分区无法启动,但经过实测是可以正常启动的,选择 Yes 忽略:

    注意

    请将 Windows 创建的 300M 的 EFI 的挂载点设置为 /boot/efi。

    选择 Finish(完成)

    选择 Commit(确认)

    之后会进入正常安装的流程。安装完成后:

    进入系统后可以看到,仅有一个 root 数据集。可以手动将数据集改为自动安装的样子,亦可参照下文在安装时进入 shell 进行分区。

    Shell 分区

    仍然进行到分区选择,选择 Shell

    之后会进入 TTY:

    执行以下命令。

    加载 ZFS 内核模块

    配置 ZFS 对齐方式(只影响新创建的硬盘分区)

    技巧

    12 即 2^12 = 4096 字节(4KB)的扇区大小。默认参数(命令 sysctl vfs.zfs.vdev.min_auto_ashift 可看到 ISO 的默认参数)是 9,即 2^9 = 512 字节。

    思考题

    若你使用 NVMe,则正常新装系统(UEFI+GPT,不带 freebsd-boot 分区)默认参数应是 12。但是 4K 对齐究竟对齐的是什么?因为 SSD 固态硬盘并没有所谓扇区。

    创建分区

    查看分区情况

    挂载临时文件系统准备安装

    创建 ZFS 池

    创建 ZFS 数据集

    技巧

    上述参数来着自 。你也可以在安装好的系统里用命令 zfs get exec,setuid,mountpoint 进行查看。代码位于 src /usr.sbin/bsdinstall/scripts/zfsboot。

    修改文件夹权限

    设置交换分区到 fstab

    技巧

    \t 是一个转义字符,表示按了一次 Tab 键,此处用于对齐分割,换成空格也是一样的效果。你也可以使用 ee 编辑器手动写入(ee /tmp/bsdinstall_etc/fstab)对应条目:

    下同。

    设置启动项与 UEFI

    • ①:\n 代表 Unix 换行。Windows 中每段结尾实际是 \r\n——即先回车再换行。此处等同于 ee /tmp/bsdinstall_etc/rc.conf,然后加入 zfs_enable="YES"。

    完成

    这样我们就手动创建了一套与自动安装相同的结构(/home/用户名 分区除外)

    参考文献

    2.1 安装前的准备工作

    硬件支持情况

    最低硬件需求

    针对 AMD64 架构,14.2-RELEASE 在虚拟机上测得:

    FreeBSD 版本

    对应 DRM 驱动版本

    GPU 支持范围(AMD / Intel)

    备注

    FreeBSD 14.3-RELEASE

    drm-61-kmod(基于 Linux 6.1 DRM)

    - AMD: GCN 1(Southern Islands) GCN 5(Polaris / Vega) RDNA 1 / RDNA 2 / RDNA 3(Radeon RX 7000 系列) - Intel: Gen 4(GMA X3000 / 965) Gen 5(Iron Lake) Gen 6(Sandy Bridge) Gen 7(Ivy / Haswell) Gen 8(Broadwell) Gen 9(Skylake / Kaby Lake / Coffee Lake) Gen 10(Cannon Lake – 已废弃) Gen 11(Ice Lake / Jasper Lake) Gen 12(Tiger Lake / Alder Lake)

    理论支持 Intel 3 ~ 12 代 GPU。

    FreeBSD 15.0/16.0-CURRENT

    drm-66-kmod(基于 Linux 6.6 DRM)

    - AMD: 自 GCN 1 起至 RDNA 3(Radeon RX 7000 系列),并包含 Instinct MI300 加速卡 支持。 - Intel:  • Gen 4–8: 旧核显(GMA、HD Graphics 4000 等)  • Gen 9: Skylake / Kaby Lake / Coffee Lake  • Gen 10: Cannon Lake(已废弃)  • Gen 11: Ice Lake / Jasper Lake  • Gen 12: Tiger Lake / Alder Lake  • Gen 13: Raptor Lake(基本兼容 Alder Lake 驱动)  • Gen 14: Meteor Lake(实验性,已合入 drm-66)

    实测 Intel Alder Lake-N (N100)、i7-i260p 显卡驱动加载正常,显示与视频加速功能稳定; 理论支持 Intel 3 ~ 14 代 GPU(含 Meteor Lake),但 13 代及以后缺乏充分实测;

    Intel Arc A770: Kernel panic on kldload i915kms.ko #315
    https://github.com/FreeBSDFoundation/proj-laptop/issues/89
    Bug 255049 - x11/gdm doesn't show the login screen
    backlight -- configure backlight hardware
    https://github.com/freebsd/drm-kmod/issues
    wiki/Graphics
    bsdinstall(8)
    How to manually install FreeBSD on a remote server (with UFS, ZFS, encryption...)
    RootOnZFS/GPTZFSBoot
    root@ykla:~ # uname -U
    1500019
    # pw groupmod video -m 你的用户名
    # cd /usr/ports/graphics/drm-61-kmod
    # make BATCH=yes install clean
    # pkg install drm-61-kmod
    # cd /usr/ports/graphics/drm-66-kmod
    # make BATCH=yes install clean
    # sysrc -f /etc/rc.conf kld_list+=i915kms
    # sysrc -f /etc/rc.conf kld_list+=amdgpu
    # sysrc -f /etc/rc.conf kld_list+=radeonkms
    # pkg install libva-intel-media-driver
    # cd /usr/ports/multimedia/libva-intel-media-driver/ 
    # make install clean
    # pkg ins mesa-gallium-va mesa-gallium-vdpau
    # cd /usr/ports/graphics/mesa-gallium-va/ && make install clean
    # cd /usr/ports/graphics/mesa-gallium-vdpau/ && make install clean
    Section "Device"
      Identifier "AMDgpu"
      Driver "amdgpu"
      Option "TearFree" "on"
    EndSection
    # sysrc -f /boot/loader.conf  acpi_video="YES"
    # sysrc -f /boot/loader.conf  acpi_ibm_load="YES"
    # sysrc -f /boot/loader.conf  acpi_video="YES"
    # backlight          # 打印当前亮度
    # backlight decr 20  # 降低 20% 亮度
    # backlight +        # 默认调整亮度增加 10%
    # backlight -        # 默认调整亮度减少 10%
    # backlight -f /dev/backlight/amdgpu_bl00 - 10
    # backlight -f /dev/backlight/backlight0 - 10  
    $ ls -al /dev/dri/card0
    lrwxr-xr-x  1 root wheel 8 Jul  2 19:39 /dev/dri/card0 -> ../drm/0
    
    $ ls -al /dev/backlight/backlight0 
    crw-rw---- 1 root video 1, 177 2025年 8月22日 /dev/backlight/backlight0 # 台式机 HDMI 等输出可能没有
    # gpart show
    =>       34  419430333  nda0  GPT  (200G)
             34       2014        - free -  (1.0M)
           2048     204800     1  efi  (100M) # EFI 分区
         206848      32768     2  ms-reserved  (16M) # MSR 分区
         239616  207992832     3  ms-basic-data  (99G) # 这个是 C 盘,原先有 200G 这么大。现在 C 盘和恢复分区之间空余了 100G
      417947648    1478656     4  ms-recovery  (722M) # 恢复分区
      419426304       4063        - free -  (100G)
    # zfs list
    NAME  USED   AVAIL  REFER  MOUNTPOINT
    root  534M    130G   534M  nont
    # kldload zfs
    # 强制 4K 对齐
    # sysctl vfs.zfs.vdev.min_auto_ashift=12
    vfs.zfs.vdev.min_auto_ashift: 9 -> 12
    # 创建 swap 分区(-t),卷标为 swap(-l),大小为 4G(-s),对齐(-a),注意替换 nda0
    # gpart add -a 4k -l swap -s 4G -t freebsd-swap nda0
    
    # 创建 ZFS 分区,卷标为 zroot,使用全部空余空间,注意替换 nda0
    # gpart add -a 4k -l zroot -t freebsd-zfs nda0
    # gpart show
    =>       34  419430333  nda0  GPT  (200G)
             34       2014        - free -  (1.0M)
           2048     204800     1  efi  (100M)
         206848      32768     2  ms-reserved  (16M)
         239616  207992832     3  ms-basic-data  (99G)
      208232448    8388608     5  freebsd-swap  (4.0G)
      216621056  201326592     6  freebsd-zfs  (96G)
      417947648    1478656     4  ms-recovery  (722M)
      419426304       4063        - free -  (2.0M)
    # mount -t tmpfs tmpfs /mnt
    # 创建 ZFS 池,暂时挂载至 /mnt(-o altroot=/mnt),使用 lz4 压缩(-O compress=lz4。可换成 zstd 等),关闭时间标签(-O atime=off),/dev/gpt/zroot 是我们刚建立的卷标
    # zpool create -f -o altroot=/mnt -O compress=lz4 -O atime=off -m none zroot /dev/gpt/zroot
    # 创建根数据集
    # zfs create -o mountpoint=none zroot/ROOT
    # 创建一个名为 `zroot/ROOT` 的数据集,不设置挂载点(`mountpoint=none`),通常用于作为系统底层的根数据集,可以用于创建下面的子数据集。
    
    # 创建默认根数据集
    # zfs create -o mountpoint=/ zroot/ROOT/default
    # 创建一个名为 `zroot/ROOT/default` 的数据集,并将其挂载到根目录 `/`,用于系统的默认根文件系统。
    
    # 创建 /home 数据集
    # zfs create -o mountpoint=/home zroot/home
    # 创建一个名为 `zroot/home` 的数据集,并挂载到 `/home`,通常用于存储用户主目录。
    
    # 创建 /tmp 数据集,设置 exec 为 on,setuid 为 off
    # zfs create -o mountpoint=/tmp -o exec=on -o setuid=off zroot/tmp
    # 创建 `zroot/tmp` 数据集并挂载到 `/tmp`,允许执行文件(`exec=on`),但禁用 setuid(`setuid=off`)防止该目录中的文件使用 setuid 提升权限。
    
    # 创建 /usr 数据集,并设置 canmount 为 off
    # zfs create -o mountpoint=/usr -o canmount=off zroot/usr
    # 创建 `zroot/usr` 数据集并挂载到 `/usr`,但由于设置 `canmount=off`,该数据集不会被自动挂载,通常用于特定的系统配置。
    
    # 创建 /usr/ports 数据集,设置 setuid 为 off
    # zfs create -o setuid=off zroot/usr/ports
    
    # 创建 /usr/src 数据集
    # zfs create zroot/usr/src
    
    # 创建 /var 数据集,设置 canmount 为 off
    # zfs create -o mountpoint=/var -o canmount=off zroot/var
    
    # 创建 /var/audit 数据集,设置 exec 和 setuid 为 off
    # zfs create -o exec=off -o setuid=off zroot/var/audit
    
    # 创建 /var/crash 数据集,设置 exec 和 setuid 为 off
    # zfs create -o exec=off -o setuid=off zroot/var/crash
    
    # 创建 /var/log 数据集,设置 exec 和 setuid 为 off
    # zfs create -o exec=off -o setuid=off zroot/var/log
    
    # 创建 /var/tmp 数据集,设置 setuid 为 off
    # zfs create -o setuid=off zroot/var/tmp
    
    # 创建 /var/mail 数据集,设置 atime 为 on
    # zfs create -o atime=on zroot/var/mail
    # 创建 `zroot/var/mail` 数据集并设置 `atime=on`,意味着每次读取文件时都会更新访问时间,通常用于存放邮件数据。
    # 修改 /mnt/tmp 和 /mnt/var/tmp 权限为 1777,保证临时目录权限正确
    # chmod 1777 /mnt/tmp
    # chmod 1777 /mnt/var/tmp
    # 配置 swap 分区挂载,注意替换 /dev/nda0p5,可以用命令 gpart show nda0 看一下
    # printf "/dev/nda0p5\tnone\tswap\tsw\t0\t0\n" >> /tmp/bsdinstall_etc/fstab
    /dev/nda0p5  none  swap  sw  0  0
    # 设置 ZFS 启动路径为 zroot/ROOT/default
    # zpool set bootfs=zroot/ROOT/default zroot
    
    # 配置 FreeBSD 启动时加载 ZFS①
    # printf 'zfs_enable="YES"\n' >> /tmp/bsdinstall_etc/rc.conf
    
    # 挂载 EFI 系统分区
    # 挂载现有 EFI 系统分区,注意替换 /dev/nda0p1
    # mount -t msdosfs /dev/nda0p1 /media
    
    # 在 EFI 系统分区创建启动目录
    # mkdir -p /media/efi/freebsd
    
    # 复制 EFI 启动文件到 EFI 系统分区
    # cp /boot/loader.efi /media/efi/freebsd/
    
    # 使用 efibootmgr 添加 UEFI 启动项
    # efibootmgr --create --activate --label "FreeBSD" --loader "/media/efi/freebsd/loader.efi"
    
    # 卸载 EFI 系统分区
    # umount /media
    # 退出 shell,FreeBSD 会继续安装流程
    # exit  
    root@ykla:/home/ykla # zfs list
    NAME                 USED  AVAIL  REFER  MOUNTPOINT
    zroot                921M  91.6G    96K  none
    zroot/ROOT           919M  91.6G    96K  none
    zroot/ROOT/default   919M  91.6G   919M  /
    zroot/home           128K  91.6G   128K  /home
    zroot/tmp            104K  91.6G   104K  /tmp
    zroot/usr            288K  91.6G    96K  /usr
    zroot/usr/ports       96K  91.6G    96K  /usr/ports
    zroot/usr/src         96K  91.6G    96K  /usr/src
    zroot/var            636K  91.6G    96K  /var
    zroot/var/audit       96K  91.6G    96K  /var/audit
    zroot/var/crash       96K  91.6G    96K  /var/crash
    zroot/var/log        156K  91.6G   156K  /var/log
    zroot/var/mail        96K  91.6G    96K  /var/mail
    zroot/var/tmp         96K  91.6G    96K  /var/tmp

    6

    SIGINT

    重启计算机。

    c

    SIGTSTP

    阻止进一步的登录。

    q

    SIGHUP

    重新扫描终端设备文件(ttys(5))。

    GNU

    gcc

    bash

    可选

    Arch Linux

    滚动更新

    GNU

    gcc

    bash

    可选

    RHEL

    GNU

    gcc

    bash

    Gnome

    FreeBSD

    pkg/ports

    BSD

    clang

    csh/sh

    可选

    Windows

    可选

    专有

    可选

    powershell

    Windows 桌面

    MacOS

    1 年/约 5 年

    无

    clang

    zsh

    Aqua

    free

    sysutils/freecolor

    显示内存使用情况

    FreeBSD 未提供 free 命令,因为其依赖 Linux 特性,由包 procps 提供。如确需要 free,可用 https://github.com/j-keck/free 其他替代命令是 vmstat

    lscpu

    sysutils/lscpu

    显示处理器信息

    /

    glibc

    bsdlibc

    C 库

    /

    GCC

    LLVM + Clang

    编译器、编译链工具

    非要用也可以安装 devel/gcc

    vim

    editors/vim/

    文本编辑器

    FreeBSD 的 vi 不是软连接到 vim,而是早期的 nvi

    wget

    ftp/wget

    下载器

    系统默认的下载工具是 fetch

    bash

    shells/bash

    shell

    系统默认的 shell 是 sh(非软连接)。你可以自己改。

    NetworkManager

    net-mgmt/networkmgr

    网络连接工具

    NetworkManager 依赖 systemd 无法直接移植

    lsmod

    kldstat

    列出已加载的内核模块

    /

    strace

    truss

    跟踪系统调用

    /

    modprobe

    加载内核模块:kldload;卸载内核模块:kldunload

    加载内核模块、卸载内核模块

    /

    0

    SIGUSR1

    停止系统运行。

    0

    SIGUSR2

    停止系统运行并关闭电源。

    0

    SIGWINCH

    停止系统运行,关闭电源,然后重新启动。

    1

    SIGTERM

    进入单用户模式。

    Ubuntu

    2 年/10 年

    apt

    GNU

    gcc

    bash

    Gnome

    Gentoo Linux

    lsusb

    sysutils/usbutils

    显示 USB 信息

    粗略地可以用 cat /var/run/dmesg

    lspci

    sysutils/pciutils

    显示 PCI 信息

    粗略地可以用 cat /var/run/dmesg

    lsblk

    sysutils/lsblk

    显示磁盘使用情况

    init
    浅析 Linux 初始化 init 系统,第 1 部分:sysvinit 第 2 部分:UpStart 第 3 部分:Systemd
    init -- process control initialization
    Comparison of init systems
    GPL Software in FreeBSD Base
    什么是 Linux 容器?

    滚动更新

    /

  • https://wiki.freebsd.org/Teams/clusteradm/generic-mirror-layout

  • https://wiki.freebsd.org/Teams/clusteradm/tiny-mirror

  • https://wiki.freebsd.org/Teams/clusteradm/generic-mirror-layout
  • https://wiki.freebsd.org/Teams/clusteradm/tiny-mirror

  • 日孚美质,诚可与共学,此时计已发舟。倘未行,出此同致意。廨中事以累尚谦,想不厌烦琐。小儿正宪,犹望时赐督责。(《王阳明全集·卷四·文录一·与杨仕德薛尚谦书》)

    结合王阳明平、定南赣,改革吏治,肃清朝野,破官、民“心中贼”的历史史实,请读者阐述强迫某人使之自由,这本身是一种自由还是法西斯主义?

    上述计算机 5 台。
  • 备案问题——需要专门公司/社会组织才能给 cn.FreeBSD.org 备案;

  • 还有最大的问题,没有钱

  • 使用文档

  • https://mirrors.ustc.edu.cn/freebsd-ports/

  • 联系方式:[email protected]

  • 网易 163 镜像站(pkg 和 ports 上游均为中科大)https://mirrors.163.com/

    • FreeBSD Pub https://mirrors.163.com/freebsd/

    • FreeBSD Packages https://mirrors.163.com/freebsd-pkg/

    • FreeBSD Ports https://mirrors.163.com/freebsd-ports/

  • 南京大学开源镜像站(pkg 和 ports 上游均为中科大)https://mirrors.nju.edu.cn/

    • FreeBSD Pub https://mirrors.nju.edu.cn/freebsd/

    • FreeBSD Packages https://mirrors.nju.edu.cn/freebsd-pkg/

    • FreeBSD Ports https://mirrors.nju.edu.cn/freebsd-ports/

    • 联系方式:

  • FreeBSD.org 这次的入侵事件
    FreeBSD.org intrusion announced November 17th 2012
    [NEW MIRROR] New full mirror in Belgium
    https://github.com/ustclug/mirrorrequest/issues/172
    https://github.com/ustclug/mirrorrequest/issues/171
    https://github.com/tuna/issues/issues/16
    FreeBSD-pkg Script
    FreeBSD-ports Script
    [email protected]
    科大源同步方法与注意事项
    https://wiki.freebsd.org/Teams/clusteradm/tiny-mirror
    https://wiki.freebsd.org/Teams/clusteradm/generic-mirror-layout
    FreeBSD-pkg 脚本
    FreeBSD-ports 脚本
    https://mirrors.ustc.edu.cn/
    https://mirrors.ustc.edu.cn/freebsd/
    https://mirrors.ustc.edu.cn/freebsd-pkg/
    [email protected]
    [email protected]
    RISC-V FreeBSD-pkg 软件源上线!11619+ 预编译包助力快速构建 FreeBSD 环境

    硬盘:

    • 仅基本系统(安装后):550MB

    • KDE 桌面(pkg 安装后):15G

  • 内存:

    • UEFI 下,最小内存为 128M

    • BIOS 下,最小内存为 64M

  • 实测硬件支持

    受支持的硬件类别
    系列
    实测型号
    备注

    CPU

    Intel 大小核

    i7-1260P、N100

    实测可支持,但无法合理调度,睿频上限受限

    NVMe 固态硬盘

    M.2 接口

    英睿达 P310,Intel 600P,梵想 S530Q、S500Pro、S542PRO

    正常工作

    无线网卡

    Intel AX 系列

    AX200

    注意

    FreeBSD 不支持 安全启动,在安装 FreeBSD 前请务必关闭安全启动(SecureBoot);FreeBSD 也不支持 Fake RAID(伪 RAID),请将其控制器修改为 AHCI。

    操作方法请咨询购机厂商技术售后。

    特定硬件支持情况查询

    更多硬件请参考:

    Hardware for BSD

    注意

    推荐还是实际测试看看,因为该网站也会出现一些错误,比如将 LPDDR5 误认为 LPDDR4。

    下载 FreeBSD 镜像

    首先我们打开 FreeBSD 项目官网:https://www.freebsd.org/:

    FreeBSD 项目官网

    我们点击黄底红字 Download FreeBSD,会跳转如下:

    下载 FreeBSD

    技巧

    随着岁月的流逝,在读者下载的时候,已经没有 14.2 了。你只需要选择最顶部的一个 FreeBSD-X.Y-RELEASE(这是推荐用于生产环境的版本)即可。其中,现在在读者面前的 X.Y 应是比 14.2 大的值。

    警告

    使用非 RELEASE 的用户应有意愿有时间关注实时的开发动态,浏览邮件列表与 Bug 列表,如:freebsd-src/UPDATING 及 freebsd-src/RELNOTES 等等信息。并且要求用户具备一定的探索能力和动手意愿,否则建议读者使用 RELEASE 版本。

    Installer
    VM
    SD Card
    Documentation

    安装镜像

    虚拟机预安装镜像

    存储卡镜像

    文档

    一般安装使用

    需要自己扩容

    单板机/嵌入式用

    就是文档

    技巧

    如果你不知道选哪个,请你选择 Installer(普通家用电脑,苹果除外)。

    技巧

    如果你不知道 amd64 i386 aarch64 armv7 是什么意思,请你选择 amd64(普通家用电脑,苹果除外)。

    FreeBSD 镜像

    以上:第一列代表文件名,第二列是文件大小,第三列是发布日期。

    首列
    说明

    Parent directory/ - -

    点击后返回上级目录

    CHECKSUM.SHA256-FreeBSD-14.2-RELEASE-amd64

    本页所有镜像的 SHA256 校验值

    CHECKSUM.SHA512-FreeBSD-14.2-RELEASE-amd64

    本页所有镜像的 SHA512 校验值

    FreeBSD-14.2-RELEASE-amd64-bootonly.iso

    网络安装镜像,安装时需联网

    FreeBSD-14.2-RELEASE-amd64-bootonly.iso.xz

    压缩的网络安装镜像,安装时需联网

    FreeBSD-14.2-RELEASE-amd64-disc1.iso

    cd 镜像

    技巧

    网络是随时波动的,因此下载的文件时而会与源文件有差异,产生错误。百度网盘就经常这样。因此我们需要一种机制确保你获取的文件与 FreeBSD 项目发布的镜像是完全一致的。就需要用到 校验值。Windows 10、11 均自带命令行工具 CertUtil,无需额外的软件。你还可以参考 如何确定用于安全应用程序的文件 SHA-256 哈希 这篇文章。

    注意

    FreeBSD 所有安装介质包括不限于虚拟机文件都没有提供图形界面(DVD 有 pkg 包,但是会出问题),均需要自行安装。

    技巧

    FreeBSD 镜像 BT 种子下载地址

    https://fosstorrents.com/distributions/freebsd/

    • RELEASE 正式版镜像下载地址

      • 虚拟机用:https://download.freebsd.org/ftp/releases/amd64/amd64/ISO-IMAGES/14.2/FreeBSD-14.2-RELEASE-amd64-disc1.iso

      • 物理机用:https://download.freebsd.org/releases/amd64/amd64/ISO-IMAGES/14.2/FreeBSD-14.2-RELEASE-amd64-memstick.img

    • CURRENT 开发版下载地址(仅限专业用户)

      • 虚拟机用:

      • 物理机下载 -amd64-memstick.img 或 -amd64-memstick.img.xz 结尾的文件

    旧版本 FreeBSD 下载地址:

    • 5.1-9.2 http://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/amd64/ISO-IMAGES

    • 9.3-最新 http://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/ISO-IMAGES/

    刻录 FreeBSD 镜像

    技巧

    FreeBSD 14.1 RELEASE 两个 ISO 均在 Ventoy 下测试通过(英特尔三代处理器下的 UEFI)。但是仍不排除出现问题的可能性。如果出现问题,请首先考虑下载 img 正常刻录。15.0 实测无法引导。

    技巧

    U 盘安装最好使用 -img 或 -img.xz。因为 .iso 镜像没做 Hybrid 混合启动,写入 U 盘会产生错误。见 FreeBSD -.iso files not support written to USB drive。

    只有当使用 光盘/虚拟机 安装时才应选用 iso 结尾的镜像。

    但事无绝对,某些机器使用 .iso 刻录 U 盘启动盘,仍然可以顺利进入安装界面。部分机器(如老款神舟电脑)就支持 ISO 下的 UEFI 启动。但并非所有机器(比如小米就不支持)都如此。

    • 我该如何刻录 FreeBSD 镜像到 U 盘?

    Windows 上的刻录工具应首选 Rufus,Linux 直接使用 dd 命令即可。rufus 下载地址:https://rufus.ie/zh

    警告

    不建议 使用 FreeBSD 手册推荐的 win32diskimager,有时会出现校验码错误的情况(实际上文件校验码正常)。应仅在 rufus 无效的情况下才使用 win32diskimager。 win32diskimager 下载地址 https://sourceforge.net/projects/win32diskimager/files/Archive/,点击 win32diskimager-1.0.0-install.exe 即可下载。

    技巧

    rufus 刻录镜像时,无需解压缩,直接选择 -img.xz 亦可进行启动盘制作的过程。

    附录:上传自己的硬件数据

    如果你也想上传你的数据到 https://bsd-hardware.info,请:

    安装 hw-probe

    • 使用 pkg 安装:

    • 或者使用 Ports 安装:

    上传数据

    命令行执行:

    打开上面的链接,即可看到你的设备。笔者上传的是 Radxa x4 的配置信息。

    其他操作系统见 INSTALL HOWTO FOR BSD

    致读者:拒斥苦难哲学,高扬人道主义,回到生活本身

    对于大部分读者来说,理解全文或许是困难的,不可能的。“与恶龙缠斗过久,自身亦成为恶龙。凝视深渊过久,深渊将回以凝视。”因此阅读此文本身注定即是一种苦难哲学。如果读者认为在阅读的过程中存在障碍,大可跳过相关段落甚至是全文,找到你所需内容即可!

    你并不孤单

    两个经典问题是:“vi 到底怎么退出”(作为和记事本相同类型的文本编辑软件,却连保存退出都是困难的,而编辑更困难)、以及“我的密码为什么输入不了?因为屏幕上的密码区域始终是空白的,连 **** 都不会有,就是什么也没有,他们就是如此设计的。实际上在 2007 年最常用的提权工具 sudo 就有选项 pwfeedback 可以启用该功能,但是默认启用发行版的寥寥无几,该软件也满是 CVE。

    思考题

    回溯历史,分析为什么 vi/vim 必须先按 ESC 键,再分别按下英文输入状态下的英文冒号 : 和英文字母 q(强制退出还需要再输入一个英文感叹号 !)最后再按 回车键 才能实现不保存退出的功能。以及我们能否在保持相同效率的前提下使其更加现代化?许多人可能已经对这些按键形成了肌肉记忆,你觉得该如何向后兼容,有无必要?这种兼容性是必要的还是改革的阵痛?

    思考题

    有人将 vi/vim 与其他编辑器比作 F1 赛车和家用小轿车的区别。也有人将 vi/vim 与其他编辑器比作“五笔输入法”与“拼音输入法”的区别。

    你认为上述比喻间存在根本差别吗?

    如果一件事物想要被更多人所使用,被大众所接纳,而不是固步自封自诩“F1 赛车”或“高端学术论坛”等类似存在,那么它势必要在功能性与用户友好之间进行取舍,而这种“退化”又几乎是必然的,因为这会将其拉到大众平均水平,无论是认知还是其他。即使是一向只有业内人会使用的专业软件,也始终有更大众化用户体验更佳的版本对其进行挑战。

    哪怕是 F1 赛车也在速度与安全性(HALO 系统)之间存在张力,这何尝不是一种用户友好设计呢?有人自称 F1 赛车是“手动挡”,其实这也是一大误区,F1 赛车既不是手动挡也不是自动挡,而且将二者结合的“手自一体”。

    要发展体育必须取消体育。体育的真实性和竞技性是存在张力的,如果你认为某些靠激素药物等人体“增强体育”是违背真实性的,那么他的确提高了竞技性,且这无关伦理取向,是职业体育盲目的必然的追求。传统体育会强调竞技的教育功能,认为可以带动群众运动健身。现在实践证明,这完全是荒唐的观点,造就了这种只是为了排名和荣誉,并非为了发展体育事业的扭曲局面。你必然可以筛选出成绩异常优秀的运动员,但是他对于人类的体育事业来说,毫无意义和作用,体育事业沦为政治的牺牲品。他只会使全国的体育资源高度集中到几个人身上。你必须承认这实际上就是一种表演赛,职业体育的公平公正只是虚伪的,只是相对于业余原则下的体育更加隐蔽罢了。每个人的自由时间,身体素质,拥有的场地环境,接受的体育教育都是不同的,并且差异比狗和人都大。体育运动职业化将永远只有少部分头部运动员享受了高度集中的资源和资本。这对所有人包括他们自己以及观众都是不公平的。所谓“全国运动会”,他分明是职业运动员的运动会,职业运动员职业水平评定大会。他怎么能叫全国运动会呢?

    体育精神不是一种形而上的东西,他本质上是使人发展的物质力量。而现在的专业化职业化国家化的运动员才是真实违背了体育精神的存在者。使体育转向场外为核心才是真正的全民体育,发扬了奥运精神。现在问题是使得场外人成为了观众而不是参与者,也没有自由时间成为参与者,观看他们的比赛也不过只是不拿工资的被异化的非参赛运动员罢了,甚至观众被讥讽“旁观者的姓名永远爬不到比赛的计分板上。”他们意识不到,如果没有观众,他们的比赛本身就是不成立的。他们没有意识到,如果没有观众,连计分板也不会存在,比赛本身也会被取消掉。他们更没有意识到,无论观众在形式上在不在场,观众本身即是比赛不可或缺的一部分,比赛可以没有运动员,可以没有裁判,但是观众是必然的。持有这种认为观众是旁观者而非参与者,运动员本身的观点,是不可理解的。

    思考题

    大多数发行版倾向于不使用 pwfeedback 的一种原因是其相关代码可能会引入更多的安全漏洞。你认为是 sudo 让我们陷入了平衡安全与便捷的讨论泥潭,还是 sudo 本身设计有问题?了解那些替代实现(、),你能否在保证安全的前提下,为这些工具实现 pwfeedback?如果在现有的安全模型下永远也无法实现,你认为我们还能做些什么?

    许多人经常打错或者弄混命令或命令参数和选项,但这不是你的错。

    许多中科院的院士在这个年代也需要学习如何使用计算机与手机。并且还觉得难以使用,你可能认为这是设计问题,那你如何解释这个群体(老年人)对短视频的操作十分了解呢?这是不是能说明,短视频这款软件的设计比较好呢?

    因为许多命令或出于历史上的种种限制,或出于开发者维护者的能力,并不是那么统一,也不是那么便于记忆或者好用。从历史的角度看,上述命令或许是当时的“最优解”。我们常见的家用门锁,只需要包括密码,那么就可以乱输入而开门。而今天的操作系统提示还是那么违反最小惊讶原则(不应该让用户承担你乱设计所带来的苦果)。

    思考题

    你认为这种评价是公允的,还是“事后诸葛亮”?你怎么看?

    查询 就会知道专门有个条目叫“BUGS”,专门用来表述当前软件的缺陷。

    就笔者个人使用体验而言,如果一款软件找不到 10 个严重影响或阻碍使用的 Bug,那么它就绝不是开源软件。并且大多数维护者对此无能为力,因为 Bug 实在太多了,又或者现实实在是太令人迷茫了,而他们又没有经济上的动力去进行修缮。绝大部分在开源事业中有着百万乃至千万使用量的开源软件,其维护者大都从未于中获得过任何经济补偿或任何名誉。

    思考题

    我们经常遇到的现实是维护者一意孤行,拒绝合并或反对你的 PR,说服他们几乎是不可行的,而我们分支出来又是不可能的,在这种情况下,问题是否是无解的?

    思考题

    那些大公司究竟是否应该出于道德义务为开源软件进行经济投入,而不是通过代码贡献逐渐将其完全控制?

    请相信笔者,你并不是一个人觉得这些东西难用,甚至想砸键盘。这也是人们不断“造轮子”(重头实现一款工具)的原因之一。如果你觉得 GCC,难用,那么你可以去用 Clang+LLVM。你绝不是第一个觉得 GCC 难用的人,也不会是最后一个。

    很多人强调命令行的重要性,带着傲慢鄙视使用 IDE 等 GUI 软件的用户,实无必要。很多人会故意唱反调强调这些工具的所谓优势,这群人纯粹是斯德尔哥摩综合征患者,也是苦难哲学的倡导者。Unix 的哲学精髓不在于恪守亘古不变的祖宗之法,而是强调以人为本。这就是在今天,21 世纪的四分之一处,仍然强调 Unix 哲学的意义。大多数人都被苦难哲学所蒙蔽了,一味强调追根溯源,恨不得从计算机的 0 和 1 开始做,而那些看似清醒的人实则更为糊涂。“人是会思想的蒹葭”,我们不是只能被动接受而不去改变的主体,我们有责任有义务去改造这个世界,改变这变态的一切,而不是让人强忍不适接受一套蹩脚的设计原则。面对不合理的设计,我们有必要站出来说一句话:“他这个软件就是有问题,不是你的错”。而我们则可以不断地尝试改变这一切,去提交补丁和意见表达我们的态度。

    有种十分经典的观点认为“必须完全掌握一定的命令行工具或者传统的编译环境才能彻底理解 UNIX 操作系统”。其中的工具之一就是 vim。在今天讨论这种图形化和命令行的优劣问题实际上只会让我们错失问题的重点,并且以平凡的,看似理性的结论无非就是二者在不同的环境下有不同的用处。笔者真正质疑的是一种优绩主义(其核心观点是类似能者上,庸者下的社会达尔文主义),凡是命令行就一定是难用的,凡是选项就必须要背诵的这种观点,凡是要精通就必须走这条路,凡是偏好图形化界面和桌面用户就要对其进行无端攻击。无论是基督教主张的超越性的爱世人和爱神,还是儒家那有差等的爱,墨家那无差别的兼爱都启发着我们,这样做,长久以来是没有任何好处的。计算机应服务于人类,而不是反过来规训人类,归根结底,不能让大部分人被极小部分人的黑客文化所异化,由于大部分人在过去难以接近计算机,无法获得良好的计算机教育,这本质上是滋养了一种文化霸权主义,更是一种文化不自信,缺钙的表现。凡是圈子越小的地方,这种话语权垄断现象就往往越是严重,越是脱离大众文化,背离大众单纯朴素的认知。而我们要做的就是正视一切神话,没有任何天然的,如此的,神圣的不可侵犯之存在。这看似是不同的观点冲突,实则是不同文明的冲击。这本质上也许是一种工业文明对效率优先,打倒一切人性的渴望。理解这种观点的要义在于,它将所有的人的人生目标都一律统一定义为“我要成为第一名”,一律否定“我只是普通用户,为了好玩,我不想学什么编译原理”这种大部分人的实际预设,它决不会允许你不会任何命令行就能在操作系统上实现你的一切合理需求。凡是不会用的人都会被末位淘汰,被筛选和过滤掉。我们使用技术,发展科学是为了解放人类,而不是让科学与技术代替宗教代替儒学重新奴役人类。更不是为了让走出大山的人去嘲笑仍在山里的人。

    思考题

    “撰写简洁的程序—不要耍小聪明”。

    ——Brian W. Kernighan, P. J. Plauger. 编程格调[M]. 北京: 人民邮电出版社, 2015: 2. ISBN:9787115379528。

    你认为这称得上是一种用户友好设计吗?AI 编程有无必要遵守此编程风格?

    只要人们觉得用的快乐与开心,有什么不好呢?人们总是强调,这些是知识,应该背过。真正的问题在于,什么是知识?知识和学位是挂钩的吗?那你如何解释大多数本科毕业生分不清显示器与主机?

    美国哲学家 B.F. Skinner 说过“教育就是当一个人把在学校所学全部忘光之后剩下的东西。”不同于传统西方观念(如柏拉图的回忆说、奥古斯丁的光照与上帝记忆、洛克的白板说)与儒家学说(如《论语·学而》中的“学而时习之”)乃至于传统民俗(如喝下孟婆汤会失忆)对记忆的强调,庄子更强调“忘”——这也是对老子的“行不言之教”(老子《道德经》第二章)的进一步发挥。庄子在《逍遥游》中强调“小知不及大知”,我们日常所学无不是“小知”。庄子认为无论是以往还是现代的学习,根本上都是外物对人的异化,人所接受的是现代社会的规训,是工业革命的文化,而非知识。

    思考题

    本书已经尽量将日常所需的命令和选项都列出来了。

    一个命令的选项或参数可能有几十上百个,而字典或文档(man 也好 info 也罢)是用来查的不是用来背的。

    你怎么看“吾生也有涯,而知也无涯。以有涯随无涯,殆已”(《庄子·内篇·养生主第三》)?

    曾经的人们认为工业化和互联网可以加速世界形成“地球村”,2G 通话到 3G 视频通话,再到 4G 网络视频通话,我们“在一起”的渠道已经畅通,但是,你会真切发现,有个说得上话的“人”,依然是不可能的。我们会明白,真正决定距离的不是时间,不是空间,也不是科技水平,更不是我们有没有时间,而是我们自己。当你看到这本书中这些文字的时候,也许 FreeBSD 甚至操作系统这个概念,包括计算机本身都已消亡。但是你会发现,这里有一种声音告诉你,你是对的。你并不孤单!

    如果你看完本书之后全部都忘光了,只知道用 AI 看命令怎么用的话,或者你干脆直接从“入门”到“跑路”;那么,祝贺你!你已经成功地掌握了本书最精髓的部分。

    对于一本自诩应归类到“TP316.81”的书籍,本书中大部分可复制粘贴的内容可能在撰写时就已经失效了。但是我相信,无论你是反对抑或支持,其实这都不重要。我们必须承认我们对世界唯一知道的事情那就是我们一无所知。

    对于那些希冀从本书中得到具体计算机原理及其实现,或一本类似于字典的工具书的读者,可能会对本书感到失望或认为本书本身毫无价值,这都是在预料之中的。因为笔者也不会,更对此毫无兴致。在漫漫的时间长河和人类文明中,即使你是科举考试的第一名也难以留下任何痕迹。哪怕你是统一大陆的征服者,也会深埋地下,甚至被后人怀疑神话传说中关于你和你的帝国存在的可能性。古埃及人认为现世和死亡是人生的同一阶段,或者说,二者是一样的,死亡是另一种形式的新生。你看看地球是多么大的一个球啊,再看看银河系全图,看看我们目前科技所能拍摄的可见宇宙,你会发现,一切都如北岛《一切》(北岛.履历[M].生活·读书·新知三联书店:北京,2015:16)诗言:

    一切都是命运

    一切都是烟云

    一切都是没有结局的开始

    一切都是稍纵即逝的追寻

    一切欢乐都没有微笑

    一切苦难都没有泪痕

    一切语言都是重复

    一切交往都是初逢

    一切爱情都在心里

    一切往事都在梦中

    一切希望都带着注释

    一切信仰都带着呻吟

    一切爆发都有片刻的宁静

    一切死亡都有冗长的回声

    参考文献

    • ,和年轻人一样,71 岁的何院士现在也在使用智能手机

    • ,“教育就是当一个人把在学校所学全部忘光之后剩下的东西”这句话并非爱因斯坦所述。现在以讹传讹,人们获取的知识,真的是那么正确无误吗?

    • 谢延龙.庄子“忘”的教育图景阐释 [J].大学教育科学,2022,(01):105-112.

    • 卡斯 (James P. Carse). 有限与无限的游戏: 一个哲学家眼中的竞技世界[M]. 马小悟, 余倩 译. 北京: 电子工业出版社, 2019-05-01. ISBN 9787121364259.

    Talk 与 Code

    Date Fri, 25 Aug 2000 11:09:12 -0700 (PDT)

    From Linus Torvalds < >

    Subject Re: SCO: " thread creation is about a thousand times faster than onnative

    On Fri, 25 Aug 2000, Jamie Lokier wrote:

    Well well. I think it's possible to over the best of user-space "fake" threads plus the advantages of "true" kernel threads in one blindingly fast combination, in less than 8kB per thread.

    Talk is cheap. Show me the code.

    Linus

    ——引自

    思考题

    请读者自行查阅 Jamie Lokier 对 Linux Kernel 线程性能的影响。

    A:换行符是不是骗局,回车在 Windows 是 \r\n,换行在 Unix 是 \n,Word 的换行符是不是 Word 自己定义的?其他文本编辑器不识别。

    B:Word 我用 GPT 生成的都是换行符,不是回车符,整得我每个都要删除再按回车。

    A:你往哪复制的?或者纯文本粘贴,Word 粘贴的时候可以选不带格式啊。

    B:生成的文件啊,我往哪里复制?

    A:就算是软回车也不用挨个删除啊,你可以查找替换成普通回车啊。输入查找内容:在“查找内容”框中输入 ^l,这代表软回车符号(手动换行符)。输入替换内容:在“替换为”框中输入 ^p,这代表硬回车符号(段落标记)。查找替换就行了啊。

    B:我怎么知道这个符号的标识?

    A:chatgpt 会告诉您,您首先要提出一个想法,至于怎么实现那一点也不重要。Code is cheap. Show me the talk. AI 可以快速地将任何想法付诸实践,即使现在难以实现,日后也可以轻易完成。

    “提出一个问题往往比解决一个问题更重要。”

    ——[美] 阿尔伯特·爱因斯坦 / [波] 利奥波德·英费尔德. 物理学的进化 [M]. 北京: 中信出版集团, 2019: 88. ISBN 9787521701418.

    “哲学家们只是用不同的方式解释世界,问题在于改变世界。”

    ——《关于费尔巴哈的提纲》第十一条,马克思 1845 年稿本(马克思, 恩格斯. 马克思恩格斯选集(第 1 卷) [M]. 北京: 人民出版社, 1995: 57.)

    夫国者人之积也,人者心之器也,而国事者一人群心理之现象也。是故政治之隆污,系乎人心之振靡。吾心信其可行,则移山填海之难,终有成功之日;吾心信其不可行,则反掌折枝之易,亦无收效之期也。心之为用大矣哉!夫心也者,万事之本源也。满清之颠覆者,此心成之也;民国之建设者,此心败之也。夫革命党之心理,于成功之始,则被“知之非艰,行之惟艰”之说所奴,而视吾策为空言,遂放弃建设之责任。如是则以后之建设责任,非革命党所得而专也。迨夫民国成立之后,则建设之责任当为国民所共负矣,然七年以来,犹未睹建设事业之进行,而国事则日形纠纷,人民则日增痛苦。午夜思维,不胜痛心疾首!夫民国之建设事业,实不容一刻视为缓图者也。

    国民!国民!究成何心?不能乎?不行乎?不知乎?吾知其非不能也,不行也;亦非不行也,不知也。倘能知之,则建设事业亦不过如反掌折枝耳。

    ……予之所以不惮其烦,连篇累牍以求发明“行易知难”之理者,盖以此为救中国必由之道也。夫中国近代之积弱不振、奄奄待毙者,实为“知之非艰,行之惟艰”一说误之也。此说深中于学者之心理,由学者而传于群众,则以难为易,以易为难。遂使暮气畏难之中国,畏其所不当畏,而不畏其所当畏。由是易者则避而远之,而难者又趋而近之。始则欲求知而后行,及其知之不可得也,则惟有望洋兴叹,而放去一切而已。间有不屈不挠之士,费尽生平之力以求得一知者,而又以行之为尤难,则虽知之而仍不敢行之。如是不知固不欲行,而知之又不敢行,则天下事无可为者矣。此中国积弱衰败之原因也。夫畏难本无害也,正以有畏难之心,乃适足导人于节劳省事,以取效呈功。此为经济之原理,亦人生之利便也。惟有难易倒置,使欲趋避者无所适从,斯为害矣。

    ——孙中山.建国方略[M].生活·读书·新知三联书店:北京,2014:建国方略之一孙文学说——行易知难(心理建设)自序、第五章知行总论 ISBN 9787108040749

    人们争论马克思理论的可信性,但对其影响毫无争议。历史上没有任何哲学家能宣称有如此大比例的、国际性的、有组织的积极追随者。然而,这个哲学家的光环和他的生活之间的差别是一个惊人的讽刺。卡尔·马克思的名字实际上成了革命的符号。然而,马克思很少把时间花在直接的街头政治运动上。相反,构成他生活的是在大英博物馆图书室里无休无止的研究和写作,他每天在那里的同一张书桌前从早上 9 点工作到晚上 7 点闭馆。他在家里继续这一天的工作这几个小时之久,直到精疲力竭,需要睡觉来结束这一天为止。讽刺的是,虽然他的思想塑造了 20 世纪的很大一部分,马克思却过着一种相对隐秘和孤独的生活。如果不是因为他的家庭和一小群密友与政治朋友陪伴,隐居在书籍和手稿世界中的他很难与中世纪僧侣区分开来。更讽刺的是,尽管他经常轻视文字和观念的力量(他称之为“哲学家头脑中的幻影”),他却表明了它们可以是多么可怕的武器。作为他理论的成果,政府被推翻,地图被改写,他的名字成了 20 世纪家喻户晓的词。

    ——[美] 威廉·F.劳黑德. 哲学的历程 [M]. 第 4 版. 北京: 中国轻工业出版社, 2017: 448. ISBN 9787518412600.

    思考题

    结合上述内容,你究竟怎样理解 Talk 与 Code?

    从入门到跑路

    现有以下描述:

    • “按任意键继续”

    我们会得到:

    “任意键到底是哪个键?键盘上似乎没有按键叫做任意键,搜索也搜不到”

    • “请把文件夹名改为英语”

    我们又会得到:

    • “请打开我的电脑”

    我们会得到:

    “这是我的电脑,不是你的电脑”

    • “请关闭计算机”

    我们会得到:

    “显示器被断电,主机仍然运行,主机的散热风扇仍然在转。”

    有观点认为语言是文字的家,折射出人的主体性;也有观点认为我们这套自然语言是存在边界的,我们只能弄懂我们能弄懂的事情,对于语言所不能及的领域就需要闭嘴;还有的人试图创建一门全新的人工语言,用数学,用逻辑学来代替现在问题重重的自然语言。有观点认为不同的语言间体现的其实不同的世界观,不同的文化差异;还有观点认为语言是一种结构,将人类文明局限在其内。还有的观点认为圣人行不言之教,认为真正美妙的语言就是不说话。

    以上种种对语言的探索启发我们不能简单地将上面发生的情况的当事人视为负面的存在而放弃了教育的可能性。而应该反思自己的教学方式。孔子面对不同的学生强调因材施教。我们的确有更完善的、无歧义的表达方式进行说明,问题在于我们往往已经预设了你的读者和你之间存在一种相同的前理解和前意识。因此随着讨论的深入,你们的分歧只会越来越多。

    诚然将一切公理化在形式上看上去可以取消这个问题:

    请按你键盘上的字母 A,可能表现为 a 或者 A(附不同类型的键盘图片)。如果你不知道什么是键盘,请参见下图(附图片)。“按”的意思是用手指压后即抬起,时间约 1 秒。如果你没有键盘,请购买一个(附购买链接,付款),如果你没有钱……如果你不知道 1 秒有多长请眨 3 次眼睛……如果你不知道眨眼睛是……

    但问题在于陷入解释学循环。我们可以看到这种因果倒退的唯一解决方式是回到最开始。我们只是要求他按下任意一个按键,但却变成了如何挑选和购买键盘……实际上以往的做法是,如果读者根本不认识什么是键盘或者 26 个英文字母,就会中断对话,而不是无穷倒退。因为他们以为这实际上超越了其边界。认为其有一种边界,这是实证主义科学的典型思路。

    对这种问题的研究与理解,是困难的。很少有人会正视这个问题,正如他们自称存在一种语言的边界那样。那不是语言的边界,而是你自己理论的边界。

    因此指望靠一本书就能让所有的人都理解,是困难的。我们有必要思考真正困难的是写些有同行评审编辑推荐的封面顶刊文章,还是写一些简单的基础入门文章。

    我们需要解决的问题从来都不是任意键在哪,文件夹叫什么名字,或者电脑怎么关机。而是解决为什么要按键,为什么他不支持中文,为什么他关机要按多次的问题。这才是真正的边界,或者说结构性限制。我们为什么要这样?计算机一开始就是这样?不,那时候更麻烦。而到了现在为什么不知道不理解这些反而成为了部分人的错误?这种权力究竟是谁定义的?

    如果我们在一开始“入门”的时候就“跑路”,避免了这种结构把我们框住又反过来指责我们自己,不乐哉矣!《现代汉语词典》(ISBN:9787100124508,中国社会科学院语言研究所词典编辑室编,商务印书馆,第 7 版,第 982 页)对“跑路”的定义是“1. 走路;2. 逃跑,出逃。”从字面意思上看“跑路”未尝不是从这预设好的知识牢笼里挣脱出来呢?

    我们现在翻开当初的甲种本乙种本,甚至在你现在正在学的那一刻,知识就已经是过时的。比如国际纯粹与应用化学联合会将元素周期表修订了几十年(1988)有余,至今课本仍有主族副族。其实对于很多学科或专业,学生直至博士毕业,也不过只是刚刚扣开了 20 世纪的大门。但是他们却似乎对一切都能有所指点,并直接停止与其自认为不存在共识的人的对话。我觉得没有必要。有的人来自大山,毕业后又回到大山;正如我们在城市化,而别国在逆城市化。这都是合理的,问题在于,我们终究会把这些注定要过时的被称为知识的东西完全抛掉,那时候,会不会也有人指责我们,“你为什么连按任意键是什么意思都不懂?”而不愿意简单地把地方留给那些愿意帮助他人的人?或者只是说一句“你按回车键就行”。

    你现在也许知道一些东西,也许不知道,没有学过什么和学过什么,我觉得也不重要。真正重要的是什么完全由读者来定义,笔者完全理解,因为笔者才是唯一什么都不会,也从来都学不明白,永远有疑惑永远不正确的那个人。读者可以轻松地从入门到跑路。无论读者选择如何,都可以。

    “入门”是一种快乐,“跑路”亦是一种豁达。“本乘兴而行,兴尽而反,何必 FreeBSD 邪!”

    目录

    • FreeBSD 从入门到跑路

    • 编辑日志

    • 贡献指南与开放任务

    • 目录

    前言

    第 1 章 FreeBSD 初见

    第 2 章 安装 FreeBSD

    第 3 章 FreeBSD 高级安装

    第 4 章 FreeBSD 基础

    第 5 章 软件管理和系统升级

    第 6 章 桌面环境

    第 7 章 窗口管理器

    第 8 章 本地化——i18n/L10n

    第 9 章 多媒体和外部设备

    第 10 章 代理服务器

    第 11 章 Jail

    第 12 章 虚拟化和容器

    第 13 章 系统管理

    第 14 章 网络管理

    第 15 章 防火墙

    第 16 章 服务器

    第 17 章 Web 服务器和监控平台

    第 18 章 嵌入式平台

    第 19 章 数据库管理

    第 20 章 游戏、科学计算和专业工具

    第 21 章 Linux 二进制兼容层

    第 22 章 开发生态与贡献社区

    第 23 章 存储管理

    第 24 章 FreeBSD 内核

    第 25 章 ZFS 文件系统

    第 26 章 OpenBSD 入门

    第 27 章 NetBSD 入门

    附录 Ⅰ 计算机概论

    附录 Ⅱ 工具与资源

    附录 Ⅲ 文学故事

    附录 Ⅳ 参考文献和术语

    4.9 sudo 和 doas

    权限示意图

    doas

    实际上对于大部分人来说只需要 sudo su 这一行命令,其他都是多余的。在使用时将 sudo 直接替换为 doas 即可。

    OpenBSD 认为 sudo 软件配置复杂,代码质量差,漏洞太多,故自行开发了 doas。自然,FreeBSD 也可以用。

    安装 doas

    • 使用 pkg 安装:

    • 或者使用 Ports 安装:

    查看 doas 安装后信息

    配置 doas

    由上可知,示例样板在 /usr/local/etc/doas.conf.sample。

    而我们需要把配置文件放在 /usr/local/etc/doas.conf,该文件默认不存在,需要我们自行创建。

    • /usr/local/etc/doas.conf.sample 内容如下,相比 sudo 来说,非常简单易懂:

    让我们简单注释一下:

    对于一般人只需要创建文件 /usr/local/etc/doas.conf,写入

    即可满足日常需求(你的用户须加入 wheel 组)。

    sudo

    安装 sudo

    • 使用 pkg 安装:

    • 或者使用 Ports 安装:

    sudo 免密码

    在 /usr/local/etc/sudoers.d/ 下新建两个文件 username(需要免密码的用户)和 wheel:

    • 文件 username 内容如下:

    • 文件 wheel 内容如下:

    多加一行,使用 sudo 时不需要输入密码:

    故障排除与未竟事宜

    • xxx Is Not in the Sudoers File. This Incident Will Be Reported

    应当在 sudoers 中加入一句话来解决这个问题:

    编辑 /usr/local/etc/sudoers,找到 root ALL=(ALL:ALL) ALL 这行,一般是在第 94 行。在这行下面加一句:

    然后保存退出即可。

    sudo-rs

    sudo-rs 是一款采用 Rust 编写的、以安全为导向并具备内存安全性的 sudo 与 su 的实现。

    与 sudo 不共存的安装方案

    即安装 sudo-rs 必须先卸载 sudo,此安装方式下二者不共存。

    • 使用 pkg 安装:

    • 或者使用 Ports 安装:

    提供了命令 sudo、visudo 和 sudoedit。

    与 sudo 共存的安装方案

    即系统中同时存在 sudo 与 sudo-rs。

    • 使用 pkg 安装

    • 还可以通过 Ports 来安装:

    提供了命令 sudo-rs、visudo-rs 和 sudoedit-rs。

    配置 sudo-rs

    配置文件位于:/usr/local/etc/sudoers。

    测试

    附录:通过 mac_do 提权

    参考文献:

    此部分比较简单,读者可自行了解或直接提交 PR 到本书。

    6.3 KDE6(X11)

    KDE 旨在开发一套现代桌面系统,如果你觉得 KDE 界面很像 Windows,那么从时间线上看,你应该说是“Windows 很像 KDE”。

    技巧

    视频教程参见 003-FreeBSD14.2 安装 KDE6

    安装完整的 KDE 桌面体验

    • 使用 pkg 安装:

    技巧

    如果有时候提示 pkg 找不到或者没有 kde,请点击 看看是不是二进制包没有被构建出来。有时候需要切换 quarterly(待上游构建出来了再换到 latest 源,pkg upgrade 更新即可)或者 latest 源。类似方法适用于所有软件,故后边不再赘述。如果没有,需要自己使用上述的 Port 进行编译。

    • 或者使用 Ports 安装:

    • 解释

    包名
    作用

    启动项设置

    startx

    注意

    如果你在 root 下已经执行过了,那么新用户仍要再执行一次才能正常使用(无需 root 权限或 sudo 等)startx。

    权限设置

    普通用户还需要将用户加入 wheel 组和 video 组,否则设置中一些内容无法显示,图形界面也会受限:

    中文化

    SDDM 中文化

    系统中文化方法 ① 用户分级

    编辑 /etc/login.conf:找到 default:\ 这一段,把 :lang=C.UTF-8 修改为 :lang=zh_CN.UTF-8。

    刷新数据库:

    系统中文化方法 ② 系统设置

    点击开始-> System Settings -> Language & Time 在 Region & Language 项的 Language 栏点击右侧 Modify 中找到“简体中文”(一般是倒数第二,如果都是 □□□□,检查你的中文字体安装否)单击之。然后单击 Apply 按钮;logout(注销)后重新登录,此时系统语言将变为中文。

    参考文献

    附录:登录界面主题

    • 使用 pkg 安装:

    • 或使用 Ports 安装:

    • 查看安装后配置:

    • 编辑 /usr/local/etc/sddm.conf,写入:

    重启,设置完成:

    参考文献

    附录:最小化 KDE 桌面安装方案

    直接安装 x11/kde 会作为依赖安装 x11/plasma6-plasma 和 x11/kde-baseapps,其中捆绑了大量的工具软件,在某些情况下可能不方便部署与使用。

    不喜欢捆绑安装一堆附加工具和软件的用户可以使用本小节的最小化安装方案,无意进行自定义的用户使用上面的完整安装方案即可!

    使用 pkg 安装

    基础桌面

    软件包
    作用

    与上面重复的包不再赘述。

    可选软件包:

    软件包
    作用

    使用 Ports 安装

    基础桌面:

    可选 Ports:

    xinitrc

    注意

    若采用最小化安装 KDE 方法,必须配置 .xinitrc!

    最小化安装 KDE 图示

    技巧

    使用此方案安装的 KDE 桌面缺少了很多功能,可以参照 的“Runtime dependencies”(运行时依赖)和“Library dependencies”(库依赖)进行功能补全。

    未安装可选包:

    附录:展开任务栏图标

    右键单击桌面空白部分,点击“进入编辑模式”。

    点击任务栏中间的空白部分,点击“显示替代部件”

    在弹出窗口中,选择“图标和文本任务管理器”即可。

    附录:解决开机时总是自动打开特定程序

    打开设置,选择“会话”——>“桌面会话”,在右侧的“会话恢复”,修改为“启动为空会话”。最后点击右下角的“应用”保存即可。

    故障排除与未竟事宜

    sddm 登录闪退

    如果你使用 VMware 虚拟机时,压根看不见 sddm 最下边的选项,请按照配置虚拟机章节的教程配置屏幕自动缩放。

    启动 sddm 提醒 /usr/bin/xauth: (stdin):1: bad display name,但是可以正常 startx

    你需要在 /etc/rc.conf 里面检查你的 hostname 是否为空(理论上不应该为空),有没有设置:

    按需设置 hostname 即可。

    菜单缺失关机、重启等四个按纽

    如果无效请先看看你是不是在 sddm 界面选择了 用户会话(读取 .xinitrc),应该选择 plasma-x11。

    修改 /etc/sysctl.conf 将其中 security.bsd.see_other_uid 的值改为 1(1 为开启)。重启后即可。

    参考文献

    解除自动锁屏

    单击“设置”——>“安全和隐私”——>“锁屏”——>“自动锁定屏幕”选择“不自动锁屏”,然后点击“应用”。(休眠唤醒后锁定屏幕可按需设置)

    注销后重新登录即可。

    状态栏不显示时钟和时间

    点击时区设置,输入 beijing,设置上海即可。若无效,请先更新软件包。

    5.2 更换 FreeBSD 软件源

    FreeBSD 包管理器设计理念

    熟悉 Linux 的人也许会发现,FreeBSD 的包管理方案实际上大约等于以下两大 Linux 发行版包管理器的完美合体:

    • Arch Linux:Pacman,对应 pkg(同样秉持 KISS 的理念)

    3.2 使用 VMware Workstation Pro 安装 FreeBSD

    视频教程

    File Name                                          File Size      Date                 
    Parent directory/                                  -              -                     
    CHECKSUM.SHA256-FreeBSD-14.2-RELEASE-amd64         1171           2024-Nov-29 14:11     
    CHECKSUM.SHA512-FreeBSD-14.2-RELEASE-amd64         1811           2024-Nov-29 14:09     
    FreeBSD-14.2-RELEASE-amd64-bootonly.iso            459491328      2024-Nov-29 13:04     
    FreeBSD-14.2-RELEASE-amd64-bootonly.iso.xz         100595956      2024-Nov-29 13:04     
    FreeBSD-14.2-RELEASE-amd64-disc1.iso               1310040064     2024-Nov-29 13:05     
    FreeBSD-14.2-RELEASE-amd64-disc1.iso.xz            855850608      2024-Nov-29 13:05     
    FreeBSD-14.2-RELEASE-amd64-dvd1.iso                4826406912     2024-Nov-29 13:05     
    FreeBSD-14.2-RELEASE-amd64-dvd1.iso.xz             3812250832     2024-Nov-29 13:05     
    FreeBSD-14.2-RELEASE-amd64-memstick.img            1559351808     2024-Nov-29 13:05     
    FreeBSD-14.2-RELEASE-amd64-memstick.img.xz         867177260      2024-Nov-29 13:05     
    FreeBSD-14.2-RELEASE-amd64-mini-memstick.img       564220416      2024-Nov-29 13:04     
    FreeBSD-14.2-RELEASE-amd64-mini-memstick.img.xz    107445036      2024-Nov-29 13:04     
    # pkg install hw-probe
    # cd /usr/ports/sysutils/hw-probe/
    # make install clean
    # hw-probe -all -upload
    Probe for hardware ... Ok
    Reading logs ... Ok
    Uploaded to DB, Thank you!
    
    Probe URL: https://bsd-hardware.info/?probe=f64606c4b1
    Github Issue
    3.5 手动安装双系统(后安装 FreeBSD)
  • 3.6 基于 Apple M1 & Parallels Desktop 20 安装 FreeBSD

  • 3.7 基于 Apple M1 & VMware Fusion Pro 安装 FreeBSD

  • 3.8 使用 QEMU 安装 RISC-V FreeBSD(基于 x86 Windows)

  • 3.9 云服务器安装 FreeBSD(基于腾讯云轻量云、阿里云轻量应用服务器)

  • 3.10 云服务器安装 FreeBSD(基于 KVM、QEMU 等平台)

  • 3.11 配置 rEFInd(双系统用)

  • 4.5 命令行基础
  • 4.6 文本编辑器

  • 4.7 用户和基本账户管理

  • 4.8 权限

  • 4.9 sudo 和 doas

  • 4.10 文件系统基础

  • 4.11 系统目录结构

  • 5.5 使用 Ports 以源代码方式安装软件
  • 5.6 使用 DVD 安装软件

  • 5.7 使用 freebsd-update 更新 FreeBSD

  • 5.8 使用源代码更新 FreeBSD

  • 5.9 使用 ZFS 启动环境更新 FreeBSD 并实现多版本共存

  • 6.5 Mate
  • 6.6 Xfce

  • 6.7 Cinnamon

  • 6.8 Lumina

  • 6.9 LXQt

  • 6.10 Budgie(预备删除)

  • 6.11 CDE

  • 6.12 LXDE

  • 6.13 主题美化

  • 6.14 远程桌面

  • 6.15 启用 root 桌面登录

  • 6.16 KDE6(Wayland)

  • 7.5 Window Maker
  • 7.6 Fluxbox

  • 8.5 网络浏览器
  • 8.6 QQ(Linux 版)

  • 8.7 更换字体

  • 8.8 金山 WPS(Linux 版)

  • 8.9 压缩和解压

  • 8.10 微信(Linux 版)

  • 8.11 Wine

  • 9.5 音频播放器
  • 9.6 视频播放器

  • 9.7 多媒体处理工具

  • 13.5 Live CD 与系统急救
  • 13.6 Grub、UEFI 和 efibootmgr

  • 16.5 WildFly
  • 16.6 Rsync 同步服务

  • 16.7 Samba 服务器

  • 16.8 NFS 服务器

  • 16.9 Webmin

  • 17.5 NextCloud——基于 PostgreSQL
  • 17.6 Telegraf+InfluxDB+Grafana 监控平台

  • 17.7 OpenList

  • 17.8 Prometheus 监控部署

  • 17.9 Tomcat

  • 17.10 Caddy

  • 17.11 OnlyOffice(基于 PostgreSQL)

  • 18.5 Radxa X4(x86)
    19.5 MongoDB 8.0
    21.5 ArchLinux 兼容层(基于 archlinux-pacman)(预备删除)
  • 21.6 OpenSUSE 兼容层

  • 21.7 Gentoo Linux 兼容层

  • 21.8 Rocky Linux 兼容层

  • 21.9 Slackware Linux 兼容层

  • 21.10 Deepin 兼容层

  • 21.11 故障排除与未竟事宜

  • 22.5 Java 环境的配置
  • 22.6 QT 环境的配置

  • 22.7 Python 和 VS Code

  • 22.8 Rust/Go 环境的配置

  • 22.9 配置 Shell

  • 22.10 通过 IDA 7 调试 FreeBSD

  • 22.11 如何订阅 FreeBSD 的邮件列表

  • 22.12 code-server 和 clangd

  • 22.13 Node.js

  • 22.14 利用脚本自动生成 BSDlibc 库文本

  • 23.5 Swap 交换分区
    24.5 在 Linux 上构建 FreeBSD
  • 24.6 FreeBSD 源代码目录结构

  • 25.5 更新 ZFS 的 zpool
  • 25.6 ZFS 委托管理

  • 25.7 ZFS 压缩

  • 26.5 桌面和其他软件
  • 26.6 在 RISC-V 开发板上安装 OpenBSD

  • 26.7 树莓派和 OpenBSD

  • MySQL 数据库
    FreeBSD 桌面发行版评述
  • BSD 许可证概览

  • UEFI/BIOS 注解(基于 AMI BIOS)

  • 小说:你与暗
  • 诗歌选

  • 手记

  • 前言
    致读者:拒斥苦难哲学,高扬人道主义,回到生活本身
    致谢
    绪论
    1.1 操作系统的历程与开源往事
    1.2 FreeBSD 导论
    1.3 George Berkeley(乔治·贝克莱)与 BSD 命名的文化背景
    1.4 加州大学伯克利分校和“Fiat Lux”(要有光)
    2.1 安装前的准备工作
    2.2 FreeBSD 15 安装指南
    2.3 故障排除
    2.4 将 U 盘启动盘恢复为普通 U 盘(基于 Windows)
    3.1 使用 Hyper-V 安装 FreeBSD
    3.2 使用 VMware Workstation Pro 安装 FreeBSD
    3.3 使用 Virtual Box 安装 FreeBSD
    3.4 手动安装双系统(先安装 FreeBSD)
    4.1 Windows 用户迁移指南
    4.2 Linux 用户迁移指南
    4.3 虚拟控制台和终端
    4.4 认识 shell
    5.1 FreeBSD 镜像站现状
    5.2 更换 FreeBSD 软件源
    5.3 gitup 的用法
    5.4 使用 pkg 管理二进制包
    6.1 Intel 和 AMD 显卡驱动
    6.2 NVIDIA 显卡驱动
    6.3 KDE6(X11)
    6.4 GNOME
    7.1 bspwm
    7.2 IceWM
    7.3 i3wm
    7.4 Hyprland
    8.1 本地化环境变量
    8.2 Fcitx 输入法框架
    8.3 IBus 输入法框架
    8.4 五笔输入法
    9.1 音频设备配置
    9.2 蓝牙
    9.3 打印机
    9.4 触摸板与键鼠
    10.1 HTTP 代理
    10.2 V2ray
    10.3 Mihomo(Clash)
    10.4 OpenVPN
    11.1 配置 Jail
    11.2 更新 jail
    11.3 使用 Qjail 管理 Jail
    11.4 Linux Jail
    12.1 通过 BVCP 以网页管理 BHyve
    12.2 使用 bhyve 安装 Windows 11(vm-bhyve)
    12.3 Podman
    12.4 在 FreeBSD 上安装 VirtualBox
    13.1 引导界面和虚拟控制台
    13.2 管理 FreeBSD 中的服务
    13.3 bsdconfig 系统配置工具
    13.4 SSH 配置和相关工具
    14.1 设置网络
    14.2 无线网络(WiFi)
    14.3 USB 网络共享(USB tethering)
    14.4 TCP 堆栈
    15.1 Fail2Ban(基于 IPFW、PF、IPF)
    15.2 Packet Filter(PF)
    15.3 IPFilter(IPF)
    15.4 ipfirewall(IPFW)
    16.1 FTP 服务器
    16.2 MinIO 对象存储服务
    16.3 Gitlab-EE
    16.4 时间服务
    17.1 Apache
    17.2 Nginx
    17.3 PHP 8.X
    17.4 Zabbix 监控(基于 PostgreSQL)
    18.1 树莓派简介
    18.2 树莓派安装 FreeBSD
    18.3 树莓派 FreeBSD 配置
    18.4 树莓派和 Linux 兼容层
    19.1 PostgreSQL
    19.2 pgAdmin4
    19.3 MySQL 5.X
    19.4 MySQL 8.X
    20.1 Renpy 和 Godot 游戏
    20.2 我的世界(Minecraft)
    20.3 科研和专业工具
    20.4 Steam
    21.1 Linux 兼容层实现
    21.2 RockyLinux 兼容层(FreeBSD Port)
    21.3 Ubuntu/Debian 兼容层
    21.4 ArchLinux 兼容层(基于 ArchLinux bootstrap)
    22.1 如何报告 Bug
    22.2 如何开发一个 Port
    22.3 如何参与 FreeBSD 开发
    22.4 C/C++ 环境的配置
    23.1 自动挂载文件系统
    23.2 Linux 文件系统
    23.3 UFS 文件系统
    23.4 Windows 文件系统
    24.1 FreeBSD 内核选项概述
    24.2 机器相关的内核选项
    24.3 机器无关的内核选项
    24.4 GENERIC 内核选项(amd64)
    25.1 ZFS 概述
    25.2 ZFS 磁盘扩容
    25.3 ZFS 快照与还原
    25.4 ZFS 启动环境
    26.1 OpenBSD 概述
    26.2 安装 OpenBSD
    26.3 配置 OpenBSD
    26.4 OpenBSD 包管理器
    27.1 NetBSD 概述
    27.2 NetBSD 安装图解
    27.3 NetBSD 换源和包管理器
    27.4 桌面和中文环境常用软件
    存储卡与固态硬盘基础
    总线接口与协议
    网络基础
    操作系统
    FreeBSD 13/14 安装指南
    DragonFly BSD 导论
    TwinCAT/BSD 导论
    适用于 FreeBSD 的以太网卡、USB 以太网卡和 USB 无线网卡
    我与 FreeBSD 的故事
    两次告别
    小说:大教堂与集市
    小说:吾乡何处
    参考书目
    术语表
    Portage(emerge)
    pacman
    3/最长 12 年
    RPM(yum、dnf)
    约 2/4 年
    不固定
    专有

    WiFi 5 速率与 Windows 11 IoT Enterprise 24H2 相当(使用 iperf2 测得)

    有线网卡

    Realtek 2.5G

    RTL8125B

    需要额外安装驱动,参见全书附录

    有线网卡

    Intel 2.5G

    i226-V

    正常工作

    英特尔/AMD 显卡

    英特尔、AMD 近十多年的显卡

    英特尔锐炬 ® Xe 显卡、Intel HD Graphics 4000

    支持水平与 drm 移植进度相关;写作本文时相当于 Linux 内核 6.6,最新状态参见 freebsd/drm-kmod

    NVIDIA 显卡

    近十多年的显卡

    GTX 850M

    受 NVIDIA 官方显卡驱动支持

    FreeBSD-14.2-RELEASE-amd64-disc1.iso.xz

    压缩的 cd 镜像

    FreeBSD-14.2-RELEASE-amd64-dvd1.iso

    dvd 镜像,相比 cd 镜像多了一些没用的 pkg 包

    FreeBSD-14.2-RELEASE-amd64-dvd1.iso.xz

    压缩的 dvd 镜像,相比 cd 镜像多了一些没用的 pkg 包

    FreeBSD-14.2-RELEASE-amd64-memstick.img

    U 盘用的镜像(可以使用 Rufus 制作 U 盘启动盘)

    FreeBSD-14.2-RELEASE-amd64-memstick.img.xz

    压缩的 U 盘用的镜像(无需解压缩,可以使用 Rufus 制作 U 盘启动盘)

    FreeBSD-14.2-RELEASE-amd64-mini-memstick.img

    U 盘用的网络安装镜像,安装时需联网

    FreeBSD-14.2-RELEASE-amd64-mini-memstick.img.xz

    压缩的 U 盘用的网络安装镜像,安装时需联网

    https://download.freebsd.org/snapshots/amd64/amd64/ISO-IMAGES/15.0/
    rufus

    如果你真的认为用户友好的次要的,你所谓的专业性 = 复杂性 = 困难性 = 学习曲线陡峭,那么理应支持“增强运动会”。因为无论怎么看,“更快更高更强更团结”带来的无疑是这种“增强运动会”,在 1990 之前奥运会在反对职业运动员(纯业余原则)的时候,顾拜旦究竟在反对什么呢?应该取消职业运动员。这违背了真正的奥林匹克精神,本来就是为了让普通人拥有健康的身心,通过体育促进世界团结“更团结”,现在变成了一小撮的人狂欢,反过来异化大众,侮辱大众。说探索人类极限也是伪命题,那是生物学的事情。而且本身大部分比赛都禁止人类增强技术。他和体育的精神完全相悖。本身是鼓励所有人运动,参与,而不是围观别人。而且现实是通过围观别人促使自己也有想法的例子微乎其微。让一些人花很长时间投入到体育项目本身,取得更好的成绩,而不是去发展这个项目本身,本身就是一种异化。甚至连规则都不研究,等自己吃亏又奋起,而且发展了这么久话语权寥寥。除了沦为表演赛和政治工具,究竟还有什么用处?

    这和电子竞技一样荒谬。一排五个人的网吧还收费,去现场看投影仪?一群人看他们怎么露天打游戏?真打假打还不一定。他有每次找公证处公证都是真打吗?所有人都想当第一,这是可能的吗?而只要不是第一,就绝对的等于失去一切。不明白体育等级的意义是什么。而且看人打和看一个同等水平 AI 打的本质区别是什么?从最早的足球,乒乓外交,女子排球,甚至也搞过全民棒球。在一些体育商业属性有待发掘的国家,历史上体育运动的发展几乎完全不取决于体育事业本身的发展,其发展方向和资源分配过去完全由政治目标决定,商业和群众体育的价值被边缘化,最终导致了体育异化和资源浪费。而我们注意到,体育商业化不仅无法扭转这种异化,反而会加重。因此,取消体育是必然的合理的,是符合历史与现实的。

    你怎么看待这种现象?以及为什么说“退化”是必然的?当我们在进行比喻时,是否真正了解进行比喻的对象(有人误以为 F1 赛车是手动挡,只考虑速度不考虑用户友好)?业余原则究竟是虚伪的,还是现实的?有这种本质区别吗?

    用户友好还体现在“防呆”或者“失效安全”上面,无论是机械工厂、核电站、加工厂、还是建筑工地,军事设施,盾构机施工现场,高铁机车,地下金库/冷库,你都会发现这种用户友好并不是一种抽象的概念,也并非是一味地取悦用户:

    • 机械工厂大部分需要切割的机器都需要两只手分别按在两个方向才能启动,并且会检测是否是真手,而非其他重物;

    • 核电站的大部分操作都需要不同的人进行确认核验;

    • 加工厂有的地方必须要戴手套,而有的地方则严格禁止戴手套;

    • 军事设施也有类似机械工程的设计;

    • 盾构机施工现场在施工完一般就会就地掩埋,并且其存在本身就是一种用户友好。

    • 高铁机车要求驾驶员在特定时间内都必须踩下踏板,必须口呼手指。

    • 地下金库/冷库都会检测入侵,防止人员被意外关在门内,内部还有电话、棉毯、消防斧等物品。

    你自己能否提出更多的例子进行证明?归纳推理不具有普遍必然性,我们有必要从演绎论证进一步论证用户友好在任何领域的合理性,这个任务交给读者自行完成。

    sudo-rs
    doas
    man 页面
    【文汇报】何积丰:以“积”累迎来“丰”收
    New methods and new aims in teaching
    https://lkml.org/lkml/2000/8/25/132
    FreeBSD MAC 簡單介紹
    man mac_do(4)

    手机电脑互联

    plasma6-plasma-workspace-wallpapers

    桌面壁纸

    plasma6-plasma-disks

    磁盘健康(S.M.A.R.T.)监测

    ark

    解压缩软件

    xorg

    图形界面基础,提供 X Window 系统

    sddm

    登录管理器

    kde

    KDE 桌面环境

    wqy-fonts

    文泉驿中文字体

    plasma6-kactivitymanagerd

    用于管理用户活动、跟踪使用模式等的系统服务。没有该软件 KDE 将会黑屏且只有一个鼠标

    plasma6-kscreen

    KDE 屏幕管理器。没有该软件将无法调整分辨率

    plasma6-systemsettings

    系统设置

    konsole

    终端命令行工具

    dolphin

    文件管理器

    kate

    文本编辑器

    plasma6-plasma-systemmonitor

    系统监视器

    plasma6-plasma-pa

    音频管理

    plasma6-discover

    软件管理

    x11/kde
    SDDM login screen with KDE: change language?
    デスクトップ 環境 の 構築 - 4-7. LXQT のインストールと 設定 (LXQT 2.0.0)
    x11/plasma6-plasma
    Missing power buttons when logged in from SDDM
    KDE 6 界面
    SDDM
    KDE 6
    KDE 6
    KDE 6
    KDE 6 FreeBSD 主题
    最小化安装的 KDE 界面
    关闭 KDE 6 锁屏

    kdeconnect-kde

    $ ls
    英语 
    English
    # pkg install doas
    # cd /usr/ports/security/doas/
    # make install clean
    root@ykla:~ # pkg info -D doas
    doas-6.3p12:
    On install:
    To use doas,
    
    /usr/local/etc/doas.conf
    
    must be created. Refer to doas.conf(5) for further details and/or follow
    /usr/local/etc/doas.conf.sample as an example.
    # 要使用 doas,必须创建配置文件 /usr/local/etc/doas.conf。
    # 可参考 doas.conf(5) 的联机文档,或查看 /usr/local/etc/doas.conf.sample 示例配置。
    
    Note: In order to be able to run most desktop (GUI) applications, the user
    needs to have the keepenv keyword specified. If keepenv is not specified then
    key elements, like the user's $HOME variable, will be reset and cause the GUI
    application to crash.
    # 注意:如果需要运行图形界面(GUI)程序,配置中必须添加 keepenv 关键词。
    # 否则像 $HOME 这样的环境变量将会被清空,导致 GUI 程序崩溃。
    
    Users who only need to run command line applications can usually get away
    without keepenv.
    # 如果只需要运行命令行程序,通常不需要 keepenv。
    
    When in doubt, try to avoid using keepenv as it is less secure to have
    environment variables passed to privileged users.
    # 如果不确定是否需要,建议尽量避免使用 keepenv,因为它可能降低系统安全性,
    # 会将原用户的环境变量传递给拥有权限的目标用户。
    
    On upgrade from doas<6.1:
    With the 6.1 release the transfer of most environment variables (e.g. USER,
    HOME and PATH) from the original user to the target user has changed.
    # 从 doas 6.1 版本起,环境变量(如 USER、HOME、PATH)传递方式已发生变化。
    
    Please refer to doas.conf(5) for further details.
    
    # 请查看 doas.conf(5) 联机文档以了解更多详情。
    # Sample file for doas
    # Please see doas.conf manual page for information on setting
    # up a doas.conf file.
    
    # Permit members of the wheel group to perform actions as root.
    permit :wheel # 允许 wheel 组成员 doas
    
    # Same without having to enter the password
    permit nopass :wheel # 允许 wheel 组成员 doas,但免密码
    
    # Permit user alice to run commands as a root user.
    permit alice as root # 允许用户 alice doas
    
    # Permit user bob to run programs as root, maintaining
    # environment variables. Useful for GUI applications.
    permit keepenv bob as root  # 允许用户 bob doas,并继承用户 bob 的环境变量,GUI 程序需要,但会降低安全性(参见查看安装后信息)
    
    # Permit user cindy to run only the pkg package manager as root
    # to perform package updates and upgrades.
    permit cindy as root cmd pkg args update  # 仅允许用户 cindy 执行 pkg update
    permit cindy as root cmd pkg args upgrade # 仅允许用户 cindy 执行 pkg upgrade
    
    # Allow david to run id command as root without logging it
    permit nolog david as root cmd id # 允许 David 以 root 身份运行 `id` 命令且不记录日志
    
    permit :wheel
    # pkg install sudo
    # cd /usr/ports/security/sudo/ 
    # make install clean
    %admin ALL=(ALL) ALL
    %wheel ALL=(ALL) NOPASSWD:ALL
    你的普通用户名 ALL=(ALL:ALL) ALL
    # pkg install sudo-rs
    # cd /usr/ports/security/sudo-rs/ 
    # make install clean
    # pkg ins sudo-rs-coexist
    # cd /usr/ports/security/sudo-rs/ 
    # make -V FLAVORS # 查看有哪些 FLAVORS
    default coexist
    # make FLAVOR=coexist install clean # 指定安装共存版本的 sudo-rs
    ## sudoers file.
    ## sudoers 文件。
    
    ##
    ## This file MUST be edited with the 'visudo' command as root.
    ## 此文件必须通过 root 身份使用 `visudo` 命令编辑。
    
    ## Failure to use 'visudo' may result in syntax or file permission errors
    ## that prevent sudo from running.
    ## 不使用 `visudo` 可能导致语法或权限错误,从而使 sudo 无法运行。
    
    ##
    ## See the sudoers man page for the details on how to write a sudoers file.
    ## 如何编写 sudoers 文件的详细说明请参阅 sudoers 的手册页(man sudoers)。
    
    ## Defaults specification
    ## 默认设置规范
    
    ##
    ## Preserve editor environment variables for visudo.
    ## 为 visudo 保留编辑器相关的环境变量。
    
    ## To preserve these for all commands, remove the "!visudo" qualifier.
    ## 若希望对所有命令都保留这些变量,请移除“!visudo”限定。
    
    Defaults!/usr/local/sbin/visudo env_keep += "SUDO_EDITOR EDITOR VISUAL"
    ## 仅对 `/usr/local/sbin/visudo` 命令保留环境变量 SUDO_EDITOR、EDITOR、VISUAL。
    
    ##
    ## Use a hard-coded PATH instead of the user's to find commands.
    ## 使用硬编码的 PATH 查找命令,而不是使用用户自己的 PATH。
    
    ## This also helps prevent poorly written scripts from running
    ## arbitrary commands under sudo.
    ## 这也有助于防止写得不好的脚本在 sudo 下执行任意命令。
    
    Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    ## 为 sudo 指定固定的安全 PATH 路径。
    
    ##
    ## Uncomment if needed to preserve environmental variables related to the
    ## FreeBSD pkg utility and fetch.
    ## 若需要保留与 FreeBSD pkg 工具和 fetch 相关的环境变量,请取消注释。
    
    # Defaults     env_keep += "PKG_CACHEDIR PKG_DBDIR FTP_PASSIVE_MODE"
    ## 示例:保留 pkg 缓存/数据库路径与 FTP 被动模式变量。
    
    ##
    ## Additionally uncomment if needed to preserve environmental variables
    ## related to portupgrade
    ## 另外,如需保留与 portupgrade 相关的环境变量,请取消注释。
    
    # Defaults     env_keep += "PORTSDIR PORTS_INDEX PORTS_DBDIR PACKAGES PKGTOOLS_CONF"
    ## 示例:保留 ports 树、索引、数据库、二进制包与工具配置等变量。
    
    ##
    ## You may wish to keep some of the following environment variables
    ## when running commands via sudo.
    ## 通过 sudo 运行命令时,你可能希望保留以下某些环境变量。
    
    ##
    ## Locale settings
    ## 本地化设置(语言/地区)
    
    # Defaults env_keep += "LANG LANGUAGE LINGUAS LC_* _XKB_CHARSET"
    ## 示例:保留语言与 LC_* 等本地化相关变量。
    
    ##
    ## X11 resource path settings
    ## X11 资源路径设置
    
    # Defaults env_keep += "XAPPLRESDIR XFILESEARCHPATH XUSERFILESEARCHPATH"
    ## 示例:保留与 X 应用资源搜索路径相关变量。
    
    ##
    ## Desktop path settings
    ## 桌面相关路径设置
    
    # Defaults env_keep += "QTDIR KDEDIR"
    ## 示例:保留 Qt/KDE 的安装路径变量。
    
    ##
    ## Allow sudo-run commands to inherit the callers' ConsoleKit session
    ## 允许 sudo 运行的命令继承调用者的 ConsoleKit 会话。
    
    # Defaults env_keep += "XDG_SESSION_COOKIE"
    ## 示例:保留 XDG 会话 cookie(ConsoleKit 时代的变量)。
    
    ##
    ## Uncomment to enable special input methods.  Care should be taken as
    ## this may allow users to subvert the command being run via sudo.
    ## 取消注释可启用特殊输入法。但需谨慎,这可能允许用户绕过 sudo 所运行的命令。
    
    # Defaults env_keep += "XMODIFIERS GTK_IM_MODULE QT_IM_MODULE QT_IM_SWITCHER"
    ## 示例:保留输入法相关环境变量。
    
    ##
    ## Uncomment to disable "use_pty" when running commands as root.
    ## 取消注释可在以 root 运行命令时禁用“use_pty”。
    
    ## Commands run as non-root users will run in a pseudo-terminal,
    ## not the user's own terminal, to prevent command injection.
    ## 以非 root 用户运行的命令将使用伪终端,而非用户的原始终端,以防止命令注入。
    
    # Defaults>root !use_pty
    ## 对 root 目标用户禁用 use_pty(示例,默认注释)。
    
    ##
    
    ##
    ## User privilege specification
    ## 用户权限规范
    
    ##
    root ALL=(ALL:ALL) ALL
    ## root 可在所有主机上,以任意(用户:组)身份运行任意命令(需要认证)。
    
    ## Uncomment to allow members of group wheel to execute any command
    ## 取消注释以允许 wheel 组成员执行任意命令。
    
    # %wheel ALL=(ALL:ALL) ALL
    ## 示例:授予 wheel 组与 root 类似的 sudo 权限(需密码)。
    
    ## Same thing without a password
    ## 同上,但无需输入密码。
    
    # %wheel ALL=(ALL:ALL) NOPASSWD: ALL
    ## 示例:wheel 组成员可无密码执行任意命令。
    
    ## Uncomment to allow members of group sudo to execute any command
    ## 取消注释以允许 sudo 组成员执行任意命令。
    
    # %sudo	ALL=(ALL:ALL) ALL
    ## 示例:授予 sudo 组以任意(用户:组)身份执行任意命令的权限(需密码)。
    
    ## Uncomment to allow any user to run sudo if they know the password
    ## of the user they are running the command as (root by default).
    ## 取消注释可允许任意用户在知道目标用户(默认为 root)密码的情况下运行 sudo。
    
    # Defaults targetpw  # Ask for the password of the target user
    ## 使用目标用户密码进行认证(而非调用者自己的密码)。
    
    # ALL ALL=(ALL:ALL) ALL  # WARNING: only use this together with 'Defaults targetpw'
    ## 所有用户均可以任意身份运行任意命令(危险!仅与 `Defaults targetpw` 搭配使用)。
    
    ## Read drop-in files from /usr/local/etc/sudoers.d
    ## 从 /usr/local/etc/sudoers.d 读取附加配置片段(drop-in)。
    
    @includedir sudoers.d
    ## 包含相对目录 `sudoers.d`(相对于 /usr/local/etc),读取其中的配置文件。
    ykla@ykla:~ $ sudo su
    [sudo: authenticate] Password: # 这里同样什么也没有,*** 也没有
    # 
    # pkg install xorg sddm kde wqy-fonts
    # cd /usr/ports/x11/xorg/ && make install clean 
    # cd /usr/ports/x11/kde/ && make install clean 
    # cd /usr/ports/x11/sddm/ && make install clean 
    # cd /usr/ports/x11-fonts/wqy/ && make install clean 
    # service dbus enable # 用于桌面环境的进程间通信,作为依赖自动安装的
    # service sddm enable # SDDM 登录管理器
    # echo "exec ck-launch-session startplasma-x11" > ~/.xinitrc
    # pw groupmod wheel -m 用户名
    # pw groupmod video -m 用户名
    # sysrc sddm_lang="zh_CN"
    # cap_mkdb /etc/login.conf
    # pkg install sddm-freebsd-black-theme
    # cd /usr/ports/x11-themes/sddm-freebsd-black-theme/ 
    # make install clean
    root@ykla:/home/ykla # pkg info -D sddm-freebsd-black-theme
    sddm-freebsd-black-theme-1.3:
    On install:
    To enable this theme edit:
    
     /usr/local/etc/sddm.conf
    # 若要启用此主题,请编辑 /usr/local/etc/sddm.conf 文件。
    
     This theme use the x11-fonts/montserrat font by default. However, it
     can be changed to any desired font editing:
    
     /usr/local/share/sddm/themes/sddm-freebsd-black-theme/theme.conf
    # 此主题默认使用 montserrat 字体(需安装 x11-fonts/montserrat),
    # 你可以通过编辑 theme.conf 文件更改为任意你想要的字体。
    
    Always:
    ===>   NOTICE:
    # 注意事项:
    
    The sddm-freebsd-black-theme port currently does not have a maintainer. As a result, it is
    more likely to have unresolved issues, not be up-to-date, or even be removed in
    the future. To volunteer to maintain this port, please create an issue at:
    
    https://bugs.freebsd.org/bugzilla
    # 此 port 目前没有维护者,因此可能存在未解决的问题、不够及时的更新,甚至未来可能被移除。
    # 若你愿意接手维护,请到上述链接创建一个问题(issue)。
    
    More information about port maintainership is available at:
    
    https://docs.freebsd.org/en/articles/contributing/#ports-contributing
    # 有关 port 维护的更多信息,请参考 FreeBSD 官方文档中关于贡献 port 的章节。
    [Theme]
    Current=sddm-freebsd-black-theme
    # pkg ins xorg sddm plasma6-plasma-desktop wqy-fonts plasma6-kactivitymanagerd plasma6-kscreen plasma6-systemsettings
    # pkg ins konsole dolphin kate plasma6-plasma-systemmonitor plasma6-plasma-pa plasma6-discover kdeconnect-kde plasma6-plasma-workspace-wallpapers plasma6-plasma-disks ark
    # cd /usr/ports/x11/xorg/ && make install clean 
    # cd /usr/ports/x11/plasma6-plasma-desktop/ && make install clean
    # cd /usr/ports/deskutils/plasma6-sddm-kcm/ && make install clean 
    # cd /usr/ports/x11/sddm/ && make install clean
    # cd /usr/ports/x11-fonts/wqy/ && make install clean
    # cd /usr/ports/x11/plasma6-kscreen/ && make install clean
    # cd /usr/ports/x11/plasma6-kactivitymanagerd/ && make install clean
    # cd /usr/ports/sysutils/plasma6-systemsettings/ && make install clean
    # cd /usr/ports/x11/konsole/ && make install clean # 终端 
    # cd /usr/ports/x11-fm/dolphin/ && make install clean # 文件管理器
    # cd /usr/ports/editors/kate/ && make install clean # 文本编辑器
    # cd /usr/ports/sysutils/plasma6-plasma-systemmonitor/ && make install clean # 系统监视器
    # cd /usr/ports/audio/plasma6-plasma-pa/ && make install clean # 音频管理器
    # cd /usr/ports/sysutils/plasma6-discover/ && make install clean # 软件管理器
    # cd /usr/ports/deskutils/kdeconnect-kde/ && make install clean # 手机电脑互联
    # cd /usr/ports/x11-themes/plasma6-plasma-workspace-wallpapers/ && make install clean # 桌面壁纸
    # cd /usr/ports/sysutils/plasma6-plasma-disks/ && make install clean # 磁盘健康(S.M.A.R.T.)监测 
    # cd /usr/ports/archivers/ark/ && make install clean # 解压缩软件 
    Gentoo Linux:Portage,对应 Ports(Portage 本身就是 Ports 的仿制品)
    源
    说明
    备注

    pkg

    类似于传统 Linux 的包管理器,用于安装二进制软件包

    不需要二进制方式安装软件可以不配置,默认未安装 pkg,输入 pkg 回车会提示安装

    portsnap

    拉取 Ports 的源代码模板(本身不含源代码,只是一些描述文件和补丁集)。换言之,这个源类似 Gentoo 的

    已于 FreeBSD 14 及后续版本废弃,无需配置 改用 git、gitup 和压缩包 ports.tar.gz 等方式获取。

    ports

    Gentoo 的包管理器 Portage(命令为 emerge)即是源于此。用于帮助用户从源代码编译安装软件。换言之,等同于 Gentoo 的

    不需要源代码方式编译软件可以不配置。

    update

    用于更新基本系统(内核 + 用户空间)

    预计在 FreeBSD 15 或 16 中废弃,转而使用 代替之

    技巧

    本文对于一个源列出了多个镜像站,无须全部配置,只需选择其一即可。

    目前境内没有官方镜像站,以下均为非官方镜像站。

    注意

    NJU 和 163 均同步自 USTC 而非 FreeBSD 直接上游。

    警告

    对于那些以安全性为较高优先级的用户来说,应该使用默认的官方镜像 pkg.freebsd.org!其由官方构建,分发和维护,且不受境内网络监管。

    pkg 源:pkg 源提供了二进制软件包

    境内的源一般只支持 aarch64(arm64)和 amd64 两个架构。

    FreeBSD 中 pkg 源分为系统级和用户级两个配置文件。不建议 直接修改 /etc/pkg/FreeBSD.conf 但是太麻烦啦,一般我都是直接改这个文件的,因为该文件会随着基本系统的更新而发生改变。

    警告

    请勿同时启用多个 pkg 镜像站,无论是官方镜像站(如 pkg.freebsd.org 与 USTC 混用),还是境内非官方镜像站(如 USTC 和 NJU 混用)都不要混合使用!后果类似于 FreeBSD 季度分支的 Ports 和 latest 分支的 pkg 混用,可能会破坏软件的依赖关系。案例:混用导致 KDE 桌面被删除。

    理解 quarterly 季度分支

    FreeBSD 的 pkg 分为 quarterly(季度,由 Ports 的 XXXX.QY 分支构建而来)分支与 latest(实时更新,由 Ports 的 main 分支构建而来)分支两个源。quarterly 现在是 FreeBSD 默认的 pkg 软件分支。

    其中,quarterly 的内容是由 main 分支(latest)的提交回溯而来,每年的 1 月、4 月、7 月、10 月 ③ 会发布新的分支(从特定时间的 main 分支切出来 ①),形如 2014Q3、2025Q1,这是为了便于通过 git 直接拉取所需的分支,但 Ports 管理团队(portmgr)只会维护最新分支,旧分支也不会允许任何合并。②

    quarterly 实际上类似于 Debian 的 Stable 版本,此处的 Stable 不仅仅代表“稳定”,而是“固定”。我们有必要区分“稳定”和“固定”两个词语:

    根据 Merriam‑Webster 和 Cambridge Dictionary,Stable 有“fixed”(固定)的意思。我们来看一下《现代汉语词典(第 7 版)》第 1374 页,就会发现“稳定”第一个释义被解释为“形容词,稳定安固,没有变动”;第 470 页载“固定”为“动词,不变动或不移动(跟‘流动’相对)”。所以“固定”是“稳定”的一种手段,“稳定”是一种目的。

    技巧

    Debian 是通过 固定 软件包的版本,仅接受安全更新不接受功能更新来实现的 稳定,手段是其软件源是 固定,Stable 系统的软件源也是 Stable 分支的——Debian 还有 testing 等分支。我们可以看到常见发行版是通过 固定 软件来实现的 Stable 版本。由于这些软件包已经历经了从 unstable(即 sid,Ubuntu 即基于此)testing 等多个分支的测试和发展,软件包自然比较 稳定。而且在 Stable 版本的系统生命周期内,任何软件基本上都不会得到大版本更新和功能更新。参见 DebianStability(看起来是稳定的意思)、Chapter 3. Choosing a Debian distribution(实际上是固定的意思),中文版在 第 3 章 选择一个 Debian 发布版本、2.2. Are there package upgrades in "stable"? 指出软件不会有功能性更新。

    FreeBSD pkg 的 quarterly 分支也试图实现相同的目的(提供可预测和稳定的用户体验),也是通过 非功能性更新 来实现的——除非涉及 Ports 框架、安全更新(故并非完全禁止版本更替)、简单错误修复(构建、编译、打包)等。任何功能性更新都不会被回溯到 quarterly 分支。可以看出 FreeBSD 的 quarterly 也同时兼有稳定和固定的双重含义。

    注意

    并非所有源都有 quarterly 和 latest,具体请看 https://pkg.freebsd.org/ 。也并非为所有架构都提供了 pkg 源,与平台支持等级挂钩。

    参考文献

    • Wiki QuarterlyBranch

    pkg 换源

    若要获取滚动更新的包,请将 quarterly 修改为 latest。二者区别见 FreeBSD 手册。请注意,CURRENT 版本只有 latest。

    使用命令修改系统级 pkg 源使用 latest:

    创建用户级源目录和文件

    中国科学技术大学开源软件镜像站(USTC)

    技巧

    视频教程见 005-FreeBSD14.2 更换 pkg 源为 USTC 镜像站

    写入以下内容:

    南京大学开源镜像站

    写入以下内容:

    网易开源镜像站

    写入以下内容:

    ports 源:以源代码方式编译安装软件的包管理器

    下载 ports

    这个源是下载 ports 本身的源。等同于以前的 portsnap。

    Git 方法

    须提前安装 git:

    或


    然后:

    注意

    --depth 1 会给服务器带来较大计算压力,请尽量使用参数 --filter=tree:0。

    下载压缩文件的方法

    警告

    通过下载 Port 的压缩文件来使用 Ports,是一次性的:Ports 后续无法更新,建议你优先采用 Git 方法。

    或者

    然后

    ports 源

    这个源是下载 ports 中的软件的源。

    警告

    ports 源可能并不完整。其余的大概只镜像了不到十分之一。见 https://github.com/ustclug/discussions/issues/408。

    创建或修改文件 :

    南京大学开源镜像站

    写入以下内容:

    网易开源镜像站

    写入以下内容:

    中国科学技术大学开源软件镜像站

    写入以下内容:

    Kernel modules(kmods)内核模块源:面向 FreeBSD 14.2 及更高版本(不含 15.0-CURRENT)

    • 对于 14.2-RELEASE:新建文件夹 /usr/local/etc/pkg/repos(即 mkdir -p /usr/local/etc/pkg/repos),再新建文件 /usr/local/etc/pkg/repos/FreeBSD-kmods.conf。

    • > 14.2-RELEASE:编辑 /etc/pkg/FreeBSD.conf。

    FreeBSD 官方源

    写入:

    quarterly 分支

    latest 分支

    中国科学技术大学开源软件镜像站

    写入:

    quarterly 分支

    latest 分支

    不受安全支持的版本(请酌情使用)

    技巧

    网易开源镜像站还提供了 FreeBSD 11、12 等过期版本的 pkg 二进制源。可自行配置使用。

    不受安全支持的版本也是可以使用二进制源的。以下,以 FreeBSD 9.2 为例:

    首先切换成可以用的二进制源

    如果 shell 不是 csh,那么:

    安装示例:现在安装 bsdinfo。

    注意

    pkg 是不可用的,会提示找不到 digests.txz 和 repo.txz,因为当时 pkgng 还没有被官方所支持,仍然仅支持使用 pkg_* 命令。

    FreeBSD(Pub)源:提供 ISO 安装镜像、文档、开发资料以及各种架构的 snapshot

    此处的 Pub,指的是官方的 http://ftp.freebsd.org/pub/FreeBSD/。类似于普通的镜像分发仓库。和 debian-cd、ubuntu-releases 等应属同一性质。

    目前已知全量同步 FreeBSD(Pub)源的镜像站:https://mirrors.nju.edu.cn/freebsd。其提供了完整的目录结构(如 snapshots、development),且更新及时。

    参考文献

    • FreeBSD ports,USTC Mirrors 换源帮助

    • FreeBSD pkg,USTC Mirrors 换源帮助

    镜像下载

    提示

    虚拟机也可以使用 FreeBSD 官方构建的 虚拟机镜像,需要手动扩容,文件系统可选 UFS 与 ZFS。

    虚拟机一般使用 FreeBSD-14.2-RELEASE-amd64-disc1.iso 等类似文件名和后缀的镜像,但是,FreeBSD-14.2-RELEASE-amd64-memstick.img 也并非只能用于 U 盘刻录,虚拟机也是可以用的,使用方法参考第 31.2 节。

    配置虚拟机

    VMware 安装 FreeBSD
    VMware 安装 FreeBSD
    VMware 安装 FreeBSD

    请务必选择“稍后安装操作系统”,否则启动会出问题。

    VMware 安装 FreeBSD

    请选择“其他”,然后选择 FreeBSD。

    技巧

    这一步其实无意义。甚至选择 Windows 也能顺利启动。但是对于低版本的 FreeBSD,虚拟机增强工具没有开源,可能会出问题。

    VMware 安装 FreeBSD

    虚拟机占用磁盘空间极大。若你不想 C 盘被占满,请自行调整存储位置。

    VMware 安装 FreeBSD

    请调整最大磁盘大小。默认值不合理。若要安装桌面,最小要大于 20 G。

    VMware 安装 FreeBSD
    VMware 安装 FreeBSD
    VMware 安装 FreeBSD

    默认值 256 M 能够启动。但是不建议这么做。实在不行给 512 M 也行。

    VMware 安装 FreeBSD

    默认值 1 CPU 能够启动。但是不合理。

    VMware 安装 FreeBSD

    在“使用 ISO 映像文件”中,点击浏览找到,并选中你下载的 -RELEASE-amd64-disc1.iso 文件。

    VMware 安装 FreeBSD

    技巧

    经过测试,FreeBSD 也可以支持驱动 UEFI 下 VMware 的显卡。——2025.3.24

    警告

    由于 Bug 250580 - VMware UEFI guests crash in virtual hardware after r366691,FreeBSD 11/12 在 VMware 的 UEFI 环境下可能无法启动。经测试 13.0 正常启动。

    VMware 安装 FreeBSD
    VMware 安装 FreeBSD
    VMware 安装 FreeBSD

    网络设置

    请使用 NAT 模式(默认),如果不能与宿主机(物理机)互通,请打开 VMware 编辑 - 虚拟网络管理器,“还原默认设置”,直至出现类似下图的配置:

    注意

    经过测试,桥接的虚拟机在与主机传递文件时,网速极慢。

    技巧

    如果“还原默认设置”不起作用,始终只有单个某模式,请按照下图手动配置。

    警告

    NAT 模式“名称”是与你主机的 控制面板\网络和 Internet\网络连接 中的 VMware Network Adapter VMnet8 绑定的,默认绑定的是 8:换言之,NAT 模式 “名称”默认必须指定为下图的 VMnat8,指定为其他名称虚拟机不会有网络!

    vmware network on freebsd

    以上请不要手动设置,如果虚拟机内部一直提示 no link,请重启物理机,再打开虚拟机:VMware 编辑 - 虚拟网络管理器,“还原默认设置”,直至出现上述配置。(请不要尝试手动配置,那是无效的)

    如果没有网络请设置 DNS 为 223.5.5.5。请看本章其余章节。

    如果配置桥接后始终无法 DHCP 到 IP,可尝试手动将“已桥接至 自动”改为你当前使用的网卡。

    vmware network on freebsd

    虚拟机增强工具与显卡驱动

    安装显卡驱动和虚拟机增强工具,即:

    或者

    注意

    若你不使用桌面还可以这样(仍然是 Port emulators/open-vm-tools):

    安装完毕后无需任何多余配置即可实现屏幕自动缩放。

    注意

    wayland 下也需要安装该驱动。

    技巧

    如果屏幕显示不正常(过大),请尝试:编辑虚拟机设置——> 硬件、设备——> 显示器——> 监视器、指定监视器设置——> 任意监视器的最大分辨率,设置为主机的分辨率或者略低于主机分辨率均可。

    鼠标集成(主机虚拟机鼠标自由切换)

    请先安装显卡驱动和虚拟机增强工具。

    编辑 /usr/local/share/X11/xorg.conf.d/xorg.conf 修改以下段落为(其他部分不需要动,保留原样即可):

    共享文件夹

    请先安装虚拟机增强工具。

    在物理机设置共享文件夹

    FreeBSD VMware 共享文件夹

    注意

    不必疑惑虚拟机的名字是 Windows 11,因为这是 Windows11 和 BSD 双系统虚拟机。

    在 FreeBSD 虚拟机中查看设置的文件夹:

    加载 fuse 模块

    加载 fuse,将下文写入 /boot/loader.conf:

    挂载

    手动挂载

    注意

    请将 123pan 换成你自己的路径。

    自动挂载

    编辑 /etc/fstab/:写入:

    注意

    请将 123pan 换成你自己的路径。

    检查(请务必执行,否则若写错了会卡在开机处):

    查看共享文件夹

    FreeBSD VMware 共享文件夹

    文件符合。

    参考文献

    • 解决 vmware 上 Ubuntu 共享文件夹(2022 年 7 月),整体方法参考此处

    • fuse: failed to open fuse device,解决 fuse: failed to open fuse device: No such file or directory 的问题

    • VMware shared folders,挂载方法参考此处

    故障排除与未竟事宜

    注意

    在使用 Windows 远程桌面或者其他 XRDP 工具远程另一台 Windows 桌面,并使用其上面运行的 VMware 虚拟机操作 FreeBSD 时,鼠标通常会变得难以控制。这是正常的!

    • 每次进入图形界面,窗口都会异常扩大。

    调整虚拟机的最大分辨率即可。

    VMware 安装 FreeBSD

    硬件——显示——监视器——任意监视器的最大分辨率 (M),将其由默认最大的 2560 x 1600(2K)改成其他较小值即可,亦可自定义数值。

    • 没有声音

    加载声卡后若仍然没有声音,请将音量拉满到 100% 再看一下。因为默认声音几乎微不可闻。

    附录:博通(broadcom)账号相关

    警告

    博通官网频繁变动,无法始终提供一致的解决方案,请读者领会大意,自行操作,如实不会,请加入中文社区聊天群。

    博通(broadcom)账号注册

    VMware 已被博通收购。故目前下载任何博通产品均须先注册、登录博通账号。 目前任何非此域名(broadcom.com)教程均无效。

    博通(broadcom)账号的注册流程

    • 打开 https://support.broadcom.com/

    • 点击右上角的“Register”(注册)(或者直接打开 https://profile.broadcom.com/web/registration)

    在页面“Email Address”(电子邮件)处输入你的电子邮箱。如果没有的话,可以用你的 QQ 号,然后直接加上一个 @qq.com——比如你的 QQ 号是 1212111111,那么你的 QQ 邮箱则为 [email protected]

    在页面“Enter text from image”(输入图片上的文本)处输入图片上的文本信息(实际上是验证码)。如果看不清或者不认识,可以点 Enter text from image 右侧的 🔁 点击“Next”(继续)

    如果你使用的是 QQ 号生成的邮箱,请打开 。其他邮箱请在各自网站打开,如果不知道,请使用 QQ 邮箱。

    • 把第五步得到的“Verification Code: 972980”,中的 972980(你的和我不一样,找你自己的)填到“Enter text from image”里面。

    • 点击“Verify & Continue”(确认并继续)

    • 完成注册

    • 结束注册流程

    博通(broadcom)账号登录

    博通(broadcom)账号登录流程

    • 打开 https://support.broadcom.com/

    点击右上角的“Login”(登录)(或者直接打开 https://support.broadcom.com/c/portal/login)

    • Username(用户名)就是你注册时候的邮箱。然后点“Next”(下一步)

    • 点击下一步

    • 点击登录

    • 登录完成

    VMware Workstation Pro 下载(推荐)

    VMware Workstation Pro 下载流程

    • 点击右上角对应图标(名字左侧第一个),选择“VMware Cloud Foundation”(VMware 云计算基础架构)

    • 点击右侧的“My Downloads”(我的下载)

    • 往下翻,点击“VMware Workstation Pro“

    • 点击“Release”(发行版),选择最顶部的那个,你看到的不一定和我一样。

    或者跳过上述步骤,直接打开

    • 把红色的 * 项目填写完成,不会写的自己编,最好不要抄我的。

    • 勾选“I agree to Terms and Conditions”(我同意条款及条件)左侧的方框 ⬜,让他变成 🟦。(必须先点击“Terms and Conditions”弹窗新页面,再回来就能勾选了)

    • 点击右侧箭头的云朵图片 ☁️ 即可下载

    VMware Workstation Pro 目前对于个人用户来说是 免费下载、免费使用、免费授权的。 请勿从任何第三方站点下载。 否则会造成一些未知的后果——90% 的问题都是由此产生的。

    博通开源/社区产品

    博通所有开源/社区产品都被整合到了这里进行下载。

    如:Community Network Driver for ESXi、ESXi Arm Edition 等。

    访问地址:https://community.broadcom.com/flings/home。目前任何非此域名教程(community.broadcom.com)均无效。

    VMware Workstation Player(已弃用,不要用)

    VMware Workstation Player 目前已弃用。且功能相对 VMware Workstation Pro 非常有缺失。不建议使用,非要下载,请点击 https://support.broadcom.com/group/ecx/productdownloads?subfamily=VMware%20Workstation%20Player。目前所有包含该软件的教程均为旧教程。

    001-WIndows11 安装 VMware17

    5.7 使用 freebsd-update 更新 FreeBSD

    注意:

    只有一级架构的 release 版本才提供该源。也就是说 current 和 stable 是没有的。关于架构的支持等级说明请看:

    注意

    ZFS 相关升级参见 ZFS 章节。

    历史

    FreeBSD 提供了实用工具 freebsd-update

    5.4 使用 pkg 管理二进制包

    FreeBSD 二进制包管理器目前是 pkg(旧称 pkgng),即“Package”,软件包的意思。

    pkg install 可以缩写成 pkg ins,其他类似。

    注意

    pkg 只能管理第三方软件包,并不能起到升级系统,获取安全更新的作用。这是因为 FreeBSD 项目是把内核与用户空间作为一个整体来进行维护的,而不是像 Linux 那样 linus torvalds 负责维护内核,各个发行版的人负责维护 GNU 工具(他们这些软件实际上被设计为单个软件包,因此可以用包管理器更新与升级系统)。

    FreeBSD 现在也正 。解决上述问题。

    FreeBSD 使用 freebsd-update 来升级系统,获取安全补丁。 可以查看当前的 pkg 编译状态。

    偏好图形化的用户可以安装使用 ports-mgmt/octopkg,该工具是 pkg 的图形化前端,由 ghostbsd 开发。

    root@ykla:/home/ykla # git clone https://git.FreeBSD.org/ports.git /usr/ports # 拉取 Ports
    正克隆到 '/usr/ports'...
    remote: Enumerating objects: 6715646, done.
    remote: Counting objects: 100% (936/936), done.
    remote: Compressing objects: 100% (120/120), done.
    remote: Total 6715646 (delta 923), reused 816 (delta 816), pack-reused 6714710 (from 1)
    接收对象中: 100% (6715646/6715646), 1.50 GiB | 10.26 MiB/s, 完成.
    处理 delta 中: 100% (4065984/4065984), 完成.
    正在更新文件: 100% (168004/168004), 完成.
    root@ykla:/home/ykla # cd /usr/ports/ # 切换到 git 的 Ports 路径
    root@ykla:/usr/ports # git branch -a # 列出本地所有分支
    * main
      remotes/origin/2014Q1
      remotes/origin/2014Q2
      remotes/origin/2014Q3
      remotes/origin/2014Q4
    
         ……省略一部分……
    
      remotes/origin/2025Q2
      remotes/origin/2025Q3
      remotes/origin/2025Q4
      remotes/origin/HEAD -> origin/main # 可以看到 main 是默认分支
      remotes/origin/main
    root@ykla:/usr/ports # git for-each-ref --sort=-committerdate --format='%(committerdate:short) %(authorname) %(refname:short) %(objectname:short)' refs/remotes/ # 列出所有分支及最后提交者与时间 ①
    2025-10-24 Hiroki Tagato origin be5283280c16
    2025-10-24 Hiroki Tagato origin/main be5283280c16
    2025-10-23 Colin Percival origin/2025Q4 060d3d65fcbb
    2025-10-14 Bryan Drewery origin/2025Q3 9f09f84b2dd5
    2025-07-01 FiLiS origin/2025Q2 c339266c40e5
    
      ……省略一部分……
    
    2015-07-23 Palle Girgensohn origin/2015Q2 7d7c2271f6c9
    2015-04-09 Alonso Schaich origin/2015Q1 5bd325869bde
    2014-10-01 Bryan Drewery origin/2014Q3 a0ccd6f83108
    2014-06-28 Thomas Zander origin/2014Q2 a3377806e58e
    2014-03-29 Lars Engels origin/2014Q1 5f4d6e1d6b07
    root@ykla:/usr/ports # git merge-base origin/main origin/2025Q4 # 查找两个分支的最近共同祖先 commit
    6c256c6adb790f0588b920d41a5fe4dfa550079f
    root@ykla:/usr/ports # git branch -r --contains 6c256c6adb790f0588b920d41a5fe4dfa550079f # 出哪些远程分支历史中包含此 commit ②
      origin/2025Q4
      origin/HEAD -> origin/main
      origin/main
    root@ykla:/usr/ports # for branch in $(git branch -r | grep -v HEAD); do # 查看分支创建的时间 ③
    >   mb=$(git merge-base origin/main $branch)
    >   date=$(git show -s --format='%ci' $mb)
    >   echo "$branch created around $date"
    > done
    
    origin/2014Q1 created around 2013-12-16 08:00:15 +0000
    origin/2014Q2 created around 2014-04-01 12:02:40 +0000
    origin/2014Q3 created around 2014-07-01 10:13:26 +0000
    origin/2014Q4 created around 2014-10-01 06:43:32 +0000
    origin/2015Q1 created around 2015-01-01 14:35:03 +0000
    origin/2015Q2 created around 2015-04-01 12:19:37 +0000
    origin/2015Q3 created around 2015-07-01 12:12:08 +0000
    origin/2015Q4 created around 2015-10-01 19:24:12 +0000
    
    ……省略一部分……
    
    origin/2024Q4 created around 2024-10-07 20:46:12 +0200
    origin/2025Q1 created around 2025-01-05 11:22:53 +0100
    origin/2025Q2 created around 2025-04-01 12:58:51 +0200
    origin/2025Q3 created around 2025-07-01 22:32:34 +0300
    origin/2025Q4 created around 2025-10-01 21:27:17 +0200
    origin/main created around 2025-10-24 12:43:02 +0900
    # sed -i '' 's/quarterly/latest/g' /etc/pkg/FreeBSD.conf
    # mkdir -p /usr/local/etc/pkg/repos
    # ee /usr/local/etc/pkg/repos/mirrors.conf
    ustc: {
    url: "https://mirrors.ustc.edu.cn/freebsd-pkg/${ABI}/latest"
    }
    FreeBSD: { enabled: no }
    nju: {
    url: "https://mirrors.nju.edu.cn/freebsd-pkg/${ABI}/latest"
    }
    FreeBSD: { enabled: no }
    163: {
    url: "https://mirrors.163.com/freebsd-pkg/${ABI}/latest"
    }
    FreeBSD: { enabled: no }
    # pkg install git
    # cd /usr/ports/devel/git
    # make install clean
    # git clone  --filter=tree:0 https://mirrors.ustc.edu.cn/freebsd-ports/ports.git /usr/ports
    # fetch https://mirrors.nju.edu.cn/freebsd-ports/ports.tar.gz
    # fetch https://mirrors.ustc.edu.cn/freebsd-ports/ports.tar.gz
    # tar -zxvf ports.tar.gz -C /usr/ # 解压至路径
    # rm ports.tar.gz # 删除存档
    # ee /etc/make.conf
    MASTER_SITE_OVERRIDE?=https://mirrors.nju.edu.cn/freebsd-ports/distfiles/${DIST_SUBDIR}/
    MASTER_SITE_OVERRIDE?=https://mirrors.163.com/freebsd-ports/distfiles/${DIST_SUBDIR}/
    MASTER_SITE_OVERRIDE?=https://mirrors.ustc.edu.cn/freebsd-ports/distfiles/${DIST_SUBDIR}/
    FreeBSD-kmods {
    	url: pkg+https://pkg.freebsd.org/${ABI}/kmods_quarterly_${VERSION_MINOR}
    	signature_type: "fingerprints"
    	fingerprints: "/usr/share/keys/pkg"
    	mirror_type: "srv"
    	enabled: yes
    }
    FreeBSD-kmods {
    	url: pkg+https://pkg.freebsd.org/${ABI}/kmods_latest_${VERSION_MINOR}
    	signature_type: "fingerprints"
    	fingerprints: "/usr/share/keys/pkg"
    	mirror_type: "srv"
    	enabled: yes
    }
    FreeBSD-kmods {
    	url: https://mirrors.ustc.edu.cn/freebsd-pkg/${ABI}/kmods_quarterly_${VERSION_MINOR}
    	enabled: yes
    }
    FreeBSD-kmods {
    	url: https://mirrors.ustc.edu.cn/freebsd-pkg/${ABI}/kmods_latest_${VERSION_MINOR}
    	enabled: yes
    }
    # setenv PACKAGESITE http://ftp-archive.freebsd.org/pub/FreeBSD-Archive/ports/amd64/packages-9.2-release/Latest
    # export PACKAGESITE=http://ftp-archive.freebsd.org/pub/FreeBSD-Archive/ports/amd64/packages-9.2-release/Latest
    # pkg_add -r bsdinfo
    Fetching http://ftp-archive.freebsd.org/pub/FreeBSD-Archive/ports/amd64/packages-9.2-release/Latest/bsdinfo.tbz... Done.
    # pkg install open-vm-tools-nox11
    # pkg install xf86-video-vmware open-vm-tools xf86-input-vmmouse open-vm-kmod
    # cd /usr/ports/x11-drivers/xf86-video-vmware/  && make install clean
    # cd /usr/ports/emulators/open-vm-tools/ && make install clean
    # cd /usr/ports/x11-drivers/xf86-input-vmmouse/  && make install clean
    # cd /usr/ports/emulators/open-vm-kmod/ && make install clean
    # service moused enable
    # Xorg -configure
    # mv /root/xorg.conf.new /usr/local/share/X11/xorg.conf.d/xorg.conf
    Section "ServerLayout"
            Identifier     "X.org Configured"
            Screen          0  "Screen0" 0 0
            InputDevice    "Mouse0" "CorePointer"
            InputDevice    "Keyboard0" "CoreKeyboard"
            Option          "AutoAddDevices" "Off"  # 添加此行到此处
    EndSection
    
    …………此处省略一部分…………
    
    Section "InputDevice"
          Identifier  "Mouse0"
          Driver      "vmmouse"  # 修改 mouse 为 vmmouse
          Option      "Protocol" "auto"
          Option      "Device" "/dev/sysmouse"
          Option      "ZAxisMapping" "4 5 6 7"
    EndSection
    
    …………此处省略一部分…………
    root@ykla:/home/ykla # vmware-hgfsclient
    123pan
    fusefs_load="YES"
    # vmhgfs-fuse .host:/123pan /mnt/hgfs
    .host:/123pan      /mnt/hgfs    fusefs  rw,mountprog=/usr/local/bin/vmhgfs-fuse,allow_other,failok 0
    # mount -al # 若无输出则正常
    root@ykla:/home/ykla # ls /mnt/hgfs/
    Downloads
    root@ykla:/home/ykla # ls /mnt/hgfs/Downloads/
    零跑

    kernel modules(kmods)

    内核模块源(含无线网卡驱动、以太网卡驱动、drm 显卡驱动等),为解决小版本间可能存在的 ABI 不兼容问题

    参见 Possible solution to the drm-kmod kernel mismatch after upgrade from Bapt、CFT: repository for kernel modules。可以使用命令 fwget 自动安装所需驱动

    FreeBSD(pub)

    提供 ISO 安装镜像、文档、开发资料、snapshot,在安装系统、系统救援、开发参考时有很大帮助。

    参考 FreeBSD.org ftp server 目录结构。

    ebuild 数据库
    Distfiles 源
    pkgbase
    https://wx.mail.qq.com/
    https://support.broadcom.com/group/ecx/free-downloads
    注册
    邮箱验证码
    输入邮箱验证码
    完成注册
    结束注册
    点击下一步
    点击登录
    登录后界面
    点击“VMware Workstation Pro“
    点击“Release”(发行版)
    下载主页
    补充信息
    同意许可协议
    下载
    vmware network on freebsd
    打开 https://support.broadcom.com/
    登录
    登录
    来安装系统更新,包括升级到大版本。
    freebsd-update
    在 FreeBSD 7.0-RELEASE 中得到了正式支持。

    参考文献

    • FreeBSD 7.0-RELEASE Announcement 指出 freebsd-update(8) 是由官方支持的二进制更新方式,不仅可用于更新到新版本,还可用于安全修复和勘误补丁的更新。

    替换默认的文本编辑器为更简单的编辑器

    bash、zsh 或 sh(14.0 及以上)

    csh(14.0 以下)

    检查验证

    常规补丁/安全更新(X.Y-RELEASE——>X.Y-RELEASE-pN)

    警告

    无论你是大版本还是点版本还是常规更新,都应该先走一遍这个流程。不可绕过,否则会出现不可预料的后果。

    版本检查

    进行更新

    • 获取更新

    当出现类似于如下信息时:

    这里是发生变动的文件,你只需要在确认后输入字母 q(代表“quit”,退出)再按回车键即可。

    然后安装更新:

    版本检查

    • 查看更新后的版本:

    注意:

    有时候补丁不涉及内核,内核版本就不会变,用 uname -r 完全看不出来,但是用户空间版本会变。所以你可能会看到两个版本,以较高者为准。

    重启:

    再查看版本:

    大版本间更迭(X.Z-RELEASE-pN——>A.0-RELEASE)

    注意

    freebsd-update 下载慢不是因为其更新源在境外(你使用境外服务器更新一样慢;并且在 freebsdcn 境内源还生效的那些日子里,亦如此)。可能因其设计缺陷,freebsd-update 是个数千行的纯粹 shell 脚本。这是一个始终普遍存在的问题。

    以 FreeBSD 14.3-RELEASE 升级 15.0-RELEASE 为例

    检查版本

    警告

    由于大版本间的变动,可能影响 freebsd-update 更新工具本身,所以一定要:

    先更新到当前版本最新的补丁版本(如 X.Y-RELEASE-pN),然后再更新到最新的点版本(如 X.Z-RELEASE).

    接下来:更新到最新的点版本及该点版本上最新的补丁版本(如 X.Z-RELEASE-pN)

    最后:进行大版本(X.Z-RELEASE-pN——>A.0-RELEASE)的更迭。

    参见 libsys.so.7 not found when upgrading userland with legacy freebsd-update。

    更新到 15.0-RELEASE

    运行 freebsd-update install 以安装更新:

    内核更新已经安装:

    可以看到,当前已安装内核的版本和补丁级别是 15.0-RELEASE。但是用户空间和当前运行的都是 14.3-RELEASE,因此我们要按照 freebsd-update 的提示来重启:

    运行 freebsd-update install 安装用户空间的更新部分:

    重装 pkg 本身,将其 ABI 更新到 15.0-RELEASE:

    将第三方软件的 ABI 更新到 15.0-RELEASE:

    对第三方程序的更新就完成了。

    再次执行 freebsd-update 结束更新流程。

    验证操作系统版本:

    更新完成。

    更新 EFI 引导

    背景介绍

    警告

    对于使用 EFI 引导的系统,EFI 系统分区(ESP)上有引导加载程序的副本,用于固件引导内核。如果根文件系统是 ZFS,则引导加载程序必须得能读取 ZFS 引导文件系统。在系统升级后,且执行 zpool upgrade 前,必须先更新 ESP 上的引导加载程序,否则系统可能无法引导。虽然不是强制性的,但在 UFS 作为根文件系统时亦应如此。

    可以使用命令 efibootmgr -v 来确定当前引导加载程序的位置。BootCurrent 显示的值是用于引导系统的当下引导配置的编号。输出的相应条目以 + 开头,如

    ESP 应该已经挂载到了 /boot/efi。如果没有,可手动挂载之,使用 efibootmgr 输出中列出的分区(本例为 nda0p1):mount_msdosfs /dev/nda0p1 /boot/efi。有关另一则示例,请参阅 loader.efi(8)。

    在 efibootmgr -v 输出的 File 字段中的值,如 \efi\freebsd\loader.efi,是 EFI 上正在使用的引导加载程序的位置。若挂载点是 /boot/efi,则此文件为 /boot/efi/efi/freebsd/loader.efi。(在 FAT32 文件系统上大小写不敏感;FreeBSD 使用小写)File 的另一个常见值可能是 \EFI\boot\bootXXX.efi,其中 XXX 是 amd64(即 x64)、aarch64(即 aa64)或 riscv64(即 riscv64);如未配置,则为默认引导加载程序。应把 /boot/loader.efi 复制到 /boot/efi 中的正确路径来更新已配置及默认的引导加载程序。

    更新方法

    在版本更新后,在启动菜单出现之前,可能出现下面的画面

    注意

    该界面出现的时间非常短暂,约只有 20 毫秒。可用相机拍摄观察。

    loader 更新提示界面

    即

    这说明 loader 需要更新了。还可以使用命令进行版本验证:

    此处命令参考了手册 loader.efi 中的例子。/boot/efi/efi/freebsd/loader.efi 为正在使用的 loader(版本确实旧了)

    更新:

    警告

    请先更新 loader,再更新 ZFS 版本!

    重要

    非 EFI、bootcode、ZFS 等相关更新请自行查看相关部分章节!

    故障排除与未竟事宜

    回滚更新

    pkg 找不到 .so

    终端执行命令

    FreeBSD 升级出错,没有 ntp 用户

    终端执行命令

    Supported Platforms

    技巧

    如果需要查询一个软件包在 FreeBSD 中的具体情况可以这样用:谷歌或者必应(必应很多时候搜索不出来)搜索“freebsd ports 包名”。如果无法使用,可以直接在网站里搜索包名 https://www.freshports.org/。

    如何从 Port 构建出 pkg

    pkg 构建流程图

    书里明确写有某个包,但是 pkg 安装的时候却提示没有

    这个问题一般来说有两个回答:

    • ① 在 Ports 中的确没有这个 Port:书里写错了、从 Ports 中移除了/改名了等

    • ② Ports 中的确有这个 Port:FreeBSD 的 pkg 包是周期性构建的(因为 Ports 本身在更新),会经常存在没有特定 pkg 包存在的情况

    具体是哪个问题造成的,建议查询 https://www.freshports.org,上面会显示软件包的依赖情况和 pkg 包的构建情况。

    本书中一般会同时列出 Ports 安装方式,比如要查 Port x11/budgie,你可以这么做:直接访问 https://www.freshports.org/x11/budgie/。

    一般来说,如果 Ports 中有这个 Port,但是 pkg 安装没有,等待 7-14 天一般就可以了(构建不出来的包系统会自动发报错给维护者的)。如要立刻安装使用,请使用 Ports。

    附录:FreeBSD 软件包原子更新的困难与现状

    你会经常观察到 FreeBSD 的镜像站(无论是官方的还是非官方的)源存在这样几种情况:

    • 一旦 Port 发生更新,就会立刻从软件源撤销该 Port 衍生的 pkg 软件包,直到下次构建出新的 pkg 软件包,而不是保留旧的软件包;

    • 只要开始一次新的构建,旧的软件包不是被临时保留,而是被立刻从 pkg 软件包软件源中删除,直到构建出新版本的 pkg 软件包。

    理论上的解决方案:如果你保持一个特定阶段的软件包不更新,是固定版本(季度分支),然后直接轮替即可。

    问题在于 Port 更新是不定时的。复杂的依赖会破坏一切。有力者可尝试提出新的看法和建议反馈至下方或 FreeBSD 论坛。

    思考题

    • 相关讨论 the disappearing pkg issue

    • pkg 项目位于 freebsd/pkg

    • pkg 软件包的构建系统位于 Poudriere。

    试一试:帮助 FreeBSD 项目实现 pkg 二进制软件包的原子更新?

    安装 pkg 包管理器本体

    技巧

    根据 man pkg(7) 页面解释:

    为了避免出现向后兼容问题,实际的 pkg(8) 工具不会预装在基本系统中。

    基本系统默认没有 pkg,需要先下载一下 pkg:

    技巧

    如果长时间卡在 Bootstrapping pkg from ……, please wait...,请按 Ctrl + C 中断这一过程,换境内源后再进行。

    技巧

    如果提示 00206176BC680000:error:0A000086:SSL routines:tls_post_process_server_certificate:certificate verify failed:/usr/src/crypto/openssl/ssl/statem/statem_clnt.c:1890:(SSL 证书验证失败),请先校准时间。

    思考题

    在 SSL 大行其是的年代里,任何网络问题总是要看看自己机器的时间是否正确。而一般人总会忽略这一点(有时候甚至是 CPU 中负责加密的模块损坏导致的),并且大多数情况下报错也极不明确。你认为应该如何解决这个问题?

    使用 pkg 安装软件

    以安装 chromium 为例:

    “Insufficient privileges to install packages”即“没有足够的权限来安装包”。

    再来试试:

    思考题

    Add Concurrent Downloads of Multiple Packages

    你会发现 pkg 既不支持并行下载也不支持并行安装,阅读源代码,尝试解决提交 PR 这个问题。

    你极有可能会遇到这种情况:

    “pkg: No packages available to install matching 'chromium' have been found in the repositories”即“pkg:在仓库中找不到 与 “chromium” 匹配、可供安装的软件包”。

    如果你前面显示了“FreeBSD repository update completed. 36804 packages processed.”(FreeBSD 仓库更新完成。处理了 36804 个包),说明当前软件源是可用的,只是找不到 chromium 这个软件包而已。

    这就是上面所述的缺乏“原子更新”的表现。

    我们还会发现即使设定了 i18n,我们的 pkg 仍然是英语。

    思考题

    Is it possible to add i18n multilingual support using po files?

    FreeBSD 基本系统里没有 gettext ,所以没有计划这样做,如果后续在 pkg 中出现可用的 libintl 套件,则可能会重新考虑。

    阅读 pkg 源代码,定位问题所在源头,尝试解决这个问题,提交 PR 让 pkg 支持 i18n。

    pkg 更新软件

    错误:You must upgrade the ports-mgmt/pkg port first(你必须先更新 pkg 本体)

    解决:

    查看已经安装的所有软件

    卸载软件

    直接使用 pkg delete 会破坏正常的依赖关系,应该尽量避免使用(ports 的 make deinstall 也一样),转而使用 pkg_rmleaves 命令,该命令属于的软件需要自行安装。

    或者

    如何卸载所有自行安装的第三方软件?

    参考文献

    • pkg delete -- deletes packages from the database and the system

    列出 pkg 包安装的文件

    技巧

    pkg 的下载路径是 /var/cache/pkg/。

    注意

    只能列出已安装的包的文件,未安装的不能用这个命令。

    查找缺少的 .so(适用于 Linux 兼容层)

    警告

    本部分仅针对 Linux 兼容层缺少 .so 的问题。如果你是在 FreeBSD 中遇到了此类问题,应首先更新系统。然后再更新软件源和软件。

    安装 pkg-provides

    或者:

    配置使用 pkg-provides

    • 查看配置说明:

    • 编辑 /usr/local/etc/pkg.conf,找到空行,写入:

    • 运行:pkg plugins:

    • 刷新数据库:

    示例:查找 libxcb-icccm.so.4

    故障排除与未竟事宜

    ld-elf.so.1: Shared object "libmd.so.6" not found, required by "pkg"

    该问题一般是由于软件源未及时同步基本系统 ABI 的变更。

    对于一般 RELEASE,更新系统即可。对于 CURRENT/STABLE 系统,重新编译 pkg 即可。

    RELEASE

    请先切换到 latest 源,再使用软件源里的 pkg 包重装 pkg:

    若无效,则再:

    CURRENT/STABLE

    pw: user ‘package’ disappeared during update

    问题示例:

    问题在于数据库未同步。

    刷新数据库:

    Shared object "x.so.x" not found, required by "xxx"

    出现该问题一般是由于 ABI 破坏,更新即可。

    安装 bsdadminscripts2:

    或者

    按照上述软件列表,使用 Ports 逐个重新编译即可(RELEASE 可以直接 pkg 更新。)。

    附录:bsdadminscripts2 扩展用法及参考文献

    • BSD Administration Scripts II,项目地址,含详细使用说明

    • 若使用了 pkgbase,bsdadminscripts2 可 检查系统的完整性,找出哪些系统文件是被窜改过的:

    • bsdadminscripts2 亦可查找当前系统的过时软件:

    Newer FreeBSD version for package pkg

    问题示例:

    这通常发生在失去安全支持的或者在 CURRENT/STABLE 版本的系统上,不影响使用,输入 y 即可。

    如果想要从根源上解决,需要自己卸载 pkg,从 ports 安装 ports-mgmt/pkg;或者从源代码更新整个系统。

    如果只是不想看到这个提示:只需要按照提示将 IGNORE_OSVERSION=yes 写到 /etc/make.conf 里面(没有就新建)就行。

    pkg: An error occurred while fetching package: No error

    以 root 权限执行 certctl rehash 刷新证书即可。

    参见 pkg(8): "An error occured while fetching package: No error"

    试图使用 pkg 来实现用户空间和内核的更新
    https://pkg-status.freebsd.org/

    前言

    三版前言:且有大觉而后知此其大梦也(草稿)

    第一段梦

    是我打开之前那个 Excel 问题收集表(CFC 问题收集表),我发现还是没有一个人写,表格中只有 4~5 行我自己预填充的例子。倏然,我发现多了一行,但又很快删掉了。我发现表格的表头竟然多出了两列:要求写真实姓名和类似政治面貌的东西。我以为是我写错了,也许套用错了模板,我就在群里告诉群主说以后还是手动发给你吧,你再收集问题给我。

    # export EDITOR=/usr/bin/ee # 切换 vi 为 ee,默认为 nvi 
    # export VISUAL=/usr/bin/ee # 切换 vi 为 ee
    # setenv EDITOR /usr/bin/ee # 切换 vi 为 ee,默认为 nvi 
    # setenv VISUAL /usr/bin/ee # 切换 vi 为 ee
    # echo $EDITOR
    /usr/bin/ee
    # echo $VISUAL
    /usr/bin/ee
    # freebsd-version -kru
    14.3-RELEASE
    14.3-RELEASE
    14.3-RELEASE
    # freebsd-update fetch
    usrlinclude/c++/vl/trllvector usrlinclude/c++/vl/trllversion usrlinclude/c++/v1/trl/wchar.h usr/include/c++/v1/tr1/wctype.h usrlinclude/c++/vllunwind-armh
    usrlinclude/c++/v1/unwind-itaniumh usrlinclude/c++/vllunwindh
    usr/include/crypto/ cryptodevh usrlinclude/crypto/cbcmac.h usr/include/crypto/deflate.h usrlinclude/crypto/gfmult.h usr/include/crypto/gmac.h
    usr/include/crypto/rijndael.h usrlinclude/crypto/rmd160.h usr/include/crypto/xform.h
    usr/lib/clang/11.0.1/include
    : q # 这里输入 q 再按回车键
    # freebsd-update install
    # freebsd-version -kru
    14.3-RELEASE-p5
    14.3-RELEASE
    14.3-RELEASE-p6
    # reboot
    # freebsd-version -kru
    14.3-RELEASE-p5
    14.3-RELEASE-p5
    14.3-RELEASE-p6
    # freebsd-version -kru
    14.3-RELEASE-p5
    14.3-RELEASE-p5
    14.3-RELEASE-p6
    # freebsd-update upgrade -r 15.0-RELEASE
    
    ……当出现类似于下列信息时,按照下方提示操作……
    
    src component not installed, skipped
    Looking up update.FreeBSD.org mirrors... 3 mirrors found.
    Fetching metadata signature for 14.3-RELEASE from update1.freebsd.org... done.
    Fetching metadata index... done.
    Fetching 2 metadata patches.. done.
    Applying metadata patches... done.
    Fetching 1 metadata files... done.
    Inspecting system... done.
    
    The following components of FreeBSD seem to be installed:
    kernel/generic kernel/generic-dbg world/base world/lib32
    
    The following components of FreeBSD do not seem to be installed:
    world/base-dbg world/lib32-dbg
    
    Does this look reasonable (y/n)? y # 在这里输入 y,然后回车即可,在检查基本组件的安装情况。
    
    Fetching metadata signature for 15.0-RELEASE from update1.freebsd.org... done.
    Fetching metadata index... done.
    Fetching 1 metadata patches. done.
    Applying metadata patches... done.
    Fetching 1 metadata files... done.
    Inspecting system...
    
    …………这里在检查系统,从上面的回车到这里需要等待约 10 分钟…………
    
    Fetching metadata signature for 15.0-RELEASE from update1.freebsd.org... done.
    Fetching metadata index... done.
    Fetching 1 metadata patches. done.
    Applying metadata patches... done.
    Fetching 1 metadata files... done.
    Inspecting system... done.
    Fetching files from 14.3-RELEASE for merging... done.
    Preparing to download files... done.
    
    …………这里在准备要下载的文件,需要等待约 15 分钟…………
    
    Fetching 6735 patches.....10....20....30....40....50....60....70....80....90.
     
    ………………下面需要等待约 30 分钟。注意,当跨大版本更新时,有时候需要等待 5 小时或更长时间,这都是正常的。………………
    
    ....100....110....120....130....140....150....160....170....180....190....200
    
    …………中间省略………………
    
    20....6630....6640....6650....6660....6670....6680....6690....6700....6710....6720....6730.. done.
    Applying patches... 
    
    ………………打补丁,需要等待约 5 分钟………………
    
    Applying patches... done.
    Fetching 880 files... ....10....20....30....4
    
    ………………省略一部分进度条………………
    
    0....880 done.
    Attempting to automatically merge changes in files... done.
    
    The following file could not be merged automatically: /etc/pkg/FreeBSD.conf
    Press Enter to edit this file in /usr/bin/ee and resolve the conflicts
    manually...
    
    ……这里提示我们按回车键编辑一些无法自动合并需要手动编辑的文件……
    
    The following changes, which occurred between FreeBSD 14.3-RELEASE and
    FreeBSD 15.0-RELEASE have been merged into /etc/login.conf:
    --- current version
    +++ new version
    
    ……此处列出的是发生变动的文件,省略一部分输出……
    
     #site:\
    -#      :ignoretime:\
     #      :passwordtime@:\
     #      :refreshtime@:\
     #      :refreshperiod@:\
     #      :sessionlimit@:\
     #      :autodelete@:\
    Does this look reasonable (y/n)? # 输入 y 回车,这里在确认系统文件的变动
    
    The following changes, which occurred between FreeBSD 14.3-RELEASE and
    FreeBSD 15.0-RELEASE have been merged into /etc/pkg/FreeBSD.conf:
    --- current version
    +++ new version
    
    ……此处列出的是发生变动的文件,省略一部分输出……
    
    Does this look reasonable (y/n)?  # 输入 y 回车,这里在确认系统文件的变动
    
    The following changes, which occurred between FreeBSD 14.3-RELEASE and
    FreeBSD 15.0-RELEASE have been merged into /etc/ssh/sshd_config:
    --- current version
    +++ new version
    
    ……此处列出的是发生变动的文件,省略一部分输出……
    
     # override default of no subsystems
    Does this look reasonable (y/n)? # 输入 y 回车,这里在确认系统文件的变动
    
    The following files are affected by updates. No changes have
    been downloaded, however, because the files have been modified
    locally:
    /etc/ssl/cert.pem
    (END) # 这里输入 q,确认变动,这里是发生变动的文件
    The following files will be removed as part of updating to
    15.0-RELEASE-p0:
    /.cshrc
    /.profile
    /boot/kernel/callout_test.ko
    /boot/kernel/geom_bde.ko
    /boot/kernel/geom_vinum.ko
    
    …………中间省略,这些是将被删除的文件………………
    
    /usr/share/examples/sound/sndstat_nv.c
    : # 这里输入 q,确认变动,直至没有新内容出现
    
    …………中间省略………………
    
    The following files will be added as part of updating to
    15.0-RELEASE-p0:
    /boot/firmware/iwm3160fw
    /boot/firmware/iwm3168fw
    /boot/firmware/iwm7260f
    
    …………中间省略这些是新增的文件………………
    
    /boot/kernel/nvmf_tcp.ko
    /boot/kernel/nvmf_transport.ko
    /boot/kernel/nvmft.ko
    /boot/kernel/p9fs.ko
    : # 这里输入 q,确认变动,直至没有新内容出现
    
    The following files will be updated as part of updating to
    15.0-RELEASE-p0:
    /COPYRIGHT
    /bin/[
    /bin/cat
    
    …………中间省略这些是新增的文件………………
    
    /bin/kenv
    /bin/kill
    /bin/link
    /bin/ln
    /bin/ls
    /bin/mkdir
    /bin/mv
    /bin/nproc
    To install the downloaded upgrades, run 'freebsd-update [options] install'.
    # freebsd-update install
    src component not installed, skipped
    Creating snapshot of existing boot environment... done.
    Installing updates...
    Kernel updates have been installed.  Please reboot and run
    'freebsd-update [options] install' again to finish installing updates.
    # freebsd-version -kru
    15.0-RELEASE
    14.3-RELEASE-p5
    14.3-RELEASE-p6
    # reboot
    # freebsd-update install
    src component not installed, skipped
    Creating snapshot of existing boot environment... done.
    Installing updates...
    Restarting sshd after upgrade
    Performing sanity check on sshd configuration.
    Stopping sshd.
    Waiting for PIDS: 906.
    Performing sanity check on sshd configuration.
    Starting sshd.
    
    Completing this upgrade requires removing old shared object files.
    Please rebuild all installed 3rd party software (e.g., programs
    installed from the ports tree) and then run
    'freebsd-update [options] install' again to finish installing updates.
    # pkg bootstrap -f
    The package management tool is not yet installed on your system.
    Do you want to fetch and install it now? [y/N]: y # 此处输入 y 后回车
    Bootstrapping pkg from pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/quarterly, please wait...
    Verifying signature with trusted certificate pkg.freebsd.org.2013102301... done
    Installing pkg-2.4.2...
    package pkg is already installed, forced install
    Extracting pkg-2.4.2: 100%
    # pkg upgrade
    Updating nju repository catalogue...
    Fetching meta.conf:   0%
    Fetching data.pkg: 100%    7 MiB   7.6MB/s    00:01    
    Processing entries: 100%
    nju repository update completed. 35765 packages processed.
    All repositories are up to date.
    Updating database digests format: 100%
    Checking for upgrades (215 candidates): 100%
    Processing candidates (215 candidates): 100%
    The following 223 package(s) will be affected (of 0 checked):
    
    New packages to be INSTALLED:
    	ceres-solver: 2.2.0_10
    
    …………中间省略………………
    
    The process will require 45 MiB more space.
    687 MiB to be downloaded.
    
    Proceed with this action? [y/N]:  # 此处输入 y 再回车即可
    
    …………中间省略………………
    
    Proceed with this action? [y/N]:  # 此处输入 y 再回车即可,可能会出现多次,下同
    # freebsd-update install
    src component not installed, skipped
    Creating snapshot of existing boot environment... done.
    Installing updates... done.
    # freebsd-version -kru
    15.0-RELEASE
    15.0-RELEASE
    15.0-RELEASE
    # efibootmgr -v
    Boot to FW : false
    BootCurrent: 0004
    BootOrder  : 0004, 0000, 0001, 0002, 0003
    +Boot0004* FreeBSD HD(1,GPT,f83a9e2f-bd87-11ef-95b7-000c29761cd2,0x28,0x82000)/File(\efi\freebsd\loader.efi) # 就是这条
                          nda0p1:/efi/freebsd/loader.efi (null)
     Boot0000* EFI VMware Virtual NVME Namespace (NSID 1) PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)/NVMe(0x1,00-00-00-00-00-00-00-00)
     Boot0001* EFI VMware Virtual IDE CDROM Drive (IDE 1:0) PciRoot(0x0)/Pci(0x7,0x1)/Ata(Secondary,Master,0x0)
     Boot0002* EFI Network PciRoot(0x0)/Pci(0x11,0x0)/Pci(0x1,0x0)/MAC(000c29761cd2,0x0)
     Boot0003* EFI Internal Shell (Unsupported option) MemoryMapped(0xb,0xbeb4d018,0xbf07e017)/FvFile(c57ad6b7-0515-40a8-9d21-551652854e37)
    
    
    Unreferenced Variables:
    **************************************************************
    **************************************************************
    *****                                                    *****   
    *****      BOOT LOADER IS TOO OLD, PLEASE UPGRADE.       *****
    *****                                                    *****
    **************************************************************
    ************************************************************** 
    # strings /boot/efi/efi/freebsd/loader.efi|grep FreeBSD|grep EFI
    DFreeBSD/amd64 EFI loader, Revision 1.1
    # strings /boot/loader.efi|grep FreeBSD|grep EFI
    DFreeBSD/amd64 EFI loader, Revision 3.0
    # cp /boot/loader.efi /boot/efi/efi/freebsd/
    # freebsd-update rollback
    # pkg bootstrap -f
    # pw groupadd ntpd -g 123
    # pw useradd ntpd -u 123 -g ntpd -h - -d /var/db/ntp -s /usr/sbin/nologin -c "NTP Daemon"
    # ntpdate -u pool.ntp.org
    root@ykla:/home/ykla # pkg # 输入 pkg  回车
    The package management tool is not yet installed on your system. # pkg 尚未安装
    Do you want to fetch and install it now? [y/N]: y # “你想下载安装吗?”请在这里输入 y 再按回车键即可安装
    Bootstrapping pkg from pkg+https://pkg.FreeBSD.org/FreeBSD:14:amd64/quarterly, please wait... # 观察此处,可发现默认调用的是 quarterly 分支的源
    Verifying signature with trusted certificate pkg.freebsd.org.2013102301... done
    Installing pkg-1.21.3...
    Extracting pkg-1.21.3: 100%
    pkg: not enough arguments # 这里报错提示没有参数,但是我们只是为了安装 pkg 本体,可以安心忽略
    Usage: pkg [-v] [-d] [-l] [-N] [-j <jail name or id>|-c <chroot path>|-r <rootdir>] [-C <configuration file>] [-R <repo config dir>] [-o var=value] [-4|-6] <command> [<args>]
    
    For more information on available commands and options see 'pkg help'.
    $ pkg ins chromium # 在普通用户权限下安装个浏览器看看
    pkg: Insufficient privileges to install packages
    $ su # 提升权限到 root,要求此普通用户在 wheel 组中
    Password: # 这里输入的是 root 账户密码!
    # pkg ins chromium # 再安装试试看!
    Updating FreeBSD repository catalogue...
    Fetching data.pkg: 100%   10 MiB 768.6kB/s    00:14    
    Processing entries: 100%
    FreeBSD repository update completed. 36822 packages processed.
    Updating FreeBSD-kmods repository catalogue...
    Fetching data.pkg: 100%   31 KiB  32.3kB/s    00:01    
    Processing entries: 100%
    FreeBSD-kmods repository update completed. 213 packages processed.
    All repositories are up to date.
    The following 6 package(s) will be affected (of 0 checked): # 有 6 个软件包将会受影响
    
    New packages to be INSTALLED:
            chromium: 142.0.7444.162 [FreeBSD]
            dconf: 0.49.0 [FreeBSD]
            harfbuzz-icu: 10.3.0 [FreeBSD]
            jsoncpp: 1.9.6_1 [FreeBSD]
            sndio: 1.10.0_1 [FreeBSD]
            speex: 1.2.1_1,1 [FreeBSD]
    
    Number of packages to be installed: 6
    
    The process will require 463 MiB more space.
    127 MiB to be downloaded.
    
    Proceed with this action? [y/N]: # 此处输入 y 再按回车键即可安装
    # pkg ins chromium
    Updating FreeBSD repository catalogue.
    Fetching meta.conf: 100%    179 B   0.2kB/s    00:01    
    Fetching data.pkg: 100%   10 MiB   2.7MB/s    00:04    
    Processing entries: 100%
    FreeBSD repository update completed. 36804 packages processed.
    Updating FreeBSD-kmods repository catalogue...
    FreeBSD-kmods repository is up to date.
    All repositories are up to date.
    pkg: No packages available to install matching 'chromium' have been found in the repositories
    # pkg upgrade
    # cd /usr/ports/ports-mgmt/pkg
    # make deinstall reinstall
    # pkg info
    # pkg install pkg_rmleaves
    # cd /usr/ports/ports-mgmt/pkg_rmleaves/
    # make deinstall
    root@ykla:~ # pkg delete -fa # 如果带上参数 f,会把 pkg 自己也删掉,因为 pkg 也是用户一开始自行安装的软件。
    Checking integrity... done (0 conflicting)
    Deinstallation has been requested for the following 87 packages (of 0 packages in the universe):
    
    Installed packages to be REMOVED:
    	alsa-lib: 1.2.12
    	brotli: 1.1.0,1
    	curl: 8.8.0
    ……省略一部分……
    	pcre2: 10.43
    	perl5: 5.36.3_1
    	pkg: 1.21.3   # 如果带上参数 f,就会把 pkg 自己也删掉,因为这个 pkg 也是用户一开始自行安装的软件。
    	png: 1.6.43
    	xorg-fonts-truetype: 7.7_1
    	xorgproto: 2024.1
    	zstd: 1.5.6
    
    Number of packages to be removed: 87
    
    The operation will free 825 MiB.
    
    Proceed with deinstalling packages? [y/N]: # 输入 y 按回车键就卸载了
    root@ykla:~ # pkg info -l xrdp
    xrdp-0.10.2_2,1:
    	/usr/local/bin/xrdp-dis
    	/usr/local/bin/xrdp-dumpfv1
    	/usr/local/bin/xrdp-genkeymap
    	/usr/local/bin/xrdp-keygen
    	/usr/local/bin/xrdp-sesadmin
    	/usr/local/bin/xrdp-sesrun
    	/usr/local/etc/pam.d/xrdp-sesman
    	/usr/local/etc/rc.d/xrdp
    	……省略一部分……
    # pkg install pkg-provides
    # cd /usr/ports/ports-mgmt/pkg-provides/ 
    # make install clean
    root@ykla:/home/ykla # pkg info -D pkg-provides
    pkg-provides-0.7.4:
    On install:
    In order to use the pkg-provides plugin you need to enable plugins in pkg.
    # 要使用 pkg-provides 插件,必须先在 pkg 中启用插件功能。
    
    To do this, uncomment the following lines in /usr/local/etc/pkg.conf file
    and add pkg-provides to the supported plugin list:
    # 方法是在 /usr/local/etc/pkg.conf 文件中取消以下行的注释,并将 pkg-provides 添加到支持的插件列表中:
    
    PKG_PLUGINS_DIR = "/usr/local/lib/pkg/";
    PKG_ENABLE_PLUGINS = true;
    PLUGINS [ provides ];
    # 插件配置示例,其中 provides 表示启用 pkg-provides 插件。
    
    After that run `pkg plugins' to see the plugins handled by pkg.
    # 设置完成后,运行 `pkg plugins` 查看已启用的插件。
    
    On upgrade:
    # 升级说明:
    
    To update the provides database run `pkg provides -u`.
    # 要更新 provides 数据库,运行 `pkg provides -u`。
    PKG_PLUGINS_DIR = "/usr/local/lib/pkg/";
    PKG_ENABLE_PLUGINS = true;
    PLUGINS [ provides ];
    root@ykla:/home/ykla # pkg plugins
    NAME       DESC                                          VERSION   
    provides   A plugin for querying which package provides a particular file 0.7.4     
    root@ykla:/home/ykla # 
    root@ykla:/home/ykla # pkg provides -u
    Fetching provides database: 100%   19 MiB   6.6MB/s    00:03    
    Extracting database....success
    root@ykla:/home/ykla # pkg provides libxcb-icccm.so.4
    Name    : xcb-util-wm-0.4.2
    Comment : Framework for window manager implementation
    Repo    : FreeBSD
    Filename: usr/local/lib/libxcb-icccm.so.4.0.0
              usr/local/lib/libxcb-icccm.so.4
    # pkg-static bootstrap -f
    # freebsd-update fetch
    # freebsd-update install
    # pkg-static update -f
    # pkg-static upgrade -f pkg
    # pkg-static delete -f pkg # 强制卸载当前的 pkg
    # cd /usr/ports/ports-mgmt/pkg # 切换目录
    # make BATCH=yes install clean # 使用 Ports 重新安装 pkg
    [1/1] Installing package…
    ===> Creating groups.
    Creating group ‘package’ with gid ‘000’.
    ===> Creating users
    Creating user ‘package’ with uid ‘000’.
    pw: user ‘package’ disappeared during update
    pkg: PRE-INSTALL script failed
    # /usr/sbin/pwd_mkdb -p /etc/master.passwd
    # pkg install bsdadminscripts2
    # cd /usr/ports/ports-mgmt/bsdadminscripts2/ 
    # make install clean
    # pkg_libchk
    doxygen-1.9.6_1,2: /usr/local/bin/doxygen misses libmd.so.6
    jbig2dec-0.20_1: /usr/local/bin/jbig2dec misses libmd.so.6
    jbig2dec-0.20_1: /usr/local/lib/libjbig2dec.so misses libmd.so.6
    root@ykla:/ # pkg_validate
    FreeBSD-pkg-bootstrap-15.snap20241004232339: checksum mismatch for /etc/pkg/FreeBSD.conf
    FreeBSD-runtime-15.snap20241004232339: checksum mismatch for /etc/group
    FreeBSD-runtime-15.snap20241004232339: checksum mismatch for /etc/master.passwd
    @ykla:/usr/ports # pkg_version -ql\<
    akonadi-23.08.5_1
    build2-0.17.0
    chromium-128.0.6613.137
    Newer FreeBSD version for package pkg:
    To ignore this error set IGNORE_OSVERSION=yes
    - package: 1402843
    - running kernel: 1400042
    Ignore the mismatch and continue? [y/N]:
    然后我就往村北走,那边还是没有拆迁前的旧村。我发现有户人家,门口有个类似门铃的黄色方块,我刚想进去看看,发现狗在叫,就算了。

    我接下来又梦见 FreeBSD 机构就在我住的村的村东边,但是我在现实中前几天刚去过,都拆迁了,一片空,除了废土堆和垃圾,什么也没有。

    然后我去了村西边,按理来说应该也是空无一人,但是竟然有很多穿着或红色或褐色的百褶裙的女学生倚靠着自行车在那里说话,非常热闹的样子。

    在梦里,我在 2015 年收到了一封来自山东的信和一万六千多块钱。信封上写同时写着隐私号码和我的真实的电话号码。信上我地址的最后是 302。信来自 FreeBSD 中国的最后维护者。他说收到的捐款最大只有 10 块钱。信里有本发货日志,最后一页记载着是给我发的这封信,他花了 302 块钱。他说他维护不了了,希望我继续下去。还有一本介绍 UNIX 的书。

    信没有拆完,接连来了两个基本上没有事的电话把我叫醒了。

    醒来,我打开了 Excel 收集表看了看,发现还是只有我自己写的那一行示例问题。看通话记录只有一个电话。

    2015 年是我初次接触 FreeBSD。当时 FreeBSD 有 bug,启动盘在 UEFI 下,HD 4000 显卡会花屏,我始终无法进入安装过程。由此搁置了三四年。光阴荏苒,至今已然十年了。

    第二段梦

    我梦见自己在一所大学毕业了。好像之前参加了某种安全比赛,我还用偷袭的方式击败敌人,最终获得了第二名,还有一张奖状。

    毕业后,我从教室里收拾好东西准备出去“野”一趟。我骑车从学校的南门出去,一路顺风。途中看见了一个玩的特别好的小学男同学在奔跑,我就跟着他,来到了一个像是水上乐园的地方。水流速不快,但我很快就看不见他了,于是我决定骑车往回走。

    在返回的路上,我遇见一位大娘,她正烤着一只猫。那只猫似乎头和前爪都受了伤,后半身被锡纸包裹着,不知道她是在给猫治疗还是想吃猫。她堵在出口,我心里很着急,只能从别的出口绕出去。结果不只是我,后面还有一群人也跟着我一起出来了。

    中间好像有什么集市,我不断地从一群又一群卖衣服的衣服帷幕中穿梭来回。

    我出来后,来到了学校的南门,却听说现在不让进了。有人说可以从西边的华西医院研究所那边进去。可我刚走到半路,又听说从研究所那边进更难——但是又听说什么学校搬迁到这个地方一直可以从西边绕过来,兄弟院校管理问题,无能为力,我以为可以混进来。但是到了研究所果然被挡住了,所有人都在过街天桥上进入研究院,还要查什么证件,我只好返回学校正门。

    我找了一个地方靠边把自行车停好,这才发现自己没穿鞋。我从衣服口袋里掏出鞋穿上。校门口围了很多人,大家都晚归被阻拦了,有个是领导的人,在批斗前面想溜进去的同学。我等了好久,看见校门快关了,便跑过去小声对领导说我今天毕业,还有点事。领导说:“这点事都办不明白,快进去。”我又跟门卫说:“那你们待会儿把我放出来。”门卫怕担责任,我说:“有事找刚才那位领导。”我好像是要回宿舍找东西或者等人。到此就结束了梦境。

    第三段梦

    我和同学正在路上走,他捡到了一个金属探测仪,就是考试用的那种,但外形特别诡异,像奥特曼中的变身器。他说要去厕所,我们便走进了一座类似大型商场的建筑。我们一起进了厕所,厕所很大,人很多。他把探测仪给了我,等拿到手才发现它确实特别沉。我一回头他人就消失在人海中。我返回到街道上,在建筑的大门口拿着金属探测仪等他。

    突然,响起了一阵喧嚣俗气的音乐。我从西门到了北边的大道上,发现有几个染着浅黄色头发的人骑着摩托车从远处过来,他们嘴里各自咬着一个喷火的东西,形状像玻璃管,却不断喷出火焰,并且火苗一个比一个喷得高,可他们似乎一点也不怕烫,咬住不松口。一共过去了四五个。

    最后出现了一个类似坦克的机甲。原本人们在围观,但它突然开始四处攻击。我赶紧躲进商场里远远看着。机甲见外面无人,竟然径直冲进了商场。我想去厕所找我的同学,一路喊他的名字,却没有回应。有人答应了我,但我发现根本不是他。

    于是我往建筑的北门跑,北边是座过街天桥。刚跑上去就发现前面是断层,不能通行,我只好赶紧折返,和后面的人说别往前走了,是断头路。回到北门口,就在这时,有许多人押着一个戴着纸面具的人从我旁边走过,而那正是机甲的驾驶人。

    我想回家了,却发现自己原本穿的黄色上衣不见了,上身没有衣服,金属探测仪也弄丢了。我四处寻找却找不到,只能返回公交站点。站牌前面有家小超市,我看到有黄色的东西在那,我的衣服就掉在地上,我赶紧捡起来穿上了。

    我问店里的人有没有看到一个外观蓝色、形状奇怪的东西。她问是不是金属探测仪。我说是,那正是我弄丢的。她便把它还给了我。


    由于没人帮助合并提交,哪怕 Port 一款软件了也没意义只能无限期搁置(已经这样很多次了)。中文社区没有自己的提交者。FreeBSD 可能已经死了,目前只是在腐烂。上游的基金会,社区,期刊都严重缺乏时间感——或者说根本就是没有,看起来做一些外围工作意义不大。整个社区也处于停滞状态。无论是上游社区还是下游的。所有邮件列表都没有存在的意义,要么塞满了 bug 报告,要么没有任何信息。另外提交者本身也不会管邮件列表。Bug 报告只是简单地被转发到邮件列表。同样无意义,永远不会被分配到具体一个人。下游社区(包括我们中文社区本身)有任何 bug 也不会报告。他还在那苦苦地移植一个打不开的 gdm47——恐怕他自己也不知道打不开,如果我还没有报告的话。FreeBSD 已经无法拥有做出任何改进的可能了。FreeBSD 最终会和沙漠里的胡杨树那样,生而千年不死,死而千年不倒,倒而千年不朽。

    我意识到,人只有在活着的时候才能意识到自己活着。这说明,如果要永生,只需要把始终活着的概念永恒加于一个活着的人,则其必然是永生的。而这和这个人本人是否活着没有依赖关系,这和生理状态也是无关的,比如可以意识上传互联网之类的。人格同一性等问题暂且搁置不论。而且我们不必然的证明:明确只有活着才有意识,即是活着产生了意识,还是意识使我们活着,因为这在实验上目前是无法得证的。所以,我这种说法,是有可能性的。我们总是不言自明地认为,我们的世界的物质性来自实践,却不考虑实践本身物质性是否合法。看起来是我们做了一些实践去改造了所谓的环境。但是有没有一种可能,这些都是被预定的?并且这也证明不了实践和人类本身的物质属性。所以啊,有没有这样一种可能,FreeBSD 根本不存在?

    看起来有很多时间,其实没有太多,如果不立刻去做,那么机会的确,在大多数情况下,都还是会有的,但是已经没有再做的动机和环境了。但是即使立刻去做了,一切也只是冗长的省略号罢了。一切真正重要的东西往往没有经过多么地周全考虑便下决断,而一切细枝末节的东西总是看了又看。事实上一切的机会都有无数次,但是真正愿意做的次数是不多的。什么是重要的东西,什么是不重要的东西?如果一切都是不重要的东西,剩下的也不会是重要的东西。一切回退到原点,无论多少次,大抵也是如此。看起来仍然可以对一些所谓的重要的事情做出改变,但最后的决定无可避免地又会重复之前的一切,换言之,即使选择了新世界,旧世界的一切都值得被否定吗?否定之后,注定会再重现当次的选择与前次的否定。记忆是一次也不能重复的河流,河流的确还在,两岸也的确还在,但是船和渡船的人都变了。也许永远无法证明记忆本身的存在是否是属于当下人格的,总是盲目地信任这份记忆属于自己,并认为自己必定是失去了一些可能的存在,在多大程度上来说,是能自洽的?或者说,可能是真正属于自己的而不是旁人臆造的?

    所有人都在引用南宋刘过《唐多令·芦叶满汀洲》“欲买桂花同载酒,终不似,少年游。”来强调些什么。但是,他们忽略的一点是:很多时候绝不是没有机会或条件——只要人还活着,而是你自己有没有心愿去实现。如果你真的愿意和你的几个朋友在一起再去做些什么,我想,在大多数情况下,你只需要支付他们一些工资和路费即可,这也并不是什么多么苛刻的条件,难道不是吗?正如你现在不会去找你小学一年级的时候在路边卖鸡蛋灌饼的大妈一样,即使你认为从此以后再也没有吃过这种味道了,你也不会花费一丝功夫和气力去寻找她,而找到她也并不需要多么大的尝试和经济付出。

    有人会强调“会者定离”,以图诠释人与人的关系是动态的,取决于我们的经济、物质、年龄、价值观、住所距离的变化。这很正确,也很现实,但不是人们希望的那样。现在的互联网技术如此先进,人们之间的距离却达到了史上最遥远的距离。你现在甚至可以和太空的宇航员通话,却找不到你的朋友,你说距离太远了,这不显得荒谬吗?

    一切真正重要的东西往往没有经过多么地周全考虑便下决断,而一切细枝末节的东西总是看了又看。

    事实上一切的机会都有无数次,但是真正愿意做的次数是不多的。什么是重要的东西,什么是不重要的东西?如果一切都是不重要的东西,剩下的也不会是重要的东西。一切回退到原点,无论多少次,大抵也是如此。看起来仍然可以对一些所谓的重要的事情做出改变,但最后的决定无可避免地又会重复之前的一切,换言之,即使选择了新世界,旧世界的一切都值得被否定吗?否定之后,注定会再重现当次的选择与前次的否定。

    “终不似,少年游”究竟是不似还是不愿。还是我们根本囿于了世界,成为其一部分而不愿改变?少年被现代工业文明规训为绝对精神的一部分,放弃了其所有的主体性,被异化为所有历史合力的一份子,仅此而已。

    受益于 GitHub 的千年计划和互联网档案馆等项目,一千年后的人们也可能会看到这些文字。如果人类文明还存在的话。其实在互联网上最孤独的是,你发现你的疑惑别人早就在几年前,几十年前提到过了,但是,没有人解决,甚至无人回复。FreeBSD 项目、基金会和社区的问题都很多很大,这也是现实,他使所有人都成为了局外人,不过大部分人其实并不关心这些。做点抽象视频建个群大家一起玩也没什么意思,没人会陪你玩的。社区也是根本不存在的东西。只是少数人的贡献努力以及相对广泛而罕有的真实用户的稀有反馈。就算你每个人每天发 10 块钱 100 块也没人会陪你的。

    不知道读者是否观看过《我们仍未知道那天所看见的花的名字。》?里面男主仁太的伙伴为什么难以再和仁太在一起了,仅仅是因为男主放弃升学了吗?我们大部分人的非工作群里就现在就只有仅仅几个人还在发言,只是因为我们有时间他们没有吗?他们比特朗普忙吗?特朗普还能每天发几十上百推特。他只是不在这里说话而已。而且退一步假定他比特朗普忙,他忙碌的意义是什么?大部分人只是活着就已经很困难了。你会发现,是的,确有一种无形的存在挡在我们之间。这种东西,就是黑格尔所描述的绝对精神。有人说,你完全可以不上学,逃学,没有人绑着你。这种萨特式的绝对自由是不存在的,萨特本人在晚年也意识到了这一点。或者说,是我们自己放弃了可能性,而这也不是我们自己的决定,而是绝对精神的理性决定的,但是,归根结底,这二者又是一致的,又的确是我们自己的决定。但是事情果真如此吗?在《圣经》中的上帝用大东风分开了红海(出 14:21),而我们也和以往的朋友被这看不见的风所隔开了,唯中间是我们的道,而人间的道通往何方,无人知晓。人行大道,号为道士,大道难行矣。

    想带动所有人提高自己的水平进而促进整个 FreeBSD 项目的发展的计划与目标,在这个年代,存在的支撑还不足。很多人上班一天已经只能刷手机了,你让他起来锻炼是不可能的。不是锻炼了才有精力,而是有精力了才能锻炼。而那些相对有时间的学生,年轻群体,已经和这个地方直接说拜拜了。自由软件与开源运动被狭隘地曲解为 GNU/Linux 的历史。

    这也不是中国独有的问题,我在韩国一个社区也说了很多,浏览了列在 FreeBSD.org 上日本印度俄罗斯南非等地区的 FreeBSD 社区。衰退势不可遏。

    其实笔者看到了一些基督教敬拜团,也存在同样的问题。但是他们以巨大的毅力维持着,即使每个视频没有任何回复,总观看量也没有 B 站随便搬运一个视频来得高,即使他们的歌曲改编地的确很完美,其他各个方面也不算差。或许他们有一些赞助但是笔者并不清楚。其实笔者本人并不持有这种宗教信仰,但是大家所作的事情并没有多大区别。但是我对这方面的热忱显然并不如他们。他们当中,在这方面甚至下了大力气去出版拼音版本的《圣经》。这是我远远不能做到的程度,无关信仰。

    在《BanG Dream! It's MyGO!!!!!》中,我感觉爽世(素世)的行动力还是不够强,按理说祥子父亲投资失败的事情虽然新闻并未报道,但是爽世母亲应该会知道。或者查查投资者报告。而且祥子的目的是出道盈利,要求将业余转为专业。但是我并未在二者间看到张力,重组 CRYCHIC 就和未闻花名重组“超和平 Busters”是一样的。秩序发生了变化,人们的联系就会变化。说到底,不是要重组谁,也不是一定就需要原来的那些人,而是想回到事物本身,回到最开始的物质条件,经济水平、社会关系等等秩序。要重组的从来都不是一个团体,一家人,一个组织,一个项目。而是他们所构成的文化与秩序和规则。随着人的社会化的加深,其核心关系就会被转移到其他地方,转到他被异化最深入的那个团体。其自由时间完全地被转移了,即使是脱离了,也会被其他团队的文化产品或其他产品所异化。每代人的村庄都是不一样的,你说村庄变了,可应该说的是,这里曾经没有任何村庄,无论过去,现在还是将来。我从未想过回到哪个地方,或者哪年。很多人都说想回到哪一年。但是,即使是回去了,也无力阻止这种浸染。简单的道理是我们不拥有任何生产资料,除了劳动力一无所有。但是这也只是表面看上去是这样,这无法解释其必然性。唯一合理的解释只可能是,这个世界存在一种推动力,一种有主体性的存在,在推动着其偶然性成为必然性,因为对于任何人都是偶然的事件,是如何成为必然的?对于大部分人生存本身并非难事。差异是深层需求。但是将其视为必然性,就必然地有一种动力在推动,它绝不是经济性的物质性的。

    我觉得问题不在于解释世界和改造世界,而在于证明世界,我们在行动之前必须先使世界生成,发现什么是世界,其是否真正存在。而这往往被视为一种形式主义。可是如果不假思索就认定世界的真实性,就开始所谓的解释和改造,不仅是一种形式主义,更是一种掩耳盗钟,并且会天然地陷入某种结构的合理性中不可自拔。以往的观点是认识自己,进而推论到认识他人及世界。问题在于,这些,包括自己存在的可能性从未被纳入过考量。若只是以能看见就等同于可被理解,可认识,用实践代替生成,这才是一种真正的形式主义,用形式代替了真正的存在,并用实践产生的理论来覆盖真实的合理性,这只能是一种虚假的观点,并且是经验主义或实证主义的态度。这种假象不应该简单地将其理解为思想懒惰,而是因为有一些预设,我们的确能感受到有自己的身体和身体以外的东西存在,问题在于,我们感受不到我们自己和身体以外那些我们看不到的东西的存在。而且证明本身又何尝不是一种存在预设和前理解的存在?语言文字逻辑都是以世界存在为基础来生成的,妄图通过他们来否定世界的生成,是根本上就预设了必然性的。问题不在于我们回到哪里,也不在于如何解释和改造什么,而在于我们是谁?从哪来?又要到哪里去。

    感觉找不到好玩的东西,没有什么乐趣。以前装个系统能玩好几天,现在像一个锤子,看什么都是钉子。当你想改变一种结构的时候你就已经是这种结构的一部分了,改变已经是不可能的。和这种结构对话是不可能的,它已经内部自洽了。说到底还是权力是集中的,但是互联网是去中心化的。他开放rsync 只是几分钟的事情。但是让他理解到必要性是困难的。知难行易所以行也难了。破山中贼易,破心中贼难。(《王阳明全集·卷四·文录一·与杨仕德薛尚谦书》)。你可以用数据和安全手段向他说明好处和项目优先级。但是问题不在这。Linux 的发展是靠不断地革命与彻底否定或者说在其基础上再发展,BSD 这里只是不断地改革。改革的困难远高于革命,但的确带来了稳定和好处。很难评价,但现实要求改变。

    再版前言:回到复制粘贴,面向教程本身

    引用一:

    本书 <注 ①> 注重例子,少理论,只要你对这 <着> 例子一步一步操作,就会成功,会让你有成就感并能坚持学下去,因为很多人遇到障碍就会放弃,其实我就是这种人,只要让他看到希望,就能坚持下去。(这段话出自 Netkiller FreeBSD 手札,作者陈景峰)

    注 ①:指《Netkiller FreeBSD 手札》

    引用二:

    群里有人发过《道德经》中的这段话:“有道无术,术尚可求;有术无道,止于术。”<注 ②> 诗无达诂,对此类经典,每人都可能有不同的解释。但我想借此告诉你:要尽力去探求每个操作背后的含义,这样才能举一反三,而不是学会了装某个桌面之后又去找人问怎么装另一个桌面。这也是本教程不提供可以直接复制粘贴的命令的原因。有所探求,得之其道,从而长进。(这段话出自 写给 FreeBSD 新人,作者 Alex11)

    注 ②:此处引用的原文有讹。查《道德经》并无此语或类似含义。实出小说《遥远的救世主》(ISBN 9787506331746)第 三十六章,作家出版社,2005,作者豆豆。对应改编的电视剧《天道》第 18 集第 42 分钟后的 删减片段。但在郭德纲相声中也反复出现类似“艺、术”的内容:“有艺无术是诈骗,有术无艺的是商贩。”(画质比较清楚的视频是 德云社师徒父子相声大典上海站 2018《笑傲江湖》,从第 1:07:00 开始)从作品创作年代及出版地看,“有道无术,术尚可求;有术无道,止于术。”这几句话有可能受了郭德纲的影响。


    上面两段话体现了解释学循环的难点:要想理解局部,必须理解整体;要想理解整体,必须理解局部。而前见又是必然的。我们总是基于一定的理论假设与个人意见于其中。但这不必然是负面的,相反前见是不可或缺的。试问,你将如何向一个人解释为什么手机屏幕坏了,但是对屏幕的截图仍然是完整的?这和碎镜子同人的关系是一致的吗?

    绝大多数古希腊哲学家认为流变的事物是不真实的。如果一切都变来变去,会不会下一刻整个世界就没有了?甚至认为现实世界只是真实世界的投影罢了。故而始终追求着那不变的本原与理念世界。始终在追寻着那不变的太一。康德认为理应存在有一个物自体。我们能看到的只是事物的一个侧面,事物的真实样貌,我们永远无法经验。事物果真就同我们看到的那样真实吗?笛卡尔的恶魔假设真的只是假设吗?

    胡塞尔的现象学强调“回到事物本身”(Zurück zu den Sachen selbst),而不是“回到康德”。现象学研究一切的原则之原则即直观。悬搁一切传统哲学思考、意见与前见。在其自身被给予性中追问事物,即主张无前提性。呈现出来的事物本身是何面貌就是何面貌。现象学认为你看到了什么,那就是什么,就是事物的本质,为何要假设一个永远也经验不到的、不存在的逻辑本体。胡塞尔无疑将笛卡尔的清楚明白(Clarté et distinction)原则更彻底地推进了一步。其学生海德格尔主张“面向事情本身”(Zu den Sachen selbst),他是个反叛的学生,承认前提是我们揭示现象的必要之物。

    “人不独亲其亲,不独子其子,使老有所终,壮有所用,幼有所长,鳏寡孤独废疾者皆有所养,男有分,女有归。”《礼运大同篇》对孔子的名正思想进行了发挥。“文艺工作者要有文化,当医生的要会医术,游泳运动员要会游泳”,我经常看到有人用这种看似语义重复的“废话”来进行讽刺。事实上,让事物回到事物本身并非易事。“天下多忌讳,而民弥贫;人多利器,国家滋昏;人多伎巧,奇物滋起;法令滋彰,盗贼多有”(帛书《老子》第二十章)我们看到了太多的“垃圾桶里不能有垃圾,街道上的招牌必须统一格式不能引人注目,床上不能躺人”的规定。同时我们也注意到,在大量的理工科教科书,无论中外,总是充斥着各种炫技(由 xxx 可得、易证)和防御性证明(注意到、显然),甚至作者本人都不会做印刷在他书中的练习题。

    然而事实是,计算机科学作为一种科学,是基于经验主义的。如果真的仅从超越于计算机本身之上的理论上进行研究,计算机科学存在的合法性会被消解掉——这个世界果真存在吗?研究这些真的有意义吗?如果就连快乐本身也是不存在的呢?我们中的绝大部分人不会涉足计算机相关的科学研究,也不会在英特尔、AMD 这些公司工作,更难取得相关的博士文凭。满足于复制粘贴的快乐真的是一种过错吗?有多少人愿意接受洞穴外太阳的照射?苏格拉底强调德性的重要性,并一再强调“认识你自己”,可苏格拉底是被雅典公民投票投没的。其实大部分所谓的理论也不过是另一种可以复制粘贴的内容。你可以将 C 语言追溯到汇编,再到处理器指令,信号与系统,计算机体系结构,CPU 设计,物理学,数学。然后呢?到数学真的就结束了吗?科学与数学从不,且也无法研究本质,科学仅仅研究现象。换言之,科学中本不存在所谓“道”,只有“术”。若你仅仅满足于此,那不过也只是苦难哲学罢了。庄子在《南华经》中就说明了这一点——“吾生也有涯,而知也无涯。以有涯随无涯,殆已!”人们真的能拥有知识而不是意见吗?苏格拉底是反对的。

    事实上,若强行从《老子》中抽象出“道”与“术”,你会发现二者并不矛盾亦难分高下。你从后辈道人的作品也能看出来,看过《仙剑奇侠传》的人应该对《太上洞玄灵宝无量度人上品妙经》这几句话并不陌生:“人道眇眇,仙道莽莽。鬼道乐兮,当人生门。天道贵生,鬼道贵终。仙道常自吉,鬼道常自凶。高上清灵爽,悲歌朗太空。惟愿仙道成,不欲人道穷。”人道渺茫有归处,而仙道不知所归。难道仙道会比人道高深到哪里去吗?电视剧《士兵突击》(第三集开头)中,李梦说“光荣在于平淡,艰巨在于漫长”。“道”并非是对“术”的简单否定,其实是又一阶段的“术”。“究竟谁能说得清,道路向何方延伸?又要谁能说清,日子向何方流逝?”恩雅的回答是“Only Time”。冯·诺依曼说“If people do not believe that mathematics is simple, it is only because they do not realize how complicated life is.(如果有人不相信数学是简单的,那是因为他们没有意识到人生有多复杂)”可见平凡的人生是难理解,最难渡过的存在。的确,复制粘贴,人人都可以做,而问题在于,究竟谁做了?我们需要有人复制粘贴:人人都想当医生,那大街上的垃圾谁去清理,谁去扫大街?而垃圾总是存在的,总是需要清理的——不能因为你把街道上的垃圾桶藏起来了就骗自己说没有垃圾,那样只会把所有地方都变成垃圾桶。“玻璃晴朗,桔子辉煌。”现在的学院研究学者,把康德研究的比康德本人都要“清楚明白”,其著作更是康德本人著作量的万倍还不止。但是这当中究竟有几个人能留名于哲学史?有哪几个人的哪几本著作,超越了康德本人的批判理论?他们都在复制粘贴罢了。你难道指望人人如龙,每个人都是柏拉图、亚里士多德、康德、黑格尔、马克思吗?这是可能的吗?如果没有超越于他们,你同复制粘贴亦无任何区别。然而,这些工作真的是毫无意义的吗?我看到了太多粗制滥造的哲学史教程,对经典文献的人名翻译都是错误的。没有人能够站出来写一本大家都能看懂的书。有多少人在二十年前就说要完成某某书籍的翻译或创作,我至今也不知道他申请的 CIP 和 ISBN 是多少。难道每个人都是佛陀,可以无师自通顿悟大道吗?还是说每个人都是维特根斯坦,不需要看哲学史也能成为哲学家吗?

    韩愈认为自己是儒家道统的正统继承人,一生旨在复兴儒学,排抑佛老。《师说》也不例外:韩愈以师道为手段希望培养能够弘扬儒道的士大夫,以期重振儒学。所谓“道之所存,师之所存也”。然而真正的问题在于,“师道”是可能的吗?教育是可能的吗?启蒙与现代化是可能的吗?事实证明,这是不可能的。很多人看似在追求所谓道,但是对科学的认识在根本上确是错得离谱,也不愿挣脱洞穴的枷锁。真理的确似太阳,问题在于,我们始终都在洞穴中。自以为在洞穴外的人仍然处在另一处洞穴中。坦白讲,我不知道。“知之为知之,不知为不知,是知也。”我的确不知道,我也不想知道,我只需要快乐。很显然,《师说》中“是故弟子不必不如师,师不必贤于弟子,闻道有先后,术业有专攻,如是而已。”看似是对论语中“三人行,必有我师焉”的具体发挥。但是实际上,哪怕韩愈一生抨击佛法,但是这几句话却明显受了禅宗思想的影响,在佛法中时常有此讨论:这也是宗教和思想政治教育的明显差异,弟子和师父面对神时都是相同的地位,是共同学习的身份。

    “你的眼目要向前正看,你的眼睛当向前直观。要修平你脚下的路,坚定你一切的道。不可偏向左右,要使你的脚离开邪恶。”(箴言 4:25-27)“所以,凡他们所吩咐你们的,你们都要谨守遵行,但不要效法他们的行为;因为他们能说,不能行。”(马太福音 23:3)“凭着他们的果子,就可以认出他们来。荆棘上岂能摘葡萄呢?蒺藜里岂能摘无花果呢?”(马太福音 7:16-17)“是以圣人居无为之事,行不言之教。”(帛书《老子》第四十六章)我请问,如果自诩 FreeBSD 社区,所有成员每日都在进行空谈,这不也是一件快乐的事情吗?

    与绝大多数操作系统不同,BSD 既提供了二进制包供用户快速安装,亦提供了源代码的方式来供用户自定义配置。古今两种思潮汇聚于此。如果有人既悬置道,也悬置术——正如此篇文章一样。很难想象他该有多么快乐呐!在现在的时代里,快乐是极难获得的。睁眼看看这个世界,有哪一点是能够让人满足的?郭德纲都说这年头花钱能买个高兴已经是不易了。“一切希望都带着注释,一切信仰都带着呻吟”这个世界真的会变好吗?“梁漱溟之问”深深困扰着几代学者。FreeBSD 真的会变好吗?我真的会变好吗?深深困扰着我。

    其实无论你怎样解读道家或《老子》,都难免被那一抹消极的哀彩抚摸。这个世界存在的真实性与否也不能掩盖她的恶。城市化和工业化使得一代又一代的人失去他们的家园。其实没有什么复杂的,过于复杂的理论除了让自己失去传人外没有任何好处,这点在中国佛教史上体现的很明确。“想不明白的不要想,弄不清楚的不要弄,做不出来的不要做”:回归自然,回到简朴的社会是道德经反复陈述的箴言。我们看到了什么,那就是什么,即使他背后可能有更大的存在,你也无法否认,我们看到的事物,她就是如此。在现代社会里,几乎所有人都在无穷地重现昨日。回到复制粘贴,就是回到这种简单的三点一线乃至两点一线的琐碎生活。

    一个显而易见的事实是,绝大部分人搜索教程,查找方案并不是为了什么追求真理或满足好奇心,而是为了谋生罢了。你所追求的真理早在面试的时候被你背的 Java 八股文和你在平台上刷的无穷的算法题目所覆写了。这些真的有意思,有意义,有乐趣吗?说这些我都觉得好笑和荒唐。如今抬头看看天,除了塔吊的灯和雾霾以及脚下的坑,绝没有星星。郭德纲说:“先搞笑吧,相声要是不搞笑,那就太搞笑了!”先复制粘贴吧,要是连复制粘贴都没人做,那就更是一片空白了!

    初版前言:好望角与塔吊

    FreeBSD 是一款开源的类 UNIX 操作系统,直接继承自 BSD UNIX。被广泛应用于苹果产品,车机 QNX 系统,奈飞网络等等。

    自 2002 年 9 月后,中文世界就再也没有一本 FreeBSD 的入门和基础教程了。知网上的硕博论文(需要说明的是,许多大学如清华大学、复旦大学等,并不会将其硕博论文上传到知网,但这仍说明了一种趋势),有关 FreeBSD 的也只有区区 10 篇,均为硕士论文;而 Linux 则有 2 万余篇,百余篇博士论文。在国内招聘网站上也找不到任何 FreeBSD 有关的工作岗位,学校也不会开设相关课程。看起来市场完全不需要了,是这样吗?

    当初那些推广宣传 FreeBSD 的人,如今在哪里?是否还会偶尔访问一下 https://freebsd.org 呢?水木年华的《一生有你》中唱道,“多少人曾爱慕你年轻时的容颜/可知谁愿承受岁月无情的变迁/多少人曾在你生命中来了又还/可知一生有你我都陪在你身边”。只有与你同行的才是你的朋友,无论在先,还是在后,都会被遗忘。

    这个世界的确很大,但是对于大部分人,穷极一生也不会到达非洲的好望角。受墨卡托投影法的限制,人们意识不到非洲有多么广阔。人们只觉得俄罗斯很大,格陵兰岛更大。事实上,二者加起来,哪怕再加上中国都远不足非洲面积的三分之二。这个世界果真很大,就像开源世界一样;面对头顶无垠的星空,人们是会选择继续抬头前行,掉进泥沼;还是低头用忙碌充实自己?有的人可能一辈子都住在乡村里,从未出过几次远门,但这并不妨碍人们了解他那深邃的思想世界。即使人们完全没有能力读懂他,也会每年去纪念。世界的确很大,大到穷极一生也无法到达。世界真的很小,小到每天来来回回却连镇子都没有踏出一步。我们的好望角究竟在哪里?世界越大,世界也就越小。

    自我接触 FreeBSD 至今亦 7 年有余。我从未直接对 FreeBSD 项目做出任何贡献,没有向 src 提交过任何代码。但我已经尽最大程度去延续我的敝帚自珍。

    之所以将这一系列教程和文章作为一本开源书籍来呈现,根本上是因为:我希望此书能像 BSD 一样得到最大程度上的使用,产生最广泛的利益。

    法国哲学家让-保罗·萨特认为,存在先于本质(参见《存在主义是一种人道主义》);君子不器,人的存在没有固定本质,人的本质是动态地建构于实践中的。很明显,现在大多数人也是这么想的,人要去创造意义,才能同时获得意义。看起来似乎是对意义问题的终极回答了。那么,事实果真如此吗?萨特早年认为人的自由是绝对无限的,不承认任何所谓客观限制。我可以做,但我还没有做,因为我还没有找到做此事之意义。

    现在想起来,刘震云《一句顶一万句》中有个角色叫“老詹”,从意大利到中国来传教,结果传教没成效,成了卖葱的;当中还有一个角色叫“老汪”,时常不知道在走些什么,就一直四处乱走。在这个世界中,我们除了安慰自己这已经是可能世界中最善的那个,已经是上帝的全能意志的体现,还有什么借口,说这个世界的美好?我时常乱走,我不认识任何人。就像在看 VR 电影一样。这个世界会不会是场电影?我们除了是自我感知意识的集合体以外,和电影中的人有什么区别?我在一场影像的放映之中,我并不存在。这个幼儿园的墙壁摸起来很粗糙,看起来是黄色的,敲击发现很硬。但不是无中生有。是有工人搭建如此。但这和这一切是场电影并不冲突。仔细想来,是谁让我看到的围栏?是谁让我摸了一下这根柱子。真的没有人吗?有一个原因可以解释吗?我有不去摸的自由吗?我真的有自由不去摸这根硬的粗糙的黄色的柱子吗?为什么我到处彳亍,仍旧回到了原点?

    除了疾病外我一无所有。生命真的存在吗?正如加缪所说的那样,我一直是个局外人。我却用《庄子·山木》中的“君子之交淡如水”慰藉自己。我十几年前常去的图书批发市场,它还在,它也不在了,我再也找不到教辅书以外的任何书籍了;当初和我一起看书的人,他还在,他也不在了,我再也和他说不上话了。也许二者根本就从未存在过,只是我看过的一段电影罢了。电影结束后,剧组也就该解散了。我当时还在和众人打《三国杀》,不知道是谁丢的铁盒,塑封的三国杀。最后我赢了。我以为以后还会有很多如此快乐的日子,但是那却是结束。我再也找不到能凑齐的人去打三国杀了。无论线上还是线下。甚至 2V2 都找不到人。胜地不常,盛筵难再;兰亭已矣,梓泽丘墟。我已经很久很久没有玩过三国杀了。

    我可能这辈子也无法去 BSD 的诞生地求学,甚至看一眼都是不可能的。我也永永远远无法获取他们要求的哲学博士学位。我的好望角在哪,它真的存在吗?如今,我抬头除了一片雾霾,什么也望不到。我以为是月亮,结果发现那是塔吊的照射灯。

    存在即破烂。再美好的东西,也只是一堆破烂。很多美好的东西即使再用心去推广宣传也终究消逝。所有的开源项目迟早都会变成数字墓地,后遂无问津者。

    事实是,每天都会和无数人错过。北岛诗言“一切交往都是初逢”。即使是认识的人。也会永远离开,我这个意思不是说人死了。而是比如像群里的群友,他就不说话了,等于死了,没区别,你找回来他说话,也没有意义。第一你不想这么干,第二他不想这么干。所有人在一起不都是短暂的几年?对于实际意义来说,不说话就是死了。只有能说的上话的,对于自己来说才算活人。和这个人生理健康无关。这种死人遍地都是,我们不是一直活在墓地之上吗?聊天群也会消失变不见,人还在,群没了,再拉回来也是死人。他把你们用的聊天软件都卸载了,你即使舔过去和他用一样的,也没什么用。所有聊天群都迟早变成数字坟茔。没意思啊,现实和群就是吹牛。什么也留不下,现实也一样。截图不就是赛博合照吗,没区别。这世界很大吗?为什么感觉这么小。没意思啊,无论群还是现实就是吹牛。和你待的时间最长的人你几乎都不认识,也不想认识,那就是工具人。谁会想和同事同学真正交朋友?忙起来好啊,都不记得了,多好。大家都忙起来,那这个世界该有多美好。事实是,他们只是换了一个地方吹牛罢了。反而安慰自己很充实。那些未与我们同行的人,真实存在吗?我对他们的影像,代表下线的黑白头像就是遗照,那些是他们的遗照吗?他们最后的消息,是遗言吗?那电子签名,是墓志铭吗?

    我一直是个局外人。从未参与过任何 FreeBSD 开发与维护。对于 FreeBSD 项目来说,我就像是南阳刘子骥,再也找不到桃花源了。我为什么没有参加?我可以做,但我还没有做,因为我在找到做此事之意义。我也的确做过,我也从未做过。

    这是一个大流变的时代。工业化和现代科学要求以标准、效率和货币来衡量一切。凡是花里胡哨的都是形式主义,凡是长篇累牍的都是废话唠叨,凡是瞻前顾后的都是懦弱胆怯,凡是没有数学化的全是鬼话屁话。现代性从未存在过,你能在虫豸身上找到任何所谓的文明吗?人类始终愚昧又落后,却往往用形式主义和现代科学遮蔽这一切。人类文明真能永不落幕吗?我告诉你,我不相信!

    《玫瑰三愿》玫瑰花“我愿那妒我的无情风雨莫吹打,我愿那爱我的多情游客莫攀摘,我愿那红颜常好不凋谢”。玫瑰终究化归泥土。我真的能找到一棵烂开在碧栏杆下的玫瑰花吗?如果存在,她在哪里?

    我始终在思考。会者定离,已经没有人在与我同行了。我的确是找不到任何朋友了。朋友,我怎么对他,他就怎么对我就可以了。

    中文社区现在和其他群已经没有区别了。虽然以前也是如此。看看其他群那近 100 个人的翻译群没有一个人翻译你不觉得荒谬吗。讨论 BSD 却连 BSD 基本常识都没有。没有什么意义。

    我是 2018 年接触的 FreeBSD。同年,我因为严重的躯体化症状去了医院看看,说我是重度抑郁症。所以最开始几年就在群里吹牛,因为根本动不了,手指头也是。群里有个人,说为什么不把教程总结起来。我说那,服务器钱和域名你出吗?他就买了个域名——freebsdcn.org,服务器用的 vercel。我一晚上就整理出来了二三十篇——因为晚上根本睡不着。还是浑身疼痛。后来过了两年,换了个医院。开了别的药,不疼了。但是,时常会感觉这个世界破破烂烂的。什么事情都觉得没有意义。我花了几年的时间学了一些西方哲学、我花了几年的时间学了一些西方哲学、基督教神学。我已经好几年没有去医院了。跑路这本书中间我也断了总计有大概一年半。我愈发怀疑世界的真实性。讨论具体的计算机知识没有任何意义,科学也没有意义,科学是经验性的。数学也是不完备的,再深入研究,没有意义。尽管我以前曾经深入研究过。我已经尽我所能去建设了。其他的,不是我不想做,是我做不了。我虽然只是花了几个小时几分钟去写一些没有意义的东西。但是那是我一天中唯一的活动了。我从未在网上和别人说过这些。我只是说我身体不好。我每天都感觉自己要不存在了。但是后来觉得没有意义,也许我从未存在过。我看到动漫里那些人物,组乐队啊,各种社团。包括所谓的追梦电影,探索外星人的,如《宇宙探索编辑部》,我始终觉得他们不够努力。我知道说这些会对别人造成困扰,故我从未说过。我现在感觉自己一无所有,除了不健康的身体。我想做些什么事情,对我来说真的是非常困难的一件事。我 7 号打开的书,现在就读了 15%,在过去,一本书几天就看完了。你如果看 GitHub 提交日志。你能发现绝大部分都是深夜提交的,不吃药根本睡不着。说这些也没用。我只是说,我这样都能有所贡献。那些正常的人,为什么连现成的东西都不去看一眼,就有资格说没意义?他们有什么资格说没意义。我每天都感觉自己到不了白天,我仍然在自我感动。我只是鼠标点了几下,但是那天我基本上就没有任何想做其他事情包括吃饭的想法了。我在认为自己的存在都没有意义的情况下还在复制粘贴。

    我说了我不知道,我没有能力去知道,可能永远也不可能了。所有人都在说自己在上班,很忙,没空陪你玩,自己上班很累,这个不赚钱。无论 freebsd 社区,还是什么社区,我都是个局外人。我知道这是我自己的问题,不怪他们。我也从来没有埋怨过任何人。我只是自己一个人复制粘贴,仅此而已。

    我已经尽力了,但我从未努力过。

    他是我自认为我最好的朋友。我往他背后贴纸条,无论我怎么捉弄他他也不生气,只是把纸团扔进垃圾桶。他给我 5 毛钱,祈求我和他一起走他那条路回家,让我等等他——他被体育老师抓去练长跑跨栏了。在路上,他把捡到的汽车零件,一个很精致的钢制圆环给了我。他看我很想要,就说他经常捡到,不差这一两个。他说他租的家要被拆了盖啤酒厂。要回到山西老家了。那时,流行玩悠悠球,他玩的最好,会很多招式。我什么也不会,像现在一样。我说,我花 5 块钱巨款买了一个悠悠球,一定带过来给你看看。第一天,我忘记了。第二天,我忘记了。第三天,放假了。直到现在,快二十年了。他家,仍旧一片荒芜。我昨天了去看了,和以前,真的没有变化。我们再也没有见过面。他仍然没有见过那天我所提到的悠悠球的样子。我为什么没有问一下他的户口所在地,哪怕是可能再也打不通的电话号码,我为什么没有去看看他家到底在哪里?我相信我们还会再见,但我仍未知道那天所提及的家的样子。钢制圆环也早不知道去了哪里。离开了 BSD,我也不知道我还能去哪儿。但是是时候离开了这一切,我已经什么都不知道了。我不知道他家在哪,我不知道他是不是还记得我,我不知道他是不是把我视作局外人。我这个人,满脑子都只想着自己呢。我从未努力去做任何事情。但我已尽力。

    佛教允许比丘还俗的次数,可以有三次机会。我也三度放弃 FreeBSD。如今,已经没有机会再继续下去了。

    我很久以前写道,“我们必须团结起来做些什么事情,无论大小,哪怕只是谈谈自己的学习体会(但并非出于炫耀)。否则如果只是夸夸其谈的话,我们和那些只会吹牛逼的、只会键政的、互称大佬的群或社区有任何区别吗?如果没有区别,那就没有任何意义,那么我宁愿这个社区不再存在。如果大家有时间有精力的话可以考虑翻译文档,如果会编程的话可以考虑移植软件到 BSD,如果能力更高甚至可以参与系统开发。”

    如果凡是存在的必然有其合乎理性的地方,一切新事物都在不断地获取其存在的理性,而一切的旧事物都在不断地失去其必然的理性。那么只有一个不存在的点是事物绝对完美的那一刻。所以无论是新事物还是旧事物都是破烂而已,都是非充分理性所决定的。即存在即破烂。新事物获得的所谓继承旧事物的理性也不过是一种幻觉而已,因为根本不存在一个状态存在完美的事物,进而构成世界。很明显现今,无论是公众号还是别的什么,都已经没有存在的意义了,都已经被时代解构了。《MyGO!!!!!》中长崎爽世说“只要是我能做的,我什么都愿意做”,我亦如此。我不想再看到,连初一考试倒数的学生都能照着我的破烂教程在 VMware Workstation Pro 装上 FreeBSD 和 KDE5,但竟有成年人在九个月内连系统在虚拟机都装不上反而理直气壮地在云评论这一切。如今早已没有了巴别塔,但是人们还是装作不识字,装作看不懂视频,装作看不懂文字。那么只有上帝能够拯救他们了。

    那些说了不做,每天都在讨论一些时髦的东西的人们,就喜欢这种自己根本不懂看了以为自己懂了其实还是狗屁不通的东西,说了一堆全是假大空,看的人还以为自己懂了。原来现在的市场喜欢这种东西,真是个美好的新世界呢。我也没什么两样,没资格批评他们。毕竟,那样是多么地快乐啊!如果像现在这样,我还自以为我自己懂了,说些看上去自己都不懂的话,那不就是双倍地快乐吗!二十一世纪了,没有什么比快乐更重要的事情了!

    是时候结束这一幕荒唐的闹剧了。没有什么意义,无论在用户还是开发者群体抑或我自己。我没有办法强求任何人和我一道同行,在世界这场巨大的过家家中再扮演什么旁的角色。那些能够一直陪伴你的,才是你所应该珍视的;那些和你高谈阔论的,未必就是能和你说得上话的人;那些未曾到过的远山,不代表你从未登顶。虽然时间是不同人眼中流动的影像,可我们仍然在同一幕舞台之上。

    5.9 使用 ZFS 启动环境更新 FreeBSD 并实现多版本共存

    创建启动环境 15.0-RELEASE

    • 使用工具 bectl 创建启动环境 15.0-RELEASE

    注意

    我们只是将其命名为 15.0,实际上系统仍然是 14.3。

    • 使用 bectl 检查:

    Active 字段解释(来自 ):

    • “N”:表示该启动环境当前是否处于活动状态(现在是否正位于此环境中)

    • “R”:在重启时是否处于活动状态(下次是否选中,用于固定选项)

    • “T”:是否会在下次启动时生效(且仅下次,用于一次性选项)

    • “NRT”:这些标识(N / R / T)可以组合出现(实际上不会出现,该选项存在矛盾)

    注意 zroot/ROOT/15.0-RELEASE 8K 83.8G 10.6G / 这行是刚刚创建的。

    将启动环境中的系统版本更新到 15.0-RELEASE

    挂载启动环境 15.0-RELEASE

    • 创建一个临时目录用于更新启动环境 15.0-RELEASE 中的 FreeBSD 系统

    • 将启动环境(实际上是个快照)15.0-RELEASE 挂载到上面的路径里

    • 检查:

    注意到,已经成功地将启动环境 15.0-RELEASE 挂载到了我们设置的路径里。

    验证当前 FreeBSD 版本

    目前 15.0-RELEASE 实际上是 14.3-RELEASE。虽然是明知的,但还是让我们来用命令 freebsd-version 验证这一点:

    freebsd-version 参数解释(摘自手册页 ):

    • -k:打印已安装内核的版本和补丁级别。与 不同的是,如果新的内核已经安装但系统尚未重启,freebsd-version 会打印新内核的版本和补丁级别。

    • -r:打印正在运行中的内核的版本和补丁级别。与 不同的是,freebsd-version 不受环境变量影响。

    • -u:打印已安装用户态的版本和补丁级别。这些信息在构建过程中会被写入程序

    使用 pkgbase 将启动环境中的 14.3-RELEASE(系统版本)转换到 pkgbase

    pkgbase 的设计初衷是为了让 stable、current 和 release(BETA、RC 等)都能使用一种二进制工具进行更新。当下,stable、current 只能通过完全编译源代码的方式来更新。

    注意

    仅 FreeBSD 14.0-RELEASE 及更高版本才能直接被转换为 pkgbase。旧版仍需要通过 freebsd-update 进行更新(运行时 pkgbasify 会提示 Unsupported FreeBSD version,即 FreeBSD 版本不受支持)。

    警告

    存在风险,可能会丢失所有数据!建议在操作之前做好备份。

    • 锁定 pkg 防止 pkg 故障

    • 下载 pkgbase 转换脚本

    • 使用 pkgbasify 进行转换

    警告

    在接受 Do you accept this risk and wish to continue? (y/n) 这个风险提示后就没有其他二次确认了!

    • 检查启动环境 15.0-RELEASE 中的系统版本

    注意到 pkgbasify 把我们更新到了最新的点版本,并且已经把我们更新到了 pkgbase。

    使用 pkgbase 将启动环境中的系统版本更新到 15.0-RELEASE

    • 创建 pkgbase 软件源目录

    • 编辑 /mnt/upgrade/usr/local/etc/pkg/repos/FreeBSD-base.conf,添加 pkgbase 源

    警告

    请检查 FreeBSD-base.conf 的内容,尤其是 不应该 在里面手动硬编码写入指定任何具体的版本(如 base_release_3)。

    技巧

    需要换源的用户可以将 url 这行改成 url = "https://mirrors.ustc.edu.cn/freebsd-pkg/${ABI}/base_release_${VERSION_MINOR}";。而对于那些优先考虑安全性的读者应该维持默认设置。

    • 刷新软件源

    • 使用 pkgbase 将 14.3-RELEASE 更新到 15.0-RELEASE(即指定 ABI 到 15)

    技巧

    如果检查不到任何更新,请检查你当前是否已成功转换为 pkgbase,并确认软件源配置是否正确

    • 检查启动环境 15.0-RELEASE 中的系统版本

    这里 r 显示 14.3-RELEASE 并无不妥,说明目前运行的是 14.3。结合其他参数,可知重启后才会变成 15.0-RELEASE。

    • 解锁 pkg

    • 将所有第三方软件包的 ABI 更新到 FreeBSD 15.0

    需要反复确认多次才能完成更新。

    启动到启动环境 15.0-RELEASE

    • 在下次启动时进入启动环境 15.0-RELEASE

    • 验证设置是否成功:

    注意,这是一次性的(T),我们只是为了看看它是否正常。我们还需要回到目前的主系统 14.3-RELEASE 来更新 ZFS。

    • 重启以进入启动环境 15.0-RELEASE

    • 验证版本:

    可以看到,我们已经成功地把启动环境 15.0-RELEASE 中的 FreeBSD 版本升级到了 15.0-RELEASE,现在名副其实了。

    并且 R 意味着我们再次重启就会回到启动环境 default(14.3-RELEASE)。

    附录:永久性使用 15.0-RELEASE

    如果读者不需要多版本共存,并且验证过目前的环境满足需要,也可以将启动环境 15.0-RELEASE 设置为永久的:

    然后读者也可以销毁不再需要的启动环境:

    将参数 启动环境 替换为命令 bectl list 的 BE 列中的对应启动环境即可将其销毁之。

    将基本系统中的 ZFS 替换为 Ports 版本

    通常,在 FreeBSD 大版本间的 ZFS(池)版本/特性都会变动,如从 13 到 14 的 zpool 就有所变动。

    可通过 Ports 中的 OpenZFS 实现 13、14、15 等多版本/多系统共存。

    警告

    如不按照下方进行设置就强行升级 ZFS 池/特性,将无法访问旧版系统。

    那些有意愿实现多版本共存的读者可以直接重启,进入启动环境 default(14.3-RELEASE)。

    验证当前系统版本

    我们需要确定我们的确在启动环境 default(14.3-RELEASE)中。

    可以看到,我们已经回来了。

    查看内置的 OpenZFS 版本

    目前 FreeBSD 基本系统内置的是 OpenZFS 2.2.7(即来自 )

    安装 filesystems/openzfs

    • 使用 pkg 安装

    • 使用 ports 安装:

    编辑 /boot/loader.conf

    为了让系统不要加载基本系统内的 zfs 版本。需要在 zfs_load=YES 前加上注释 #,取消其开机自动加载。

    形如:

    再新增下列数行:

    即可。然后重启。

    检查 ZFS 版本

    在重启后,检查 ZFS 版本:

    接下来再更新其他存储池或特性即可。

    警告

    考虑到基本系统中的 OpenZFS 版本不一定是最新的,所以你最好对所有版本都使用 Ports 中的版本以期达到统一。换言之,建议读者将 15.0-RELEASE 中的 ZFS 也参照此方法进行替换。

    附录:给 pkgbasify 脚本换源

    修改示例(使用 USTC)

    找到 Lua 脚本中的 create_base_repo_conf 函数:

    将这个函数修改如下,其中在 return 部分指定了镜像站:

    警告

    请删除 return "pkg+https://" 这行里面的 pkg+,否则会报错。

    再找到下面的函数 create_base_repo_conf

    修改如下(删除了 srv 相关数行):

    注意

    对于那些优先考虑安全性的读者应该保持默认设置。

    南京大学开源镜像站 NJU

    网易开源镜像站 163

    附录:配置软件源

    FreeBSD 官方源的 pkgbase 信息如下:

    以上表格的时间已转换为北京时间,即东八区时间,均为 FreeBSD 官方镜像站的时间。

    若官方源下载速度慢,可以考虑换成国内镜像。只需要替换 https://pkg.freebsd.org 这部分。

    参考文献

    • ,指出可以手动安装 openzfs 来达到旧系统使用新 zfs 池的目的

    • ,维基

    • man

    # bectl create 15.0-RELEASE
    使用 zfs 命令检查:
    freebsd-version
    中。

    每天两次:08:00、20:00

    releng/14.1(RELEASE)

    每天两次:08:00、20:00

    releng/14.2(RELEASE)

    每天两次:08:00、20:00

    releng/14.3(RELEASE)

    每天两次:08:00、20:00

    分支

    更新频率

    URL 地址

    main(16.0-CURRENT)

    每天两次:08:00、20:00

    https://pkg.freebsd.org/${ABI}/base_latest

    main(16.0-CURRENT)

    每周一次:星期日 20:00

    https://pkg.freebsd.org/${ABI}/base_weekly

    stable/14

    每天两次:08:00、20:00

    https://pkg.freebsd.org/${ABI}/base_latest

    stable/14

    每周一次:星期日 20:00

    https://pkg.freebsd.org/${ABI}/base_weekly

    bectl(8) 手册页
    freebsd-version(1)
    uname(1)
    uname(1)
    https://github.com/openzfs/zfs/commit/e269af1b3
    ZFS Boot Environments Explained
    wiki/BootEnvironments
    bectl(8)

    releng/14.0(RELEASE)

    6.14 远程桌面

    x11vnc(FreeBSD 为被控端,镜像屏幕)

    x11vnc 会和远程软件 todesk 一样直接镜像屏幕,简言之,你的所有操作都会被同步到显示器上面,反过来在显示器上的操作,你在 VNC 上也可以看到。


    如果没有显示器则不能使用 x11vnc。

    1.1 操作系统的历程与开源往事

    什么是 UNIX?

    从前,UNIX 是一款操作系统。最后由 C 语言改写产生。——源自 AT&T(American Telephone & Telegraph,美国电话电报公司)的贝尔实验室。

    现在是一种 标准规范、一款 法律上的商标。更是一种 哲学思想,一项 软件工程原则。


    查询美国专利商标局 UNIX 商标注册情况:


    $ bectl list # 显示所有启动环境
    BE           Active Mountpoint Space Created
    15.0-RELEASE -      -          176K  2025-12-05 22:27
    default      NR     /          10.6G 2025-01-14 20:36
    # zfs list
    NAME                      USED  AVAIL  REFER  MOUNTPOINT
    
    ……其他省略……
    
    zroot/ROOT/15.0-RELEASE     8K  83.8G  10.6G  /
    
    ……其他省略……
    # mkdir /mnt/upgrade
    # bectl mount 15.0-RELEASE /mnt/upgrade
    /mnt/upgrade
    # df
    Filesystem              1K-blocks     Used    Avail Capacity  Mounted on
    
    ……其他省略……
    
    zroot/ROOT/15.0-RELEASE  99036272 11132688 87903584    11%    /mnt/upgrade
    
    ……其他省略……
    # chroot /mnt/upgrade freebsd-version -kru
    14.3-RELEASE
    14.3-RELEASE
    14.3-RELEASE
    # pkg -c /mnt/upgrade lock pkg
    pkg-2.4.2_1: lock this package? [y/N]: y # 输入 y 按回车键确认锁定 pkg
    Locking pkg-2.4.2_1
    # fetch -o /mnt/upgrade https://raw.githubusercontent.com/FreeBSDFoundation/pkgbasify/main/pkgbasify.lua
    # chroot /mnt/upgrade /usr/libexec/flua pkgbasify.lua
    Running this tool will irreversibly modify your system to use pkgbase.
    This tool and pkgbase are experimental and may result in a broken system.
    It is highly recommended to backup your system before proceeding.
    Do you accept this risk and wish to continue? (y/n) y # 这里是风险提示,确认
    Updating FreeBSD repository catalogue...
    
    ……此处省略……
    
    The following 370 package(s) will be affected (of 0 checked):
    
    New packages to be INSTALLED:
            FreeBSD-acct: 14.3p6 [FreeBSD-base]
            FreeBSD-acct-man: 14.3p6 [FreeBSD-base]
            FreeBSD-acpi: 14.3p6 [FreeBSD-base]
            FreeBSD-acpi-man: 14.3p6 [FreeBSD-base]
    
    ……此处省略……
    
    Conversion finished.
    
    Please verify that the contents of the following critical files are as expected:
    /etc/master.passwd
    /etc/group
    /etc/ssh/sshd_config
    
    After verifying those files, restart the system.
    # chroot /mnt/upgrade freebsd-version -kru
    14.3-RELEASE-p6
    14.3-RELEASE
    14.3-RELEASE-p6
    # mkdir -p /mnt/upgrade/usr/local/etc/pkg/repos/
    FreeBSD-base {
        url = "https://pkg.freebsd.org/${ABI}/base_release_${VERSION_MINOR}";
        enabled = yes;
    }
    # pkg -c /mnt/upgrade update -r FreeBSD-base
    # env ABI=FreeBSD:15:amd64 pkg-static -c /mnt/upgrade upgrade -r FreeBSD-base
    pkg-static: Setting ABI requires setting OSVERSION, guessing the OSVERSION as: 1500000
    pkg-static: Warning: Major OS version upgrade detected.  Running "pkg bootstrap -f" recommended
    Updating FreeBSD-base repository catalogue...
    pkg-static: Repository FreeBSD-base has a wrong packagesite, need to re-create database
    Fetching meta.conf: 100%    179 B   0.2kB/s    00:01    
    Fetching data.pkg: 100%   80 KiB  81.6kB/s    00:01    
    Processing entries:   0%
    Newer FreeBSD version for package FreeBSD-zlib-dbg:
    To ignore this error set IGNORE_OSVERSION=yes
    - package: 1500068
    - running userland: 1500000
    Ignore the mismatch and continue? [y/N]: y # 此处输入 y 后继续
    Processing entries: 100%
    FreeBSD-base repository update completed. 496 packages processed.
    FreeBSD-base is up to date.
    Checking for upgrades (230 candidates): 100%
    Processing candidates (230 candidates): 100%
    The following 290 package(s) will be affected (of 0 checked):
    
    New packages to be INSTALLED:
            FreeBSD-atf: 15.0 [FreeBSD-base]
            FreeBSD-atf-dev: 15.0 [FreeBSD-base]
            FreeBSD-atf-lib: 15.0 [FreeBSD-base]
    
            ……此处省略一部分…
    
            FreeBSD-zoneinfo: 14.3p6 -> 15.0 [FreeBSD-base]
    
    Number of packages to be installed: 61
    Number of packages to be upgraded: 229
    
    The operation will free 100 MiB.
    473 MiB to be downloaded.
    
    Proceed with this action? [y/N]: y # 此处输入 y 后继续
    # chroot /mnt/upgrade freebsd-version -kru
    15.0-RELEASE
    14.3-RELEASE
    15.0-RELEASE
    # chroot /mnt/upgrade pkg unlock pkg
    pkg: Warning: Major OS version upgrade detected.  Running "pkg bootstrap -f" recommended
    pkg-2.4.2_1: unlock this package? [y/N]: y
    Unlocking pkg-2.4.2_1
    # chroot /mnt/upgrade pkg upgrade
    # bectl activate -t 15.0-RELEASE
    Successfully activated boot environment 15.0-RELEASE
    for next boot
    $ bectl list
    BE                             Active Mountpoint   Space Created
    15.0-RELEASE                   T      /mnt/upgrade 8.75G 2025-12-05 23:22
    default                        NR     /            10.9G 2025-01-14 20:36
    # reboot
    $ freebsd-version -kru
    15.0-RELEASE
    15.0-RELEASE
    15.0-RELEASE
    $ bectl list
    BE                             Active Mountpoint Space Created
    15.0-RELEASE                   N      /          8.75G 2025-12-05 23:22
    default                        R      -          10.9G 2025-01-14 20:36
    # bectl activate 15.0-RELEASE
    # bectl destroy 启动环境
    $ bectl list
    BE                             Active Mountpoint Space Created
    15.0-RELEASE                   -      -          8.75G 2025-12-05 23:22
    default                        NR     /          10.9G 2025-01-14 20:36
    $ freebsd-version -kru
    14.3-RELEASE
    14.3-RELEASE
    14.3-RELEASE
    # zfs --version
    zfs-2.2.7-FreeBSD_ge269af1b3
    zfs-kmod-2.2.7-FreeBSD_ge269af1b3
    # pkg ins openzfs
    # cd /usr/ports/filesystems/openzfs/ 
    # make install clean
    # zfs_load=YES
    zfs_load=NO
    openzfs_load=YES
    # zfs --version
    zfs-2.2.7-FreeBSD_ge269af1b3
    zfs-kmod-2.3.5-1
    local function base_repo_url()
    	local major, minor, branch = freebsd_version()
    	if math.tointeger(major) < 14 then
    		fatal("Unsupported FreeBSD version: " .. raw)
    	end
    	if branch == "RELEASE" or branch:match("^BETA") or branch:match("^RC") then
    		return "pkg+https://pkg.FreeBSD.org/${ABI}/base_release_" .. minor
    	elseif branch == "CURRENT" or
    		branch == "STABLE" or
    		branch == "PRERELEASE" or
    		branch:match("^ALPHA")
    	then
    		return "pkg+https://pkg.FreeBSD.org/${ABI}/base_latest"
    	else
    		fatal("Unsupported FreeBSD version: " .. raw)
    	end
    end
    local function base_repo_url()
    	local major, minor, branch = freebsd_version()
    	if math.tointeger(major) < 14 then
    		fatal("Unsupported FreeBSD version: " .. raw)
    	end
    	if branch == "RELEASE" or branch:match("^BETA") or branch:match("^RC") then
    		return "https://mirrors.ustc.edu.cn/freebsd-pkg/${ABI}/base_release_" .. minor
    	elseif branch == "CURRENT" or
    		branch == "STABLE" or
    		branch == "PRERELEASE" or
    		branch:match("^ALPHA")
    	then
    		return "https://mirrors.ustc.edu.cn/freebsd-pkg/${ABI}/base_latest"
    	else
    		fatal("Unsupported FreeBSD version: " .. raw)
    	end
    end
    local function create_base_repo_conf(path)
    	assert(os.execute("mkdir -p " .. path:match(".*/")))
    	local f <close> = assert(io.open(path, "w"))
    	if math.tointeger(freebsd_version()) >= 15 then
    		assert(f:write(string.format([[
    %s: {
      enabled: yes
    }
    ]], options.repo_name)))
    	else
    		assert(f:write(string.format([[
    %s: {
      url: "%s",
      mirror_type: "srv",
      signature_type: "fingerprints",
      fingerprints: "/usr/share/keys/pkg",
      enabled: yes
    }
    ]], options.repo_name, base_repo_url())))
    	end
    end
    local function create_base_repo_conf(path)
    	assert(os.execute("mkdir -p " .. path:match(".*/")))
    	local f <close> = assert(io.open(path, "w"))
    	if math.tointeger(freebsd_version()) >= 15 then
    		assert(f:write(string.format([[
    %s: {
      enabled: yes
    }
    ]], options.repo_name)))
    	else
    		assert(f:write(string.format([[
    %s: {
      url: "%s",
      enabled: yes
    }
    ]], options.repo_name, base_repo_url())))
    	end
    end
    https://mirrors.nju.edu.cn/freebsd-pkg/
    https://mirrors.163.com/freebsd-pkg/
    https://pkg.freebsd.org/${ABI}/base_release_0
    https://pkg.freebsd.org/${ABI}/base_release_1
    https://pkg.freebsd.org/${ABI}/base_release_2
    https://pkg.freebsd.org/${ABI}/base_release_3
    安装 x11vnc
    • 使用 pkg 安装:

    • 或者使用 Ports 安装:

    创建密码

    启动服务器(KDE 6 SDDM)

    警告

    SDDM 左下角选 Wayland 是进不去的!因为 x11vnc 尚不支持 Wayland。

    • LightDM

    • GDM

    SDDM X11VNC

    参考文献

    • x11vnc -allow VNC connections to real X11 displays

    • X11vnc

    TigerVNC(FreeBSD 为被控端)

    启用 VNC 服务(目前 Ports 就只剩下这个 TigerVNC 了)

    安装 TigerVNC Server

    或者:

    做一些设置

    在终端执行命令 vncpasswd,设置访问密码。

    创建 ~/.vnc/xstartup 文件:

    内容如下:

    你用哪个桌面就把那个桌面前面的注释 # 删掉即可。

    警告

    请注意保留 &**。

    保存后执行命令授予权限。

    • 接下来在终端执行命令

    或

    其中“:1”意味着 DISPLAY=:1,即指定桌面显示的通信端口为 1,对应 VNC 服务的端口为 5901。桌面显示通信端口从 0 开始,但该端口已被当前桌面占用(除非是镜像 VNC),因此 VNC 服务默认端口虽为 5900,但实际执行须却是从 5901 端口开始的。故,你要链接的话,必须指定端口为 5901。

    测试:

    如果启动服务时未通信端口,则系统根据使用情况自动指定。

    可以查看进程:

    关闭服务请用命令 vncserver -kill :1,这里必须指定通信端口。

    • 如果启用了防火墙,以 ipfw 为例,在终端输入命令:

    上行命令表示放通端口 5900-5910,即 DISPLAY 0-10。

    参考文献

    • Xfce4 is not displayed correctly when I connect vncviewer (in Linux) to tightvnc-server (on FreeBSD)

    XRDP(FreeBSD 为被控端)

    安装 XRDP(基于 kde6)

    或者:

    查看配置文件:

    配置

    编辑 /usr/local/etc/xrdp/startwm.sh:

    找到 #### start desktop environment,修改如下:

    然后重启系统,即可。

    中文化 (用户使用默认的 sh)

    故障排除与未竟事宜

    • XRDP 没声音

    你试试火狐浏览器

    通过 Windows 以 TigerVNC 远程访问 FreeBSD

    下载 TigerVNC 查看器:

    下载地址:https://sourceforge.net/projects/tigervnc/files/stable/

    查看 FreeBSD 的 VNC 端口:

    故障排除与未竟事宜:由于目标服务器积极拒绝,无法连接

    非镜像 vnc 在连接时必须指定端口,否则按默认端口 5900 进行连接,但是你不是镜像的屏幕(你用的不是 x11vnc),所以必定连不上。

    示例:

    SDDM VNC

    故障排除与未竟事宜

    • 通过 VNC 远程 FreeBSD 没声音,不知道怎么配置。

    通过 Windows 自带的桌面远程连接(RDP)远程访问 FreeBSD

    xrdp FreeBSD

    首次登录设备会有安全提示,输入 yes,回车后就会弹出远程桌面窗口。

    xrdp FreeBSD
    xrdp FreeBSD
    xrdp FreeBSD
    xrdp FreeBSD

    故障排除与未竟事宜

    • Windows 的远程桌面窗口若不在左上角或全屏显示,则会模糊

    请 取消 勾选“智能调整大小”。

    使用 Android 通过 XRDP 远程访问 FreeBSD

    首先需要下载所需软件:

    由微软官方开发的手机 RDP 软件:Remote Desktop

    • Remote Desktop

    该软件操作便捷。

    请注意,须将左上 🖱️ 改为 👆。默认的鼠标操作很不方便:或者你也可以选择手机 OTG 一个鼠标和键盘。

    Remote Desktop FreeBSD

    连接示意图(后台正在编译 Chromium,故占用会很高):

    Remote Desktop FreeBSD

    通过 FreeBSD 以 XDRP 远程访问 Windows

    freerdp3(新稳定版,支持 NLA)

    使用 pkg 安装:

    或者用 Ports:

    使用 FreeBSD 通过 freerdp3 远程链接到 Windows 11 24H2:

    xfreerdp3 /u:ykla /p:z /v:192.168.31.213:

    • xfreerdp3,注意前面有个 x。

    • /u:ykla,/u: 即 Username 用户名。ykla 是我 Windows 的登录名

    • /p,即 Password 密码。z 是我 Windows 用户 ykla 的登录密码

    • /v:,即 Server 服务器。

    freerdp

    参考文献

    • FreeRDP User Manual,里面命令说明和一些用法示例

    freerdp2(旧稳定版,支持 NLA)

    使用 pkg 安装:

    或者用 Ports:

    使用 FreeBSD 远程链接到 Windows 11 24H2:

    freerdp

    故障排除与未竟事宜

    • 但是我没有输入用户名就连上了?

    不知道。难道是因为我的 FreeBSD 用户名和 Windows 是一样的?

    rdesktop(不支持 NLA)

    net/xrdesktop2 是 rdesktop 的图形化前端,但我打开里面的键盘设置就卡死了。


    使用 pkg 安装 rdesktop:

    或者用 Ports:

    rdesktop 无前端 GUI,故要在终端输入命令:

    如果没有特意更改 Windows 配置,无须加 :端口。

    对于我测试的 Windows 11 24H2 会报错:

    根据 CredSSP does not work,是个老问题了。

    影响安全的解决方案是禁用网络级身份验证(NLA),在要远程连接的 Windows 上操作:

    再测试链接:

    rdesktop
    rdesktop

    故障排除与未竟事宜

    • 看视频没声音

    待解决

    参考文献

    • 使用 RDP 连接到 Azure VM 时排查身份验证错误,打开和关闭 NLA 的方法在此。经过测试关闭后 rdesktop 果然又连不上了。

    AnyDesk

    使用 AnyDesk 可进行远程访问,FreeBSD 上仅支持 x86 架构:

    由于版权问题(私有软件未经许可默认禁止分发),必须用户使用 Ports 自行编译:

    不可使用 BATCH=yes 参数,因为需要接受许可协议才能使用:

    anydesk

    查看 AnyDesk 安装后说明:

    提示需要 /proc,经过测试没有的话的执行程序确没反应。

    root 用户无法运行 AnyDesk。需要普通用户:

    执行命令后弹出来这个界面:

    注意,被连接方“接受”(Accept)了才能继续链接。

    Windows 通过 AnyDesk 远程 FreeBSD

    Windows 通过 AnyDesk 远程 FreeBSD

    FreeBSD 通过 AnyDesk 远程 Windows

    Windows 通过 AnyDesk 远程 FreeBSD

    故障排除与未竟事宜

    • FreeBSD 通过 AnyDesk 远程 Windows,似乎无法在 Windows 中移动鼠标。

    待解决。

    RustDesk 中继服务器

    注意

    这个是中继的 ID 服务器,本身不能被远程控制。

    换言之,你没法用 RustDesk 控制 FreeBSD。

    安装:

    或者:

    配置:

    • 启动 hbbr:

    • 再启动 hbbs:

    在其他设备上打开 rustdesk 客户端,两边都要填入相同的“ID 服务器(FreeBSD 的 IP 地址或域名)”和“Key”,其他空着不填,在控制端输入被控端显示的 ID 即可连接。

    参考文献

    • rustdesk-server Self hosted RustDesk server

    • 远程控制软件 RustDesk 自建服务器全平台部署及使用教程

    UNIX 认证查询网址:The Open Group official register of UNIX Certified Products

    The Open Group official register of UNIX Certified Products

    现在,我们可以知道认证 UNIX 需要:

    1. 符合单一 UNIX 规范

    2. 交钱认证

    可以看到,常见的,经过认证的 UNIX 操作系统有 Apple macOS。即从商标的角度上讲,macOS 可以称得上是标准的 UNIX 操作系统。故,要安装 UNIX 的人可以去黑苹果了

    技巧

    macOS/iOS 等与 BSD 的关系

    从历史与现实来看,macOS/iOS 等基于 BSD 确凿无疑,但并非全然基于某款 BSD:macOS/iOS 等应该被理解为一款独立的 BSD 操作系统——同 OpenBSD、NetBSD 和 FreeBSD 一样。参见 《苹果的开源基石:macOS 和 iOS 背后的 BSD 传统》

    所以看似是安卓和苹果之争,其实是 Linux 与 BSD 之争。也许也是大教堂与市集之争。

    UNIX 哲学与软件工程原则简介

    传统的 Unix 哲学观(以《UNIX 编程艺术》为核心)

    思考题

    Those who do not understand Unix are condemned to reinvent it, poorly. (那些不懂 Unix 的人注定要再造一个四不像式 Unix)

    ——Henry Spencer

    作者 Henry Spencer 并未明确批评哪个操作系统,那么你认为,现在这句话更适合哪个常见的操作系统?为什么?

    Unix 哲学源于 UNIX 操作系统的开发,作者是 Ken Thompson。Unix 哲学一言以蔽之即大道至简(“keep it simple, stupid”):

    • 小即美

    • 一个程序只做一件事

    • 原型先行

    • 可移植性先于高效率性

    • 不使用二进制

    • 沉默是金(无报错就沉默,成功则无输出,不显示操作进度等)

    • 避免仅用户界面(避免无命令行,仅 GUI)

    参考文献

    • 《UNIX 编程艺术》,Eric Raymond 著,ISBN: 9787121176654,电子工业出版社。

    • 《Linux/Unix 设计思想》,Mike Gancarz 著,9787115266927,人民邮电出版社。(已绝版)

    • The Open Group Standards Process

    二十一世纪四分之一处的 Unix 哲学观

    事实证明,技术很快就会过时。这也是很多人在今天认为谈论 Unix,谈论 Unix 哲学毫无意义的重要原因。因为他们的确过时了,将 Unix 哲学简单仅归结为纯粹而具体的技术性操作,这是对 Unix 哲学最大的误读。也是促使不少人走上苦难哲学这条改旗易帜的歪路的诱因。

    真正的 Unix 哲学绝不是上面那些陈旧古板的祖宗之法,Unix 哲学的精髓在于以人为本,真正的 Unix 哲学是一种人道主义。在不同的年代,Unix 哲学应有不同的诠释,但是归根结底是一种人道主义——我们要高扬人的主体性。正是为了好玩,为了玩太空旅行才诞生了 Unix,为了“Just For Fun”才有了 Linux:这无不说明,是改造计算机以适应人,而非强迫让人去适应所谓计算机的规则,去迎合吹捧那些本就拙劣不堪的设计思路。

    大道至简在西方哲学中表现为奥卡姆的剃刀,即“如无必要,勿增实体。”这在某种程度上也启发了现象学的观念,我们应该把一些自行设定的观念从我们的脑子里排除出去,只留下我们能够直接感受到的东西——即回到事物本身。

    我们现在回到操作系统本身,回到计算机本身,计算机不应成为一种额外的负担,而应为人所服务——正如 FreeBSD 的口号“The Power To Serve(服务的力量)”那样。

    所以,现代的 Unix 哲学具体不应该是“避免仅用户界面”,而应该是“避免仅命令行”。每款程序都应该报告自己的操作进度,最好还有进度条(无论是否真的体现了进度),可以使用参数静默上述行为,但默认行为不应该是所谓的沉默是金——你有多少次在使用 dd、cp 等命令的时候渴望看到一个进度条而不是什么都没有,即使是卡死了也不知道?ChatGPT 这种程序无疑是对“小即美”,“一个程序只做一件事”最大的反叛。人们需要什么,就应该有什么。

    Unix 的一段历史

    Multics

    1964 年麻省理工学院推出的 CTSS(兼容分时系统),是当时最有创造性的操作系统,有了 CTSS 这种高效的操作系统,麻省理工学院的研究人员决定做一个更好的版本。他们开始设计 Multics 系统。Multics 意思是多路复用信息和计算服务。

    Multics 意图创造强悍的新软件和比肩 IBM 7094 功能更丰富的新硬件,麻省理工学院邀请了两家公司来帮忙。美国通用电气公司负责设计及生产有全新硬件特性、能更好地支撑分时及多用户体系的计算机,贝尔实验室在计算机发展早期就开发了自己的操作系统,因此麻省理工邀请了贝尔实验室与美国通用电气公司共同开发 Multics。

    最终 Multics 的开发陷入了困境,Multics 设计了大量的程序及功能,经常塞入很多不同的东西进去,导致系统过于复杂。1969 年,由于在贝尔实验室看来作为一套信息处理工具,它已经无法为实验室提供计算服务的目标,它的设计太昂贵了,于是在同年 4 月,贝尔实验室退出 Multics 项目,只剩麻省理工和美国通用电气公司继续开发。

    UNICS

    贝尔实验室退出 Multics 开发项目后,项目组成员 Kenneth Lane Thompson 找到一台 DEC PDP-7 型计算机,这台计算机性能不算强大,只有 4KB 内存,但是图形界面比较美观,Thompson 用他写了个游戏 Space Travel(《星际旅行》),PDP-7 有个问题就是磁盘转速远远低于计算机的读写速度,为了解决这个问题,Thompson 写了磁盘调度算法来提高磁盘总吞吐量。

    技巧

    《星际旅行》被人移植了,现在可以直接在网页上玩,项目位于 C port of Ken Thompson's Space Travel,在线游玩的网站是 Space Travel。

    虽然操作简单但是看不懂怎么玩

    如何测试这个新的算法?需要往磁盘上装载数据,Thompson 需要写一个批量写数据的程序。

    他需要写三个程序,每周写一个:创建代码的编辑器,将代码转换为 PDP-7 能运行的机器语言汇编器,再加“内核的外层——操作系统就完成了”。

    新的 PDP-7 操作系统编写没多时,Thompson 和几个同事讨论,当时新系统还没有名字,当时它被命名为“UnICS”(Uniplexed Information and Computing Service,非复用信息和计算机服务),UnICS 最后改名为 UNIX,这个名字更加方便记忆。

    GNU 与自由软件运动

    由于 Unix 在后期愈发封闭,许可证昂贵、受限制于商业公司等原因,RMS(Richard Matthew Stallman)就想创造一款自由且兼容 Unix 的操作系统。

    • 1983 年,RMS 发表 《GNU 宣言》,其中 GNU 即 GNU is Not Unix(GNU 不是 Unix)。GNU 是一款操作系统——旨在完全替代 Unix。

    • 1984 年,创建 GNU 项目

    • 1985 年,RMS 创建自由软件基金会(Free Software Foundation,FSF)

    • 1989 年,FSF 发布 GPLv1

    • 1991 年,FSF 发布 GPLv2

    • 2007 年,FSF 发布 GPLv3

    一开始他为 Unix 写了很多实用程序(用户空间),然而 GNU 的目标操作系统始终缺乏稳定的内核(即使到了 2025 年,GNU Hurd 仍未完成)。Linux 内核的诞生为这一困境带来了突破。作为一款由 Linux 内核和 GNU 软件拼凑起来的操作系统,Linux 不断地的 GNU 化,成为了一款操作系统——这就是 GNU/Linux 其中 GNU 的来历,然而很多人无视这一事实,掩盖了 GNU 软件的贡献。这是因为:Linux 内核由创始人 Linus Torvalds 一人裁决。Linus 本人对 FSF 和 RMS 并不认可。所以显而易见的,Linux 项目的理念与自由软件运动的理念、乃至于同真正开源的理念(Linux 内核里存在大量非开源非自由的存在,参见 Linux-libre)都存在明显的张力。并且 Linux 内核使用 GPLv2,而非 GNU 推荐的 GPLv3。事实是,Linus Torvalds 随意移除 Linux 项目的参与者,却未同时移除他们贡献的代码。——这同自由还是开源理念都是冲突的。

    我们将 Linux 之前这段时间称作“自由软件运动”(代表人物 RMS)。Linux 的流行促成了另一种理念的兴起,即“开源运动”——代表人物有 Eric S. Raymond,OSI(Open Source Initiative,开放源代码促进会)的创始人,《UNIX 编程艺术》、《大教堂与集市》的作者;Bruce Perens,Debian 项目前领导人——想想下面有关开源的定义为什么是自 Debian 的开源定义 DFSG 衍生而来?

    自由软件运动并未停止,但人们对开源的误解却越来越重。

    自由软件运动与开源运动之间的张力

    需要注意的是,根据笔者与 RMS 的通讯,其强调的 GNU 与自由软件运动并不强调“开源”(甚至是反对开源),而是强调“Free”式自由。有些人可能认为现在的“开源”仅仅是由 OSI 定义 的那样,这是一种极其片面的观点。

    致所有阅读我邮件的 NSA(美国国家安全局)和 FBI 特工:请考虑一下,捍卫美国宪法以抵御一切敌人,无论是外国的还是本国的,是否需要你效仿斯诺登的做法。

    但是我有点困惑:GNU 项目是否强制要求开发必须开源?因为 GNU 通用公共许可证(GPL)强制开源。

    GNU 项目并不倡导“开源”。我们从不用这个词,除非是为了表达与它的分歧。我们代表的是自由软件(Free Software)——自由如同自由的言论。我们致力于在计算中为用户争取自由。

    请参见:https://gnu.org/philosophy/free-software-even-more-important.html

    “开源”这个词是一些反对自由软件运动的人发明的——他们与我们意见相左。他们想谈论同样的软件,却又掩盖自由的理念。

    关于自由软件与开源的区别,请参见:https://gnu.org/philosophy/open-source-misses-the-point.html

    另请阅读 Evgeny Morozov 的文章:https://thebaffler.com/salvos/the-meme-hustler,他在文中也探讨了这一点。

    所以请不要问我们关于“开源”或“开放”某些东西的问题。我们不是那样思考的。你真正应该问我们的是:我们如何以自由软件的方式做事情。

    它属于 GNU 项目,那么 GNU 项目是否也会强制他人……

    我不太确定你所说的“强制”是什么意思,这里可能存在误解。通常我们会告诉人们我们认为什么是对的,什么是错的,但我们无法命令他们做什么。

    唯一的例外是他们使用了 GPL 许可的软件代码。在这种情况下,GNU GPL 本身是一种法律上的约束,规定了他们如何使用这些代码。它要求他们在再发布代码时,尊重其他用户的自由。

    这正是 copyleft(著佐权)的意义所在。

    如果你还有更多问题,请写信至 [email protected]。

    此为私人通信引用,不涉及隐私话题。

    什么是 Linux?

    Linux 是一款开源软件。

    Linux 之名来自 Linux 之父 Linus Torvalds。

    Linux 受启发于 Minix(UNIX 版权限制下的产物),一款设计用于教学的微内核操作系统。当时 22 岁的 Linus Torvalds 是芬兰赫尔辛基大学计算机科学系的研究生。

    Linus Torvalds 的硕士毕业论文是 《Linux: A Portable Operating System》(Linux:一款可移植的操作系统),他在 1997 年(28 岁)获得理学硕士学位。为什么花了这么长时间都没被学校清退呢?芬兰是典型的学分制国家。根据芬兰赫尔辛基大学官网说明,并无 最长学习期限 限制,仅规定某课程成绩有效时间为十年。“你的课程到期不会影响你在大学继续学习的权利”。

    我们探讨了在将 Linux 操作系统移植到多种 CPU 和总线架构时所暴露出的硬件可移植性问题。我们还讨论了软件接口的可移植性问题,尤其是与能够共享同一硬件平台的其他操作系统之间的二进制兼容性问题。文中描述了 Linux 所采取的方法,并对其中几个架构进行了更为详细的介绍。

    《Linux:一款可移植的操作系统》论文摘要

    技巧

    现在,几乎每颗英特尔处理器上都运行着 Minix。

    或许 Minix 才是世界上最流行的操作系统

    UNIX 标准 SUS 包含了 POSIX 标准,是其超集。Linux 实现了 POSIX 标准,但是未进行 POSIX 认证。

    本质上说 Linux 是 UNIX 的一种仿制品或者说克隆产物(类似于人与机器人的关系)。

    狭义 Linux 是内核

    Linux kernel 项目 1991;

    广义 Linux 是 GNU/Linux

    GNU/Linux = Linux kernel + GNU 等软件 + 包管理器

    Chimera Linux 除外。

    Linux 全称为 GNU/Linux;

    GNU's Not Unix,从 GNU 这个名字(GNU 不是 UNIX)你也能看出来 Linux 与 UNIX 并无直接关联。

    具体地:

    • GNU/Linux 发行版 = Ubuntu、RHEL、Deepin、OpenSUSE……

      • Ubuntu = Linux kernel + apt/dpkg + Gnome

      • OpenSUSE = Linux kernel + libzypp/rpm + KDE

    注意

    如果你还是不明白,建议亲自安装试试 Gentoo(stage3)或 Slackware,再不明白可以试试 Gentoo(stage1) 或 LFS。

    上述操作较为复杂,需要一定的经验与基础知识。

    什么是 Unix-like?

    Unix-like 即类 Unix,亦即一切符合 UNIX 标准的操作系统,基本遵守 POSIX 规范,而未获得第一节中所说的 UNIX 的认证。

    也就是说,除了 Windows,基本上世界上大多数操作系统都被叫做 Unix-like,其中就包括 Linux 和 FreeBSD。

    附录:自由软件与开源软件语境下的典型误解与思想偏差探析

    我们必须先给自由软件和开源协议分别下个定义,我们引用 GNU 网站 的相关内容来定义什么是自由软件的自由。

    厘清“营利”和“盈利”

    这两个词语代表的意义是不同的,用法也不同。

    • “盈利”:名词,扣除成本后获得的利润,也作赢利。《现代汉语词典》(ISBN:9787100124508,中国社会科学院语言研究所词典编辑室编,商务印书馆,第 7 版,第 1572 页)

    • “营利”:动词,谋求利润。《现代汉语词典》(ISBN:9787100124508,中国社会科学院语言研究所词典编辑室编,商务印书馆,第 7 版,第 1572 页)

    自由软件定义:四项基本自由

    如果一款软件是自由软件,那么它必须为用户提供以下四项基本自由:

    自由度 0:无论用户出于何种目的,必须可以按照用户意愿,自由地运行该软件。

    自由度 1:用户可以自由地学习并修改该软件,以此来帮助用户完成用户自己的计算。作为前提,用户必须可以访问到该软件的源代码。

    自由度 2:用户可以自由地分发该软件的拷贝,这样就可以助人。

    自由度 3:用户可以自由地分发该软件修改后的拷贝。借此,用户可以把改进后的软件分享给整个社区令他人也从中受益。作为前提,用户必须可以访问到该软件的源代码。

    即:“用户可以自由地运行,拷贝,分发,学习,修改并改进该软件。”

    推论 1:如果商业用户为了营利(自由度 0)而修改(自由度 1)再分发(自由度 2)只要修改后仍然开源(自由度 3)那么,商业用户的行为是完全合规的,且这说明商业用户完全有权自由使用、修改、分发、通过此软件营利。任何自由度均未限制 营利 行为。引证 1:自由软件可以是商业软件;

    开源协议定义与开源软件定义

    为了坚持开源定义 (OSD),并防范开源运动原则的滥用而成立的开源促进会(OSI)对开源协议是这么定义的(基于 Debian Free Software Guidelines, DFSG),为了避免歧义,我们 全文引用 如下:

    导言

    开源不仅仅意味着可以访问源代码。开源软件的分发条款必须符合以下标准

    1. 自由再分发

    许可证不得限制任何一方出售或赠送该软件,作为包含来自多个不同来源的程序的聚合软件分发包的组件。许可证不得要求对此类销售收取版税或其他费用。

    1. 源代码

    程序必须包含源代码,并且必须允许以源代码以及编译形式分发。如果某种形式的产品未与源代码一起分发,则必须有公开的方式来获取源代码,费用不得超过合理的复制成本,最好是通过互联网免费下载。源代码必须是程序员修改程序时的首选形式。故意混淆的源代码是不允许的。中间形式,例如预处理器或翻译器的输出,是不允许的。

    1. 衍生作品

    许可证必须允许修改和衍生作品,并且必须允许它们按照与原始软件许可证相同的条款进行分发。

    1. 作者源代码的完整性

    许可证可以限制以修改形式分发源代码,仅当许可证允许分发带有源代码的“补丁文件”,以便在构建时修改程序。许可证必须明确允许分发从修改后的源代码构建的软件。许可证可以要求衍生作品使用与原始软件不同的名称或版本号。

    1. 不得歧视个人或群体

    许可证不得歧视任何个人或群体。

    1. 不得歧视应用领域

    许可证不得限制任何人在特定应用领域中使用该程序。例如,它不得限制该程序在商业中使用,或用于基因研究。

    1. 许可证的分发

    附加到程序的权利必须适用于所有重新分发程序的人,而无需这些方执行额外的许可证。

    1. 许可证不得特定于产品

    附加到程序的权利不得取决于程序是否为特定软件分发包的一部分。如果程序从该分发包中提取出来,并在程序许可证的条款范围内使用或分发,则所有重新分发程序的一方都应享有与原始软件分发包授予的权利相同的权利。

    1. 许可证不得限制其他软件

    许可证不得对与许可软件一起分发的其他软件施加限制。例如,许可证不得坚持要求在同一介质上分发的所有其他程序都必须是开源软件。

    1. 许可证必须保持技术中立

    许可证的任何条款都不得基于任何个人技术或界面风格。

    OSI(Open Source Initiative,开源促进会)基于开放软件定义(OSD)的开放认证许可证,已成为全球公认的开放软件判定标准,并通过国际组织、产业界与政府政策的采纳而确立其权威性。参见 International Authority & Recognition。

    受 OSI 认可的开源协议有:OSI Approved Licenses,严格意义上讲,只有列表中的许可证才属于开源许可证。

    关于各种软件的定义

    根据 自由与非自由软件的分类,我们定义如下:

    • 自由软件:符合上述四项基本自由定义的软件即称为自由软件。推论:商业软件可以是自由软件,商业 ≠ 非自由。引证 1:自由软件可以是商业软件;引证 2; Words to Avoid (or Use with Care) Because They Are Loaded or Confusing,“Commercial”部分

    • 开源软件:使用上述开源协议授权的软件。理论上和自由软件基本上同义,但可能存在例外

    • 专有软件/私有软件(proprietary software):即真正意义上的“非自由软件”,大部分商业软件属此类型。这是 GNU 宣言一开始真正的目标

    • 免费软件:定义模糊。其他类别的软件均可能是“免费”的,但并不一定

    • 商业软件:商业软件是由企业作为其业务的一部分所开发的软件

    推论

    • 推论 1:商业软件可以是开源软件/自由软件。反之,开源软件/自由软件也同样可以是商业软件。

    • 推论 2:商业软件形式的开源软件/自由软件可以营利(无论项目作者是不是参与此商业软件),且合规。比如我们常见的行为是淘宝商户拿开源许可的软件营利,遭到原作者的不忿。其实这种行为是合规的,只要其标注了原作者并愿意分发相应的源码(如许可证要求)。现实中对此类商家的指责,多源于公众对所采用的开源协议缺乏理解——不少人甚至未通读协议(含中文译本),从而产生误解。在遵守许可的前提下,此类营利可是合乎伦理的,尽管若只是简单搬运可能惹人不快;

    • 推论 3:商业软件不一定是私有软件或专有软件。反之,私有软件或专有软件也不一定是商业软件(如将你的个人项目无营利目的地闭源分发给你的几位朋友)。

    自由/开源软件与免费

    根据“自由度 2:用户可以自由地分发该软件的拷贝”,事实上只要阅读过 GPL 2/3 等相关开源协议,就会知道协议并未限制开源软件的营利行为。从现实出发的红帽公司就是一个典型例子。

    开源软件/自由软件 ≠ 免费。

    开源 ≠ 无版权?协议不可撤销?

    很多人会混淆开源与无版权,认为开源=无版权。这种想法在实际上存在逻辑问题:如果你没有持有版权,那么你凭什么要求别人按照你的开源协议做事?(部分人会将版权转给 GNU 协会,但仍在事实上存在版权)

    在司法实践中也存在矛盾,许多开源软件项目作者仍然被追究了法律责任,如果是无版权,那么应该追究谁的责任?

    在各国版权法中,版权是不可转让所有权利的,只能让渡一部分,让渡全部权利(包括人身权)是荒谬且存在逻辑问题的。以《中华人民共和国著作权法》为例,只有“第(五)项至第(十七)项”是可以让渡的,发表权、署名权、修改权、保护作品完整权都是无法让渡的。

    在实例中,作者永远不会受到开源协议本身的限制(除非他也引用了别人的项目),那是用来限制别人的,即使是协议的不可撤销性,在司法实践中也是无效的,并且存在过相应的判例。

    CC-BY-NC(所有版本)、CC-BY-ND(所有版本)既不自由也不开源

    根据 各类许可证及其评论,结合 OSI Approved Licenses,CC-BY-NC(所有版本)、CC-BY-ND(所有版本)等均不属于开源软件许可证或自由软件许可证,因此在该许可证授权下的项目既非传统意义上的自由软件亦非开源软件。

    原因很简单,上述协议都歧视商业用户,剥夺了商业用户的“自由”。

    此外,前项 CC 协议也不符合自由软件精神,即要求冗长的署名与声明,这种广告条款增加了项目复用时的合规成本。

    笔者注意到,不少项目虽然采用了前项 CC 协议进行授权,却依然自诩支持开源软件,拥护自由软件运动,甚至标榜自己是忠实拥趸。这一现象表明,尽管“自由软件”和“开源软件”的名号已广为人知,但其背后的理念却未必真正得到了理解与践行。

    可以获取源代码 ≠ 开源 ≠ 自由

    根据微软的 Enterprise Source Licensing Program: ESLP 协议(或者 Microsoft Reference Source License, Ms-RSL),商业用户只要购买了一定量的产品副本(并不要求多么离谱的数量或额度),即可获取其对应的源代码。

    你可以获取源代码,并且微软的限制条件仍然在表面上看似符合“自由度 1”(自由修改参见 神州网信 的 Windows 10 神州网信政府版)。

    但是你很难说这种协议是一种开源协议,在某种意义上 CC-BY-NC(所有版本)、CC-BY-ND(所有版本)其实和这种许可协议没有什么本质区别。

    法律上的商标

    4.5 命令行基础

    我是谁?

    • 查看当前登录系统的用户名:

    • 查看当前登录用户用户组相关

    5.5 使用 Ports 以源代码方式安装软件

    Ports 与 Port 概述

    Ports 历史

    Ports 是一种简单的从源代码(也支持闭源的二进制包)构建软件的框架。由 Jordan K. Hubbard([email protected])创建,最初在公众面前出现于 1994 年 8 月。

    “提交了我为 ports 编写的新 Make 宏。虽然还远未完全完善,但目前已经可以较为正常的使用了。”

    $ vncserver :0
    
    
    Warning: ykla:0 is taken because of /tmp/.X11-unix/X0
    Remove this file if there is no X server ykla:0
    A VNC server is already running as :0
    192.168.31.187:5901
    # pkg install x11vnc
    # cd /usr/ports/net/x11vnc/
    # make install clean
    $ x11vnc -storepasswd
    Enter VNC password: 
    Verify password:    
    Write password to /root/.vnc/passwd?  [y]/n y #此处键入 y 回车
    Password written to: /root/.vnc/passwd
    $ x11vnc -display :0 -rfbauth ~/.vnc/passwd -auth $(find /var/run/sddm/ -type f)
    $ x11vnc -display :0 -rfbauth ~/.vnc/passwd -auth /var/run/lightdm/root/\:0
    $ x11vnc -display :0 -rfbauth ~/.vnc/passwd -auth /var/lib/gdm/:0.Xauth #或 /run/user/120/gdm/Xauthority,取决于你的 gdm 版本,自己 ls 看一下
    # pkg install tigervnc-server
    # cd /usr/ports/net/tigervnc-server/ 
    # make install clean
    $ mkdir -p ~/.vnc/
    $ ee ~/.vnc/xstartup
    #!/bin/sh
    unset SESSION_MANAGER
    unset DBUS_SESSION_BUS_ADDRESS
    [ -x /etc/X11/xinit/xinitrc ] && exec /etc/X11/xinit/xinitrc
    [ -f /etc/X11/xinit/xinitrc ] && exec sh /etc/X11/xinit/xinitrc
    xsetroot -solid grey
    #exec startplasma-x11 & 
    #exec mate-session &
    #exec xfce4-session &
    #exec gnome-session & 
    $ chmod 755 ~/.vnc/xstartup
    $ vncserver
    $ vncserver :1
    
    You will require a password to access your desktops.
    
    Password: # 注意,密码最少六位数!
    Verify:
    Would you like to enter a view-only password (y/n)? n
    A view-only password is not used
    
    New 'ykla:1 (ykla)' desktop is ykla:1
    
    Creating default config /home/ykla/.vnc/config
    Starting applications specified in /home/ykla/.vnc/xstartup
    Log file is /home/ykla/.vnc/ykla:1.log
    $ ps
     PID TT  STAT    TIME COMMAND
    ……省略无用内容……
    4769  0  S    0:02.72 /usr/local/bin/Xvnc :1 -auth /home/ykla/.Xauthority -desktop ykla:1 (ykla)
    # ipfw add allow tcp from any to me 5900-5910 in keep-state
    # pkg install xorg kde xrdp wqy-fonts xdg-user-dirs pulseaudio-module-xrdp
    # cd /usr/ports/x11/xorg/ && make install clean
    # cd /usr/ports/x11/kde/ && make install clean
    # cd /usr/ports/net/xrdp/ && make install clean
    # cd /usr/ports/x11-fonts/wqy/ && make install clean
    # cd /usr/ports/devel/xdg-user-dirs/ && make install clean
    # cd /usr/ports/audio/pulseaudio-module-xrdp && make install clean
    root@ykla:/usr/ports/net/xrdp # pkg info -D xrdp
    xrdp-0.10.2_2,1:
    On install:
    xrdp has been installed.
    # xrdp 已成功安装。
    
    There is an rc.d script, so the service can be enabled by adding this line
    in /etc/rc.conf:
    
    xrdp_enable="YES"
    xrdp_sesman_enable="YES"
    # 提供了 rc.d 启动脚本,可通过在 /etc/rc.conf 中添加以上两行启用服务。
    # 第一个启动 xrdp 主服务,第二个启动会话管理器(sesman)。
    
    Do not forget to edit the configuration files in "/usr/local/etc/xrdp"
    and the "/usr/local/etc/xrdp/startwm.sh" script.
    # 别忘了编辑 /usr/local/etc/xrdp 下的配置文件,
    # 以及修改 /usr/local/etc/xrdp/startwm.sh 来设置登录后启动的桌面环境。
    
    To enable audio redirection, install the following ports/packages to meet
    your environment.
    # 如需启用音频重定向(远程桌面声音传输),请根据你的系统环境安装以下软件包:
    
    - audio/pipewire-module-xrdp
    - audio/pulseaudio-module-xrdp
    # 上述为支持 xrdp 音频的模块,可根据你使用的音频系统选择安装。
    # service xrdp enable 
    # service xrdp-sesman enable 
    # service dbus enable
    #### start desktop environment
    # exec gnome-session # Gnome 须删除此处开头的 #
    # exec mate-session # mate 须删除此处开头的 #
    # exec start-lumina-desktop # lumina 须删除此处开头的 #
    # exec ck-launch-session startplasma-x11 # KDE6 须删除此处开头的 #
    # exec startxfce4                        # xfce 须删除此处开头的 #
    # exec xterm                             # xterm 须删除此处开头的 #
    # ee /usr/local/etc/xrdp/startwm.sh
    #### set environment variables here if you want
    export LANG=zh_CN.UTF-8
    root@ykla:/usr/ports/deskutils/anydesk # sockstat -4l
    USER     COMMAND    PID   FD  PROTO  LOCAL ADDRESS         FOREIGN ADDRESS      
    root     Xvnc        2585 4   tcp4   127.0.0.1:5910        *:*  #VNC 占用
    root     xrdp        2580 13  tcp46  *:3389                *:*  #XRDP 占用
    root     Xvnc        2016 5   tcp4   *:5901                *:*  #VNC 占用
    root     sshd        1164 4   tcp4   *:22                  *:*  #SSH 占用
    ntpd     ntpd        1127 21  udp4   *:123                 *:* 
    ntpd     ntpd        1127 24  udp4   127.0.0.1:123         *:*
    ntpd     ntpd        1127 26  udp4   192.168.31.187:123    *:*
    root     syslogd     1021 7   udp4   *:514                 *:*
    # pkg ins freerdp3
    # cd /usr/ports/net/freerdp3/ 
    # make install clean
    ykla@ykla:~ $ xfreerdp3 /u:ykla /p:z  /v:192.168.31.213
    
    ……省略一部分……
    441] [19244:dca12700] [ERROR][com.freerdp.crypto] - [tls_print_new_certificate_warn]: Host key verification failed.
    Certificate details for 192.168.31.213:3389 (RDP-Server):
            Common Name: DESKTOP-U72I6SS
            Subject:     CN = DESKTOP-U72I6SS
            Issuer:      CN = DESKTOP-U72I6SS
            Valid from:  Mar  4 12:39:28 2025 GMT
            Valid to:    Sep  3 12:39:28 2025 GMT
            Thumbprint:  36:b9:be:66:ab:2b:54:32:28:46:b6:98:68:8d:6f:20:a5:d1:58:8c:09:de:cc:3d:30:e1:06:6f:4f:62:54:de
    The above X.509 certificate could not be verified, possibly because you do not have
    the CA certificate in your certificate store, or the certificate has expired.
    Please look at the OpenSSL documentation on how to add a private CA to the store.
    Do you trust the above certificate? (Y/T/N) y # 输入 y 按回车键以确认链接
    
    # pkg ins freerdp
    # cd /usr/ports/net/freerdp/ 
    # make install clean
    ykla@ykla:~ $ xfreerdp 192.168.31.213 # 注意是 xfreerdp。
    [20:35:20:041] [1105:7c412000] [WARN][com.freerdp.client.common.cmdline] - ----------------------------------------
    ……省略一部分……
    Certificate details for 192.168.31.213:3389 (RDP-Server):
            Common Name: DESKTOP-U72I6SS
            Subject:     CN = DESKTOP-U72I6SS
            Issuer:      CN = DESKTOP-U72I6SS
            Thumbprint:  36:b9:be:66:ab:2b:54:32:28:46:b6:98:68:8d:6f:20:a5:d1:58:8c:09:de:cc:3d:30:e1:06:6f:4f:62:54:de
    The above X.509 certificate could not be verified, possibly because you do not have
    the CA certificate in your certificate store, or the certificate has expired.
    Please look at the OpenSSL documentation on how to add a private CA to the store.
    Do you trust the above certificate? (Y/T/N) y # 输入 y 回车
    Domain:   # 留空
    Password: # 输入密码,密码不会显示出来 ***。
    ……省略一部分……
    # pkg install rdesktop
    # cd /usr/ports/net/rdesktop/
    # make install clean
    # rdesktop ip:端口 # 比如 192.168.31.155:3389
    ykla@ykla:~ $ rdesktop 192.168.31.213
    Failed to connect, CredSSP required by server (check if server has disabled old TLS versions, if yes use -V option).
    PS C:\Users\ykla> reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0 /f
    操作成功完成。
    PS C:\Users\ykla> gpupdate /force
    正在更新策略...
    
    计算机策略更新成功完成。
    用户策略更新成功完成。
    ykla@ykla:~ $ rdesktop 192.168.31.213
    
    ATTENTION! The server uses and invalid security certificate which can not be trusted for
    the following identified reasons(s);
    
     1. Certificate issuer is not trusted by this system.
    
         Issuer: CN=DESKTOP-U72I6SS
    
    
    Review the following certificate info before you trust it to be added as an exception.
    If you do not trust the certificate the connection atempt will be aborted:
    
        Subject: CN=DESKTOP-U72I6SS
         Issuer: CN=DESKTOP-U72I6SS
     Valid From: Tue Mar  4 20:39:28 2025
             To: Wed Sep  3 20:39:28 2025
    
      Certificate fingerprints:
    
           sha1: 599c0e8bbc57c5ee8de8993d5241fb0f0d70e98d
         sha256: 36b9be66ab2b54322846b698688d6f20a5d1588c09decc3d30e1066f4f6254de
    
    
    Do you trust this certificate (yes/no)? # 输入 yes,按回车键
    # cd /usr/ports/deskutils/anydesk/
    # make install clean
    root@ykla:/ # pkg info -D anydesk
    anydesk-6.1.1_2:
    On install:
    1. Minimum OS version.
    ======================
    Anydesk is a binary package for FreeBSD.
    Minimal recommended is 1 GiB system memory
    installed but performence will be reduced.
    For good performance is recommended and 2 GiB
    system memory.
    # Anydesk 是适用于 FreeBSD 的二进制软件包。
    # 最低推荐内存为 1 GiB,但这将导致性能下降。
    # 若要获得良好性能,建议至少配备 2 GiB 系统内存。
    
    2. Important settings
    =====================
    Since Version 2.9.1 the following prerequisites have to be met:
    # 从 2.9.1 版本起,必须满足以下前提条件:
    
    You need a mounted /proc directory. Either mount it manually or add it to your /etc/fstab file:
    # 需要挂载 /proc 目录,可手动挂载,或将其写入 /etc/fstab 以便开机自动挂载:
    
     fstab: proc /proc procfs rw 0 0
    # 在 /etc/fstab 中添加此行以启用 procfs。
    
     manually: # mount -t procfs proc /proc
    # 或者手动执行此命令来挂载 proc 文件系统。
    # mount -t procfs proc /proc # 临时用一下。持久化可以参照上面的说明做
    $ ykla@ykla:~ $ anydesk
    
    (<unknown>:18311): Gtk-WARNING **: 21:07:13.540: 无法在模块路径中找到主题引擎:“adwaita”,
    
    ……省略一部分……
    # pkg install rustdesk-server
    # cd /usr/ports/net/rustdesk-server/ 
    # make install clean
    root@ykla:~ # /usr/local/bin/hbbs
    [2024-08-10 23:02:13.782550 +08:00] INFO [src/common.rs:122] Private key comes from id_ed25519
    [2024-08-10 23:02:13.782587 +08:00] INFO [src/rendezvous_server.rs:1191] Key: mgRwOWJy9Vnz3LqQYjtNHwZQYg73uhdj9iCTMmIyoP4=  #此处是 Key
    [2024-08-10 23:02:13.782655 +08:00] INFO [src/peer.rs:84] DB_URL=./db_v2.sqlite3
    [2024-08-10 23:02:13.786349 +08:00] INFO [src/rendezvous_server.rs:99] serial=0
    [2024-08-10 23:02:13.786381 +08:00] INFO [src/common.rs:46] rendezvous-servers=[]
    [2024-08-10 23:02:13.786388 +08:00] INFO [src/rendezvous_server.rs:101] Listening on tcp/udp :21116
    [2024-08-10 23:02:13.786391 +08:00] INFO [src/rendezvous_server.rs:102] Listening on tcp :21115, extra port for NAT test
    [2024-08-10 23:02:13.786395 +08:00] INFO [src/rendezvous_server.rs:103] Listening on websocket :21118
    [2024-08-10 23:02:13.786430 +08:00] INFO [libs/hbb_common/src/udp.rs:35] Receive buf size of udp [::]:21116: Ok(42080)
    [2024-08-10 23:02:13.786581 +08:00] INFO [src/rendezvous_server.rs:138] mask: None
    [2024-08-10 23:02:13.786594 +08:00] INFO [src/rendezvous_server.rs:139] local-ip: ""
    [2024-08-10 23:02:13.786603 +08:00] INFO [src/common.rs:46] relay-servers=[]
    [2024-08-10 23:02:13.786703 +08:00] INFO [src/rendezvous_server.rs:153] ALWAYS_USE_RELAY=N
    [2024-08-10 23:02:13.786734 +08:00] INFO [src/rendezvous_server.rs:185] Start
    [2024-08-10 23:02:13.786793 +08:00] INFO [libs/hbb_common/src/udp.rs:35] Receive buf size of udp [::]:0: Ok(42080)
    [2024-08-10 23:09:11.043094 +08:00] INFO [src/peer.rs:102] update_pk 1101115918 [::ffff:192.168.31.90]:37057 b"\x06\xef\x81\xb4\xe2\x9e\xff(\xcb\xd7\x985S\x95)~1O\xe2\xfcu\xeeE\x91\xf1\xf2\xa1\xbe\rk\xcd\xc1" b"\x06\xef\x81\xb4\xe2\x9e\xff(\xcb\xd7\x985S\x95)~1O\xe2\xfcu\xeeE\x91\xf1\xf2\xa1\xbe\rk\xcd\xc1" #代表设备接入
    ^C[2024-08-10 23:10:06.746255 +08:00] INFO [src/common.rs:176] signal interrupt
    root@ykla:~ # /usr/local/bin/hbbr
    [2024-08-10 22:58:26.593397 +08:00] INFO [src/relay_server.rs:61] #blacklist(blacklist.txt): 0
    [2024-08-10 22:58:26.593439 +08:00] INFO [src/relay_server.rs:76] #blocklist(blocklist.txt): 0
    [2024-08-10 22:58:26.593445 +08:00] INFO [src/relay_server.rs:82] Listening on tcp :21117
    [2024-08-10 22:58:26.593449 +08:00] INFO [src/relay_server.rs:84] Listening on websocket :21119
    [2024-08-10 22:58:26.593452 +08:00] INFO [src/relay_server.rs:87] Start
    [2024-08-10 22:58:26.593546 +08:00] INFO [src/relay_server.rs:105] DOWNGRADE_THRESHOLD: 0.66
    [2024-08-10 22:58:26.593556 +08:00] INFO [src/relay_server.rs:115] DOWNGRADE_START_CHECK: 1800s
    [2024-08-10 22:58:26.593559 +08:00] INFO [src/relay_server.rs:125] LIMIT_SPEED: 4Mb/s
    [2024-08-10 22:58:26.593564 +08:00] INFO [src/relay_server.rs:136] TOTAL_BANDWIDTH: 1024Mb/s
    [2024-08-10 22:58:26.593567 +08:00] INFO [src/relay_server.rs:146] SINGLE_BANDWIDTH: 16Mb/s
    ^C[2024-08-10 23:10:04.393365 +08:00] INFO [src/common.rs:176] signal interrupt
    +-----------------------------------------+
    |               应用程序层                |
    |  (浏览器/办公软件/开发工具/数据库等)      |
    +-----------------------------------------+
    |             图形界面(可选)             |
    |       (GNOME █ KDE █ XFCE 等)           |
    +-----------------------------------------+
    |           核心系统工具层                 |
    |  █ GNU 基础工具 (bash/gcc/glibc 等)      |
    |  █ 包管理器 (apt/yum/pacman 等)          |
    |  █ 初始化系统 (systemd/OpenRC 等)        |
    +-------------------+---------------------+
    |                   |   狭义的 Linux       |
    |    Linux 内核层   +---------------------+
    |                   | (直接控制硬件的中枢)  |
    +-------------------+---------------------+
    |                   硬件层                 |
    |    (CPU █ 内存 █ 硬盘 █ 网卡 █ 外设)      |
    +-----------------------------------------+
    SDDM VNC

    查看当前用户登录的中断及本次登录时间

    • 展示当前有哪些用户已登录,并且他们在干什么

    • 查看当前所在路径

    pwd 即 print work directory,打印工作目录

    账户切换与退出登录

    • ① 使用 su空格用户名 可以切换到用户 ykla,从 root 切换的话,不需要输入 ykla 的密码:

      • root@ykla:/:

        • root:当前用户是 root

        • @ “谁” 在 “xx”主机上

        • ykla:这里是主机名,和用户 ykla 无涉。你可以随便起不一样的主机名

        • :/:代表当前在 / 路径下

    • ② 注意到提示符号的变化没有?root 是 #,普通用户是 $(csh 是 %)

    • ③ 如果只是单纯 su 回车,命令的意思是从当前用户切换到 root 账户(如果已经是 root,则不会有任何反应)。但是你必须是 wheel 组的成员才能进行此操作,否则会报错 sorry。

    • ④ 从普通用户切换到 root,要输入的密码是 root 账户的登录密码。

    • ⑤ 输入 exit 可退出当前用户,如果是唯一登录的用户,将退出登录到 TTY

    思考题

    ⑥、⑦ 分别切换到了哪些用户或执行了哪些操作?

    命令行格式

    大部分命令行命令都应是有意义的,例如 ls 即 list(列出来)、wget 即通过 web(网络)来 get(下载);罕有一些见名不知意的命令,比如 fuck 命令(可自动纠正拼写错误的命令)。

    其中,ls(L 小写)意味着列出当下目录或指定目录下的文件;选项 -l(L 小写)意味着打印详细信息,输出长(long)的格式。

    现在,大部分命令均应遵从上面的方式(有所省略)。这是 POSIX.1-2024 规范所规定的。

    我们需要注意英文和中文是不同的,中文行文间不使用空格进行分割,而英文单词必须使用空格以示分别。故,命令行的每个部分中间应该有空格,即 。空格的数量一般不受限制,但最少应该为一个,即 。

    思考题

    如果不使用空格或某种方式(例如其他符号)对命令行进行分隔,那么软件该如何理解整个句子?

    如果不加空格,从自然语言角度,从人类视角看这句话 Whatwelovedeclarespubliclywhoexactlyweare. 会是怎样的体验?

    换成:ls-l/home/ykla/tmp、ls/ 呢?

    可以看到,shell 会将整个句子当成一个可执行的命令去执行。

    我们还需要知道,命令是不具有自动纠错功能的,哪怕只是打错了一个字母,少了一个数字,命令也绝不会执行成功:

    技巧

    Windows 不仅文件大小写不敏感,命令的大小写也不敏感。

    技巧

    命令后面 # 是什么意思?# 在 shell 当中一般是起注释作用(由 POSIX.1-2024 规定),相当于 C 语言里面的 //。意味着后边的文字只起到说明作用,不起实际作用。

    thefuck:自动纠正错误拼写的命令

    安装 thefuck

    使用 pkg

    或者 ports

    配置 thefuck

    查看安装后配置信息

    我们打开网页浏览。发现要把 eval $(thefuck --alias) 加入到 ~/.bash_profile(bash shell)、~/.bashrc(bash shell)或 ~/.zshrc(zsh shell)。

    我们 FreeBSD 默认使用的是 sh,故将:

    写入 ~/.shrc,请勿使用 >> 重定向,请手动编辑加入。

    刷新环境变量:

    技巧

    根据作者信息,若不喜欢输入 fuck,还可以使用其他别名:若更改为 eval $(thefuck --alias abc),则下方所有 fuck 命令都会被换成 abc。

    测试使用 thefuck

    再试试:

    命令的执行与中断

    与 Windows 以及图形化界面的软件不同,绝大部分命令行程序在执行中是不会有任何进度提示的。通常只有以下两个结果:

    • 成功执行:

    • 执行中断:

    执行中断有很多可能的情形,以上只是其中一种(指定的文件或目录不存在)。

    可以看到,只有当执行中断时,命令行才会有提示;若执行完毕,是不会有任何提示的。这种 Unix 设计哲学旨在保证终端输出的简洁性。

    shell 命令的来源

    Linux

    在 Linux 中,所有命令基本上都是来自 GNU 软件包的,Linux 内核没有任何命令。我们来验证这一点:

    可见在 Linux 中,这些常见命令一般出自 GNU 软件 coreutils、util-linux 或 procps。这些软件在历史上是 GNU 计划对 UNIX 软件的再实现。

    同时,shell 本身也内置了一些命令:

    列出所有 shell 内置的命令:

    FreeBSD

    在 FreeBSD 中,除了上述 shell 内置命令外(参见 sh(1)),常用命令都是基本系统自带的,不属于任何一个包。比如 ls 命令,其源代码位于 freebsd-src/bin/ls/。可见 FreeBSD 系统是一个有机整体。并非由不同人员或团队维护的软件包拼凑而成的。

    如果你配置了 pkgbase,则输出类似:

    如果缺少了哪个命令,一般可以通过安装相应的软件包来获取,比如 lspci 命令,来自软件包 sysutils/pciutil。但是也有很多命令存在 Linux 主义问题,不兼容其他操作系统,比如 ip 命令,来自 GNU 软件包 iproute2。

    常用命令

    cd 命令

    cd(change working directory,更改工作目录)

    切换到 /home

    ls 命令

    ls(list,列出)命令的基本用法上面已经介绍过了,下面试着让 ls 以人类易读的方式列出文件大小:

    选项 -h,即 human(人类),须与 -l(long 长输出)结合使用。

    在 UNIX 系统中,以 . 开头的文件或目录(如上面的 .XIM-unix)都是隐藏的。你的安卓手机也是一样的——你可以通过 MT 文件管理器 自行查看一下。

    而选项 -a 可以显示出来隐藏的目录或文件:

    思考题

    根据上面的输出,思考:上面的 .、.. 分别代表什么?

    试试不加选项 -a 呢?

    则不会显示隐藏文件。

    技巧、

    请以普通用户进行测试,因为 FreeBSD 的 root shell 总是显示隐藏文件的。

    touch 创建文件命令

    touch 即触碰,意为轻微变动。

    创建一个文件,叫 test:

    技巧

    你可以看到我是创建了 test,而不是叫什么 test.txt、test.word、test.pdf 之类的。事实上,.txt 这部分我们称为后缀名,此部分主要是给人看的,并非机器。许多我们以为的清楚明白的事物真的如我们所认为的那般吗?

    即使我们去掉相应的后缀名,在类 UNIX 中也可以识别文件的类型,这是根据文件幻数(magic numbers)确定的:

    可以一次性使用多个参数创建多个文件(类似用法几乎是通用的,不再赘述):

    mkdir 创建目录

    mkdir 即 make directories,创建目录

    创建一个目录,叫 ykla

    如果文件已存在


    如果要创建目录 ykla/ykla1/ykla2/ykla3 呢?

    报错如上,此时需要参数 -p,p 是英文 parents(父)的意思,即若上级目录不存在,则一并创建之。

    rm 删除命令

    警告

    FreeBSD 命令行界面是没有回收站的,所有命令一经执行不可撤销。命令行操作 rm 是比较危险的。

    rm 即英文 remove 的缩写,即删除。


    删除文件 test

    若不存在一个叫 test 的文件:


    删除路径 /home/ykla/test

    • 若目录为空(不含任何文件,只是空目录)

    还可以用命令 rmdir(remove directory,即删除目录,且只能删除空目录):

    • 若目录不为空

    使用参数 -r(recursively)递归、和参数 -f(force)强制删除:

    技巧

    什么是递归?

    “从前有座山,山上有座庙,庙里有个老和尚在给小和尚讲故事。老和尚说:“从前有座山,山上有座庙……”这就是递归的实例。

    在该操作中,意为先进入 /home/ykla/test/ 下的最深层的子目录(如有),删除其文件和子目录自身;然后向上重复操作。直至删除 /home/ykla/test/。即使用深度优先搜索算法(Depth-First-Search,DFS)。

    警告

    使用 rm -rf 是相当危险的操作,是不可撤销的。试想,上述命令若 /home/ykla/test/ 打错成了 /home/ykla /test/(多了个空格),会造成什么后果?

    警告

    网上经常有人说使用 sudo rm -rf /* 是某某命令可以 xxx,误导他人对系统造成不可挽回的灾难性破坏。该命令实质上是以 root 权限(还好 FreeBSD 默认没有 sudo),删除 / 及其子目录下的一切存在。让我来展示一下:

    重启后你会发现连引导都没了。

    思考题

    你是否对上面“root 是 UNIX 中的最高权限”这句话有了更深刻的体会?这是否说明了权力和责任的一致性?如果滥用权力,不仅会伤害他人,最后也会致使自己失去存在的现实性。

    mv 移动/重命名命令

    mv 即英文 move 的缩写,即移动。


    将文件 test 移动到 /home/ykla:

    将目录及子目录移动到 /home/ykla


    • 重命名

    将 test5.pdf 重命名为 test5.txt

    将 test2 重命名为 test2.pdf

    cp 复制命令

    cp 即英文 copy 的缩写,意为复制。


    将文件 test 复制到 /home/ykla

    末尾的 / 很重要,如果缺少了末尾的 /,且子目录 ykla 不存在的话, test 会被重命名为 ykla(ykla 在设想中本应是个目录):

    若缺少了末尾的 /:

    思考题

    其他命令有没有类似的问题?请你试一试。


    在复制文件的同时修改其文件名及后缀:

    该命令通常用于备份配置文件。


    复制目录及子目录:

    可见直接复制是不行的,提示是目录不是文件。

    我们需要选项 -r。r 是英文 recursively(递归)的意思:

    通配符 *

    有时操作需要全选,可以使用通配符 *。

    • 删除所有文件名以 test 打头的文件:

    可以看到,不会处理目录。

    • 删除所有文件名以 test 打头的文件和 目录:

    • 删除所有文件和 目录:

    逻辑运算符 &&

    &&(逻辑与,AND):只有 && 之前的命令执行成功了,后边的命令才会执行;否则如果 && 之前的命令执行失败了,后面的命令就不会执行。

    简单理解:你得先做饭才能吃饭,然后才能刷锅——> 做饭 && 吃饭 && 刷锅。如果你没有做饭,自然谈不上怎么吃饭,更遑论刷锅了。

    使用场景:执行一连串有依赖关系的命令。比如你得先刷新软件源才能更新系统,然后才能重启。以 Ubuntu 为例:sudo apt update -y && sudo apt upgrade -y && sudo reboot。只有前面的命令执行成功,方才会执行后面的命令

    逻辑运算符 ||

    ||(逻辑或,OR):只有 || 之前的命令执行错误了,后边的命令才会执行;否则如果 || 之前的命令执行成功了,后面的命令就不会执行。

    简单理解:你要么做饭,要么点外卖,要么出去吃——> 做饭 || 点外卖 || 出去吃。如果你不会做饭,你就只能点外卖了,如果外卖没有好吃的,你就只能出去吃了。

    使用场景:如果一个命令一直执行失败,但是你偏要他一直执行。你就可以写很多的 ||,防止一次失败后反复手动再次执行该命令,比如:

    当一次 make BATCH=yes install 失败后仍然会执行下一个 make BATCH=yes install。即之前的命令执行失败了,转而执行后面的命令……

    技巧

    && 和 || 的优先级相同,并且从左到右执行。

    思考题

    touch a.txt && touch b.txt || touch c.txt || reboot 是什么意思?

    如果 touch a.txt 失败了会执行后面的哪个操作?

    BSD 风格的 make/grep/sed/awk

    FreeBSD 的 make/grep/sed/awk 与 GNU 那套有所不同。详见 man 手册。

    示例:

    必须加一个空的参数'',不能省略。

    关机与重启

    ​FreeBSD 和 Linux 的 shutdown 命令在语法和行为上有一些重大差异,如果你有使用 Linux 的经验,那么是不能照抄的。

    FreeBSD 的设计更接近传统 UNIX 的行为。

    关机:

    • 使用 shutdown now 将不会关机,而是切换到“单用户模式”,将提示:Enter full pathname of shell or RETURN for /bin/sh : 回车后进入单用户模式;

    • 使用 shutdown -h now 将不会彻底断电,只会停止系统的运行,将提示:The operating system has halted. Please press any key to reboot. 此处按任意键可重启系统;

    • 正确的关机并断电命令是 poweroff,等同于命令 shutdown -p now。

    重启:

    • 重启命令和 Linux 一致,都是 reboot,但是参数不通用。

    • 在 FreeBSD 下 roboot 等同于 shutdown -r now

    注意

    关机与重启都需要 root 权限才能执行。

    技巧

    我们可以看到:对于一个开源项目,无论使用的何种版本控制系统,保留完整的提交记录,是多么地重要。读者慢慢就会发现,这不仅仅是考古上的意义。

    NetBSD 和 OpenBSD 也使用 Ports(不通用)。

    参考文献

    • [FreeBSD-Ports-Announce] Happy 20th birthday FreeBSD ports tree!,2014 庆祝 Ports 20 年,文中还有个庆祝视频。

    Ports 与 Port 释义

    一款软件的相关文件或文件夹的(补丁文件、校验码、Makefile 等)集合(表现为一个文件夹)为一个 Port,所有 Port(移植软件)的集合即 Ports Collection 或 Ports Tree,即 Ports。

    • ① /usr/ports 这个文件夹整体称作 Ports,包括几十种不同的分类目录,每个目录下有若干 Port。

    • ② /usr/ports/databases/postgresql18-server 这个文件夹整体称作一个 Port,由 distinfo(校验和文件)、pkg-descr(软件描述文件)、Makefile(主文件,里面有构建方法和版本号及下载方式等)pkg-plist(安装的每个文件的列表清单文件及文件权限属组等)files(一般是补丁,该 Port 下为安装后的说明文件 pkg-message)等文件构成。

    之所以叫做“Ports Collection”,移植集合(不应理解为端口集合,参见 What does 'port' mean in 'develop a port of BSD'?,注:此来源不可信,请求其他来源)是因为这些软件绝大部分都不由 FreeBSD 控制、管理、和维护,Port 提交者主要做的事情是将 FreeBSD 上 Port 更新到上游开发者提供的最新版本,删除上游不再维护的软件 Port。在上游不接受 BSD 特有的 PR 补丁或难以直接通过既有 Ports 框架实现构建的情况下,Port 维护者也需要自行复刻一个分支出来维护(如 editors/vscode)。

    Ports 构建 pkg 软件包的流程

    注意

    ports 和 pkg 可以同时使用,而且大部分人也是这么用的。但是要注意 pkg 的源必须是 latest,否则会存在一些依赖上的问题(比如 ssl)。latest 的源也比 main 上的 ports 要出来的晚(是从 main 编译出来的),因此即使是 latset 源也可能会出现上述问题,总之有问题出现时就卸载那个 pkg 安装的包,重新使用 ports 编译即可。

    警告

    需要对上面的“注意”进行补充说明的是:一旦你使用了 make config 修改了 Port 的默认构建参数(进行了自定义),那么如果你仍然想保留该设置,后续的软件更新是不能通过 pkg 进行管理的,否则通过 pkg 安装的软件包会完全取代之前自定义的 Port(即 Port 开发者默认设定的构建参数将覆盖你自定义的 Port 参数)。

    Ports 流程图

    技巧

    ports 下载路径是 /usr/ports/distfiles/。

    使用 ports 压缩包

    使用压缩包成功地规避了先有鸡还是先有蛋的哲学问题(要安装 Git 但是没有 Ports 也不想用 pkg 的话)。

    下载 ports 压缩包

    • NJU:

    • 或 USTC

    • 又或 FreeBSD 官方

    解压 ports 压缩包

    使用 Git 获取 Ports

    安装 Git

    • 使用 pkg 安装:

    拉取 Ports 存储库(USTC)浅克隆

    拉取 Ports 存储库(FreeBSD 官方)浅克隆

    完全拉取 Ports 存储库(FreeBSD 官方)并指定分支

    查看所有分支:

    切换到 2025Q1 分支:

    查看本地分支:

    已经切换成功。

    同步更新 Ports Git

    如果提示本地已经修改,放弃本地修改,再更新:

    附录:时间错误导致的证书无效

    先检查时间:

    时间错误。校对时间:

    检查时间:

    使用 whereis 查询软件路径

    如

    将输出

    查看依赖

    已经安装:

    未安装:

    看看 python 的 ports 在哪

    安装 python3

    其中 BATCH=yes 意味着使用默认参数进行构建。

    如何设置全部所需的依赖

    如何使用 pkg 安装依赖

    不使用 Ports 来编译依赖,仅使用 Ports 来编译软件包本体:

    以 chinese/fcitx 为示例:

    如何删除当前 port 及其依赖的配置文件

    如何一次性下载所有需要的软件包

    ports 编译的软件也可以转换为 pkg 包

    更新 FreeBSD 软件包/Port

    先同步更新 Ports Git。

    然后列出过时 Port 软件:

    下边分别列出 2 种 FreeBSD 手册中提及的升级工具:

    ① portmaster(推荐)

    • 更新:

    如果不想回答问题解决依赖,可使用类似 BATCH=yes 的选项 -a -G --no-confirm:

    查看依赖关系

    ② portupgrade

    参考资料

    • portmaster -- manage your ports without external databases or languages

    • portupgrade, portinstall -- tools to upgrade installed packages or in- stall new ones via ports or packages

    FreeBSD USE

    • 如何全局屏蔽 mysql

    完整的列表见 https://cgit.freebsd.org/ports/tree/Mk/bsd.default-versions.mk

    FreeBSD ports 多线程编译

    将以下内容写入 /etc/make.conf,没有就 touch 新建一个。

    Linux 如 Gentoo 上一般是直接 -jx 或者 jx+1, x 为核心数。

    4 是处理器核心数(还是线程数?)。

    可以通过命令查询:

    或者:

    输出值即为 MAKE_JOBS_NUMBER 值。

    英特尔的处理器搜索 CPU 型号+ARK 转跳英特尔官网可查询线程数。

    • 个别情况下可以设置别名加速编译:(非永久设置,FreeBSD 14 无须设置默认即生效)

    参考资料

    • Easy way to get cpu features,获取 CPU 线程数量的命令来自此处。

    设置内存为 tmp

    写入:

    reboot 重启即可。

    参考资料

    • tmpfs --in-memory file system

    ccache

    警告

    使用 ccache 可能会导致编译失败!只在重复编译时起效果,首次编译不仅不会加速还会慢上一些。是一种以空间换时间的行为。

    ccache3

    使用 pkg 安装:

    • 使用 Ports 安装:

    • 查看软链接情况:


    • 修改 /etc/make.conf,加入下面一行:

    • 设置编译缓存最大为 10GB:

    • 在 Ports 编译一段时间后:

    ccache4

    目前最新版本是 ccache4:

    使用 pkg 安装:

    或使用 Ports 安装:

    • 查看软链接情况:


    • 修改 /etc/make.conf,加入下面一行:

    • 设置编译缓存最大为 20GB:

    • 在 Ports 编译一段时间后,查看编译缓存:

    查看当前配置文件:

    参考文献

    • ccache-howto-freebsd.txt.in

    • ccache -a fast C/C++ compiler cache

    多线程下载

    axel

    安装:

    或者

    新建或者编辑 /etc/make.conf 文件,写入以下几行:

    wget2

    新建或者编辑 /etc/make.conf 文件,写入以下几行:

    • -c 断点续传;

    • -t 3 重试次数 3;

    • -o 10 启用 10 个线程进行下载。

    技巧

    10 这个参数可能过于保守。但是要注意很多服务器不支持较多线程同时下载。同时会给服务器带来较大压力。

    参考文献

    • ports --contributed applications,FETCH_CMD 的出处,同时也是参数 BATCH 的出处。

    故障排除与未竟事宜

    autoconf-2.72 Invalid perl5 version 5.42.

    也可以理解为“xxx-yy Invalid zz version aa”式报错。

    实例,在使用 Ports 安装 openjdk21 时报错如下:

    观察整个流程可以发现,openjdk21 依赖 autoconf,但系统中没有。于是递归查找 autoconf 的依赖,发现 autoconf 依赖 perl5;结合 ② 可以发现系统中已有 perl5,但是报错“Invalid version”,即 perl5 的版本不对。

    此问题,一般需要先更新 Ports,然后再通过 pkg install -f perl5 或 pkg upgrade 来更新一下 perl5 的版本即可解决。

    参考文献

    • Invalid perl5 version 5.32,同样的问题

    编辑日志

    2025 年第四季度

    • 2025.12.13

      • 重写“7.2 IceWM”

      • “10.3 Mihomo(Clash)”新增“RC 脚本”。已向 Ports 维护者发出请求合并(),但未予回应。

      • 将“4.10 文件系统的挂载和卸载”、“4.11 磁盘结构”合并到“4.10 文件系统基础”

      • 将“4.12 目录结构”拆分到“4.11 系统目录结构”和“24.6 FreeBSD 源代码目录结构”

    • 2025.12.8

      • “5.1 FreeBSD 镜像站现状”新增“拒绝开放的可能性原因分析”

    • 2025.12.7

      • 完全重写:“25.5 更新 ZFS 的 zpool”

      • 完全重写:“5.7 使用 freebsd-update 更新 FreeBSD”。注:在使用 freebsd-update 从 14.3 或更低版本进行更新时,必须先更新到最新的补丁版本再进行大版本间的更迭。否则会挂。方法:freebsd-update fetch && freebsd-update install 参见 和

    • 2025.12.6

      • 将“5.9 使用 pkgbase 更新 FreeBSD”完全重写为“5.9 使用 ZFS 启动环境更新 FreeBSD 并实现多版本共存”

    • 2025.12.5

      • 新增 ZFS 脚本,可用于查看、创建、删除、恢复 ZFS 快照。

      • 同时将 ZFS 脚本部署到了 ,方便直接 fetch 下载使用

      • “25.4 ZFS 启动环境”新增“附录:多版本/系统共存的 ZFS 版本问题”

    • 2025.12.4

      • “9.4 触摸板与键鼠”新增“附录:解决 15.0 及更高版本键鼠无法驱动”

    • 2025.12.3

      • 改进“7.4 Hyprland”格式,修正启动命令为 dbus-run-session Hyprland,声明其不支持在任何虚拟机及 Nvidia GPU 上运行

    • 2025.11.30

      • 将不具有实质性内容的“第 25 章 TwinCAT/BSD 入门”压缩到附录 Ⅱ“TwinCAT/BSD 导论”

      • 将“23.2 ZFS 文件系统”拆分为“第 25 章 ZFS 文件系统”

      • 将“23.3 磁盘扩容和分区调整”中的 ZFS 部分拆分到“第 25 章 ZFS 文件系统”,原有章节调整为“23.3 UFS 文件系统”

    • 2025.11.29

      • “24.3 机器无关的内核选项”引入 100%

      • 修复“21.7 Gentoo Linux 兼容层”。15.0-RELEASE 测试通过。

      • “21.4 ArchLinux 兼容层(基于 ArchLinux bootstrap)”:解决了因沙盒导致的下载错误。

    • 2025.11.28

      • 增补“致读者”

      • “24.3 机器无关的内核选项”引入 85%(按行数计)

    • 2025.11.27

      • “24.3 机器无关的内核选项”引入 82%(按行数计)

      • docs:新增段落首行缩进两个字符以符合排版

    • 2025.11.26

      • 全面重写“致读者”

      • “24.3 机器无关的内核选项”引入 75%(按行数计)

        • 根据编纂发现,提交

    • 2025.11.25

      • “24.3 机器无关的内核选项”引入 69%(按行数计)

        • 根据编纂发现,提交

        • 根据编纂发现,提交

    • 2025.11.24

      • “22.16 FreeBSD 内核配置选项”引入 56%(按行数计)

    • 2025.11.23

      • “22.16 FreeBSD 内核配置选项”引入 40%(按行数计)

      • 引入 RSS 订阅源

    • 2025.11.22

      • 新增“22.16 FreeBSD 内核配置选项”,引入 i386/amd64 机器相关的内核选项

      • “参考文献”新增“《Solaris 性能与工具》”

    • 2025.11.21

      • “5.4 使用 pkg 管理二进制包”重写“使用 pkg 安装软件”

    • 2025.11.17

      • “4.1 Windows 用户迁移指南”新增“深入阅读”

      • FreeBSD 安装镜像缺乏 kmod 的离线包,提交

    • 2025.11.14

      • “3.3 使用 Virtual Box 安装 FreeBSD”增补“网络设置”

      • Port 测试失败,提交 issue

      • “6.3 KDE6(X11)”新增“附录:解决开机时总是自动打开特定程序”

    • 2025.11.13

      • CSP 配置错误,已经移除

      • docs 新增 giscus 评论功能

    • 2025.11.12

      • “23.2 ZFS 文件系统”新增“ZFS 历史”

      • “27.1 NetBSD 概述”新增“NetBSD 上的 ZFS”

    • 2025.11.9

      • 除特别注明外,本书的文字、图表等内容依据 CC BY 4.0 协议发布。书中所有代码示例依据 BSD 二条款许可发布。

      • 移除“12.5 无线网络环境下使用 bhyve”与“12.2 使用 bhyve 安装 Windows 11(vm-bhyve)”的“可选配置”章节。引用不符合规范

      • 将上面移除的内容涉及的 wiki 全部翻译,并放在

    • 2025.11.8

      • 由于 FreeBSD 的默认 ESP 不符合 UEFI 规范,提交

    • 2025.11.5

      • “26.5 桌面和其他软件”新增故障排除,解决“KDE 无声音”

      • 增补贡献指南

    • 2025.11.4

      • “10.3 Mihomo(Clash)”新增“Clash for FreeBSD”

    • 2025.11.1

      • 将 docs 的配色调整接近 book

      • 将 SRI 引入 docs

      • 将 CSP 引入 docs

    • 2025.10.30

      • 将 book 的代码块也调整使用“霞鹜文楷”

      • 将 docs 和 book 的 bold 字重的字体调整为 noto sc

      • 为 docs 添加了行号

    • 2025.10.29

      • 将 (以后称 docs) 整体字体切换到“霞鹜文楷”

      • 将 (以后称 book)整体字体切换到“霞鹜文楷”

      • 现在可以用鼠标点开图片浏览大图了

    • 2025.10.28

      • 注意:必须为子模块指定一个分支 git submodule add -b main --force https://github.com/FreeBSD-Ask/FreeBSD-Ask docs,否则会出现很多奇怪的问题。

      • 使“从 SUMMARY.md 更新目录”绕过必须 PR 的规则

      • 使“🔗 更新提交进度”绕过必须 PR 的规则

    • 2025.10.27

      • 修复 镜像站首页显示为目录的问题

    • 2025.10.26

      • 添加一个进度徽章,用以显示第三版进度

    • 2025.10.24

      • “5.2 更换 FreeBSD 软件源”新增“理解 quarterly 季度分支”

      • “5.5 使用 Ports 以源代码方式安装软件”新增“Ports 与 Port 概述”

      • 在若干位置增补警告,告诫读者应尽量使用生产版本(RELEASE)

    • 2025.10.23

      • NetBSD “27.4 桌面和中文环境常用软件”新增“在 VMware 中安装”

    • 2025.10.19

      • 新增“2.11 将 U 盘启动盘恢复为普通 U 盘(基于 Windows)”

    • 2025.10.14

      • “6.3 KDE6(X11)”新增“最小化 KDE 桌面安装方案”

    • 2025.10.11

      • “6.1 Intel 和 AMD 显卡驱动”:明确目前 AMD 显卡驱动存在故障,预计在 15.0 RELEASE 发布前修复;

      • “6.1 Intel 和 AMD 显卡驱动”:明确目前 FreeBSD 移植的 drm 尚不支持 Intel DG2 Arc 显卡(如 Arc A770),预计在 15.1 RELEASE 前得到支持。

    • 2025.10.10

      • “6.1 Intel 和 AMD 显卡驱动”重写“显卡支持情况”

      • 提交

    • 2025.10.6

      • “1.1 操作系统的历程:UNIX、BSD 和 Linux”:新增“附录:自由软件与开源软件语境下的典型误解与思想偏差探析”

    • 2025.10.1

      • 非技术性问题及与社区无关话题、纯粹私人聊天及情感讨论等等事宜恕不回复,如有这方面需求请咨询专业人士,其他需求欢迎加群讨论。

    2025 年第三季度

    • 2025.9.30

      • “4.9 sudo 和 doas”新增“sudo-rs”

      • 由于 Bug 287690 ,本文暂不可用,若在六个月内(2026-04-01 日前)未得到解决将删除“21.5 ArchLinux 兼容层(基于 archlinux-pacman)”。

      • budgie 主要维护者 Olivier Duchateau 继续更新了,但无法正常登录桌面。Bug 289898 。若在六个月内(2026-04-01 日前)未得到解决将删除“6.10 Budgie”。

    2025 年第二季度

    • 2025.6.24

      • freebsd 14.3 的 wifi county select 有问题。选哪个都是这个报错:Error while applying chosen settings (unknown regdomain Expected eval: Use: not found) 参见 。替代方法是手动写,参照无线网络章节。

    • 2025.6.23


    • 2024.8.1-2025.4.20:《FreeBSD 从入门到跑路》第二版完成(TAG 2025.4.20)


    • 2025.4.20

      • 格式化全书

      • 对全书初版重写达 100%

    • 2025.4.19

    2025 年第一季度

    • 2025.3.31

      • 将镜像站点迁移至

    • 2025.3.30

      • 部署了镜像站点,临时位于 ,使用 VitePress

    2024 年第四季度

    • 2024.12.22

      • “第 2.4 节 安装 FreeBSD——基于 VMware Workstation Pro”新增“故障排除”

    • 2024.12.21

      • 新增“第 10.3 节 使用 BVCP 通过网页管理 BHyve”

    2024 年第三季度

    • 2024.9.30

      • “第 2.0 节 图解安装”新增“无线网卡/ WiFi 设置”一节

      • 将全文的 WIFI 区域码调整为 FreeBSD 参考配置文件中设定的 country CN regdomain NONE

      • 完全重写:“第 14.2 节 WiFi”

    2024 年 8 月之前

    • 2021.3.14-2024.7.31:《FreeBSD 从入门到追忆》初版

    • 2021.12.19:《FreeBSD 从入门到追忆》项目重建

    • 《FreeBSD 从入门到追忆》肇始于 2021 年 3 月 14 日(依据 项目的创建时间,其同天产生了此书原型),由 FreeBSD 中文社区(CFC) 发起,ykla 在翌日夜间(2021 年 3 月 15 日)完成了教程的初步整理与发布。其原型最早可追溯至 2020 年 12 月 31 日 ykla 发布的帖子《FreeBSD 艺术科学哲学导论》。本书曾用名《FreeBSD 从入门到跑路》、《FreeBSD 艺术科学哲学导论》。

    root@ykla:~ # ls-l/home/ykla/tmp
    -sh: ls-l/home/ykla/tmp: not found
    root@ykla:~ # ls/
    -sh: ls/: not found
    PS C:\Users\ykla> cd C:\ # 这里 cd 是小写
    PS C:\> CD D:\ # 这里 CD 是大写
    PS D:\> CD c:\ # 这里 C 盘是小写
    PS C:\> dir # 小写 dir,列出目录,等于 ls
    
       目录:C:\
    
    ……省略一部分……
    
    PS C:\Users\ykla> TREE # 大写 tree,显示路径关系
    文件夹 PATH 列表
    卷序列号为 2A90-E989
    C:.
    ├─.android
    ├─.cache
    │  ├─selenium
    ……省略一部分……
    root@ykla:~ # abc
    Nothing found
    root@ykla:~ # plg install gimp
    -sh: plg: not found
    root@ykla:~ # abc
    ​​​​​​​​​​pkg install gimp [enter/↑/↓/ctrl+c]​​​​​​​​​​
    ……省略一部分……
    ykla@ykla:~ $ pwd
    /home/ykla
    ykla@ykla:~ $ cd .
    ykla@ykla:~ $ pwd
    /home/ykla
    ykla@ykla:~ $ cd ..
    ykla@ykla:/home $ pwd
    /home
    ykla@ykla:/home $ cd ..
    ykla@ykla:/ $ pwd
    /
    ykla@ykla:/ $ cd /home/ykla
    ykla@ykla:~ $ cd ../..
    ykla@ykla:/ $ pwd
    /
    $ file book
    book: PDF document, version 1.7
    root@ykla:~ # rm -rf /home/ykla /test
    root@ykla:~ # ls /home/ykla
    ls: /home/ykla: No such file or directory # 发现已经不存在 ykla 这个目录了
    root@ykla:/ # rm -rf /*
    rm: /boot/efi: Device busy
    rm: /boot: Directory not empty
    rm: /dev/reroot: Operation not supported
    rm: /dev/input: Operation not supported
    rm: /dev/fd: Operation not supported
    ……省略一部分……
    root@ykla:/ # 
    $ whoami
    ykla
    $ id
    uid=1001(ykla) gid=1001(ykla) groups=1001(ykla),0(wheel)
    $ who
    root             pts/0        Mar 19 15:00 (3413e8b6b43f)
    $ w
     3:02PM  up 21:52, 1 user, load averages: 0.01, 0.01, 0.00
    USER       TTY      FROM           LOGIN@  IDLE WHAT
    root       pts/0    3413e8b6b43f   3:00PM     - w
    $ pwd
    /usr/ports/editors/vscode
    root@ykla:/ # su ykla ①
    ykla@ykla:/ $ ②
    ykla@ykla:/ $ su ③
    Password: ④
    root@ykla:/ #
    
    root@ykla:/ # exit ⑤
    ykla@ykla:/ $ exit ⑥
    root@ykla:/ # exit ⑦
    
    FreeBSD/amd64 (ykla) (ttyv0)
    
    login:
    # 命令 选项  参数 1       参数 2
    # ls   -l   /home/ykla /tmp
    /home/ykla:
    total 317
      ……有所省略……
    drwxr-xr-x  2 ykla ykla        2 Mar  9 20:45 下载
    drwxr-xr-x  2 ykla ykla        2 Mar  9 20:45 
    桌面
    
    /tmp:
    total 6
    drwxrwxrwt  2 root    wheel  3 Mar 18 17:23 .ICE-unix
    -r--r--r--  1 root    wheel 11 Mar 18 17:10 .X0-lock
    root@ykla:~ # LS # 试试全大写
    -sh: LS: not found
    root@ykla:~ # Ls # 一大一小呢
    -sh: Ls: not found
    root@ykla:~ # ls /hom1 # 实为 /home
    ls: /hom1: No such file or directory
    root@ykla:~ # ls -z /home # 不存在选项 -z
    ls: invalid option -- z
    usage: ls [-ABCFGHILPRSTUWZabcdfghiklmnopqrstuvwxy1,] [--color=when] [-D format] [--group-directories=] [file ...]
    # pkg ins thefuck
    # cd /usr/ports/misc/thefuck/
    # make install clean
    root@ykla:~ # fuck
    Seems like fuck alias isn't configured!
    More details - https://github.com/nvbn/thefuck#manual-installation
    eval $(thefuck --alias) 
    root@ykla:~ # . ~/.shrc
    root@ykla:~ # fuck
    No fucks given
    root@ykla:~ # ls-l /home/ykla/ # 先输入一遍错误的试试
    -sh: ls-l: not found
    root@ykla:~ # fuck
    ​​​​​​​​​​ls -l /home/ykla/ [enter/↑/↓/ctrl+c] # 上下箭头切换可能的命令,回车确认,ctrl c 中断​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
    total 317
    ……省略一部分……
    drwxr-xr-x  2 ykla ykla        2 Mar  9 20:45 下载
    drwxr-xr-x  2 ykla ykla        2 Mar  9 20:45 桌面
    root@ykla:~ # plg install gimp
    -sh: plg: not found
    root@ykla:~ # fuck
    ​​​​​​​​​​pkg install gimp [enter/↑/↓/ctrl+c]​​​​​​​​​​
    Updating FreeBSD repository catalogue...
    FreeBSD repository is up to date.
    ……省略一部分……
    root@ykla:~ # cp test /root/mydir/
    
    
    root@ykla:~ # cp test9 /root/mydir/
    cp: test9: No such file or directory
    $ dpkg -S /bin/mv 
    coreutils: /bin/mv
    $ dpkg -S /bin/cp
    coreutils: /bin/cp
    $ dpkg -S /bin/ls
    coreutils: /bin/ls
    $ dpkg -S /bin/pwd
    coreutils: /bin/pwd
    $ dpkg -S /bin/cat
    coreutils: /bin/cat
    $ dpkg -S /usr/sbin/chroot
    coreutils: /usr/sbin/chroot
    $ dpkg -S /bin/kill
    procps: /bin/kill
    $ dpkg -S /usr/bin/free
    procps: /usr/bin/free
    $ dpkg -S /bin/su
    util-linux: /bin/su
    $ type cd
    cd 是 shell 内建
    $ compgen -b
    .
    :
    [
    alias
    bg
    bind
    break
    builtin
    caller
    cd
    command
    compgen
    ……省略一部分……
    ulimit
    umask
    unalias
    unset
    wait
    $ type cd
    cd is a shell builtin
    # pkg which /bin/ls
    /bin/ls was installed by package FreeBSD-runtime-15.snap20250313173555
    
    $ cd /home
    $ pwd # 看看现在在哪
    /home
    # ls -hl /home/ykla
    total 326 KB
    -rw-------  1 ykla ykla   50B Mar 18 17:23 .Xauthority
    drwx------  6 ykla ykla    6B Mar 10 16:21 .cache
    drwx------  9 ykla ykla   12B Mar 19 15:01 .config
    -rw-r--r--  1 ykla ykla  1.0K Feb 24 12:18 .shrc
    drwxr-xr-x  2 ykla ykla    2B Mar  9 23:48 .themes
    -rw-r--r--  1 root ykla    0B Mar 19 15:13 abc.TXT
    drwxr-xr-x  3 root ykla    7B Mar 19 15:17 vscode
    -rw-------  1 ykla ykla   17M Mar 18 17:09 xrdp-chansrv.core
    drwxr-xr-x  2 ykla ykla    2B Mar  9 20:45 下载
    ……省略一部分……
    ykla@ykla:~ $ ls -a
    .		.cshrc		.login		.profile	公共		视频
    ..		.dbus		.login_conf	.sh_history	图片		音乐
    .Xauthority	.face		.mail_aliases	.shrc		文档
    .cache		.icons		.mailrc		.themes		桌面
    .config		.local		.mozilla	下载		模板
    ykla@ykla:~ $ ls
    下载	公共	图片	文档	桌面	模板	视频	音乐
    $ touch test
    $ touch test test1 test2 test3
    $ mkdir -v ykla # -v 选项可以帮我们看到文件的变动,是 verbose 的缩写,即“啰嗦”一些,意为输出详细信息
    ykla
    $ mkdir ykla
    mkdir: ykla: File exists # 提示已经有了该目录了!
    $ mkdir ykla/ykla1/ykla2/ykla3
    mkdir: ykla/ykla1/ykla2: No such file or directory
    $ mkdir -vp  ykla/ykla1/ykla2/ykla3
    ykla/ykla1
    ykla/ykla1/ykla2
    ykla/ykla1/ykla2/ykla3
    $ rm test
    $ rm test
    rm: test: No such file or directory # 报错指定的文件或目录不存在
    $ rm /home/ykla/test
    $ 
    $  rmdir /home/ykla/test
    $ 
    $ rm /home/ykla/test/
    rm: /home/ykla/test/: is a directory # 提示我们 /home/ykla/test/ 是个目录
    $ rm -rf /home/ykla/test/
    $ mv -v test /home/ykla # -v 选项可以帮我们看到文件的变动,是 verbose 的缩写,即“啰嗦”一些,意为输出详细信息
    test -> /home/ykla/test
    $ mv -v  test5.pdf test5.txt
    test5.pdf -> test5.txt
    $ mv -v test2 test2.pdf 
    test2 -> test2.pdf
    $ cp test /home/ykla/
    $ cp test /home/ykla/
    cp: directory /home/ykla does not exist # 若加上 /,会提示目录不存在
    $ cp -v test /home/ykla # -v 选项可以帮我们看到文件的变动,是 verbose 的缩写,即“啰嗦”一些,意为输出详细信息
    test -> /home/ykla
    $ cp -v test /home/ykla/abc.TXT
    test -> /home/ykla/abc.TXT
    $ cp -v /usr/ports/editors/vscode /home/ykla
    cp: /usr/ports/editors/vscode is a directory (not copied).
    $ cp -vr /usr/ports/editors/vscode /home/ykla
    /usr/ports/editors/vscode -> /home/ykla/vscode
    /usr/ports/editors/vscode/distinfo -> /home/ykla/vscode/distinfo
    ……省略一部分……
    $ rm test*
    rm: test: is a directory
    rm: test4: is a directory
    $ ls test*  # 确认匹配的文件
    $ rm -rf test*
    $ ls *  # 确认匹配的文件
    $ rm -rf *
    make BATCH=yes install || make BATCH=yes install || make BATCH=yes install || make BATCH=yes install
    sed -i '' 's/quarterly/latest/g' /etc/pkg/FreeBSD.conf
    root@ykla:/usr/ports # git log --reverse --max-parents=0 --pretty=format:"commit: %h%nAuthor: %an%nDate: %ci%n%n%B" # 打印第一次提交
    commit: d27f048e966a
    Author: Jordan K. Hubbard
    Date: 1994-08-21 13:12:57 +0000
    
    Commit my new ports make macros.  Still not 100% complete yet by any means
    but fairly usable at this stage.
    Submitted by:   jkh
    ykla@ykla: $ cd /usr/ports # 切换到 /usr/ports
    ykla@ykla:/usr/ports $ ls # 列出此目录下所有文件  ①
    accessibility	COPYRIGHT	GIDs		misc		README		www
    arabic		databases	graphics	Mk		russian		x11
    archivers	deskutils	hebrew		MOVED		science		x11-clocks
    astro		devel		hungarian	multimedia	security	x11-drivers
    audio		dns		irc		net		shells		x11-fm
    benchmarks	editors		japanese	net-im		sysutils	x11-fonts
    biology		emulators	java		net-mgmt	Templates	x11-servers
    cad		filesystems	Keywords	net-p2p		textproc	x11-themes
    CHANGES		finance		korean		news		Tools		x11-toolkits
    chinese		french		lang		polish		UIDs		x11-wm
    comms		ftp		mail		ports-mgmt	ukrainian
    CONTRIBUTING.md	games		Makefile	portuguese	UPDATING
    converters	german		math		print		vietnamese
    ykla@ykla:/usr/ports $ ls databases/ # 切换到 databases 数据库分类目录下
    adminer						php-xapian
    adodb5						php81-dba
    
        ……省略一部分……
    
    mongodb60					py-apache-arrow
    mongodb70					py-apsw
    mongodb80					py-asyncmy
    mongosh						py-asyncpg
    ykla@ykla:/usr/ports/databases $ cd databases/postgresql18-server/ # 切换到 postgresql18-server 目录
    ykla@ykla:/usr/ports/databases/postgresql18-server $ ls ②
    distinfo		pkg-descr		pkg-plist-contrib	pkg-plist-pltcl
    files			pkg-install-server	pkg-plist-plperl	pkg-plist-server
    Makefile		pkg-plist-client	pkg-plist-plpython
    # fetch https://mirrors.nju.edu.cn/freebsd-ports/ports.tar.gz
    # fetch https://mirrors.ustc.edu.cn/freebsd-ports/ports.tar.gz
    # fetch https://download.freebsd.org/ftp/ports/ports/ports.tar.gz
    # tar -zxvf ports.tar.gz -C /usr/ # 解压至路径
    # rm ports.tar.gz # 删除存档
    # pkg install git
    # git clone --filter=tree:0 https://mirrors.ustc.edu.cn/freebsd-ports/ports.git /usr/ports
    # git clone --filter=tree:0 https://git.FreeBSD.org/ports.git /usr/ports
    # git clone https://git.FreeBSD.org/ports.git /usr/ports
    # cd /usr/ports/ # 切换到 git 项目
    # git branch -a
    * main # * 代表当前分支
      remotes/origin/2014Q1
    
    	……省略…………
    
      remotes/origin/2025Q1
      remotes/origin/HEAD -> origin/main
      remotes/origin/main
    root@ykla:/usr/ports # git switch 2025Q1
    正在更新文件: 100% (14323/14323), 完成.
    分支 '2025Q1' 设置为跟踪 'origin/2025Q1'。
    切换到一个新分支 '2025Q1'
    root@ykla:/usr/ports # git branch
    * 2025Q1
      main
    root@ykla:/ # cd /usr/ports/ # 切换目标目录
    root@ykla:/usr/ports # git pull # 同步更新上游 Ports
    root@ykla:/usr/ports # git checkout . # 放弃本地修改
    root@ykla:/usr/ports # git pull
    fatal: unable to access 'https://mirrors.ustc.edu.cn/freebsd-ports/ports.git/': SSL certificate problem: certificate is not yet valid
    # date
    Fri May 31 12:09:26 UTC 2024
    # ntpdate -u pool.ntp.org
     5 Oct 08:39:16 ntpdate[3276]: step time server 202.112.29.82 offset +10960053.088901 sec
    # date
    Sat Oct  5 08:39:21 UTC 2024
    # whereis python
    python: /usr/ports/lang/python
    root@ykla:~ # pkg info -d screen
    screen-4.9.0_6:
    	indexinfo-0.3.1
    root@ykla:/usr/ports/sysutils/htop # make all-depends-list
    /usr/ports/ports-mgmt/pkg
    /usr/ports/devel/pkgconf
    /usr/ports/devel/kyua
    ……省略一部分……
    # whereis python
    # python: /usr/ports/lang/python
    # cd /usr/ports/lang/python
    # make BATCH=yes clean
    # make config-recursive
    # make install-missing-packages
    root@ykla:~ # cd /usr/ports/chinese/fcitx
    root@ykla:/usr/ports/chinese/fcitx # make install-missing-packages
    Updating FreeBSD repository catalogue...
    FreeBSD repository is up to date.
    Updating FreeBSD-base repository catalogue...
    FreeBSD-base repository is up to date.
    All repositories are up to date.
    Updating database digests format: 100%
    The following 2 package(s) will be affected (of 0 checked):
    
    New packages to be INSTALLED:
    	e2fsprogs-libuuid: 1.47.1 [FreeBSD]
    	enchant2: 2.2.15_5 [FreeBSD]
    
    Number of packages to be installed: 2
    
    94 KiB to be downloaded.
    
    Proceed with this action? [y/N]: 
    # make rmconfig-recursive
    # make BATCH=yes fetch-recursive
    # pkg create nginx
    root@ykla:/usr/ports # pkg version -l '<'
    chromium-127.0.6533.99             <
    curl-8.9.1_1                       <
    ffmpeg-6.1.2,1                     <
    vlc-3.0.21_4,4                     <
    w3m-0.5.3.20230718_1               <
    # cd /usr/ports/ports-mgmt/portmaster && make install clean
    # portmaster -a #自动升级所有软件
    # portmaster screen #升级单个软件
    # portmaster -a -G --no-confirm
    root@ykla:/usr/ports/ports-mgmt/portmaster # portmaster sysutils/htop  --show-work
    
    ===>>> Port directory: /usr/ports/sysutils/htop
    
    ===>>> Starting check for all dependencies
    ===>>> Gathering dependency list for sysutils/htop from ports
    
    ===>>> Installed devel/autoconf
    ===>>> Installed devel/automake
    ===>>> NOT INSTALLED		devel/libtool
    ===>>> NOT INSTALLED		devel/pkgconf
    ===>>> NOT INSTALLED		lang/python311
    ===>>> Installed ports-mgmt/pkg
    # cd /usr/ports/ports-mgmt/portupgrade && make install clean
    # portupgrade -ai #自动升级所有软件,i 会挨个确认
    # portupgrade -R screen #升级单个软件
    # portupgrade -a --batch		#不要问,只做,等同于  BATCH=yes
    # echo "OPTION_UNSET+= MYSQL" >> /etc/make.conf
    FORCE_MAKE_JOBS=yes
    MAKE_JOBS_NUMBER=4
    root@ykla:/home/ykla # sysctl kern.smp.cpus
    kern.smp.cpus: 16
    root@ykla:/home/ykla # sysctl hw.ncpu 
    hw.ncpu: 16
    # alias ninja='ninja -j4'
    # ee /etc/fstab
    tmpfs /tmp tmpfs rw 0 0
    root@ykla:~ # pkg install ccache
    # cd /usr/ports/devel/ccache/ 
    # make install clean
    root@ykla: # ls -al  /usr/local/libexec/ccache
    total 56
    drwxr-xr-x   3 root wheel 15 Sep 20 02:02 .
    drwxr-xr-x  18 root wheel 49 Sep 20 01:39 ..
    lrwxr-xr-x   1 root wheel 21 Sep 20 00:29 CC -> /usr/local/bin/ccache
    lrwxr-xr-x   1 root wheel 21 Sep 20 00:29 c++ -> /usr/local/bin/ccache
    lrwxr-xr-x   1 root wheel 21 Sep 20 00:29 cc -> /usr/local/bin/ccache
    lrwxr-xr-x   1 root wheel 21 Sep 20 00:29 clang -> /usr/local/bin/ccache
    lrwxr-xr-x   1 root wheel 21 Sep 20 00:29 clang++ -> /usr/local/bin/ccache
    lrwxr-xr-x   1 root wheel 21 Sep 20 00:29 clang++15 -> /usr/local/bin/ccache
    lrwxr-xr-x   1 root wheel 21 Sep 20 02:02 clang++18 -> /usr/local/bin/ccache
    lrwxr-xr-x   1 root wheel 21 Sep 20 00:29 clang15 -> /usr/local/bin/ccache
    lrwxr-xr-x   1 root wheel 21 Sep 20 02:02 clang18 -> /usr/local/bin/ccache
    lrwxr-xr-x   1 root wheel 21 Sep 20 00:29 cpp13 -> /usr/local/bin/ccache
    lrwxr-xr-x   1 root wheel 21 Sep 20 00:29 g++13 -> /usr/local/bin/ccache
    lrwxr-xr-x   1 root wheel 21 Sep 20 00:29 gcc13 -> /usr/local/bin/ccache
    drwxr-xr-x   2 root wheel 15 Sep 20 02:02 world
    WITH_CCACHE_BUILD=yes
    root@ykla:/usr/ports/devel/ccache4 # ccache -M 10G  
    Set cache size limit to 10.0 GB
    root@ykla:/usr/ports/www/chromium # ccache -s
    cache directory                     /root/.ccache
    primary config                      /root/.ccache/ccache.conf
    secondary config      (readonly)    /usr/local/etc/ccache.conf
    cache hit (direct)                     0
    cache hit (preprocessed)               0
    cache miss                             0
    cache hit rate                      0.00 %
    cleanups performed                     0
    files in cache                         0
    cache size                           0.0 kB
    max cache size                      10.0 GB
    root@ykla:~ # ccache -s
    cache directory                     /root/.ccache
    primary config                      /root/.ccache/ccache.conf
    secondary config      (readonly)    /usr/local/etc/ccache.conf
    stats updated                       Fri Sep 20 02:05:35 2024
    cache hit (direct)                    20
    cache hit (preprocessed)              17
    cache miss                           918
    cache hit rate                      3.87 %
    called for link                      121
    called for preprocessing              26
    compile failed                       115
    preprocessor error                    66
    bad compiler arguments                15
    autoconf compile/link                523
    no input file                         71
    cleanups performed                     0
    files in cache                      2305
    cache size                           0.0 kB
    max cache size                      10.0 GB
    # pkg install ccache4
    # cd /usr/ports/devel/ccache4/
    # make install clean
    root@ykla:~ # ls -al  /usr/local/libexec/ccache    total 55
    drwxr-xr-x   3 root wheel 13  9月 20 02:29 .
    drwxr-xr-x  20 root wheel 54  9月 20 02:29 ..
    lrwxr-xr-x   1 root wheel 21  9月 20 02:29 c++ -> /usr/local/bin/ccache
    lrwxr-xr-x   1 root wheel 21  9月 20 02:29 cc -> /usr/local/bin/ccache
    lrwxr-xr-x   1 root wheel 21  9月 20 02:29 CC -> /usr/local/bin/ccache
    lrwxr-xr-x   1 root wheel 21  9月 20 02:29 clang -> /usr/local/bin/ccache
    lrwxr-xr-x   1 root wheel 21  9月 20 02:29 clang++ -> /usr/local/bin/ccache
    lrwxr-xr-x   1 root wheel 21  9月 20 02:29 clang++15 -> /usr/local/bin/ccache
    lrwxr-xr-x   1 root wheel 21  9月 20 02:29 clang15 -> /usr/local/bin/ccache
    lrwxr-xr-x   1 root wheel 21  9月 20 02:29 cpp13 -> /usr/local/bin/ccache
    lrwxr-xr-x   1 root wheel 21  9月 20 02:29 g++13 -> /usr/local/bin/ccache
    lrwxr-xr-x   1 root wheel 21  9月 20 02:29 gcc13 -> /usr/local/bin/ccache
    drwxr-xr-x   2 root wheel 13  9月 20 02:29 world
    WITH_CCACHE_BUILD=yes
    root@ykla: # ccache -M 20G  
    Set cache size limit to 20.0 GB
    root@ykla:/ # ccache -s
    Cacheable calls:   558 /  579 (96.37%)
      Hits:            110 /  558 (19.71%)
        Direct:        110 /  110 (100.0%)
        Preprocessed:    0 /  110 ( 0.00%)
      Misses:          448 /  558 (80.29%)
    Uncacheable calls:  21 /  579 ( 3.63%)
    Local storage:
      Cache size (GB): 0.0 / 20.0 ( 0.11%)
      Hits:            110 /  558 (19.71%)
      Misses:          448 /  558 (80.29%)
    root@ykla:~ # ccache -p 
    (default) absolute_paths_in_stderr = false
    (default) base_dir =
    (default) cache_dir = /root/.cache/ccache
    ……省略一部分……
    # pkg install axel
    # cd /usr/ports/ftp/axel/
    # make install clean
    FETCH_CMD=axel
    FETCH_BEFORE_ARGS= -n 10 -a
    FETCH_AFTER_ARGS=
    DISABLE_SIZE=yes
    # cd /usr/ports/www/wget2/ && make install clean
    FETCH_CMD=wget2
    FETCH_BEFORE_ARGS= -c -t 3 -o 10
    FETCH_AFTER_ARGS=
    DISABLE_SIZE=yes
    [root@Server /usr/ports/java/openjdk21]# make install clean
    ===> openjdk21-21.0.4+7.1 depends on executable: zip - found
    ===> openjdk21-21.0.4+7.1 depends on package: autoconf>0 - not found ①
    ===> autoconf-2.72 Invalid perl5 version 5.42. ②
    *** Error code 1
    
    Stop.
    make[1]: stopped in /usr/ports/devel/autoconf
    *** Error code 1
    
    Stop.
    make: stopped in /usr/ports/java/openjdk21

    “24.2 机器相关的内核选项”引入“powerpc(32/64 位)机器相关配置”“64 位 RISC-V 机器相关配置”“arm64(aarch64)机器相关配置”

  • 新增“24.4 GENERIC 内核选项(amd64)”

  • “24.1 FreeBSD 内核选项概述”新增“附录:man config(5) 中文”“附录:man device.hints(5) 中文”

  • 将“22.15 在 Linux 上构建 FreeBSD”移动到“第 24 章 FreeBSD 内核”

  • 将“2.1-2.9”压缩归档至附录 Ⅱ“FreeBSD 13/14 安装指南”

  • 新增“2.2 安装 FreeBSD 15”

  • 现在的 Archlinux 兼容层构建完成 chroot 后看似卡住,其实是 bash 一行完全无显示,正常输入仍能使用。

  • 似乎无法通过 pacman 再安装 fakeroot-tcp,转为 aur,目前陷入了先有鸡还是先有蛋的悖论,但此问题优先级不高,需要先解决上面一条。

  • 由于内容不足以构成一章,将“第 24 章 DragonFly BSD 入门”压缩到附录 Ⅱ“DragonFly BSD 导论”

  • 新增“第 24 章 FreeBSD 内核”,将“22.16 FreeBSD 内核配置选项”分别拆分为:

    • 24.1 FreeBSD 内核选项概述

    • 24.2 机器相关的内核选项(amd64)

    • 24.3 机器无关的内核选项

  • 修复 mu-lu CI

  • 引入“🔗 更新谷歌分析”,用于在首页实时(每日更新)显示“📈 统计信息”

  • 引入“🔗 更新提交进度”,用于在首页显示项目进度

  • “19.1 PostgreSQL”更新至“PostgreSQL 18”

  • 2025.9.28

    • 2025 FreeBSD 社区调查报告.pdf https://www.alipan.com/s/6vUR7W6xfpC 提取码: nq19 点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。

    • 上面是中文版本,原文在 这。

  • 2025.9.27

    • 针对 fwget 工具无法为 RTL8125 2.5GbE 以太网卡安装驱动的问题提交:Bug 289862 - fwget(8) does not support Realtek Ethernet (RTL8125 2.5GbE, realtek-re-kmod) despite packages being available。

  • 2025.9.23

    • 在安装过程中直接引入 video 组。

    • 切勿使用 freebsd-update 升级至 15.0-ALPHA3 版本。该操作会在安装 libsys 之前先安装新版 libc,从而导致系统损坏。我们将修复 freebsd-update 以确保按正确顺序安装库文件,但在相关补丁(及相应的勘误通知)发布之前,此升级方式暂不可用。—— Colin Percival FreeBSD 发布工程负责人& EC2 平台维护者。参见 https://lists.freebsd.org/archives/freebsd-stable/2025-September/003244.html

  • 2025.9.22

    • 如果普通用户没有被加入到 video 组(wheel 还不够),那么在 KDE 的设置中,“关于此系统”中的“显卡驱动”将永远显示为“llvmpipe”。且 Wayland 下普通用户将无权调用 GPU。

    • “6.3 KDE6(X11)”新增“附录:展开任务栏图标”

    • 完全重写“6.16 KDE6(Wayland)”

  • 2025.9.19

    • “1.2 FreeBSD 导论”——“选择 FreeBSD 的技术性原因”新增“安全原因”

  • 2025.9.15

    • 新增“22.15 在 Ubuntu 上构建 FreeBSD”

  • 2025.9.10

    • 重写“9.1 音频设备配置”

    • 新增“6.16 KDE6(Wayland)”

  • 2025.8.31

    • 目前将无线电(WiFi)区域码设置为 CN NONE(create_args_wlan0="country CN regdomain NONE")是不正确的,因为 FreeBSD 的文件没有得到维护,实际上会导致无法协商到 WiFi5(FreeBSD 为 VHT40),速率始终是 11a,不是应有的 11ac;并且对于 DFS,配置写的也不正确。已经报告 Bug 至 Missing CN regulatory domain and 11ac/DFS support in regdomain.xml。临时解决方案:如果你的信道 > 48,需要专门在 /etc/rc.conf 中修改或写入 create_args_wlan0="country HR regdomain ETSI";如果你的信道 <= 48,且存在 create_args_wlan0="country CN regdomain NONE",请将其删除,因为默认的 FCC US 配置可支持其 WiFi5 协议。经过测试,即使是 WiFi 6 路由器,开启 WPA3、160MHz,也是受支持的。按照以上临时方案进行配置,Intel AX200 网卡在 FreeBSD 14.3-RELEASE 上可成功协商至 11ac。

    • 因 budgie 主要维护者 Olivier Duchateau 称已对此项目不感兴趣,放弃维护。且无人主动维护,目前核心组件 Port sysutils/budgie-control-center broken(破损)。考虑在日后删除 6.10 Budgie。如果 6 个月内仍未得到修复将建议上游删除此项目,并从本书中移除此节。

  • 2025.8.24

    • 新增:“12.5 无线网络环境下使用 bhyve”

    • “4.2 Linux 用户迁移指南”新增“历史”

  • 2025.8.20

    • 新增“3.10 云服务器安装 FreeBSD(基于 KVM、QEMU 等平台)”

  • 2025.8.18

    • “2.1 安装前的准备工作”新增:最高硬件支持

  • 2025.8.17

    • 3.9 云服务器安装 FreeBSD(基于腾讯云轻量云):测试了多种替代方案均失败

  • 2025.8.14

    • 将“1.2 欢迎来到 FreeBSD”、“1.3 关于 FreeBSD 项目”合并为“1.2 FreeBSD 导论”,原有章节从标题看不知道是作何用的

    • 将“窗口管理器”、“FreeBSD 高级安装”前置便于使用

  • 2025.8.13

    • 增补 2.2 使用 bsdinstall 开始安装:补充有关 ACPI 的警告、引入 bsdinstall 介绍

    • 将本书的组织结构、本书中使用的一些约定合并入绪论

    • 合并三篇序言到前言

  • 2025.8.7

    • 重写:本书的组织结构

  • 2025.7.31

    • 新增:附录 2 UEFI/BIOS 注解(基于 AMI BIOS)

  • 2025.7.30

    • 之前 KDE 在 Wayland 下,启动后桌面右键单击黑屏的问题已得到解决。参见 https://old.reddit.com/r/freebsd/comments/1m9popo/kde_mini_review/n5dv1uk/ 和 https://github.com/freebsd/freebsd-ports/pull/431。目前已安装的只需要 make reinstall Port graphics/qt6-wayland 和 /x11/plasma6-layer-shell-qt 即可。或者等几天通过 pkg upgrade、安装的也应该不会有黑屏问题了。

  • 2025.7.23

    • 恢复书名《FreeBSD 从入门到跑路》

  • 2025.7.7

    • 17.7 OpenList 新增:本机存储的多属主权限管理

    • 17.7 OpenList 新增:影视刮削

  • 2025.7.6

    • 新增:17.7 OpenList

    • 6.2 Fcitx 输入法框架:已经把安装 RIME 中州韵输入法(可选)作为独立子节,并强调了 chinese/rime-essay 的必要性

    • 20.1 Renpy 游戏与 Godot 游戏:删除五分钟游戏。都是些桌面自带的游戏,列举无意义

    • 新增:20.4 Steam

  • 2025.7.5

    • 重写:6.6 QQ(Linux 版)。在所有兼容层中,Fcitx5 输入法框架均测试通过,可以正常输入汉字

  • 2025.7.4

    • 新增:6.11 Wine

  • 3.6 文本编辑器新增:microsoft-edit
  • 2025.6.21

    • 格式化:第 21.5 节 ArchLinux 兼容层(基于 archlinux-pacman)

    • 为镜像站 https://docs.bsdcn.org/ 添加了自动序号

    • 重写:22.7 Python 和 VS Code:Python

    • 本书更名为《FreeBSD 操作系统研究导论》

  • 2025.6.20

    • 第 1.2 节 欢迎来到 FreeBSD:完全重写“为什么选择 FreeBSD”,去除有关 Linux 的描述

  • 2025.6.19

    • 调整目录结构

    • 第 19.1 节 PostgreSQL:将 PostgreSQL 更新到 17

    • 第 19.2 节 pgAdmin4 更新到 pgadmin4-9.0

    • 第 23.7 节 ZFS 磁盘加解密合并入 FreeBSD 安装章节

  • 2025.6.17

    • 增加一个术语表放在附录

    • 调整目录结构

    • 新增:在 FreeBSD 上安装 VirtualBox

  • 2025.6.16

    • 将第 1.2 节 FreeBSD 简史合并入:第 1.2 节 关于 FreeBSD 项目

    • 第 8.2 节 用户和基本账户管理新增:账户类型

    • 将参考书目独立出来放在附录

  • 2025.6.15

    • 计划全面重写 FreeBSD 手册

  • 2025.6.14

    • 重新引入:贡献指南与开放任务

  • 2025.6.13

    • 第 1.1 节 操作系统的历程:UNIX、Unix-like、Linux & FreeBSD 重写:什么是 Linux?

    • 第 1.1 节 操作系统的历程:UNIX、Unix-like、Linux & FreeBSD 新增:GNU 与自由软件运动

    • 第 6.6 节 视频播放器新增:附录:直接在 TTY 播放视频(mpv)

  • 2025.6.12

    • 第 4.3 节 GNOME:欢迎来到 Gnome 47

  • 2025.6.10

    • 第 26.3 节 配置 OpenBSD 重写:doas

    • 第 26.1 节 OpenBSD 概述新增:其他专注于安全的 BSD 系统

    • 第 26.1 节 OpenBSD 概述新增:OpenBSD IPSEC 协议栈 FBI 后门事件

  • 2025.6.9

    • 第 26.1 节 OpenBSD 概述新增:机遇与挑战、语录摘选

  • 2025.6.8

    • 第 1.1 节 操作系统的历程:UNIX、Unix-like、Linux & FreeBSD 新增:草稿:二十一世纪的 Unix 哲学观

    • 第 1.1 节 操作系统的历程:UNIX、Unix-like、Linux & FreeBSD 增补:UNIX 之船:FreeBSD 是不是 UNIX?

    • 第 4.1 节 显卡驱动(英特尔、AMD)新增:AMD 视频硬解

  • 2025.6.7

    • 根据调查问卷恢复一部分文学故事

  • 2025.6.6

    • 第 2.3 节 UNIX 基础(新手入门版本)新增:Windows 与 Unix 字符编码的差异

    • 第 2.3 节 UNIX 基础(新手入门版本)新增:Windows 与 Unix 时间设置的差异

    • 第 2.4 节 命令行基础(新手入门版本):新增“你并不孤单”

  • 2025.6.4

    • 第 2.3 节 UNIX 基础(新手入门版本)新增:Windows 与 Unix 换行符/回车之差异,还需要补充编码差异、时区差异等

  • 2025.5.30

    • 新增:第 1.7 节 BSD 许可证概览

  • 2025.5.23

    • 新增:第 10.3 节 Podman

  • 2025.5.17

    • 删除“第 21.2 节 Linux 兼容层——基于 CentOS(FreeBSD Port)”,过时

  • 2025.5.16

    • 录制视频 FreeBSD 14.2 基础安装配置教程

  • 2025.5.12

    • 移除“第 4.18 节 KDE6”中的“基于 Wayland”,可能存在错误

  • 2025.5.9

    • 重写:第 22.8 节 Rust/Go 环境的配置

    • 此分支转为社区版本,去除 ykla 个人观点,保留中立内容。该分支转为社区维护,欢迎 PR。

  • 2025.5.8

    • 第 2.4 节 命令行基础(新手入门版本):新增“vi 编辑器基本用法”

  • 2025.5.6

    • 从“第 2.2 节 FreeBSD 安装图解”拆分出“第 2.1 节 安装前准备(新手入门版本)”

  • 2025.5.5

    • 测试“第 22.4 节 C/C++ 环境的配置”

    • 重写“第 4.5 节 Xfce”

    • UNIX 基础(新手入门版本):新增“大小写敏感”

  • 2025.5.2

    • 新增“第 2.3 节 UNIX 基础”

  • 2025.4.29

    • 引入 GitHub Action“🔗 检查 Markdown 图片引用”。用以核查图片使用情况

    • 重写“第 5.4 节 五笔输入法”

  • 2025.4.28

    • 第 26 章 OpenBSD:更新至 OpenBSD 7.7

    • 将“第 8.2 节 添加用户”合并入“第 8.2 节 用户与组”

    • 重写“第 8.2 节 用户与组”

    • 移除部分来自网络且未经验证的可能不可靠的内容

    • 重写“第 5.4 节 五笔输入法”,注意最后一部分未测试。

    • 重新排版:第 5.1 节 本地化环境变量

    • “第 13.4 节 SSH 配置与相关工具”:删除思考题,删除关于 OpenSSH 版本的描述,因为已经过时。

    • 今天总计清理出了 5 页 A4 纸的篇幅

    • “第 14.1 节 TCP 堆栈”新增“使用 RACK 栈”

  • 2025.4.25

    • 重新更名为《FreeBSD 从入门到追忆》

    • 重写“第 6.3 节 打印机”

  • 2025.4.24

    • 第 4.2 节 显卡驱动(NVIDIA):完全重写

  • 2025.4.22

    • 《FreeBSD 从入门到跑路》恢复旧名《FreeBSD 艺术科学哲学导论》

  • 2025.4.22

    • 第 5.2 节 Fcitx 输入法框架:重新排版

    • 从“第 4.1 节 显卡驱动”拆分出“第 4.1 节 显卡驱动(英特尔、AMD)”、“第 4.2 节 显卡驱动(NVIDIA)”

    • 第 9.3 节 使用 Qjail 管理 Jail:重新排版

    • 由于电子邮件长期被忽视,今日分别致国际信函给“FreeBSD 基金会”(RD664821800CN)和“OpenBSD 基金会”(RD664821795CN),反馈目前的捐款渠道不畅之问题,以及呼吁关注中国大陆地区等

  • 2025.4.21

    • “第 5.6 节 QQ(Linux 版)”新增:解决 fcitx 中文输入法在 QQ 中不能使用的问题

  • 第 4 章 桌面环境:新增软件解释

  • 对全书删除冗余,重新排版

  • 2025.4.18

    • “第 2.2 节 命令行基础(新手入门版本)”新增:关机、重启、&&、||

  • 2025.4.17

    • 重写:第 16.7 节 Samba 服务器中的安装 Samba 部分,其余部分无条件测试

    • 重写:第 16.6 节 rsync 同步服务

  • 2025.4.16

    • 格式化:第 14.2 节 WiFi

    • “第 27.4 节 桌面与中文环境常用软件”:重写引入:KDE 4。因为物理机测试成功。

    • 从“第 1.1 节 操作系统的历程:UNIX、Unix-like、Linux & FreeBSD”拆分出“第 1.2 节 FreeBSD 简史”

    • 重写:第 2.6 节 云服务器安装 FreeBSD(基于腾讯云轻量云)

    • 拆分序言

    • 引入 GitHub Action:🔗 从 SUMMARY.md 更新一级标题。用于检查 SUMMARY 标题和对应文件的一级标题的符合情况

  • 2025.4.15

    • 格式化:第 5.6 节 QQ(Linux 版)

    • 第 4.20 节 远程桌面:删除剩余的“VNC 与 RPD(XRDP)对比”部分

  • 2025.4.14

    • 目前对全书初版已重写 96.57%(按 Commit 数)

    • 格式化“第 11.5 章 MySQL 数据库”

    • 删减占用篇幅较大的无用图片

  • 2025.4.13

    • “第 16.5 节 WildFly”测试基本成功,但是注意补丁仍未合并到主线,详见 Bug 285956 - java/wildfly: service start fail, illegal group name。

    • 新增“第 24.3 节 配置 DragonFly BSD”

    • 重写“第 24.2 节 安装 DragonFly BSD”

  • 2025.4.11

    • 通过段落间距调整,PDF 页数从 1209 到 1084,减少了 10.34% 的页面占用。

  • 2025.4.10

    • 测试、改写“第 2.8 节 手动安装双系统(后安装 FreeBSD)”

    • NetBSD 10.1 在 VMware 虚拟机中无论 UEFI 与否,进入 kde 4 都会黑屏。

  • 2025.4.9

    • 使用 https://gist.github.com/ykla/adf011fea43f5f4b91aa6f065ac09da2 对全书过长(> 30 行)的代码块进行整理。

    • 孤行控制,删除冗余。

    • 从 1238 页到 1209 页,减少了 2.34% 的无效页面。

  • 2025.4.8

    • “第 27.2 节 NetBSD 安装图解”更新至 NetBSD 10.1

    • “桌面与中文环境常用软件”更新至 NetBSD 10.1

    • “桌面与中文环境常用软件”新增输入法

    • “桌面与中文环境常用软件”新增中文环境

    • NetBSD KDE 4 UEFI 下测试失败,还是黑屏,报错见

    • “第 16.5 节 Wildfly”测试失败,见

  • 2025.4.7

    • 全译现有所有安装后说明

    • 从 2024.8-3533 次 开始,目前对全书初版已重写 94%(按 Commit 数),下同

    • 删除“第 11.3 节 散热器、风扇、鼓风机”,可能包含错误内容

  • 2025.4.6

    • “第 17.8 节 PostgreSQL 与 pgAdmin4”新增“深入 PostgreSQL 服务管理”

    • “第 4.21 节 FreeBSD 桌面发行版”补图

  • 2025.4.5

    • 初步重写第 15.4 节 ipfirewall(IPFW)

    • 格式化第 15.2 节 PF

    • 格式化第 15.3 节 IPFilter(IPF)

    • 新增“第 4.21 节 FreeBSD 桌面发行版”

  • 2025.4.4

    • 从各个章节拆分出“第 6 章 多媒体与外设”

    • 格式化“第 5.1 节 输入法与环境变量”

    • 格式化“第 21.12 节 Linux 兼容层与 Jail”

    • mihomo(原 Clash),需要重写相关章节,我们需要一个 GUI 界面!

  • 2025.4.3

    • 从“第 20.1 节 游戏”拆分出“第 20.6 节 我的世界(Minecraft)”

    • 将“第 20.2 节 音视频播放器与剪辑”拆分为“第 20.2 节 音频播放器”、“第 20.3 节 视频播放器”、“第 20.4 节 音视频剪辑与图像处理”、

    • 测试“第 20.5 节 科研与专业工具”,并新增“Calibre 文档管理(epub、mobi、azw3 等格式)”

    • “第 20.5 节 科研与专业工具”补图

    • “第 20.1 节 游戏”:重写“Renpy 游戏”

  • 2025.4.2

    • 测试“第 20.2 节 音视频播放器”:尝试播放电视剧《人民公仆》、尝试播放动漫《败犬女主太多了!》,测试通过

  • 2025.4.1

    • https://mirrors.aliyun.com/freebsd-pkg/ 看起来早就失去同步。还是 2 月我提交 kmod 源以前的内容,故不写入

  • 2025.3.29

    • 从现在起每天在 Github release 生成一个 PDF 文档

    • 生成新的 Windows 24H2 字体包用于 Github Action

    • 重写 PDF 导出工具

  • 2025.3.27

    • “第 16.1 节 FTP 服务器”新增“vsftpd”

    • 引入 Github Action:🔗 从 SUMMARY.md 更新目录

    • 引入 Github Action:🔗 检查 SUMMARY.md 目录

    • 引入 Github Action:🔗 创建并发布 PDF 文档,从现在起每 5 天在 Github release 生成一个 PDF 文档

  • 2025.3.26

    • 重写“Pure-FTPd(基于 MySQL)”

    • 重写“ProFTPD(基于 MySQL)”

    • “第 2.2 节 命令行基础(新手入门版本)”新增“UNIX 与 Windows 文件名规范之差异”

  • 2025.3.25

    • 新增“第 15.5 节 Fail2Ban(基于 IPFW、PF、IPF)”

    • “第 12.2 节 FreeBSD EFI 引导管理”合并入“第 12.5 节 Grub & UEFI 与 efibootmgr”

  • 2025.3.24

    • 测试“第 4.2 节 安装 KDE6”,同 VMware 的虚拟显卡无兼容性问题。缩放、鼠标无缝切换均正常。注:USTC 的源可能有问题。

    • 重写“致谢”

    • 根据 clean-master/freebsdcn,将本项目的开始时间改正至 2021 年 3 月 14 日。同时明确 clean-master 清理大师的历史贡献。

    • 重写“第 4.23 节 远程桌面管理”中的“使用 FreeBSD 远程其他机器”

  • 2025.3.23

    • 格式化全书。

    • 测试“第 21.4 Linux 兼容层——基于 ArchLinux bootstrap”,在 14.2 通过

    • 改正全书失效外链和图片引用

  • 2025.3.22

    • “第 3.6 节 通过 DVD 安装软件”更新至 14.2。注意,使用 bsdinstall 通过 DVD 安装软件的方法测试失败!

    • 初步重写“第 22.0 节 如何订阅 FreeBSD 的邮件列表”

    • 调整全书章节排序、重命名全书各章节标题以符合实际内容

    • 删除“第 2.8 节 虚拟机预安装镜像(本书自制)”,过期了

    • 压缩“第 25 章 TwinCAT/BSD”

    • 删除献词、后记,无实质性内容

    • 删除“第 24.4 节 禁用 Sendmail”,过期了

    • 删除“第 5.8 节 Wine”,无实质性内容

    • “第 6.6 节 Ext 2/3/4 等文件系统”已初步重写,仍待测试

    • 删除“第 9.1 节 jail 与 docker 的比较”,无实质性内容

    • “第 14.6 节 USB 以太网卡和 USB 无线网卡”合并入“第 14.5 节 USB 网卡 & 以太网卡”

    • 删除“第 24.2 节 BSD 风格的 make/grep/sed/awk”,无实质性内容

    • 删除“第 13 章 DTrace”,无实质性内容

    • “第 12 章 FreeBSD 目录注释”合并入“第 13 章 FreeBSD 系统管理”

    • 删除“第 10.1 节 FreeBSD 安装 Virtual Box”,无实质性内容

    • “第 6.1 节 UFS”合并入“第 6.3 节 磁盘扩容”,因为无实质性内容

    • “第 1.5 节 FreeBSD 开发计划”移动至网络文章集锦

    • 删除“第 18.4 节 USB 网卡与 WiFi”,与其他章节重复

    • “第 18.6 节 树莓派 5”合并入“第 18.2 节 树莓派安装 FreeBSD”,并删除了冗余输出

    • 重写“第 17.7 节 Telegraf+InfluxDB+Grafana 监控平台”

    • 重写“第 6.6 节 Linux 文件系统”

    • 初步重写“第 1.4 节 Linux 用户迁移指南”

  • 2025.3.21

    • 重写“第 22.9 节 Shell”

    • 新增“第 24.3 节 bsdconfig 系统配置工具”

    • 重写“第 5.9 节 压缩与解压”

    • “第 2.1 节 命令行基础(新手入门版本)”新增“在 TTY 界面上下翻页/翻行”

    • 删除“第 22.11 节 Git”,因为无实际内容,且有用的命令已经分散在全文各个章节了

    • 重命名全书各章节标题以符合实际内容

  • 2025.3.20

    • “第 11.7 节 命令行基础”移动合并到“第 2.7 节 自带文本编辑器 ee 的用法”,成为“第 2.7 节 命令行基础(新手入门版本)”,并移动至“第 2.1 节 命令行基础(新手入门版本)”

    • “第 15.1 节 网络参数配置命令”新增 /etc/rc.conf 相关。注意:此部分以后需要补充等价的 ifconfig、route 临时命令。

    • “第 23.4 节 引导界面”新增“屏幕保护”

    • 为 1-5 章的大部分命令补充了英文原名说明解释。

  • 2025.3.19

    • “第 11.7 节 命令行基础”新增“thefuck:自动纠正错误拼写的命令”,但要注意,有权限的开发者似乎已经跑路了;

    • “第 11.7 节 命令行基础”新增命令行基础命令

    • 初步重写“第 8.4 节 用户权限”

  • 2025.3.18

    • “第 6.3 节 磁盘扩容”新增“附录”

    • 将“第 1.5 节 谁在使用 FreeBSD(基金会官方版本)”、“第 1.7 节 FreeBSD 特色开发项目”移动到文章集锦。因为此部分过于冗长。

    • 新增“第 11.7 节 命令行基础”

  • 2025.3.9

    • “第 22.4 节 C/C++ 环境的配置”新增“vim-codefmt 代码美化”

  • 2025.3.7

    • “第 5.4 节 安装 Firefox 与 Chromium”新增“Chromium 使用 Google 账号同步”

  • 2025.3.4

    • 重建“第 12 章 FreeBSD 源代码分析”

  • 2025.3.3

    • “第 22.5 节 Java 环境的配置”完全重写

    • “第 22.6 节 QT 环境的配置”补图

  • 2025.3.2

    • 新增“第 16.10 节 Gitlab-EE”

  • 2025.3.1

    • 新增“第 17.15 节 Zabbix 监控(基于 PostgreSQL)”

  • 2025.2.28

    • 更新“FreeBSD 镜像站现状”

  • 2025.2.26

    • 新增“第 1.9 节 加州大学伯克利分校与“Fiat Lux”(要有光)”

    • 将文学故事移动至 https://freebsd.gitbook.io/cfc

    • 新增“第 17.14 节 OnlyOffice(基于 PostgreSQL)”

  • 2025.2.25

    • “第 17.5 节 MySQL 8.X”新增“MySQL 8.4 LTS”

    • 新增“第 17.11 节 MongoDB 80”

    • “第 23.5 节 Grub & UEFI 与 efibootmgr”新增“EFI 分区删除与重建”,但仍存在文件簇的疑问

    • 完全重写“第 17.1 节 Apache”

    • 完全重写“第 17.2 节 Nginx”

    • 完全重写“第 17.3 节 PHP 8.X”

    • 新增“第 17.12 节 Tomcat”

    • 新增“第 17.13 节 Caddy”

  • 2025.2.24 “第 6.2 节 ZFS”新增“ZFS 压缩” “第 23.5 节 Grub 及其他引导”新增“UEFI 与 efibootmgr”

    • “第 3.2 节 FreeBSD 换源方式”新增“kernel modules(kmods)内核模块源:面向 FreeBSD 14.2 及更高版本(不含 15.0-CURRENT)”

    • 从“第 2.10 节 手动安装双系统(先安装 FreeBSD)”拆分出“第 2.13 节 配置 rEFInd(双系统用)”

  • 2025.2.23

    • 新增“后记”

  • 2025.2.21

    • 新增“第 2.12 节 安装 FreeBSD——基于 Apple M1&VMware Fusion Pro”

  • 2025.2.19

    • 制作了视频教程 《003-FreeBSD14.2 安装 KDE6》

  • 2025.2.16

    • 拆分“Git&Linux 败局与 FreeBSD 败局”到 19.5、19.6、19.7

  • 2025.2.15

    • 更新、补充“第 16.9 节 Webmin”

  • 2025.2.14

    • 新增“第 17.10 节 prometheus 监控部署”

  • 2025.2.13

    • 删除原 KDE6 章节,将 KDE5 章节更新为 kde6。

  • 2025.2.11

    • “第 18 章 树莓派嵌入式 & RISCV”新增“第 18.9 节 Radxa X4”

  • 2025.2.11

    • “第 2.0 节 FreeBSD 安装图解”补图、拆分章节,补充创建普通用户的说明

  • 2025.2.10

    • “第 2.0 节 FreeBSD 安装图解”新增“Auto (UFS)”

  • 2025.2.3

    • “第 1.1 节 UNIX、Unix-like、Linux 和 FreeBSD 简介”新增“UNIX 与忒修斯之船”一节

  • 2025.2.1

    • “第 18.6 节 RISC-V 简介”合并入“第 18.8 节 在 RISCV 开发板上安装 OpenBSD”

    • “第 2.0 节 FreeBSD 安装图解”补全菜单翻译

  • 2025.1.28

    • “第 23.4 节 引导界面”新增:“调整引导界面和 TTY 分辨率”、“自定义引导加载程序 Logo”

  • 2025.1.21

    • 将授权协议由 BSD 协议转为 CC-BY 协议(署名 4.0 协议国际版)

  • 2025.1.19

    • 更新“第 21.3 节 Linux 兼容层——基于 Ubuntu/Debian”,在 14.2 测试通过

    • “第 14.3 节 USB 网络共享(USB tethering)”完全重写

    • 完全重写“第 21.1 节 Linux 兼容层实现”

    • 图片文件名去中文化,方便编程

  • 2025.1.18

    • 添加“致谢”,将“贡献者名单”移动至此独立页面

    • 添加“献词”

    • 添加“凡例”,将“序言”中非序言部分移动至此。

  • 2025.1.13

    • 关闭 Issue 第 1.5 章,内容有误

    • 新增“第 2.11 节 Qemu 安装 RISC-V FreeBSD(基于 x86 Windows)”

    • 新增“第 4.23 节 安装 Fluxbox”

    • 新增“第 4.24 节 安装 IceWM”

    • “第 24.5 节 利用脚本自动生成 BSDlibc 库文本”:脚本更新

    • “第 8.1 节 sudo 与 doas”新增“doas”

  • 2025.1.11

    • “第 4.13 节 安装 KDE6”新增“基于开发中的 Ports(需要长时间编译)”

  • 2025.1.10

    • “第 2.4 节 安装 FreeBSD——基于 VMware Workstation Pro”重写“共享文件夹”

  • 2025.1.9

    • “第 4.16 节 安装 CDE”补图

  • 2025.1.8

    • “第 4.0 节 概述(必看)”合并入 4.1 节

    • “第 4.1 节 安装显卡驱动及 Xorg(必看)”更名为“第 4.1 节 桌面环境概述、安装显卡驱动&Xorg”

    • “第 4.3 节 安装 Gnome”新增“一些反人类设置的调整”,补图

    • “第 4.5 节 安装 Xfce”补图

    • “第 4.6 节 安装 Cinnamon”补图

    • “第 4.8 节 安装 LXQt”补图

    • “第 4.4 节 安装 Mate”补图,删除冗余

    • 新增“第 4.14 节 安装 Budgie”

    • “第 4.7 节 安装 Lumina”补图

    • 新增“第 4.21 节 安装 LXDE”

    • 新增“第 4.22 节 安装 Window Maker”

    • “第 19.2 节 Linux 败局与 FreeBSD 败局”新增“为何不能选择 Linux 桌面操作系统?”

  • 2025.1.6

    • 新增“第 2.9 节 安装 FreeBSD——基于 Apple M1&Parallels Desktop 20”

    • 新增“第 2.10 节 手动安装双系统(先安装 FreeBSD)”

    • “第 2.9 节 安装 FreeBSD——基于 Apple M1&Parallels Desktop 20”新增“虚拟机工具”

  • “序言”新增“存在即破烂(2025 代序)”

  • 2024.12.19

    • “第 6.3 节 磁盘扩容”新增“ZFS 磁盘扩容”一节

    • “第 10.3 节 使用 bhyve 安装 Windows 11”完全重写。

    • “第 2.3 节 安装 FreeBSD——基于 Virtual Box”补充图片

    • 为第 20 章相关软件包补充 port,删除失效软件包

    • 删除无实质性内容的“第 10.1 节 虚拟化简介”

    • “第 23.3 节 FreeBSD 中文 TTY 控制台”完全重写,验证通过

    • 新增“第 4.21 节 安装 KDE6”

    • 删除“第 4.13 节 安装 Wayland (可选)”,无实质性内容

  • 2024.12.18

    • “第 2.4 节 安装 FreeBSD——基于 VMware Workstation Pro”新增“配置虚拟机”

    • “第 2.0 节 FreeBSD 安装图解”还原“怎么看你的硬件支持不支持呢?”一节

    • “第 1.3 节 为什么要使用 FreeBSD”新增“诚实与可信”一节

    • 将“编撰说明”、“参考资料”、“贡献者名单”合并为“序言”

    • “序言”新增“2021-2024 自序”

  • 2024.12.17

    • “第 2.0 节 FreeBSD 安装图解”新增“FreeBSD 镜像说明”一节

    • 将原“第 2.6 节 普通电脑下载安装哪个镜像,如何刻录镜像?”合并入“第 2.0 节 FreeBSD 安装图解”

    • 新增“第 1.8 节 谁在使用 FreeBSD?(中文社区版本)”

  • 2024.12.16

    • “第 26.1 节 安装”更新至 OpenBSD 7.6

    • “第 26.4 节 桌面与其他软件”中 KDE5 在 OpenBSD 7.6 依旧测试失败,而且错误看起来更严重了

  • 2024.12.14

    • 将文学故事章节 FreeBSD 相关内容重新上线

  • 2024.12.4

    • 制作了视频教程《001-WIndows11 安装 VMware17》、《002-VMware17 安装 FreeBSD14.2》《003-FreeBSD14.2 安装 KDE5》、《004-FreBSD14.2 允许 root 登录 ssh》、《005-FreeBSD14.2 更换 pkg 源为 USTC 镜像站》和《006-FreeBSD14.2 安装 fcitx5 及其输入法》。已经分别插入了对应的目录。

  • 2024.12.3

    • “第 1.3 节 为什么要使用 FreeBSD”新增“旧闻:《FreeBSD 基金会收到史上最大一笔捐款》”

  • 2024.11.30

    • “第 3.7 节 通过 freebsd-update 更新 FreeBSD”更新至 FreeBSD 14.2-RELEASE

    • “第 2.0 节 FreeBSD 安装图解”更新至 FreeBSD 14.2-RELEASE

    • “第 3.4 节 软件包管理器 pkg 的用法”修订“安装 pkg”一节

  • 2024.11.29

    • 更新“第 1.6 节 FreeBSD 开发计划”:同步上游

  • 2024.11.27

    • “第 1.2 节 BSD 与哲学家 George Berkeley”新增“贝克莱与爱因斯坦”

  • 2024.11.26

    • “第 19.2 节 Linux 败局与 FreeBSD 败局”新增“Git 典型缺陷”

  • 2024.11.22

    • “第 4.11 节 主题与美化”新增“系统更新提示 freebsd-update-notify”

    • “第 17.9 节 AList”新增“官方二进制包”

    • 更新“第 16.3 节 Nodejs 相关”

  • 2024.11.17

    • “第 4.2 节 安装 KDE 5”新增“解除自动锁屏”

  • 2024.11.15

    • “第 4.2 节 安装 KDE 5”新增“登录界面主题”

  • 2024.11.12

    • “第 3.4 节 软件包管理器 pkg 的用法”新增“如何查找缺少的 .so(适用于 Linux 兼容层)”

    • “第 21.13 节 Linux 兼容层故障排除与配置”更新“sysctl 变量(基于 FreeBSD 14.1)”

  • 2024.11.9

    • 新增一节:“第 6.8 节 自动挂载文件系统”

    • 新增一节:“第 5.10 节 FreeBSD 安装微信(Linux 版)”

    • “第 5.5 节 FreeBSD 安装金山 WPS(Linux 版)”:新增“基于 RockyLinux 兼容层(FreeBSD Port)”安装 WPS

  • 2024.11.8

    • "第 1.1 节 UNIX、Unix-like、Linux 和 FreeBSD 简介":补充“MacOS/iOS 等与 BSD 的关系”

  • 2024.11.7

    • “第 6.4 节 NTFS 的挂载”:新建“格式化”、挂载部分。

    • 针对“Add new category fs for file systems” 进行修改

  • 2024.11.2

    • “第 19.2 节 Linux 败局与 FreeBSD 败局” 补充思考题

    • 新建“第 19.3 节 驳《还有人记得 Linux 之前,那个理想又骄傲的 BSD 吗?》”

    • “第 17.6 节 NextCloud——基于 PostgreSQL”补充一节:“在 nextcloud 中挂载 samba 共享”

  • 2024.11.1

    • 新建一章:“第 17.6 节 NextCloud——基于 PostgreSQL”,并测试通过

  • 2024/10/30

    • “第 14.5 节 以太网卡”:修正配置文件路径

    • 新增“第 0.5 节 MySQL 数据库”

  • 2024.10.29

    • 将原“第 11 章更新与升级 FreeBSD”拆分到第 3 章,将原“第 0 章计算机概论”移动到第 11 章

    • “第 3.9 节 使用 pkgbase 更新 FreeBSD”补充境内镜像站,并测试通过 NJU 163 USTC

  • 2024.10.28

    • “第 17.9 节 AList”:服务部分测试通过

  • 2024.10.27

    • USTC、163、NJU pkg-freebsd 源基本恢复正常

    • 新增一节:“第 17.9 节 AList”

    • "第 4.16 节 安装 CDE" 测试通过

  • 2024.10.8

    • 同步更新“第 1.5 节 谁在使用 FreeBSD”

    • 重写“第 4.1 节 安装显卡驱动及 Xorg(必看)”

  • 2024.10.7

    • USTC、163、NJU pkg-freebsd 源故障,已经反馈

    • 同步上游:“第 1.6 节 FreeBSD 开发计划”

  • 2024.10.5

    • 添加贡献者“dongdigua”

    • “第 3.4 节 软件包管理器 pkg 的用法”:重写故障排除。

    • 新增一节:“第 2.2 节 安装 FreeBSD——基于 Hyper-V”,原章节拆分到各个子章节。

    • 将“参考资料与贡献者名单”拆分成独立的两个小节

  • 2024.9.27

    • 将“第 1.2 节 FreeBSD 与哲学家 George Berkeley”中有关 FreeBSD 的内容移动至“第 1.1 节 UNIX、Unix-like、Linux 和 FreeBSD 简介”

    • 改写“第 1.2 节 BSD 与哲学家 George Berkeley”,并补充参考文献

    • 根据 FreeBSD-14.1-RELEASE 完全重写“第 2.0 节 图解安装”

  • 2024.9.20

    • “第 3.5 节 使用 ports 以源代码方式安装软件”:重写 ccache 3、ccache 4 两节。测试通过。

    • 制作了 14.1-RELEASE、15.0-CURRENT 两个虚拟机镜像

    • 新建一节“第 2.9 节 虚拟机预安装镜像”

    • “第 21.10 节 RockyLinux 兼容层(FreeBSD Port)”测试通过,将 QQ 安装方法移动至 QQ 章节。

  • 2024.9.19

    • 新增“第 21.10 节 RockyLinux 兼容层(FreeBSD Port)”

    • “第 6.2 节 ZFS”新增“zfs 用户级管理”

  • 2024.9.18

    • “第 3.5 节 使用 ports 以源代码方式安装软件”:测试、重写 ccache、wget2 两节。

  • 2024.9.14

    • 补充了几款 Windows 上的 SSH 工具

  • 2024.9.13

    • 补充若干存储卡、U 盘的测试数据

  • 2024.9.9

    • 将小说诗歌杂记等与 FreeBSD 无关内容下线

  • 2024.9.4

    • 测试创建第 0 章,正确性待考察

    • 还原“第 0.4 节 操作系统”

    • “第 26.1 节 安装”:同步至 OpenBSD 7.5

    • “第 26.4 节 桌面与其他软件”:测试 KDE5

  • 2024.9.3

    • 将原 2.7 节合并至 2.6 节

  • 2024.8.29

    • “第 19.1 节 开源与苦难哲学”:根据 v2ex 增补“长衫”小节

    • “第 1.4 节 Linux 用户迁移指北”:将“各大 GNU/Linux 发行版对比”一节移动到“第 19.2 节 Linux 败局与 FreeBSD 败局”,因为此节内容对 FreeBSD 新手没有多大帮助,反而会产生诸多误解

  • 2024.8.25:“第 18.10 节 存储卡参数简介与测试”:新增“任何速度超过 104MB/秒的 microSD 存储卡无意义”一节

  • 2024.8.22:“第 18 章 树莓派与 RISCV”拆分,增加《第 18.10 节 存储卡参数简介与测试》、《第 18.11 节 总线接口与协议》、《第 18.12 节 散热器、风扇、鼓风机》

  • 2024.8.21:“第 18.1 节 树莓派简介与配件选用”新增一节“如何测试存储卡和硬盘?”

  • 2024.8.19:“第 1.3 节 为什么要使用 FreeBSD”:补充“选择 FreeBSD 的一句话原因——FreeBSD 能在流变的世界中寻求理想的中道”一节

    • “第 1.5 节 Linux 用户迁移指北”:补充例子,使其总体呈现客观化

    • 删除原“第 1.4 节 其他 BSD 简介”,因为和后续章节重复

  • 2024.8.15:“第 1.5 节 Linux 用户迁移指北”:补充外链、依据、命令等,使其总体呈现客观化

    • “第 1.1 节 UNIX、Unix-like、Linux 简介”:补充外链

    • 重现全文代码高亮

    • 为编撰说明一节增加了一个 pkg、ports 用法的简单例子

  • 2024.8.15:“第 24.1 节 BSD INIT 管理服务”完全重写

    • “第 1.2 节 FreeBSD 简史”:重写“BSD 与哲学家 George Berkeley”一节

  • 2024.8.14:为全文的 pkg 包补充 port 方式,以防止人们忘记 Ports,同时方便需要 Ports 的用户

    • 删除原 7.5 节,因为无实质性内容

  • 2024.8.11:删除原第 2.7 节 手动安装 FreeBSD,因为和原第 2.1 节 安装双系统重复

    • 第 1.2 节 FreeBSD 简史:重新校对“时间表”

  • 2024.8.10:“第 4.12 节 远程桌面管理”:新增一节,VNC 与 RPD(XRDP)对比。整体完全重写。新增一小节“使用 Android 通过 XRDP 远程访问 FreeBSD”;新增一小节“RustDesk 中继服务器”

    • 第 16 章 服务器:基本删除了所有不存在实质性内容的小节

  • 2024.8.9:“第 18 节”:补充扩容卡、虚标卡等信息

  • 2024.8.7:精简压缩第 3、10、11、12、14、17 章;删除冗余

    • 基本删除了全书所有不存在实质性内容的章节

    • “第 2.9 节 SSH 相关软件推荐与 SSH 配置”:增加了 PuTTY 的典型缺陷论证;新增一节——“mosh:移动的 shell”。完全重写一节:“WinSCP 下载”

  • 2024.8.6:“第 18.1 节 树莓派简介”:完全重写

    • 移除兼容层相关失效链接

    • “第 18.9 节 树莓派 5”:新增一节,涉及 HAT+、总线、接口与协议、散热器、风扇等

    • 精简压缩第 1、12、14、19、20、25 章,删除冗余

  • 2024.8.5:“第 11.3 节 通过源代码更新”:将“Git 代理设置方法”移动至此。补充了“nvi”相关信息。整体排版优化

    • “第 1.6 节 UNIX 哲学”:删除不可靠且无依据的内容及引用

      • 出于可靠性考量,本书原则上禁止引用“阮一峰(https://www.ruanyifeng.com/)”相关内容作为参考文献

    • “第 18.2 节 系统安装”:整体排版优化;新增存储卡挑选技巧、新增 SD 卡标准分析

  • 2024.8.1:“第 2.4 节 安装 FreeBSD——基于 Vmware Workstation Pro”:新增博通注册、登录、下载流程

  • Bug 291295 - net/mihomo: Add rc.conf and some Post-installation
    https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=289769
    https://www.freebsd.org/releases/15.0R/installation/#upgrade-binary
    FreeBSD-Ask/zfs-snap 项目地址
    https://docs.bsdcn.org/zfs.sh
    Fix typos and unify Realtek terminology
    NOTES: Fix a typo in a comments
    NOTES: Remove duplicate options KCSAN entries
    https://docs.bsdcn.org/feed.rss
    Bug 291052 - Request to offline-distribute kernel modules and pkg(8) repositories in iso and img images.
    net/wutil
    wutil: no wpa ctrl interface on default path, provide --ctrl-interface: No error: 0
    vm-bhyve Wiki
    Bug 290857 - bsdinstall: The ESP on FreeBSD Should Be FAT32 Instead of FAT16: D28897 Is Actually Ineffective
    https://docs.bsdcn.org
    https://book.bsdcn.org
    https://docs.bsdcn.org
    https://docs.bsdcn.org
    Bug 290122 - graphics/drm-latest-kmod:and related DRM ports missing CONFLICTS_INSTALL entries
    sysutils/pacman: The archlinux flavor cannot be built or installed.
    x11/budgie: After logging in with LightDM, it crashes and then shows a black screen.
    https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=287538
    https://docs.bsdcn.org/
    https://freebsd-ask.github.io
    clean-master/freebsdcn
    clean-master 清理大师
    被标记为
    https://gnats.netbsd.org/57554
    Bug 285956 - java/wildfly: service start fail, illegal group name

    7.4 Hyprland

    警告

    由于 DRM GPU 驱动未移植,目前在常见虚拟机中均不可用。

    在 Nvidia 下不可用!

    除软件包安装、重启外,本文任何命令应在非 root 账户权限下执行!

    Hyprland 是 Wayland 的一款合成器,支持窗口透明、模糊、圆角等等,动画效果做得不错。Hyprland 窗口焦点切换和传统桌面有所区别,它是鼠标光标放在哪个窗口上(没错是“放在”,不需要点击),窗口焦点就在哪里,通常没有 Alt+Tab 这种快捷键去切换。

    hyprland on freebsd

    安装 Hyprland

    使用 pkg 安装

    或者使用 Ports 安装

    解释软件包

    注意

    作为依赖会自动安装 dbus 及 wayland。

    包名
    作用说明

    启动服务

    启动 Hyprland

    设置 XDG_RUNTIME_DIR

    先设置 XDG_RUNTIME_DIR 避免启动报错。

    如果是默认 shell sh,将以下写入 ~/.profile(对于 zsh,放入 ~/.zprofile,下同):

    随后重启:reboot。

    按快捷键 Ctrl+Alt+F2 进入 tty,执行 dbus-run-session Hyprland,将在 ~/.config/hypr 生成默认配置文件。

    配置自动启动

    如果需要在不使用登录管理器的前提下开机自动启动 Hyprland,请将下行写入 ~/.profile:

    也可以通过 Hyprland -c 配置文件路径 来指定配置文件。

    配置默认配置文件 hyprland.conf

    Hyprland 默认配置文件的位置是 ~/.config/hypr/hyprland.conf。

    注意:

    • 在启动后,Hyprland 默认在顶部会有一个黄色的条带警告标识。可以在配置文件中将其注释掉,找到这行 autogenerated = 1,在开头添加注释符号 # 即可(亦可将其整行删除)。

    • 默认将 Windows 徽标键(类 Unix 中为 Super 键,下同)视作 mod 键(根据个人习惯设置,也可以设置为 Alt 键等等)$mainMod = SUPER。

    • 悬浮窗口和传统桌面环境中的行为类似,能随意拖动到屏幕上的任何位置,可以用鼠标调节窗口大小。默认的配置文件中是按住 mod 键,然后鼠标左键按住悬浮窗口可以拖动窗口进行移动,而按住右键拖动窗口可以调节窗口的大小。设置默认悬浮的窗口:windowrulev2 = float, title:QQ

    任务栏:exec-once=waybar

    • hyprland.conf

    示例:

    配置 kitty.conf

    • 文件位置:~/.config/kitty/kitty.conf。

    示例:

    配置 waybar(任务栏)

    waybar 的配置文件目录在 ~/.config/waybar 文件夹里面,当中存在文件 config.jsonc、style.css. 可以参考使用示例配置文件的 waybar 文件夹。示例配置文件中需要安装软件包 noto-emoji 才能正常显示,读者也可以改成自己想要的图标。

    config.jsonc 示例:

    style.css 示例:

    配置 swaylock

    swaylock 的配置文件在 ~/.config/swaylock/config 中。

    • 示例配置文件:

    故障排除与未竟事宜

    启动失败/黑屏

    请读者检查有没有把自己的普通用户加入到 video 组,有没有安装显卡驱动,有没有正确设置环境变量 XDG_RUNTIME_DIR,并检查上述设置是否已生效。

    参考文献

    • 指出启动命令应为 dbus-run-session Hyprland

    • 指出虚拟机需要 3D 加速,因此依赖 drm GPU,而 FreeBSD 目前未进行移植,故在 FreeBSD 上不支持。同时在所有平台上 Nvidia 均无法得到支持。

    Hyprland 的 XDG Desktop Portal 实现,提供与其他应用程序的通信接口

    hyprpicker

    颜色选择器

    swaybg

    壁纸工具

    mako

    显示通知

    nerd-fonts

    图标字体,可以用来在配置文件中插入图案,显示在 waybar 等地方

    slurp

    屏幕选择工具,用来在屏幕上选区

    grim

    屏幕截图工具

    swaylock

    锁屏工具

    kitty

    终端

    dolphin

    文件管理器

    hyprpolkitagent

    polkit 验证代理

    建议阅读一下下面的配置文件 hyprland.conf,swaybg 用于设置壁纸,别忘了修改成你自己的图片文件的所在路径。

    hyprland

    动态平铺式 Wayland 合成器

    waybar

    为 wlroots 合成器(如 Hyprland)设计的 GTK 状态栏

    wofi

    程序启动器(或者用 rofi 也可以,可以了解一下)

    qt6-base

    Qt 6 的基础模块

    qt5-wayland

    Qt 5 的 Wayland 支持模块,能让 Qt 5 应用程序在 Wayland 环境中运行。

    qt6-wayland

    Qt 6 的 Wayland 支持模块,能让 Qt 6 应用程序在 Wayland 环境中运行。

    ArchLinux 下 Hyprland 配置指北
    Hyprland 的配置
    Gentoo Wiki Hyprland
    Arch Wiki Hyprland

    xdg-desktop-portal-hyprland

    # pkg ins hyprland waybar wofi qt6-base qt5-wayland qt6-wayland xdg-desktop-portal-hyprland hyprpicker swaybg mako nerd-fonts slurp grim swaylock kitty dolphin hyprpolkitagent
    # cd /usr/ports/x11-wm/hyprland/ && make install clean
    # cd /usr/ports/x11/waybar/ && make install clean
    # cd /usr/ports/x11/wofi/ && make install clean
    # cd /usr/ports/devel/qt6-base/ && make install clean
    # cd /usr/ports/graphics/qt5-wayland/ && make install clean
    # cd /usr/ports/graphics/qt6-wayland/ && make install clean
    # cd /usr/ports/x11/xdg-desktop-portal-hyprland/ && make install clean
    # cd /usr/ports/x11/hyprpicker/ && make install clean
    # cd /usr/ports/x11/swaybg/ && make install clean
    # cd /usr/ports/x11/mako/ && make install clean
    # cd /usr/ports/x11-fonts/nerd-fonts/ && make install clean
    # cd /usr/ports/x11/slurp/ && make install clean
    # cd /usr/ports/x11/grim/ && make install clean
    # cd /usr/ports/x11/swaylock/ && make install clean
    # cd /usr/ports/x11-fm/dolphin/ && make install clean
    # cd /usr/ports/x11/kitty/ && make install clean
    # cd /usr/ports/sysutils/hyprpolkitagent/ && make install clean
    # service seatd enable
    # service dbus enable
    export XDG_RUNTIME_DIR=/var/run/user/`id -u`
    dbus-run-session Hyprland
    # 进入 Hyprland 后自动启动 fcitx5。已经注释掉,读者在安装 fcitx5 后可自行取消掉注释
    #exec-once=fcitx5
    # 设置壁纸,别忘了修改成你自己壁纸文件的所在路径!!
    #exec-once=swaybg -i "$HOME/Pictures/Wallpapers/壁纸.jpg"
    # 任务栏
    exec-once=waybar
    # swaylock 锁屏
    exec-once=swayidle -w timeout 300 'swaylock'
    
    # autogenerated = 1 # 移除或者注释这一行以消除屏幕顶部警告标识。
    
    # See https://wiki.hyprland.org/Configuring/Monitors/
    monitor=,preferred,auto,auto
    
    # See https://wiki.hyprland.org/Configuring/Keywords/ for more
    
    # Source a file (multi-file configs)
    # source = ~/.config/hypr/myColors.conf
    
    # Some default env vars.
    env = XCURSOR_SIZE,24
    
    # For all categories, see https://wiki.hyprland.org/Configuring/Variables/
    input {
        kb_layout = us
        kb_variant =
        kb_model =
        kb_options =
        kb_rules =
    
        follow_mouse = 1
    
        touchpad {
            natural_scroll = no
        }
    
        sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
    }
    
    general {
        # See https://wiki.hyprland.org/Configuring/Variables/ for more
    
        gaps_in = 5
        gaps_out = 20
        border_size = 2
        col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
        col.inactive_border = rgba(595959aa)
    
        layout = dwindle
    }
    
    animations {
        enabled = yes
    
        # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
    
        bezier = myBezier, 0.05, 0.9, 0.1, 1.05
    
        animation = windows, 1, 7, myBezier
        animation = windowsOut, 1, 7, default, popin 80%
        animation = border, 1, 10, default
        animation = borderangle, 1, 8, default
        animation = fade, 1, 7, default
        animation = workspaces, 1, 6, default
    }
    
    dwindle {
        # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
        pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
        preserve_split = yes # you probably want this
    }
    
    gestures {
        # See https://wiki.hyprland.org/Configuring/Variables/ for more
        workspace_swipe = off
    }
    
    # 窗口规则
    # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
    windowrulev2 = float, title:rofi.*
    windowrulev2 = float, title:QQ
    windowrulev2 = float, title:图片查看器
    
    
    # See https://wiki.hyprland.org/Configuring/Keywords/ for more
    $mainMod = SUPER # 用 win 键作为 mainmod 键
    $shiftMod=SUPER_SHIFT
    $altMod=SUPER_ALT
    $alt=ALT
    $shift=SHIFT
    
    # Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
    bind = $mainMod, Q, exec, kitty # 打开终端
    bind = $mainMod, C, killactive,  # 关闭窗口
    bind = $mainMod, M, exit, # 注销
    bind = $mainMod, E, exec, dolphin # 文件管理器
    bind = $mainMod, V, togglefloating,  # 切换为悬浮窗口,可拖动
    bind = $mainMod, R, exec, wofi --show drun # 软件启动器,类似菜单
    bind = $mainMod, P, pseudo, # 焦点窗口(光标对准的窗口)在平铺窗口原本占有的区域内自由调节大小和位置
    bind = $mainMod, J, togglesplit, # 调节焦点窗口与相邻窗口的排布方向,上下排列或者左右排列。
    ### 截图
    $screen_file=${HOME}/screen_shot_$(date + "%Y-%m-%d_%H-%M-%S").png
    bind=$shiftMod, S, exec, grim -g "$(slurp)" - | wl-copy
    bind=, Print,      exec, grim $screen_file
    bind=$shift, Print,exec, grim -g "$(slurp)" $screen_file
    bind=$alt, Print,  exec, grim - | wl-copy
    
    # Move focus with mainMod + arrow keys
    bind = $mainMod, left, movefocus, l
    bind = $mainMod, right, movefocus, r
    bind = $mainMod, up, movefocus, u
    bind = $mainMod, down, movefocus, d
    
    # Switch workspaces with mainMod + [0-9]
    # 切换工作区 mainmod 键 + 数字键,1 到 0 对应 10 个工作区。
    bind = $mainMod, 1, workspace, 1
    bind = $mainMod, 2, workspace, 2
    bind = $mainMod, 3, workspace, 3
    bind = $mainMod, 4, workspace, 4
    bind = $mainMod, 5, workspace, 5
    bind = $mainMod, 6, workspace, 6
    bind = $mainMod, 7, workspace, 7
    bind = $mainMod, 8, workspace, 8
    bind = $mainMod, 9, workspace, 9
    bind = $mainMod, 0, workspace, 10
    
    # Move active window to a workspace with mainMod + SHIFT + [0-9]
    # 把窗口移动到别的工作区,例如 mainmod+Shift+2(win 键 +2 是查看工作区 1)
    bind = $mainMod SHIFT, 1, movetoworkspace, 1
    bind = $mainMod SHIFT, 2, movetoworkspace, 2
    bind = $mainMod SHIFT, 3, movetoworkspace, 3
    bind = $mainMod SHIFT, 4, movetoworkspace, 4
    bind = $mainMod SHIFT, 5, movetoworkspace, 5
    bind = $mainMod SHIFT, 6, movetoworkspace, 6
    bind = $mainMod SHIFT, 7, movetoworkspace, 7
    bind = $mainMod SHIFT, 8, movetoworkspace, 8
    bind = $mainMod SHIFT, 9, movetoworkspace, 9
    bind = $mainMod SHIFT, 0, movetoworkspace, 10
    
    # 使用 mainMod + 鼠标滚轮 滚动浏览现有工作区
    bind = $mainMod, mouse_down, workspace, e+1
    bind = $mainMod, mouse_up, workspace, e-1
    
    # Move/resize windows with mainMod + LMB/RMB and dragging
    bindm = $mainMod, mouse:272, movewindow
    bindm = $mainMod, mouse:273, resizewindow
    
    # Look and feel
    
    ## Color
    # include ./obsidian.color.conf
    
    ## 字体设置
    font_family      Hasklug Nerd Font Mono
    font_size 14.0
    #font_features FiraCodeNerdFontCompleteM-Retina +ss02 +ss03 +ss04 +ss05 +ss07 +zero
    
    ## 文本光标设置
    cursor_blink_interval      2.0
    cursor_stop_blinking_after 5.0
    
    ## Scrollback
    scrollback_lines -1
    
    ## 鼠标相关设置
    copy_on_select yes    # 选中文本时复制
    mouse_hide_wait 2.0   # 定时隐藏鼠标
    
    ## 提示 🔔
    enable_audio_bell no
    visual_bell_duration 0.3
    bell_on_tab yes
    
    ## Tabs
    tab_bar_edge top
    tab_bar_style powerline
    tab_powerline_style angled
    active_tab_foreground   #111
    active_tab_background   #eee
    active_tab_font_style   bold
    inactive_tab_foreground #666
    inactive_tab_background #888
    tab_bar_background #444
    inactive_tab_font_style normal
    tab_title_template "{fmt.fg.gray}{index}{fmt.fg.default}:{title}"
    active_tab_title_template "{title}"
    
    # Mechanics
    input_delay 2
    editor nvim
    allow_remote_control no
    allow_hyperlinks no
    term xterm-256color
    macos_option_as_alt yes
    macos_quit_when_last_window_closed yes
    strip_trailing_spaces smart
    update_check_interval 72
    hide_window_decorations titlebar-only
    
    # Shortcuts
    clear_all_shortcuts yes
    
    ## The defaults
    map ctrl+a                pipe @text tab pbcopy
    map ctrl+shift+c          copy_to_clipboard
    map ctrl+shift+v          paste_from_clipboard
    map ctrl+alt+j            scroll_page_up
    map ctrl+alt+k            scroll_page_down
    map ctrl+k                clear_terminal reset active
    
    ## 标签页管理
    map ctrl+t                new_tab_with_cwd !neighbor
    map alt+s                next_tab
    map alt+a                previous_tab
    map alt+q                close_tab
    map ctrl+s                set_tab_title
    map ctrl+shift+left       move_tab_backward
    map ctrl+shift+right      move_tab_forward
    map alt+1                goto_tab 1
    map alt+2                goto_tab 2
    map alt+3                goto_tab 3
    map alt+4                goto_tab 4
    map alt+5                goto_tab 5
    map alt+6                goto_tab 6
    map alt+7                goto_tab 7
    map alt+8                goto_tab 8
    map alt+9                goto_tab 9
    
    # 文字大小调节
    map ctrl+equal            change_font_size current +1.0
    map ctrl+minus            change_font_size current -1.0
    map ctrl+0                change_font_size current 0
    
    #include ${ARCH}.conf
    
    {
        "position": "top",
        "layer": "top",
        "height": 16,
        "margin-top": 0,
        "margin-bottom": 0,
        "margin-left": 0,
        "margin-right": 0,
        "modules-left": ["custom/launcher", "wlr/workspaces", "custom/playerctl", "custom/playerlabel"],
        "modules-center": ["cpu", "memory", "disk"],
        "modules-right": ["tray", "custom/randwall", "network", "pulseaudio", "clock"],
    	"clock": {
    		"format": "⏰  {:%H:%M}",
    		"tooltip": "true",
            	"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
            	"format-alt": "🗓️  {:%y/%m/%d}"
    	},
    
    
    	"wlr/workspaces": {
            "active-only": false,
            "all-outputs": true,
            "disable-scroll": false,
            "on-scroll-up": "hyprctl dispatch workspace -1",
            "on-scroll-down": "hyprctl dispatch workspace +1",
    		"format": "{icon}",
    		"on-click": "activate",
    		"format-icons": {
    			"urgent": "",
    			"active": "🔴",
    			"default": "🔵",
        "sort-by-number": true
        },
        },
    
        "custom/playerctl": {
          "format": "{icon}",
          "return-type": "json",
          "max-length": 64,
          "exec": "playerctl -a metadata --format '{\"text\": \"{{artist}} - {{markup_escape(title)}}\", \"tooltip\": \"{{playerName}} : {{markup_escape(title)}}\", \"alt\": \"{{status}}\", \"class\": \"{{status}}\"}' -F",
          "on-click-middle": "playerctl play-pause",
          "on-click": "playerctl previous",
          "on-click-right": "playerctl next",
          "format-icons": {
            "Playing": "<span foreground='#E5B9C6'>󰒮 󰐌 󰒭</span>",
            "Paused": "<span foreground='#928374'>󰒮 󰏥 󰒭</span>"
          },
        },
    
        "custom/playerlabel": {
          "format": "<span>{}</span>",
          "return-type": "json",
          "max-length": 48,
          "exec": "playerctl -a metadata --format '{\"text\": \"{{artist}} - {{markup_escape(title)}}\", \"tooltip\": \"{{playerName}} : {{markup_escape(title)}}\", \"alt\": \"{{status}}\", \"class\": \"{{status}}\"}' -F",
          "on-click-middle": "playerctl play-pause",
          "on-click": "playerctl previous",
          "on-click-right": "playerctl next",
          "format-icons": {
            "Playing": "<span foreground='#E5B9C6'>󰒮 󰐌 󰒭</span>",
            "Paused": "<span foreground='#928374'>󰒮 󰏥 󰒭</span>"
          },
        },
    
      "memory": {
        "format": "🌊 {}%",
        "format-alt": "🌊 {used}/{total} GiB",
        "interval": 5
      },
    
      "cpu": {
        "format": "📟 {usage}%",
        "format-alt": "📟 {avg_frequency} GHz",
        "interval": 5
      },
    
      "disk": {
        "format": "📦 {}%",
        "format-alt": "📦 {used}/{total} GiB",
        "interval": 5,
        "path": "/"
      },
    
    	"network": {
            	//"format-ethernet": " {ifname}: {ipaddr}",
                "format-ethernet": " IP: {ipaddr}",
            	//"format-linked": " {ifname} (No IP)",
            	"format-disconnected": "󰤭",
            	//"format-alt": " {ifname}: {ipaddr}/{cidr}",
              "tooltip-format": "{essid}",
              "on-click-right": "nm-connection-editor"
    	},
    
    	"tray": {
    		"icon-size": 16,
    		"spacing": 5
    	},
    
    	"backlight": {
    	"format": "{icon} {percent}%",
            "format-icons": ["", "", "", "", "", "", "", "", ""],
    	},
    
    	"pulseaudio": {
    		"format": "{icon} {volume}%",
            	"format-muted": "🔇",
    		"format-icons": {
    			"default": ["🔈", "🔉", "🔊"]
    		},
        "scroll-step": 5,
      },
      "custom/launcher": {
        "format": "🚀",
        "on-click": "wofi --show drun",
        "on-click-right": "wofi --show drun"
      },
    }
    
    * {
        border: none;
        border-radius: 0px;
        /*font-family: VictorMono, Iosevka Nerd Font, Noto Sans CJK;*/
        font-family: Cascadia Code, FontAwesome, Noto Sans CJK, Microsoft YaHei UI, HarmonyOS Sans;
        font-size: 14px;
        font-style: normal;
        min-height: 0;
    }
    
    window#waybar {
        background: rgba(30, 30, 46, 0.5);
        border-bottom: 1px solid #282828;
        color: #f4d9e1
    }
    
    #workspaces {
    	background: #282828;
    	margin: 5px 5px 5px 5px;
      padding: 0px 5px 0px 5px;
    	border-radius: 16px;
      border: solid 0px #f4d9e1;
      font-weight: normal;
      font-style: normal;
    }
    #workspaces button {
        padding: 0px 5px;
        border-radius: 16px;
        color: #928374;
    }
    
    #workspaces button.active {
        color: #f4d9e1;
        background-color: transparent;
        border-radius: 16px;
    }
    
    #workspaces button:hover {
    	background-color: #E6B9C6;
    	color: black;
    	border-radius: 16px;
    }
    
    #custom-date, #clock, #battery, #pulseaudio, #network, #custom-randwall, #custom-launcher {
    	background: transparent;
    	padding: 5px 5px 5px 5px;
    	margin: 5px 5px 5px 5px;
      border-radius: 8px;
      border: solid 0px #f4d9e1;
    }
    
    #custom-date {
    	color: #D3869B;
    }
    
    #custom-power {
    	color: #24283b;
    	background-color: #db4b4b;
    	border-radius: 5px;
    	margin-right: 10px;
    	margin-top: 5px;
    	margin-bottom: 5px;
    	margin-left: 0px;
    	padding: 5px 10px;
    }
    
    #tray {
        background: #282828;
        margin: 5px 5px 5px 5px;
        border-radius: 16px;
        padding: 0px 5px;
        /*border-right: solid 1px #282738;*/
    }
    
    #clock {
        color: #E6B9C6;
        background-color: #282828;
        border-radius: 0px 0px 0px 24px;
        padding-left: 13px;
        padding-right: 15px;
        margin-right: 0px;
        margin-left: 10px;
        margin-top: 0px;
        margin-bottom: 0px;
        font-weight: bold;
        /*border-left: solid 1px #282738;*/
    }
    
    
    #battery {
        color: #9ece6a;
    }
    
    #battery.charging {
        color: #9ece6a;
    }
    
    #battery.warning:not(.charging) {
        background-color: #f7768e;
        color: #24283b;
        border-radius: 5px 5px 5px 5px;
    }
    
    #backlight {
        background-color: #24283b;
        color: #db4b4b;
        border-radius: 0px 0px 0px 0px;
        margin: 5px;
        margin-left: 0px;
        margin-right: 0px;
        padding: 0px 0px;
    }
    
    #network {
        color: #f4d9e1;
        border-radius: 8px;
        margin-right: 5px;
    }
    
    #pulseaudio {
        color: #f4d9e1;
        border-radius: 8px;
        margin-left: 0px;
    }
    
    #pulseaudio.muted {
        background: transparent;
        color: #928374;
        border-radius: 8px;
        margin-left: 0px;
    }
    
    #custom-randwall {
        color: #f4d9e1;
        border-radius: 8px;
        margin-right: 0px;
    }
    
    #custom-launcher {
        color: #e5809e;
        background-color: #282828;
        border-radius: 0px 24px 0px 0px;
        margin: 0px 0px 0px 0px;
        padding: 0 20px 0 13px;
        /*border-right: solid 1px #282738;*/
        font-size: 20px;
    }
    
    #custom-launcher button:hover {
        background-color: #FB4934;
        color: transparent;
        border-radius: 8px;
        margin-right: -5px;
        margin-left: 10px;
    }
    
    #custom-playerctl {
    	background: #282828;
    	padding-left: 15px;
      padding-right: 14px;
    	border-radius: 16px;
      /*border-left: solid 1px #282738;*/
      /*border-right: solid 1px #282738;*/
      margin-top: 5px;
      margin-bottom: 5px;
      margin-left: 0px;
      font-weight: normal;
      font-style: normal;
      font-size: 16px;
    }
    
    #custom-playerlabel {
        background: transparent;
        padding-left: 10px;
        padding-right: 15px;
        border-radius: 16px;
        /*border-left: solid 1px #282738;*/
        /*border-right: solid 1px #282738;*/
        margin-top: 5px;
        margin-bottom: 5px;
        font-weight: normal;
        font-style: normal;
    }
    
    #window {
        background: #282828;
        padding-left: 15px;
        padding-right: 15px;
        border-radius: 16px;
        /*border-left: solid 1px #282738;*/
        /*border-right: solid 1px #282738;*/
        margin-top: 5px;
        margin-bottom: 5px;
        font-weight: normal;
        font-style: normal;
    }
    
    #custom-wf-recorder {
        padding: 0 20px;
        color: #e5809e;
        background-color: #1E1E2E;
    }
    
    #cpu {
        background-color: #282828;
        /*color: #FABD2D;*/
        border-radius: 16px;
        margin: 5px;
        margin-left: 5px;
        margin-right: 5px;
        padding: 0px 10px 0px 10px;
        font-weight: bold;
    }
    
    #memory {
        background-color: #282828;
        /*color: #83A598;*/
        border-radius: 16px;
        margin: 5px;
        margin-left: 5px;
        margin-right: 5px;
        padding: 0px 10px 0px 10px;
        font-weight: bold;
    }
    
    #disk {
        background-color: #282828;
        /*color: #8EC07C;*/
        border-radius: 16px;
        margin: 5px;
        margin-left: 5px;
        margin-right: 5px;
        padding: 0px 10px 0px 10px;
        font-weight: bold;
    }
    
    #custom-hyprpicker {
        background-color: #282828;
        /*color: #8EC07C;*/
        border-radius: 16px;
        margin: 5px;
        margin-left: 5px;
        margin-right: 5px;
        padding: 0px 11px 0px 9px;
        font-weight: bold;
    }
    
    ignore-empty-password
    font=Fira Sans Compressed
    
    clock
    timestr=%R
    datestr=%a, %e of %B
    
    screenshots
    
    fade-in=0.2
    
    effect-blur=20x2
    #effect-greyscale
    effect-scale=0.3
    
    indicator
    indicator-radius=360
    indicator-thickness=60
    indicator-caps-lock
    
    key-hl-color=228833
    
    separator-color=00000000
    
    inside-color=00000099
    inside-clear-color=ffd20400
    inside-caps-lock-color=009ddc00
    inside-ver-color=d9d8d800
    inside-wrong-color=ee2e2400
    
    ring-color=231f20D9
    ring-clear-color=231f20D9
    ring-caps-lock-color=231f20D9
    ring-ver-color=231f20D9
    ring-wrong-color=231f20D9
    
    line-color=00000000
    line-clear-color=ffd2000
    line-caps-lock-color=009ddc00
    line-ver-color=d9d8d800
    line-wrong-color=ee2e2400
    
    text-clear-color=ffd20400
    text-ver-color=d9d8d800
    text-wrong-color=ee2e2400
    
    bs-hl-color=ee2e24FF
    #caps-lock-key-hl-color=ffd204FF
    #caps-lcok-key-hl-color=ee2e24FF
    #caps-lock-bs-hl-color=ee2e24FF
    #disable-caps-lock-text
    text-caps-lock-color=000000FF

    1.2 FreeBSD 导论

    FreeBSD 版本概述

    已知 FreeBSD 有如下版本(或阶段):alpha、rc、beta、release、current、stable。

    release 版本是适用于生产环境的,即一般意义上的 稳定版 或者说 LTS。而 stable 和 current 都是 开发分支,都是 不稳定的(稳定与不稳定是相对的,Netflix 几乎所有节点都运行着 current),一般情况下不建议将其用于生产环境。

    注意

    FreeBSD 的 stable 与一般 Linux 发行版的“稳定版”之概念并不一致,反而是一种 不稳定 的“开发版”。

    FreeBSD 的 stable 的真实意思是该分支的 ABI(Application Binary Interface,应用程序二进制接口)是稳定的。

    ——参见

    alpha 是 current 进入 release 的第一步。具体过程是 current --> alpha(进入 stable 分支)--> beta --> rc --> release。

    current 相对稳定后(即 MFC 最短三天,MFC 即 Merge From Head,类似向后移植 backporting)会推送到 stable,但是不保证二者没有大的 bug。参见 。

    警告

    使用非生产版本(如 CURRENT、STABLE、Alpha、BETA、RC 等非 RELEASE 版本)的 FreeBSD 的用户会被社区推定为需要具有一定的探索精神,关注开发进展和邮件列表的意愿以及动手去做的潜能,并且拥有可以积极反馈 Bug 的乐观心态。这对大多数读者来说都是困难的且无必要的。如果并不满足上述条件,建议读者始终使用面向生产环境的 RELEASE!

    警告

    上图并不严谨,X.0-RELEASE 其实来自 X-STABLE;X-STABLE 直接由 X-1.CURRENT 转化而来。暂无力修改。待定。

    注意

    只有 alpha、rc、beta 和 release()才能使用命令 freebsd-update 更新系统,其余版本系统均需要通过源代码编译的方式(或使用二进制的 pkgbase)更新系统。

    FreeBSD 开发计划准备删除命令 freebsd-update,一律改用 pkgbase。

    ——参见

    FreeBSD 项目宗旨

    FreeBSD 项目(FreeBSD Project)致力于提供一款真正的自由软件,实践自由软件的使命:使 FreeBSD 的代码得到最大程度的利用,让所有人——无论其目的为何——都能从中受益。简而言之,“只求我为人人,不求人人为我”,这正是我们热情拥护的宗旨。

    在 FreeBSD 项目的源代码中包含部分以 GNU 通用公共许可证(GPL)和 GNU 宽通用公共许可证(LGPL)授权的软件,FreeBSD 项目持续努力减少其比重。尽管这些许可证要求开源,而非闭源,但它们仍带来一定的法律挑战和额外的复杂性。为了更好地实现 FreeBSD 的宗旨,尽可能提供无附加条件的软件,从而减少在商业使用中的复杂性,FreeBSD 项目在可能的情况下,更倾向于采用限制更少的 BSD 许可证。

    思考题

    BSD 2 条款许可证摘录:“在满足以下条件的前提下,允许在源代码和二进制形式中 重新分发 和使用本软件”

    “你可以继续从上游继续取得 BSD 授权的初始源代码,但是如果你使用以 GPL 再授权的原 BSD 衍生代码依旧要遵循 GPL,如此实现了 BSD 到 GPL 代码的单行道,只要 BSD 源代码进入 GPL 项目就等同进入了黑洞,即 BSD 代码的 GPL 化 是不可逆的。BSD 世界逐渐被 GPL 蚕食。但是事实上 BSD 代码在开源和闭源世界都得到了最大程度的复用。”

    1.除了可以将 BSD 授权的软件转为私有软件外,还能怎样理解这种“重新分发”?在满足条件(主要是一些免责和版权声明)后,能以何种许可证再分发和重授权?

    2.为什么自由软件基金会称 BSD 2 条款许可证和 GPLv2/GPLv3 兼容?如果 BSD 授权的软件 A 进入 GPLv2 项目 B 中成为其一部分。下游用户再分发时,在何种条件下,要求软件 A 也遵守 GPLv2 而非通过 BSD 协议转为专有软件?为什么?

    3.站在许可证的感染性角度,再理解 Linux kernel 的 GNU 化以及 FreeBSD 基本系统的去 GNU 化。

    4.你怎样理解这种代码复用目的的成功达成?

    FreeBSD 开发模型

    存储库

    FreeBSD 项目历史悠久,其使用的版本控制工具历经了 CVS、SVN、Git。目前使用 Git 进行协作开发。

    FreeBSD 项目的存储库分为三个:freebsd src(源代码)、freebsd ports(Port 软件移植)、freebsd doc(文档)。三个项目地位相等。

    FreeBSD 基金会

    FreeBSD 基金会是美国科罗拉多州博尔德县的一家 501(c)3 非营利机构,负责接收捐赠,支持项目开发,充当 FreeBSD 项目法律实体,会议赞助,宣传和推广 FreeBSD 项目。基金会的所有权力集中在董事会,董事由现有董事会成员选举产生(新董事仅限现任董事提名),每位董事任期 1 年,可连选连任。

    在大部分国家,FreeBSD 商标都由 FreeBSD 基金会持有。

    FreeBSD 社区

    FreeBSD 项目通过网络远程开发。

    FreeBSD 社区由来自全世界各地的开发者和用户构成。FreeBSD 社区并不是一个法律实体,也无固定办事处。FreeBSD 社区不仅仅是英文世界的声音,我们还有中文社区、俄语社区、韩语社区、日语社区等。

    提交者

    提交者是那些有权力直接写入 FreeBSD 存储库的人。要想成为提交者,须经过导师机制,必须由已有提交者推荐。为了防范潜在的安全风险,提交者并非终身制:对于 freebsd src 和 freebsd doc,提交者在 18 个月应有一次提交;对于 freebsd ports 则是 12 个月。非活跃提交者的权限将被暂停,但可以申请恢复。

    FreeBSD 核心小组

    FreeBSD 核心小组是 FreeBSD 项目的最高领导机关,共计 9 人,FreeBSD 核心小组采取集体领导制度,每位成员分管不同的子项目。FreeBSD 核心小组负责授予或撤销提交者权限及账户、执行冲突守则(CoC)、管理项目子团队等。

    FreeBSD 核心小组选举每两年举行一次,可以连选连任。只有在过去 12 个月内有过提交的提交者(视为活跃提交者)才拥有选举权和被选举权。活跃开发者可以表决罢免 FreeBSD 核心小组成员。此外,核心团队还负责招募新的核心团队成员,以替代离任的成员。

    在历史上并不会出现每两年所有核心小组所有成员都被完全轮替的情形(即所有人都是新手),一位核心小组成员在实践上会连任两届或更多届。核心小组成员和 FreeBSD 董事会成员往往是交叉接替任职。

    FreeBSD 核心小组成员并不直接从中获取任何利益,同样也都是志愿者。有些成员可能会接受 FreeBSD 基金会的雇佣或赞助来参与专门开发某项目。

    FreeBSD 当前困境

    • 大型技术企业对 FreeBSD 支持不足,如长久以来都未提供 GitHub actions 的支持,Nvidia CUDA 的忽视,在 AI 与 LLM 时代的全面溃败;

    • FreeBSD 项目缺乏对欧洲和北美以外地区的关注与投入;

    • 相比其他开源项目中仁慈的终身独裁者,集体领导在 FreeBSD 项目中并未显出任何特色,反而造成了“三个和尚没水喝”的局面。分管 FreeBSD 子项目的核心成员对项目本身也缺乏应有的了解和关注。面对一些小问题都无法承担责任;

    • FreeBSD 项目整体过于保守,新技术的引入往往需要数年跨越多个大版本。往往要等待已有技术轮替一到两代后才会引入;但这并不显得多么有远见,引入后也往往无人问津并且没有相关后续维护与开发;

    FreeBSD 怎么读

    目前社区共识和普遍的读法是:/ˌfriːˌbiːɛsˈdiː/,即读作“Free(/friː/)+ B(/biː/)+ S(/ɛs/)+ D(/diː/)”,即类似于“福瑞/必/哎司/地”。

    Free 和三个字母 B、S、D 分别分开读——先说 Free 这个完整的词,再 B、S、D 逐字母拼读。

    一般不会把 BSD 或 FreeBSD 视作一个词语连读。不会将其读做“百思得”或“福瑞/百思德”(FreeBSD 基金会在中国大陆注册商标的机构中文翻译是“福瑞百思德基金会”)。

    什么是 FreeBSD?

    FreeBSD 不是 Linux。FreeBSD 也不是 UNIX 的克隆产物。FreeBSD 是一款自由软件。

    FreeBSD 这个词语由两部分构成,即“Free”和“BSD”。

    BSD 最初是由加州大学伯克利分校(University of California, Berkeley)所开发的,意为 Berkeley Software Distribution(伯克利软件发行版)。

    Free 则代表 Liberty 式自由和免费两种含义。

    FreeBSD 日为 6 月 19 日。FreeBSD 基金会和社区在这天庆祝 FreeBSD 的生日。——

    UNIX 之船:FreeBSD 是不是 UNIX?

    这个问题远没有想象中的那么清楚明白。我看到不少讨论者,甚至是亲历当初那段岁月的人,亦难以回答或澄清。或者只是简单的说,BSD 并未进行过任何 UNIX 认证,没有持有法律上的商标就草草终结话题;更有甚者只是笼统地说 FreeBSD 是 UNIX 的延续者与正统继承者,仅是“有实无名”;还有人认为,BSD 之于 UNIX,正如 Linux 之于 UNIX。

    之所以有上述这些不同的回答,正是因为这个问题不是能够简单地套用法律上的商标归属或者代码上继承性进行分析的纯粹技术性难题。这其实牵涉到了一个深刻的本体论哲学问题——我们究竟是不能两次踏进同一条河流,还是一次也不能踏进同一条河流?(类似的问题如谷堆问题、秃头问题,感兴趣的读者可参见 SEP 条目“”、“”)。对这个问题回答如何,其实映射着你的哲学观与科学技术观。

    忒修斯之船

    忒修斯和雅典青年安全返航所乘的是有三十支桨的大帆船,雅典人把这只船一直保存到德米特里·法勒琉斯的时代。他们一次又一次地拆掉了朽烂的旧船板,换上坚实的新船板。从此以后,这只船就成为哲学家们就事物的发展问题展开争论时经常援引的实例,一派认为它还是原来那只船,另一派争辩说它已不再是原来的船了。

    • [古希腊] 普鲁塔克. 希腊罗马名人传 [M]. 译者:黄宏煦 主编 / 陆永庭 / 吴彭鹏, 第 1 版. 商务印书馆, 1990-11. 第 23 页(23)。

    思考题

    ① 如果这艘船替换了若干组件,这艘船是不是忒修斯之船?

    ② 如果有一天,这艘船原有的所有组件都被完全替换了一遍,这艘船还是不是忒修斯之船?

    ③ 如果把所有替换下来的组件拼凑起来,组成一艘新船,这艘船是不是忒修斯之船?

    BSD 操作系统并非复制品,而是 AT&T 研究 UNIX(Research Unix)操作系统的开源衍生版本,也是现代 UNIX® System V 的祖先。在 4.4BSD 以前,BSD 全称为 BSD UNIX。

    最初,Unix 是 AT&T 开发的操作系统,可以获取源代码,但并非开源。在 20 世纪 70 年代末,伯克利大学的计算机系统研究小组(Computer Systems Research Group,CSRG)开始对 Unix 进行深入研究,并为其开发了大量用户空间的程序,形成了名为 BSD(Berkeley Software Distribution,伯克利软件套件)的新系统。随着时间推移,BSD 系统逐渐发展,加入了许多创新,比如实现了 TCP/IP 协议栈。尽管 Unix 内核经历了多个版本的演变,但到了 90 年代,Net/2 版本发布后,Unix 内核中的 AT&T 代码已经被完全替换,成为了一款没有专利代码的系统。BSD 系统逐渐演化成为 4.2BSD,BSD 4.4-lite……进而成为了 386BSD。

    在此过程中,BSD 和 AT&T 之间的关系发生了变化,最终引发了法律争议,导致 BSD 系统的分裂。1993 年,BSD 的核心代码分裂为两个主要的项目:NetBSD 和 FreeBSD。1996 年,OpenBSD 从 NetBSD 中复刻出来;2003 年,DragonFlyBSD 从 FreeBSD 中复刻出来。

    如果你现在去查阅 FreeBSD 的源代码,你极有可能还会看到以前的开发者在 1982 年留下的注释和版权声明。

    思考题

    你如何理解 FreeBSD 与 Unix 的关系?

    谁在使用 FreeBSD

    图片来源

    • 华纳兄弟的电影《》()的特效就是在一组 FreeBSD 集群上制作的。——参见 及《》 (简体中文译本),机械工业出版社。ISBN 7-111-10201-0,第 2 页。

    • 苹果(Apple)的操作系统如 MacOS、IOS 等大量复用了 BSD(不止是 FreeBSD)的技术栈。BSD 可以称得上是 MacOS 的开源基石。——参见

    • 索尼(Sony)的游戏机 PlayStation 3(PS3)、PlayStation Vita(PSV)、PlayStation 4(PS4)、和 Playstation 5(PS5)使用的操作系统。参见索尼官网 、、。PS 5 并未列出许可证,但是根据 。仍然使用了 FreeBSD 11。

    参考文献

    • ,有一份 FreeBSD 基金会官方版本

    为什么选择 FreeBSD

    一句话原因——FreeBSD 能在这流变的世界中寻求理想的中道

    背景:相较于 OpenBSD 和 Linux 等操作系统,FreeBSD 的 Kernel API/ABI 比较地稳定。

    你也可以说 FreeBSD 项目相对保守。FreeBSD 项目奉行最小惊讶原则(Principle of Least Astonishment,POLA),简而言之就是你的设计必须符合用户的习惯、期望和心智能力。

    如果你想选择一款在大版本更新后也不怎么影响日常工作的系统,而不是每天都在和操作系统斗智斗勇,那么 FreeBSD 值得信赖。

    FreeBSD 配置文件和系统组件不会 变来变去的,这在大版本变动时尤为突出。FreeBSD 也谨慎对待 破坏性变化(Breaking change),FreeBSD 要求在大版本内保持 ABI 的稳定。

    FreeBSD 不仅仅是 在生命周期内不变,大版本更新也具有连贯性和稳定性,轻而易举地就可以实现大版本间的迁移。FreeBSD 上软件的版本都是可以滚动变化的,不会锁定如 Python 版本等。

    选择 FreeBSD 的一般原因

    • 从道家来讲,你爱用不用,不用也无妨:人间一游,开心快乐才是最重要的事情。

    • 从佛法来说,因为缘分。万物缘起性空,我们有缘相聚,又会者定离。万般诸相皆如此。

    • 从基督教来讲,这是主的指引。上帝在永恒的现在中创世。就像出埃及记一样,你看上去是自己的选择,实际上都是主的安排。

    • 从黑格尔来讲,是因为辩证否定。FreeBSD 是 UNIX 直接后裔,而很多协议又脱胎于 UNIX,所以你注定了要来到这里。

    选择 FreeBSD 的技术性原因

    一般技术原因

    • FreeBSD 基本系统的配置文件与第三方软件配置文件相分离,系统级配置文件与用户配置文件相分离。再也不用到处用 find 命令查找某个 .conf 文件到底安装在哪了。

    • 由于基本系统的存在,第三方的软件几乎不影响系统的稳定性。FreeBSD 在软件更新和系统稳定之间找到了平衡点。

    • 通过 BSD 的 Ports 可以编译安装软件,自由配置。

    • 不会锁定软件版本。比如 Python GCC 等常见的系统依赖软件。但所有的 FreeBSD 都共用相同的 Ports,无论新旧系统,其第三方软件的版本都是相同的;仅极个别软件和系统版本硬捆绑,其余所有软件都可滚动更新。

    安全原因

    • 对部分 Ports 进行了加固,参见 、

    • 披露的安全漏洞少于其他主流操作系统(尽管可能存在样本数量较少的客观因素)。截至 2025 年 9 月,FreeBSD 基本系统(用户空间 + 内核)CVE 漏洞仅为 Linux 内核的约二十分之一(根据 统计 CVE),后者与 Windows CVE 数量大致持平。其中 OpenBSD 的 CVE 漏洞数量约为 FreeBSD 的 40%。

    • 可以避免在产品和架构中出现共同故障点。

    • 安全事件审计。

    参考文献

    • ,翻译在

    • ,应该以此为准

    • Linux Kernel 由 Linus 一人裁决:“”

    选择 FreeBSD 的社会意义

    红帽公司控制下的 Linux 歧视

    不难发现 GNOME、Xorg(X11)、DBus、Systemd、PulseAudio、Wayland、PipeWire 目前这些主流的 Linux 项目其实都是由红帽公司(Red Hat)实际控制和施加影响的,而且关键在于他们大都难以完全适配其他类 Unix 操作系统。

    显而易见:目前 FreeBSD 上的桌面部件的缺失很大程度上是因为他们过分依赖了 Linux 特有函数库,比如包含 ip 命令的 iproute2 软件包。更多的原因则是因为这些桌面或部件和 systemd 做了深度捆绑或者根本就是强制依赖,比如 NetworkManager。而 Samba 开发者则说“We use Linux, we develop for Linux, all others please submit patches”(我们使用 Linux,我们为 Linux 开发,其余系统的用户请提交补丁)FreeBSD 社区的人把这种行为叫做“Linuxism”(Linux 主义/Linux 歧视)。

    这种行为会导致何种后果我们不得而知,但是这种程序愈来愈多了,而且有成为主流的趋势,甚至就连大部分开发者在开发程序(如 todesk)时也不再考虑兼容 init。甚至 Java 程序都丧失掉了他的可移植性,为什么 FreeBSD 上的 Eclipse 将近两年没有更新?就是因为这类 。预计在将来所有可运行在 Linux 上的程序也将失去任何的可移植性。

    现在 FreeBSD 所面临的这种困境,将是未来所有人都要面对的。

    • 选择 FreeBSD,就是选择保留一份自由软件的火种。

    • 选择 FreeBSD,就是选择保留下一份真正自由的操作系统。能够使开源事业继续坚持下去,并践行真正的 UNIX 哲学。

    旧闻:《》

    上周,我向 FreeBSD 基金会捐赠了 100 万美元,FreeBSD 基金会支持着开源操作系统 FreeBSD。FreeBSD 帮助了数百万程序员追随他们的热情、实现创意。我自己就是受益者。在 90 年代末,我开始使用 FreeBSD,那时我经济拮据,住在政府提供的住房中。在某种程度上,FreeBSD 帮助我摆脱了贫困——我能进入 Yahoo!(雅虎)工作的重要原因是,他们使用 FreeBSD,而这正是我首选的操作系统。多年后,当 Brian 和我开始创建 WhatsApp 时,我们依然使用 FreeBSD 来支撑我们的服务器运营,直到今天亦如此。

    我发布这项捐赠的消息,是希望让更多人看到 FreeBSD 基金会所做的有益工作,并激励他人也能支持 FreeBSD。我们大家都会受益,如果 FreeBSD 能够继续为像我一样的人提供机会,帮助更多的移民子女脱贫,帮助更多的初创公司创造出成功,甚至是具有变革性的成果。

    ——WhatsApp 原 CEO 及创始人 Jan Koum

    实际上,这并非一锤子买卖,在查阅 FreeBSD 基金会捐款名单(可查 、、、、)后就会发现,Jan Koum 仍在继续以 的名义在持续地为 FreeBSD 捐款。每年都捐款 25 万美元以上。

    诚实与可信

    像 FreeBSD 这样默默地在后台工作以至于快被用户遗忘的系统,可能真算得上是个老古董了,如果每日时不时地出现一些蓝屏报错,Kernel Panic 亦或者“内部错误”、You are in emergency mode、BusyBox (initramfs)、grub rescue> 等等,反而能提醒用户自己的存在。不是吗?那些弹窗软件、3Q 大战、摇一摇的恶俗广告、百度的莆田系和国产操作系统、从绿坝娘再到现在安卓手机预装的反诈软件不也挺成功的吗?

    目前大部分使用 Linux 作为专用设备操作系统,或是基于其他 GPL 软件构建自己商业产品的公司,都没有严格遵守 GPL 协议发布他们的代码。而对于国内公司来说,他们甚至不知 GPL 为何物,只认为免费就可以了,那些为了逃避 GPL 强制开源规定的企业之产品是不值得我们去使用的。抢注开源软件商标的事情亦时有发生。比较起来,那些使用 FreeBSD 的公司至少更为诚实、可靠和值得信赖。也真正使得 BSD 的代码为众人所用——哪怕有人认为 FreeBSD 已经日薄西山——尽管在这些人的确一直生活在 FreeBSD 的光芒的照耀之下。

    参考文献

    王波《FreeBSD 在中国的未来》。引自《FreeBSD 使用大全》第二版,机械工业出版社,2002,ISBN 9787111102861

    FreeBSD 重要历史节点

    • 1962 年 分时操作系统(Timesharing OS)

    在 20 世纪 60 年代初,分时操作系统诞生了,其中最早的一款分时系统出现英国曼彻斯特项目(Manchester Project in England)设计的 Atlas 品牌计算机上(Atlas 监控程序)。在那个时代,分时共享系统意味着两个人共用同一台计算机,通常需要安排一张小时时间表来规划他们使用计算机的时间。

    • 1964 年 MULTICS(多任务信息与计算系统)

    Multics 最初的规划和开发始于 1964 年的马萨诸塞州的剑桥市。一开始,Multics 是由麻省理工学院(Fernando Corbató 领导的 MAC 项目)与通用电气公司和贝尔实验室合作的项目。开发于专为操作系统设计的通用电气 645 计算机上;首个完整的系统于 1967 年 1 月交付给麻省理工学院。

    • 1969 年 UNIX(UNIX 操作系统)

    在贝尔实验室退出 Multics 项目前,Dennis Ritchie 和 Ken Thompson 已经发觉了 Multics 的潜力。他们从贝尔实验室法务部门获得了资金,购买了一台更强大的 PDP-11/20 机器。在 1969 年,Ken Thompson、Dennis Ritchie 等人开始着手开发一款新程序,以充分利用这台功能更强大的计算机。这个程序被称为 Unics(Uniplexed Information and Computing Service,非复用信息和计算机服务)。

    • 1972 年 UNIX 代码迁移到 C 语言

    Dennis Ritchie 决定为 UNIX 开发一种高级汇编语言,其中的语句可以翻译成两到三条指令。这促使他开发了 C 编程语言。第四版研究 UNIX(Research Unix)使用 C 语言重写。这使得 UNIX 具备了可移植性,从而改写了操作系统的历史。

    • 1974 年 加州大学伯克利分校引入 UNIX

    1974 年,加州大学伯克利分校的 Bob Fabry 教授从 AT&T 获得了 UNIX 的源代码许可。Bob Fabry 此前在 1973 年的 ACM 操作系统原理研讨会(Association for Computing Machinery)上见过 UNIX 4,并有意将其引入伯克利大学。计算机系统研究小组(CSRG)开始修改和改进 AT&T Research Unix。他们将这个修改后的版本称为“BSD Unix”/“BSD”。

    • 1978 年 3 月 9 日 1BSD 发布

    基于 UNIX 创建的伯克利软件发行版(1BSD)是 UNIX 第六版的一款附加组件,而非独立完整的操作系统。此版本发行了大约 30 份。

    • 1979 年 5 月 10 日 2BSD 发布

    第二款伯克利软件发行版(2BSD)发布于 1979 年 5 月。涉及 1BSD 的软件更新,以及由 Bill Joy 新开发的两个至今仍在 Unix 系统上使用的程序:vi 文本编辑器(ex 的可视化版本)和 Csh。2BSD 是由 Bill Joy 参与 PDP-11 工作的最后一个 BSD 版本。发行了约 75 份。

    • 1980 年 6 月 DARPA 的赞助

    在 1980 年初,DARPA(Defense Advanced Research Projects Agency,美国国防高级研究计划局)当时正在寻找一种有助于军事项目的操作系统。Bill Joy 关于 UNIX 系统(特别是 BSD)功能的一篇论文引起了他们的注意。他们于 1980 年 6 月,开始赞助伯克利进行相关工作。

    • 1983 年 8 月 4.2BSD 发布

    4.2BSD 正式发布于 1983 年 8 月。值得注意的是,这是在 Bill Joy 离开(伯克利),并与他人创建了 Sun Microsystems(太阳计算机系统公司)后(1982 年)的第一个版本。它也标志着 BSD 的吉祥物的首次问世:出现在 John Lasseter 的画作中,即 USENIX 发行的纸质手册的封面上。这次发布了 1000 余份,意味着有大量的计算机在使用。

    • 1988 年 6 月 4.3BSD-Tahoe

    随着开发人员逐渐淘汰老旧的 VAX 平台,4.3BSD-Tahoe 发布了针对 Power 6/32 平台(TAHOE)的版本。这次发布相当有价值,因为它将 BSD 中的机器相关代码同机器无关代码剥离开来,从而提高了后续系统的可移植性。

    • 1991 年 386BSD 和 Net/2

    Keith Bostic 发起了一个项目,旨在在不使用 AT&T 的代码的前提下,重新实现大多数标准的 Unix 软件。最终发布了 Networking Release 2(Net/2)——一款几乎完全可自由分发的操作系统。在 Net/2 的基础上,BSD 为英特尔 80386 架构分别移植了两个版本:由 William Jolitz 开发的免费的 386BSD、由 Berkeley Software Design(BSDi)开发的专有 BSD/386(后来更名为 BSD/OS)。386BSD 本身昙花一现,但成为随后不久开始的 NetBSD 和 FreeBSD 项目的原初代码基础。

    • 1992 年 USL 诉讼案

    BSDi 很快就陷入了与 AT&T 的 Unix System Laboratories(USL,Unix 系统实验室)子公司的法律纠纷中,当时 USL 是 System V 版权和 Unix 商标的所有者。USL 对 BSDi 的诉讼于 1992 年提起,并导致对 Net/2 的分发禁令。该诉讼于 1994 年 1 月达成和解。在 BSD 的 18,000 个文件中,仅须删除三个文件;并对 70 个文件进行修改,用以展示 USL 版权声明。本次和解为首款 FreeBSD RELEASE 的发布铺平了道路。

    • 1993 年 6 月 FreeBSD 的创建

    386BSD 的开发进展缓慢。在经过一段时间的搁置后,为了能够使操作系统保持最新状态,一群 386BSD 用户决定自力更生,创建了 FreeBSD。1993 年 6 月 19 日,此项目选择了“FreeBSD”这个名字。首个 FreeBSD RELEASE 发布于 1993 年 11 月。

    • 1994 年 8 月 FreeBSD Ports

    FreeBSD 的 Ports 和软件包为用户和管理员提供了一种简单的安装应用程序的方式。Ports 现在提供了多达 34,000 个 port。它们首次现身于 1994 年,当时 Jordan Hubbard 将“port make macros”提交到 FreeBSD 的 CVS 存储库中,目的是给他的软件包安装套件“Makefile”打补丁。

    • 1994 年 11 月 22 日 IPFW

    ipfirewall 是在 FreeBSD 2.0-RELEASE 中被引入的,这种“先入为主(First Match)”防火墙自此成为操作系统的重要组成部分。ipfw 曾作为 Mac OS X 的内置防火墙而广泛使用。

    • 1998 年 5 月 软更新(Soft Updates)

    1998 年 5 月,FreeBSD 采用了软更新依赖跟踪系统。软更新旨在通过跟踪和执行更新之间的依赖关系,保持文件系统元数据的完整性,以防发生崩溃和停电。

    • 1999 年 10 月 17 日 首届 BSD 大会

    首届 FreeBSD 大会(FreeBSDCon'99)在加利福尼亚州伯克利举行。来自世界各地的 300 多名开发者和用户参加了此次活动,标志着 FreeBSD 在受欢迎度和影响力上的一个重要里程碑。

    • 2000 年 3 月 14 日 FreeBSD Jail

    FreeBSD Jail 引入于 2000 年初发布的 FreeBSD 4.0。Jail 机制是操作系统级别的虚拟化实现,能让系统管理员将一个 FreeBSD 系统分割为多个独立的小系统("Jail")。这使得系统管理员能够更好地保护和优化他们的 FreeBSD 系统。

    • 2000 年 3 月 15 日 FreeBSD 基金会成立

    FreeBSD 基金会是一家总部位于美国的非营利组织,注册为 501(c)(3) 机构,致力于支持 FreeBSD 项目、其开发和社区。资金来自个人和企业的捐款,用于赞助开发人员进行特定活动、购买硬件和网络基础设施,并提供开发者峰会的差旅津贴。该基金会由 Justin Gibbs 于 2000 年 3 月 15 日创立。

    • 2000 年 7 月 27 日 kqueue(2)

    kqueue(2) 是取代 select/poll 的创新解决方案,于 2000 年 7 月 27 日随着 FreeBSD 4.1-RELEASE 引入。这个可扩展的事件通知接口启发了 Linux 的 epoll() 机制。

    • 2000 年 10 月 17 日 首次核心团队选举

    尽管此前已经存在一个自我推选的核心团队,但首次核心团队选举是在 2000 年 9 月举行的。当时任命了由 9 名成员组成的一个团队,自此以后每两年举行一次选举。

    • 2001 年 9 月 EuroBSDCon

    EuroBSDCon 2001 于 2001 年末在英国布莱顿举行。随着全球社区的不断扩大,EuroBSDCon 的目标是聚集在 BSD 操作系统家族及相关项目上工作的用户和开发者。

    • 2004 年 1 月 9 日 AMD64 磁盘镜像

    在版本 5.1 实验性地支持 amd64 后,5.2-RELEASE 正式支持了 amd64。amd64 成为了首个 64 位的一级平台。

    • 2004 年 3 月 12 日 首届 AsiaBSDCon 和 BSDCan

    在 EuroBSDCon 获得成功之后,首届 AsiaBSDCon 于 2004 年 3 月 12 日发起,紧随其后的是 BSDCan——于 5 月 13 日举行。随着 FreeBSD 社区的不断发展壮大,全球范围内对于以 BSD 为重点的会议的需求也随之增长。

    • 2004 年 5 月 1 日 谷歌编程之夏

    FreeBSD 基金会在首年度的谷歌编程之夏就参与其中。谷歌编程之夏为新的开发者提供了一个机会,让他们参与当前的开源编程项目。在项目结束后,许多参与该项目的学生成为了 FreeBSD 的贡献者。

    • 2004 年 11 月 3 日 移植 PF

    在 2006 年,原本设计用于 OpenBSD 的 Packet Filter(简称 PF)被移植到了 FreeBSD,与 5.3-RELEASE 一同分发。

    • 2004 年 11 月 17 日 Libarchive

    Libarchive 最初是为 FreeBSD 5.3 开发的,该发行版于 2004 年末发布。它是一款用 C 语言编写的程序库,提供对多种不同存档格式的流式访问功能。

    • 2005 年 8 月 首位执行董事

    Deb Goodkin 于 2005 年加入基金会,成为首位执行董事。她之前在数据存储设备的市场营销、销售和开发领域有着 20 余年的工作经验。

    • 2005 年 10 月 8 日 新的 FreeBSD Logo

    举行了一项 Logo 设计大赛,由 Anton K. Gural 设计的 Logo 获胜(当前仍在使用)。

    • 2007 年 JEMALLOC

    Jason Evans 于 2005 年开发了 jemalloc,这是一款内存分配器。与此同时,FreeBSD 需要一款可扩展的多处理器内存分配器,因此 Evans 将 jemalloc 集成到了 FreeBSD 的 libc 中,这改进了其可扩展性和碎片化行为。

    • 2008 年 3 月 ZFS

    在 2005 年,Sun Microsystems 开发了一种新型文件系统,最终产物是 ZFS。ZFS 是一款集成了文件系统和逻辑卷管理器的系统。该系统具有可扩展性,并提供了广泛的数据完整性保护和高效的数据压缩功能。OpenSolaris 版本的 ZFS 于 2008 年初进入到 FreeBSD 系统中。

    • 2009 年 1 月 6 日 DTrace

    Sun Microsystems 开发了 DTrace,DTrace 可用于实时调试生产系统中的内核和应用程序问题。尽管该程序最初是为 Solaris 开发的,但它成为 FreeBSD 的标准组成部分,并为 DTrace 提供了全面支持。

    • 2010 年 8 月 Capsicum

    Capsicum 是一款轻量级的操作系统能力和沙盒框架。它可以用于应用程序分隔、将较大的软件体系分解为隔离的组件,并限制软件漏洞的影响。Capsicum 最初由剑桥大学开发,并首次作为可选功能发布在 FreeBSD 9.0 中,后来成为 FreeBSD 10.0 中的默认功能。

    • 2012 年 CHERI

    在 2012 年,剑桥大学开始开发了 Capability Hardware Enhanced RISC Instructions (CHERI),这是基于之前的 Capsicum 项目的发展而来的。CHERI 将 Capsicum 的混合能力模型转移到 CPU 架构领域,实现在进程地址空间内的细粒度隔离,并支持当前软件设计。

    • 2012 年 POUDRIERE

    Poudriere 是一款通过 jail 测试 port,并继而构建 FreeBSD 镜像的工具,它被添加到了 Ports 中。

    • 2012 年 4 月 12 日 CLANG/LLVM

    LLVM 项目是一组模块化和可重用的编译器和工具链技术。Clang 项目为 LLVM 项目提供了 C 语言前端和工具基础设施。这些程序目前是 FreeBSD 的编译基础设施。

    • 2012 年 11 月 11 日 黑客入侵

    FreeBSD 项目集群检测到黑客入侵,虽然未发现任何明显破坏,但仍然花费数月进行审计与还原。

    • 2013 年 2 月 28 日 从 CVS 迁移到 Subversion

    由于大多数 port 已经在 Subversion 中进行开发,于 2013 年 2 月 28 日正式完成了从 CVS 到 Subversion 的迁移。此后,FreeBSD Ports 不再使用 CVS。

    • 2013 年 9 月 17 日 OpenZFS 项目启动

    OpenZFS 项目衍生于 OpenSolaris。在 2013 年 9 月 17 日,ZFS 开源项目宣布 OpenZFS 成为 ZFS 的继任者,并创建了一个正式的社区来维持开发和支持。但此时 FreeBSD 依旧使用的是最早的 OpenSolaris ZFS。

    • 2014 年 1 月 20 日 pkg 成为默认的软件包管理器

    pkg 首次出现在 9.1-RELEASE 中。在 10.0-RELEASE 中成为默认的软件包管理器,取代了 pkg_* 等一系列命令。

    • 2014 年 1-2 月 FreeBSD 期刊创刊号

    作为 FreeBSD 社区的声音,也是跟进 FreeBSD 最新发布版本和新进展的最佳途径,FreeBSD 期刊的创刊号是 2014 年 1/2 月刊,重点关注 FreeBSD 10。最初是以付费订阅模式进行发行,直至 2019 年 1 月才将 FreeBSD 期刊转为免费出版物,后同时在基金会网站上进行刊载(同时提供了 HTML 和 PDF)。

    • 2017 年 6 月 19 日 首个“FreeBSD 日”

    国际 FreeBSD 日是每年一度的庆祝活动,旨在赞扬 FreeBSD 对技术的开创性和持续影响,并纪念其传承的价值。

    • 2018 年 FreeBSD 中文社区(CFC)成立

    在千禧年代曾存在多个中文社区,但后来无人问津。这些早期社区的部分核心成员仍活跃在 FreeBSD 项目中,但他们已经不再关注中文世界,而是专注于自己的家庭和事业。FreeBSD 中文社区(CFC)最早由百度贴吧 FreeBSD 吧发展而来。

    • 2021 年 4 月 6 日 从 Subversion 迁移到 Git

    在今天,FreeBSD 项目终于完成了从 Subversion 到 Git 的迁移。此过程始于 2019 年 5 月的 DevSummit,当时成立了一个 Git 工作小组。

    • 2021 年 4 月 13 日 由 OpenSolaris ZFS 切换到 OpenZFS

    在 13.0-RELEASE 中,由于 OpenSolaris 继任者 illumos 开发基本停滞,切换到 OpenZFS 实现。该迁移计划最早出现在 2018 年。

    • 2024 年 9 月 笔记本和桌面工作组 LDWG 成立

    笔记本和桌面工作组 LDWG 如字面所述,旨在提供一系列改进和新增的 FreeBSD 功能,使 FreeBSD 能够在个人设备上“开箱即用”。计划为期 1-2 年。

    • 2024 年 9 月 德国主权技术基金赞助 FreeBSD 项目实施基础设施现代化

    该项目主要目标是改进基本系统、Ports 和软件包的安全工具,更新项目基础设施以加快开发速度,增强构建安全性,并让新开发者更容易上手。预计于 2025 年底结束。

    • 2024-2025 Alpha-Omega 审计

    Alpha-Omega 项目先后审计了 FreeBSD 的 bhyve 虚拟机管理程序和 Capsicum 沙箱框架,以及 FreeBSD 基本系统的第三方程序,旨在增强 FreeBSD 项目的安全性与合规性。

    • 2025 年 12 月 2 日 引入 pkgbase

    在 15.0-RELEASE 中,新增了 pkgbase 安装方式,旨在通过软件包管理基本系统。该方式最早出现在 TrueOS 中,是其遗产之一。

    参考文献

    • 原文来自 ,有改动。

    FreeBSD 系统总体上不够现代化,缺乏现代操作系统应有的实现。尤其是在嵌入式方面比较差。

  • FreeBSD 没有为用户提供带桌面的基本系统;

  • FreeBSD 的驱动支持较差;

  • FreeBSD 的资料相对较少;

  • FreeBSD 的开发者非常少,且对外部贡献者严重缺乏时间感;

  • FreeBSD 基金会、期刊、Bug 报告等对外部贡献者严重缺乏时间感;

  • FreeBSD 文档项目严重停滞十年之久,个人贡献者除季度报告外的任何提交在事实上都不会被接纳;src ports 也一样难以接纳新的个人贡献者。

  • 尚未完全支持安全启动(Secure boot)

  • 对 TPM 的支持有限

  • 由于 Linuxism,导致很多软件比如 NetworkManager 无法移植,桌面环境的组件也无法完善;

  • 由于 FreeBSD 项目的基本目标和设计问题,FreeBSD 基本系统不包含 Linux 发行版中常用的一些软件和命令;

  • FreeBSD 两款原生的文件系统 ZFS 与 UFS 都只能扩大不能缩小;

  • FreeBSD 缺乏上层应用软件设计,即使底层有类似 docker 的技术 jail 也没能发展起来;FreeBSD 的虚拟化技术 Bhyve 也需要改进。

  • 奈飞(Netflix)几乎所有网络活动(内容缓存/CDN)都使用 FreeBSD 设备进行。——参见 Netflix Case Study
  • QNX 操作系统。QNX 是一款实时操作系统。QNX 以前是黑莓手机的操作系统。QNX 现在被广泛应用为汽车安全操作系统(即车机,安卓是运行在 QNX 之上的操作系统,与车机系统分离)。国内新能源车辆普遍采用了 QNX 操作系统(关键领域占比超过九成)。QNX 大量复用了 FreeBSD 的技术栈。——参见 QNX 官网、中国汽车实现“芯魂兼具”应从两方面发力、Automotive。同时查询 FreeBSD 基金会 2024 捐款页面,上面也有黑莓(QNX 开发者)。

  • Dell EMC Isilon,戴尔的 Isilon(面向企业的 NAS 存储设备)设备使用的操作系统 OneFS 基于 FreeBSD。——参见 PowerScale OneFS:了解基于源的路由,中明确提及“OneFS 是基于 FreeBSD 的”。另见 DSA-2020-086: Dell EMC Isilon OneFS Security Update for FreeBSD libfetch Vulnerability 等安全报告。附 IsilonSystems

  • Beckhoff 倍福自动化控制系统的操作系统 TwinCAT/BSD。——参见 TwinCAT/BSD

  • OpenHarmony LiteOS 内核引入了一些 FreeBSD 代码用作驱动等。——参见 kernel_liteos_a

  • 追求软件的稳定和新,既要有二进制源,又要能编译安装。除了 FreeBSD 之外难以找到这样的开源系统(VoidLinux 还是算了吧)。

  • BSD 赋予了你更纯粹的自由:不以限制自由来保障自由,而是以信任与开放成就真正的自由。

  • FreeBSD 是学院派的工程实践成果,更是 UNIX 哲学的现代延续者。

  • 当其他操作系统生态愈发碎片化的同时,FreeBSD 的一体化设计避免了无休止的选择困难——但这并非限制,如果你喜欢,很轻松就能对其进行修改。

  • BSD 是一款完整的操作系统,而不是内核。内核和基本系统作为一个项目来整体维护。缺乏基本系统的概念,将带来无尽的混乱与违反直觉的行为。

  • FreeBSD 社区是由核心小组集体领导的。

  • 教育与研究:FreeBSD 项目将内核与用户空间融入一个存储库之中,极大地便利了各种人群对其进行研究和学习,并且注释清晰丰富。你可以轻易地找到某某功能究竟是如何实现的。

  • FreeBSD 无论社区还是开发者都秉持着“慢就是快,快就是慢”的哲学思想。我们的确需要花些时间慢下来,审视自己的一切,无论知识还是自我。花些时间在路旁的花朵石子上面,也许并不是浪费时间,无所事事。

  • 由于 Ports 的存在,旧版 FreeBSD 系统的软件源仍可正常使用,而不像其他操作系统那样一旦 EoL 就没有软件源可用了。

  • 在 FreeBSD 项目中,文档不再是附属品。FreeBSD doc 项目与 src 项目是同等地位的,不分高下。

  • 接近 2 年的版本发布周期,4 年的维护周期赋予了 FreeBSD 稳定性。

  • 可以轻松地为你的根分区(/)配置使用 ZFS 文件系统。ZFS 被誉为最强大的文件系统。

  • Jail 与 bhyve 虚拟化,不需要额外安装和维护底层虚拟化堆栈。也不需要为每个实例启动完整的操作系统内核和用户空间,节约系统资源。

  • 传统的 BSD INIT 引导,回归简单,回归真实可见的纯文本。

  • DTrace 框架与 GEOM 存储框架。

  • Linux 二进制兼容层,可运行 Linux 软件。且软件运行速度并不逊色于 Linux。

  • FreeBSD 的驱动在大致上与内核解耦合。

  • FreeBSD 秉持人人自由开发的理念,目前 你可以直接在 Github 上提交你的代码,或者注册个账号在 https://reviews.freebsd.org/ 进行大规模变更。

  • FreeBSD 的代码风格是 Kernighan & Ritchie 经典著作《C 程序设计语言》(The C Programming Language)中使用的风格。

  • 集成了标准 Unix DAC、ACL、TrustedBSD MAC 安全框架(基于 POSIX®.1e 草案的安全扩展),参见 wiki TrustedBSD

  • 集成 W^X 策略,参见 Implement enforcing write XOR execute mapping policy.

  • 默认启用了内核和用户空间的 PIE 和 ASLR,参见 Enable ASLR by default for 64-bit executables.

  • FreeBSD 通过了 National Institutes of Standards and Technology(NIST,美国国家标准及技术研究所)安全软件开发框架(SSDF)认证,参见 FreeBSD Foundation Announces SSDF Attestation

  • 实现了 FreeBSD 14 CIS 基准。参见 New CIS® FreeBSD 14 Benchmark: Secure Your Systems with Expert-Guided Best Practices

  • 正在实现 FreeBSD 的零信任构建,参见 Sovereign Tech Agency 相关赞助

  • 基于 GEOM 框架的全盘加密(含 ZFS、Swap)方案

  • 正在改进软件物料清单(Software Bill of Materials,SBOM),参见 Sovereign Tech Agency 相关赞助

  • Capsicum 框架,并且已经对基本系统中大量工具进行了能力化加固。参见 wiki Capsicum

  • FreeBSD 内核拥有五种不同的安全级别(securelevel)可以自由选择,参见 man mitigations,还介绍了 FreeBSD 上若干安全漏洞缓解手段

  • Linux 内核开发是个 较为封闭的过程,只有少数人能够参与直接提交代码

  • Sandbox Your Program Using FreeBSD's Capsicum,翻译在 利用 FreeBSD Capsicum 框架实现程序沙箱化。这是篇有关 Capsicum 框架的简介

  • FreeBSD Glossary STABLE
    FreeBSD Release Engineering
    且是一级架构
    FreeBSD Manual Pages freebsd-update
    Join us to celebrate FreeBSD Day!
    Identity Over Time
    Sorites Paradox
    FreeBSD 基金会宣传图
    黑客帝国
    The Matrix
    FreeBSD Used to Generate Spectacular Special Effects
    FreeBSD 技术内幕
    Apple’s Open Source Roots: The BSD Heritage Behind macOS and iOS
    FreeBSD Kernel
    Free BSD License
    FreeBSD
    Kernel
    谁在使用 FreeBSD
    FreeBSD security hardening with compiler options
    Add new features fortify, stack_autoinit and zeroregs
    https://www.cvedetails.com/
    Submitting GitHub Pull Requests to FreeBSD
    在 GitHub 上向 FreeBSD 提交 PR
    Contribution Guidelines for GitHub
    Linus Torvalds 是决定改动能否进入 Linux 内核的最终裁决者。
    Linux 内核编码风格
    捆绑问题
    FreeBSD 基金会收到史上最大一笔捐款
    2018
    2019
    2020
    2021
    2022
    Koum Family Foundation
    Timeline
    FreeBSD 版本更迭
    谁在使用 FreeBSD

    2.2 FreeBSD 15 安装指南

    技巧

    视频教程见 FreeBSD 14.2 基础安装配置教程(物理机)、002-VMware17 安装 FreeBSD 14.2(虚拟机)。


    以下安装说明基于 FreeBSD-15.0-RELEASE-amd64-disc1.iso。-dvd1.iso 和 -memstick.img 大同小异。

    注意

    本文基于 VMware 17 进行演示(使用 UEFI)。

    若是物理机,请考虑使用 rufus + img 镜像。

    启动安装盘

    此界面无需任何操作,等待十秒,可自动进入 1. Boot Installer [Enter];亦可以直接按 回车键 进入。

    如果按其他任意键会暂停,然后可按数字键继续,或者按 ESC 进入 OK 提示符。

    在此界面可输入 menu 再按 回车键 返回菜单。输入 ? 可查看可用命令。

    以下操作:按最开头的数字可进行选定。on 代表已开启,off 代表已关闭。

    选项
    解释

    警告

    需要指出,某些教程要求人们关闭 ACPI,这样做现在是没有任何依据的。除非你不是 x86,否则对于现代计算机绝没有关闭的道理。ACPI 和电源状态、设备节能、多处理器支持等功能密切相关。应该将此选项视为遗留功能,只有不支持 UEFI 的上古计算机才应考虑。

    如果出现 ACPI 报错,也是非常正常的事情。大部分情况下并不会影响使用。一般通过更新 BIOS 即可解决。在极个别情况下可能需要修补 SSDT 和 DSDT,黑苹果的玩家对此应该并不陌生,甚至是家常便饭。

    使用 bsdinstall 进行安装流程

    在回车或等待一段时间(10 秒)后,会自动进入下面的界面。

    技巧

    这个界面是由工具 bsdinstall 提供的。

    本章将指导用户如何使用该工具来进行 FreeBSD 的安装。该工具不仅存在于安装镜像中,安装完成后你在新装系统中依然可以找到它,并且还可用它来执行普通的安装流程(请记住这一点,在高级的安装方式中很有用)。

    bsdinstall 工具本质上是由一系列 sh 脚本构成的,其源代码位于 ,脚本在“scripts”文件夹下。

    欢迎菜单。

    欢迎使用 FreeBSD!你想要开始安装还是使用 Live 系统?

    选中左侧 install,按下 回车键 可进行安装;中间 Shell 是命令行;右侧 Live System 是 LiveCD 模式。

    技巧

    以下若无特别说明,按 TAB 键 或者 方向键 可选择不同条目;按 回车键 可以选定高亮条目;

    技巧

    注意观察图片中的红色加粗大写首字母,如 Install、Shell 和 Live System 中的 I、S、L 分别是红色加粗大写的。若你直接按键盘上面的对应按键(无论大小写),均会选定并直接进入该界面。

    警告

    无论在任何步骤,按 ESC 键 均 不能 返回上一菜单,都会直接跳到下一步直至退出安装或结束安装。

    设定键盘布局

    FreeBSD 系统控制台驱动程序默认使用标准 US (美式)键盘布局。可以在下面选择别的键盘布局。

    这里是键盘布局菜单,直接按 回车键 使用默认键盘布局即可(因目前中国使用美式键盘布局)。

    设定主机名

    请选择此机器的主机名。如果你正运行在受管理的网络上,请向你的网络管理员询问合适的名称。

    此处为设置主机名菜单。

    警告

    不要 在这一步直接按 回车键!这样会导致主机名为空!登录管理器 sddm 会无法启动。

    警告

    官方手册上说的是错的(Amnesiac),如果你不设置主机名,那么你的主机名不会被赋予任何值(不会给你分配 Amnesiac!),因为 FreeBSD 源码已经假设你会通过 DHCP 分配该值了。根据目前的源代码逻辑,只要你使用了 DHCP,也不会有任何报错提示主机名为空,当且仅当你没有网络时,才会在登录时将 login 信息打印为 Amnesiac,并打印一条报错信息。

    参考信息

    • ,笔者发现的 bug

    • ,Amnesiac 源码

    • ,笔者的 PR

    选择安装类型

    你想使用传统的 Distribution sets(发行组件)还是使用 Packages(软件包,技术预览)来安装基本系统?

    软件包(pkgbase,技术预览)

    警告

    网络配置,分区配置均见下文。请确保你浏览全文后再选择此项。

    你想从互联网获取软件包,还是使用此安装介质内包含的有限软件包?

    pkgbase 是 TrueOS 留给 FreeBSD 项目的技术遗产,旨在以软件包的形式管理基本系统(内核与用户空间),将基本系统拆分为独立的、可由 pkg 管理的二进制包。

    我们可以很明显地看出这种方式的设计思路接近 Linux 发行版。甚至大多数开发者也未能意识到,pkgbase 在稳定性与易用性间存在着明显的张力:

    • 稳定性被破坏:基本系统被严重破坏的可能性大大增加(甚至开发者需要笔者提醒才能意识到这点,但是也只是轻视,直到后续大规模应用时社区不断地抱怨后才终于愿意正视问题,但是目前看,重视程度仍然不足);

    • 易用性得到改善:在 FreeBSD 不同版本分支间切换的成本大大降低。开发者可以轻松地在 stable、current 分支上进行更新。普通用户不用忍受用 shell 编写的 freebsd-update 工具的冗长等待。

    在线安装(Network)

    适用于多用户系统的最小软件包集始终会被安装。请选择你想安装的其他软件包。

    组件
    说明

    离线安装【Offline(Limited Packages)】

    适用于多用户系统的最小软件包集始终会被安装。请选择你想安装的其他软件包。

    组件
    说明

    经过测试,即使全选也可以实现完全地离线安装。

    发行组件(Distribution Sets)

    这是传统的安装方式。

    选择要安装的可选系统组件

    技巧

    以下若无特别说明,按 空格键 可以选中条目——就是让 [ ] 变成 [ * ]。

    推荐:在默认的基础上,额外 选中 src 即可。因为部分显卡驱动(如 drm)和其他程序需要 src,经测试 lib32 后期安装无效。

    警告

    不要 选择 kernel-dbg、lib32、src 以外的组件,需要联网安装,极慢。如有需要可以自己后期安装。

    如果在安装中出现应该选用哪个镜像站这个问题,是因为你全选了组件,请不要这样做。

    选项
    解释

    分配磁盘空间

    FreeBSD 15.0-RELEASE 的 / 分区支持 UFS 和 ZFS 两种文件系统。旧版 FreeBSD 系统 root 分区仅支持 UFS 一种文件系统:bsdinstall 从 10.0 支持 zfs,手动安装的话至迟 8.0 就 用 zfs 作为根分区了。

    分区菜单。你希望如何分区你的磁盘?

    配置选项
    中文说明

    文件系统详解见其他章节(可手动分区解压 txz 文件以自定义,参见其他章节)。这里,推荐选择默认选项 auto ZFS:一般来说,内存小于 8GB 的应该选择 UFS,内存 8G 及以上的应该选用 ZFS。

    手动分区和 Shell 分区参见手动安装 FreeBSD 相关章节。

    Auto (ZFS)(使用 ZFS 作为 / 文件系统)

    技巧

    经过测试,实际上 256M 内存也能用 ZFS(UEFI);若使用旧的 BIOS,128M 内存足矣。

    注意

    如果使用手动分区一直提示分区表损坏(corrupted)或类似字样,请先退出重启,进入 shell 模式,刷新分区表:

    你在手动安装的时候可以判断是哪块硬盘,以确定 ada0 这个参数是多少。

    如果不确定自己的硬盘是哪块(比如分不清是 da0 还是 nvme0 之类的):可使用图片中的命令查看。

    刷新后,输入 bsdinstall 即可进入安装模式。

    原因详情见 ,但是我认为这是一个 bug。

    正在探测设备,请稍候(这可能需要一些时间)……

    现代(近十几年内的)计算机应该选择 GPT+UEFI。请勿使用默认选项!这样会产生一个 512KB 的 freebsd-boot 多余分区。

    较老的计算机(如 2013 年以前的)才应该选择选项 GPT(BIOS)——此默认选项同时兼容二者。

    配置选项
    中文
    说明

    技巧

    如果在此处设置 P Partition Scheme 为 GPT (UEFI) 而非其他,后续分区与系统更新过程会更加简单。

    注意

    最好想清楚再设置 Swap Size(即交换分区)的大小(一般理论是内存的两倍,但由于设计问题,不应超过 64G),因为 zfs、ufs 文件系统都是不能缩小文件系统的,而 dd 一个 swap 文件或文件系统会有负面作用。

    技巧

    如果分不清应该后续选择哪块磁盘,可以在此步选择 - Disk Info *,查看磁盘信息:

    此界面,选中磁盘按 回车键 可查看详情;选中 <Back> 可返回上一菜单。

    此界面按 上下方向键 可浏览。按 回车键 可返回到上一菜单。

    选择虚拟设备类型:

    配置选项
    中文
    特点

    我们直接按 回车键 使用默认的 Stripe 即可。

    选中你的硬盘,直接按 回车键 即可。

    技巧

    如果你要把系统安装到 U 盘或移动硬盘,但系统并未识别出来,请重新插拔一下存储设备。然后按上面的 - Rescan Devices *,重新扫描下设备,应该就可以了。

    注意

    如果你的硬盘是 eMMC,可能会出现三个选项,类似于 mmcsd0、mmcsd0boot0 和 mmcboot1。请选择 mmcsd0。另外如果多硬盘与 eMMC 共存,若另一块硬盘分区量大于 5 个,eMMC 中的 FreeBSD 会卡在 Mounting from zfs:zroot/ROOT/default failed with error 22: retrying for 3 more seconds。且若手动指定,会直接 Panic。疑似 Bug,但我不知道如何报告,无法获取进一步的细节。

    最后机会!你确定要销毁以下磁盘的当下内容吗:

    这是最后一次警告与确认。你的确已经备份完成,指定磁盘全盘都会被格式化。按 方向键 和 Tab 键 可左右切换到 <YES>,按 回车键 可选定之。

    警告

    这是全盘安装,会丢失所有数据!非全盘安装请参考本书其他文章。

    附录:ZFS 加密分区后如何解密

    如果在安装 FreeBSD 的时候选择了 ZFS 磁盘加密,那么如何挂载该磁盘呢?

    NVMe 硬盘 ZFS 加密后的磁盘结构(同时加密了交换空间):

    分区类型
    挂载点
    设备

    浏览 EFI 分区会发现并无特殊之处,同正常安装一样。启动时会提示输入密码以挂载根分区。

    如果是在 LiveCD 挂载,也很简单,也不需要密钥。执行命令:

    然后输入正确的密码即可通过命令 # zfs mount zroot/ROOT/default 导入磁盘即可。

    Auto (UFS)(使用 UFS 作为 / 文件系统)

    你想如何对你的磁盘进行分区?

    技巧

    若选择 Partition(分区),选项同下文。

    你是想使用整个磁盘还是将其分区以与其他操作系统共享?使用整个磁盘将擦除当前存储在那里的所有数据。

    为该卷选择分区方案

    英文
    中文
    注释

    请审查磁盘设置。若无问题,可点击 “Finish”(完成)按钮

    英文
    中文

    你的更改不会被保存到磁盘。如果你选择了覆盖现有数据。它将被删除。你确定要提交你的更改吗?

    英文
    中文

    初始化磁盘——此界面一闪而过


    pkgbase(若选择):

    校验相关分发文件包:

    解压并安装相关分发文件包:

    设置 root 密码

    请选择系统管理账户(root)的密码:输入的字符不可见。正在更改要安装的系统的 root 密码。

    技巧

    在此界面输入 上下箭头 或 TAB 键 才能在密码框间移动。输入回车键可确认。

    此处输入 root 密码,密码会在屏幕上显示为常见的 *。

    要求重复输入两次以确认一致性,若两次输入的密码不同则提示 The passwords do not match(密码不匹配)。

    root 密码强度无默认要求。root 密码不能为空,会提示 The password cannot be empty(root 密码不能为空),需要输入密码方可继续下一步。

    网络设置

    以太网卡

    请选择网络接口和配置模式进行配置

    • Auto:自动

    • Manual:手动

    • Cancel:取消

    即选择网卡。按 方向键 可切换,按 回车键 可选定。

    自动(Auto)

    发送路由器请求,将会自动检测网络并设定网络环境。

    手动(Manual)

    你希望为此接口配置 IPv4 吗?

    配置 IPv4。按 回车键 可选定。

    你希望使用 DHCP 配置此接口吗?

    配置使用 DHCP。按 回车键 可选定。

    你希望为此接口配置 IPv6 吗?

    配置 IPv6。因本教程未使用 IPv6,故选 No,按 回车键 可选定。如有需要可自行配置 IPv6。

    配置解析器

    一般保持 DHCP 获取的 DNS 即可,也可以使用其他 DNS。此处使用了阿里 DNS 223.5.5.5。按 方向键 可切换,按 回车键 可选定。

    无线网卡/ WiFi 设置

    警告

    由于 ,故此部分存在问题,请跳过。

    注意

    建议跳过此部分,重启进入系统后再参照无线网络相关内容进行设置(尤其是博通网卡用户)。否则可能会无限卡住或直接 Panic。

    请选择网络接口进行配置

    警告

    由于 ,目前选择任何无线电区域,都会报错如下:

    更改地区/国家(FCC/US)?

    修改 WiFi 区域码,按回车确认。

    选择你的区域码

    我们应该选 NONE ROW。

    选择你的地区

    选择区域:

    等待 5 秒钟,正在扫描无线网络……

    扫描。

    技巧

    只要能识别出来网卡,肯定就是能用的,但是在安装系统的时候不一定能够正确搜索出 WiFi。请你置空,安装完成后重启到新系统,再参照 WiFi 章节进行处理。

    在列表中找寻你的 WiFi,找不到的话请你换下路由器的信道。

    选择你要连接的无线网络

    输入 WiFi 密码即可连接:

    你想要为此接口配置 IPv4 吗?

    配置 IPv4。按 回车键 可选定。

    你希望使用 DHCP 配置此接口吗?

    配置使用 DHCP。按 回车键 可选定。

    你希望为此接口配置 IPv6 吗?

    配置 IPv6。因本教程未使用 IPv6,故选 No,按 回车键 可选定。如有需要可自行配置 IPv6。

    配置解析器

    一般保持 DHCP 获取的 DNS 即可,也可以使用其他 DNS。此处使用了阿里 DNS 223.5.5.5。按 方向键 可切换,按 回车键 可选定。

    参考文献

    • ,regdomain.xml 在源代码的位置

    • ,对应编码请参考系统中的 /etc/regdomain.xml 文件

    时区设置

    选择地区

    设置时区。中国位于 5 Asia(亚洲)。按 方向键 可切换,按 回车键 可选定。

    设置国家或区域

    中国选择 9 China(中国)。按 方向键 可切换,按 回车键 可选定。

    中国统一使用东八区时间,即北京时间,请选择 1 Beijing Time(北京时间)。按 方向键 可切换,按 回车键 可选定。

    时区缩写 'CST' 看起来合理吗?

    我们使用中国标准时间:China Standard Time(CST),没有问题,按 回车键 选定 Yes。

    时间与日期

    按 回车键 即可。

    时间与日期

    按 回车键 即可。

    启动服务设置

    选择你希望在开机时启动的服务

    警告

    不要全选!

    不要 选 local_unbound,会影响 DNS,见 。除非你知道这是什么。

    选项
    解释

    安全加固

    选择系统安全加固选项

    这里是安全加固部分,可根据需要自行选定。

    选项
    解释

    安装固件

    自动检测安装所需固件(14.2 )。

    此图片来自虚拟机安装界面。

    此图片来自物理机安装界面(使用采集卡)

    警告

    你最好在这一步取消勾选,即不安装任何固件(安装了也是有问题的),否则你会无限期卡在这里,因为网络问题。如果你不记得需要安装什么,可以在安装好后用命令 fwget 看一下。

    此图片来自物理机安装界面(使用采集卡)

    创建普通用户

    你现在希望向已安装的系统添加用户吗?

    如需创建,请按 回车键 选 Yes;如果不需要普通用户,是 root 敢死队,请用 方向键 选 No。

    技巧

    绝大多数登录管理器都是默认禁止 root 用户登录。换言之,如果不进行一定的修改(参见其他章节),在默认状态下,你可能无法用 root 登录桌面。虽然在默认状态下 FreeBSD 不带桌面,或者还可以直接 startx。

    警告

    如果你要创建普通用户,请务必将其加入到 wheel 组和 video 组(仅 wheel 不足以使用)中(参见箭头处)。否则将可能无法正常使用命令 su,无法调用 GPU。

    • ① 如果用户全名为空(即不设置),系统会分配一个默认值 User &。这是早期 Unix 的行为(Gecos 字段)。由 ,文件中的 static struct passwd fakeuser 这部分代码实现。

    • ② 如果设置使用随机密码,在最后的部分会输出:adduser: INFO: Password for (ykla) is: D1MnujkWMv/m(adduser:信息:用户 (ykla) 的密码是:D1MnujkWMv/m)。

    其他参数可以保持默认设置不变。在 FreeBSD 14 及以后,所有用户的默认 shell 都被统一为了 sh。

    最后会询问 Add another user? (yes/no) [no],按 回车键 即可完成创建;

    若输入 yes,按 回车键 可创建第二个普通用户。

    参考文献

    完成安装

    你的 FreeBSD 系统设置即将完成。你现在可以修改你的配置选项。此菜单之后,你可使用 shell 进行更复杂的更改。

    按 回车键 可结束安装。

    配置选项
    功能描述

    安装现已完成。在退出安装程序前,你是否想在新系统中打开 shell 以进行最后的手动修改?

    按 回车键 可完成安装。

    FreeBSD 安装完成!你现在是否希望重新启动并进入已安装的系统?

    按 回车键 可重启进入新安装的系统。

    欢迎来到 FreeBSD 世界

    安装后重启到 FreeBSD 新系统:

    完全启动后:

    技巧

    FreeBSD 基本系统并无图形界面,亦未安装 Xorg,所以就是这个样子的。

    输入用户名 root 和安装的时候设置的 root 密码登录到系统。

    技巧

    密码是不会显示在屏幕上的,也不会是 ***,就是什么也没有,输入了回车即可。

    启动选项

    off(关)

    单用户模式

    6. Verbose

    off(关)

    啰嗦模式,增加更多调试信息输出

    系统源码树

    [ ] tests

    测试套件

    系统源码树

    [ ] tests

    测试套件

    测试工具

    N Pool Name zroot

    存储池名称 zroot

    默认池名 zroot

    4 Force 4K Sectors? YES

    强制 4K 扇区?是

    4K 对齐

    E Encrypt Disks? NO

    加密磁盘?否

    加密后的登录系统方案请参照本书其他文章

    P Partition Scheme

    GPT (UEFI) 分区方案 GPT (UEFI)

    只有老电脑才需要 GPT (BIOS+UEFI) 等选项

    S Swap Size 2g

    交换分区大小 2g

    如果你的确不需要 Swap,Swap Size 输入 0 或 0G 即可不设置交换分区。

    M Mirror Swap? NO

    交换分区镜像?否

    是否在多个磁盘之间镜像交换分区,若选否,则每个磁盘的交换分区是独立的

    W Encrypt Swap? NO

    加密交换分区?否

    raidz2

    RAID-Z2

    双冗余 RAID,最少需要 4 块硬盘

    raidz3

    RAID-Z3

    三重冗余 RAID,最少需要 5 块硬盘

    启用崩溃转储,用于调试系统

    在开机时清除 /tmp

    7 disable_syslogd

    禁用 Syslogd 网络套接字(禁用远程日志记录)

    8 secure_console

    启用控制台密码(单用户模式下也需要 root 密码)

    9 disable_ddtrace

    禁止 DTrace 破坏性(destructive)模式

    设置安全选项

    Time Zone

    设置系统时区

    Firmware

    安装固件(需要网络)

    Handbook

    安装 FreeBSD 手册(需要网络)

    1. Boot Installer [Enter]

    用于安装系统

    2. Boot Single user

    单用户模式,找回 root 密码和修复磁盘时会用到

    3.Escape to loader prompt

    离开菜单,进入命令模式,进入后输入 reboot 回车可重启

    4.Reboot

    重启

    5. Cons: Video

    选择输出模式:视频(Video)、串口(Serial)、同时输出,但串口优先(Dual (Serial primary))、同时输出,但视频优先(Dual (Video primary) 可选)

    6. kernel (1 of 1)

    选择要启动的内核

    7. Boot Options

    默认值

    启动参数

    1. Back to main menu [Backspace]

    On(开)

    按 删除键 可返回上级菜单

    2. Load System Defaults

    off(关)

    恢复默认配置

    3. ACPI

    off(关)

    Advanced Configuration and Power Management Interface,高级配置和电源接口

    4. Safe Mode

    off(关)

    安全模式

    [X] base

    完整的基本系统(包含 devel 和 optional)

    [ ] debug

    所选组件的调试符号

    [ ] devel

    C/C++ 编译器及相关工具

    [X] kernel-dbg

    内核调试符号

    [X] lib32

    32 位兼容库

    [ ] optional

    可选软件(不含编译器)

    [X] base

    完整的基本系统(包含 devel 和 optional)

    [ ] debug

    所选组件的调试符号

    [ ] devel

    C/C++ 编译器及相关工具

    [X] kernel-dbg

    内核调试符号

    [X] lib32

    32 位兼容库

    [ ] optional

    可选软件(不含编译器)

    base-dbg

    基本系统调试工具

    kernel-dbg

    内核调试工具

    lib32-dbg

    32 位应用程序的兼容库的调试工具

    lib32

    用于在 64 位 FreeBSD 上运行 32 位应用程序的兼容库

    ports

    ports

    src

    系统源代码

    Auto (ZFS) – Guided Root-on-ZFS

    自动 (ZFS) – 引导式 ZFS root 分区

    Auto (UFS) – Guided UFS Disk Setup

    自动 (UFS) – 引导式 UFS 磁盘设置

    Manual – Manual Disk Setup (experts)

    手动 – 手动磁盘设置(适合专家)

    Shell – Open a shell and partition by hand

    Shell – 打开 Shell 并手动分区

    >> Install Proceed with Installation

    >> 安装 继续安装

    T Pool Type/Disks: stripe: 0 disks

    存储池类型/磁盘:条带化:0 块磁盘

    详细说明见下

    - Rescan Devices *

    - 重新扫描设备 *

    - Disk Info *

    - 磁盘信息 *

    Stripe

    条带化,即 RAID 0

    无冗余,一块硬盘即可

    mirror

    镜像,即 RAID 1

    n 路镜像,最少需要 2 块硬盘

    raid10

    RAID 1+0

    n 组 2 路镜像,最少需要 4 块硬盘(要求偶数块硬盘)

    raidz1

    RAID-Z1

    单冗余 RAID,最少需要 3 块硬盘

    freebsd-boot /EFI

    /dev/nda0p1

    freebsd-zfs

    /

    /dev/nda0p2、/dev/nda0p2.eli

    freebsd-swap

    /dev/nda0p3、/dev/nda0p3.eli

    APM Apple Partition Map

    苹果分区表

    苹果 PowerPC 用(2006 以前)

    BSD BSD Labels

    BSD 磁盘标签

    仅 BSD 可识别

    GPT GUID Partition Table

    GPT 全局唯一标识分区表

    现代计算机使用(2013+)

    MBR DOS Partitions

    MBR 主引导记录分区表

    老式计算机使用(XP、Win7 年代)

    Create

    创建

    Delete

    删除

    Modify

    调整

    Revert

    还原

    Auto

    自动

    Finish

    完成

    Commit

    提交

    Revert & Exit

    还原并退出

    Back

    返回

    sshd

    开启 ssh 服务

    ntpd

    用于自动时钟同步的网络时间协议(NTP)守护程序

    ntpd_sync_on_start

    开机同步时间

    local_unbound

    启用 Unbound。这是基本系统预置的 unbound,仅用于本地缓存转发解析器使用。注意:如果开启,你的系统将不会正确联网,需要手动配置 DNS。如果你不知道这是什么不建议开启

    powerd

    电源管理,CPU 频率动态调整

    moused

    在 tty 界面显示鼠标

    0 hide_uids

    隐藏其他用户的进程

    1 hide_gids

    隐藏其他组的进程

    2 hide_jail

    隐藏 jail 中的进程

    3 read_msgbuf

    禁止非特权用户读取内核消息缓冲区(一般用 dmesg 查看)

    4 proc_debug

    禁用非特权用户的进程调试功能

    5 random_pid

    进程的 PID 随机化

    Finish

    应用配置并退出安装程序

    Add User

    向系统添加用户

    Root Password

    更改 root 密码

    Hostname

    设置系统主机名

    Network

    网络配置

    Services

    设置开机运行的 daemons

    usr.sbin/bsdinstall
    If the hostname is not set for the host, the value "Amnesiac" should be written to rc.conf.
    libexec/getty/main.c
    bsdinstall: Warn if hostname is empty
    开始
    可以
    FreeBSD 手册
    Missing CN regulatory domain and 11ac/DFS support in regdomain.xml
    Bug 287538 - Installer error on setting regdomain
    Regulatory Domain Support
    main/lib/lib80211/regdomain.xml
    regdomain.xml -- 802.11 wireless regulatory definitions
    阿里公共 DNS
    Bug 262290 - After a normal FreeBSD installation and reboot, /etc/resolv.conf will be changed
    引入
    freebsd-src/blob/main/usr.sbin/pw/pw_user.c
    man adduser(8)
    选择安装类型
    网络或离线安装
    选择安装组件
    选择安装组件
    虚拟机无固件可安装
    物理机也许有些固件需要安装
    结束安装

    7. Boot Options

    5. Single user

    [ ] src

    [ ] src

    tests

    dumpdev

    6 clear_tmp

    System Hardening

    # gpart recover ada0
    # geli attach /dev/nda0p2
    Error while applying chosen settings  
    (unknown regdomain Expected  eval: Use: not found)
    FreeBSD Installer # FreeBSD 安装程序
    ========================
    Add Users # 添加用户
    
    Username: ykla # 此处输入用户名。只能使用小写字母(不支持非拉丁字符,如中日韩俄)或数字,且不能以连字符 - 开头。最大长度为 16 个字符(历史原因)
    Full name: # 此处输入用户全名 ① 可留空。不能使用英文冒号 : 字符。
    Uid (Leave empty for default):  # 用户 UID,留空将使用默认值。手动设置时必须小于 32000。
    Login group [ykla]: # 用户主组
    Login group is ykla. Invite ykla into other groups? []: wheel video # 此处输入“wheel video”(两个单词之间有个空格),邀请用户“ykla”加入附加组“wheel”和“video”
    Login class [default]: # 用户分级
    Shell (sh csh tcsh nologin) [sh]: # 用户默认 shell,默认是 sh
    Home directory [/home/ykla]: # 用户主(家)目录,普通用户默认在 /home 下面
    Home directory permissions (Leave empty for default): # 用户主(家)目录权限,留空将使用默认值
    Enable ZFS encryption? (yes/no) [no]: # 是否启用 ZFS 加密
    Use password-based authentication? [yes]:  # 是否启用用户密码验证
    Use an empty password? (yes/no) [no]:  # 是否使用空密码,即密码为空
    Use a random password? (yes/no) [no]:  # 是否使用随机密码。若设置 yes 将生成随机字符串用作密码。该密码会回显到标准输出。②
    Enter password:  # 输入密码,密码不显示在屏幕上,也不会是 ****,就是什么也没有
    Enter password again:  # 重复输入密码,密码不显示在屏幕上,也不会是 ****,就是什么也没有
    Lock out the account after creation? [no]: # 创建账户后锁定账户(禁用该账户)
    Username    : ykla # 设定的用户名
    Password    : ***** # 设定的用户密码
    Full Name   : # 设定的用户全名
    Uid         : 1001 # 设定的用户 UID
    ZFS dataset : zroot/home/ykla # 主(家)目录所在的 zfs 数据集,自 15.0 引入
    Class       :  # 设定的用户分级
    Groups      : ykla wheel video # 设定所在的用户组
    Home        : /home/ykla # 设定的用户主(家)目录
    Home Mode   :  # 设定的用户主(家)目录权限
    Shell       : /bin/sh # 设定的用户默认的 shell
    Locked      : no # 是否锁定(禁用)用户
    OK? (yes/no) [yes]: # 上述设置有无问题
    adduser: INFO: Successfully added (ykla) to the user database. # 已成功将 ykla 添加到用户数据库
    Add another user? (yes/no) [no]: # 是否还要再添加其他用户