Skip to Content
Building OsIndítási szkriptek

Indítási szkriptek

Az os.startup_scripts korlátozott, egyszeri systemd feladatot hoz létre a kész image-hez. Minden bejegyzés shell parancsot, szükséges csomagokat, futtató felhasználót és sorrendező egységet ad meg.

Az indítási szkriptek root jogosultságú kód, hacsak a run_as másként nem rendeli. Ugyanolyan átnézetet kapnak, mint bármely telepítő szkript.

Kanonikus alak

{ "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" } ] } }

A mezők a description és a command, nem a régi script mező. A run_as és az after is snake_case. Az after egy systemd egység string, nem tömb.

A séma legfeljebb 32 bejegyzést és korlátozott parancsméretet fogad el. A validáció elutasítja az üres parancsokat és a NUL bájtokat, de nem teszi biztonságossá vagy idempotenssé a shell tartalmát.

Tervezés újrapróbálásokra és részleges hibákra

A boot megszakadhat, miután már voltak mellékhatások. Úgy írja a szkripteket, hogy a következő futás vagy biztonságosan befejezi a munkát, vagy egyértelmű, ellenőrizhető állapotban lép ki.

Jó minták:

  • ideiglenes fájlba írás, ellenőrzés, majd atomi átnevezés;
  • ellenőrzés, hogy a felhasználók, könyvtárak vagy konfigurációs bejegyzések már léteznek-e;
  • install használata explicit tulajdonosra és módra;
  • set -Eeuo pipefail alkalmazása és a várt nem nulla eredmények szándékos kezelése;
  • korlátozott hálózati időkorlátok és véges újrapróbálási szám; és
  • készenléti jelző csak az összes szükséges lépés sikerét követően.

Ne a sleep-re hagyatkozzon készenlét ellenőrzésként. A tényleges függőséget vizsgálja.

Külső letöltések

Kerülje a curl ... | sh mintát. Ha az első bootnak le kell töltenie egy artefaktumot:

  1. használjon HTTPS-t tanúsítvány-ellenőrzéssel;
  2. rögzítse a várt artefaktumot vagy forrásváltozatot;
  3. futtatás előtt ellenőrizze a kriptográfiai digestet vagy jóváhagyott aláírást;
  4. állítson be kapcsolódási és teljes időkorlátokat;
  5. sikertelen ellenőrzés esetén hibával lépjen ki; és
  6. ne naplózzon hitelesítő adatokat vagy aláírt URL-eket.

Valóban offline vagy reprodukálható viselkedéshez tegye az átnézett tartalmat az image-be vagy jóváhagyott csomagtárba az első bootos letöltés helyett.

Titkok

Soha ne ágyazzon be sima szöveges hitelesítő adatokat a receptbe, parancsba, URL-be vagy generált jelzőbe. A recept JSON és a build naplók megmaradó bizonyíték, és láthatók lehetnek az operátorok számára. Használjon jóváhagyott telepítéskori regisztrációs vagy titok-kézbesítési mechanizmust, és korlátozza a keletkező credentialt a célra.

Futtatási identitás

Előnyben részesítse a nem privilegizált szolgáltatásfiókot. Ha root kell, szűkítse a parancsot a legkisebb privilegizált lépésre, és állítson be explicit fájltulajdonost. Ellenőrizze, hogy a run_as olyan fiókot nevez, amelyet az egység indulása előtt hoztak létre.

Ellenőrzés

Az eredményeket tesztelje, ne csak az egység kilépési kódját:

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

Tesztelje a második bootot, a nem elérhető függőséget és a megszakított első futás utáni helyreállítást is. Hiba esetén nézze meg a systemctl status kimenetét és az egység naplóját.