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

Abierto Apto para principiantes
#1,403 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
82/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
linux, rust

Línea de trabajo

Empieza por openless-all/app/scripts/package-linux-egui.sh, en la sección %files de openless.spec, y luego revisa openless-all/app/scripts/verify-linux-egui-packages.sh. Limita el manifiesto RPM a los archivos y directorios que pertenecen a OpenLess y añade una comprobación que excluya los directorios compartidos del sistema. El objetivo se alcanza cuando el manifiesto RPM generado omite esos directorios y el paquete se instala en Fedora 44.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

现象
  • 触发条件:在 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 实测验证可正常安装。
Lenguaje dominante
Rust
Estrellas
3.7k
Forks
349
Merge medio
1 d 13 h
PR fusionados (30 d)
98

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de Open-Less/openless

Todos los issues de Open-Less/openless

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.