安装 ReliefOS

安装前

备份目标磁盘。安装器的重新分区、格式化会破坏所选磁盘的数据; 先用磁盘型号、容量和现有分区核对身份,不能只凭设备编号判断。 默认介质包括 reliefos-installer.iso、reliefos-live.iso 和 reliefos.vmdk, 同一介质支持 Legacy BIOS 与 UEFI。ISO 使用双 El Torito 光盘入口, 不承诺是可直接写入 U 盘的 hybrid 镜像。

安装器运行时、Live 会话和安装后的系统是不同的根文件系统。 只有实际安装并移除 ISO 后启动成功,才能证明安装后的系统可用。

全新安装

在 GRUB 中选择图形安装或控制台安装;控制台会话条目为 Install ReliefOS (console session)。图形向导依次选择语言、安装模式、目标磁盘、 引导方式、分区和账户,最后确认安装。TTY 同样在分区之前选择引导方式。 Xorg 桌面默认安装,也可选择纯控制台系统。

图形向导在语言选择后显示 Apache License 2.0 英文原文,可滚动阅读全文。 该文本直接取自仓库的 LICENSE,中文界面也保留许可证原文。

新安装默认同时安装 BIOS、UEFI 引导器,可分别取消。两者都取消时不写入 可直接启动的 loader,必须另行配置引导。自动 GPT 布局根据所选引导方式生成:

  • 选择 BIOS 时创建 1 MiB 未格式化 BIOS Boot 分区;只选 UEFI 或都不选时省去该分区。 BIOS Boot 不能格式化、挂载或直接占用已有文件系统。

  • 所有方案都创建 128 MiB FAT32 ESP,保存内核、GRUB 配置及所选引导器的资源。 BIOS 引导同样从该 FAT32 分区读取启动资源,不能因为只选 BIOS 而删除它。

  • 剩余整 MiB 空间用作 ext4 根分区。

分区页显示当前磁盘分区,以及尚未写入的自动方案和预计根分区容量。 最终确认安装时才执行待应用的自动方案;分区工具中的 Automatic / auto 则在独立擦盘确认后立即创建 GPT,最终安装时再格式化 ESP 和根分区。 返回修改引导方式会重新计算待应用的方案和校验已有分区,不会自动再次擦盘。 已应用的两分区布局改选 BIOS 后,必须显式重新自动分区或手动补齐合格的 BIOS Boot 分区;手动布局必须提供所选引导方式所需的分区才能继续。

格式化前会检查所选载荷需要的空间和 inode。菜单通过 GPT PARTUUID 绑定 根分区;缺失、无效或重复身份应报错,不能以连接顺序替代身份。 完成后正常关机、移除安装介质,再从目标磁盘启动。

全新安装可选择创建根分区的 /swapfile,默认不选。建议值为内存大小向上 取整到 MiB 后限制在 512 MiB 至 2 GiB;可以手动填写其他有效的整数 MiB, 安装器不会自动缩小。所需文件空间和余量在重新分区或格式化之前一起检查。 该选项要求所选目标系统的已验证内核包启用 swap,且目标磁盘的真实 PCI 父 控制器为 AHCI;当前不支持用 NVMe、IDE 或其他存储作为这个 swap 后端。 安装器不会在 Live 或安装器会话中启用目标 swap。

安装器完整写入并格式化文件,设置 root 所有、权限 0600,再发布 fstab 和 OpenRC 配置。标准 swap 服务在 localmount 后运行;项目检查服务会核对 /proc/swaps 中实际出现的 /swapfile,以便发现配置存在但启用失败的 情况。重启后可检查 /proc/swaps 以及服务状态。磁盘 I/O 或清理本身失败时, 安装器会报告错误;单文件同步和替换不构成跨文件的断电原子事务。

未选择此项时不会自动启用 swap。手工配置须先准备完全分配、位于支持的 AHCI SATA 设备上的专用文件或未挂载分区,再使用 mkswap 初始化并通过 swapon 激活;mkswap 会覆盖所选目标。只有完成身份核对和必要备份后 才能执行。swapoff 需要先恢复仍被引用的页面,内存不足时可能失败并保留 活动区域;不能把失败当成已卸载,也不保证所有后续分配立即成功。

共享 ESP 与多系统

与已有系统共存时选择手动分区,为 ReliefOS 指定单独的根分区。 所选根分区会格式化;已有 FAT32 ESP 默认保留,不要求它达到自动方案的 128 MiB,但必须有足够剩余空间。只有显式勾选格式化 ESP 才会清除其中的 所有 EFI 文件。TTY 对应 format-esp yes / format-esp no。 自动分区仍是明确的整盘擦除方案,不是保留其他系统的并列安装。

新安装将物理 ESP 挂到 /efi,并把 /efi/reliefos/instances/<根分区 PARTUUID> bind 到 /boot。 每个实例有独立的 GRUB 配置、根分区绑定、A/B 内核状态和版本文件; 内核包更新检查实例所有权,拒绝把当前根的内核发布到另一个实例。 initramfs 在切换真实根之前按 fstab 完成两层挂载。

UEFI 文件位于 /EFI/ReliefOS/<根分区 PARTUUID>/grubx64.efi; 标准厂商入口 /EFI/ReliefOS/grubx64.efi 指向一个已有安装,其菜单可选择其他实例。 已有的其他系统 EFI 文件和未知的 /EFI/BOOT/BOOTX64.EFI 保持不变。 只有空的 fallback 路径,或内容摘要和所有权记录均匹配的 ReliefOS fallback, 才会被安装或更新。固件启动变量和 BootOrder 不由此文件复制过程修改; 若固件没有显示新入口,使用完成页显示的 EFI 文件路径添加启动项。

GRUB 在启动时枚举其他 ReliefOS 实例;UEFI 菜单识别常见的 Windows、 shim/GRUB 和 systemd-boot 文件,BIOS 菜单支持 Windows 分区引导及其他 系统的 GRUB 配置。其他系统的配置只在用户选择相应条目后执行。 BIOS 安装会替换所选整盘的主引导代码;只需 UEFI 共存时可取消 BIOS。 旧预制磁盘若没有 ESP 上的 core.img 副本,更新器会校验 MBR 中的 GRUB 核心位置及 BIOS Boot 分区内的块列表,识别实际嵌入的引导器。 新预制镜像同时保存该副本,保持与安装器生成的布局一致。

Live 只有一个普通启动项。安装介质保留图形和控制台两个安装入口; 磁盘保留普通启动及高级选项中的日志暂停、关闭内核日志颜色和有效旧内核回退。 不再展示失效的 debug/autospawn 参数、重复日志条目或同内核副本伪装的回退。 ISO 优先从固件交接的实际介质加载菜单,Live 与 Installer 的后备标记相互独立。

独立磁盘镜像身份

IMAGE_INSTANCE_ID``(也可在 menuconfig 中设置 ``DISK_INSTANCE_ID) 决定预制磁盘的 GPT 磁盘和分区身份,并同步生成 fstab、GRUB 根绑定和查找标记。 同一输入、同一实例标识保持可重现;需要同时连接的镜像应使用不同标识,例如:

make O=out/desktop-a defconfig
make O=out/desktop-a IMAGE_INSTANCE_ID=desktop-a image-vmdk
make O=out/desktop-b defconfig
make O=out/desktop-b IMAGE_INSTANCE_ID=desktop-b image-vmdk

逐字节复制一张已有磁盘仍会复制其 UUID,不能把这样的副本当作独立安装同时连接。 正式安装到不同根分区时使用各自 GPT 身份,不依赖预制镜像的实例标识。

更新已有系统

更新不自动重分区。旧两分区 UEFI 磁盘保持原有布局,缺少 BIOS Boot 空间时增加 BIOS 引导的请求应在写入前失败。先备份用户文件和引导分区, 检查已安装 APK 数据库、信任密钥及所选更新介质。正常关闭已安装系统后, 再从安装介质启动。 在安装器中选择更新和目标磁盘后,独立的后台进程只读检查已安装系统、桌面 类型、软件包数据库、安装介质和空间。确认页列出当前版本、介质版本、根分区、 ESP 和空间需求,并默认选中已检测到的 BIOS/UEFI 引导器。核对后点击更新。 同盘有多个安装时,可在目标磁盘页选择明确的根分区和 ESP;留空 ESP 时读取 所选根的 fstab,不能简单取磁盘上第一个 ESP。显式选择与该根的 fstab 不一致时 拒绝更新,避免把引导文件写到其他系统的分区。旧的 /boot 直接挂载 FAT32 布局继续兼容,更新不强制改变现有挂载布局。 旧布局中未能通过所有权验证的现有 EFI 可执行文件及相邻配置会保留, 不会因系统更新而覆盖。兼容命令 reliefos-grub-installer 现直接转交原生 CLI,需要明确的 --disk、--boot-directory 和根分区身份; 不再接受无法绑定安装实例的旧式单个 ESP 路径复制操作。 TTY 入口使用相同的后端,并在显示摘要和引导选项后通过 y/N 确认。

检查过程使用私有 APK 数据库和已安装系统的信任密钥,验证签名索引、完整 软件包归档以及离线依赖。确认后的执行会再次核对磁盘、分区 UUID、索引和 已安装包数据库及 world 选择;目标已经变化时需要重新检查。已被其他路径挂载的分区、 无法唯一识别的根分区或 ESP,以及早于已安装系统的介质会在写入前被拒绝。

根文件系统使用 APK 更新,保留外部包、world 选择和受保护配置;新默认配置 可能以 .apk-new 出现。根事务成功后才发布引导文件。 离线更新只从安装介质的签名仓库取得新软件包。world 中已有的 @testing、@alpine 等标签在本次事务的私有配置中注册到该仓库, 使已安装的外部软件包可以继续满足依赖,不要求原仓库在线或保留索引缓存。 原有仓库配置和标签选择保持不变;介质和已安装软件包无法满足的版本约束 仍会在预检查时拒绝,不会强制忽略依赖。 更新保留现有 fstab 和 swap 设置,不会自动添加或更改交换文件。 更新详情显示软件包和引导操作的实际输出,完整日志位于安装器运行环境的 /var/log/installer-update.log。失败页面提供重新检查入口。

目标系统的 /var/lib/reliefos/installer-update/state 持久记录软件包、根同步、 引导提交和完成阶段。同一介质的引导提交失败后,重新检查会核对已完成的根 事务,再继续引导提交;软件包阶段失败则重新预检并执行包事务。旧内核模块 保留与 A/B 内核发布继续使用共同的原生引导接口。更新期间由独立进程持有 安装器更新锁,释放目标挂载后才报告完成。APK 已记录为损坏的系统包会先通过 已验证的归档执行定向修复,再执行升级;已有的外部包错误保留并在日志中说明。

单文件原子替换不等于全部包、ESP 和 BIOS 写入的整体断电原子事务。 回退条目只使用通过完整性检查的匹配内核与 initramfs,不把当前内核的别名当作回退。

运行验证和未覆盖范围见 支持范围与已知限制。