前言
去年 DIYgod 在 我得了软件更新强迫症 介绍了他的更新清单,看到标题的第一眼就深有同感,最近终于完成基础设施的迁移,机缘巧合之下又看到这篇文章。于是照猫画虎,列一列我的更新清单。
🚨 Warning
本文带有极其强烈的主观色彩,阅读过程中可能会引起阅读障碍、心理不适、焦虑、PTSD 等并发症,请在确保身心健康的前提下阅读!
定义
首先要明确的一点是,我的「更新强迫症」已经远远超出 DIYgod 记录的内容,所以更新的内容并不止于「软件」,而是一个究级宽的筐,真的什么都能往里装。考虑到文章长度和更新频率 1,只列举最短更新周期为三个月以内的部分,并且使用简单粗暴的 bullet list,配合脚注来介绍,所以本文的脚注会非常的长,提前预警,在 W3M 这种 TBB 的体验不会很好。
其次,虽然 我的各种 WSL 项目都归档得差不多了(单纯因为不再使用,没兴趣维护,Makefile 大概还是能跑的),但 GitHub Action 里都是各种定时运行,cron 这东西我肯定是知道的。虽然我一般就直接用 cronie,而没有研究 Void 提供的其他选择(dcron/fcron)。但 cron 毕竟只是定个时,如果还要在脚本里写各种判断条件,考虑各种 edge case,很多低频操作不如直接上手。手动五分钟,搓脚本 + 调试半小时,如果是月度操作,要半年才能「回本」,而半年后的条件判断可能又千变万化= =况且随着经验积累,我总是知道某些情况的最优解 2,就像我在 LFS 编译记录#彩蛋 🎉 中提到的,It’s all in my head™️!
游戏
截止 2024-08-04,博客文章最多的标签🏷还属 #dev ,但由于开发这个概念非常广泛,还有我异于常人的涉猎范围(如果你有过目不忘的超能力,是的,我在 2023 年度总结 - 生活篇#爱好 中提到的笔记还没写完,提纲还是只列了八十多个),这部分放到后文再介绍。
- HLTB3 & VNDB4,基本是周更,打得少会更得慢一点
- 模拟器
- 更新频率:一般月更,或者随用随更
- 更新方式 5
- void-packages,Void 的模拟器软件包更新都很慢,一般 RSS 收到提醒,手动更新编译测试通过就自己交 PR 了,还有一部分有待从 Flatpak 迁移
- 内置更新
- 更新脚本,在 我的 Windows 软件之道#方法论 有所提及
- RSS 提醒,编译、脚本、内置更新都有可能
- 更新内容:兼容性数据库、模拟器自身、材质包(着色器 & 遮罩)、(RetroArch/MAME 这种全能选手而言)内核、游戏封面、手柄配置等等
- 查看 fork 开发状态: 由于模拟器的特性,随随便便就要兼容成百上千个游戏,很多厂商的法务部也不会闲着,弃坑是很常见的事,除了更新还需要关注开发状态,归档/删库后短期内各种五花八门的 fork,要等时间证明一切
- 主机/掌机/MiSTer 等硬件模拟,bootloader、固件(官方固件和 CFW)和软件都需要更新,不定期,Homebrew category 下全是关联文章
- 手柄,固件更新 6
- 金手指,NDS/3DS/NS/PKHeX7/PSP
- ROM8,这个展开能讲几万字,为了保护手指还是点到为止,只简单提几点
- 通过 retool(已停更)实现的 1G1R,由于理念不和,这一点我没有完全遵守,很多时候是 1G3R(美日港)+ 汉化
- No-Intro/Redump/模拟游戏中文数据站
- 同步原理见 RomVault, Retool, fixDat & Digital Preservation,不过 rsync 服务器在文章发出不久就关闭了,简化版流程见 Rom Update TLDR
- 音游(曲包 9、皮肤、模拟器)
系统
是的,在介绍单纯的开发环境更新之前,我还要先从系统讲起…… 鉴于现代系统的复杂性,每个系统甚至部分组件都有单独引申出的笔记,这里就不扩展了。
- GNU/Linux
- 软件包(VM、VPS 和各种跑 Linux 的设备 10)
- Flatpak,这里我没有采用 DIYgod 的做法,写在一个命令里,而是单独的 alias,提醒自己早日抛弃臃肿的 Flatpak11
- ActivityWatch12
- 就普通的 time tracker,追踪每天干了啥,便于记录在月度 OKR 中
- 更新内容:匹配规则、每月用脚本删除记录的敏感数据
- 字体,由 XBPS 和更新脚本管理,之后同步到各设备
- Windows
- Windows Update,一般是 补丁星期二,偶尔有 OOB 更新会视情况而定,预先看更新日志和蓝点网的文章,由于微软三天两头推送有问题的更新,所以有时会等 7-14 天
- 更新完成后跑一下 Storage Sense 和手搓的清理脚本,完全用不上 BleachBit、Glary Utilities 这些东西
- Chocolatey & Microsoft Store,更新完成后跑 CPLB 备份软件包和安装参数到指定位置
- 系统驱动更新、备份 & inf 提取(用于后续封装母盘)
- 单一软件的更新,不定期,一般随用随更
MSEdge,注意 Edge 有各种残留安装包不再使用,Edge-Webview 会一直保留旧版本,通过上文的清理脚本删除- NeeView、OTP、SumatraPDF、ViVeTool
- Android13
- 有个单独的应用列表,用于刷机/换设备后快速重装
- 更新方式及优先级:Obtainium14、F-Droid (Neo Store)15、Google Play 和极个别在
玩社区玩疯开始摧残开发者的酷安应用 - OTA 更新和无法卸载、无法 ADB 禁用、每次更新后都会自动重置的系统应用 16
- Termux
- 整体与 Linux 部分相同
- 更新内容:软件包和开发环境、proot-distro 的软件包和开发环境= =、 dotfiles,完成后跑一下文件整理脚本、备份脚本和清理脚本
- BCompare
- 部分文件由于 Termux 权限问题清理不彻底(比如国产 IM 各种见不了人的日志),这时会调用额外的 ADB 清理脚本 17
- PE,主要三块内容
- Ventoy:主题、插件和程序自身,定期 snapshot,#pe 或多或少都有提及
- 真正的 PE 环境:WePE + Edgeless,还有 NTLite + UUPdump 封装的镜像
- LiveCD:各种安装光盘,定期更新
开发
终于说到开发了,这部分涉及网络设施中比较私人的内容,所以大部分都是点到为止。 部分内容我原文本来就写的英文,懒得改就直接引用了。
- 网络环境,分流规则、IP 库、客户端
- Packages
- Python:
pip常用库由 XBPS 管理 18,命令行工具由 uv 管理,uv tool upgrade --all
- R: Radian,
update.packages(ask = FALSE, Ncpus = 3L)
- Node: 版本管理(以前用 nvm,现在用 fnm),需要的就一个 Vercel cli19
- github-cli,和各种插件,一键更新
- Firefox 魔改/CEF/Electron 大部头 20
- Obsidian (App/Installer, Plugin, Theme)
- VSCodium
- Zotero extensions & translators
- ImHex,各种规则
- espanso
- 其他一些很少用到的
- LaTeX: TinyTex,从 R 安装,不用管
- Golang: 二进制!
- Rust
cargo build --release
太慢了,二不了一点,一般不管,自生自灭- cargo-binstall+ cargo-update:
cargo-install-update install-update -a
- 定期清理 cargo/sccache 缓存
- Perl, Haskell, Ruby, Julia: 完全不管
- PHP, Java: 参考 Node,能跑多远跑多远
- Python:
- Git 和自建的各种服务
- GitHub,定期检查更新的项目,备份至自建的两个 forgejo21,防 DMCA
- 可以登录后直接看 profile 页的每月记录,或者照着 repositories 按时间倒序对照 22
- 先搞定 REDACTED,再看新 repo,最后按 commits 降序排查,很快的.avif
- Pro Tip: 鼠标在相对时间戳停留,会显示具体的时间
- CI/CD 更新未能按时触发自动化的项目(依赖、构建和 CI/CD 自身的依赖更新)
- 自建服务更新
- void-packages
- 本地仓库
- 推送残留更新
git pull --rebase
- 完成后批量创建 git bundle,作为冷备份 23
- GitHub,定期检查更新的项目,备份至自建的两个 forgejo21,防 DMCA
- Hugo 博客
- 各种任务都通过 Makefile 统一为简单命令,比如测试运行是
make run
,部署是make deploy
,备份是make backup
,从而忽略实际调用的复杂命令/脚本 - Hugo template: Security policy, RSS, etc.
- theme: risotto
- 各种任务都通过 Makefile 统一为简单命令,比如测试运行是
设备
这里的「设备」指的是 Gadget,但我也想不到更好的二字词语了。 24 这部分其实完全可以整合到上面几项中,只是我感觉比较重要,单独拎了出来。
- Nintendo Switch Homebrew25
- OS
- Firmware + CFW + Bootloader
- Switchroot
- Lakka
- Homebrew NROs
- Mods
- Amiibo26
- OS
- 树莓派,基本是全自动更新,定期用 Clonezilla 备份 SD 卡,同时有多份 SD 卡作冗余
- 路由器,Padavan/OpenWrt
- 偶尔更新:CPE、非主力机、USB 冷备份
- 大部分的 gadget 生命周期不会很长,除了定期更新固件和软件,经过多个型号的迭代,少不了换新的型号(即硬件)
归档
不再更新的部分,都写了这么多了不缺这点。 话虽如此,本来内容也不多,而且都是 cross reference,没法加注释。
- WSL rootfs & kernel,记录于单独的 Sync 笔记
- VM,记录于 Sync 笔记和 PE 笔记
结语
奇怪的标题和简介源自 ChuableSoft(チュアブルソフト)的两部 gal,喜欢我的话就要说出来(私が好きなら「好き」って言って!)和 残念な俺達の青春事情。。虽然由于程序导致的 OP 跳出 bug 没能打完后者,前者的汉化版和原版都做得挺好,Majiro 引擎的效果还挺好的,debug 模式更是好用, 真昼 更是社团的人设天花板。
创立博客之初,本想每篇文章都引用 gal 标题,现在回看做得惨不忍睹,多年前写的 Blog Copywriting Guideline 和蓝点网每行等宽的文风也没能坚持,后面考虑多搞搞这些 排版风格 。
这里说的是我定期执行「更新」这个操作的频率,指的并不是文章更新频率 ↩︎
不过有些时候为了折腾,深入了解原理,会故意选择 learn it the hard way ↩︎
HLTB 在博客的侧边栏也有备注,用于记录大众眼中的「游戏」,对于很多小众和非常规平台(比如 Flash、DOS、桌游、Nikoli 发行的各种杂志和一堆并未发行在国外能接触到的平台的国产游戏),还有一大票玩了就忘的 itch 游戏,我一般只在 Obsidian 做本地记录,懒得在 HLTB 再记一遍 ↩︎
VNDB 专门用于记录美少女游戏和视觉小说,不过也有不少广义的 gal 因为不符合官方定义而拒绝收录或删除,见 d6#2 和 d2#1。不用国内的 BGM/2DF 等单纯是习惯问题,而且不能导出数据,到底是在别人的地盘上,更何况上网冲浪这么多年,谁还不知道这些网站的运营和审核情况= =CnGal 则是受限于定位(CN + Gal),数据量有点小。非营利网站的经营状况大多不甚理想,不太能保证长期稳定性(我说的「长期」是 5-10 年为尺度的,比如 VNDB 07 年启动,已运营 17 年) ↩︎
虽然模拟器本身毫无疑问是合法的,但固件和 ROM 都要求自己 dump,这里就不点出具体模拟器名称了,只列举更新方式 ↩︎
充电我已经放弃了,每周拖几十根线给每个手柄都充满电纯粹是无效劳动 ↩︎
只用作离线的宝可梦银行,单纯是备份存档和跨世代传输宝可梦,不联网不魔法,非常合规的用途 ↩︎
严格来说这个算「同步」,而不是「更新」,但同步有单独的操作指南,为了便于管理记录在此 ↩︎
注意版权,这里指狭义的,受官方支持的模拟器和订阅制/买断制曲包,「更新」一词仅为方便表达 ↩︎
虽然这里只一笔带过,但实际上设备很多,有的部署了自动更新不用怎么管,但有的位于纯离线环境,只能自建服务器中转或者手动更新 ↩︎
Flatpak 自身实现(BubbleWrap 和 OSTree)还可以,但 Runtime 体积过于逆天,而且默认的沙盒限制对很多应用而言都碍手碍脚的,需要依靠第三方工具才可堪一用 ↩︎
Windows 也可以用,但我的 windows-vhdboot 实现追求精简,一般就直接默认的事件管理器或 Android 上用 Simple Time Tracker ↩︎
后面大概会写篇 Tao of Android,和 Zen of Windows 一样,介绍我的 Android 管理方法论,这里先按下不表 ↩︎
主要是下面三种:1. 由于使用 non-free lib 无法上架 F-Droid,开发者也没自建仓库的;2. 纯粹不发版,拿 nightly 当稳定版的;3. 过于重要而等不及 F-Droid 编译的 ↩︎
主力军,实际上我通过 Google Play 安装的 app 仅为个位数,还算上了付费游戏= = ↩︎
仅为演示,实际上解 BL 跑 LineageOS 就完事了 ↩︎
顺带一提,ADB Shell 权限还是挺高的,所以开发者模式真不能乱开,不过这也不是某些国产 ROM 强制要求登录实名账号的理由。不过内核源码都不开放就想着赚钱的商业公司,本来也指望不上 ↩︎
是的,可能是 Node.js 之外最混乱的打包体系我直接系统 site-packages 一把梭,避免版本管理地狱 ↩︎
Python 的混乱是对于库开发者和发行版打包者而言的,每家一个 build system,但作为用户 pip+venv/uv 打遍天下无敌手,实在不行还有 anaconda/miniconda/micromamba 等懒人包。Node 才是真的版本管理地狱,
node_modules
删都要删十分钟,这星期能通过测试的程序半个月之后可能就过不了,现在流行的框架半年后可能就归档,能躲多远躲多远。别和我说 Yarn/PNPM/Deno/Bun,生态问题,都是治标不治本。引用 21 年 炒饭关于 NTR 的陈年介绍,你没办法去反抗一个纯粹的结构性矛盾。被剥削被异化的(角色),是不可能靠框架内的力量反抗的 ↩︎浏览器插件、规则和脚本的自动更新都很完善,这里直接忽略了,实际上我只在定期备份时手动更新 ↩︎
这里指部分由于权限管理原因不能直接镜像的仓库,实际上大部分仓库我在 origin remote 设置两个 pushurls,直接就能推送到 GitHub 和 forgejo,而且 forgejo 可以设置定期同步,手动管理的部分很少 ↩︎
对于备份我更是比更新还要强迫症,但考虑到文章长度和提及「备份」一词的次数,足以管中窥豹,不再赘述 ↩︎
ToC 排版强迫症= = ↩︎
别看下面就几行,但 Switchroot 就是 LineageOS 官方针对 Switch 的定制版,Lakka 就是打包了 RetroArch 的发行版,这就等于除了 Switch 官方的 Horizon OS 和第三方的 Atmosphère,还有份多余的 Android/RetroArch 需要管理 ↩︎
这里指买实体 Amiibo,不涉及 NFC 模拟,价格虽然比不上国产山寨手办,但比正版手办肯定是便宜得多(当然做工也相对差得多),海景房更不用说 ↩︎