14 KiB
我要不要试试 OpenBSD
又一篇中文文章 这个文章可能是我写过最长的了 (internet_collections 不算) 请不要不知好歹地转载! 地址: dongdigua.github.io/whatif_openbsd base64: ZG9uZ2RpZ3VhLmdpdGh1Yi5pby93aGF0aWZfb3BlbmJzZA==
_ (_) | . . |L /| . _ _ . |\ _| \--+._/| . (_) / ||\| Y J ) / |/| ./ J |)'( | ` F`.'/ _ -<| F __ .-< (_) | / .-'. `. /-. L___ J \ < \ | | O\|.-' _ _J \ .- \/ O | | \ |F (_) '-F -<_. \ .-' `-' L__ __J _ _. >-' )._. |-' `-|.' /_. \_| F /.- . _.< /' /.' .' `\ /L /' |/ _.-'-\ /'J ___.---'\| |\ .--' V | `. ` |/`. `-. `._) / .-.\ \ ( `\ `.\
Intro
我想整 OpenBSD 已经蓄谋已久了: 在 Windows 和 Fedora(160G) 之间我空出了 100G, 当然只是试试, 可能不会作为日常使用, 当然是因为软件生态.
我现在这个 Fedora 真的就是 BLOATED, 默认 Workstation 安装太多东西了, 但就是能用, 至于都安装了什么, 看我给 COSSIG 写的这篇文章1. 哦, 对, 还有 yue, systemd.
我可能之后再装电脑要不就是基于 Fedora Server 开始, 要么就是 Gentoo + Nix, 但总之肯定是 Linux, 并且显示肯定是 Wayland, 因为软件生态和性能.
那我为什么要整 OpenBSD, 因为简洁和统一, 安全的话, 算是一个原因, 因为我对性能已经没有期待了. 还有就是, Linux 上 "现代" 的东西都用 Wayland, BSD 这种传统的东西对 wayland 支持不怎么样, 我这回就要安心地探索 old school 的 X, suckless 三件套, 合成器效果.
这次我想把整个折腾系统的过程都记下来, 便于维护, 以防到最后我都不知道某个目录/软件是从哪来的.
对于这个系统的定位, 我觉得就是一个能用的 上网+开发环境, 那些比较大的东西, 比如 Minecraft, QQ, 视频制作相关(Kdenlive, GIMP), 就不碰了.
Boot OpenBSD with Grub?
安装, 就很朴实无华且枯燥, 硬盘分区小心点就是了
然后问题就是, 怎么启动它? 官网上说:
rEFInd is reported to usually work. GRUB is reported to usually fail. In either case, you are completely on your own.
然后? 扔一句 "you are completely on your own." 也不告诉具体咋办啊?
然后我就搜, 可几乎都是 FreeBSD 的, 毕竟 OpenBSD 很罕见.
那里面有一些要 insmod ufs2
, 我才发现我对 grub 竟没那些 modules, 于是就 doas dnf in grub2-efi-x64-modules
.
在 yt 上看到了一个葡萄牙语小哥的教程2, 发现几年前官网上是有具体办法的,
menuentry 'OpenBSD' {
set root=(hd0,gptX)
chainloader +1
}
照着试了, 不行… 然后又看 GNU Grub Manual, 里面说了 NetBSD3:
grub> insmod part_gpt
grub> set root=(hd0,gptX)
grub> knetbsd /netbsd
grub> boot
我寻思既然 OpenBSD 和 NetBSD 是同族的, 那我就 kopenbsd
?
也不行…
既然 bing 搜不到, 那就上世界上第二大搜索引擎 YouTube!
看到了 Root BSD 的这个视频4
首先也吐槽了闪烁其词的文档, 然后, chainloading 须要 BOOTX64.efi, 而我根目录没有, 难怪!
正当我准备重新编译内核加入 UFS 可写时, 他展示了一个离谱方法:
0. 在 grub 界面选择 OpenBSD entry 1. 不进去, 而是按 c 启动命令行 2. 输入 exit 3. here you go!
我立马停止了 Linux 内核编译, 去试了一下, 我超!
First time using OpenBSD
现在这段文字是在 OpenBSD 上的 emacs 上写的! 第一次启动, 现让它自己把更新那些东西跑完.
然后就是安装一堆软件 我没有安装那些 "现代化 UNIX 工具", 比如 htop bat exa zoxide, (ripgrep 除外, 太好用了) 7z 真的好用, 但是我觉得更应该学学标准的 UNIX 压缩解压工具
doas pkg_add firefox neovim git pcmanfm noto-cjk # 特别必要的
doas pkg_add ripgrep fzf ncdu neofetch ranger p7zip colortree # 好用的工具
doas pkg_add gmake elixir gnutls # dev
我跑了一下 WebGL 水族馆5, 500 条鱼只有 10fps… 实际上 1 条鱼也一样… 而相比之下 Linux Wayland 5k 条鱼都能满 60
B 站放不了, 音视频解码都有问题
先按照 /usr/local/share/doc/pkg-readmes/firefox 里面 layers.acceleration.force-enable gfx.webrender.enabled 都 true uhh, 水族馆帧率没变…
然后, 凭直觉安 openh264, 似乎没用, 那就 gstreamer,
准确来说是 gstreamer1-plugins-libav
好耶! 能看B站了!
超级工具箱: emacs
这个当然要自己编译, 今天 git.sv.gnu.org 特别慢, 而 github 快得离谱 源码下载下来之后编译, 由于是纯 X, 所以选项和之前那篇6里面的不一样 着急用, 所以参数还没加全
./configure CFLAGS="-march=native -O3 -pipe -flto=thin" --with-x --with-gif=ifavailable
然后就是各种依赖, 大多数 X 相关的系统都自带了
之后各种包就容易了, 用我写的 setup-what-pkg
宏自动安装所有包
autoconf
autoconf 有不少选择, 但须要注意的是要设置 AUTOCONF_VERSION
这个变量, 我选的是最新的 2.71
texinfo
OpenBSD 自带的太老了, 所以要自己编译新的. 但是我删除了自带的 texinfo 之后 /usr/bin/texinfo 还残留着不知为啥, 我暂时先手动删了
TODO libgccjit
suckless X
这个我可不想自己打 patch, 遂使用 flexipatch 构建 编译出问题先看 config.mk 和 Makefile 典型的是 freetype 和 cp -n 具体的配置放 github, 还是那夹 configs repo 还有把 /etc/X11/xenodm/Xsetup_0 里面 xconsole 那行去掉, 难看
换掉 fvwm, 舒服~
uhh, firefox 有屏幕刷新的问题, 我尝试使用 Intel TearFree
Section "Device"
Identifier "drm" # or "Intel Graphics"
Driver "intel"
Option "TearFree" "true"
EndSection
但是 (EE) intel(0): No outputs and no modes.
因为 (II) intel(0): Using Kernel Mode Setting driver: i915, version 1.6.0 20201103
驱动太老了…
st 中文显示重叠
st 里中文显示一直是重叠的, 字符的排布和英文字母一样.
废了我好大劲, 我安装了巨大的 gnome-terminal (用 dbus-launch gnome-terminal 启动), 好使.
最后才发现是没设置 LANG
这个变量, 而且还不能在 profile 里, 得在 .xsession
ksh
只写 .profile 不够, 还得在 .xsession 里加 ENV=$HOME/.profile
,
这样 ksh 才能每次加载配置, 否则只有 login shell 能
v2ray
就把 Linux 下的配置拷贝过来, 不好使 一直 connection reset by peer (curl) 或 PR_ENF_OF_FILE_ERROR (firefox) 后来发现是时间的问题
date
我之前以为时间不对是因为没配置时区的事, 因为只有小时是错的. (但我没有意识到一个问题, 为什么小时是 UTC+16) 然后我配置 dwm 状态栏的时候发现时区是对的, 但是 ntpd 说 time unsynced, 因为时间差太多了, 几千秒! 手动调了下时间然后自动同步了, v2ray 就能用了.
但是, 重启之后时间又变回去了! 我猜是我 BIOS 用的是 UTC+8, 但是 OpenBSD 给它当成 UTC 了, 所以又加了 8 小时… 那就写个自启动每次开机自动同步一下吧? 我不想再改 BIOS 时间然后另外几个系统再出什么问题.
doas rdate ntp.ntsc.ac.cn
然后我看到了一个日本人(公司?)写的文章7, 他遇到的问题完全一样, 也是重复加时区. 配置内核选项, 加上 utc_offset (sysctl(2))
kern.utc_offset=480
Daily?
弄了那么多, 现在可以算是日常使用了
既然在一个传统 UNIX 上, 那就试试终端邮件客户端, 然后试试订阅 OpenBSD 邮件列表. 然后就按照这篇文章8里面配置 smtpd 和 mail, 试了好久都不行, 好乱. 那就试试别的? 我切回 Fedora 看了几个 YouTube 视频, 里面都用 ssmtp, 那就试试? 也试了好久, 发现是网易邮箱不支持 starttls! 估计 smtpd 也是这个原因.
然后切回 OpenBSD, 没有 ssmtp? 那试试传说中的 mutt 吧! 文档还是得看 ArchWiki9 经过上面两个摧残之后这个配置感觉容易多了(注意启用 sasl), 很容易就发出了第一封邮件, 然后是怎么收邮件. smtp 收不了邮件, 得用 pop 或 imap.
然后网易的 imap 有这个恶心东西: RFC 2971 的 ID 指令
SELECT Unsafe Login. Please contact kefu@188.com for help
我用网易只是因为我有这么一个闲邮箱, 网易整个邮箱网站我感觉挺糟糕的, 一堆广告, 各种帮助页面都 404… 而且我 openbsd 的邮件好长时间才送到, 不知道之后会不会丢邮件… 鬼!
那看看有什么比较好的, 上知乎一顿搜, 最后感觉 zoho mail 还可以. 注册了一下, 我去! 配置和说明特别明了, 密码也不是难记的 app 密码, 就是邮箱密码, 5 分钟就搞定 smtp+imap! 再简单弄一下 gpg 加密, 能用了!
头一次自己配邮件客户端, 真学到了很多!
然后, 又是收不到邮件? 试了 mail.com, 不给中国注册. 最后发现, 不在 INBOX, 而在 Notification…
dmesg
邮件配置好了, 按照 FAQ10, 把 dmesg 发给 mailto:dmesg@openbsd.org , 帮助开发者更好地支持硬件 我的标题是
Lenovo V15 G2 laptop, i915 driver cannot TearFree, Intel Wireless-AC 9560 recognized as Intel Wi-Fi 6 AX201
然后我又发现了这个讨论11, dmesg@openbsd.org 只是开发者可见, 公开的看 NYCBUG 12
性能调优
我过了这么长时间才弄性能调优, 我之前觉得没啥必要, 但今天
- 编译 emacs 时到了 80 C
- 安 gnome-terminal (尝试修复字体问题) 特别慢
依旧是按照那个被引用成视频的文章8里的方法:
电源管理用 apmd(8),
磁盘在挂载选项加 softdep,noatime
,
至于多线程, 我选择不开
wifi
这个也是早就该弄的, wifi 这东西我感觉很复杂, 所以一直不敢动. 今天想脱离网线捧着看视频, 就花了好长时间配置 wifi. 最终的结果是:
iwx0 at pci0 dev 20 function 3 "Intel Wi-Fi 6 AX201" rev 0x20, msix
我的 wifi 驱动不对… 实际上在 Linux 上识别出的是
[ 3.542438] iwlwifi 0000:00:14.3: Detected Intel(R) Wireless-AC 9560, REV=0x351
巧合的是我在帮另外一个人弄服务器, 他是 B660I d4, wifi 也是 AX201, 然后他说 Ubuntu 驱动有问题. 坏了, 我成 AX201了! 这些硬件问题我准备都确定完之后给 mailto:dmesg@openbsd.org 发过去我的 dmesg, 这个是我在引用那个文章8的视频里看到的, 帮助那些开发者更好的适配新硬件.
所以嘛, OpenBSD 就适合运行在老 ThinkPad 上 :(
btrfs?
我有时候会想访问 Linux 上的文件, 但是似乎不支持 btrfs…13
Footnotes
我: CentOS/Fedora 不同配置/变体都默认安装了什么软件(组) https://dongdigua.github.io/anaconda_kickstarts
OpenBSD em Dual Boot com Linux (Partição Única) https://terminalroot.com/openbsd-dual-boot-with-linux-single-partition/
GNU GRUB Manual section 5.4.3 NetBSD https://www.gnu.org/software/grub/manual/grub/grub.html#NetBSD
Dualboot GNU/Linux and OpenBSD from GRUB2 like a BOSS! https://youtu.be/H2bSXURnqHQ
我: 2023 了, 试试 emacs 29 https://dongdigua.github.io/emacs29_2023
OpenBSD pkg_add didn't work due to incorrect system time https://obsd.solutions/en/blog/2022/02/18/openbsd-pkg_add-didnt-work-due-to-wrong-time/index.html
OpenBSD on a Laptop https://www.c0ffee.net/blog/openbsd-on-a-laptop and a good video based on this article
FAQ: dmesg archive https://www.mail-archive.com/misc@openbsd.org/msg162300.html
NYC*BUG dmesgd https://dmesgd.nycbug.org/index.cgi
Accessing Other Filesystems https://www.openbsd.org/faq/faq14.html#foreignfs