Hin und wieder kommt man in die Verlegenheit dmg-Dateien unter Linux extrahieren zu müssen. In meinem Fall ging es um ein Upgrade der Firmware einer Canon EOS 400D. Die Installation der Firmware bedarf eigentlich keines Rechners. Man muss nur die Firmware-Datei auf die Speicherkarte schieben und das Update anstoßen, doch Canon liefert die Firmware nur in Form nur einer selbst extrahierenden exe-Datei für Windows und für MacOS X als dmg-Datei aus. Eine simple Archiv-Datei wird überhaupt gar nicht erst angeboten. Um nun nicht mit Wine oder einer virtuellen Maschine mit Windows hantieren zu müssen, habe ich mich mal umgesehen wie man denn diese dmg-Datei unter Linux extrahieren kann. Schwer ist es nicht…
Solch eine auf dem Mac recht alltägliche Disk-Image-Datei ist eigentlich nichts anderes als eine mit HFS+ formatierte Image-Datei. Mit dem geeigneten Kommando kann man diese Datei direkt in Linux ins System einbinden. Allerdings gibt es diese dmg-Files in einer einer Variante mit und einer Variante ohne Kompression, sowie auch Version mit Verschlüsselung. Zumindest die ersten zwei Varianten lassen sich leicht einbinden…
Ohne Kompression
In einem ersten Schritt solltet Ihr überprüfen mit was für einer Version ihr es zu tun habt. Dazu kommt das file-Kommando recht gelegen. Speichert eure dmg-Datei auf der Festplatte ab, und ruft die Datei mit file auf. Sollte die Datei nicht komprimiert sein, so bekommt ihr ein Ergebnis in dieser Art…
$ file beispiel.dmg beispiel.dmg: Macintosh HFS Extended version 4 data last mounted by: ’10.0′, created: Fri Jan 30 11:12:33 2009, last modified: Fri Jan 23 12:09:55 2009, last checked: Fri Feb 07 04:22:58 2009, block size: 4096, number of blocks: 6400, free blocks: 218
…angezeigt. In Ubuntu könnt Ihr diese Datei dann sofort über beispielsweise…
$ mkdir /tmp/dmg $ sudo mount -t hfsplus -o loop e4kr3111_uncompressed.dmg /tmp/dmg/
…nach /tmp/dmg/ mounten und von dort dann die Daten holen. Ich wähle gewusst ein Verzeichnis in /tmp, da dieser Ordner beim nächsten Start automatisch gelöscht wird. Nach dem extrahieren der Daten, brauche ich den Mountpunkt ja nicht mehr. [UPDATE 08.11.2011: Bitte überprüft ob das Paket hfsplus auf eurem System installiert ist. Es wird für das Mounten zwingend benötigt.]
Mit Kompression
Etwas aufwändiger stellt sich diese Aufgabe dar, wenn Ihr es mit einer komprimierten Datei zu tun habt. Ihr erkennt solch eine Datei wieder mit dem file-Kommando. Das Ergebnis sollte in etwa so aussehen…
$ file e4kr3111.dmg e4kr3111.dmg: VAX COFF executable not stripped – version 376
In diesem Fall müsst Ihr ein kleines Konverterskript aus den Paketquellen runterladen. In Debian und Ubuntu gibt es das Paket dmg2img auf jeden Fall. Ich denke, dass andere Distributionen das kleine Werkzeug ebenfalls in ihren Quellen haben. Wie dem auch sei, installiert das Paket bspw. über…
$ sudo apt-get install dmg2img
…danach könnt Ihr diese dmg-Dateien konvertierten. Das Kommando dazu lautet…
$ dmg2img -i eingabedatei.dmg -o ausgabedatei.dmg
In meinem konkreten Fall – das Firmware-Update für die Canon EOS 400D – sieht das Ganze dann wie folgt aus…
$ dmg2img -i e4kr3111.dmg -o e4kr3111_uncompressed.dmg dmg2img v1.6.2 is derived from dmg2iso by vu1tur (to@vu1tur.eu.org) e4kr3111.dmg --> e4kr3111_uncompressed.dmg reading property list, 6147 bytes from address 4918002 ... decompressing: opening partition 0 ... 100.00% ok opening partition 1 ... 100.00% ok opening partition 2 ... 100.00% ok Archive successfully decompressed as e4kr3111_uncompressed.dmg You should be able to mount the image [as root] by: modprobe hfsplus mount -t hfsplus -o loop e4kr3111_uncompressed.dmg /mnt
Zum Mounten der Daten könnt Ihr das Schema von Oben verwenden. Legt ein Verzeichnis an, in dem das Image eingebunden werden soll. Und mountet danach die Datei…
$ mkdir /tmp/dmg $ sudo mount -t hfsplus -o loop e4kr3111_uncompressed.dmg /tmp/dmg/
Danach könnt Ihr mit Nautilus (oder eurem Dateimanager der Wahl) die .fir-Datei aus /tmp/dmg auf eure Speicherkarte kopieren und mit dem Update weitermachen. Wirklich ausführliche Information mit zig Abbildungen findet Ihr wie gesagt bei traumflieger.de.
Hallo Chris,
bei mir konnte ich unter Ubuntu die Exe-Datei auch mit dem Archivmanager öffnen und die enthaltene FIR-Datei für meine 7D extrahieren – auch ohne Wine. Probier doch mal, ob das bei dir auch geht.
Bernd
Hallo Bernd, das hatte ich auch probiert, es öffnet sich auch der File-Manager. Allerdings sehe ich nur die Dateien „.rsrc, CERTIFICATE, UPX0, UPX!“. Keine Spur von der fir-Datei…
Hmmm, keine Ahung welches Paket da ins Spiel kommen könnte. Mein Verdacht lagt mal auf orange, doch die Installation des Entpackers hat nichts gebracht. Das hatte ich schon vor dem Schreiben des Beitrags hier probiert.
Hi Chris,
das muss an der Exe-Datei liegen. Ich habe jetzt die Firmware-Datei für deine 400D und meine 7D heruntergeladen. Meine kann ich ganz normal im Archivmanager öffnen und die Fir-Datei extrahieren, bei deiner bekomme ich eine Fehlermeldung. Erst nach Installation von 7zip kann ich die 400D-Exe-Datei im Archivmanager öffnen, sehe aber auch nur die vier Dateien, die du hast. 7zip bringt nicht mehr zum Vorschein.
Wenn du 7zip installiert hast, kannst du zweimal extrahieren und du bekommst (unter anderem) eine 4,9 MB große Fir-Datei:
7z e e4kr3111.dmg
7z e 2.hfs
Immerhin brauchst du kein sudo 😉 Was findest du besser?
So, nach zweimal posten könnte ich mich auch mal anmelden…
Ja, stimmt. Das deckt sich jetzt mit meinem System. Ich kann die exe-Version der Firmware für die 7D direkt im File-Roller öffnen. Die .dmg kann ich auch wie bei entpacken, indem ich sie zweimal mit 7z bearbeite. Was ist besser? Ist eigentlich beides ein Krampf 😉 7z ist natürlich der besser (einzige) Weg, wenn man auf einem System keine Root-Rechte besitzt.
//PS: Schicke Kamera!
hi
habe eigentlich nur eine Frage
kann man so alle mac Programme unter Ubuntu installieren?
Nein, das wird nicht funktionieren. dmg ist ja erstmal nichts anderes als ein Archiv-Format. Entpacken ist möglich, doch wenn du Mac OS Programme unter Linux verwenden möchtest, das klappt leider nicht. Mac OS und Linux sind zwar in gewissen Punkten verwandt, doch trotzdem sind sie zu verschieden.
Hi,
ich habe das jetzt mal auf meinem HomeServer ausprobiert. Dort scheitere ich allerdings beim Schritt mit dem „modprobe hfsplus“.
Hast du da vielleicht eine Idee?
Was für ein System läuft denn auf deinem Home-Server? Unter Ubuntu brauchst du modprobe gar nicht, es reicht z.b. einfach den Mount-Punkt anzulegen und dann z.B….
…auszuführen.
Auf dem HomeServer läuft ein aktuelles Debian 6. Wenn ich jetzt direkt mounten würden, erhalte ich folgende Meldung:
Hast du dir deinen Kernel selber gebaut? In meiner VM mit einem Standard-Debian5 kann ich das Kernelmodul ohne Probleme laden…
Kann sein, den Server hat ein Freund von mir aufgesetzt. Wie kann ich das herausfinden?
Dann wird wohl Support für hfsplus nicht in diesen Kernel einkompiliert sein. Wenn der Kernel selber kompiliert wurde, dann kann das nachgeholt werden. Wurde der Kernel so vom Webhoster ausgeliefert, dann kann man fragen ob der den Support einbaut.
aptitude install hfsplus
hfsplus ist ein kernelmodul das unter Debian 6 (sowie auch 5 und älter) nicht per default mitinstalliert wird.
lg
Stefan
Danke für den Hinweis, hab dem Beitrag noch ein kleines Update mit dem Tipp verpasst.
Grüße
Christoph
thx… 😉
Kann man eigentlich .dmg dateien auf debian gnu/linuxinstallieren,oder müsste man vielleicht.tar.gz anhängen also ungefähr so: .dmg.tar.gz?Oder ist es nicht möglich os x dateien auf gnu zu installieren?
Hat super geklappt, dein Tip! Herzlichen Dank dafür!
Danke. Hat mir nach mehreren Stunden probieren, endlich geholfen!