Ubuntu Desktop 实践 08、从剖析 snap 到卸载 snap

107 篇文章 0 订阅

Ubuntu中,snap、apt和apt-get的区别  https://blog.csdn.net/qq_73725757/article/details/130546567

如何看待 snap软件包?snap refresh --hold  https://blog.csdn.net/ken2232/article/details/136420431

官网:https://snapcraft.io/

© 2024 Canonical Ltd.
Ubuntu and Canonical are registered trademarks of Canonical Ltd.

在Ubuntu上使用Snap软件包的综合指南:用法示例 (**)  https://blog.csdn.net/ken2232/article/details/136427710

Ubuntu Desktop 实践  https://www.zhihu.com/column/c_1697992846638997504

-----------------------------------------------------------------

要点:

1. 在 linux不同发行版之间,由于应用场景、以及设计目标的不同,存在有技术壁垒。

由于存在竞争关系,因此,还存在有人为壁垒。

2. 为了实现 Linux app在不同发行版之间的通用,于是,就产生了许多不同的解决方案;类似于 Win OS中的软件那样,每一个 app都有一个独立的安装目录,不依赖于在 Linux OS操作系统中的函数库。

Docker、snap、appimagetool 等等:各有各的最佳应用场景;不能说某个解决方案就绝对的好,没有包治百病的药,也不存在无所不能的软件工具。

3. 有些人可能会说,snap 安装的软件,有这样那样的一些问题。但是,当某些软件只有 snap版本时,又该如何选择呢?又或者说某些软件的官网下载在墙外,只有 snap版本可以下载,此时又该怎么办呢?

比如,KDE 官方只提供了通过 Discover 和 snap 这两种方式进行安装的 app。https://blog.csdn.net/ken2232/article/details/136427710

KDE Discover 包管理器,将某些 app绑定在 KDE桌面上进行安装;Gnome也是这样;Ubuntu的做法也是类似的。竞争总是无处不在的;开源、绑定、收费、发展、等等,又是如何平衡的呢?

-----------------------------------------------------------------

关联参考:

Linux 自由的打包工具,免安装、绿色软件制作

利用 appimagetool 工具对开发好的项目进行打包 (***带笔记*)https://blog.csdn.net/ken2232/article/details/131313613

使用linuxdeployqt在linux下进行Qt打包发布 (超详细) (*****)  https://blog.csdn.net/ken2232/article/details/131305081

Linux 跨发行版 app 发布之困难:为什么需要 snap、flatpak、appimagetool 等等的打包工具 ?  https://blog.csdn.net/ken2232/article/details/136458556

例子:  https://snapcraft.io/marktext

圈 2 :  https://snapcraft.io/docs/installing-snapd

Installing snap on Debian  https://snapcraft.io/docs/installing-snap-on-debian

Installing the Snap Store app  https://snapcraft.io/docs/installing-snap-store-app

run test

  https://snapcraft.io/docs/installing-snap-on-debian

To test your system, install the hello-world snap and make sure it runs correctly:

$ sudo snap install hello-world
hello-world 6.3 from Canonical✓ installed
$ hello-world
Hello World!

=====================================

Ubuntu Desktop 实践 08、从剖析 snap 到卸载 snap

  https://zhuanlan.zhihu.com/p/665760051

点评:本文作者的观点,似乎有些偏颇了 ?

但是,单纯从技术上来说,还是有许多可取之处的。

Ubuntu 的母公司 Canonical 强推的 snap 一直被网友们强烈反对。至少知乎上的氛围是这样。

甚至有很多人,就是因为 snap 而离开了 Ubuntu 阵营,选择了其它的发行版。

我之所以想到写这一篇文章,是因为我在写上上篇文章——Linux 系统字体配置要略——的时候,发现被 snap 管理的 Firefox 并不听从 Fontconfig 的指挥,使得我的字体配置失效,然后我就决定抽时间仔细研究一下 snap。本来只是想把 snap 研究通了,与它共存。但是经过试用之后,发现 snap 确实不尽如人意,最后才决定卸载它。

在这里,我带大家近距离接触一下 snap ,然后,再尝试一下在我的系统中卸载 snap。

一、什么是 snap ?

snap 是一种打包和安装软件的方式,这里需要知道,snap 是 Canonical 公司强推的,这是被大家反感的地方之一。
------

<< 点评:Canonical毕竟是商业公司,在免费的产品上,搞一点广告、或者捆绑之类的小动作,也是不难理解的。
假如 Ubuntu 啥都开放,什么文档都非常详细,那么,很可能明天就会有一个新发行版超越了 Ubuntu,后天 Ubuntu就要完蛋了,这样好吗?有人的地方,就有江湖;有江湖,就有竞争。

开源 =/= 免费 !
开源协议,也有多种不同的许可证;不只是 GNU许可;世界是多彩的,不只有一种颜色。

变是永远的不变! 昨天=/= 今天 !今天 =/= 明天 !优胜劣汰。

参考:解决了 snap 昨天存在的问题 >> 如何看待 snap软件包?snap refresh --hold  https://blog.csdn.net/ken2232/article/details/136420431

------

我们安装软件,一般是通过下载软件包的方式,比如,在 Redhat 系的 Linux 发行版中,软件包一般都封装成.rpm格式,在 Debian 系的 Linux 发行版中,一般封装成.deb格式。安装软件的时候,可以使用dpkg命令安装,也可以使用apt install命令从软件仓库中下载并安装,并自动解决依赖问题。

这一直是我们使用 Ubuntu 发行版最流行最方便的方式。

而 snap 软件包会将软件打包成 snap 格式。这样,发行软件包的方式又多了一种,造成了分裂。这是被大家反感的地方之二。
------

<< 点评:这种做法与 win的软件安装方式,有些类似。Linux 也有专门的绿色打包软件;因此,这种做法有好有坏,不可厚非吧?

从 app 软件发布者的角度来看:snap、flatpak、appimagetool 等等这些打包工具,可以应用于不同场景,这些都是非常需要的.

当 一款 app 软件开发完成之后,由于 Linux 不同发行版之间,存在着技术壁垒、或人为壁垒,这款 app 通常只能在开发软件时的当前 Linux 发行版操作系统上才能运行(即使是相同版本号的相同发行版,由于缺少软件作者所安装的一些依赖,因此,也很可能无法运行)

如何才能做到跨发行版来运行这款软件呢?
1. 难道要让 app作者在每一个发行版上,都要源码编译一遍吗?<< 累晕 app的开发者了?
2. 难道要让所有的主流 Linux发行版,都将这款 app收录到它们的官方软件仓库立吗?<< 这怎么可能呢?

3. 都使用 dcoker 吗?
一些小的 app软件,也要使用 docker ?这也太重量了?太麻烦了吧?要使用牛刀来杀鸡?

从 app 用户的角度来看:自己想要使用某款 app软件,而这款 app 只有 snap、flatpak、appimage 其中的一种安装包,那么,该怎么办呢?<< 难道让 app开发者专门给自己弄一个吗 ?

结论:尺有所短,寸有所长:各有各的最佳应用场景,仅此而已!新陈代谢,优胜劣汰。

------

说的是使用 snap 打包的软件更稳定、更安全,因为它自己解决了依赖问题,因为它在沙盒中运行。这个确实有点优越性。有点类似于 docker。但是经过我的试用,觉得它远不如 docker,我后面会详述。

二、snap 使用的命令是什么?它从哪里下载软件包? 下载的软件放在哪里?

snap 使用的命令有两个,分别是snapsnapcraft,前者用来管理软件包,后者用来创建软件包。

比如,可以使用sudo snap list查看我们系统中安装了哪些软件包,使用sudo snap find查找可用的软件包,使用sudo snap install安装软件包,使用sudo snap remove卸载软件包。

上面这些信息,文档中还是写得比较清楚的。

下面,使用sudo snap list了解一下我的系统中有哪些软件包是由 snap 安装的吧,如下图:

图1、系统中由 snap 管理的软件包

可以看到,只有一个 Firefox 是我们常用的,其它的,应该都是依赖项吧。如果我们决定完全卸载 snap 的话,只需要找其它的办法安装 Firefox 即可。

使用sudo snap install可以安装软件,比如上图中的snapcraft就是我通过sudo snap install snapcraft安装的。

你知道snap命令属于哪个软件包吗?你一定想不到。

snap命令属于snapd软件包。

所以,应该通过sudo apt install snapd安装snap,再通过sudo snap install snapcraft安装snapcraft,离了大谱。

你知道使用snap install命令的时候,是去哪里下载软件包吗?这个软件源能修改吗?文档中没写。

我这里揭晓答案,网址是 https://snapcraft.io/store ,如下图:

图1、snapcraft 的官网

这是 Canonical 公司运营的。

大家反感 snap 的理由之三,就是不能换源,这个软件源的地址是直接写死的,而且速度奇慢。我测试时,速度倒是不慢。但是听知友们说,同样速度不慢的国外网友,依然对 snap 骂声一片。

<< 点评:Canonical毕竟是商业公司,在免费的产品上,搞一点广告、或者捆绑之类的动作,也是不难理解的。

那么我们安装的软件包放在了什么地方呢?snap 的运行机制是什么呢?

文档中依然没有写。

然后我一顿好找,结果你们猜我是怎么找到的吗?靠mount命令。如下图:

图3、靠 mount 命令找到的 snap 软件包

原来,由 snap 安装的软件包都放在/var/lib/snapd/snaps目录,每个软件包都是一个单独的镜像,然后mount到了/snap目录下。

然后,我到/snap目录下逛了逛,算是对 snap 管理的软件的运行机制有了一定的初步了解。

这里加一条,snap 之罪四,文档语焉不详。

三、snapcraft 个人用户使用困难

从前面的探讨可以看出,如果单独使用snap下载和安装软件包,应该还是比较简单的。但是一旦我们自己想修改某个软件包,那就比较难了。

还是从前面那个 Firefox 不能修改字体的问题说起。

在上上篇文章里,我讲述了通过修改 Fontconfig 的配置文件,来修改我们系统的字体。但是 snap 托管的 Firefox 并不受其影响。通过上一节中所讲,我在/snap目录下逛了一圈之后,终于发现了问题所在。

原来,snap 托管的 Firefox,还依赖 snap 托管的 gnome-42-2204 这个软件包,然后我进入/snap/gnome-42-2204目录,发现里面还有自己的/etc/fonts/conf.d文件夹和里面的文件。由此可见,snap 托管的 Firefox 只受 snap 托管的 gnome-42-2204 中的配置的影响。

那么,我们能修改/snap/gnome-42-2204/etc/fonts/conf.d目录里面的配置文件吗?

不能!

因为这是一个只读的文件系统,通过前面的mount的输出可以看出来。

那么,我们能自己打包一个修改过了的gnome-42-2204软件包吗?很难。

自己打包 snap 软件包,需要使用 snapcraft 命令。我也阅读了 snapcraft 命令的文档,发现要打包一个完善的软件包,很难,只有大公司才能干好这件事,所以,打包一个修改过了的gnome-42-2204软件包,基本上是一个不可能完成的事情。

更何况 snapcraft 没有拉取一个镜像然后修改的功能。更何况 snapcraft 的文档语焉不详。

这里和 docker 比较一下。<< 点评:docker 太重了,在桌面版上使用,似乎有点麻烦。

使用 docker 的时候,我们可以拉取一个镜像,把这个镜像运行起来,然后在这个容器中使用apt install安装软件,修改配置,然后再把这个容器打包成另外一个镜像。

这种操作模式,对于个人用户来讲,就方便得多。

当然,也不是完全没有办法修改 snap 的软件包,毕竟还有一个软件包叫squashfs-tools ,我们可以利用里面的unsquashfs命令解开 snap 的软件包,修改后,再使用mksquashfs命令重新打包。如下图:

图4、squashfs 的工具

当然,这些办法都是我自己琢磨出来的,snap 官方以及 snap 社区都没有什么明确的指导意见,资料很欠缺呀。

snap 之罪五:对个人用户而言,创建和修改软件包很困难。<< 点评:以后会改善吧?

四、snap 的沙盒其实会造成很多问题

前面说过,snap 有一个优点(宣传的优点)是使用沙盒模式,更安全。而事实上,我们的软件本来就和系统有千丝万缕的联系,比如我前面讲的字体配置问题。

另外一个问题,我以前面 snapcraft store 官网的图片中的那个 beekeeper-studio 为例。你看在官网中,专门把它做成了一个横幅宣传,你以为很屌吧。其实我安装了之后,它的显示是下面这样的:

图5、Beekeeper Studio 有些字都显示不出来

还有网友遇到的 snap 托管的 Visual Studio Code 中文输入法不能用。

等等。

snap 之罪六、沙盒有问题,而且改起来还很困难。

最后我们给它加一条,凑成七宗罪吧。那就是不自由。明明这些软件,都是开源的、自由的,你非要把它打成一个 snap 包,用来推广你自己公司的 snap,甚至在以后的发行版中,还专门只提供 snap 的某某软件包,不提供 deb 软件包,天理何在啊。难怪有的人,用着用着就离开了 Ubuntu。

<< 点评:KDE 部分软件的安装,是通过 Discover KDE 专用包管理器来安装的。开源与自由?开源与免费?似乎是两码事吧?具体要看采用的是哪一种 许可证。

另外,Linux不同的发行版之间,也是存在着一定程度的竞争关系的。

五、彻底卸载 snap

经过前面的分析,我终于决定卸载 snap 了。

我们这里复习一下 snap 七宗罪:

  1. Canonical 公司强推 snap,甚至在以后的发行版中,有些软件只提供 snap 软件包,不提供 deb 软件包;
  2. 在 deb 软件包和 apt install 安装软件方式之外,又引入 snap 软件包和 snap install 安装软件,搞分裂;
  3. 软件源的地址是硬编码的,不能换源,国内的用户还会遇到墙的问题;
  4. 文档语焉不详,也没有很活跃的社区,这和 docker 不能比;
  5. 对个人用户而言,创建和修改软件包都很困难,这也和 docker 不能比;
  6. 沙盒模式对于访问系统的资源很受限,运行软件也经常出问题,而且修改起来很困难;
  7. 反自由,利用开源软件,推广自己公司的私货。

好了,下面我来一步一步卸载 snap,并说明其中的一些注意事项。

  1. 卸载 snap 中托管的软件,使用sudo snap remove命令一个一个卸载即可。

2. 关闭所有的 snapd 服务,为卸载 snapd 软件包做准备,需要使用systemctl命令和systemctl disable命令,如下图:

图6、关闭所有的 snapd 有关的服务

3. 卸载 snapd 软件包和 firefox 软件包,使用sudo aptitude purge命令。为什么要卸载 firefox 软件包呢?那是因为这个 firefox 软件包里面其实就只有一个 firefox.desktop 和一些图标,它的任务就是启动 snap 版的 firefox。同时可以分析出,当我们使用sudo aptitude install firefox安装 Ubuntu 自带的 Firefox 时,会把 snapd 和 snap 版的 Firefox 带回来。所以我这里卸载彻底一点。(请注意,这种把 snapd 带回来的情况,在安装其它软件包的时候也可能发生,比如 chromium-browser ,所以以后安装软件需要多长一个心眼。

图7、Ubuntu 自带的 firefox 软件包有内鬼

4. 阻止 Ubuntu 安装自带的 firefox,以免又把 snap 带回来了。先创建文件:

sudo vim /etc/apt/preferences.d/firefox-no-snap

输入下面的配置并保存:

Package: firefox*
Pin: release o=Ubuntu*
Pin-Priority: -1

5. 使用 PPA 安装 firefox。先添加 apt 仓库:

sudo add-apt-repository ppa:mozillateam/ppa

最后安装 firefox:

sudo apt update
sudo apt install firefox

大功告成,我们有了新的不用 snap 托管的 firefox,启动它,然后把它添加到快捷栏即可。如下图:

图8、重新安装的 Firefox

好了,到此结束,完美收官。经我的测试,用这个方法在 Ubuntu 23.10 中去除 snap 安全有效,无副作用。等 Ubuntu 24.04 LTS 发布后,我再来为大家测试移除 snap 是否依然如此。

发布于 2023-11-08 21:20

  • 15
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值