红联Linux门户
Linux帮助

安装snap应用到Ubuntu 16.4桌面系统

发布时间:2016-07-12 15:06:26来源:Ubuntu手机作者:Ubuntu手机
Canonical公司于最近2016年4月发布了一个新的16.04系统,并且这个系统是长期支持版(Long Term Support - LTS).它一如既往地支持debian安装包,但同时它也支持最新的snap安装包.snap安装包是Canonical公司最新发布的一种安装包的格式.更多的信息可以在我们的官方开发者网站:https://developer.ubuntu.com/en/desktop/查看。
 
1)16.04桌面支持
安装snap应用到Ubuntu 16.4桌面系统
从上面的图中,我们可以看出来在16.04的桌面中支持两种格式的安装包.另外我们可以看出,snap包每个安装的应用都是自成一体:包含应用运行所需要的任何依赖(dependencies);同时我们可以看出每个应用都是互相隔离的.于debian包相比较,我们可以看出来每个应用的安装都依赖于其它包的安装;应用之间可以互相访问而造成安全问题;删除其中的一个应用可能导致其它的应用不可以正常运行;不同的应用甚至可以安装同样一个软件的不同版本(比如一个安装python 2.7,另外一个应用安装python 3.3)而不造成任何的干扰.从理论上讲,一个snap应用可以安装到任何一个Linux的发行版上,因为它不依赖于操作系统及其发布版本.这对于应用的维护来说是非常好的.
Canonical公司目前正在向全社区把应用移植成为snap包,并最终把操作系统变为ubuntu core系统,从而打造最安全的操作系统及良好的应用维护.
 
2)安装
为了能够使得在16.04的系统上运行snap应用,我们必须做一些安装.在我们的terminal中打入:
$ sudo apt install snapd  
然后,你就可以在我们的terminal中安装及运用一个我们所需要的应用:
$ sudo snap install ubuntu-calculator-app  
$ ubuntu-calculator-app.calculator  
我们可以在我们的电脑的dash中直接运行我们所安装的应用:
安装snap应用到Ubuntu 16.4桌面系统
安装snap应用到Ubuntu 16.4桌面系统
如果大家想安装更多的应用的话,可以直接到我们桌面系统的应用商店进行安装:
安装snap应用到Ubuntu 16.4桌面系统
从上面我们可以看出来,calculator应用也是在里面的.如果大家想知道这个应用是如何实现的,请参考源码:
https://code.launchpad.net/~dpm/ubuntu-calendar-app/snap-all-things  
细心的开发者也许会发现,这个应用实际上是使用了同样一个和Ubuntu手机一样的代码.没有做任何的改变.从某种意义上讲,Ubuntu真正实现了融合(Convergence)应用设计.从另外一个角度上讲,这个snap应用时间上可以部署到任何一个Linux的发行版上,只有它支持snap包,并且它将不依赖于操作系统的版本发布.维护性应该是非常好的.
 
3)在哪里找到安装的文件
当我们把一个应用到我们的系统中后,我们可以通过如下的命令来查看在我们的系统中所安装的所有的snap应用:
liuxg@liuxg:~$ snap list  
Name   Version   Rev  Developer  Notes  
hello-world6.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 5ubuntucoredev  -  
ubuntu-core16.04+20160531.11-56  122  canonical  -  
webcam-webui   1 x1  -  
对于一些开发者来说,snap的一些命令可能比较陌生.我们可以通过如下的方法来得到帮助:
$ snap --help  # Or use 'snap <command> --help' for help on a specific command  
安装好我们的应用后,我们可以在如下的路径找到我们的安装的文件:
liuxg@liuxg:/var/lib/snapd/snaps$ ls  
hello-world_26.snaprssreader_x1.snap snaptest-app_x3.snap  ubuntu-core_122.snap  
rssreader-app_x1.snap  snaptest-app_x1.snap  snaptest_x1.snap  webcam-webui_x1.snap  
rssreader-app_x2.snap  snaptest-app_x2.snap  ubuntu-calculator-app_5.snap  
我们可以通过如下的方法查看系统中的mount的情况:
liuxg@liuxg:~$ mount | grep calculator  
/var/lib/snapd/snaps/ubuntu-calculator-app_5.snap on /snap/ubuntu-calculator-app/5 type squashfs (ro,relatime)  
从上面我们可以看出来,实际上我们是把/var/lib/snapd/snaps/ubuntu-calculator-app_5.snap文件通过mount的方法使之可以在/snap/ubuntu-calculator-app/5目录中可以看见.一般来说,一个snap应用在被成功安装后,它位于/snap/$name/$version/目录中.
liuxg@liuxg:/snap/ubuntu-calculator-app/5$ tree -L 2  
.  
├── bin  
│   └── calculator  
├── build  
│   └── ubuntu-calculator-app  
├── command-calculator.wrapper  
├── etc  
│   ├── apparmor.d  
│   ├── dbus-1  
│   ├── default  
│   ├── drirc  
│   ├── fonts  
│   ├── gps.conf  
│   ├── gss  
│   ├── init  
│   ├── init.d  
│   ├── ldap  
│   ├── pki  
│   ├── pulse  
│   ├── ucf.conf  
│   ├── X11  
│   └── xdg  
├── lib  
│   ├── systemd  
│   └── x86_64-linux-gnu  
├── meta  
│   ├── gui  
│   └── snap.yaml  
├── usr  
│   ├── bin  
│   ├── lib  
│   └── share  
└── var  
└── lib
细心的读者也许已经发现,在被mount的目录中的文件就像另外一个Linux的安装文件结构.它实际上是把这个calculator所需要的所有需要的文件安装到同样的一个目录中,从而摆脱对系统文件的任何需求.理论上讲,我们的应用不会因为系统的升级或版本的变化而造成不能运行的情况.
当然对于一个snap应用来说,它的snap文件包的大小也是非常大的.
-rw-r--r--  1 liuxg liuxg 122M 7月  12 12:00 ubuntu-calculator-app_2.1+snap3_amd64.snap  
从上面可以看出来,我们的snap包的大小达到122M.如果我们想查看我们所在包里面的内容,我们可以通过如下的命令来实现:
$ unsquashfs -l ubuntu-calculator-app_2.1+snap3_amd64.snap | less
squashfs-root  
squashfs-root/bin  
squashfs-root/bin/calculator  
squashfs-root/command-calculator.wrapper  
squashfs-root/etc  
squashfs-root/etc/X11  
squashfs-root/etc/X11/Xreset  
squashfs-root/etc/X11/Xreset.d  
squashfs-root/etc/X11/Xreset.d/README  
squashfs-root/etc/X11/Xresources  
squashfs-root/etc/X11/Xresources/x11-common  
squashfs-root/etc/X11/Xsession  
squashfs-root/etc/X11/Xsession.d  
squashfs-root/etc/X11/Xsession.d/20x11-common_process-args  
squashfs-root/etc/X11/Xsession.d/30x11-common_xresources  
squashfs-root/etc/X11/Xsession.d/35x11-common_xhost-local  
squashfs-root/etc/X11/Xsession.d/40x11-common_xsessionrc  
squashfs-root/etc/X11/Xsession.d/50x11-common_determine-startup  
squashfs-root/etc/X11/Xsession.d/60x11-common_localhost  
squashfs-root/etc/X11/Xsession.d/60x11-common_xdg_path  
...
我们也可以直接通过如下的命令来得到在snap包中所有的文件:
$ unsquashfs ubuntu-calculator-app_2.1+snap3_amd64.snap  
$ cd cd squashfs-root  
# Hack hack hack  
$ snapcraft snap
我们可以通过最后的命名snapcraft snap来重新打包我们的应用.
我们来看一看我们安装后的应用所占的空间大小:
375M./ubuntu-calculator-app/
也就是说一个应用安装后的空间大小是350M大小.当然这也依赖于我们所安装的应用类型.针对我们的ubuntu-calculator-app来说,我们在包里把我们所需要的Qt库及其它需要的任何东西都打入到包里面了.
 
4)发布我们的应用到商店
我们可以很方便地把我们已经开发好的应用通过"My Apps"发布到我们的应用商店.在上传我们的应用时,我们一定要记得选择"Ubuntu Core"作为商店来上传.
安装snap应用到Ubuntu 16.4桌面系统
为了上传一个新的snap应用到商店,我们只需要填入我们所需要的metadata信息及上传我们开发的snap文件即可:
安装snap应用到Ubuntu 16.4桌面系统
 
5)受限的snap应用
当一个snap应用被安装后,在运行时,它被置于一个受限的安全的沙箱之中,并且每个应用都是互相隔离的.在默认的情况下,每个snap包中的每个应用都可以互相访问对方,并协同工作.但是,如果它访问其它的应用或其它的资源,它将是受限的.
实现这个安全沙箱的技术叫做AppArmor,seccomp及device groups.每个应用都有自己的/tmp目录,devpts等.这个手限制的设置是由一个叫做snapcraft.yaml为项目文件所定义的.在这个文件中,snap申明它想要访问的资源,系统将会为它生产相应的限制.
作为一个例子,当我们使用snapcraft来生产我们想要的snap文件时,我们想要我们的snap应用最终能够访问我们用户的$HOME文件目录.在snap系统中,我们是通过一个叫做plug及slot的概念来实现的.我们可以通过如下的命令来查看我们已经存在的plug及slot。
liuxg@liuxg:~$ snap interfaces  
Slot Plug  
:camera  -  
:cups-control-  
:firewall-control-  
:gsettings   -  
:homerssreader-app,snaptest-app  
:locale-control  -  
:log-observe -  
:modem-manager   -  
:mount-observe   -  
:network -  
:network-bindwebcam-webui  
:network-control -  
:network-manager -  
:network-observe -  
:opengl  rssreader-app,snaptest-app,ubuntu-calculator-app  
:optical-drive   -  
:ppp -  
:pulseaudio  -  
:snapd-control   -  
:system-observe  -  
:timeserver-control  -  
:timezone-control-  
:unity7  rssreader-app,snaptest-app,ubuntu-calculator-app  
:x11 -
上面显示了在我的电脑系统中每个snap应用所定义的plug.当我们的应用需要访问到我们所需要的资源时,在我们的snapcraft.yaml项目文件中,我们必须申明这个权限,这样我们的应用就可以访问到我们所需要的资源.比如,针对我们的snap,如果我们想要访问$HOME目录时,我们可以在snapcraft.yaml中这样定义:
name: foo  
apps:  
bar:  
command: bin/bar  
plugs: [ home, unity7 ]
这样我们的snap应用就可以访问到$HOME目录了.否则我们就可能在/var/log/syslog文件中发现denied错误信息。
关于snapcraft.yaml的知识,我们会在以后的章节中详细介绍,所以大家先不要着急!
 
本文永久更新地址:http://www.linuxdiyf.com/linux/22311.html