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
© 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 使用的命令有两个,分别是snap
和snapcraft
,前者用来管理软件包,后者用来创建软件包。
比如,可以使用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 七宗罪:
- Canonical 公司强推 snap,甚至在以后的发行版中,有些软件只提供 snap 软件包,不提供 deb 软件包;
- 在 deb 软件包和 apt install 安装软件方式之外,又引入 snap 软件包和 snap install 安装软件,搞分裂;
- 软件源的地址是硬编码的,不能换源,国内的用户还会遇到墙的问题;
- 文档语焉不详,也没有很活跃的社区,这和 docker 不能比;
- 对个人用户而言,创建和修改软件包都很困难,这也和 docker 不能比;
- 沙盒模式对于访问系统的资源很受限,运行软件也经常出问题,而且修改起来很困难;
- 反自由,利用开源软件,推广自己公司的私货。
好了,下面我来一步一步卸载 snap,并说明其中的一些注意事项。
- 卸载 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