
snappy 代表了兩種意思,它是一種用來替代 deb 的新的打包格式;也是一個用來更新系統的前端,從coreos、紅帽子和其他系統借鑒了原子更新這個想法。自從樹莓派 2 投入市場,canonical 很快就釋出了用于樹莓派的snappy core 版本。而第一代樹莓派因為是基于armv6 ,ubuntu 的arm 鏡像是基于armv7 ,是以不能運作ubuntu 。不過這種狀況現在改變了,canonical 通過釋出 snappy core 的rpi2 鏡像,抓住機會證明了snappy 就是一個用于雲計算,特别是用于物聯網的系統。
snappy 同樣可以運作在其它像amazon ec2, microsofts azure, google的 compute engine 這樣的雲端上,也可以虛拟化在 kvm、virtuabox 和vagrant 上。canonical ubuntu 已經擁抱了微軟、谷歌、docker、openstack 這些重量級選手,同時也與一些小項目達成合作關系。除了一些創業公司,比如 ninja sphere、erle robotics,還有一些開發闆生産商,比如 odroid、banana pro, udoo, pcduino 和 parallella 、全志,snappy 也提供了支援。snappy core 同時也希望盡快運作到路由器上來幫助改進路由器生産商目前很少更新固件的政策。
接下來,讓我們看看怎麼樣在樹莓派 2 上運作 ubuntu snappy core。
sudo 已經配置好了可以直接用,安全起見,你應該使用以下指令來修改你的使用者名
<code>$ sudo usermod -l <new name> <old name></code>
或者也可以使用<code>adduser</code> 為你添加一個新使用者。
因為rpi缺少硬體時鐘,而 snappy core 鏡像并不知道這一點,是以系統會有一個小 bug:處理某些指令時會報很多錯。不過這個很容易解決:
使用這個指令來确認這個bug 是否影響:
<code>$ date</code>
如果輸出類似 "thu jan 1 01:56:44 utc 1970", 你可以這樣做來改正:
<code>$ sudo date --set="sun apr 04 17:43:26 utc 2015"</code>
改成你的實際時間。
現在你可能打算檢查一下,看看有沒有可用的更新。注意通常使用的指令是不行的:
<code>$ sudo apt-get update && sudo apt-get distupgrade</code>
這時系統不會讓你通過,因為 snappy 使用它自己精簡過的、基于dpkg 的包管理系統。這麼做的原因是 snappy 會運作很多嵌入式程式,而同時你也會試圖所有事情盡可能的簡化。
讓我們來看看最關鍵的部分,了解一下程式是如何與 snappy 工作的。運作 snappy 的sd 卡上除了 boot 分區外還有3個分區。其中的兩個構成了一個重複的檔案系統。這兩個平行檔案系統被固定挂載為隻讀模式,并且任何時刻隻有一個是激活的。第三個分區是一個部分可寫的檔案系統,用來讓使用者存儲資料。通過更新系統,标記為'system-a' 的分區會保持一個完整的檔案系統,被稱作核心,而另一個平行的檔案系統仍然會是空的。
如果我們運作以下指令:
<code>$ sudo snappy update</code>
系統将會在'system-b' 上作為一個整體進行更新,這有點像是更新一個鏡像檔案。接下來你将會被告知要重新開機系統來激活新核心。
重新開機之後,運作下面的指令可以檢查你的系統是否已經更新到最新版本,以及目前被激活的是哪個核心
<code>$ sudo snappy versions -a</code>
經過更新-重新開機兩步操作,你應該可以看到被激活的核心已經被改變了。
因為到目前為止我們還沒有安裝任何軟體,是以可以用下面的指令更新:
<code>$ sudo snappy update ubuntu-core</code>
如果你打算僅僅更新特定的os 版本這就夠了。如果出了問題,你可以使用下面的指令復原:
<code>$ sudo snappy rollback ubuntu-core</code>
這将會把系統狀态復原到更新之前。
盡管 ubuntu snappy core 吸引了我們去研究新型的 snappy 安裝包格式和 canonical 式的原子更新操作,但是因為有限的可用應用,它現在在生産環境裡還不是很有用。但是既然搭建一個 snappy 環境如此簡單,這看起來是一個學點新東西的好機會。
本文來自雲栖社群合作夥伴“linux中國”,原文釋出日期:2015-08-29