NextCloud Snap离线更新因在线钩子执行失败求助
解决离线环境下Snap版NextCloud升级pre-refresh钩子报错问题
问题描述
在无外网的Ubuntu 22.04无头服务器上,通过Snap安装的NextCloud 24.0.3snap1升级至25.0.10snap1时,执行以下命令:
nextcloud.occ maintenance:mode --on snap ack ./nextcloud_37355.assert snap install ./nextcloud_37355.snap
触发pre-refresh钩子报错:
- Run pre-refresh hook of "nextcloud" snap if present (run hook "pre-refresh": Unable to refresh: apps.nextcloud.com seems to be down, please try again later)
原因是该版本的Snap钩子新增了apps.nextcloud.com可用性检查,而离线环境无法满足此要求,且不想通过卸载重装方式解决。
解决步骤
方法一:临时修改pre-refresh钩子(推荐)
- 确保维护模式已开启(若之前未执行或已关闭,重新执行):
nextcloud.occ maintenance:mode --on
- 复制原pre-refresh钩子到临时目录:
cp /snap/nextcloud/current/hooks/pre-refresh /tmp/pre-refresh
- 编辑临时钩子文件,注释掉或修改检查apps.nextcloud.com的逻辑:
- 打开
/tmp/pre-refresh,找到包含apps.nextcloud.com的检查代码段(通常是curl请求或可达性验证) - 将该段代码注释掉,或直接在检查前添加
return 0让钩子直接返回成功
- 打开
- 挂载替换原钩子(Snap目录默认只读,通过bind挂载临时修改):
mount --bind /tmp/pre-refresh /snap/nextcloud/current/hooks/pre-refresh
- 执行本地Snap安装命令:
snap install ./nextcloud_37355.snap
- 安装完成后,取消挂载恢复原钩子:
umount /snap/nextcloud/current/hooks/pre-refresh
- 关闭维护模式:
nextcloud.occ maintenance:mode --off
方法二:使用devmode参数安装(简化但降低安全限制)
若对安全限制要求不高,可直接添加--devmode参数跳过钩子的部分检查:
nextcloud.occ maintenance:mode --on snap ack ./nextcloud_37355.assert snap install --devmode ./nextcloud_37355.snap nextcloud.occ maintenance:mode --off
注意:devmode会关闭Snap的部分安全隔离机制,仅建议离线环境临时使用。
内容的提问来源于stack exchange,提问作者MookiBar
相关产品推荐
相关产品推荐

