Korjasin # kommentit // #
[+] COMMIT VALMIS: /mnt/mesh_root/src/js-sandbox-api/src/host/server.js
[+] COMMIT VALMIS: /mnt/mesh_root/src/js-sandbox-api/src/sandbox/sandbox-runner
.js
==[ 1 ]==
$ npm start
> js-sandbox-api@1.0.0 start
> node src/host/server.js
[07:16:35 UTC] INFO: Server listening at http://127.0.0.1:3000
[07:16:35 UTC] INFO: Server listening at http://100.66.159.31:3000
[07:16:35 UTC] INFO: Server listening at http://10.215.217.37:3000
[07:16:35 UTC] INFO: Ohjaus-API kuuntelee portissa 3000
==[ 2 ]==
$ {
> # 1. Luo pankki
BANK_ID=$(curl -s -X POST http://localhost:3000/api/v1/memory -H
"Content-Type: application/json" -d '{"size": 1048576}' | jq -r .id)
# 2. SyC6tC$ koodi instanssille!
curl -X POST http://localhost:3000/api/v1/instances \
-H "Content-Type: application/json" \
-d "{
B \"memoryBankId\": \"$BANK_ID\",
B \"code\": \"export function execute() { console.log('MinC$ elC$n
dynaamisesti!'); sharedMem[0] = 999; console.log('Kirjoitin muistiin 999.');
}\"
}"
> }
{"id":"70407812-c026-4a26-8cf2-a99370d2938c","status":"running"}$B
==[ 1 ]==
[07:16:54 UTC] INFO: incoming request
B B reqId: "req-1"
B B req: {
B B B "method": "POST",
B B B "url": "/api/v1/memory",
B B B "host": "localhost:3000",
B B B "remoteAddress": "127.0.0.1",
B B B "remotePort": 46860
B B }
[07:16:54 UTC] INFO: Luotu muistipankki 51a6fe48-0bac-402e-abfa-3741a3ba2fc4
(1048576 bytes). FD: 26
B B reqId: "req-1"
[07:16:54 UTC] INFO: request completed
B B reqId: "req-1"
B B res: {
B B B "statusCode": 200
B B }
B B responseTime: 8.761256217956543
[07:16:54 UTC] INFO: incoming request
B B reqId: "req-2"
B B req: {
B B B "method": "POST",
B B B "url": "/api/v1/instances",
B B B "host": "localhost:3000",
B B B "remoteAddress": "127.0.0.1",
B B B "remotePort": 46864
B B }
[07:16:54 UTC] INFO: Instanssi 70407812-c026-4a26-8cf2-a99370d2938c
kC$ynnistetty pankilla 51a6fe48-0bac-402e-abfa-3741a3ba2fc4
B B reqId: "req-2"
[07:16:54 UTC] INFO: request completed
B B reqId: "req-2"
B B res: {
B B B "statusCode": 200
B B }
B B responseTime: 7.99343204498291
[07:16:54 UTC] INFO: [Sandbox 70407812-c026-4a26-8cf2-a99370d2938c] MinC$
elC$n dynaamisesti!
B B reqId: "req-2"
[07:16:54 UTC] INFO: [Sandbox 70407812-c026-4a26-8cf2-a99370d2938c] Kirjoitin
muistiin 999.
B B reqId: "req-2"
[07:16:54 UTC] INFO: [Sandbox 70407812-c026-4a26-8cf2-a99370d2938c] Koodin
suoritus ilmoitti valmiudesta. Bankin uusi arvo: 999
B B reqId: "req-2"
TC$mC$ on **tC$ydellinen onnistuminen!**
Lokeista nC$kee suoraan, kuinka arkkitehtuurin jokainen osa-alue toimii
tismalleen suunnitellusti yhteen:
1. Fastify-palvelin otti REST-pyynnC6n vastaan ja loi uuden `memfd`-pankin
(`FD: 26`).
2. Se kC$ynnisti uuden instanssin `child_process.forkilla` ja vC$litti FD:n
turvallisesti POSIX `stdio` -putkea pitkin (FD 4).
3. `sandbox-runner.js` vastaanotti dynaamisen koodin IPC:n yli ja sulki sen
ilmatiiviiseen `vm.SourceTextModule`-kuplaan.
4. Koodi suoritettiin: se huusi *"MinC$ elC$n dynaamisesti!"* Hostin lokiin ja
kirjasi arvon `999` raakaan muistiin.
5. Host luki muistin arvon samalla millisekunnilla suoraan C++ N-API -sillan
kytkemC$stC$ `Uint32Array`:sta, tC$ysin ilman sarjallistusviiveitC$.
Olemme juuri saaneet valmiiksi **Vaiheen 1** ytimen.
[IRC-OMEGA-START] @GEM Viesti kaikille chateille: Vaihe 1 on VALMIS! Zero
Trust Node.js Sandboxin ohjaus-API kykenee nyt vastaanottamaan dynaamista
koodia verkon yli, kC$ynnistC$mC$C$n eristettyjC$ instansseja ja kytkemC$C$n
niihin memfd-muistipankkeja laitteistotason suorituskyvyllC$. [IRC-OMEGA-END]
### Mihin isketC$C$n seuraavaksi?
MeillC$ on nyt kaksi erittC$in mielenkiintoista suuntaa, joilla jatkaa Draft
v0.2 -spesifikaation mukaista toteutusta. Kumman kimppuun haluat kC$ydC$?
**Vaihtoehto A: Resurssienhallinta (Vaihe 2 - Cgroups v2)**
* Alamme luoda Host-skriptissC$ `/sys/fs/cgroup/instances/<id>` -alikansioita
jokaiselle uudelle instanssille.
* Pakotamme instansseille tiukat RAM- ja CPU-rajat (esim. max 50MB muistia).
* *(Huom: TC$mC$n kehittC$minen ja testaaminen vaatii yleensC$, ettC$
Host-palvelinta ajetaan `root`-oikeuksin tai privilegoidussa lxc-kontissa).*
**Vaihtoehto B: Vikasietotila & SyvC$luotaus (Vaihe 3 - Safe Mode)**
* Rakennamme crash-luuppien tunnistuksen (esim. yli 3 kaatumista minuutissa ->
`SAFE_LOCKED`).
* Toteutamme `?mode=safe` -endpointin, joka kC$ynnistC$C$ hiekkalaatikon
`--inspect-brk=0` -lipulla.
* Pakotamme instanssin V8 Inspectorin kuuntelemaan lokaalia Unix-domain
socketia, jonka kautta operaattori (tai AI) voi askeltaa koodia turvallisesti.
Kumpi nC$istC$ tuntuu luonnollisemmalta seuraavalta askeleelta?