Kazeta镜像构建指南:Docker+冻结软件源打造可复现的Arch游戏OS ISO
【免费下载链接】kazetaRetro 90s style gaming operating system项目地址: https://gitcode.com/gh_mirrors/ka/kazeta
Kazeta 是一款复古 90s 风格的游戏操作系统(Gaming OS),基于 Arch Linux 构建,开箱即玩老游戏。本文带你用 Docker 与冻结的软件归档源,亲手复现构建 Kazeta 的 Arch 游戏 OS ISO 镜像,保证每次构建结果完全一致。
为什么需要“冻结软件源”?
Arch Linux 是滚动发行版,软件包每天都在更新。如果直接拉取最新源打包,今天和明天构建出的 ISO 内容完全不同,出了问题还难以排查。
Kazeta 的解法很巧妙:锁定到昨天的归档快照。构建脚本会读取归档日期,把 pacman 的镜像地址改写为官方归档站:
Server=https://archive.archlinux.org/repos/<ARCHIVE_DATE>/$repo/os/$arch这样无论何时构建,拿到的都是同一个时间点的软件包版本——这就是“可复现构建(Reproducible Build)”的核心。
归档日期由manifest文件中的ARCHIVE_DATE(默认取“昨天”)决定,相关逻辑位于Dockerfile第 45-49 行。
上图为 Kazeta 复古 BIOS 启动界面的背景纹理,最终 ISO 开机即见这套 640×360 的低分辨率像素 UI
一键 Docker 构建步骤
🐳 整个构建环境本身就是一个 Docker 镜像,步骤如下:
第 1 步:获取源码
git clone https://gitcode.com/gh_mirrors/ka/kazeta cd kazeta第 2 步:构建构建环境镜像
docker build -t kazeta-builder .这一步会基于archlinux:base-devel完成以下工作(详见Dockerfile):
- 安装
arch-install-scripts、pyalpm、wget等打包必备工具 - 从 AUR 编译安装
pikaur(AUR 包管理器) - 用一个“假的 systemd-run 脚本”绕过 pikaur 对 systemd 的依赖(容器里没有 systemd)
- 关闭 check 依赖与 debug 包生成,加快构建速度
- 改写 mirrorlist 指向归档站,冻结软件源
第 3 步:运行构建并导出 ISO
构建镜像内定义了OUTPUT_DIR=/output环境变量,把该目录挂载到宿主机即可拿到成品:
docker run -v "$PWD/output":/output -it kazeta-builder容器内按manifest声明的包清单执行装机流程,最终 ISO 输出到宿主机output/目录。
核心文件与目录速览
| 路径 | 作用 |
|---|---|
Dockerfile | 构建环境定义:装工具、冻结软件源、配置 pikaur |
manifest | 系统“配方”:包清单、开机服务、装机后钩子 |
rootfs/ | 预置的系统配置文件覆盖层 |
bios/ | Rust 编写的复古 BIOS(Rust 依赖见bios/Cargo.toml,UI 逻辑在bios/src/main.rs) |
aur-pkgs/ | 本地 AUR 包存放目录 |
📦manifest是整份“配方”的灵魂,它声明了:
- 系统基础包:
greetd、gamescope、nvidia-open、vulkan-intel/radeon、pipewire全家桶等游戏栈组件 - AUR 包:
downgrade、frzr、udev-media-automount(U 盘游戏卡带自动挂载) - 开机服务:
greetd(登录界面)、inputplumber(手柄映射) - postinstallhook 钩子:自动挂载存储、禁用 SPDIF 输出、把所有手柄强制模拟成 Xbox 360 控制器、持久化游戏存档到
/var/kazeta
🎮 装机体验同样复古:登录由rootfs/etc/greetd/config.toml配置,启动kazeta-session;BIOS 支持手柄操作、8-bit 音效(bios/下的move.wav、select.wav等),并能将游戏存档打包成“卡带”存到 U 盘。
常见构建问题与解决方法
1. 容器内pacman报空间检查错误
rootfs/etc/pacman.conf中保留了CheckSpace项,但Dockerfile会先将其注释掉(chroot 内无法检查宿主机磁盘空间),不要手动还原这一行。
2. 构建时拉到了“新”的软件包?
检查manifest的ARCHIVE_DATE——它默认为构建当天减一天,属于正常行为;若需完全锁定,可将其硬编码为固定日期(如2026-08-01)再构建。
3. AUR 包安装失败
构建环境已预装pikaur,且配置了 PGP key 自动获取(/etc/gnupg/gpg.conf)。若仍失败,多半是 AUR 包依赖变动,可参考Dockerfile中PACKAGE_OVERRIDES机制,把预先编译好的.pkg.tar.zst覆盖安装进来。
小结
- 🧊冻结归档源(
archive.archlinux.org)+ 固定ARCHIVE_DATE,是 Kazeta 镜像可复现的关键 - 🐳Dockerfile 即构建环境:一条
docker build即可还原完整打包沙箱 - 📄manifest 即系统配方:改包、改服务、改钩子都从它入手
- 🕹️ 构建产物是一张开箱即玩的 Arch 游戏 OS ISO,配合
bios/的复古 BIOS 与卡带存档系统,复刻 90 年代掌机体验
动手构建一张属于自己的 Kazeta ISO,把复古游戏体验装进任意硬件吧!
【免费下载链接】kazetaRetro 90s style gaming operating system项目地址: https://gitcode.com/gh_mirrors/ka/kazeta
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考