Namestitev
← kazalo
Zaboj clawdie je Colibrijev nameščevalnik gostitelja. Odkrije postavitev
ZFS na napravi in pripravi storitev clawdie. Na FreeBSD to pomeni storitev
rc.d, podatkovne zbirke ZFS in neprivilegiranega uporabnika. Na Linuxu lahko
uporablja systemd in bodisi ZFS bodisi navadne imenike.
→ crates/clawdie/src/main.rs | crates/clawdie/src/plan.rs
→ docs/ISO-SERVICE-LAYOUT.md | docs/CLAWDIE-INSTALLER-HANDOFF.md
Odločitve
ZFS je obvezen na FreeBSD, priporočen na Linuxu
FreeBSD ne podpira postavitve z navadnimi imeniki. Če ZFS uporabniški prostor
manjka, načrt takoj sporoči napako. Linux lahko pade na navadne imenike, če
ni imenovan noben bazen in ZFS ni na voljo, na zahtevo pa lahko ustvari svež
bazen na prostem disku.
To ustreza produkcijskemu cilju: goli FreeBSD na zrcalnem polju ZFS RAID1.
Podpora za Linux omogoča razvoj in CI brez gostitelja ZFS.
Shramba je razrešena, ne nastavljena
clawdie plan razreši shrambo v tem vrstnem redu:
1. Če je podano --pool NAME --create-pool DEVICE, ustvari ta bazen.
2. Če je podano --pool NAME, uporabi ta obstoječi bazen.
3. Če ni podan noben bazen in obstaja natanko en bazen, ga uporabi.
4. Če obstaja več bazenov in noben ni imenovan, napaka.
5. Na Linuxu brez ZFS padec na navadne imenike.
To odpravlja potrebo po ročno napisani topološki datoteki na tipičnih
enobazenskih gostiteljih, hkrati pa omogoča ekspliciten nadzor, ko je
potreben.
→ crates/clawdie/src/main.rs (pick_pool, validate_storage)
Podatkovne zbirke ločujejo stanje od dnevnikov
Ko je ZFS uporabljen, nameščevalnik ustvari:
kot vsebniško podatkovno zbirko z/clawdie canmount=offpriklopljeno na/clawdie/db /var/db/clawdiepriklopljeno na/clawdie/log /var/log/clawdie
Hramba podatkovne zbirke in dnevnikov v ločenih podatkovnih zbirkah omogoča,
da posnetki, kvote in pravilniki vrtenja dnevnikov veljajo neodvisno.
→ crates/clawdie/src/plan.rs (zfs_dataset_steps)
Privzeto suhi tek
clawdie apply izpiše načrt in konča, razen če je podano --yes. discover
in plan sta samo za branje. To ščiti produkcijske gostitelje pred nenamernim
pripravljanjem.
→ crates/clawdie/src/main.rs (Cmd::Apply)
Ustvarjanje bazena je varovano pred zasedenimi diski
--create-pool na nepraznem disku je zavrnjeno, razen če je podano tudi
--force. Nameščevalnik uporablja lsblk na Linuxu za zaznavanje particij,
datotečnih sistemov, priklopnih točk in korenskega diska. Varovalo je
konzervativno: če je disk dvoumen, ga je treba eksplicitno vsiliti.
→ crates/clawdie/src/disk.rs | crates/clawdie/src/main.rs (validate_create_device)
En sam neprivilegiran uporabnik storitve
Storitev teče kot _clawdie na obeh platformah. Na FreeBSD je uporabnik
ustvarjen z pw useradd -s /usr/sbin/nologin -d /var/db/clawdie, izhodna koda
65 (že obstaja) pa se obravnava kot preskok. Na Linuxu se uporabi useradd
--system
. Imeniki stanja se nato chownajo temu uporabniku.
→ crates/clawdie/src/platform.rs
Upravitelji storitev, specifični za platformo, ista specifikacija
Platform je notranji trait. Izvedbi se razlikujeta samo v tem, kako
namestita in omogočita enoto:
- FreeBSD: zapiše
/usr/local/etc/rc.d/clawdie, uporabisysrc clawdie_enable=YES. - Linux: zapiše
/etc/systemd/system/clawdie.service, zaženesystemctl enable --now clawdie.
Obe uporabljata isto ServiceSpec (binarna datoteka, uporabnik, podatkovni
imenik, ime storitve). Zagon apply na različnih platformah zato ustvari
enako postavitev datotečnega sistema in se razlikuje samo v ovoju upravitelja
storitev.
→ crates/clawdie/src/platform.rs (FreeBsd, Linux)
Demon teče skozi nadzornika platforme
Ustvarjeni skript rc.d za FreeBSD izvede /usr/local/bin/colibri-daemon skozi
/usr/sbin/daemon -u _clawdie, tako da nadzornik ob zrušitvi ponovno zažene
in proces pade na neprivilegiranega uporabnika. Enota systemd je preprosta
storitev z Restart=on-failure.
Nameščevalnik sam ne zažene demona ali ne pripravi binarne datoteke; samo
ustvari okolje. Operater ali paketna gradnja pripravi colibri-daemon in nato
service clawdie start.
→ docs/ISO-SERVICE-LAYOUT.md (rc.d prek daemon(8))
Skrivnosti ne piše nameščevalnik
Nameščevalnik se ne dotika ključev API ponudnika. Ločena datoteka — običajno
/usr/local/etc/colibri/provider — hrani skrivnosti in jo pred zagonom
demona prebere rc.d. To ohranja domet nameščevalnika omejen na ZFS, imenike,
uporabnike in datoteke storitev.
Koraki se izvajajo zaporedno in se ustavijo ob napaki
deploy::apply zažene vsak Step po vrsti. Koraki Run pokličejo lupino in
padejo ob neničelnem izhodu, razen če korak navede dovoljene izhodne kode.
Koraki WriteFile ustvarijo starševske imenike, zapišejo datoteko in jo
chmodajo. Če katerikoli korak pade, se apply takoj ustavi in sporoči ukaz, ki
je padel, ter stderr.
→ crates/clawdie/src/deploy.rs
Oblika načrta
clawdie plan
├── ZFS layout (ali navadni imeniki)
│ ├── create /clawdie container
│ ├── create /clawdie/db -> /var/db/clawdie
│ └── create /clawdie/log -> /var/log/clawdie
└── service install
├── create user _clawdie
├── chown state dirs
├── write service unit (rc.d / systemd)
├── enable service (sysrc / systemctl)
└── [systemd] daemon-reload + start
Tipična namestitev FreeBSD
# odkrij
clawdie discover
predogled
clawdie plan
pripravi podatkovne zbirke, uporabnika in storitev rc.d
sudo clawdie apply --yes
zaženi, ko je binarna datoteka colibri-daemon pripravljena
sudo service clawdie start
Navzkrižne povezave na izvajalne poti
Po namestitvi ima storitev te poti:
/var/db/clawdie/colibri.sqlite— koordinacijska shramba SQLite/var/run/clawdie/clawdie.sock— Unix vtičnica demona/var/log/clawdie/daemon.log— dnevnik stdout/stderr/usr/local/etc/colibri/— konfiguracija in skrivnosti ponudnika