「Linux」- 学习使用 snap 安装应用

问题描述

在 Ubuntu 中,已经开始使用 Snappy 进行应用管理(03/21/2021)。我们为什么要接受使用 Snappy 来管理应用呢:
1)我们别无它法:在我们使用 Ubuntu 20.04 时,只能通过 Snappy 安装 Chromium 应用。即使使用 APT 安装 Chromium,最后它还是通过 snap 安装。我们亦可使用 Debian 的 Chromium 安装包,但时这些做法都是逆势而为,我们无法阻挡 Ubuntu 采用 Snappy 管理应用(除非团结集体来抗议 Snappy 工具:-)
2)Snappy 包含更多优秀的应用:此外,很多优秀的应用,比如 MySQL Workbench、Redis Desktop Manager 等等,亦能通过 snap 安装,否则安装过程非常繁琐,还会带来其他问题。
3)Snappy 包含最新版本的应用:在 Snap Store 中,我们可以找到最新版本的应用。对于 Linux 桌面系统来说,这是巨大的优势,让我们摆脱 Linux 软件版本过旧的问题。

虽然我们在网上经常看到禁用、卸载 Snappy 的文章,但是按照目前(03/21/2021)的趋势,我们认为 Snappy 即使未应用于服务器环境,但是在桌面环境领域中,也是非常棒的解决方案。所以,我们准备开始接受新事物,学习新技术,学习 Snappy 的使用方法。至少,在桌面环境中,我们会经常使用 Snappy 管理桌面应用。

该笔记将记录:在 Ubuntu 20.04 LTS 中(应该适用于其他版本),使用 Snappy 安装应用的入门示例(旨在快速上手),以及常见问题处理。

解决方案

我们以安装 kubectl 命令为例,演示如何使用 snap 安装 kubectl 命令:

第一步、搜索应用

# snap search kubectl
Name                  Version                Publisher              Notes    Summary
kubectl               1.18.8                 canonical✓             		classic  Command line client for controlling a Kubernetes cluster.
kubernetes-worker     0.0.1                  canonical✓             		-        A complete Kubernetes worker
kafkactl              1.11.0                 dwi-di                 -        A command-line interface for interaction with Apache Kafka
kubectl-eks           1.10.3                 canonical-cloud-snaps  classic  kubectl controls the Kubernetes cluster manager.
kubectl-iexec         v1.6.2-next            leetserve              -        plugin to interactively exec to a pod
client-keystone-auth  v1.14.0+git36.e163280  knobby                 -        Client plugin for kubectl to enable keystone authentication.
devoperator           1.5.1                  art-hens-teeth         classic  DevOps tools
kube-commander        0.2.1                  anatoly-rugalev        -        Browse your kubernetes clusters in a casual way

第二步、查看版本

查看软件包信息,获取所有可用版本:

# snap info kubectl
name:      kubectl
summary:   Command line client for controlling a Kubernetes cluster.
publisher: Canonical✓
store-url: https://snapcraft.io/kubectl
contact:   https://www.ubuntu.com/kubernetes
license:   Apache-2.0
description: |
  kubectl is a command line client for running commands against Kubernetes
  clusters.

  For more information about kubectl, including syntax, descriptions of command operations, and
  common examples, see the [overview](https://kubernetes.io/docs/reference/kubectl/overview/). For
  details about each command, including all the supported flags and subcommands, see the [kubectl
  reference
  documentation](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands/).
snap-id: ZgG2URycDgvxSVskfoZxn44uaRMw0iwe
channels:
  latest/stable:    1.18.8         2020-08-27 (1612) 10MB classic
  latest/candidate: 1.18.8         2020-08-27 (1612) 10MB classic
  latest/beta:      1.18.8         2020-08-27 (1612) 10MB classic
  latest/edge:      1.18.8         2020-08-27 (1612) 10MB classic
  1.19/stable:      1.19.0         2020-08-27 (1623) 10MB classic
  1.19/candidate:   1.19.0         2020-08-27 (1623) 10MB classic
  1.19/beta:        1.19.0         2020-08-27 (1623) 10MB classic
  1.19/edge:        1.19.0         2020-08-27 (1623) 10MB classic
  1.18/stable:      1.18.8         2020-08-26 (1612) 10MB classic
...

第三步、安装应用

snap install kubectl --classic

# 如果需要安装特定版本,使用 --channel 选项
snap install kubectl --classic --channel=1.18/stable

# 更新应用
# https://askubuntu.com/questions/760823/how-can-i-update-all-snap-packages
snap refresh
snap refresh <Application>

注意事项:

  • 是否使用 –classic 选项与应用程序权限有关,
  • 应用的 Snapcraft 主页,或者错误信息,会提示是否需要使用 –classic 选项。
  • 或者,在第一步中,Notes 字段如果为 classic,则需要使用 –classic 选项。

第四步、运行应用

# 直接运行
/snap/bin/kubectl

# 或者,通过 snap 运行
snap run xmind

桌面图标,保存在 /var/lib/snapd/desktop/applications/ 目录中

常用其他命令

# 应用升级是自动的,如果需要手动升级:
snap refresh vlc

# 卸载应用
snap remove vlc

# 禁用或启动应用
snap disable vlc
snap enable vlc

相关链接

Installing the Snap Store app

参考文献

How to install snap packages behind web proxy on Ubuntu 16.04 – Ask Ubuntu
How to list all available versions of a snap which is not installed? – Ask Ubuntu
ubuntu – Install specific previous version of package using snap? – Unix & Linux Stack Exchange
Getting started | Snapcraft documentation