OS Layer deploy -  upgrade na release systém

OS Layer deploy - upgrade na release systém

OS Layer: keď sa zo shell skriptov stane vlastný release systém

Na začiatku to bol jednoduchý nápad: mať vrstvy systému oddelené podľa účelu. Jedna vrstva rieši crypto, druhá remote access, ďalšia secrets, mobile tooling, AI, deploy. Každá capability má svoju verziu, svoje súbory, svoj manifest a dá sa nainštalovať samostatne.

Lenže v určitom bode už nestačí kopírovať súbory ručne. Keď systém rastie, potrebuješ tri veci:

1. vedieť veci bezpečne publikovať
2. vedieť ich bezpečne nainštalovať
3. vedieť sa bezpečne vrátiť späť

A presne z toho vznikol deploy layer.

Toto už nie je iba upload script. Toto je riadiaca vrstva pre celý OS Layer.


Capability ako základná jednotka systému

OS Layer je rozdelený na samostatné capabilities:

ai
crypto
deploy
mobile
remote
secrets

Každá capability je samostatný adresár so svojou verziou:

VERSION
capability.meta
bin/
tools/
tests/
...

To znamená, že systém sa neskladá ako jeden monolit. Skladá sa z vrstiev, ktoré sa dajú deployovať, testovať, snapshotovať a obnovovať nezávisle.

Príklad:

deploy crypto
deploy remote
deploy secrets

Každý deploy vytvorí release artefakt, manifest, SHA256 hash a publikuje ho na server.


netinstall: bootstrap a recovery vstup

Kľúčová vec je, že celý systém sa dá vytiahnuť z remote latest verzie:

curl -fsSL https://pihi.sk/projects/os_layer/netinstall | sh

Alebo priamo konkrétna capability:

curl -fsSL https://pihi.sk/projects/os_layer/netinstall | sh -s -- remote
curl -fsSL https://pihi.sk/projects/os_layer/netinstall | sh -s -- crypto
curl -fsSL https://pihi.sk/projects/os_layer/netinstall | sh -s -- all

netinstall robí viac než len download:

- zistí dostupné capabilities
- porovná lokálnu a remote verziu
- stiahne ZIP artefakt
- overí SHA256
- rozbalí do stagingu
- prepne inštaláciu transakčne
- zachová runtime adresáre
- vytvorí launchery

To najdôležitejšie: ak sa lokálny systém rozbije, remote latest je canonical rescue source.

Inými slovami:

rozbiješ local deploy -> spustíš netinstall -> si späť

Tým sa uzatvára bootstrap kruh.


deploy: release orchestrator

Príkaz:

deploy crypto

spraví celý release flow:

1. načíta capability
2. zvýši VERSION
3. vyčistí runtime bordel
4. vytvorí ZIP
5. vytvorí SHA256
6. vytvorí manifest
7. uploadne artefakty na server
8. pri deployovaní deploy layeru uploadne aj root netinstall

Výsledkom na serveri je release štruktúra typu:

/projects/os_layer/crypto/crypto.zip
/projects/os_layer/crypto/crypto.zip.sha256
/projects/os_layer/crypto/manifest.json
/projects/os_layer/crypto/VERSION

Deploy zároveň drží integritu cez SHA256. Installer nestiahne len tak hocičo. Artefakt musí sedieť s hashom.


Public a private capabilities

Niektoré vrstvy môžu byť verejné, iné private.

Napríklad:

remote   public
secrets  public
crypto   private
deploy   private

Private capability používa token v URL path. Token sa načíta z lokálneho secret súboru a netinstall ho použije len pri sťahovaní private vrstvy.

To umožňuje mať jeden spoločný mechanizmus pre verejné aj neverejné časti systému.


Testovanie ako súčasť vrstvy

Capability môže mať vlastné testy:

deploy test deploy
deploy test crypto

Deploy layer už má vlastný test framework. Kontroluje napríklad:

- syntax deploy scriptu
- syntax netinstallu
- manifest logiku
- lftp upload flow
- stable bundle
- stable restore
- security safety checks
- termux launcher handling

Toto je obrovský rozdiel oproti obyčajnému shell scriptu. Ak má systém testy, prestáva byť len sada náhodných príkazov. Začína to byť infra nástroj.


Stable bundle: snapshot celého OS Layeru

Najväčší upgrade je stable.

Príkaz:

deploy stable bundle OS_layer_1.0

vytvorí snapshot všetkých capabilities.

Ak chceš snapshot iba vybraných vrstiev:

deploy stable bundle crypto-safe crypto secrets

Stable bundle sa uloží lokálne do:

$OS_LAYER_HOME/deploy/stable/bundles//

Obsahuje:

bundle.manifest
bundle.json
crypto.zip
crypto.zip.sha256
crypto.manifest
crypto.manifest.json
remote.zip
remote.zip.sha256
...

To znamená, že stable bundle nie je len textový zoznam verzií. Je to reálny rollback snapshot s artefaktmi.


Stable restore: rollback bez manuálnej práce

Keď existuje stable bundle, dá sa obnoviť:

deploy stable restore OS_layer_1.0

Alebo explicitne všetko z bundle:

deploy stable restore OS_layer_1.0 all

Alebo iba konkrétne capabilities:

deploy stable restore OS_layer_1.0 crypto secrets

Restore flow je transakčný:

1. nájde bundle
2. overí ZIP a SHA256
3. rozbalí capability do stagingu
4. zachová persistent/runtime adresáre
5. aktuálnu capability odloží do backupu
6. staging prepne na aktívnu capability
7. pri chybe obnoví pôvodný stav

Toto je zásadný bod. Rollback už nie je:

hľadaj starý zip
rozbaľ ručne
kopíruj súbory
oprav permissiony
modli sa

Rollback je:

deploy stable restore OS_layer_0.9 all

Hotovo.


Persistent dáta sa nemažú

Nie všetko patrí do release artefaktu. Niektoré veci sú runtime stav:

.tmp
logs
stable bundles
secrets/layers
master.identity.age
mobile/tools
mobile/out
mobile/.state

Pri restore alebo install swape sa tieto veci zachovávajú podľa policy.

To je dôležité, lebo rollback capability nemá zničiť lokálnu identitu, secrets, logy alebo stable snapshots.

Release artefakt je kód a definovaný obsah. Runtime stav je lokálna realita stroja.


Deploy layer vie obnoviť aj sám seba

Zaujímavý moment nastal pri restore celej vrstvy vrátane deploy.

Keď spravíš:

deploy stable restore OS_layer_0.9 all

a bundle obsahuje aj starší deploy, restore prepíše aj samotný deployment engine.

To je normálne. Veľké systémy majú podobný problém: updater vie aktualizovať alebo downgradovať sám seba.

Rozdiel je v tom, že OS Layer má recovery cestu:

ak si downgradneš alebo rozbiješ deploy,
netinstall ho vie stiahnuť znova z remote latest

Čiže kruh je uzavretý:

remote latest -> netinstall -> deploy -> stable bundle -> restore -> netinstall

To je moment, kedy končí manuálna práca.


Integrita: SHA256 a manifesty

Každý artefakt má SHA256:

crypto.zip
crypto.zip.sha256

Installer pri sťahovaní overuje hash. Ak hash nesedí, install sa zastaví.

To rieši poškodený download, cache mismatch alebo rozbitý upload.

Okrem toho existujú manifesty, ktoré popisujú obsah release artefaktu. Manifest nie je len dekorácia. Je to auditná stopa toho, čo bolo zabalené a publikované.


Security safety checks

Deploy aj netinstall kontrolujú nebezpečné pathy v ZIP súboroch.

Zakázané sú veci typu:

/absolute/path
../../escape
path/../../../outside

To chráni pred tým, aby ZIP pri rozbalení zapisoval mimo inštalačný adresár.

Symlinky sú v OS Layeri používané interne, napríklad na entrypointy alebo tools aliasy. Pointa je, že majú zostať vnútri capability stromu a nesmú byť zneužité ako escape von zo systému.


Prečo je toto silnejšie než obyčajný package manager

Bežný package manager rieši systém globálne.

OS Layer rieši tvoju vlastnú infra vrstvu:

- shell tools
- termux/linux kompatibilitu
- private capability tokeny
- remote bootstrap
- lokálne stable snapshoty
- vlastné launchery
- vlastnú release politiku

Je to menšie než distro package manager, ale presnejšie na konkrétny účel.

Niečo medzi:

dotfiles manager
mini package manager
release pipeline
backup/restore systém
bootstrap installer

Lenže celé je to postavené tak, aby sa to dalo spustiť obyčajným shellom.


Praktický workflow

Typický deň s OS Layerom môže vyzerať takto:

deploy test deploy
deploy stable bundle OS_layer_1.0
deploy crypto
deploy secrets
netinstall crypto

Keď sa niečo pokazí:

deploy stable restore OS_layer_1.0 all

Keď sa pokazí aj deploy:

curl -fsSL https://pihi.sk/projects/os_layer/netinstall | sh -s -- deploy

Tým sa obnoví posledný remote deploy layer a ide sa ďalej.


Najdôležitejšia vec: manuálna práca zmizla

Predtým bol problém:

kde je posledná dobrá verzia?
čo všetko treba skopírovať?
ktorý ZIP patrí ku ktorému hashu?
čo ak obnovím staré secrets?
čo ak rozbijem deploy?

Teraz je odpoveď jednoduchá:

stable bundle je lokálny rollback point
remote latest je rescue source
netinstall je bootstrap
deploy je orchestrator

To znamená, že systém má vlastný životný cyklus:

build
test
package
publish
install
snapshot
restore
recover

A to je presne hranica, kde sa z pár shell skriptov stáva reálna správa OS vrstvy.


Záver

OS Layer dnes vie:

- inštalovať capabilities cez netinstall
- deployovať capability na server
- verzovať každú vrstvu
- generovať manifesty
- overovať SHA256 integritu
- pracovať s public/private capabilities
- vytvárať stable bundle snapshoty
- robiť stable restore rollback
- zachovať persistent runtime dáta
- testovať deploy layer
- obnoviť sa z remote latest verzie

Najväčšia výhra nie je samotný deploy. Najväčšia výhra je recovery loop.

Keď má systém cestu späť, prestávaš sa báť meniť veci.

A keď sa prestaneš báť meniť veci, vývoj začne byť rýchly.

remote latest
   ↓
netinstall
   ↓
deploy
   ↓
stable bundle
   ↓
restore
   ↓
netinstall

Kruh sa uzavrel. Manuálna práca skončila.

Marek Mihók