Snap 安装特定/旧版本

我正在使用通过snap安装的VS code。最新版本中有一个令人讨厌的bug,我想回退到之前的版本,但是我找不到一种告诉snap安装特定版本的方法。在snap info中,我只看到了不同的渠道,它们都指向最新版本。而且在Snapcraft网站上,我也无法选择其他版本。
在snap文档中,它说我可以回退,但对我来说这行不通,因为没有安装先前的版本。
我可以从VS code网站上下载具有特定版本的snap,例如2020年6月(版本1.47),但我个人更喜欢直接通过snap处理此问题。
似乎有一些人遇到了相同的问题,但我没有找到有效的答案。

总结的问题是:是否有可能恢复到较旧的snap版本,如果可以,如何操作?


Snaps的设计本身就是自动更新到最新版本(很多开发者希望用户使用最新版本)。它们为用户提供了多个渠道,包括安装多个渠道版本(一种版本选择的形式,但仍然不同)。 - guiverc
5个回答

例如,安装旧版本的blender:
sudo snap refresh blender --channel=2.92/stable

你怎么知道渠道价值是什么?
snap info blender

会给你类似这样的东西:
snap info blender       
name:      blender
summary:   Blender is the free and open source 3D creation suite.

BLA BLA BLA BLA BLA

channels:
  latest/stable:     2.93.5  2021-10-06 (830) 205MB classic
  latest/candidate:  2.93.1  2021-06-23 (206) 205MB classic
  latest/beta:       2.93.0  2021-06-01 (161) 205MB classic
  latest/edge:       ↑                              
  2.93lts/stable:    2.93.5  2021-10-06 (830) 205MB classic
  2.93lts/candidate: 2.93.6  2021-10-25 (935) 205MB classic
  2.93lts/beta:      ↑                              
  2.93lts/edge:      ↑                              
  2.92/stable:       2.92.0  2021-02-25 (111) 196MB classic
  2.92/candidate:    2.92.0  2021-04-21 (134) 173MB classic
  2.92/beta:         2.92.0  2021-02-17  (95) 197MB classic
  2.92/edge:         ↑                              
  2.91/stable:       2.91.2  2021-01-20  (65) 193MB classic
[...]

这是魔术的关键一句:
2.92/stable:       2.92.0  2021-02-25 (111) 196MB classic

1很不幸,这种方法只适用于那些恰好安装了较旧版本应用程序的渠道。但对于某些应用程序(例如snap-store)来说,情况并非如此。 - bmaupin
如果你访问这个商店,它也会列出频道(右上角):https://snapcraft.io/blender。 - undefined

你可以在Snap中安装特定的旧版本,这不是问题。 请查看this answer以获取详细说明。
你真正的问题是Visual Studio Code的Snap仓库没有旧版本,只有一个最新版本。
snap info code

1好的,所以如果VS Code提供旧版本,会有其他渠道,比如"1.47/stable"、"1.46/stable"等? - Thomas Spranger
是的,那是正确的。 - Milan Bojovic

虽然其他答案在提到使用 snap refresh 命令时,你只能安装 snap info 中提供的特定版本是正确的,但那并不是你实际要寻找的。

最新版本中有一个烦人的错误,我想回退到上一个版本。

默认情况下,snap 在系统上缓存了每个软件包的两个先前版本。由于这一点,解决你的问题,将 snap 回退到之前的工作版本就非常简单:

snap revert code

您还可以列出所有可用的 snap 包修订版本,并选择要回滚到哪个版本,请参考this answer

好提示 - 谢谢! - Thomas Spranger
这对signal-desktop不起作用。 - undefined

# snap info lxd

channels:  
latest/stable:    5.14-7072c7b  2023-06-01 (24918) 178MB - 
latest/candidate: 5.14-7072c7b  2023-05-29 (24918) 178MB -   
latest/beta:      ↑                                         
latest/edge:      git-6bdccb9   2023-06-20 (25013) 181MB -
5.14/stable:      –                                      
5.14/candidate:   5.14-7072c7b  2023-05-31 (24918) 178MB -
5.14/beta:        ↑                                      
5.14/edge:        ↑                                      
5.13/stable:      5.13-8e2d7eb  2023-05-31 (24846) 174MB -
5.13/candidate:   ↑                                      
5.13/beta:        ↑                                      
5.13/edge:        ↑

                               

#  snap install lxd --channel=5.14/candidate

根据目前的写法,你的回答不够清晰。请编辑以添加更多细节,帮助其他人理解这如何回答所提出的问题。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - Community

虽然heslant的回答基本准确,指出snap list命令只显示包的最新两个版本,但值得强调的是,实际上保留了相当数量的缓存快照(正如他和Milan Bojovic在链接的来源中指出的,尽管没有得到足够的强调)。
$ snap list lxd --all
Name  Version      Rev    Tracking     Publisher   Notes
lxd   git-5a1faae  25306  latest/edge  canonical✓  held
lxd   git-752650e  25381  latest/edge  canonical✓  disabled,held

实际上,我的系统中有以下的.snaps文件。
$ sudo ls -lah  /var/lib/snapd/snaps/
total 8.5G
drwxr-xr-x  3 root    root    4.0K Aug 21 22:07 .
drwxr-xr-x 23 root    root    4.0K Aug 21 18:20 ..
-rw-------  1 root    root    165M May  3 01:15 lxd_24758.snap
-r--r--r--  1 1000000 1000000 170M Aug 21 22:05 lxd_24817.snap <- transferred from other machine (May 3)
-rw-------  1 root    root    174M Jun 16 20:10 lxd_24988.snap
-rw-------  1 root    root    174M Jun 17 02:50 lxd_24994.snap
-rw-------  1 root    root    174M Jun 17 15:45 lxd_24999.snap
-rw-------  1 root    root    174M Jun 19 14:21 lxd_25003.snap
-rw-------  2 root    root    174M Jun 20 02:30 lxd_25009.snap
-rw-------  2 root    root    174M Jun 21 01:15 lxd_25013.snap
-rw-------  2 root    root    174M Jun 21 22:10 lxd_25027.snap
-rw-------  2 root    root    174M Jun 22 07:55 lxd_25042.snap
-rw-------  2 root    root    174M Jun 22 15:16 lxd_25050.snap
-rw-------  2 root    root    174M Jun 22 21:51 lxd_25056.snap
-rw-------  2 root    root    174M Jun 23 03:36 lxd_25063.snap
-rw-------  2 root    root    174M Jun 26 19:55 lxd_25075.snap
-rw-------  2 root    root    174M Jun 28 00:50 lxd_25092.snap
-rw-------  2 root    root    174M Jun 29 04:25 lxd_25097.snap
-rw-------  1 root    root    174M Jul  6 23:11 lxd_25128.snap
-rw-------  1 root    root    176M Jul  7 04:01 lxd_25136.snap
-rw-------  1 root    root    176M Jul  7 11:45 lxd_25144.snap
-rw-------  1 root    root    176M Jul  7 12:41 lxd_25154.snap
-rw-------  2 root    root    176M Jul 11 07:00 lxd_25186.snap
-rw-------  2 root    root    176M Jul 11 13:21 lxd_25197.snap
-rw-------  2 root    root    176M Jul 12 00:45 lxd_25224.snap
-rw-------  2 root    root    176M Jul 12 09:51 lxd_25228.snap
-rw-------  2 root    root    176M Jul 13 07:45 lxd_25234.snap
-rw-------  2 root    root    176M Jul 13 16:11 lxd_25239.snap
-rw-------  2 root    root    176M Jul 14 09:10 lxd_25246.snap
-rw-------  2 root    root    176M Jul 15 18:35 lxd_25253.snap
-rw-------  2 root    root    176M Jul 17 14:45 lxd_25269.snap
-rw-------  2 root    root    176M Jul 18 16:00 lxd_25285.snap
-rw-------  2 root    root    176M Jul 19 10:20 lxd_25292.snap
-rw-------  1 root    root    176M Jul 20 05:30 lxd_25306.snap
-rw-------  1 root    root    176M Jul 20 15:30 lxd_25313.snap
-rw-------  1 root    root    176M Jul 21 07:30 lxd_25319.snap
-rw-------  1 root    root    176M Jul 24 07:01 lxd_25332.snap
-rw-------  1 root    root    176M Jul 26 00:00 lxd_25345.snap
-rw-------  1 root    root    176M Jul 26 14:05 lxd_25357.snap
-rw-------  2 root    root    176M Jul 27 09:10 lxd_25364.snap
-rw-------  2 root    root    176M Jul 27 20:30 lxd_25371.snap
-rw-------  2 root    root    176M Jul 29 10:05 lxd_25376.snap
-rw-------  2 root    root    176M Aug  3 20:10 lxd_25381.snap
drwxr-xr-x  2 root    root    4.0K Apr 10  2020 partial

而还原的过程就像执行一个简单的命令一样直接。
$ sudo snap install  /var/lib/snapd/snaps/lxd_24817.snap
lxd git-49b9c78 from Canonical✓ installed

$ snap list lxd --all
Name  Version      Rev    Tracking     Publisher   Notes
lxd   git-5a1faae  25306  latest/edge  canonical✓  disabled,held
lxd   git-49b9c78  24817  latest/edge  canonical✓  held

最后,我们可以通过输入命令停止自动更新特定的快照。
 sudo snap refresh --hold lxd

P.S. 我已经搜索了这个解决方案,以恢复一个在最近的版本中被“修复”的功能,但是我很难找到之前的snap版本。讽刺的是,它就在那里,近在咫尺。 然而,目前对于这个snap的自动更新对我来说并不可行(至少暂时如此)。