comakingspace / do-something

CoMakingSpace tasks and small projects
21 stars 2 forks source link

Containerisierung von cncjs #226

Open NitramLegov opened 3 years ago

NitramLegov commented 3 years ago

Für die Steuerung der CNC Fräse setzen wir aktuell auf cncjs das auf einem Raspberry Pi läuft.

Da daran immer mal wieder rumgespielt wird ist es wichtig, dass ein Neuaufsetzen möglichst einfach möglich ist. Leider ist das aufsetzen von cncjs auf einem Pi immer eine pain und ziemliche Glücksache - gerade wenn man wenig Erfahrung mit nodeJS hat..

Es wäre cool, wenn jemand mit entsprechender nodeJS Erfahrung einen container aufbauen könnte den wir dann auf den Pi deployen könnten. Unser Fork von cncjs liegt in https://github.com/comakingspace/cncjs

Hat da jemand Zeit und Lust zu? @Narquadah @LarsKumbier wie schauts zum Beispiel bei euch aus?

emka commented 3 years ago

Hi, ich habe gerade keinen Pi + grbl zur Hand, aber habe schonmal ein Image gebaut: emka/cncjs-coms:armv7. Kann das jemand testen?

LarsKumbier commented 3 years ago

Einen entsprechenden Container zu bauen ist erstmal kein Problem, aber ich glaube nicht, dass das das Problem löst. Alle Änderungen die durch Experimente passieren und übernommen werden sollen, müssen ja wieder irgendwie zurückfließen in das Repo - und dann muss wieder das Dockerfile neu gebaut werden, wir müssen uns irgendwie um Secrets und Configs kümmern (die nicht im öffentlich Repo liegen dürfen) ... Außerdem müssen dann alle, die experimentieren wollen, sich mit dem Setup und Dockerfiles beschäftigen, was eher abschreckt.

Da es (vermutlich) nur zwei, drei Mitglieder geben wird, die solche Experimente machen, würde ich eher empfehlen, einfach zwei weitere MicroSD-Karten daneben zu legen. Wer experimentieren will, klont die aktuell benutzte Karte (mit dem neuesten Stand) an seinem lokalen Rechner, experimentiert und wenn Änderungen erfolgreich sind, wird das die neue Hauptkarte. Geht's schief, wird die alte Karte wieder eingelegt.

In komplexere Setups würde ich erst investieren, wenn wir mehr Gründe dafür haben.

NitramLegov commented 3 years ago

Prinzipiell würde ich dir zustimmen @LarsKumbier

Das Problem an der Stelle ist nur, dass Leute auf vermeintlicher Fehlersuche an den Einstellungen des Pi generell rumspielen. Ein Backup machen davor die wenigsten. An cncjs selbst spielen tatsächlich auch sehr wenige Leute rum. Ich glaube das wären bisher nur @Narquadah und ich gemeinsam :)

Experimente mit cncjs sind aktuell sehr schwierig und aufwändig, da cncjs jedesmal neu kompiliert werden muss und das ewig dauert - wenn wir eine zuverlässige build pipeline hätten, an deren Ende ein docker Container steht wäre das experimentieren tatsächlich sogar einfacher glaube ich :)

@emka sehr cool! Hast du das lokal gebaut und dann gepusht oder hast du das online von dockerhub bauen lassen? :)

emka commented 3 years ago

Das image ist lokal gebaut, die Dateien habe ich jetzt unter https://gist.github.com/emka/07e91fabbf931f930ecd42992f1d15e2 abgelegt. Das Bauen mit buildx kann man auch mit Github Actions automatisieren, das habe ich mir nicht genauer angesehen.

NitramLegov commented 3 years ago

Danke! Basierend auf deinem gist konnte ich einen GitHub Actions Workflow bauen, der das image baut und auf unseren DockerHub account lädt. Das Ergebnis kann man hier sehen: https://hub.docker.com/r/comakingspace/cncjs/tags?page=1&ordering=last_updated

Der zugehörige Workflow liegt hier: https://github.com/comakingspace/cncjs/blob/Dockertest/.github/workflows/main.yml

Das Ergebnis des letzten Runs liegt hier: https://github.com/comakingspace/cncjs/actions/runs/720402811

Als nächstes kann man das dann wohl testen :)

NitramLegov commented 2 years ago

Leider funktionieren die Container nicht.

Der Container von @emka scheint für einen pi3 b+ die falsche Architektur zu haben:

pi@comakingcnc2:~ $ podman run -p 8000:8000 emka/cncjs-coms:armv7 {"msg":"exec container process /bin/sh: Exec format error","level":"error","time":"2021-11-14T17:21:38.000122293Z"}

Der Container in https://github.com/comakingspace/cncjs (ghcr.io/comakingspace/cncjs:latest) gibt mir folgende Fehlermeldung:

pi@comakingcnc2:~ $ podman run -i -t --privileged -p 8080:8080 --name cncjs ghcr.io/comakingspace/cncjs:latest internal/modules/cjs/loader.js:638 throw err; ^

Error: Cannot find module '../dist/cncjs/server-cli' at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15) at Function.Module._load (internal/modules/cjs/loader.js:562:25) at Module.require (internal/modules/cjs/loader.js:692:17) at require (internal/modules/cjs/helpers.js:25:18) at Object. (/bin/cncjs:7:7) at Module._compile (internal/modules/cjs/loader.js:778:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10) at Module.load (internal/modules/cjs/loader.js:653:32) at tryModuleLoad (internal/modules/cjs/loader.js:593:12) at Function.Module._load (internal/modules/cjs/loader.js:585:3)

Ich habs heute nicht geschafft, das zu fixen. Kann jemand mit mehr Ahnung von NodeJS da mal reinschauen? (@emka @Narquadah @LarsKumbier ?)

Ich würde das gerne auch als Gelegenheit nutzen, cncjs gegebenenfalls das Shopfloor-Tablet pendant zur Seite zu stellen: https://github.com/cncjs/cncjs-shopfloor-tablet

Mir wäre eine Containerisierte Lösung hier wirklich recht - ich kriege CNCjs nämlich nicht einmal mehr neu gebaut 🙈

produkt-manager commented 2 years ago

Ich habe mir vor einiger Zeit ein RPI-Cluster auf Basis Hypriot gebaut.

FATA[0003] Error response from daemon: Cannot start container 0f0fa3f8e510e53908e6a459e817d600b9649e621e7dede974d6a65761ad39e5: exec format error"

produkt-manager commented 2 years ago

Die Find-Problematik könnte dieses Issue sein https://github.com/cncjs/cncjs/issues/489. Siehe insbesondere die beiden Kommentare von MitchBradley, in denen er erklärt, wie man die Versionskonflikte vermeidet, und die Kommentare von Isaiah-v. Das Issue scheint noch offen zu sein.

LarsKumbier commented 2 years ago

Ich stelle weiterhin zur Diskussion, ob Docker hier das richtige Tool ist und ob nicht ein dummes Install-Script und die vorgeschlagene Lösung mit zwei SD-Karten sinnvoller ist.

NitramLegov commented 2 years ago

Ein Install Script haben wir schon in https://github.com/comakingspace/GcodeSender geschrieben. Leider funktioniert das bei jeder Neuinstallation wieder nicht und erfordert ein Abtauchen in die Dependency Hell.

Da würde ich mir erhoffen, dass das mit Containern (als management tool nutzen wir ja podman) einfacher wird. Zumindest hätte ich dann einen Weg, auf einfachem Weg einen funktionierenden Stand zu erhalten, bei dem ich auch mal zumindest den Pi Updaten kann.

Momentan läuft das halt eher als Glücksache

emka commented 2 years ago

@NitramLegov Ich habe eine neue Version gepusht, kannst du es damit nochmal probieren? Das gist mit dem Dockerfile habe ich aktualisiert.

NitramLegov commented 2 years ago

@emka der hat geklappt! Dann schaue ich mal, ob sich das auch mit Actions umsetzen lässt :)