Contourner un accord de licence lors du montage d'un DMG sur la ligne de commande

16

J'automatise mon installation Mac à l'aide de marionnettes. Dans le cadre de celui-ci, j'ai besoin d'installer plusieurs programmes qui viennent dans un format .dmg.

J'utilise ce qui suit pour les monter:

sudo /usr/bin/hdiutil mount -plist -nobrowse -readonly -quiet -mountrandom /tmp Program.dmg

Le problème est que certains fichiers .dmg sont livrés avec une licence jointe, et donc le script est bloqué en acceptant la licence. (Il n'y a pas de stdin / out lors de l'exécution avec une marionnette, donc je ne peux pas l'approuver manuellement pour continuer.)

Existe-t-il un moyen d'approuver au préalable ou de forcer l'approbation de la licence?

Vitaly Kushner
la source
Pourrait éventuellement aller sur SF; vous faites face à des problèmes liés à l'utilisation de nombreuses machines. Cependant, cela pourrait aussi aller ici.
Kevin M
2
Faites "yes | hdiutil attach disk.dmg> / dev / null" - cela tapera un "Y" pour vous.
mauvedeity

Réponses:

2

Si vous disposez d'une interface graphique et que vous pouvez effectuer deux appels de ligne de commande en parallèle, vous pouvez utiliser

/System/Library/CoreServices/DiskImageMounter.app/Contents/MacOS/DiskImageMounter /path/to/file.dmg

et

osascript accept.scpt

ce dernier exécute le AppleScript suivant:

tell application "System Events"
    delay 5 # wait 5 seconds -- I tested it using two terminal tabs and needed the time
    key code 48 # press tab 4 times in the license window
    key code 48
    key code 48
    key code 48
    keystroke " " # press space to click "accept"
end tell

En bash, je peux écrire

/System/Library/CoreServices/DiskImageMounter.app/Contents/MacOS/DiskImageMounter file.dmg & osascript accept.scpt
Daniel Beck
la source
J'ai oublié de mentionner que je n'utilise pas de marionnette. Cette réponse pourrait donc être terriblement inutile, mais comme cela fait quelques jours, j'ai quand même posté.
Daniel Beck
hmm J'obtiens une erreur en essayant d'exécuter osascript accept.scpt ➜ dotfiles git: (master) ✗ osascript accept.scpt osascript: accept.scpt: Aucun fichier ou répertoire de ce type
accordez
@grant Vous devez d'abord créer le fichier avec le contenu spécifié.
Daniel Beck
18

Cela a fonctionné pour moi lorsque j'ai rencontré un .dmg contenant un CLUF que je voulais installer via la ligne de commande sans interaction avec l'utilisateur ...

/usr/bin/hdiutil convert -quiet foo.dmg -format UDTO -o bar
/usr/bin/hdiutil attach -quiet -nobrowse -noverify -noautoopen -mountpoint right_here bar.cdr

(note: Je suis raisonnablement sûr de ne pas toutes les options ci - dessus sont nécessaires pour contourner le CLUF, par exemple -nobrowse, -noverify, -noautoopen, -mountpointcependant, je les utilise et je n'ai pas testé sans eux donc je ne voulais pas réclamer quelque chose que je. n'avait pas testé.)

Je me suis retrouvé avec un répertoire avec

bar.cdr
foo.dmg
right_here/

right_here/contenait le contenu du foo.dmgsans être invité pour le CLUF.

Assurez-vous de vous détacher lorsque vous avez terminé!

/usr/bin/hdiutil detach right_here/

Pour plus d' informations: hdiutil (1) Manuel Mac OS X page .

YMMV

Sorens
la source
1
Merci - cela a bien fonctionné avec un accord de plusieurs pages, où un «y» répété n'a pas fonctionné.
Lars Rohrbach
1
A aussi fonctionné pour moi. Bien que j'avais juste besoin de la première ligne pour le convertir en fichier cdr, je peux simplement le joindre sans tous ces arguments et cela fonctionne.
Maxime Viargues
7

S'il suffit de taper "Y", canalisez la commande yes dans la commande hdiutil:

yes | /bin/hdiutil [...]

Cela émulera en appuyant sur 'y' et reviendra sur la ligne de commande.

Pour taper autre chose, il suffit de le mettre sur la ligne de commande comme paramètre:

yes accept | ...

Cela entrera «accepter» dans le script.

Notez que si le script demande des entrées plusieurs fois, la commande yes mettra plusieurs entrées dedans. Vous pouvez voir des sorties comme 'pipe cassée' - cela signifie simplement que la commande que vous avez envoyée pendant la sortie alors que 'yes' envoyait toujours des entrées.

mauvedeity
la source
Je n'ai jamais essayé cela, donc je ne connaissais pas la redirection stout. Merci pour le +50!
mauvedeity
6

J'ai récemment rencontré un DMG qui avait un CLUF et cela m'a vraiment énervé car je ne pouvais pas écrire autour de lui. J'ai compris que si je convertissais le DMG en CDR, il contournait le CLUF lors du montage du CDR.

Voici ce que j'ai fait:

hdiutil convert foo.dmg -format UDTO -o bar.cdr
hdiutil attach bar.cdr
rm foo.dmg <--optional

J'espère que cela t'aides.

ciphershort
la source
Cela m'a beaucoup aidé! Les yes | hdiutil...solutions se bloquaient pour moi lorsqu'elles étaient appelées à partir d'un script python pour une raison folle.
Nathan
1

Si vous avez un CLUF à plusieurs pages que vous devez accepter, vous pouvez accéder à la partie acceptée en plaçant un qavant le reste de votre commande accept (puisque tout ce dont vous avez besoin est une commande de sortie acceptée less, vous pouvez également utiliser ZZou Q).

Par exemple, si le CLUF vous oblige à taper a ypour accepter, vous exécuterez:

yes qy | hdiutil attach ...
cwhits
la source
0

Ne devriez-vous pas utiliser les propres outils de marionnettes pour installer des packages? Je suis moi-même un administrateur de radmind et je ne suis pas familier avec les marionnettes, mais une vérification sur leur wiki révèle qu'il existe un outil appelé pkgdmg qui pourrait faire l'équivalent de ce que vous essayez d'accomplir.

http://projects.puppetlabs.com/projects/puppet/wiki/Puppet_Mac_Osx#packagepkgdmg

NReilingh
la source
1
il ne gère pas les applications qui nécessitent l'acceptation d'une licence.
Vitaly Kushner
En effet; J'avais l'impression que vous créeriez vos propres packages sans avoir à accepter de licence. Telle est la mentalité d'un administrateur Radmind, je suppose.
NReilingh