Ahoj,
nejdřív to nejdůležitější: na stagingu je nyní podporováno openSUSE Leap 15.1 a Tumbleweed, Slackware 14.2 a Void Linux (glibc, musl).
Poslední dva týdny jsem se snažil vylepšit situaci ohledně sestavování šablon distribucí, ze kterých se vytvářejí nové VPS. Od roku 2014 [1] používáme k sestavování šablon skripty build-vpsfree-templates [2]. Už tehdy bylo cílem šablony sestavovat pravidelně a automatizovaně, jenže se to nikdy nedotáhlo do konce. Šablony nestačí jen tak sestavit a hned je používat, protože distribuce se mění a skripty nemusí fungovat spolehlivě. Každá šablona se před použitím musí otestovat, a to se muselo vždy dělat manuálně.
Pokud chtěl někdo přispět, musel řešit kde a jak šablony sestavovat a testovat. Bylo nutné manuálně nainstalovat potřebné závislosti jako debootstrap, yum/dnf, zypper, atp. Na opravdové ověření funkčnosti bylo potřeba si nainstalovat OpenVZ.
Aktualizace šablony jedné distribuce spočívala ve zprovoznění skriptu samotného, výsledek si nakopírovat na nějaký systém s OpenVZ, pak z toho vytvořit VPS, zjistit že něco nefunguje (start, ssh, konzole, heslo, ...) a zase na začátek. S uvedením vpsAdminOS se všechno muselo dělat 2x, protože se šablony samozřejmě liší [3].
Ve výsledku se šablony aktualizovaly jen když to bylo nezbytně nutné. U stabilních distribucí jako Debian to nevadí, s aktualizací systému po vytvoření VPS není problém. Rolling-release distribuce jako Arch nebo Gentoo jsou na tom hůře a po delší době dá aktualizace více práce.
Proto jsem se snažil to aspoň na vpsAdminOS udělat lépe: zajistit stejné prostředí pro sestavování šablon a automatizovat testování. Nix a vpsAdminOS jednotné prostředí zajistit umí. Toho jsem využil a program pro sestavování šablon jsem přidal přímo do OS. K sestavení šablon tedy stačí nabootovat vpsAdminOS, třeba v QEMU [4]. Poté naklonovat skripty pro šablony na vpsAdminOS [3]:
git clone -b vpsadminos https://github.com/vpsfreecz/build-vpsfree-templates.git cd build-vpsfree-templates
Program, kterým se šablony sestavují, se jmenuje osctl-image [5]. Sám o sobě žádnou šablonu sestavit neumí, funguje ve spolupráci se skripty výše, a očekává je v pracovním adresáři. Seznam šablon dostupných k sestavení zjistíme takto:
osctl-image ls
Pro sestavení šablony je potřeba libovolný ZFS dataset. V konfiguraci pro QEMU je automaticky k dispozici zpool tank, takže můžeme použít např. tank/image-builds. Sestavení vybrané šablony pak vypadá takto:
osctl-image build --build-dataset tank/image-builds ubuntu-18.04
Sestavené šablony se ve výchozím stavu ukládají do ./output. Sestavenou šablonu můžeme jednoduše otestovat:
osctl-image test --build-dataset tank/image-builds ubuntu-18.04
Aktuálně se testuje: start/stop VPS, síť, nastavení hesla roota, hostname a připojení přes SSH. Chtělo by to ještě testovat i funkční konzoli a přihlášení.
Pokud něco nefunguje, můžeme si snadno ze šablony vytvořit VPS:
osctl-image instantiate --build-dataset tank/image-builds ubuntu-18.04
Příkaz výše vypíše ID VPS, na kterou se můžeme podívat:
osctl ct start -F instance-abcdefgh osctl ct attach instance-abcdefgh
Když je vše v pořádku, je čas na pull request. My šablonu přídáváme do repozitáře, ze kterého si ji vpsAdminOS stáhne při vytváření nové VPS:
osctl-image deploy --build-dataset tank/image-builds ubuntu-18.04 /kde/je/repozitar
Takto se staráme o výchozí repozitář na adrese https://images.vpsadminos.org.
Celý postup se dá shrnout do toho posledního příkazu, protože `osctl-image deploy` šablonu když je potřeba automaticky sestaví, otestuje, a až pokud je vše v pořádku, přidá ji do repozitáře. Podobně fungují i příkazy `test` a `instantiate`, proto je všude použito `--build-dataset`, aby se šablona mohla případně sestavit. osctl-image na pozadí spravuje VPS pro sestavovaní i testování šablon, jak to přesně funguje je popsáno v manuálu [5, 3].
Abychom s tím měli dlouhodobě co nejméně práce, připravil jsem Nix modul [6], pomocí kterého lze deklarativně nastavit pravidelné sestavování repozitářů a jejich obsahu. Výsledek si můžete prohlédnout ve vpsfree-cz-configuration [7].
Máme to nastaveno tak, aby se šablony sestavovaly jednou týdně v sobotu ráno. Ty, které se podaří správně sestavit a otestovat budou ihned přidány do repozitáře. Pokud něco selže, pošle se nám mail s cestou k logu, ve kterém zjistíme co a proč se stalo. Uvidíme na co ještě narazíme, ale zatím to vypadá, že by to mohlo fungovat.
[1] https://lists.vpsfree.cz/pipermail/community-list/2014-June/006697.html
[2] https://github.com/vpsfreecz/build-vpsfree-templates
[3] https://github.com/vpsfreecz/build-vpsfree-templates/tree/vpsadminos
[4] https://vpsadminos.org/user-guide/setup/
[5] https://man.vpsadminos.org/osctl-image/man8/osctl-image.8.html
[6] https://github.com/vpsfreecz/vpsadminos/blob/master/os/modules/services/osct...
[7] https://github.com/vpsfreecz/vpsfree-cz-configuration/blob/master/configs/im...
Jakub
community-list@lists.vpsfree.cz