Skip to Content
Building OsKäivitusskriptid

Käivitusskriptid

os.startup_scripts loob piiratud systemd ühekordse töö tulemuslikule kujutisele. Iga kirje deklareerib shell-käsu, vajalikud paketid, täitmise kasutaja ja järjestusüksuse.

Käivitusskriptid on root-õigustega kood, kui run_as ei ütle teisiti. Neid tuleb üle vaadata nagu iga paigaldusskripti.

Kanoniline kuju

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

Väljad on description ja command, mitte pärandväli script. run_as ja after kasutavad samuti snake_case. after on üks systemd üksuse string, mitte massiiv.

Skeem võtab vastu kuni 32 kirjet ja piiratud suurusega käsu. Valideerimine lükkab tagasi tühjad käsud ja NUL-baidid, kuid ei muuda shelli sisu turvaliseks ega idempotentseks.

Korduskatsed ja osaline rike

Alglaadimist võib katkestada pärast osalist kõrvalmõju. Kirjutage skriptid nii, et järgmine käivitus kas lõpetab töö turvaliselt või väljub selge, kontrollitava olekuga.

Head mustrid:

  • kirjutage ajutisse faili, kontrollige, seejärel nimetage atomiliselt ümber;
  • kontrollige, kas kasutajad, kataloogid või seadistuskirjed on juba olemas;
  • kasutage install selge omaniku ja režiimi jaoks;
  • rakendage set -Eeuo pipefail ja käsitlege tahtlikult oodatavaid nullist erinevaid tulemusi;
  • kasutage piiratud võrgutimeout’e ja lõplikku korduste arvu; ja
  • kirjutage valmisoleku marker alles pärast kõigi vajalike sammude õnnestumist.

Ärge kasutage sleep valmisoleku kontrollina. Kontrollige tegelikku sõltuvust.

Välised allalaadimised

Vältige curl ... | sh. Kui esimesel käivitusel tuleb artefakt hankida:

  1. kasutage HTTPS-i sertifikaadi kontrolliga;
  2. kinnitage oodatav artefakt või allika versioon;
  3. kontrollige enne täitmist krüptograafilist räsi või heakskiidetud allkirja;
  4. seadistage ühenduse ja kogutimeout;
  5. kui kontroll ebaõnnestub, lõpetage töö; ja
  6. ärge logige credentials’e ega allkirjastatud URL-e.

Tõeliselt offline või korduvkasutatava käitumise jaoks lisage üle vaadatud sisu kujutisesse või heakskiidetud pakettide hoidlasse, mitte ära laadige esimesel käivitusel.

Saladused

Ärge kunagi pange credentials’e avatekstina retsepti, käsu, URL-i ega genereeritud markerisse. Recipe JSON ja build logid säilitatakse tõenditena ja võivad olla operaatoritele nähtavad. Kasutage heakskiidetud registreerimist või saladuste kohaletoimetamise mehhanismi juurutamise ajal ja piirake saadud credential sihtkohaga.

Täitmise identiteet

Eelistage mitteprivilegeeritud teenusekontot. Kui root on vajalik, vähendage käsk väikseimale privilegeeritud sammule ja määratlege selge faili omand. Veenduge, et run_as nimetab konto, mis loodi enne üksuse käivitumist.

Kontroll

Testige tulemusi, mitte ainult üksuse exit statusut:

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

Testige ka teist käivitust, kättesaamatut sõltuvust ja taastumist katkestatud esimesest käivitusest. Vea korral vaadake systemctl status ja üksuse logi.