¿Hay un comando para instalar un dmg

52

Quiero instalar un archivo dmg en un servidor remoto. Todo lo que tengo es un acceso ssh. Como un DMG es una imagen de disco, traté de montarlo, pero el montaje no parece reconocer su formato.

filedice que mi archivo dmg es a VAX COFF executable.

philant
fuente

Respuestas:

71

Primero, monte la imagen dmg: sudo hdiutil attach <image>.dmg

La imagen se montará en /Volumes/<image>. El mío contenía un paquete que instalé con:sudo installer -package /Volumes/<image>/<image>.pkg -target /

Finalmente desmontar la imagen: sudo hdiutil detach /Volumes/<image>.

philant
fuente
Lo hice con Docker.dmgy no tenía <image>.pkgpara que no funcionara
Dimitri Kopriwa
19

Debería poder montar .dmgusando:

hdiutil attach /path/to/file.dmg

Y luego copie su contenido (que aparece en /Volumes) donde quiera.

trojanfoe
fuente
5

Tuve que montar y copiar el .appde /Applicationsla carpeta. Para Etcher.app:

Primero como dijo @trojanfoe:

sudo hdiutil attach /Users/janatac/Etcher-1.2.1.dmg

Luego

sudo cp -R /Volumes/Etcher\ 1.2.1/Etcher.app /Applications

Luego tienes tu aplicación en la /Applicationscarpeta

No olvide desmontar el volumen:

sudo hdiutil unmount /Volumes/Etcher\ 1.2.1/

Lo hice funcionar después de leer las instrucciones de una publicación de blog .

Jan ATAC
fuente
5

Si desea realizar una secuencia de comandos de la instalación, requiere algunos pasos más, ya que el nombre del .dmgarchivo, el nombre del volumen creado, el nombre de la aplicación y el nombre del dispositivo que debe desconectarse pueden ser diferentes. Además, pueden tener espacios en ellos.

También se .dmgpuede tener un .apparchivo o un .pkgarchivo y requieren un comportamiento diferente.

Aquí hay una función bash para instalar un dmg desde una URL remota:

# usage: installdmg https://example.com/path/to/pkg.dmg
function installdmg {
    set -x
    tempd=$(mktemp -d)
    curl $1 > $tempd/pkg.dmg
    listing=$(sudo hdiutil attach $tempd/pkg.dmg | grep Volumes)
    volume=$(echo "$listing" | cut -f 3)
    if [ -e "$volume"/*.app ]; then
      sudo cp -rf "$volume"/*.app /Applications
    elif [ -e "$volume"/*.pkg ]; then
      package=$(ls -1 "$volume" | grep .pkg | head -1)
      sudo installer -pkg "$volume"/"$package" -target /
    fi
    sudo hdiutil detach "$(echo "$listing" | cut -f 1)"
    rm -rf $tempd
    set +x
}

Tenga en cuenta que si .dmgtiene un .apparchivo que se ejecuta para instalar el programa, deberá volver a hacer algo diferente.

voutasaurus
fuente
Esto solo funcionará para los dmg que contienen aplicaciones listas para ejecutarse, no para paquetes o aplicaciones de instalación.
nohillside
@patrix, ¿puede darme algunos ejemplos de paquetes y aplicaciones de instalación que pueda probar para refinar la respuesta?
voutasaurus
Los paquetes son fáciles (terminan en .pkg), pero una aplicación de instalación tiene el mismo aspecto que una real
nohillside
Esto no separa el archivo. hdiutil: detach failed - No such file or directory
Nicholas DiPiazza
1
@NicholasDiPiazza Ojalá Apple lo hiciera más fácil al proporcionar y hacer cumplir un único estándar fácil de usar y al proporcionar herramientas a los desarrolladores para convertir automáticamente sus instaladores existentes para usar el nuevo estándar.
voutasaurus
1

Podrías probar el comando open disk://host.tld/image.dmg.

Sanjuro
fuente
openno hizo nada, solo salió, sin mensaje de error.
frágil
2
Si lo hace Lo acabo de probar. No mostrará nada hasta que la imagen del disco se haya montado por completo, por lo que tendrá que esperar un minuto más o menos antes de que aparezca en / Volumes. (Funciona si open path/to/file.dmgdisk://host.tld/
ingresas
Útil, aunque quizás no sea exactamente lo que el OP necesitaba. Gracias.
Danny Whitt