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 …

Docker auf anderen Pfad einstellen

Dienstag, Januar 10, 2017 by crypti

Da speziell ein Yocto-Build sehr viel Speicherplatz benötigt und mein System nicht allzuviel Platz besitzt (nach 2-3 Builds war die Festplatte voll) habe ich mir eine extra Festplatte für Docker in meinen PC eingebaut.

Diese Festplatte habe ich im ersten Schritt in die fstab eingetragen:

/dev/sdb2  /docker ext4 defaults,noatime,discard,rw,exec 0 1

Wichtig hierbei ist (bei der aktuelle Manjaro-Version 4.4.39-Kernel) die exec-Option, da ansonsten möglicherweise beim Start des docker-Images die Fehlermeldung:

standard_init_linux.go:175: exec user process caused “permission denied”

erscheint.
Anschließend wird der docker-Ordner gemounted:

sudo mount /docker

Nun erzeugt man ein Verzeichnis docker.service.d in /etc/systemd/system:

sudo mkdir /etc/systemd/system/docker.service.d

und anschließend eine Datei imagelocation.conf

sudo vi /etc/systemd/system/docker.service.d/imagelocation.conf

Hier trägt man dann folgende Zeilen ein:

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -g /docker -H fd://

Nun kann man alle Dateien von /var/lib/docker in das neue Docker-Verzeichnis kopieren:

sudo cp -r /var/lib/docker/ /docker

Nach Abschluss des Kopierens wird der docker-Dienst neu gestartet:

sudo systemctl restart docker

Mit dem Befehl:

docker info

kann überprüft werden, ob das Umstellen funktioniert hat. Hier sollte “Docker Root Dir” auf /docker stehen.