Skip to Content
Building OsStarta skripti

Starta skripti

os.startup_scripts izveido ierobežotu systemd vienreizēju darbu rezultējošajam attēlam. Katrs ieraksts deklarē shell komandu, nepieciešamās pakotnes, izpildes lietotāju un secības vienību.

Starta skripti ir kods ar root iespējām, ja run_as nenosaka citādi. Tos jāpārskata tāpat kā jebkuru instalācijas skriptu.

Kanoniskā 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" } ] } }

Lauki ir description un command, ne mantotā lauka script. run_as un after arī izmanto snake_case. after ir viena systemd vienības virkne, ne masīvs.

Shēma pieņem ne vairāk kā 32 ierakstus un ierobežota lieluma komandu. Validācija noraida tukšas komandas un NUL baitus, bet nepadara shell saturu drošu vai idempotentu.

Projektēšana atkārtotiem mēģinājumiem un daļējai kļūdai

Palaišana var tikt pārtraukta pēc daļējiem blakus efektiem. Rakstiet skriptus tā, lai nākamā izpilde vai nu droši pabeidz darbu, vai beidzas ar skaidru, pārskatāmu stāvokli.

Labie modeļi:

  • rakstīt pagaidu failā, pārbaudīt, tad atomiski pārdēvēt;
  • pārbaudīt, vai lietotāji, direktorijas vai konfigurācijas ieraksti jau pastāv;
  • izmantot install skaidram īpašniekam un režīmam;
  • lietot set -Eeuo pipefail un apzināti apstrādāt paredzamos nenulles rezultātus;
  • izmantot ierobežotus tīkla timeout un galīgu mēģinājumu skaitu; un
  • gatavības marķieri rakstīt tikai pēc visu nepieciešamo soļu veiksmes.

Neuzskatiet sleep par gatavības pārbaudi. Pārbaudiet faktisko atkarību.

Ārējās lejupielādes

Izvairieties no curl ... | sh. Ja pirmajā palaišanā jāiegūst artefakts:

  1. izmantojiet HTTPS ar sertifikāta pārbaudi;
  2. piesaistiet gaidīto artefaktu vai avota versiju;
  3. pirms izpildes pārbaudiet kriptogrāfisko kopsavilkumu vai apstiprinātu parakstu;
  4. iestatiet savienojuma un kopējos timeout;
  5. ja verifikācija neizdodas, pārtrauciet izpildi; un
  6. nelogojiet credentials vai parakstītus URL.

Patiesi offline vai atkārtojamai uzvedībai iekļaujiet pārskatītu saturu attēlā vai apstiprinātā pakotņu repozitorijā, nevis lejupielādējiet pirmajā palaišanā.

Noslēpumi

Nekad neievietojiet credentials atklātā tekstā receptē, komandā, URL vai ģenerētā marķierī. Recipe JSON un build logi tiek glabāti kā pierādījumi un var būt redzami operatoriem. Izmantojiet apstiprinātu reģistrācijas vai slepeno datu piegādes mehānismu izvietošanas laikā un ierobežojiet iegūto credential mērķim.

Izpildes identitāte

Dodiet priekšroku nepriviliģētai servisa kontam. Ja vajadzīgs root, samaziniet komandu līdz mazākajam priviliģētajam solim un iestatiet skaidru faila īpašumtiesības. Pārliecinieties, ka run_as norāda kontu, kas izveidots pirms vienības starta.

Verifikācija

Pārbaudiet rezultātus, ne tikai vienības exit statusu:

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

Pārbaudiet arī otro palaišanu, nepieejamu atkarību un atjaunošanu pēc pārtrauktas pirmās palaišanas. Kļūmes gadījumā apskatiet systemctl status un vienības žurnālu.