歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 安裝snap應用到Ubuntu 16.4桌面系統

安裝snap應用到Ubuntu 16.4桌面系統

日期:2017/2/28 13:49:30   编辑:Linux教程

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?

一個snap包:
  • 是一個基於squashFS文件系統的文件.它包含應用代碼及包含有一個應用特有的叫做snap.yaml的metadata文件.它含有一個只讀的文件系統.一旦安裝,它會創建一個應用特有可以寫的區域,任何其它的應用都不可以訪問這個區域
  • 它完全獨立於系統.在snap包裡,它包含了它可以運行的所有需要的庫及runtime(比如python或Java等),並且它可以通過網路更新,同時也可以退回到上一個版本,而不影響系統的其它部分的運行
  • 它是受限的.通過安全機制,它具有沙箱的屬性,不可以隨意訪問外部資源,並和系統的其它部分進行隔離.它可以通過良好設計的安全策略和其它的snap進行交交互.

2)16.04桌面支持

如果大家還沒自己的16.04的桌面系統,大家可以在地址下載最新的16.04的系統.

從上面的圖中,我們可以看出來在16.04的桌面中支持兩種格式的安裝包:snapdebian.另外我們可以看出,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 services, libc, systemd及其它).系統的這部分是只讀的,裡面的每個元素不可以被分別更新.這個被稱之為"system-image".在一個系統中,這種image可以達到兩個及以上.這些最基本的系統是一種root filesystem的形式出現的.在啟動後它們之間可以互相roll back,也即如果一個系統啟動有問題,可以自動切換到先前的或指定的系統image去.這個部分也是通過snap打包來實現的.
  • 可寫的snap應用及在其之上的架構(framework).它們利用上面的系統所提供的服務達成.

3)安裝

為了能夠使得在Ubuntu 16.04的系統上運行snap應用,我們必須做一些安裝.我們直接使用Ctrl+Alt+T打開terminal:
$ sudo apt update
$ sudo apt install snapd
$ sudo apt install snapcraft
在我們的Ubuntu 16.04系統中,我們必須打開universe,這樣我們可以在以後的開發中安裝snapcraft工具了.snapcraft是為了我們能夠編譯一個snap項目而必須的一個工具,盡管在運行時並不需要.它位於下圖所示的universe channel中.這個可以在我們的Ubuntu系統中的設置中進行選擇: 你也可以通過命令行的方式來添加這個universe的倉庫.
在這裡,我們簡單地介紹一下所使用的術語:
  • snapd:它是一個幫我們管理snap安裝,卸載及通過事務性更新(transactional update)的一個環境.同時也幫我對老的版本的snap進行垃圾回收(garbage collection)
  • snapcraft:這是一個幫我們打包一個snap應用的工具.snapcraft.yaml是用來定義如何把一個應用打包為snap包的yaml文件格式.snapcraft工具利用它打包.
然後,你就可以在我們的terminal中安裝及運用一個我們所需要的應用:
$ 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                  -
我們可以從上面看出來所有已經被成功安裝過的應用.每個應用被安裝後,就有一個自己的Version號碼,同時也有一個Rev號碼.對於從Ubuntu Store商店裡安裝後的應用,這個Rev是一個數字號碼,比如上面的ubuntu-calculator-app應用的Rev號碼是5,單對於其它的不是從商店安裝的應用來說,這個號碼不是一個數字. 一般來說,我們安裝snap應用時在默認的情況下,我們是從stable channel進行安裝的.我們可以通過如下的命令從beta/edge channel進行安裝:
$ snap install hello --channel-beta
或:
$ snap refresh hello --channel=beta
Name    Version   Rev   Developer   Notes
hello   2.10.1    29    canonical   -
hello  (beta) installed
從上面我們可以看出來,calculator應用也是在裡面的.如果大家想知道這個應用是如何實現的,請參考源碼:
https://code.launchpad.net/~dpm/ubuntu-calendar-app/snap-all-things

細心的開發者也許會發現,這個應用實際上是使用了同樣一個和Ubuntu手機一樣的代碼.沒有做任何的改變.從某種意義上講,Ubuntu實現了真正意義上的融合(Convergence)應用設計.在為了,我們只需要一個應用的snap包,它就可以直接運行於不同屏幕尺寸上,並自動適配屏幕尺寸從而得到最佳的顯示效果.比如在我們的另外一個教程中"如何把一個qmake的Ubuntu手機應用打包為一個snap應用",它展示了如何把一個手機的應用轉換為一個可以在桌面系統運行的snap應用. 從另外一個角度上講,這個snap應用時間上可以部署到任何一個支持snap包安裝的Linux的發行版上,只要有它支持snap包,並且它將不依賴於操作系統的版本發布.維護性應該是非常好的. 在通常情況下,一個snap應用每天會在後台檢查最新的snap版本,並自動安裝.當然,我們也可以通過如下的命令來更新我們的snap應用:
$ snap refresh <snap name>
我們也可以通過如下的命令來rollback到以前的版本(從snapd 2.11版本開始支持)
$ snap revert <snap name>
我們怎麼通過命令行來查找我們所需要的snap應用呢?
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
目前find命令只支持搜索在stable channel的應用.我們可以通過上面的命令來查找在商店裡應用名字含有calculator的應用.我們可以通過如下的命令來尋找所有在商店裡發布的snap應用:
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 Android 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應用

剛才我們已經成功安裝了一個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                  -
在上面,我們看到已經安裝了ubuntu-calculator-app應用.我們可以通過如下的方法來刪除它.
liuxg@liuxg:~$ sudo snap remove ubuntu-calculator-app
[sudo] password for liuxg: 

Done
重新顯示我們已經安裝的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-core    16.04+20160531.11-56  122  canonical  -
webcam-webui   1                     x1 
顯然我們再也找不到ubuntu-calculator-app應用了.
Copyright © Linux教程網 All Rights Reserved