Canonical公司于最近2016年4月发布了一个新的Ubuntu 16.04系统,并且这个系统是长期支持版(LongTerm Support - LTS).它一如既往地支持debian安装包,但同时它也支持最新的snap安装包.snap安装包是Canonical公司最新发布的一种安装包的格式,它甚至可以在其它的Linux发行版上安装.更多的信息可以在我们的官方开发者网站:https://developer.ubuntu.com/en/desktop/或http://snapcraft.io/查看.
1)什么是snap?
2)16.04桌面支持
从上面的图中,我们可以看出来在16.04的桌面中支持两种格式的安装包:snap及debian.另外我们可以看出,snap包每个安装的应用都是自成一体:每个snap应用包含运行所需要的任何依赖(dependencies);同时我们可以看出每个snap应用都是互相隔离的(请注意OS也是一个snap).和debian包相比较,我们可以看出来每个debian应用的安装依赖于其它包的安装;debian应用之间可以不受限制地互相访问而造成安全问题;删除其中的一个debian应用或包可能导致其它的应用不可以正常运行.相比较而言,不同的snap应用可以安装同样一个软件的不同版本(比如一个安装python 2.7,另外一个应用安装python 3.3)而不造成任何的干扰.从理论上讲,一个snap应用可以安装到任何一个Linux的发行版上,因为它不依赖于操作系统及其发布版本.这对于应用的维护来说是非常好的.
目前在如下的Linux发行版上支持snap包的安装.大家如果有兴趣的话,可以试一下.大家甚至可以直接从源代码编译在它上面运行的snapd环境.
对于一个All-snap Ubuntu core系统来说(如上面的右图所示),它可以分为两个逻辑部分:
- 只读的最基本的系统
- 这部分包括配置文件,标准目录,库,工具及核心的服务(比如network services, libc, systemd及其它).系统的这部分是只读的,里面的每个元素不可以被分别更新.这个被称之为"system-image".在一个系统中,这种image可以达到两个及以上.这些最基本的系统是一种root filesystem的形式出现的.在启动后它们之间可以互相roll back,也即如果一个系统启动有问题,可以自动切换到先前的或指定的系统image去.这个部分也是通过snap打包来实现的.
- 可写的snap应用及在其之上的架构(framework).它们利用上面的系统所提供的服务达成.
3)安装
$ sudo apt update $ sudo apt install snapd $ sudo apt install snapcraft
在这里,我们简单地介绍一下所使用的术语:
$ sudo snap install ubuntu-calculator-app $ ubuntu-calculator-app.calculator
我们可以在我们的电脑的dash中直接运行我们所安装的应用:
liuxg@liuxg:~/snappy/desktop/rssreader$ snap list Name Version Rev Developer Notes hello-world 6.3 27 canonical - hello-world-cli 0.1 x1 - hello-xiaoguo 1.0 x2 - rssreader-app 1.0 x2 - snappy-debug 0.23 22 canonical - telegram-sergiusens 0.9.50 x1 - test-license 0.1 x1 - ubuntu-calculator-app 2.1+snap3 5 ubuntucoredev - ubuntu-core 16.04+20160531.11-56 122 canonical - webcam-webui 1.0 x1 -
$ snap install hello --channel-beta
$ snap refresh hello --channel=beta Name Version Rev Developer Notes hello 2.10.1 29 canonical - hello (beta) installed
https://code.launchpad.net/~dpm/ubuntu-calendar-app/snap-all-things
细心的开发者也许会发现,这个应用实际上是使用了同样一个和Ubuntu手机一样的代码.没有做任何的改变.从某种意义上讲,Ubuntu实现了真正意义上的融合(Convergence)应用设计.在为了,我们只需要一个应用的snap包,它就可以直接运行于不同屏幕尺寸上,并自动适配屏幕尺寸从而得到最佳的显示效果.比如在我们的另外一个教程中" 如何把一个qmake的Ubuntu手机应用打包为一个snap应用",它展示了如何把一个手机的应用转换为一个可以在桌面系统运行的snap应用.
$ snap refresh <snap name>我们也可以通过如下的命令来rollback到以前的版本(从snapd 2.11版本开始支持)
$ snap revert <snap name>
liuxg@liuxg:~$ snap find calculator Name Version Developer Notes Summary ubuntu-calculator-app 2.1+snap3 ubuntucoredev - Ubuntu Calculator application for the Unity 7 desktop
liuxg@liuxg:~$ snap find Name Version Developer Notes Summary ab 1.0 snappy-test - Test snap with shortest name ag-mcphail 1.0.1 njmcphail - The Silver Searcher - mcphail's build and upstream git version alsa-utils 1.1.0-1 woodrow - Utilities for configuring and using ALSA apktool 2.1.1 ligboy - A tool for reverse engineering 3rd party, closed, binary apps. ...
liuxg@liuxg:~$ snap find | grep hello hello 2.10 canonical - GNU Hello, the "hello world" snap hello-bluet 0.1 bluet - Qt Hello World example hello-huge 1.0 noise - a really big snap hello-snap 0.01 muhammad - GNU hello-snap, the "Hello, Snap!" snap
4)删除一个snap应用
liuxg@liuxg:~$ snap list Name Version Rev Developer Notes hello-world 6.1 26 canonical - rssreader 1.0 x1 devmode rssreader-app 1.0 x2 - snaptest 1 x1 devmode snaptest-app 1 x3 devmode ubuntu-calculator-app 2.1+snap3 5 ubuntucoredev - ubuntu-core 16.04+20160531.11-56 122 canonical - webcam-webui 1 x1 -
liuxg@liuxg:~$ sudo snap remove ubuntu-calculator-app [sudo] password for liuxg: Done
liuxg@liuxg:~$ snap list Name Version Rev Developer Notes hello-world 6.1 26 canonical - rssreader 1.0 x1 devmode rssreader-app 1.0 x2 - snaptest 1 x1 devmode snaptest-app 1 x3 devmode ubuntu-core 16.04+20160531.11-56 122 canonical - webcam-webui 1 x1显然我们再也找不到ubuntu-calculator-app应用了.