流浪的加菲
2024-06-05 14:21 deepin
沙发自己先坐咯
Reply Like 0 View the author
沙发自己先坐咯
我抢个板凳。学习了,谢谢分享。
缺了个重要的包成员,那就是我最喜欢的Aur
缺了个重要的包成员,那就是我最喜欢的Aur
我ArchLinux天下无敌是吧
我ArchLinux天下无敌是吧
无敌的不是arch,是我大aur
先收藏一下,然后再认真学习。。。
我觉得容器对开发者和用户来说都好啊。
对于开发者:在多个发行版、多个系统版本上分发软件会变得事半功倍啊;
对于用户:安装软件再也不用考虑系统兼容性,再也不会出现系统升级后,软件不能用了的情况,也不用考虑安装软件影响系统稳定性;
pacman格式写错了,应该是.pkg.tar.zst。
要不要再加入函数式特殊包管理器(格式)的介绍?比如nix。
期望玲珑能做的和flatpak一样好用。
这知识科普的可以,赞~
要不要再加入函数式特殊包管理器(格式)的介绍?比如nix。
哈哈,我觉得Nix、Guix等这些太冷门了,我也没体验过,就没放进去写。
哈哈,我觉得Nix、Guix等这些太冷门了,我也没体验过,就没放进去写。
可以问问@SamLukeYes。
Popular Ranking
ChangePopular Events
More
Linux好用的软件多得超乎一般人想像,可是安装方法却有很多种,即使是Ubuntu这种友善的发行版,一个软件不一定只有一种安装方式。我们常见的Linux软件安装包格式一大堆,如 AppImage、Flatpak、Snap、deb等(玲珑:等等,我还没有上车呢!🤧 )。以当前实用程度来排序,估摸着排序应该是Flatpak > AppImage > Snap。
当然不管大家使用什么发行版都可以遵循一个原则:系统应用程序用原生包管理器装,桌面应用程序可以用Flatpak安装
一、名词定义
二、Linux上软件安装方式
Linux不是Windows,市面上比较少有安装向导(Installation Wizard)这类的图形化程序来辅助安装,顶多就是纯文字界面引导式的安装,咱们重点讨论桌面应用程序的安装。
桌面应用程序的安装
桌面应用程序甚少会需要动系统文件,而且需要经常更新保持最新版本,所以一般是直接通过包管理的方式安装,推荐优先级如下:
任何软件都应该被包管理器控管。
每个发行版有不同的包格式和包名,此外还有同一个软件的不同版本存在兼容性问题,同一个软件的同一一个版本在同一个操作系统发行版的不同系统版本上也存在兼容性问题,这个时候使用"跨Linux发行版包管理器"来安装和管理应用就显得尤其必要了。
软件除了开发成本还有维护成本,软件生态的健康发展也离不开高效便捷的软件分发服务。(想象下我开发一个办公软件,在系统层面,要给银河麒麟、统信UOS、中科方德都适配一遍,在各系统版本上,SP1/SP2、1030/1060、V20/V23 都得支持;CPU架构层面,x86、ARM、龙芯都要支持,我要更新一次应用软件的版本,这个成本真的几何式增加)
跨Linux发行版的软件打包技术,其中最著名的三个分别是:AppImage、Flatpak、Snap
这三个技术都有共同目标:解决各Linux发行版软件版本不一,开发者维护不易的问题,因此用统一打包格式,附赠一致的runtime版本,使应用程序一次打包后就可安装在多个Linux系统上。
不过即使如此,不是所有应用程序都会提供原生包管理器以外的版本。有的开发者可能认为提供deb包或二进制文件就够了,或者开发者根本不知道有这类格式存在。很多的开发者只提供deb/rpm包。
AppImage
AppImage在大部分Linux发行版上应该都可以开箱即用,除少数使用muslc库的除外。
AppImage没有包管理器机制,每个应用程序都是单一文件,它将应用程序的runtime打包在一起,主打下载即用(类似Windows的免安装exe,双击即用)
AppImage看似美好,然而AppImage大多不会装到系统里面,因为不需要安装也没有快捷方式,要启动程序得到AppImage所在目录点二下。另外,由于AppImage跟一般应用程序无异,其资料放置位置是不统一的,可能会往您的家目录"倒垃圾"。此外,AppImage更新不易,需要使用者要手动下载新版的包。
虽然以上问题可以用"AppImage Launcher"解决,这仍然是不如有一个完整包管理器来管理好。
Snap
Snap主要是Ubuntu在推行的格式,Ubuntu 20.04以后正式融入系统,Kubuntu、Lubuntu、Xubntu、Manjaro、openSUSE Leap也预载了Snap。
Snap通过Snapd来更新及管理软体包,支持通过应用商店(GNOME Software、KDE Discover)来安装和管理应用程序。
Snap设有一套权限机制,规定应用程序能访问的硬件资源。应用程序安装后,资料统一放在~/snap目录之下,方便删除。
Snap会在系统建立一堆loop device,用系统指令lsblk查看很不美观。
Snap一律需要sudo才能安装应用程序,个别使用者安装的应用程序整个系统的人都会看到,无法隔离管理。
尽管理论上Snap的源能够自建,Snap的软件源目前多只能使用Ubuntu官方的Snap Store来下载应用程序,没有第三方软件源介入的空间,且后端服务器完全是闭源软件,这等同于软件分发权力完全由Canonical控制。
另外,更麻烦的地方在于Ubuntu用指令安装部份APT包的时候,竟会强制重新导向为安装Snap版本的包。(手动吐口水~啊~tui!!😖 )
总而言之,Snap完全是以Ubuntu量身打造的包管理器,而且是半强迫使用,不适合其他Linux发行版用户。
Flatpak
Flatpak原名xdg-apps,将应用程序所需的runtime打包在一起,并通过Flatpak本身来管理、更新应用程序。支持用应用商店(GNOME Software、KDE Discover)在在安装和卸载应用程序。
预装Flatpak的Linux发行版有:Fedora、openSUSE Tumbleweed、CentOS、Linux Mint、Zorin OS等等。Flatpak软件来源主要是"Flathub",目前收录了2000款以上的应用程序,但有些组织也会自行经营Flatpak软件源,例如RedHat。
Flatpak引入了沙盒机制,限制应用程序可以访问的资源,统一规范APP存放资料的位置在~/.var目录下。 Flatpak可以选择将应用程序安装到系统,或者只安装给特定使用者,这样可以让一般使用者免sudo密码安装软件,并且只有该使用者能使用该程序。
Flathub跟Canonical的Snap Store不太一样,它不是一间私人企业平台,而是由GNOME非营利基金会经营的网站,提交应用程序无需费用,可自由在Github提交Flatpak包。使用者还可以自由更换Flatpak的远端软件源,不需要迁就Flathub单一平台来下载应用程序。
软件包巨大。因为它把runtime包在一起的缘故,应用程序可能随便都占1GB以上。不过,只要多使用Flatpak安装应用程序,Flatpak就会让应用程序重复利用runtime,长久看来空间占用不是大问题。
沙盒权限问题。主要是对开发程序的软件不利。 Flatpak设计上就是不能跑需要sudo权限的东西的,它访问系统编译器有困难,所以Flatpak不适合装程序开发工具。
玲珑
玲珑这里就不细说了,感兴趣的可以看我之前写的帖子:
玲珑系列文章——玲珑简介-论坛-深度科技 (deepin.org)
系统应用程序的安装
系统应用程序安装在前面有提到过,建议首选原生包管理器,优先程度:
在我们安装系统应用程序的时候,因为会动到系统目录,其实仍然是以包管理器为主,大多数Linux发行版优先打包给包管理器使用。原生包管理器能做到安装、删除、升级、列出多余软件用一条指令解决。
另外一类情况需要注意,就是遵从"软件开发者"的建议安装方法,比如驱动程序,因为安装驱动程序是要与系统整合的。比如安装Nvidia驱动+CUDA,建议是加入Nvidia官方PPA,从Nvidia的源取得最新版本驱动,然后再用APT安装 ,而非从Nvidia网站下载安装脚本让它跑,这样要移除、升级驱动很麻烦。