两种 ChromeOS 翻版:一个有驱动、一个没有
来源:dev.to — 2026-09-03
📋 概述
作者在 github.com/xbill9/chromeos-boot 里放了两个都叫 ChromeOS 翻版却几乎毫不相同的脚本。Crostini 的 Linux 容器跑在 Google 签名打包的 Termina 客户内核上,无法加载 NVIDIA 驱动(无头文件、无持久模块路径、校验启动不认非签名内核,而且 virtio-gpu 根本不暴露真实 PCI 显卡),于是作者干脆把 Debian 直接装到裸机上用 `apt install nvidia-driver`,代价是失去了一整套免费附赠的 ChromeOS 观感——这就是 `flex` 要补回来的东西。而 `stage` 解决的是另一类问题:给一台还没有凭据的机器装上读取私有存储桶所需的 gcloud。
🔑 核心要点
- Crostini 无法上 NVIDIA 是内核问题先于权限问题:Termina 的客户内核无编译头文件、无持久模块落点、校验启动拒绝非签名 out-of-tree 模块,显卡又走 virtio-gpu 而非真实 PCI 设备
- `stage` 解决的是凭据问题而非硬件问题:鸡生蛋(读私有 bucket 需要 gcloud、空容器没有 gcloud)里唯一必须无凭据即可拉取的一块,用 `bash <(curl …)` 而非 `curl|bash` 是为了保住 stdin 给 gcloud auth login 交互
- `flex` 解决的是让一台彻底放弃 ChromeOS 的桌面看起来像 ChromeOS:十个可独立运行、幂等、可列出的阶段(shelf、webapps、appgrid、keys、helpers、wallpaper…)几乎全部只动 $HOME,无需 root
- `flex` 用 `position`/Mutter 的 DisplayConfig 泛化到具体机器,而 `stage` 完全不关心下面是什么硬件——两种脚本同一主题、两种问题、零共享逻辑
- boot-splash.sh 只落盘不执行:它动 GRUB 引导链、需 root,作者选择先写下来留待人工审读,是唯一敢碰引导链的片段
- 两套脚本共享同一套好习惯:命名分阶段可单独跑、重跑即修复而非要避免、`-l` 列出阶段、用法写在文件头用 `-h` 读回、缺前置依赖只告警跳过错不中断
💡 金句
一个是你在 ChromeOS 里跑它的原因,另一个是你被内核逼得离开 ChromeOS 之后才需要它。
👍 0
👎 0
← 返回 dev.to 首页