问题描述 | Bug Description
问题
在最近发布的 Fedora 43 workstation 上安装 mc 1.20.1 + forge 任意版本都会失败,错误信息为哈希不正确:

猜测原因
该发行版预装 zlib-ng 提供 deflate 压缩算法实现,而不是 zlib 官方库。该库以性能著称,但是输出的压缩数据与官方库不同,而 hmcl 正是通过对比 forge installer 内清单提供的哈希和安装完成后输出 jar 的哈希来校验安装结果,因而误判了安装失败。
|
LOG.info("Executing external processor " + processor.getJar().toString() + ", command line: " + new CommandBuilder().addAll(command).toString()); |
|
int exitCode = SystemUtils.callExternalProcess(command); |
|
if (exitCode != 0) |
|
throw new IOException("Game processor exited abnormally with code " + exitCode); |
|
|
|
for (Map.Entry<String, String> entry : outputs.entrySet()) { |
|
Path artifact = Paths.get(entry.getKey()); |
|
if (!Files.isRegularFile(artifact)) |
|
throw new FileNotFoundException("File missing: " + artifact); |
|
|
|
String code; |
|
try (InputStream stream = Files.newInputStream(artifact)) { |
|
code = DigestUtils.digestToString("SHA-1", stream); |
|
} |
|
|
|
if (!Objects.equals(code, entry.getValue())) { |
|
Files.delete(artifact); |
|
throw new ChecksumMismatchException("SHA-1", entry.getValue(), code); |
|
} |
|
} |
此外,forge 官方也遇到过类似的问题 MinecraftForge/Installer#77
启动器崩溃报告 / 启动器日志文件 | Launcher Crash Report / Launcher Log File
[00:58:33] [@.util.platform.SystemUtils.onLogLine/INFO] Data assets/minecraft/models/item/crimson_door.json
[00:58:33] [@.util.platform.SystemUtils.onLogLine/INFO] Data assets/minecraft/models/item/bamboo_mosaic_slab.json
[00:58:33] [@.util.platform.SystemUtils.onLogLine/INFO] Data assets/minecraft/models/item/turtle_helmet_quartz_trim.json
[00:58:34] [@.task.AsyncTaskExecutor.lambda$executeNormalTask$31/TRACE] Task failed: org.jackhuang.hmcl.download.forge.ForgeNewInstallTask$ProcessorTask
org.jackhuang.hmcl.util.io.ChecksumMismatchException: Incorrect checksum (SHA-1), expected: de86b035d2da0f78940796bb95c39a932ed84834, actual: 194fcc11cdc1a242cbcb828c1bb0fdf2632f26ee
at org.jackhuang.hmcl.download.forge.ForgeNewInstallTask$ProcessorTask.execute(ForgeNewInstallTask.java:172)
at org.jackhuang.hmcl.task.AsyncTaskExecutor.lambda$executeNormalTask$22(AsyncTaskExecutor.java:244)
at org.jackhuang.hmcl.util.Lang.lambda$wrap$2(Lang.java:316)
at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804)
at java.base/java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1796)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1312)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1843)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1808)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:188)
问题描述 | Bug Description
问题
在最近发布的 Fedora 43 workstation 上安装 mc 1.20.1 + forge 任意版本都会失败,错误信息为哈希不正确:

猜测原因
该发行版预装 zlib-ng 提供 deflate 压缩算法实现,而不是 zlib 官方库。该库以性能著称,但是输出的压缩数据与官方库不同,而 hmcl 正是通过对比 forge installer 内清单提供的哈希和安装完成后输出 jar 的哈希来校验安装结果,因而误判了安装失败。
HMCL/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeNewInstallTask.java
Lines 155 to 174 in da5bbd2
此外,forge 官方也遇到过类似的问题 MinecraftForge/Installer#77
启动器崩溃报告 / 启动器日志文件 | Launcher Crash Report / Launcher Log File