Files
Deshab-OS/docs/上下文/DeshabOS安装Pacman包管理器.md
2026-07-31 13:53:49 +08:00

4.5 KiB
Raw Permalink Blame History

DeshabOS安装Pacman包管理器

核心矛盾

pacman 安装的软件(如 /usr/bin/firefox)是 Linux x86-64 动态链接 ELF,依赖 glibc + Linux syscall ABI。Deshab 是 SAS-R0 单地址空间内核,没有 Linux syscall 层、没有动态链接器,这些二进制在 Deshab 原生侧跑不起来。

pacman 依赖 vs Deshab 现状

pacman 依赖 Deshab 现状
glibc + POSIX syscall ❌ 无 POSIX 层,SAS-R0
libalpm(动态链接 .so) ❌ 无动态链接器
libcurl(HTTP/HTTPS) ❌ 网络栈未完成
gpgme(签名校验) ❌ 无加密库
zlib/zstd/xz/bzip2 ❌ 无压缩库
可写 Unix 文件层级 ❌ FAT32 多数只读
fork/exec 子进程 ❌ shell 内建命令,无 exec/argv

正确理解:"WSL 互操作模式"

  • Linux guest 内跑 Arch + pacman → 软件装在 Linux 的 /usr/bin
  • Deshab shell/desktop 通过 IPC 委托 Linux 执行命令 → 结果显示回 Deshab
  • 不是把 Arch ELF 搬到 SYSTEM/bin

三种方案对比

方案 软件运行位置 可行性
A: pacman 在 Linux guest 内自治 Linux guest ✅ 最简单
B: 包文件物理写入 SYSTEM/bin 想在 Deshab 原生跑 → ❌ 不可行
C: SYSTEM/bin 放 stub,IPC 委托 Linux 执行 Linux guest ✅ WSL 互操作

实现阶段(按顺序,缺一不可)

第一阶段:Linux guest 真正跑起来

编号 需实现 现状 证据文件
1.1 virtio-block 后端 ❌ CODE/linux/configs/utsm_x86_64_defconfig:120-145
1.2 virtio-net 后端 ❌ 同上
1.3 initramfs/rootfs ❌ 无用户态 CODE/UTSM/vmm/linux_loader.c:519-521
1.4 EPT 动态页映射 ❌ vmexit handler 只有 stub CODE/UTSM/vmm/vmexit.c:46-58
1.5 构建并测试 Linux guest ⚠️ CODE/linux/README.md

完成标准: QEMU → UTSM → Linux guest shell → uname -a

第二阶段:Linux guest 内装 Arch + pacman

编号 需实现 说明
2.1 Arch rootfs/bootstrap 解压到 virtio-block 镜像
2.2 pacman 可用 配置 mirrorlist
2.3 网络可用(virtio-net) 前提: 1.2 完成
2.4 AUR helper(可选) yay/paru

完成标准: pacman -S neofetch && neofetch

第三阶段:UTSM↔Linux 文件传输 IPC

编号 需实现 现状 证据
3.1 hypercall op: FILE_TRANSFER ❌ 仅有9个op hypercall.c:202-234
3.2 payload_pool 分块传输 ⚠️ 1MB pool 未用 ipc_proto.h:30-36
3.3 Linux 侧 utsm_hcall 扩展 ❌ 无文件发送接口 utsm_hcall.c:45-84
3.4 UTSM 侧 f32_write_root_file 接入 ✅ 已有写入 dsk/main.c:150-175

完成标准: utsm-send /usr/bin/firefox /bin/firefox → 写入 Deshab FAT32

第四阶段:Deshab shell 命令委托执行

编号 需实现 现状 证据
4.1 hypercall op: EXEC_FORWARD ❌ hypercall.c
4.2 Linux 进程执行 + stdout/stderr 回传 ❌ 需新增
4.3 shell path_search_and_run 扩展 ⚠️ 只能加载原生 PIE shell/main.c:1416-1460
4.4 shell IPC 调用层 ❌ 需新增

完成标准: shell 输入 firefox → Linux 执行 → 输出回显

第五阶段:desktop 集成(可选)

  • 5.1: desktop 动态注册"Linux 命令"为应用图标(扩展 app_descriptor.linux_cmd)
  • 5.2: 点击图标 → EXEC_FORWARD hypercall

最小可用路径

  1. 第一阶段全部完成(Linux guest 启动到 shell)
  2. 第二阶段 2.1-2.3 完成(Arch + pacman + 网络)
  3. 第三阶段 3.1-3.4 完成(文件从 Linux 写入 Deshab FAT32)
  4. 第四阶段 4.1-4.4 完成(shell 命令委托执行)

当前最大瓶颈: 第一阶段的 virtio 后端 + initramfs


系统现状检查

Linux guest 方向

检查项 状态
Linux 内核源码 ❌ 未克隆
linux-bzImage ❌ 未构建
initramfs/rootfs ❌ 不存在
limine.conf 配置 ⚠️ 已注释(正确)

已知 Bug

编号 严重度 问题
BUG-001 P2 Files 窗口关闭按钮无法关闭
BUG-002 P2 开发者模式 shell 命令回车无反应
BUG-003 P2 桌面 shell 命令文字跑到下一行
BUG-004 P2 Files 显示的不是 SYSTEM/user 目录
BUG-005 P2 Files 没有文件夹图标
BUG-006 P2 Files 缺少 ".." 返回上级
BUG-007 P3 桌面不需要重复显示终端和 CMD 图标
BUG-008 P3 打字机效果需要再快3倍