如何在 Ubuntu 中禁用单个 snap 的自动更新?

如何在 Ubuntu 中禁用单个 snap 的自动更新?

推荐使用 snap 来全系统安装 Intellij idea。当我这样做时,snap 会更新 IDE 安装,这对我来说是个大问题,因为更新开发环境会给我带来问题,而作为一名开发人员,我希望严格控制我的开发环境。

如果我禁用 snap,那么我甚至无法启动 IDE。Google 搜索只会返回毫无意义的长时间争论或完全暂停/禁用 snap。

有没有办法简单地告诉 snap 不要更新某个软件,同时保持其他所有软件都保持最新状态?我正在使用 Ubuntu 18.04

答案1

有两个选项:

选项1:--devmode

虽然所有 snap 都会定期更新,安装的快照 --devmode将不会被更新,因为这可能会抹去您表面上在快照中处理的更改。

例如,如果你想安装包裹并在您和您的团队正在进行的项目期间持续运行相同的版本,从而消除任何回归风险(例如插件损坏),然后使用以下命令:

snap install package
snap list package
snap refresh --devmode --channel 2019.3/stable package

第一个命令将其放入您的系统中。第二个命令列出可用的版本。第三个命令将其设置为您想要的特定版本,并启用它,--devmode这样它就不会自动刷新。

选项 2:refresh.hold

您还可以配置snap将刷新活动保留到特定日期:

sudo snap set system refresh.hold="2030-01-01T01:00:00-01:00"

然后还有:

sudo crontab -e

并添加以下内容:

# prevent snap updates entirely:
1 1 1 * * /usr/bin/snap set system refresh.hold="2030-01-01T01:00:00-01:00"  

这将阻止自动快照更新,直到格林威治标准时间 20:30 开始

这种方法的优点是您可以使用限制。缺点是您需要手动刷新所有快照。

答案2

不行,你唯一能做的就是延迟更新。

来自手册:

自动刷新

根据设计,从商店安装的非开发模式 snap 包会定期自动更新。默认情况下,snapd 守护进程每天检查 4 次更新。

控制刷新频率

有时用户希望在已知时间而不是默认时间刷新快照。这可以通过 snap set system refresh.timer 命令实现。用户可以指定他们希望刷新的日期或时间范围。以下示例将 snapd 守护进程设置为仅在凌晨 4 点至 7 点之间以及晚上 7 点至晚上 10:10 之间刷新快照。

snap set system refresh.timer=4:00-7:00,19:00-22:10

理论上,你可以每天改变刷新频率,不断将更新时刻移到未来,但这是行不通的。快照会在某个时间点更新(并且忽略你的刷新频率)。

这次讨论以及来自 niemeyer 的话题。

在同一链接中,mwinter(2017)的帖子#9 建议了两件事:

我(个人)可以这样做。但我不太喜欢在路由器上进行任何 [额外] 过滤,因为这可能会在将来引起问题……它还会阻止其他 snap 和潜在的更多(不确定所有 snap 是否都在同一位置)另一个(我认为更简单的)解决方案是下载 snap 并在本地安装 - 而不是从商店安装。

  1. 使用防火墙规则进行阻止。这将终止所有 snap 更新。一个都不能。
  2. 删除从商店安装的 snap 并使用本地安装的 snap。

答案3

使用最新版本的 snap(目前在 edge 频道),你可以禁用 snap 更新

新的暂停功能允许系统管理员和最终用户根据需要停止或推迟其 snap 更新。暂停可应用于单个 snap 或整个已安装的 snap,暂停时间可短至一定时间,或(如有必要)无限期。

例如,要暂停 VLC 的 snap 更新 3 天,您可以运行以下命令:

snap refresh --hold=72h vlc

“vlc” 常规刷新将持续至 2022-11-17T12:04:59Z

同样,要暂停所有快照的刷新 48 小时:

snap refresh --hold=48h

自动刷新截至 2022-11-16T12:27:25Z 的所有快照

要完全停止自动刷新并且不使用计时器:

snap refresh --hold

无限期地自动刷新所有快照。

来源:https://snapcraft.io/blog/hold-your-horses-i-mean-snaps-new-feature-lets-you-stop-snap-updates-for-as-long-as-you-need

答案4

没有人提到将命令添加到 crontab,如果 snap 尚未更新,它什么也不做,所以在我的情况下

我用

@reboot      snap revert chromium --revision 1816

其中 1816 是我需要的具体修订编号。

相关内容