Jak wyodrębnić plik .dmg w systemie Linux?

19

Jako użytkownik systemu Linux muszę uzyskać zawartość pliku .dmg (obraz dysku Mac OSX), który zawiera instalator aplikacji.

Próbowałem dmg2dir(co wymaga dmg2img), który utworzył plik .img, ale nic więcej.

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

Potrzebuję tylko rozpakowanych plików z pliku .dmg, nie chcę go montować.

Jeśli jesteś ciekawy, potrzebuję tego, aby stworzyć przenośne środowisko programistyczne do użycia podczas warsztatów na komputerach, których nie można przygotować z góry.

qubodup
źródło
1
To jest obraz dysku. O ile ktoś nie dołożył wszelkich starań (co chyba zrobiłem 7z), aby zapisać czytniki systemu plików w swoim programie, najprostszym sposobem jest użycie modułów systemu plików jądra systemu Linux do odczytu danych. Co oznacza montaż.
Zan Lynx,

Odpowiedzi:

31

Po prostu użyj 7z x.

W przypadku np. Sublime text 7z x "Sublime Text 2.0.2.dmg"wystarczy wyodrębnić wszystkie pliki.

W innych przypadkach, takich jak na przykład JDK, musisz poradzić sobie z jakimś rodzajem matryoshka.

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

Ale w końcu otrzymasz folder zawierający pliki, których szukasz.

qubodup
źródło
Wydobywanie plików dmg za pomocą 7z wydaje się brakować wykonywalnych bitów, co powoduje, że wyodrębnione aplikacje z DMG są dysfunkcyjne. Może być powiązany: sourceforge.net/p/p7zip/bugs/113
Motin
1

Na komputerze Mac, jeśli plik dmg jest obrazem katalogu zawierającego wszystkie pliki, wykonaj tgz katalogu zamiast pliku dmg i dokonaj migracji.

#!/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
źródło