#+TITLE: 我要不要试试 OpenBSD 🐡 #+DESCRIPTION: 你很罕见 #+DATE: <2023-01-21 六> #+OPTIONS: toc:2 又一篇中文文章 这个文章可能是我写过最长的了 (internet_collections 不算) 请不要不知好歹地转载! 地址: dongdigua.github.io/whatif_openbsd base64: ZG9uZ2RpZ3VhLmdpdGh1Yi5pby93aGF0aWZfb3BlbmJzZA== #+BEGIN_EXAMPLE _ (_) | . . |L /| . _ _ . |\ _| \--+._/| . (_) / ||\| Y J ) / |/| ./ J |)'( | ` F`.'/ _ -<| F __ .-< (_) | / .-'. `. /-. L___ J \ < \ | | O\|.-' _ _J \ .- \/ O | | \ |F (_) '-F -<_. \ .-' `-' L__ __J _ _. >-' )._. |-' `-|.' /_. \_| F /.- . _.< /' /.' .' `\ /L /' |/ _.-'-\ /'J ___.---'\| |\ .--' V | `. ` |/`. `-. `._) / .-.\ \ ( `\ `.\ #+END_EXAMPLE * Intro :PROPERTIES: :CUSTOM_ID: intro :END: 我想整 OpenBSD 已经蓄谋已久了: 在 Windows 和 Fedora(160G) 之间我空出了 100G, 当然只是试试, 可能不会作为日常使用, 当然是因为软件生态. 我现在这个 Fedora 真的就是 BLOATED, 默认 Workstation 安装太多东西了, 但就是能用, 至于都安装了什么, 看我给 COSSIG 写的这篇文章[fn: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? :PROPERTIES: :CUSTOM_ID: grub :END: 安装, 就很朴实无华且枯燥, 硬盘分区小心点就是了 然后问题就是, 怎么启动它? 官网上说: #+BEGIN_QUOTE rEFInd is reported to usually work. GRUB is reported to usually fail. In either case, you are completely on your own. #+END_QUOTE 然后? 扔一句 "you are completely on your own." 也不告诉具体咋办啊? 然后我就搜, 可几乎都是 FreeBSD 的, 毕竟 OpenBSD 很罕见. 那里面有一些要 =insmod ufs2=, 我才发现我对 grub 竟没那些 modules, 于是就 =doas dnf in grub2-efi-x64-modules=. 在 yt 上看到了一个葡萄牙语小哥的教程[fn:2], 发现几年前官网上是有具体办法的, #+BEGIN_SRC grub menuentry 'OpenBSD' { set root=(hd0,gptX) chainloader +1 } #+END_SRC 照着试了, 不行... 然后又看 GNU Grub Manual, 里面说了 NetBSD[fn:3]: #+BEGIN_SRC grub grub> insmod part_gpt grub> set root=(hd0,gptX) grub> knetbsd /netbsd grub> boot #+END_SRC 我寻思既然 OpenBSD 和 NetBSD 是同族的, 那我就 =kopenbsd=? 也不行... 既然 bing 搜不到, 那就上世界上第二大搜索引擎 YouTube! 看到了 Root BSD 的这个视频[fn:4] 首先也吐槽了闪烁其词的文档, 然后, chainloading 须要 BOOTX64.efi, 而我根目录没有, 难怪! 正当我准备重新编译内核加入 UFS 可写时, 他展示了一个离谱方法: #+BEGIN_EXAMPLE 0. 在 grub 界面不回车, 而是按 c 启动命令行 1. 输入 exit 2. here you go! #+END_EXAMPLE 我立马停止了 Linux 内核编译, 去试了一下, 我超! * First time using OpenBSD 现在这段文字是在 OpenBSD 上的 emacs 上写的! 第一次启动, 现让它自己把更新那些东西跑完. 然后就是安装一堆软件 我没有安装那些 "现代化 UNIX 工具", 比如 htop bat exa zoxide, (ripgrep 除外, 太好用了) 7z 真的好用, 但是我觉得更应该学学标准的 UNIX 压缩解压工具 #+BEGIN_SRC ksh 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 #+END_SRC 我跑了一下 WebGL 水族馆[fn:5], +500 条鱼只有 10fps... 实际上 1 条鱼也一样...+ 而相比之下 Linux Wayland 5k 条鱼都能满 60 (2023.5) 不知道是因为升级 -current 还是 firefox, 现在 1000 条鱼也能 60fps 了, 我怀疑是 firefox, 因为 firefox-esr 还是 10fps, 而且现在下文的那些硬件加速设置都默认没启用 然后我看了下 /var/log/Xorg.0.log, 突然想起来我之前[[./mailinglist.org::#intel][邮件列表]]问过这事, 但是我那时只把出错的 log 发上去了, 正常启动的没发全... 那究其根源就有些费劲了 ** B 站放不了, 音视频解码都有问题 :PROPERTIES: :CUSTOM_ID: video :END: 先按照 /usr/local/share/doc/pkg-readmes/firefox 里面 layers.acceleration.force-enable gfx.webrender.enabled 都 true uhh, 水族馆帧率没变... 然后, 凭直觉安 openh264, 似乎没用, 那就 gstreamer, 准确来说是 =gstreamer1-plugins-libav= 好耶! 能看B站了! ** 超级工具箱: emacs :PROPERTIES: :CUSTOM_ID: emacs :END: 这个当然要自己编译, 今天 git.sv.gnu.org 特别慢, 而 github 快得离谱 源码下载下来之后编译, 由于是纯 X, 所以选项和之前那篇[fn:6]里面的不一样 着急用, 所以参数还没加全 #+BEGIN_SRC shell ./configure CFLAGS="-march=native -O3 -pipe -flto=thin -fstack-protector-strong" \ --with-x \ --with-gif=ifavailable \ --enable-link-time-optimization #+END_SRC 然后就是各种依赖, 大多数 X 相关的系统都自带了 之后各种包就容易了, 用我写的 =setup-what-pkg= 宏自动安装所有包 *** autoconf autoconf 有不少选择, 但须要注意的是要设置 =AUTOCONF_VERSION= 这个变量, 我选的是最新的 2.71 *** texinfo OpenBSD 自带的太老了, 所以要自己编译新的. 但是我删除了自带的 texinfo 之后 /usr/bin/texinfo 还残留着不知为啥, 我暂时先手动删了 *** TODO libgccjit ** suckless X :PROPERTIES: :CUSTOM_ID: suckless :END: 这个我可不想自己打 patch, 遂使用 flexipatch 构建 编译出问题先看 config.mk 和 Makefile 典型的是 freetype 和 cp -n 具体的配置放 github, 还是那夹 configs repo 还有把 /etc/X11/xenodm/Xsetup_0 里面 xconsole 那行去掉, 难看 还有就是进 tty 了图形没了要按 C-M-f5[fn:9] 换掉 fvwm, 舒服~ uhh, firefox 有屏幕刷新的问题, 我尝试使用 Intel TearFree #+BEGIN_SRC /etc/X11/xorg.conf.d/intel.conf Section "Device" Identifier "drm" # or "Intel Graphics" Driver "intel" Option "TearFree" "true" EndSection #+END_SRC 但是 =(EE) intel(0): No outputs and no modes.= 因为 =(II) intel(0): Using Kernel Mode Setting driver: i915, version 1.6.0 20201103= 驱动太老了... 在邮件列表问了[fn:10], intel(4) 已经停了, 解决方案是用 =picom= 的 vsync *** st 中文显示重叠 st 里中文显示一直是重叠的, 字符的排布和英文字母一样. 废了我好大劲, 我安装了巨大的 gnome-terminal (用 dbus-launch gnome-terminal 启动), 好使. 最后才发现是没设置 =LANG= 这个变量, 而且还不能在 profile 里, 得在 .xsession ** ksh :PROPERTIES: :CUSTOM_ID: ksh :END: 只写 .profile 不够, 还得在 .xsession 里加 ~ENV=$HOME/.profile~, 这样 ksh 才能每次加载配置, 否则只有 login shell 能 ** v2ray :PROPERTIES: :CUSTOM_ID: v2ray :END: 就把 Linux 下的配置拷贝过来, 不好使 一直 connection reset by peer (curl) 或 PR_ENF_OF_FILE_ERROR (firefox) 后来发现是时间的问题 ** date :PROPERTIES: :CUSTOM_ID: date :END: 我之前以为时间不对是因为没配置时区的事, 因为只有小时是错的. (但我没有意识到一个问题, 为什么小时是 UTC+16) 然后我配置 dwm 状态栏的时候发现时区是对的, 但是 ntpd 说 time unsynced, 因为时间差太多了, 几千秒! 手动调了下时间然后自动同步了, v2ray 就能用了. 但是, 重启之后时间又变回去了! 我猜是我 BIOS 用的是 UTC+8, 但是 OpenBSD 给它当成 UTC 了, 所以又加了 8 小时... 那就写个自启动每次开机自动同步一下吧? 我不想再改 BIOS 时间然后另外几个系统再出什么问题. #+BEGIN_EXAMPLE doas rdate ntp.ntsc.ac.cn #+END_EXAMPLE 然后我看到了一个日本人(公司?)写的文章[fn:8], 他遇到的问题完全一样, 也是重复加时区. 配置内核选项, 加上 utc_offset (sysctl(2)) #+BEGIN_SRC /etc/sysctl.conf kern.utc_offset=480 #+END_SRC * Daily? 弄了那么多, 现在可以算是日常使用了 ** [[./mailinglist.org][mail]] ** 性能调优 :PROPERTIES: :CUSTOM_ID: tune :END: 我过了这么长时间才弄性能调优, 我之前觉得没啥必要, 但今天 - 编译 emacs 时到了 80 C - 安 gnome-terminal (尝试修复字体问题) 特别慢 依旧是按照那个被引用成视频的文章[fn:7]里的方法: 电源管理用 apmd(8), 磁盘在挂载选项加 =softdep,noatime=, 至于多线程, 我选择不开 ** wifi :PROPERTIES: :CUSTOM_ID: wifi :END: 这个也是早就该弄的, wifi 这东西我感觉很复杂, 所以一直不敢动. 今天想脱离网线捧着看视频, 就花了好长时间配置 wifi. 最终的结果是: #+BEGIN_EXAMPLE iwx0 at pci0 dev 20 function 3 "Intel Wi-Fi 6 AX201" rev 0x20, msix #+END_EXAMPLE 我的 wifi 驱动不对... 实际上在 Linux 上识别出的是 #+BEGIN_EXAMPLE [ 3.542438] iwlwifi 0000:00:14.3: Detected Intel(R) Wireless-AC 9560, REV=0x351 #+END_EXAMPLE 巧合的是我在帮另外一个人弄服务器, 他是 B660I d4, wifi 也是 AX201, 然后他说 Ubuntu 驱动有问题. +坏了, 我成 AX201了!+ +所以嘛, OpenBSD 就适合运行在老 ThinkPad 上 :(+ 原来 =hostname.iwx0= 里面, 密码要加引号...[fn:9] #+BEGIN_SRC diff --- src/share/man/man5/hostname.if.5 +++ src/share/man/man5/hostname.if.5 @@ -76,1 +76,1 @@ -join mynwid wpakey mywpakey +join mynwid wpakey "mywpakey" #+END_SRC ** btrfs? :PROPERTIES: :CUSTOM_ID: btrfs :END: 我有时候会想访问 Linux 上的文件, 但是似乎不支持 btrfs... ** [[https://github.com/dongdigua/tetris-custom][Add some useful feature in BSD Tetris]] :PROPERTIES: :CUSTOM_ID: tetris :END: ** songs I like #+MACRO: song [[https://www.openbsd.org/lyrics.html#$1][song$1]] - {{{song(57)}}}: Source Fish - {{{song(62)}}}: A 3 line diff (低沉的小调) - {{{song(49)}}}: The Answer - {{{song(58d)}}}: A Year in the Life - {{{song(54)}}}: Our favorite hacks (女声) - {{{song(69)}}}: Vetera Novis (中国古典音乐) - {{{song(46)}}}: Planet of the Users (Cyberpunk) - {{{song(45)}}}: Games - {{{song(39)}}}: Blob (from [[./mailinglist.org::#livecd][mailing list]]) * Footnotes :PROPERTIES: :CUSTOM_ID: fn :END: [fn:1] 我: CentOS/Fedora 不同配置/变体都默认安装了什么软件(组) https://dongdigua.github.io/anaconda_kickstarts [fn:2] OpenBSD em Dual Boot com Linux (Partição Única) https://terminalroot.com/openbsd-dual-boot-with-linux-single-partition/ [fn:3] GNU GRUB Manual section 5.4.3 NetBSD https://www.gnu.org/software/grub/manual/grub/grub.html#NetBSD [fn:4] Dualboot GNU/Linux and OpenBSD from GRUB2 like a BOSS! https://youtu.be/H2bSXURnqHQ [fn:5] WebGL 水族馆 http://webglsamples.org/aquarium/aquarium.html [fn:6] 我: 2023 了, 试试 emacs 29 https://dongdigua.github.io/emacs29_2023 [fn:7] OpenBSD on a Laptop https://www.c0ffee.net/blog/openbsd-on-a-laptop and [[https://youtu.be/cLk5PYYdi3A][a good video based on this article]] [fn:8] 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 [fn:9] Switching to -current, installing firmware and wireless configuration https://youtu.be/i7WY_TVJfdA [fn:10] https://dongdigua.github.com/mailinglist#intel * Related Links :PROPERTIES: :CUSTOM_ID: related :END: - [[https://paedubucher.ch/articles/2020-09-05-openbsd-on-the-desktop-part-i.html][OpenBSD on the Desktop (Part I)]] - [[https://nanxiao.me/openbsd-one-year-experience/][使用OpenBSD一年的总结]] - [[https://webzine.puffy.cafe][OpenBSD Webzine by solene%]] - [[https://youtu.be/1GYq8eD90nE][OpenBSD and DWM: True Minimalism]] - [[https://kevinthomas.dev/posts/openbsd-thinkpadt480.html][Installing and setting up OpenBSD on Thinkpad T480 + improving slowness]] - [[https://youtu.be/zXaHM7114Uk][Puffy vs. Tux! The difference between OpenBSD and GNU/Linux]] - [[https://videos.lukesmith.xyz/w/ion4TuavEAqKRWeavWTCBe][LukeSmith video: Email on the terminal with mutt]] - [[https://youtu.be/o8aiSJ2nXcc][OpenBSD Guy: ffmpeg screencast]] - [[https://videos.pair2jeux.tube/a/solene][solene's video]]