Y a-t-il une commande pour installer un dmg

52

Je souhaite installer un fichier dmg sur un serveur distant. Tout ce que j'ai, c'est un accès SSH. Comme un fichier DMG est une image disque, j’ai essayé de le monter, mais ce dernier ne semble pas reconnaître son format.

filedit mon fichier dmg est un VAX COFF executable.

philant
la source

Réponses:

71

Tout d’abord, montez l’image dmg: sudo hdiutil attach <image>.dmg

L'image sera montée sur /Volumes/<image>. Le mien contenait un paquet que j'ai installé avec:sudo installer -package /Volumes/<image>/<image>.pkg -target /

Enfin démonter l'image: sudo hdiutil detach /Volumes/<image>.

philant
la source
J'ai fait cela avec Docker.dmget je n'avais pas <image>.pkgpour que ça ne marche pas
Dimitri Kopriwa
19

Vous devriez pouvoir monter le .dmgusing:

hdiutil attach /path/to/file.dmg

Et puis copiez son contenu (qui apparaît dans /Volumes) où vous le souhaitez.

trojanfoe
la source
5

Je devais monter et copier le dossier .appto /Applications. Pour Etcher.app:

D'abord comme @trojanfoe a dit:

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

ensuite

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

Vous avez ensuite votre application dans le /Applicationsdossier

N'oubliez pas de démonter le volume:

sudo hdiutil unmount /Volumes/Etcher\ 1.2.1/

Je l'ai obtenu après avoir lu les instructions d'un article de blog .

Jan ATAC
la source
5

Si vous souhaitez .dmgcréer un script pour l’installation, quelques étapes supplémentaires sont nécessaires car le nom du fichier, le nom du volume créé, le nom de l’application et le nom du périphérique à déconnecter peuvent tous être différents. De plus, ils peuvent avoir des espaces en eux.

De .dmgplus, un .appfichier peut contenir un fichier ou un .pkgfichier et ceux-ci nécessitent un comportement différent.

Voici une fonction bash permettant d'installer un fichier dmg à partir d'une URL distante:

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

Notez que si vous avez .dmgun .appfichier qui s'exécute pour installer le programme, vous devrez alors faire quelque chose de différent.

voutasaurus
la source
Cela ne fonctionnera que pour dmg contenant des applications prêtes à l'emploi, pas pour les packages ou les applications d'installation.
nohillside
@patrix pouvez-vous me donner des exemples de packages et d'applications d'installation que je peux tester pour affiner la réponse?
voutasaurus
Les paquets sont faciles (finissez en .pkg), mais une application d'installation a le même aspect qu'un vrai
nohillside
cela ne détache pas le fichier. hdiutil: detach failed - No such file or directory
Nicholas DiPiazza
1
@NicholasDiPiazza J'aimerais que Apple simplifie cette tâche en fournissant et en appliquant un standard simple à utiliser et en donnant aux développeurs des outils pour convertir automatiquement les programmes d'installation existants afin qu'ils utilisent le nouveau standard.
voutasaurus
1

Vous pouvez essayer la commande open disk://host.tld/image.dmg.

Sanjuro
la source
openn'a rien fait, juste quitter, sans message d'erreur.
philant
2
Oui. Je viens de le tester. Il n’affiche rien tant que l’image disque n’a pas été complètement montée. Vous devrez donc attendre environ une minute avant qu’elle apparaisse dans / Volumes. (Cela fonctionne si vous écrivez et tapez open path/to/file.dmg. Je ne pense pas que cela disk://host.tld/fonctionne cependant.)
daviewales
Utile, mais peut-être pas exactement ce dont le PO avait besoin. Merci.
Danny Whitt