¿Cómo extraer un archivo .dmg en Linux?

19

Como usuario de Linux, necesito obtener el contenido de un archivo .dmg (imagen de disco de Mac OSX) que contiene un instalador de aplicaciones.

Intenté dmg2dir(lo que requiere dmg2img) que creó un archivo .img pero nada más.

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

Solo necesito descomprimir los archivos del archivo .dmg, no quiero montarlo.

En caso de que tenga curiosidad, necesito esto para crear un entorno de desarrollo portátil para usar en talleres en computadoras que no se pueden preparar por adelantado.

qubodup
fuente
1
Es una imagen de disco. A menos que alguien haya hecho todo el trabajo (que supongo que 7z hizo) para escribir lectores de sistema de archivos en su programa, la forma más fácil es usar los módulos del sistema de archivos del kernel de Linux para leer los datos. Lo que significa montarlo.
Zan Lynx

Respuestas:

31

Solo úsalo 7z x.

En el caso de, por ejemplo, texto sublime, 7z x "Sublime Text 2.0.2.dmg"será suficiente para extraer todos los archivos.

En otros casos, como por ejemplo el JDK, tienes que lidiar con algún tipo de matrioska.

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

Pero eventualmente obtendrá una carpeta que contiene los archivos que está buscando.

qubodup
fuente
La extracción de archivos dmg con 7z parece perder los bits ejecutables, lo que hace que las aplicaciones extraídas de los DMG sean disfuncionales. Puede estar relacionado: sourceforge.net/p/p7zip/bugs/113
Motin el
1

En Mac, si el dmg es una imagen de un directorio que contiene todos los archivos, haga un tgz del directorio en lugar de un dmg y migre.

#!/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
fuente