code wiki / _hdl_build / nx_vroom_autodeploy_install.nx

nx_vroom_autodeploy_install.nx source

↩ module page · 29 lines · 4606 B

1// nx_vroom_autodeploy_install.nx -- install + TEST the /video/ client auto-deploy script on the NAS 2// (operator 2026-06-23 "get the auto deploy going"). Investigation proved: install-video.sh manages the 3// daemon/nginx but NOT the client files, so there's no client auto-deploy -- this adds one. The script 4// pulls index.html+app.js from the Gitea bare repo (agents/invention-engine) + atomic-mv into the served 5// dir; runs as elderwesto (owns the dir + reads the bare repo); idempotent (only on head change). STEP 1 6// here = install (base64-decoded, no quoting risk) + force one deploy + a 2nd run to PROVE idempotent + 7// verify the fix markers survive. STEP 2 (separate) = add the /etc/crontab entry (needs sudo). No sudo here. 8// license_tier: ORIGINAL 9import "nx_syscalls.nx" 10 11const INSTALL_CMD: *u8 = "echo 'IyEvYmluL3NoCiMgbnhfdmlkZW9fZGVwbG95LnNoIC0tIGF1dG8tZGVwbG95IC92aWRlby8gY2xpZW50IChpbmRleC5odG1sLCBhcHAuanMpIGZyb20gR2l0ZWEKIyBhZ2VudHMvaW52ZW50aW9uLWVuZ2luZSB0byB0aGUgbmdpbngtc2VydmVkIGRpciwgYXMgZWxkZXJ3ZXN0byAob3ducyB0aGUgZGlyICsgcmVhZHMKIyB0aGUgYmFyZSByZXBvKS4gSWRlbXBvdGVudCAoc3luY3Mgb25seSB3aGVuIHRoZSBicmFuY2ggaGVhZCBjaGFuZ2VzKSwgQVRPTUlDIG12IChuZ2lueAojIG5ldmVyIHNlZXMgYSBwYXJ0aWFsIGZpbGUpLCBsb2dnZWQuIE5pc2hpIHRlYW0gYXV0by1kZXBsb3ksIDIwMjYtMDYtMjMuCnNldCAtZQpCQVJFPS92b2x1bWUxL2RvY2tlci9naXRlYS9naXQvcmVwb3NpdG9yaWVzL2VsZGVyd2VzdG8vbmlzaGktY29yZS5naXQKRFNUPS92b2x1bWUxL2hvbWVzL2VsZGVyd2VzdG8vbmlzaGlob3N0L3NpdGVzL25pc2hpZmFtaWx5L3ZpZGVvClNVQj1ueGMyL3NpdGVzL25pc2hpZmFtaWx5L3ZpZGVvCkJSPWFnZW50cy9pbnZlbnRpb24tZW5naW5lClNUPS92b2x1bWUxL2hvbWVzL2VsZGVyd2VzdG8vbmlzaGlob3N0Ly5ueF92aWRlb19kZXBsb3kuc3RhdGUKTE9HPS92b2x1bWUxL2hvbWVzL2VsZGVyd2VzdG8vbmlzaGlob3N0L254X3ZpZGVvX2RlcGxveS5sb2cKSEVBRD0kKGdpdCAtYyBzYWZlLmRpcmVjdG9yeT0nKicgLS1naXQtZGlyPSIkQkFSRSIgcmV2LXBhcnNlICIkQlIiIDI+L2Rldi9udWxsIHx8IGVjaG8gbm9uZSkKWyAiJEhFQUQiID0gbm9uZSBdICYmIGV4aXQgMApMQVNUPSQoY2F0ICIkU1QiIDI+L2Rldi9udWxsIHx8IGVjaG8gbm9uZSkKWyAiJEhFQUQiID0gIiRMQVNUIiBdICYmIGV4aXQgMApXPSQobWt0ZW1wIC1kKQpnaXQgLWMgc2FmZS5kaXJlY3Rvcnk9JyonIC0tZ2l0LWRpcj0iJEJBUkUiIGFyY2hpdmUgIiRCUiIgIiRTVUIvaW5kZXguaHRtbCIgIiRTVUIvYXBwLmpzIiB8IHRhciAteCAtQyAiJFciCmZvciBmIGluIGluZGV4Lmh0bWwgYXBwLmpzOyBkbwogIFsgLXMgIiRXLyRTVUIvJGYiIF0gfHwgY29udGludWUKICBjcCAiJFcvJFNVQi8kZiIgIiREU1QvLiRmLm5ldyIKICBtdiAtZiAiJERTVC8uJGYubmV3IiAiJERTVC8kZiIKZG9uZQpybSAtcmYgIiRXIgpwcmludGYgJyVzJyAiJEhFQUQiID4gIiRTVCIKcHJpbnRmICdbJXNdIGRlcGxveWVkICVzIC0+IHNlcnZlZFxuJyAiJChkYXRlIC11ICslRlQlVFopIiAiJEhFQUQiID4+ICIkTE9HIgo=' | base64 -d > /volume1/homes/elderwesto/nishihost/nx_video_deploy.sh; chmod 755 /volume1/homes/elderwesto/nishihost/nx_video_deploy.sh; echo INSTALLED:; ls -l /volume1/homes/elderwesto/nishihost/nx_video_deploy.sh; echo FORCE_TEST:; rm -f /volume1/homes/elderwesto/nishihost/.nx_video_deploy.state; sh /volume1/homes/elderwesto/nishihost/nx_video_deploy.sh; echo rc=$?; echo RUN2_NOOP:; sh /volume1/homes/elderwesto/nishihost/nx_video_deploy.sh; echo rc=$?; echo MARKERS:; grep -c 'tile self' /volume1/homes/elderwesto/nishihost/sites/nishifamily/video/app.js; grep -c 'scaleX(-1)' /volume1/homes/elderwesto/nishihost/sites/nishifamily/video/index.html; echo STATE:; cat /volume1/homes/elderwesto/nishihost/.nx_video_deploy.state; echo; echo LOG:; tail -2 /volume1/homes/elderwesto/nishihost/nx_video_deploy.log; echo END\n" 12 13func slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n } 14func pw(s: *u8) -> i64 { sys_write(1,s,slen(s)); return 0 } 15func pn(v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48 as u8;k=1} while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1} var i: i64=0; while i<k{bb[i]=t[k-1-i];i=i+1} sys_write(1,bb,k); return 0 } 16 17func main() -> i64 { 18 let box: *i64 = sys_mmap(16) as *i64 19 let sec: *u8 = sys_read_file("/tmp/nxsecret.out" as *u8, box) 20 if (sec as i64)==0 { pw("AUTODEPLOY-STAGE: no /tmp/nxsecret.out -- run nx_machine_key + _offc/nx_vault.elf open first\n"); sys_exit(1); return 1 } 21 let pf: i64 = sys_openat_wr("/tmp/nxpw" as *u8, 0x180) 22 if pf<0 { pw("AUTODEPLOY-STAGE: cannot write /tmp/nxpw\n"); sys_exit(1); return 1 } 23 sys_write(pf, sec, box[0]); sys_close(pf) 24 let cf: i64 = sys_openat_wr("/tmp/nxcmd" as *u8, 0x180) 25 if cf<0 { pw("AUTODEPLOY-STAGE: cannot write /tmp/nxcmd\n"); sys_exit(1); return 1 } 26 sys_write(cf, INSTALL_CMD, slen(INSTALL_CMD)); sys_close(cf) 27 pw("AUTODEPLOY-STAGE: credential -> /tmp/nxpw ("); pn(box[0]); pw(" bytes) + install/test command staged. Run nx_ssh_cmd to install + test the auto-deploy script (as elderwesto, no sudo).\n") 28 sys_exit(0); return 0 29}