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/osc…
[7]
https://github.com/vpsfreecz/vpsfree-cz-configuration/blob/master/configs/i…
Jakub