Vlastní linuxová distribuce na Azure

5. 5. 2014
Doba čtení: 5 minut

Sdílet

Pořídit si vlastní linuxový server není dnes už vůbec nic těžkého. Můžete si dát do housingu vlastní železo, pustit si virtuál nebo spustit systém v cloudu. Microsoft Azure nabízí předpřipravené čtyři distribuce: Ubuntu, CentOS, SUSE a Oracle Linux. Není ale problém sestavit image s vaší oblíbenou distribucí.

Pro spuštění vlastní distribuce budeme potřebovat lokálně vytvořit její image a tu pak nahrát na Azure. Od běžné instalace Linuxu se bude lišit jen nepatrně, hlavně přítomností Azure Linux Agenta, což je „lepidlo“ mezi provisioning nástroji v Azure a samotným OS (například zajišťuje nastavení hesla nebo publickey pří vytváření VM).

Softwaru na vytvoření image je vcelku široký výběr. Azure samotný běží na microsoftím virtualizačním řešení HyperV, to je k dispozici zdarma, ovšem pouze pokud máte Windows 8 Pro nebo Windows Server 2008 a vyšší. HyperV ale pracuje s image ve formátu VHD, ten je otevřený a lze jej vytvořit například v Oracle VirtualBox, VMWare nebo Citrix XenServeru, které jsou k dispozici i na Linuxu.

Tento návod budu demonstrovat na HyperV a aktuálně nejnovějším Ubuntu 14.04 LTS. Vzhledem k minimálnímu vlivu virtualizační platformy by pro ostatní produkty měl stačit pouhý export do VHD. Příprava jiné distribuce se pak většinou liší pouze použitým balíčkovacím systémem, navíc se budu snažit vždy uvést odkaz na zdrojové kódy.

Začneme stažením instalačního obrazu a jeho zavedením do hypervisoru. Instalaci provedeme dle osobních preferencí, s dvěma výjimkami: za prvé je doporučeno použít standardní partitiony místo LVM. Mohlo by totiž dojít ke konfliktům, pokud byste chtěli disk jednoho stroje v cloudu připojit k jinému, například pokud by bylo potřeba se dostat k logům na nebootujícím systému. Druhá odchylka od běžné instalace je doporučení nenastavovat rovnou swapovací partition – je lepší ji nastavit později přes Azure Linux Agenta, který ji pošle na disk k tomu optimalizovaný. Obě výjimky jsou ale pouze doporučení, budou mít vliv na výkon, nikoliv základní funkčnost.

Po nabootování systému se můžeme vrhnout na úpravy pro optimální běh na HyperV. Na debianových distribucích je k dispozici repozitář azure.archive.ubuntu.com, můžeme tedy jednoduše nahradit současné repozitáře příkazem sed:

$ sed -i "s/[a-z][a-z].archive.ubuntu.com/azure.archive.ubuntu.com/g" /etc/apt/sources.list
$ apt-get update

A nainstalujeme démona, který propojí HyperV příkazy se systémem – bude tedy fungovat například vypínání přes ACPI nebo heartbeat monitoring. Pro distribuce Red Hat a CentOS je ke stažení ISO, ostatní mohou zkusit štěstí se zdrojáky na GitHubu.

$ apt-get install hv-kvp-daemon-init

Dále je dobré vynutit odpočet bootovacího výběru v GRUBu i po pádu systému, defaultně se totiž čeká na vstup z klávesnice. V souboru /etc/default/grub tedy zadáme novou proměnnou GRUB_RECORDFAIL_TIMEOUT=1. Také se může hodit přesměrování bootovacího výstupu na ttyS0, kde poslouchá Azure debugger. Ve stejném souboru zadáme GRUB_CMDLINE_LINUX_DEFAUL­T=„console=ttyS0 earlyprintk=ttyS0 rootdelay=300“. Poté spustíme update-grub, aby se změny promítly do bootloaderu.

Kvůli provisioningu je nutné v /etc/sudoers vypnout flag targetpw. Ve většině distribucí je vypnutý defaultně.

Nyní nainstalujeme slibovaný Azure Linux Agent, čili „propojku“ mezi Linuxem a Azure, zajišťující ponejvíce správu uživatelů při provisioningu a swapování. Pro debianové distribuce by měl stačit apt-get install walinuxagent, podobně i SUSE a CentOS s zypper, respektive yum. Pro ostatní tu jsou zdrojáky.

To, že by měl stačit, píšu záměrně. V balíčcích totiž bývá jeho rok stará verze 1.3.2, která ráda nefunguje – při spouštění v Azure se zasekne na „Provisioning“. Je tedy rozumné zamířit na GitHub a dle tamních instrukcí nainstalovat verzi 1.4.1. Další možnost je Agenta stáhnout přímo z nějaké Azure instance, neboť tam je nyní verze 2.0.4, používající novější spravovací protokol. Na tomhle by ještě Microsoft měl zapracovat.

Teď můžeme Azure Agenta nastavit, aby po spuštění v cloudu nastavil swapovací oddíl: v /etc/waagent.conf změníme ResourceDisk.EnableSwap na ySwapSizeMB na požadovanou velikost v MB.

Závěrem provedeme deprovisioning, vypneme virtuál a dáme se do uploadu image na Azure:

$ waagent -force -deprovision
$ export HISTSIZE=0
$ logout

Přesuneme se na web Azure Management Portalu. Vytvoříme Storage Account v regionu, kde budeme chtít spustit virtuál, ČR je nejbližší Europe West. Potom vytvoříme jeden private container, kam image nahrajeme. V portálu se rovnou zobrazí jeho URL, ta se bude za chvíli hodit.

Upload image provedeme z příkazové řádky. Pokud jste ještě s Azure z příkazové řádky nepracovali, nainstalujte Azure CLI, postavené v node.js a potom do nich importujte přihlašovací certifikát:

$ npm install -g azure-cli
$ azure account download (ve výstupu se zobrazí odkaz, kde certifikát stáhnete)
$ azure account import ./Pay-As-You-Go-<datum>-credentials.publishsettings

Jdeme na samotný upload VHD (pozor, novější VHDX není podporovaný):

$ azure vm image create <customImageName> --os linux --blob-url http://<storageName>.blob.core.windows.net/<containerName>/image.vhd ./Linux.vhd

Nyní je vše připraveno, zbývá pouze samotné spuštění virtuálního stroje. To provedeme standardně z Azure Portalu, při vytváření by měla být image k dispozici v sekci My Images. Já jsem zaznamenal asi dvouminutové zpoždění od samotného nahrání image po její objevení v Choose an Image dialogu, pokud tam tedy není hned, chvíli počkejte.

Poté, co doběhne spuštění a provisioning, by mělo jít se ke stroji přihlásit a pracovat. Pokud trvá provisioning déle než pár minut, znamená to, že se stala nějaká chyba při deprovisioningu. Nejčastěji pomůže update waagenta.

bitcoin_skoleni

Závěrem ještě pár slov o tzv. „Endorsed distributions“, podporovaných distribucích. Azure garantuje svoje SLA i na vlastních imagích, ovšem pouze těch postavených na Ubuntu, CentOS, SUSE a Oracle. Mimo tyto distribuce vám OS s větší či menší snahou může fungovat také, ale je to bez záruky.

Detailní instrukce pro všechny podporované distribuce najdete v angličtině v Azure dokumentaci. Jen pozor, místy jsou zastaralé, občas zase zbytečně komplikované, i když existuje čistější cesta, a nevyhnuli se ani překlepům nebo špatnému casingu. Zkrátka rozchodit vlastní Linux image na Azure je ještě trochu dobrodružství a je potřeba o dost víc, než jen kopírovat příkazy do terminálu.

Autor článku

Marcel Šulek je vývojář webových i mobilních aplikací, vystudovaný dopravní pilot, nyní redakční vývojář IHNED.cz.