湖北竹溪县Canonical公司于最近2016年4月发布了一个新的Ubuntu 16.04系统,并且这个系统是长期支持版(LongTerm Support - LTS).它一如既往地支持debian安装包,但同时它也支持最新的snap安装包.snap安装包是Canonical公司最新发布的一种安装包的格式,它甚至可以在其它的Linux发行版上安装.更多的信息可以在我们的官方开发者网站:/desktop/或查看. Canonical公司也于2016年11月3日发布了专为物联网(IoT)打造的Ubuntu Core 16操作系统.在今天的这篇文章,我们将重点介绍Ubuntu Core系统的一些特点及其具体使用.
劳动节手抄报图片
1)什么是snap?
一个snap包:
∙ 是一个基于squashFS文件系统的文件.它包含应用代码及包含有一个应用特有的叫做snap.yaml的metadata文件.它含有一个只读的文件系统.一旦安装,它会创建一个应用特有可以写的区域,任何其它的应用都不可以访问这个区域
∙ 它完全独立于系统.在snap包里,它包含了它可以运行的所有需要的库及runtime(比如pyt
hon或Java等),并且它可以通过网路更新,同时也可以退回到上一个版本,而不影响系统的其它部分的运行
∙ 它是受限的.通过安全机制,它具有沙箱的属性,不可以随意访问外部资源,并和系统的其它部分进行隔离.它可以通过良好设计的安全策略和其它的snap进行交互.
Ubuntu Core系统的特点:
-最小的Ubuntu服务器image:由于有较小的内核,所有可以适用于更多的应用场景.应用通过简单的.snap包来提供.snap包不同于先前的debian及手机上的click包.健康零食前十名
-事务性更新 (transactional updates):通过商城的channel自动更新.事务性更新提供一个更加可靠的系统.在Ubuntu Core中含有两个root filesystem:A及B(各含有一个系统image).当A启动后,它可以用来更新B.只有B更新完整后并且没有错误后才可以切换过来到B,否则永远处于A.反之依然,我们可以用同样的办法来更新A区.当然,我们在任何时候,也可以rollback,也即回到以前的启动.这样的做法可以保证我们的系统在任何的时候Ubuntu Core及应用的更新都是完整的.这对很多需要稳定工作的环境的系统来说非
常重要,比如更新一个远在路口的webcam等.另外,更新应用或系统时只需要更新变化的部分(delta),这样传输的数据更少.
-更强的应用安全:Ubuntu Core具有业界领先的安全性.Ubuntu Core OS系统image只是可读的.任何应用不可以更改它.这样的好处是不至于由于某个应用的安装或升级从而导致系统image得到修改,进而导致有些已经安装的应用不能正常运行.每个应用都有自己的可以读写的空间,并且它们之间是不可以互相访问的.每个应用都运行于受限的沙箱之中.API的访问是由Apparmor及Seccomp来强制受限的.它提供严格的基于MAC(Mandatory-A糍粑的制作过程ccess-Control)的隔离.传统的linux应用可以访问任何一个目录,并读写它们之中的文件.这和Snappy系统是不同的.如果一个应用需要特别的库,可以使用snapcraft来安装相应的库到自己的应用的私有目录中.
大家如果想对Ubuntu Core有更多的了解,也可以参阅我的视频"Ubuntu Core 介绍(视频)".
2)16.04桌面支持
如果大家还没自己的16.04的桌面系统,大家可以在地址下载最新的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环境.
Canonical公司目前正在号召全社区把应用移植成为snap包,并最终把操作系统变为ubuntu core系统,从而打造最安全的操作系统及良好的应用维护.
对于一个All-snap Ubuntu core系统来说(如上面的右图所示),它可以分为两个逻辑部分:
∙ 只读的最基本的系统
∙ 这部分包括配置文件,标准目录,库,工具及核心的服务(比如network rvices, libc, systemd及其它).系统的这部分是只读的,里面的每个元素不可以被分别更新.这个被称之为"system-image".在一个系统中,这种image可以达到两个及以上.这些最基本的系统是一种root filesystem的形式出现的.在启动后它们之间可以互相roll back,也即如果一个系统启动有问题,可以自动切换到先前的或指定的系统image去.这个部分也是通过snap打包来实现的.
∙ 可写的snap应用及在其之上的架构(framework).它们利用上面的系统所提供的服务达成.
3)安装
为了能够使得在Ubuntu 16.04的系统上运行snap应用,我们必须做一些安装.我们直接使
用Ctrl+Alt+T打开terminal:
[html] view plain copy
1. $ sudo apt update
2. $ sudo apt install snapd
3. $ sudo apt install snapcraft build-esntial
在我们的Ubuntu 16.04系统中,我们必须打开univer,这样我们可以在以后的开发中安装snapcraft工具了.snapcraft是为了我们能够编译一个snap项目而必须的一个工具,尽管在运行时并不需要.它位于下图所示的univer channel中.这个可以在我们的Ubuntu系统中的设置中进行选择:
你也可以通过命令行的方式来添加这个univer的仓库.对于一些想急于想得到最新的snapcraft及snapd的用户来说,你可以参阅EnablePropod文章来得到最新的更新.
在这里,我们简单地介绍一下所使用的术语:
∙ snapd:它是一个帮我们管理snap安装,卸载及通过事务性更新(transactional update)的一个环境.同时也帮我对老的版本的snap进行垃圾回收(garbage collection).snapd位于我们Ubuntu Core系统的/usr/lib/snapd/snapd
∙ snapcraft:这是一个帮我们打包一个snap应用的工具.snapcraft.yaml是用来定义如何把一个应用打包为snap包的yaml文件格式.snapcraft工具利用它打包.
然后,你就可以在我们的terminal中安装及运用一个我们所需要的应用:
[html] view plain copy
1. $ sudo snap install ss-qt
2. $ ss-qt
我们可以在我们的电脑的dash中直接运行我们所安装的应用:
如果大家想安装更多的应用的话,可以直接到我们桌面系统的应用商店进行安装:
当一个应用被成功安装以后,我们也可以通过如下的命令来查看:
[html] view plain copy
1. liuxg@liuxg:~/snappy/desktop/rssreader$ snap list
2. Name Version Rev Developer Notes
3. hello-world 6.3 27 canonical -
4. hello-world-cli 0.1 x1 -
5. hello-xiaoguo 1.0 x2 -
6. rssreader-app 1.0 x2 -
7. snappy-debug 0.23 22 canonical -
8. 腊八的习俗telegram-rgiuns x1 -
9. test-licen 0.1 x1 -
10. ubuntu-calculator-app 2.1+snap3 5 ubuntucoredev -
11. ubuntu-core 16.04+.11-56 122 canonical -
12. webcam-webui 1.0 x1 -
我们可以从上面看出来所有已经被成功安装过的应用.每个应用被安装后,就有一个自己的Version号码,同时也有一个Rev号码.对于从Ubuntu Store商店里安装后的应用,这个Rev是一个数字号码,比如上面的ubuntu-calculator-app应用的Rev号码是5,相对于其它的不是从商店安装的应用来说,这个号码不是一个数字.
我们可以使用snap info命令来得到一个snap的详细信息:
[html] view plain copy
1. $ snap info core
2. name: core
划拳怎么玩
3. summary: "snapd runtime environment"