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 Engine a Amazon 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.
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.