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;
installhasználata explicit tulajdonosra és módra;set -Eeuo pipefailalkalmazá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:
- használjon HTTPS-t tanúsítvány-ellenőrzéssel;
- rögzítse a várt artefaktumot vagy forrásváltozatot;
- futtatás előtt ellenőrizze a kriptográfiai digestet vagy jóváhagyott aláírást;
- állítson be kapcsolódási és teljes időkorlátokat;
- sikertelen ellenőrzés esetén hibával lépjen ki; és
- 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.