Skip to Content
Building OsSpúšťacie skripty

Spúšťacie skripty

os.startup_scripts vytvára obmedzenú jednorazovú prácu systemd pre výsledný obraz. Každá položka deklaruje shell príkaz, požadované balíčky, používateľa pre spustenie a jednotku pre poradie.

Spúšťacie skripty sú kód s oprávnením root, pokiaľ run_as neurčí inak. Prejdú rovnakou kontrolou ako akýkoľvek inštalačný skript.

Kanonický tvar

{ "os": { "startup_scripts": [ { "name": "write-build-marker", "description": "Create a local readiness marker after networking is available.", "command": "set -Eeuo pipefail\ninstall -d -m 0755 /var/lib/example\nprintf '%s\\n' ready > /var/lib/example/build-ready", "packages": [], "run_as": "root", "after": "network-online.target" } ] } }

Polia sú description a command, nie staršie pole script. run_as a after tiež používajú snake_case. after je jeden reťazec jednotky systemd, nie pole.

Schéma prijme najviac 32 položiek a obmedzenú veľkosť príkazu. Validácia odmietne prázdne príkazy a bajty NUL, ale nečiní obsah shellu bezpečným ani idempotentným.

Návrh pre opakovanie a čiastočné zlyhanie

Boot môže byť prerušený potom, čo už nastali niektoré vedľajšie efekty. Píšte skripty tak, aby ďalšie spustenie buď bezpečne dokončilo prácu, alebo skončilo s jasným stavom, ktorý sa dá skontrolovať.

Dobré vzory zahŕňajú:

  • zápis do dočasného súboru, overenie a atomické premenovanie;
  • kontrolu, či používatelia, adresáre alebo položky konfigurácie už existujú;
  • použitie install pre explicitného vlastníka a režim;
  • použitie set -Eeuo pipefail a zámerné spracovanie očakávaných nenulových výsledkov;
  • obmedzené sieťové timeouty a konečný počet opakovaní; a
  • zápis značky pripravenosti až po úspechu všetkých požadovaných krokov.

Nespoliehajte sa na sleep ako kontrolu pripravenosti. Overte skutočnú závislosť.

Externé sťahovanie

Vyhnite sa curl ... | sh. Ak prvý boot musí stiahnuť artefakt:

  1. použite HTTPS s overením certifikátu;
  2. pripnite očakávaný artefakt alebo verziu zdroja;
  3. pred spustením overte kryptografický digest alebo schválený podpis;
  4. nastavte timeouty pre pripojenie a celkový čas;
  5. pri zlyhaní overenia ukončite s chybou; a
  6. nezapisujte do logu prihlasovacie údaje ani podpísané URL.

Pre skutočne offline alebo reprodukovateľné správanie vložte skontrolovaný obsah do obrazu alebo schváleného repozitára balíčkov namiesto sťahovania pri prvom boote.

Tajomstvá

Nikdy nevkladajte do receptu, príkazu, URL ani generovanej značky prihlasovacie údaje v plaintexte. JSON receptu a build logy sa uchovávajú ako dôkaz a môžu byť viditeľné operátorom. Použite schválený mechanizmus registrácie alebo doručenia tajomstiev v čase nasadenia a obmedzte výsledný credential na cieľ.

Identita spustenia

Uprednostnite neprivilegovaný servisný účet. Ak je root nutný, zmenšite príkaz na najmenší privilegovaný krok a nastavte explicitné vlastníctvo súborov. Overte, že run_as pomenúva účet vytvorený pred štartom jednotky.

Overenie

Testujte výsledky, nielen návratový kód jednotky:

{ "type": "file_contains", "description": "The startup unit wrote its readiness marker.", "params": { "path": "/var/lib/example/build-ready", "content": "ready" } }

Otestujte aj druhý boot, nedostupnú závislosť a obnovu po prerušenom prvom behu. Pri zlyhaní prezrite systemctl status a journal jednotky.