[infra/devex] Linux RPM 打包 spec 使用 %files / 导致在 Fedora 上与 filesystem 包冲突无法安装

未關閉 適合新手
#1,403 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

維護者通常 1 天內回覆

還沒有人認領這個 Issue。

評估

難度
2/5
預估耗時
1-3 小時
新手友好度
82/100
Issue 類型
缺陷
描述清晰度
描述清楚
活躍度
活躍
技術堆疊
linux, rust

研究方向

先從 openless-all/app/scripts/package-linux-egui.sh 中 openless.spec 的 %files 區段附近開始查看,接著檢查 openless-all/app/scripts/verify-linux-egui-packages.sh。將 RPM 清單限制為 OpenLess 擁有的檔案和目錄,並新增一項檢查以排除共用系統目錄。完成標準是產生的 RPM 清單不包含這些目錄,且套件能在 Fedora 44 上安裝。

由索引模型根據 Issue 內容生成。

描述

现象
  • 触发条件:在 Fedora 44(x86_64)上使用 sudo dnf install 安装官方发布的 OpenLess-Linux-egui-2.0.2-Beta.4-150-x86_64.rpm(或 OpenLess_linux_x86_64.rpm)。
  • 当前表现:RPM 事务因 /usr/bin 与 /usr/lib64 目录所有权/权限与系统基础包 filesystem 冲突而直接失败,无法完成安装。
  • 证据:
    1. Fedora 44 dnf install 实测报错:
      Running transaction
      Transaction failed: Rpm transaction failed.
        - file /usr/bin from install of openless-2.0.2.beta.4.150-1.x86_64 conflicts with file from package filesystem-3.18-52.fc44.x86_64
        - file /usr/lib64 from install of openless-2.0.2.beta.4.150-1.x86_64 conflicts with file from package filesystem-3.18-52.fc44.x86_64
      
    2. RPM 包内目录清单检查(rpm -qlv):
      drwxr-xr-x    2 root     root                        0 Nov  6 20:48 /
      drwxr-xr-x    2 root     root                        0 Nov  6 20:48 /usr
      drwxr-xr-x    2 root     root                        0 Nov  6 20:48 /usr/bin
      drwxr-xr-x    2 root     root                        0 Nov  6 20:48 /usr/lib64
      drwxr-xr-x    2 root     root                        0 Nov  6 20:48 /usr/share
      
      在 Fedora 等 RPM 发行版中,/usr/bin 和 /usr/lib64 由 filesystem 包以 0555 权限拥有;openless RPM 将这些系统标准目录以 0755 纳入自身文件清单导致冲突。
    3. 源码定位:
      https://github.com/Open-Less/openless/blob/c002b56c38d81bcd5044ddb22597a4e78ff2a88d/openless-all/app/scripts/package-linux-egui.sh#L189-L190
      package-linux-egui.sh 生成的 openless.spec 中 %files 段直接写了 /,导致 rpmbuild 递归声明了对 /, /usr, /usr/bin, /usr/lib64, /usr/share 等所有父级系统目录的所有权。
影响
  • 所有使用 RPM 包管理器的目标发行版(Fedora / RHEL / openSUSE 等)用户均无法直接安装官方发布的 .rpm 安装包。
建议接受标准
  • 修改 openless-all/app/scripts/package-linux-egui.sh 中 openless.spec 的 %files 清单,仅声明归属 openless 自身的文件与专属子目录(如 /usr/bin/openless、/usr/lib64/fcitx5/libopenless.so、/usr/share/applications/openless.desktop、/usr/share/fcitx5/addon/openless.conf、/usr/share/icons/hicolor/*/apps/openless.png、/usr/share/metainfo/top.openless.OpenLess.metainfo.xml、%dir /usr/share/doc/openless、%dir /usr/share/openless 等),不再声明 /, /usr, /usr/bin, /usr/lib64, /usr/share 等系统级共享目录。
  • 在 openless-all/app/scripts/verify-linux-egui-packages.sh 中增加对 rpm -qlp 输出的断言,确保生成的 .rpm 清单不包含 /、/usr、/usr/bin、/usr/lib64、/usr/share 等系统根目录条目。
TODO / 不确定项
  • 无。在本地使用移除了系统目录声明的 %files 重新执行 rpmbuild 后,生成的 .rpm 已在 Fedora 44 上通过 sudo dnf install 实测验证可正常安装。
主要語言
Rust
星號
3.7k
分支
349
平均合併
1 天 13 小時
30 天內合併 PR
98

環境準備

這個專案沒有提供開發容器、Dockerfile 或貢獻指南,環境需要你自己搭建:先看它的 README,通用步驟見我們的新手貢獻指南。

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

Open-Less/openless 的其他 Issue

查看 Open-Less/openless 的全部 Issue

相似的 Issue

更多 Rust Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。