Umgehen Sie eine Lizenzvereinbarung, wenn Sie eine DMG in der Befehlszeile einbinden

4877
Vitaly Kushner

Ich automatisiere meine Mac-Installation mit der Marionette. Als Teil davon muss ich mehrere Programme installieren, die in einem .dmg-Format vorliegen.

Ich benutze folgendes, um sie zu montieren:

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

Das Problem ist, dass einige .dmg-Dateien mit einer Lizenz versehen sind und das Skript daher die Lizenz nicht akzeptieren kann. (Beim Ausführen mit der Marionette gibt es keine Standardausgabe, daher kann ich sie nicht manuell genehmigen, um fortzufahren.)

Gibt es eine Möglichkeit, die Lizenz vorab zu genehmigen oder zu erzwingen?

16
Könnte möglicherweise auf SF gehen; Sie haben es mit Problemen zu tun, die sich aus der Arbeit mit vielen Maschinen ergeben. Es könnte aber auch hier gehen. Kevin M vor 13 Jahren 0
Machen Sie "yes | hdiutil attach disk.dmg> / dev / null" - das gibt ein "Y" für Sie ein. mauvedeity vor 13 Jahren 1

6 Antworten auf die Frage

17
sorens

Dies funktionierte für mich, als ich auf eine .dmg stieß, die eine Endbenutzer-Lizenzvereinbarung enthielt, die ich über die Befehlszeile ohne Benutzerinteraktion installieren wollte.

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

(Anmerkung: Ich bin ziemlich sicher, nicht alle der oben genannten Optionen benötigt werden, um die EULA zu umgehen, wie -nobrowse, -noverify, -noautoopen, -mountpoint. Allerdings habe ich sie verwendet und habe ich nicht getestet, ohne sie so dass ich nicht etwas behaupten wollte, dass ich hatte nicht getestet.)

Am Ende war ein Verzeichnis mit

bar.cdr foo.dmg right_here/ 

wo right_here/der Inhalt enthalten ist, foo.dmgohne zum EULA aufgefordert zu werden.

Seien Sie sicher, dass Sie sich abnehmen, wenn Sie fertig sind!

/usr/bin/hdiutil detach right_here/ 

Weitere Informationen: hdiutil (1) Mac OS X Handbuchseite .

YMMV

Diese Lösung war perfekt, danke! neu242 vor 12 Jahren 0
Danke - das hat gut funktioniert mit einer mehrseitigen Vereinbarung, bei der ein wiederholtes 'y' nicht funktioniert hat. Lars Rohrbach vor 12 Jahren 1
Arbeitete auch für mich. Obwohl ich nur die erste Zeile brauchte, um sie in eine cdr-Datei zu konvertieren, kann ich sie einfach ohne all diese Argumente anhängen und sie funktioniert. Maxime Viargues vor 6 Jahren 0
7
mauvedeity

Wenn nur "Y" eingegeben werden muss, geben Sie den Befehl yes in den Befehl hdiutil ein:

yes | /bin/hdiutil [...] 

Das wird emulieren, indem Sie 'y' drücken und in der Befehlszeile zurückkehren.

Um etwas anderes einzugeben, setzen Sie es einfach als Parameter in die Befehlszeile:

yes accept | ... 

Das wird "akzeptieren" in das Skript eingeben.

Wenn das Skript mehrmals nach Eingaben fragt, werden mit dem Ja-Befehl mehrere Einträge eingefügt. Möglicherweise sehen Sie Ausgaben wie 'broken pipe' - dies bedeutet nur, dass der Befehl, den Sie in quit gepipst haben, während 'Ja' noch Eingaben sendete.

Ich habe das noch nie probiert, also wusste ich nichts von der robusten Weiterleitung. Danke für die +50! mauvedeity vor 13 Jahren 0
5
ciphershort

Vor kurzem bin ich auf eine DMG gestoßen, die über eine EULA verfügte, und es hat mich wirklich irritiert, da ich kein Skript erstellen konnte. Ich habe herausgefunden, dass ich, wenn ich die DMG in eine CDR konvertiert habe, die EULA beim Mounten der CDR umgangen hat.

Folgendes habe ich getan:

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

Hoffe das hilft.

Das hat mir sehr geholfen! Das "Ja" hdiutil ... `Lösungen würden für mich hängen, wenn sie aus einem Python-Skript aus irgendeinem verrückten Grund aufgerufen wurden. Nathan vor 9 Jahren 0
2
Daniel Beck

Wenn Sie über eine GUI verfügen und zwei Befehlszeilenaufrufe parallel ausführen können, können Sie verwenden

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

und

osascript accept.scpt 

Letzteres führt das folgende AppleScript aus:

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 bashkann ich schreiben

/System/Library/CoreServices/DiskImageMounter.app/Contents/MacOS/DiskImageMounter file.dmg & osascript accept.scpt 
Ich habe vergessen zu erwähnen, dass ich keine Marionette benutze. Diese Antwort mag daher furchtbar unbrauchbar sein, aber da es einige Tage her ist, habe ich trotzdem gepostet. Daniel Beck vor 13 Jahren 0
hmm Ich bekomme eine Fehlermeldung, wenn ich versuche, osascript zu starten.. dotfiles git: (master) ✗ ✗ accept accept accept accept ascript ascript ascript ascript ascript ascript ascript ascript ascript ascript ascript ascript ascript ascript ascript ascript ascript ascript grant vor 9 Jahren 0
@grant Sie müssen zuerst die Datei mit dem angegebenen Inhalt erstellen. Daniel Beck vor 9 Jahren 0
1
cwhits

Wenn Sie eine mehrseitige EULA haben, die Sie akzeptieren müssen, können Sie den akzeptierenden Teil aufrufen, indem Sie qvor dem Rest Ihres akzeptierten Befehls einen Befehl eingeben (da Sie lediglich einen akzeptierten Beendigungsbefehl benötigen less, können Sie auch ZZoder verwenden Q).

Wenn zum Beispiel das EULA die Eingabe von a yzur Bestätigung der Ausführung erfordert, müssen Sie Folgendes ausführen:

yes qy | hdiutil attach ... 
0
NReilingh

Sollten Sie nicht die eigenen Tools von Puppet verwenden, um Pakete zu installieren? Ich bin selbst ein Radmind-Administrator und kenne mich mit Marionetten nicht aus, aber ein Blick auf ihr Wiki zeigt, dass es ein Tool namens pkgdmg gibt, das möglicherweise dem entspricht, was Sie erreichen wollen.

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

Es verarbeitet keine Apps, für die eine Lizenz erforderlich ist. Vitaly Kushner vor 13 Jahren 1
Tatsächlich; Ich hatte den Eindruck, dass Sie Ihre eigenen Pakete erstellen würden, ohne dass eine Lizenz akzeptiert werden muss. Ich denke, das ist die Denkweise eines Radmind-Administrators. NReilingh vor 13 Jahren 0