Canonical公司於最近2016年4月發布了一個新的Ubuntu 16.04系統,並且這個系統是長期支持版(LongTerm Support - LTS).它一如既往地支持debian安裝包,但同時它也支持最新的snap安裝包.snap安裝包是Canonical公司最新發布的一種安裝包的格式,它甚至可以在其它的Linux發行版上安裝.更多的信息可以在我們的官方開發者網站:https://developer.ubuntu.com/en/desktop/或http://snapcraft.io/查看.
從上面的圖中,我們可以看出來在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系統來說(如上面的右圖所示),它可以分為兩個邏輯部分:
$ sudo apt update $ sudo apt install snapd $ sudo apt install snapcraft在我們的Ubuntu 16.04系統中,我們必須打開universe,這樣我們可以在以後的開發中安裝snapcraft工具了.snapcraft是為了我們能夠編譯一個snap項目而必須的一個工具,盡管在運行時並不需要.它位於下圖所示的universe channel中.這個可以在我們的Ubuntu系統中的設置中進行選擇: 你也可以通過命令行的方式來添加這個universe的倉庫.
$ sudo snap install ubuntu-calculator-app $ ubuntu-calculator-app.calculator
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
$ 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
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應用了.