Skip to Content
Building OsPaleidimo scenarijai

Paleidimo scenarijai

os.startup_scripts sukuria ribotą systemd vienkartinį darbą galutiniam atvaizdui. Kiekvienas įrašas deklaruoja shell komandą, reikiamus paketus, vykdymo naudotoją ir tvarkos vienetą.

Paleidimo scenarijai gali vykdyti root teises, nebent run_as nurodo kitaip. Juos reikia peržiūrėti taip pat kaip bet kurį diegimo scenarijų.

Kanoninė forma

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

Laukai yra description ir command, ne senesnis script laukas. run_as ir after taip pat naudoja snake_case. after yra viena systemd vieneto eilutė, ne masyvas.

Schema priima ne daugiau kaip 32 įrašus ir riboto dydžio komandą. Validacija atmeta tuščias komandas ir NUL baitus, bet neužtikrina, kad shell turinys būtų saugus ar idempotentiškas.

Projektavimas pakartojimams ir dalinei klaidai

Paleidimas gali būti nutrauktas po dalies šalutinių poveikių. Rašykite scenarijus taip, kad kitas paleidimas arba saugiai užbaigtų darbą, arba baigtųsi aiškia, peržiūrima būsena.

Gerų modelių pavyzdžiai:

  • rašyti į laikiną failą, patikrinti, tada atomiškai pervardyti;
  • tikrinti, ar naudotojai, katalogai ar konfigūracijos įrašai jau egzistuoja;
  • naudoti install aiškiam savininkui ir režimui;
  • taikyti set -Eeuo pipefail ir sąmoningai tvarkyti numatomus nenulinius rezultatus;
  • naudoti ribotus tinklo timeout ir galutinį bandymų skaičių; ir
  • pasirengimo žymeklį rašyti tik po visų reikiamų žingsnių sėkmės.

Nelaikykite sleep pasirengimo patikra. Tikrinkite tikrąją priklausomybę.

Išoriniai atsisiuntimai

Venkite curl ... | sh. Jei pirmam paleidimui būtina gauti artefaktą:

  1. naudokite HTTPS su sertifikato patikra;
  2. pritvirtinkite laukiamą artefaktą ar šaltinio versiją;
  3. prieš vykdymą patikrinkite kriptografinį santrauką ar patvirtintą parašą;
  4. nustatykite prisijungimo ir bendrus timeout;
  5. jei patikra nepavyksta, nutraukite vykdymą; ir
  6. neregistruokite credentials ar pasirašytų URL.

Tikrai offline ar atkartojamam elgesiui įtraukite peržiūrėtą turinį į atvaizdą ar patvirtintą paketų saugyklą, o ne atsisiųskite pirmo paleidimo metu.

Slaptažodžiai ir kredencialai

Niekada neįterpkite kredencialų atviru tekstu į receptą, komandą, URL ar sugeneruotą žymeklį. Recipe JSON ir build logai laikomi kaip įrodymai ir gali būti matomi operatoriams. Naudokite patvirtintą registracijos ar slaptų duomenų pristatymo mechanizmą diegimo metu ir apribokite gautą kredencialą tikslui.

Vykdymo tapatybė

Pirmenybę teikite neprivilegiootai paslaugos paskyrai. Jei reikia root, sumažinkite komandą iki mažiausio privilegijuoto žingsnio ir nustatykite aiškų failo savininką. Patikrinkite, kad run_as nurodo paskyrą, sukurtą prieš paleidžiant vienetą.

Patikrinimas

Tikrinkite rezultatus, ne tik vieneto exit statusą:

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

Taip pat patikrinkite antrą paleidimą, neprieinamą priklausomybę ir atkūrimą po nutraukto pirmo paleidimo. Klaidos atveju peržiūrėkite systemctl status ir vieneto žurnalą.