USBTin Can-Adapter unter Linux zum Laufen bringen

Mittwoch, September 5, 2018 by crypti

Für die Analyse von CAN-Bus-Nachrichten hatte ich mir vor einiger Zeit einen USBTin-Can-Bus-Adapter geholt. Der war extrem günstig, auch wenn man quasi nur die Platine erhält, tut er doch genau das was er soll.

Da ich zwischen letztem Mal und heute schon alles komplett vergessen habe, wie ich den unter Linux zum Laufen bringe und das beim nächsten Mal nicht anders sein wird, hier ein Link zu einem entsprechenden Artikel, wie das geht:

https://www.fischl.d … /linux_can_socketcan

EPS in DXF umwandeln

Mittwoch, Mai 24, 2017 by crypti

Nachdem der Cutworks-Webshop inzwischen auch Kunststoff-Teile im Sortiment hat und nach Aussage unseres Kunststoff-Partners ein Großteil der Kunden mit EPS-Dateien arbeitet, habe ich mich mal im Netz umgeschaut, wie man ein EPS in ein DXF umwandeln kann, ohne das über einen Cloud-Service oder teure Zusatz-Software abbilden zu können.

Nach ziemlich langem Suchen bin ich auf ein Linux-Forum gestoßen, bei dem der entsprechende Blogger eine Umwandlung mit Hilfe von pstoedit durchführt.

WOW - ein Gratis-Tool auf der Linux-Kommandozeile, dass genau die Dinge macht die ich brauche - ich bin begeistert. Nachdem ich dann endlich wusste, wie das Tool heisst, konnte ich auf der sourceforge-Seite sogar eine Windows-Version herunterladen und installieren.

Die ersten Tests zeigten zwar, dass zwingend eine Installation von Ghostscript notwendig ist (die 32bit-Version - egal, ob pstoedit 64 oder 32 bit ist). Nach der Installation konnte ich mit dem folgenden Befehl eine EPS erfolgreich in eine DXF umwandeln:

pstoedit.exe -dt -f dxf:-polyaslines <Quelldatei>.eps <Zieldatei>.dxf 

Optional kann man mit -mm das Modell als mm umwandeln, standardmäßig wird sonst inch benutzt!

Das ganze lässt sich ziemlich leicht als Java-Service im Backend über ProcessBuilder bzw. Runtime.exec() aufrufen, so dass man schwupp die wupp - in kürzester Zeit auch EPS-Dateien lesen kann.

Nachtrag 25.05.2017:

Bei der Integration in Java führte die Ausführung von pstoedit immer dazu, dass nur der DXF-Header erzeugt wurde, nach dem Header brach die Generierung ab. Hintergrund ist, dass bei Aufruf von gswin32c in das Standard-Temp-Verzeichnis (C:\Users\%userName%\Appdata\LocalLow\Temp\2) geschrieben wird, welches als System-Account wohl nicht zur Verfügung steht. Daher führt der Ghostscript-Aufruf wohl zu einer leeren Datei.
Zur Behebung des Problems muss man den Tomcat-Dienst dann einfach als priviligierter Nutzer (z.B. Administrator) ausführen, anschließend funktioniert die Umwandlung ohne Probleme.

Docker - mounten von Netzwerkverzeichnissen

Donnerstag, März 16, 2017 by crypti

Für die Erstellung eines angepassten Yocto-Images für unsere Steuerung besteht die Idee, das auf einem Samba-Share vorhandene Git automatisch auszuchecken, zu bauen und in das FileSystem einzuspielen.
Für die Portabilität habe ich das Yocto-Build-System in einem Docker laufen.

Blauäugig wie ich bin, habe ich in die fstab des Docker-Containers einfach mal die entsprechenden Mountpoints angegeben und nach Installation des cifs-utils - Pakets versucht den SMB-Share mit mount.cifs /mountPoint entsprechend zu mounten. Egal was ich jedoch gemacht habe, immer kam :

mount error(1): Operation not permitted
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

Trotz diversen chmod’s (in diversen Foren gelesen) habe ich es jedoch nicht geschafft, das mount zum Laufen zu bekommen, bis ich darauf aufmerksam wurde, dass Docker in der Standard-Einstellung so etwas verbietet.

Dazu benötigt man entweder erweiterte Privilegien im Container bzw. die SYS_ADMIN - Rolle. Leider geht das nur beim erzeugen eines Containers aus einem Image über den run-Befehl, ein bestehender Container kann leider nicht mit den Rechten ausgestattet werden.

Nachdem dann also aus meinem Container über:

docker commit -a "Carsten Schunk" -m "irgendeine Beschreibung" <docker-id> <image-name>

nach ca. 3 Stunden ein Image erstellt worden ist, konnte ich anschließend aus dem Image wiederum einen Docker-Container mit erweiterten Rechten erstellen:

docker run -it --cap-add SYS_ADMIN --privileged <image-name> /bin/bash

Mit diesen erweiterten Rechten konnte man dann auch ein cifs-Dateisystem mounten. Hier sollte aber darauf geachtet werden, in den Mount-Optionen ein nofail einzubauen, ansonsten kann es sein, dass der Start des Containers sehr lange bzw. endlos dauert. I.d.R. wird der mount beim Start erfolglos sein, aber nach einem attach kann man das ja manuell machen.

Muss man erst mal wissen …