do-something icon indicating copy to clipboard operation
do-something copied to clipboard

Containerisierung von cncjs

Open NitramLegov opened this issue 3 years ago • 12 comments

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?

NitramLegov avatar Mar 14 '21 12:03 NitramLegov

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

emka avatar Mar 14 '21 18:03 emka

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.

LarsKumbier avatar Mar 15 '21 07:03 LarsKumbier

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? :)

NitramLegov avatar Mar 20 '21 16:03 NitramLegov

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.

emka avatar Apr 05 '21 19:04 emka

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 avatar Apr 05 '21 21:04 NitramLegov

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 🙈

NitramLegov avatar Nov 14 '21 17:11 NitramLegov

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

  • "Falsches Format" deutet auf folgenden Kommentar von deren Homepage hin (kann das sein?): https://blog.hypriot.com/getting-started-with-docker-on-your-arm-device/ "Thus, Docker-based apps you use have to be packaged specifically for ARM architecture! Docker-based apps packaged for x86/x64 will not work and will result in an error such as:

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

  • Hypriot bietet auch ein spezielles RPI Image an, dass gut mit Docker und KubeCtl funktioniert, sofern man die passenden Container benutzt. Vielleicht die passenden RPis so aufsetzen? https://blog.hypriot.com/getting-started-with-docker-and-linux-on-the-raspberry-pi/

produkt-manager avatar Nov 15 '21 15:11 produkt-manager

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.

produkt-manager avatar Nov 15 '21 16:11 produkt-manager

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.

LarsKumbier avatar Nov 15 '21 17:11 LarsKumbier

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

NitramLegov avatar Nov 15 '21 17:11 NitramLegov

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

emka avatar Nov 15 '21 18:11 emka

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

NitramLegov avatar Nov 15 '21 22:11 NitramLegov

Obsolete with #307

NitramLegov avatar Sep 27 '24 17:09 NitramLegov