Feat:添加 RHEL 兼容 RPM Package#6352
Conversation
|
/gemini review |
There was a problem hiding this comment.
Code Review
This pull request introduces RPM package generation support and integrates package manager detection to prevent package-managed installations from performing self-updates. It refactors Linux packaging logic by extracting shared paths and launcher script generation into a new LinuxPackageFiles helper class. The review feedback suggests adding explicit attributes to the /usr/share/java/hmcl directory in the RPM spec to prevent permission issues in strict umask environments, and expanding the boolean parser in PackageManagerIntegration to recognize "no" and "off" as disabled values.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
| fi | ||
|
|
||
| %%files | ||
| %%dir /usr/share/java/hmcl |
There was a problem hiding this comment.
目录 /usr/share/java/hmcl 在打包时使用了 %%dir /usr/share/java/hmcl,但没有指定显式属性(attributes)。如果构建环境具有严格的 umask(例如在某些加固的 CI 环境中为 0077),该目录在暂存(staging)阶段创建时会带有严格的权限(如 0700),而 rpmbuild 会直接将这些权限打包进去。这将导致非 root 用户在安装后无法访问该目录下的启动器文件。
请为该目录条目添加显式的属性设置,以确保其始终以 0755 权限安装。
| %%dir /usr/share/java/hmcl | |
| %%attr(0755,root,root) %%dir /usr/share/java/hmcl |
| private static boolean isEnabled(@Nullable String value) { | ||
| return value != null | ||
| && !value.isBlank() | ||
| && !"0".equals(value) | ||
| && !"false".equalsIgnoreCase(value); | ||
| } |
There was a problem hiding this comment.
在许多 Linux 环境中,环境变量中的布尔标志通常会被设置为 no 或 off 来禁用它们。目前,isEnabled 仅检查了 0 和 false。如果用户或脚本显式设置了 HMCL_PACKAGE_MANAGED=no 或 HMCL_PACKAGE_MANAGED=off,它将被错误地解析为已启用(enabled)。
建议在 isEnabled 中增加对 no 和 off(不区分大小写)的检查,以使环境变量的解析更加健壮。
private static boolean isEnabled(@Nullable String value) {
return value != null
&& !value.isBlank()
&& !"0".equals(value)
&& !"false".equalsIgnoreCase(value)
&& !"no".equalsIgnoreCase(value)
&& !"off".equalsIgnoreCase(value);
}
摘要
关联 Issue:#5937
新的
:HMCL:makeRpm任务使用rpmbuild构建 RPM 包,并尽量沿用现有 Debian 包的安装布局,包括按发布渠道区分的启动命令、desktop entry、图标安装,以及通过 alternatives 注册通用的hmcl命令。主要改动
CreateRpmGradle task。HMCL_PACKAGE_MANAGED=rpm,避免内置更新流程和系统包管理器安装的版本冲突。说明
build流程。验证
本地已验证:
./gradlew :HMCL:compileJava --no-daemon --stacktrace./gradlew :HMCL:checkTranslations --no-daemon --stacktrace./gradlew :HMCL:makeDeb --no-daemon --stacktrace./gradlew :HMCL:checkstyleMain --no-daemon --stacktraceDocker 中已验证:
rockylinux:9容器内执行./gradlew :HMCL:makeRpm --no-daemon --stacktrace,构建成功。rockylinux:9容器内使用dnf安装并卸载生成的 RPM,安装和卸载均成功。hmcl-nightly-3.16.snapshot-1.noarch。/usr/bin/hmcl-nightly可执行。hmclalternatives 指向/usr/bin/hmcl-nightly。HMCL_PACKAGE_MANAGED="rpm"。