Gibt es einen Befehl zum Installieren eines dmg


51

Ich möchte eine DMG-Datei auf einem Remote-Server installieren. Ich habe nur einen SSH-Zugang. Da ein DMG ein Disk-Image ist, habe ich versucht, es zu mounten, aber mount scheint das Format nicht zu erkennen.

filesagt meine dmg datei ist a VAX COFF executable.

Antworten:


71

Hängen Sie zuerst das dmg-Image ein: sudo hdiutil attach <image>.dmg

Das Bild wird an gemountet /Volumes/<image>. Meins enthielt ein Paket, das ich mit installierte:sudo installer -package /Volumes/<image>/<image>.pkg -target /

Schließlich aushängen das Bild: sudo hdiutil detach /Volumes/<image>.


Ich habe das mit Docker.dmgund ich hatte keine <image>.pkgso, dass es nicht funktioniert
Dimitri Kopriwa

19

Sie sollten in der Lage sein, Folgendes zu montieren .dmg:

hdiutil attach /path/to/file.dmg

Und dann kopieren Sie den Inhalt (der in angezeigt wird /Volumes), wo immer Sie möchten.


5

Ich musste den .appin /ApplicationsOrdner mounten und kopieren . Für Etcher.app:

Zuerst wie @trojanfoe sagte:

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

Dann

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

Sie haben dann Ihre Bewerbung im /ApplicationsOrdner

Vergessen Sie nicht, den Datenträger abzuhängen:

sudo hdiutil unmount /Volumes/Etcher\ 1.2.1/

Habe es funktioniert, nachdem ich Anweisungen aus einem Blog-Post gelesen habe .


5

Wenn Sie die Installation .dmgper Skript ausführen möchten, sind einige weitere Schritte erforderlich, da der Name der Datei, der Name des erstellten Volumes, der Name der Anwendung und der Name des Geräts, das getrennt werden muss, unterschiedlich sein können. Außerdem können sie Leerzeichen enthalten.

A .dmgkann auch eine .appDatei oder eine .pkgDatei enthalten, die ein anderes Verhalten erfordern.

Hier ist eine Bash-Funktion, um ein DMG von einer entfernten URL zu installieren:

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

Hinweis: Wenn auf Ihrem .dmgComputer eine .appDatei zum Installieren des Programms ausgeführt wird, müssen Sie erneut eine andere Aktion ausführen.


Dies funktioniert nur für DMGs, die einsatzbereite Apps enthalten, nicht für Pakete oder Installer-Apps.
Nohillside

@patrix können Sie mir einige Beispiele für Pakete und Installer-Apps geben, an denen ich testen kann, um die Antwort zu verfeinern?
Voutasaurus

Pakete sind einfach (Ende in .pkg), aber ein Installer App sieht genauso aus wie einen realen
nohillside

Dadurch wird die Datei nicht getrennt. hdiutil: detach failed - No such file or directory
Nicholas DiPiazza

1
@NicholasDiPiazza Ich wünschte, Apple würde dies vereinfachen, indem es einen einzigen benutzerfreundlichen Standard bereitstellt und erzwingt und Entwicklertools bereitstellt, mit denen vorhandene Installationsprogramme automatisch auf den neuen Standard umgestellt werden.
Voutasaurus

1

Sie könnten den Befehl versuchen open disk://host.tld/image.dmg.


openhabe nichts gemacht, nur beenden, ohne Fehlermeldung.
Philant

2
Ja tut es. Ich habe es gerade getestet. Es wird nichts angezeigt, bis das Disk-Image vollständig geladen wurde. Sie müssen also ungefähr eine Minute warten, bevor es in / Volumes angezeigt wird. (Es funktioniert, wenn Sie ssh in und Typ open path/to/file.dmg. Ich glaube nicht disk://host.tld/funktioniert.)
Daviewales

Hilfreich, aber vielleicht nicht genau das, was das OP brauchte. Vielen Dank.
Danny Whitt
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.