Linux und Ich

Blog über Ubuntu, Linux, Android und IT

dmg-Archive unter Linux entpacken

dmg-Archive unter Linux entpacken

| 16 Kommentare

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.

Autor: Christoph

Hallo, ich bin Christoph -- Linux-User, Blogger und pragmatischer Fan freier Software. Wie Ihr ohne Zweifel bemerkt haben solltet schreibe ich hier über Linux im Allgemeinen, Ubuntu im Speziellen, sowie Android und andere Internet-Themen. Wenn du Freude an meinen Artikel gefunden haben solltest, dann kannst du mir über Facebook, Google+ oder Twitter oder natürlich dem Blog folgen.

16 Kommentare

  1. 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!

  2. 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.

  3. Hi,

    ich habe das jetzt mal auf meinem HomeServer ausprobiert. Dort scheitere ich allerdings beim Schritt mit dem “modprobe hfsplus”.

    # modprobe hfsplus
    FATAL: Could not load /lib/modules/2.6.38.2-grsec-xxxx-grs-ipv6-32/modules.dep: No such file or directory

    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….

      sudo mount -t hfsplus -o loop e4kr3111_uncompressed.dmg /tmp/dmg/
      

      …auszuführen.

  4. Auf dem HomeServer läuft ein aktuelles Debian 6. Wenn ich jetzt direkt mounten würden, erhalte ich folgende Meldung:

    mount: unknown filesystem type ‘hfsplus’

    • Hast du dir deinen Kernel selber gebaut? In meiner VM mit einem Standard-Debian5 kann ich das Kernelmodul ohne Probleme laden…

      debianvirtualbox:~$ lsmod | grep hfs
      debianvirtualbox:~$ sudo modprobe hfsplus
      debianvirtualbox:~$ lsmod | grep hfs
      hfsplus                60901  0 
      nls_base                4541  6 hfsplus,nls_utf8,isofs,udf,vboxsf,usbcore
      
  5. Kann sein, den Server hat ein Freund von mir aufgesetzt. Wie kann ich das herausfinden?

  6. 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?

Hinterlasse eine Antwort

Auf Linux und Ich darf anonym kommentiert werden. Die Felder für Name und E-Mail-Adresse dürfen beim Eintragen eures Kommentars leer bleiben. Ich freue mich aber über jeden Kommentar, zu dem der Autor mit seinem Namen steht.