安装snap应用到Ubuntu16.4桌面系统

本文发布时间: 2019-Mar-22
Canonical公司于最近2016年4月发布了一个新的16.04系统,并且这个系统是长期支持版(Long Term Support - LTS).它一如既往地支持debian安装包,但同时它也支持最新的snap安装包.snap安装包是Canonical公司最新发布的一种安装包的格式.更多的信息可以在我们的官方开发者网站:https://developer.ubuntu.com/en/desktop/查看.1)16.04桌面支持从上面的图中,我们可以看出来在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在我们的16.04系统中,我们必须打开universe,这样我们可以在以后的开发中安装snapcraft工具了.然后,你就可以在我们的terminal中安装及运用一个我们所需要的应用:$ sudo snap install ubuntu-calculator-app$ ubuntu-calculator-app.calculator我们可以在我们的电脑的dash中直接运行我们所安装的应用:如果大家想安装更多的应用的话,可以直接到我们桌面系统的应用商店进行安装:从上面我们可以看出来,calculator应用也是在里面的.如果大家想知道这个应用是如何实现的,请参考源码:https://code.launchpad.net/~dpm/ubuntu-calendar-app/snap-all-things细心的开发者也许会发现,这个应用实际上是使用了同样一个和Ubuntu手机一样的代码.没有做任何的改变.从某种意义上讲,Ubuntu真正实现了融合(Convergence)应用设计.从另外一个角度上讲,这个snap应用时间上可以部署到任何一个Linux的发行版上,只有它支持snap包,并且它将不依赖于操作系统的版本发布.维护性应该是非常好的.我们怎么通过命令行来查找我们所需要的snap应用呢?liuxg@liuxg:~$ snap find calculatorName Version Developer Notes Summaryubuntu-calculator-app 2.1+snap3 ubuntucoredev - Ubuntu Calculator application for the Unity 7 desktop我们可以通过上面的命令来查找在商店里应用名字含有calculator的应用.我们可以通过如下的命令来寻找所有在商店里发布的snap应用:liuxg@liuxg:~$ snap find Name Version Developer Notes Summaryab 1.0 snappy-test - Test snap with shortest nameag-mcphail 1.0.1 njmcphail - The Silver Searcher - mcphail's build and upstream git versionalsa-utils 1.1.0-1 woodrow - Utilities for configuring and using ALSAapktool 2.1.1 ligboy - A tool for reverse engineering 3rd party, closed, binary Android apps....当然,我们也可以通过如下的方法找寻到我们所需要的应用:liuxg@liuxg:~$ snap find | grep hellohello 2.10 canonical - GNU Hello, the "hello world" snaphello-bluet 0.1 bluet - Qt Hello World examplehello-huge 1.0 noise - a really big snaphello-snap 0.01 muhammad - GNU hello-snap, the "Hello, Snap!" snap3)删除一个snap应用刚才我们已经成功安装了一个snap应用到我们的桌面系统中.我们现在可以通过如下的命令来删除该应用.我们首先在命令行中显示已经被安装的应用:liuxg@liuxg:~$ snap listName Version Rev Developer Noteshello-world 6.1 26 canonical -rssreader 1.0 x1 devmoderssreader-app 1.0 x2 -snaptest 1 x1 devmodesnaptest-app 1 x3 devmodeubuntu-calculator-app 2.1+snap3 5 ubuntucoredev -ubuntu-core 16.04+20160531.11-56 122 canonical -webcam-webui 1 x1 -在上面,我们看到已经安装了ubuntu-calculator-app应用.我们可以通过如下的方法来删除它.liuxg@liuxg:~$ sudo snap remove ubuntu-calculator-app[sudo] password for liuxg: Done重新显示我们已经安装的snap应用列表:liuxg@liuxg:~$ snap listName Version Rev Developer Noteshello-world 6.1 26 canonical -rssreader 1.0 x1 devmoderssreader-app 1.0 x2 -snaptest 1 x1 devmodesnaptest-app 1 x3 devmodeubuntu-core 16.04+20160531.11-56 122 canonical -webcam-webui 1 x1 显然我们再也找不到ubuntu-calculator-app应用了.4)在哪里找到安装的文件当我们把一个应用到我们的系统中后,我们可以通过如下的命令来查看在我们的系统中所安装的所有的snap应用:liuxg@liuxg:~$ snap listName Version Rev Developer Noteshello-world 6.1 26 canonical -rssreader 1.0 x1 devmoderssreader-app 1.0 x2 -snaptest 1 x1 devmodesnaptest-app 1 x3 devmodeubuntu-calculator-app 2.1+snap3 5 ubuntucoredev -ubuntu-core 16.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$ lshello-world_26.snap rssreader_x1.snap snaptest-app_x3.snap ubuntu-core_122.snaprssreader-app_x1.snap snaptest-app_x1.snap snaptest_x1.snap webcam-webui_x1.snaprssreader-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 | lesssquashfs-rootsquashfs-root/binsquashfs-root/bin/calculatorsquashfs-root/command-calculator.wrappersquashfs-root/etcsquashfs-root/etc/X11squashfs-root/etc/X11/Xresetsquashfs-root/etc/X11/Xreset.dsquashfs-root/etc/X11/Xreset.d/READMEsquashfs-root/etc/X11/Xresourcessquashfs-root/etc/X11/Xresources/x11-commonsquashfs-root/etc/X11/Xsessionsquashfs-root/etc/X11/Xsession.dsquashfs-root/etc/X11/Xsession.d/20x11-common_process-argssquashfs-root/etc/X11/Xsession.d/30x11-common_xresourcessquashfs-root/etc/X11/Xsession.d/35x11-common_xhost-localsquashfs-root/etc/X11/Xsession.d/40x11-common_xsessionrcsquashfs-root/etc/X11/Xsession.d/50x11-common_determine-startupsquashfs-root/etc/X11/Xsession.d/60x11-common_localhostsquashfs-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库及其它需要的任何东西都打入到包里面了.5)发布我们的应用到商店我们可以很方便地把我们已经开发好的应用通过"My Apps"发布到我们的应用商店.在上传我们的应用时,我们一定要记得选择"Ubuntu Core"作为商店来上传.为了上传一个新的snap应用到商店,我们只需要填入我们所需要的metadata信息及上传我们开发的snap文件即可:6)受限的snap应用当一个snap应用被安装后,在运行时,它被置于一个受限的安全的沙箱之中,并且每个应用都是互相隔离的.在默认的情况下,每个snap包中的每个应用都可以互相访问对方,并协同工作.但是,如果它访问其它的应用或其它的资源,它将是受限的.实现这个安全沙箱的技术叫做AppArmor,seccomp及device groups.每个应用都有自己的/tmp目录,devpts等.这个手限制的设置是由一个叫做snapcraft.yaml为项目文件所定义的.在这个文件中,snap申明它想要访问的资源,系统将会为它生产相应的限制.作为一个例子,当我们使用snapcraft来生产我们想要的snap文件时,我们想要我们的snap应用最终能够访问我们用户的$HOME文件目录.在snap系统中,我们是通过一个叫做plug及slot的概念来实现的.我们可以通过如下的命令来查看我们已经存在的plug及slot.liuxg@liuxg:~$ snap interfacesSlot Plug:camera -:cups-control -:firewall-control -:gsettings -:home rssreader-app,snaptest-app:locale-control -:log-observe -:modem-manager -:mount-observe -:network -:network-bind webcam-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: fooapps: bar: command: bin/bar plugs: [ home, unity7 ] 这样我们的snap应用就可以访问到$HOME目录了.否则我们就可能在/var/log/syslog文件中发现denied错误信息.关于snapcraft.yaml的知识,我们会在以后的章节中详细介绍,所以大家先不要着急!7)如何得到snap帮助就想我们上面所写的那样,我们可以通过如下命令来得到snap的帮助:liuxg@liuxg:~$ snap --helpUsage: snap [OPTIONS] <command>The snap tool interacts with the snapd daemon to control the snappy software platform.Application Options: --version print the version and exitHelp Options: -h, --help Show this help messageAvailable commands: abort Abort a pending change ack Adds an assertion to the system change List a change's tasks changes List system changes connect Connects a plug to a slot create-user Creates a local system user disconnect Disconnects a plug from a slot find Finds packages to install help Help install Install a snap to the system interfaces Lists interfaces in the system known Shows known assertions of the provided type list List installed snaps login Authenticates on snapd and the store logout Log out of the store refresh Refresh a snap in the system remove Remove a snap from the system run Run the given snap command try Try an unpacked snap in the system针对每个snap下面的命令,我们可以通过如下的方式来得它的帮助信息:liuxg@liuxg:~$ snap install -hUsage: snap [OPTIONS] install [install-OPTIONS] <snap>The install command installs the named snap in the system.Application Options: --version print the version and exitHelp Options: -h, --help Show this help message[install command options] --channel= Use this channel instead of stable --edge Install from the edge channel --beta Install from the beta channel --candidate Install from the candidate channel --stable Install from the stable channel --devmode Install the snap with non-enforcing security通过上面的方法,我们可以对snap命令有更深的理解.8)如何运行一个snap应用我们可以在Dash中运行我们的应用,同时,我们也可以在terminal中通过命令行的方式来启动我们的应用.在我们设计我们的snap应用时,通常我们使用一个叫做snapcraft..yaml的文件.我们现在来用一个例子来说明:snapcraft.yamlname: snaptest-appversion: 1summary: This is a summarydescription: This is the descriptionconfinement: devmodeapps: test: command: desktop-launch $SNAP/lib/x86_64-linux-gnu/bin/snaptest plugs: [home,unity7,opengl]parts: application: source: ./src plugin: qmake qt-version: qt5 build-packages: - cmake - gettext - intltool - ubuntu-touch-sounds - suru-icon-theme - qml-module-qttest - qml-module-qtsysteminfo - qml-module-qt-labs-settings - qtdeclarative5-u1db1.0 - qtdeclarative5-qtmultimedia-plugin - qtdeclarative5-qtpositioning-plugin - qtdeclarative5-ubuntu-content1 - qt5-default - qtbase5-dev - qtdeclarative5-dev - qtdeclarative5-dev-tools - qtdeclarative5-folderlistmodel-plugin - qtdeclarative5-ubuntu-ui-toolkit-plugin - xvfb stage-packages: - ubuntu-sdk-libs - qtubuntu-desktop - qml-module-qtsysteminfo snap: - -usr/share/doc - -usr/include after: [desktop/qt5]在上面的snapcraft.yaml文件中,我们的包的名字叫做"snaptest-app".在apps下定义了一个应用叫做"test".那么在命令行中,我们可以通过如下的方式来运行我们的最终的应用:$ snaptest-app.test也就是说,我们可以通过<<package-name>>.<<application-name>>来启动我们的应用.


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2024-Mar-04 02:08pm
栏目列表