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:

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:

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.

vault-provision

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:

store-schema | operator-cli