Hlavní navigace

Snappy Ubuntu Core: instalace lusknutím prstů

22. 1. 2015
Doba čtení: 8 minut

Sdílet

Technologie transakční instalace obrazů systému a aplikací, které byly původně vyvinuty pro telefony, je nyní možné využívat v cloudu. Názvem Snappy Ubuntu Core tvůrci říkají, že ovládání je snadné a rychlé jako lusknout prsty. Popíšeme vlastnosti systému a provedeme vás krátkou zkouškou systému.

V úterý 9. prosince 2014 představil Mark Shuttleworth, zakladatel společnosti Canonical, na svém blogu novou cloudovou technologii, která kombinuje minimální systém Ubuntu Core s „luskacími“ nebo anglicky „snappy“ transakčními aktualizacemi původně z Ubuntu Phone.

Ubuntu Core si klade za cíl poskytovat minimální prostředí jako základ pro demonstrační obrazy aplikací nebo kontejnery Linuxu jako je LXC nebo Docker. K dispozici je funkční uživatelské rozhraní a plná podpora pro instalaci dodatečného software z repozitářů Ubuntu pomocí příkazu apt-get.

Technologie vyvinutá pro telefony zajišťuje, aby

  • uživatelské aplikace nemohly zasahovat do operačního systému a ani do běhu jiných aplikací,
  • aktualizace byly co nejrychlejší a nejmenší – probíhaly jako když lusknete prsty.

Místo aktualizace několika balíčků a řešení vzájemných závislostí se bude stahovat obraz aplikace a při aktualizaci se bude aplikovat pouze změnový soubor. Vzhledem k tomu, že každá verze je kompletní a na okolí nezávislý obraz, je možné v případě problémů provést návrat k obrazu předchozí verze.

Kombinace obou technologií nazvaná Snappy Ubuntu Core je Ubuntu Core, do kterého instalujeme aplikace pomocí nástroje snappy místo původního  apt-get.

Provedeme vás instalaci virtuálního serveru, pak nahlédneme pod pokličku systému – jedná se o jádro Ubuntu o velikosti 100MB. Předvedeme instalaci owncloud a aktualizaci na novější verzi Ubuntu Core. Autor předpokládá, že čtenář zná základy práce v bashi a ssh.

Instalace Ubuntu Core

Začneme instalací potřebných balíčků a ověříme, že náš hardware umožňuje spouštět virtuální počítače. Testovací systém bylo Ubuntu 14.10 s funkčním připojením na internet.

$ sudo apt-get install qemu-kvm
# zvolte ano a instalujte balíčky
$ kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used

Toto je nejlepší možný výsledek ověření – znamená to, že snappy pojede na vašem systému rychle a bude využívat výhodu hardwarové akcelerace ve vašem CPU. Pokud není KVM ve vašem systému podporováno, je možné zkusit Ubuntu Core v cloudu na Microsoft Azure, Google Compute EngineAmazon EC2.

Další krok je stáhnout obraz systému:

$ wget http://cdimage.ubuntu.com/ubuntu-core/preview/ubuntu-core-alpha-01.img

Pak můžeme spustit virtuální počítač pomocí kvm:

$ kvm -m 512 -redir :8443::443 -redir :8022::22 ubuntu-core-alpha-01.img

Parametr -m určuje velikost paměti RAM a parametry redir mapují porty virtuálního počítače na hostitelský. Po spuštění příkazu by se mělo otevřít okno ukazující startovací sekvenci vašeho virtuálního počítače s Ubuntu Core vevnitř. Jakmile se objeví výzva k přihlášení, můžete se přihlásit přímo nebo pomocí ssh z terminálu hostitelského počítače. Budeme používat  ssh.

$ ssh -p 8022 ubuntu@localhost

Pro toto předváděcí vydání je pro uživatele „ubuntu“ přednastaveno heslo „ubuntu“. V cloudu bude třeba určit vlastní uživatelské jméno a SSH klíče pro zabezpečený přístup, pokud budete chtít mít možnost se do počítače přihlásit. My zůstaneme u výše uvedeného uživatelského jména a hesla.

Prohlídka

Nejdříve pár základních příkazů, z kterých vidíme, že ve výchozím stavu na serveru běží ssh démon a je otevřený port 22. Obsah souboru stav1.txt nebudu uvádět, je dlouhý. Pozorný čtenář si to bude jistě chtít ověřit sám.

$ netstat -an |grep LISTEN > stav1.txt
$ ps -ef |cut -c1-8,48-1000 |sort >> stav1.txt
$ ls /apps >> stav1.txt
$ cat stav1.txt

Místo apt-get používáme nový správce balíčků  snappy.

$ apt-get install docker
Ubuntu Core does not use apt-get, see 'snappy --help'!

Dobrá, zkusím to:

$ snappy --help

Nezdařenou instalaci Dockeru provedeme příkazem:

$ sudo snappy install docker
docker      4 MB     [=================================================================================================]    OK
Part    Tag   Installed  Available  Fingerprint     Active
docker  edge  1.3.2.007  -          b1f2f85e77adab  *

A přidáme ještě Owncloud:

$ sudo snappy install owncloud
owncloud     23 kB     [===============================================================================================]    OK
Part      Tag   Installed  Available  Fingerprint     Active
owncloud  edge  7.0.3.008  -          81ebbbea41f48e  *

Když prohlížečem půjdeme na https://localhost:8443, můžeme vidět běžící instanci Owncloudu. Lusk. A… nic. Přestože to vypadalo, že je instalace hotová, tak bylo třeba počkat zhruba 10 minut, než začal přístup prohlížečem fungovat. Když během čekání pustíme top, můžeme sledovat jak procesorový čas obsazuje především proces Dockeru. Nakonec se objevují procesy Apache a Mysql a využití systémových prostředků se vrátilo do standardního stavu. Podívejme se, co je jinak:

$ netstat -an |grep LISTEN > stav2.txt
$ ps -ef |cut -c1-8,48-1000 |sort >> stav2.txt
$ ls /apps >> stav2.txt
$ diff stav1.txt stav2.txt

Vidíme, že v procesech je navíc apache2, mysqld, docker a navíc je otevřený port 443. Zajímavé je, že mysql databáze běží pod uživatelem sshd a že ji nevidíme poslouchat na portu 3306. Předpokládám, že se jedná o kouzla Dockeru související s procesem docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 443 -container-ip 172.17.0.2 -container-port 443  – Docker není předmětem článku, tak se tím nebudeme dál zabývat. Dále vidíme, že v /apps přibyly adresáře obou čerstvě instalovaných aplikací.

Tak to bychom měli, nemůžeme ještě můžeme přidat? Když zvolíme vhodné klíčové slovo, vypadá to na první pohled, že hodně, ale v repozitáři toho zatím moc není. Na druhou stranu, kdo se podívá na oba balíčky podrobně, uvidí, že jsou nabízené webové aplikace psané v pythonu nebo google go:

$snappy search webserver
Part                  Version  Description
go-example-webserver  1.0.1    Minimal Golang webserver for snappy
xkcd-webserver        0.3.1    Show random XKCD compic via a build-in webserver

Zrekapitulujeme, co máme:

$ snappy info
release: ubuntu-core/devel
frameworks: docker
apps: owncloud

Když budu citovat Marka Shuttlewortha, vsadil by se, že takto krátký a pro člověka srozumitelný výpis bude mít většina Snappy Ubuntu Core instancí. Vidíme, že docker je framework a owncloud je aplikace. Framework je rozšíření systému a musí mít na míru dělaný bezpečnostní profil vyrobený ve spolupráci se zaměstnanci Canonical a musí projít schvalovacím řízením. Aplikace jsou od sebe vzájemně izolované a mají jen omezené možnosti pohybu v systému – to znamená, že není třeba žádná ruční revize aplikací a můžou jít od dodavatele přímo k vám.

Jak se provádí aktualizace?

$ sudo snappy update-versions
1 updated components are available with your current stability settings.
$ snappy versions
Part         Tag   Installed  Available  Fingerprint     Active
ubuntu-core  edge  140        141        184ad1e863e947  *
docker       edge  1.3.2.007  -          b1f2f85e77adab  *
owncloud     edge  7.0.3.008  -          81ebbbea41f48e  *

Ve sloupci Available vidíme, že je dostupná novější verze Ubuntu Core. Zkusíme provést aktualizaci.

$ sudo snappy update ubuntu-core
ubuntu-core     61 MB     [============================================================================================]    OK
Reboot to use the new ubuntu-core.

Vrátí se, že pro aktualizaci je třeba provést restart. Zajímavý detail je, že aktualizace má 61 MB, pokud to chápu správně, mělo by se jednat o rozdílový soubor 100 MB jádra – ale na to je dost velký. Připomeňme si, že se jedná o demonstrační verzi, možná se to ještě změní. Když nyní spustíme versions -a, uvidíme i neaktivní komponenty:

$ snappy versions -a
Part         Tag   Installed  Available  Fingerprint     Active
ubuntu-core  edge  140        141        184ad1e863e947  *
ubuntu-core  edge  141        -          7f068cb4fa876c  R
docker       edge  1.3.2.007  -          b1f2f85e77adab  *
owncloud     edge  7.0.3.008  -          81ebbbea41f48e  *
Reboot to use the new ubuntu-core.

Vidíme, že do seznamu přibyla nová verze ubuntu-core, která není aktivní. Restartujeme do nové verze systému:

$ sudo reboot

Počkáme, až virtuální server nastartuje, a pak se opět přihlásíme.

$ ssh -p 8022 ubuntu@localhost

Ověříme jak to dopadlo:

$ snappy versions -a
Part         Tag   Installed  Available  Fingerprint     Active
ubuntu-core  edge  141        -          7f068cb4fa876c  *
ubuntu-core  edge  140        -          184ad1e863e947  R
docker       edge  1.3.2.007  -          b1f2f85e77adab  *
owncloud     edge  7.0.3.008  -          81ebbbea41f48e  *

Vidíme dvě verze ubuntu-core, ale aktivní je novější verze. Tak a teď to ale přestalo všechno fungovat – lusk – a bohužel, ač velmi neradi, musíme se vrátit zpět. Naštěstí to není velký problém, stačí znovu lusknout prsty.

$ sudo snappy rollback ubuntu-core
Rolling back ubuntu-core: (edge 141 7f068cb4fa876c -> edge 140 184ad1e863e947)
Reboot to use the new ubuntu-core.
$ sudo reboot
$ ssh -p 8022 ubuntu@localhost
$ snappy versions -a
Part         Tag   Installed  Available  Fingerprint     Active
ubuntu-core  edge  140        141        184ad1e863e947  *
ubuntu-core  edge  141        -          7f068cb4fa876c  R
docker       edge  1.3.2.007  -          b1f2f85e77adab  *
owncloud     edge  7.0.3.008  -          81ebbbea41f48e  *
Reboot to use the new ubuntu-core.

Lusk. Vidíme, že je aktivní starší verze ubuntu-core a píše nám to, že po restartu bude aktivní opět novější verze. Protože s novější verzí ubuntu-core nám naše aplikace nefungují správně, tak to zřejmě nebude dobrý nápad restartovat, že ne? Ale co když na chvíli přestane fungovat elektrický proud, selže UPS a pak selže i záložní UPS a provede se samovolný restart? Že se to nemůže stát? Raději restart uděláme ručně a přesvědčíme se, zda bude aplikace fungovat i po velmi nepravděpodobném nechtěném restartu.

$ sudo reboot
$ ssh -p 8022 ubuntu@localhost
$ snappy versions -a
Part         Tag   Installed  Available  Fingerprint     Active
ubuntu-core  edge  140        141        184ad1e863e947  *
ubuntu-core  edge  141        -          7f068cb4fa876c  R
docker       edge  1.3.2.007  -          b1f2f85e77adab  *
owncloud     edge  7.0.3.008  -          81ebbbea41f48e  *
Reboot to use the new ubuntu-core.

Zdá se, že po restartu jsme zůstali u staré verze systému, chování je pořádku a chybná informace o přechodu na novější (nefunkční) verzi systému se stále vypisuje.

Lusk.

Struktura souborového systému

Zajímá vás, proč je třeba restart? Jak to funguje na pozadí? Snappy systém je rozdělen na následující diskové oddíly:

Název oddílu Zařízení Výchozí velikost (GB) Zapisovatelné? Popis
system-a /dev/sda1 2 Ne Primární root filesystem
system-b /dev/sda2 2 Ne Sekundární root filesystem
writable /dev/sda3 20 – (2+2) = ~16 Ano Všechny perzistentní uživatelská data

Root oddíly

Dva root oddíly slouží k zajištění podpory obnovy ze zálohu. Příkaz snappy nastavuje, z kterého oddílu se systém nastartuje. Při prvotní instalaci dojde k nahrání systému do oddílu system-a a oddíl system-b je naformátovaný, ale prázdný. Administrátora vůbec nemusí zajímat, z kterého oddílu právě systém nastartoval, stačí mu vědět, která verze systému:

  • Právě běží,
  • je na druhém oddíle,
  • je dostupná ke stažení.

Při aktualizaci systému dojde k zapsání nové verze do nepoužívaného oddílu a doporučení uživateli restartovat. Při restartu se systém načte z dříve nepoužívaného oddílu system-b, tedy nově instalovaná verze. Případná další aktualizace systému bude provedena opět do neaktivního oddílu disku.

root_podpora

Závěr

Popsali jsme a vyzkoušeli Snappy Ubuntu Core. V navazujícím článku se můžete dočíst více o snappy aplikacích. Jaká je struktura zapisovatelného oddílu disku a jak vytvořit vlastní snappy aplikaci, kterou zkusíme smazat systém.

Lusk.

Použité zdroje

Byl pro vás článek přínosný?