Bypassare un accordo di licenza quando si monta un DMG sulla riga di comando


16

Sto automatizzando l'installazione del mio Mac usando Puppet. Come parte di esso ho bisogno di installare diversi programmi in formato .dmg.

Uso i seguenti per montarli:

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

Il problema è che alcuni file .dmg hanno una licenza allegata, quindi lo script è bloccato ad accettare la licenza. (Non c'è stdin / out quando corro con il pupazzo, quindi non posso approvarlo manualmente per continuare.)

Esiste un modo per pre-approvare o forzare l'approvazione della licenza?


Potrebbe andare su San Francisco; hai a che fare con problemi che derivano dal lavorare con molte macchine. Tuttavia, potrebbe anche andare qui.
Kevin M,

2
Fai "yes | hdiutil attach disk.dmg> / dev / null" - che digita una "Y" per te.
mauvedeity

Risposte:


2

Se si dispone di una GUI e si è in grado di eseguire due chiamate da riga di comando in parallelo, è possibile utilizzare

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

e

osascript accept.scpt

l'ultimo dei quali esegue il seguente AppleScript:

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

In bash, sono in grado di scrivere

/System/Library/CoreServices/DiskImageMounter.app/Contents/MacOS/DiskImageMounter file.dmg & osascript accept.scpt

Ho dimenticato di dire che non uso marionette. Questa risposta potrebbe quindi essere terribilmente inutile, ma dato che sono passati alcuni giorni, ho pubblicato comunque.
Daniel Beck

hmm Ottengo un errore quando provo a eseguire osascript accept.scpt ➜ dotfiles git: (master) ✗ osascript accept.scpt osascript: accept.scpt: nessun file o directory del genere
concedi

@grant Devi prima creare il file con il contenuto specificato.
Daniel Beck

18

Questo ha funzionato per me quando ho incontrato un .dmg che conteneva un EULA che volevo installarlo tramite la riga di comando senza interazione dell'utente ...

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

(nota: non sono ragionevolmente sicuro tutte le opzioni di cui sopra sono necessari per bypassare il contratto di licenza, come ad esempio -nobrowse, -noverify, -noautoopen, -mountpointtuttavia, li ho usati e non ho la prova senza di loro in modo da non volevo la rivendicazione qualcosa che ho. non avevo testato.)

Quello che ho finito è una directory con

bar.cdr
foo.dmg
right_here/

dove right_here/conteneva il contenuto del foo.dmgsenza essere richiesto per l'EULA.

Assicurati di staccare quando hai finito!

/usr/bin/hdiutil detach right_here/

Per maggiori informazioni: hdiutil (1) Manuale Mac OS X Page .

YMMV


1
Grazie - ha funzionato bene con un accordo multipagina, in cui una "y" ripetuta non funzionava.
Lars Rohrbach,

1
Ha funzionato anche per me. Anche se ho solo bisogno della prima riga per convertirlo in un file cdr, posso solo collegarlo senza tutti quegli argomenti e funziona.
Maxime Viargues,

7

Se ha solo bisogno di digitare "Y", quindi inserire il comando yes nel comando hdiutil:

yes | /bin/hdiutil [...]

Ciò emulerà premendo 'y' e tornerà alla riga di comando.

Per digitare qualcos'altro, basta inserirlo nella riga di comando come parametro:

yes accept | ...

Questo inserirà 'accetta' nella sceneggiatura.

Si noti che se lo script richiede input più volte, il comando yes inserirà più voci. È possibile che venga visualizzato un output come 'pipe interrotta' - ciò significa solo che il comando che hai reindirizzato viene chiuso mentre 'yes' stava ancora inviando input.


Non l'ho mai provato, quindi non sapevo del robusto reindirizzamento. Grazie per il +50!
mauvedeity

6

Di recente mi sono imbattuto in un DMG che aveva un EULA e mi stava davvero irritando poiché non potevo scriverlo. Ho scoperto che se ho convertito il DMG in un CDR, ha bypassato l'EULA durante il montaggio del CDR.

Ecco cosa ho fatto:

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

Spero che sia di aiuto.


Questo mi ha aiutato moltissimo! Le yes | hdiutil...soluzioni sarebbero appese per me quando chiamate da uno script Python per qualche pazzo motivo.
Nathan,

1

Se hai un EULA multipagina che devi accettare, puoi arrivare alla parte accetta inserendo un qprima del resto del tuo comando accetta (dal momento che tutto ciò di cui hai bisogno è un comando di chiusura accettato less, puoi anche usare ZZo Q).

Ad esempio, se l'EULA richiede di digitare a yper accettare, eseguiresti:

yes qy | hdiutil attach ...

0

Non dovresti usare gli strumenti di Puppet per installare i pacchetti? Io stesso sono un amministratore di radmind e non ho familiarità con il pupazzo, ma un controllo sul loro wiki rivela che esiste uno strumento chiamato pkgdmg che potrebbe fare l'equivalente di ciò che stai cercando di realizzare.

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


1
non gestisce app che richiedono l'accettazione della licenza.
Vitaly Kushner,

Infatti; Avevo l'impressione che avresti creato i tuoi pacchetti senza l'accettazione della licenza. Tale è la mentalità di un amministratore di Radmind, suppongo.
NReilingh,
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.