首頁 > 軟體

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

2020-06-16 17:34:38

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(比如PythonJava等),並且它可以通過網路更新,同時也可以退回到上一個版本,而不影響系統的其它部分的執行
  • 它是受限的.通過安全機制,它具有沙箱的屬性,不可以隨意存取外部資源,並和系統的其它部分進行隔離.它可以通過良好設計的安全策略和其它的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應用了.
 

更多詳情見請繼續閱讀下一頁的精彩內容http://www.linuxidc.com/Linux/2016-08/134676p2.htm


IT145.com E-mail:sddin#qq.com