Wie extrahiere ich eine .dmg-Datei unter Linux?

19

Als Linux-Benutzer muss ich den Inhalt einer .dmg-Datei (Mac OSX Disk Image) abrufen, die ein Anwendungsinstallationsprogramm enthält.

Ich habe versucht dmg2dir(was erfordert dmg2img), die eine IMG-Datei erstellt, aber sonst nichts.

$ sudo dmg2dir jdk-8u51-macosx-x64.dmg
==> Routines successfully accomplished. Ready! 
==> Prepare loop device... 
==> Mount block device... 
Error looking up object for device /dev/disk/by-label/JDK\x208\x20Update\x2051 INTENSO openSUSE\x20Live\x20CD\x20GNOME dump
Variable is empty.

Ich muss nur die Dateien aus der .dmg-Datei entpacken, ich möchte sie nicht mounten.

Für den Fall, dass Sie neugierig sind, benötige ich dies, um eine tragbare Entwicklungsumgebung zu erstellen, die in Workshops auf Computern verwendet werden kann, die nicht im Voraus vorbereitet werden können.

qubodup
quelle
1
Es ist ein Disk-Image. Sofern nicht jemand die ganze Arbeit (die ich bei 7z schätze) unternommen hat, um Dateisystem-Reader in sein Programm zu schreiben, ist der einfachste Weg, die Daten mit den Linux-Kernel-Dateisystem-Modulen zu lesen. Was bedeutet es zu montieren.
Zan Lynx

Antworten:

31

Verwenden Sie einfach 7z x.

Im Fall von beispielsweise Sublime-Text ist 7z x "Sublime Text 2.0.2.dmg"dies ausreichend, um alle Dateien zu extrahieren.

In anderen Fällen, wie zum Beispiel beim JDK, muss man sich mit einer Art Matroschka auseinandersetzen.

$ 7z x jdk-8u51-macosx-x64.dmg
$ cd JDK 8 Update 51/
$ 7z x JDK 8 Update 51.pkg
$ 7z x Payload~

Aber irgendwann erhalten Sie einen Ordner mit den gewünschten Dateien.

qubodup
quelle
Das Extrahieren von dmg-Dateien mit 7z scheint die ausführbaren Bits zu verfehlen, was extrahierte Anwendungen aus DMGs funktionsunfähig macht.
Möglicherweise
1

Wenn das dmg auf dem Mac ein Abbild eines Verzeichnisses ist, das alle Dateien enthält, erstellen Sie anstelle eines dmg ein tgz des Verzeichnisses und migrieren Sie es.

#!/bin/bash
if [ -d "$1" ]; then  # $1 is the directory name
tar -cf "$1.tar" "$1" || exit  # First, create a tar-file
gzip -n -S .gz "$1.tar"  # Then ,gzip it to compress it.
mv "$1.tar.gz" "$1.tgz"  # Then rename it ti a .tgz
echo "Created $PWD/$1.tgz"
else echo "Not a directory"
fi
exit 0
Dick.Guertin
quelle