Esiste un comando per installare un dmg


52

Voglio installare un file dmg su un server remoto. Tutto quello che ho è un accesso SSH. Poiché un DMG è un'immagine del disco, ho provato a montarlo, ma mount non sembra riconoscerne il formato.

filedice che il mio file dmg è a VAX COFF executable.

Risposte:


71

Innanzitutto, monta l'immagine dmg: sudo hdiutil attach <image>.dmg

L'immagine verrà montata su /Volumes/<image>. Il mio conteneva un pacchetto che ho installato con:sudo installer -package /Volumes/<image>/<image>.pkg -target /

Infine smontare l'immagine: sudo hdiutil detach /Volumes/<image>.


L'ho fatto con Docker.dmge non ho fatto in <image>.pkgmodo che non funzionasse
Dimitri Kopriwa,

19

Dovresti essere in grado di montare .dmgusando:

hdiutil attach /path/to/file.dmg

E poi copia il suo contenuto (che appare in /Volumes) dove vuoi.


5

Ho dovuto montare e copiare la .appa /Applicationscartella. Per Etcher.app:

Innanzitutto come diceva @trojanfoe:

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

Poi

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

Quindi hai la tua applicazione nella /Applicationscartella

Non dimenticare di smontare il volume:

sudo hdiutil unmount /Volumes/Etcher\ 1.2.1/

Ha funzionato dopo aver letto le istruzioni di un post sul blog .


5

Se si desidera eseguire lo script dell'installazione, sono necessari alcuni passaggi in più poiché il nome del .dmgfile, il nome del volume creato, il nome dell'applicazione e il nome del dispositivo che deve essere staccato possono essere tutti diversi. Inoltre possono avere spazi al loro interno.

Inoltre .dmgpuò contenere un .appfile o un .pkgfile e questi richiedono comportamenti diversi.

Ecco una funzione bash per installare un dmg da un URL remoto:

# 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
}

Nota se hai .dmgun .appfile che viene eseguito per installare il programma, dovrai fare di nuovo qualcosa di diverso.


Funzionerà solo per i dmg che contengono app pronte per l'esecuzione, non per i pacchetti o le app di installazione.
Nohillside

@patrix mi puoi dare alcuni esempi di pacchetti e app di installazione che posso testare per affinare la risposta?
voutasaurus,

I pacchetti sono facili (terminano con .pkg), ma un'app di installazione ha lo stesso aspetto di quella reale
nohillside

questo non stacca il file. hdiutil: detach failed - No such file or directory
Nicholas DiPiazza,

1
@NicholasDiPiazza Vorrei che Apple rendesse tutto più semplice fornendo e applicando un unico standard di facile utilizzo e fornendo agli sviluppatori strumenti per convertire automaticamente i loro installatori esistenti per utilizzare il nuovo standard.
voutasaurus,

1

Potresti provare il comando open disk://host.tld/image.dmg.


opennon ha fatto nulla, basta uscire, senza messaggio di errore.
filant

2
Sì lo fa. L'ho appena provato. Non visualizzerà nulla fino a quando l'immagine del disco non sarà stata montata completamente, quindi dovrai aspettare un minuto prima che appaia in / Volumes. (Funziona se digiti e digiti open path/to/file.dmg. Non credo disk://host.tld/
funzioni

Utile, anche se forse non esattamente ciò di cui l'OP aveva bisogno. Grazie.
Danny Whitt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.