Linuxových distribucí jsou stovky a každou chvíli se objeví nějaká další. Jen málokterá ale má šanci doopravdy zaujmout, protože přináší nějakou zásadní vlastnost, která ji odlišuje od toho všeho, co už tu máme. Takovou distribucí je Alpine Linux, které se velmi dobře daří kombinovat minimalizmus a jednoduchost a přitom zůstat použitelnou v běžném provozu.
V době všemožných kontejnerů, VPS a cloudů totiž oceníme, když je základ našeho systému opravdu malý a my si do něj pak doinstalujeme, co je potřeba. Například takový Debian v „prázdném stavu“ obsahuje přes 130 balíčků a zabírá obvykle nízké stovky megabajtů. Obsahuje sice spoustu knihoven a velké množství základních utilit, ale co když takové řešení nechceme a oceníme něco menšího?
Deset let vývoje
Alpine není žádný nováček, existuje už od roku 2006. Teprve teď se o něm ale začíná mluvit, především v souvislosti s Dockerem, který jej začal využívat jako základ pro své oficiální kontejnery. To mu pomohlo k popularitě a stává se čím dál oblíbenějším. Mimochodem: v Česku teď běží jeho hlavní zrcadlo s balíčky.
Původně vznikl Alpine jako fork projektu LEAF, což byla dříve disketová distribuce určená především pro routery a firewally. Někteří vývojáři chtěli ale jít dále a nabídnout plnohodnotné prostředí, pořádný balíčkovací systém, nová jádra a „velké aplikace“. Takové požadavky ale narážely na kapacitu disket, proto vznikl nový projekt, který si ale zachoval smysl pro minimalističnost. Z tehdejšího hlediska sice ohromně narostl, stále se ale drží velmi rozumných čísel.
Distribuce si také zachovala svou nekomerčnost a nezávislost. Stále dokáže celá běžet z paměti RAM, ale už má pokročilý balíčkovací systém, nové jádro a rozsáhlé repozitáře s tisíci různých balíčků od serverů až po desktopové aplikace.
BusyBox v základu
Základem celého systému je BusyBox, což je jedna binárka, která zastoupí desítky různých unixových utilit. Namátkou: mount, modprobe, ping, passwd, gzip, sed, awk, traceroute a mnoho dalších. Sama má ovšem několik stovek kilobajtů, takže nezabere příliš mnoho místa. Podle toho, jakým jménem ji voláte, se bude chovat.
Kromě BusyBoxu je v základní instalaci Alpine jen balíčkovací systém, spouštěcí skripty, pár konfiguračních nástrojů a nějaké doprovodné knihovny. Celkem jen 16 balíčků:
# apk info | sort alpine-base alpine-baselayout alpine-conf alpine-keys apk-tools busybox busybox-initscripts busybox-suid libc-utils libressl2.4-libcrypto libressl2.4-libssl musl musl-utils openrc scanelf zlib
Většina základních balíčků pochází přímo z projektu Alpine, jen šest z nich vzniklo jinde. Mezi ně patří například také init system OpenRC, takže pokud patříte mezi odpůrce systemd, budete nadšeni – i tady se prosadil minimalismus. Jako systémová knihovna slouží musl, správcem zařízení je mdev a šifrovací knihovnou je LibreSSL.
Výsledkem je, že samotný systém zabírá jen 8 MB. To se hodí například pro běh aplikací v kontejnerech, protože nemusíte pracovat s velkými obrazy a systém je skutečně jen něco malého v pozadí. To samozřejmě předpokládá instalaci bez linuxového jádra, které pro běh v kontejneru stejně nepotřebujete.
Pokud budete Alpine instalovat do virtuálu, budete potřebovat alespoň základní linuxové jádro a systém naroste s 26 balíčky na 53 MB. Plná instalace na hardware pak vyžaduje ještě přidání modulů s ovladači, které jsou sice jen v jednom balíčku, ale potřebují dalších 250 MB.
Bezpečně a multiplatformně
Alpine si také zakládá na bezpečnosti, která je u vývojářů na prvním místě. Kromě čistého jádra je možné také nainstalovat variantu s PaX a GrSecurity. Autor těchto záplat ale oznámil, že už nebudou volně dostupné, uvidíme, jak si s tím vývojáři Alpine poradí.
Veškerý software je také kompilován se stack-smashing protection a PIE (position-independent executable). To by mělo zkomplikovat případné útoky na chyby v aplikacích. Bezpečnostní záplaty jsou dodávány dva roky po vydání, na komunitní repozitář je to půl roku. Nová verze vychází dvakrát do roka.
K dispozici jsou překlady pro platformy x86, x86_64, ARMhf a AArch64, v čerstvě vydané verzi 3.6 přibyly nové architektury ppcel64 a s390×. Zajímavé je, že na vývoji se podíleli také lidé z IBM. Pokud jste příznivci Raspberry Pi, jistě vás potěší dostupnost obrazů i pro váš oblíbený jednodeskový počítač.
Ke stažení jsou tyto základní varianty:
- Mini root file system – pro použití v kontejnerech (komprimované 1,8 MB)
- Standard – plná verze s upraveným jádrem (78 MB)
- Vanilla – plná verze s čistým jádrem (79 MB)
- Extended – spousta balíčků, běží z RAM (249 MB)
- Virtual – optimalizováno pro virtuály (25 MB)
- Xen – zabudovaná podpora pro Xen (132 MB)
- Raspberry Pi – včetně RPi jádra, bez grsec
- Generic ARM – výchozí jádro pro ARM
Balíčků je dost
Jistě vás bude zajímat množství balíčků: v repozitáři main je jich 5641 a komunitní repo má dalších 2310. Testovací větev (edge) pak obsahuje 2085 dalších balíků. Naleznete mezi nimi především různé serverové aplikace, ale i některé desktopové. Podporu velkých prostředí ale nečekejte, vývojáři Alpine se stále zaměřují spíše na servery, routery a podobná nasazení.
Alpine používá vlastní balíčkovací systém apk, který používá podepsané tgz archivy. Ovládání je velmi jednoduché, vše se sdružuje ve stejnojmenné utilitě, kterou ovládáte pomocí parametrů jako add
, del
, update
, upgrade
nebo info
.
Pokud používáte například konfigurační nástroj Ansible, potěší vás, že od verze 2.0 obsahuje podporu pro balíčkovací systém apk. Pozor ovšem na to, že Ansible vyžaduje na serveru nainstalovaný Python, takže si jej budete muset na začátku buďto přidat ručně nebo pomocí modulu raw.
Malej, ale šikovnej
Před časem jsem začal Alpine nasazovat na nových virtuálech pro různé účely (web, mail, DNS, správa certifikátů) a jsem s ním naprosto spokojený. Jeho síla je v jednoduchosti, systém není rozsáhlý a je naprosto přehledný. Ve spojení s Ansible je obsluha takového serveru naprosto bezproblémovou záležitostí.
Jen nesmíte zapomenout na to, že tady se nic neděje automaticky a co si nenainstalujete a nezapnete, to jednoduše nemáte. Například mě nedávno zaskočil fakt, že v Alpine ve výchozím stavu neběží Cron. Pokud si ho explicitně nenahodíte, nikdo se vám o váš krásný crontab
starat nebude.