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.

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


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.


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 .


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.


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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.