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


16

Ich automatisiere meine Mac-Installation mit Puppet. Als Teil davon muss ich mehrere Programme installieren, die im .dmg-Format vorliegen.

Ich benutze die folgenden, 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 die Lizenz nicht mehr akzeptiert. (Es gibt kein stdin / out beim Laufen mit Puppe, daher kann ich es nicht manuell genehmigen, um fortzufahren.)

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


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

2
Geben Sie "yes | hdiutil attach disk.dmg> / dev / null" ein, um ein "Y" für Sie einzugeben.
Mauvedeity

Antworten:


2

Wenn Sie eine GUI haben und zwei Befehlszeilenaufrufe gleichzeitig 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 bash, ich bin in der Lage zu 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 fürchterlich nutzlos sein, aber da es schon ein paar Tage sind, habe ich trotzdem gepostet.
Daniel Beck

hmm ich erhalte eine Fehlermeldung , wenn sie versuchen osascript zu laufen accept.scpt ➜ dotfiles git: (Master) ✗ osascript accept.scpt osascript: accept.scpt: Keine solche Datei oder das Verzeichnis
Erteilung

@grant Sie müssen zuerst die Datei mit dem angegebenen Inhalt erstellen.
Daniel Beck

18

Dies funktionierte für mich, als ich auf eine .dmg stieß, die eine EULA enthielt, die ich ohne Benutzerinteraktion über die Befehlszeile 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 oben genannten Optionen benötigt werden Bypass des EULA, wie -nobrowse, -noverify, -noautoopen, -mountpointjedoch habe ich sie und ich nicht Test ohne sie so dass ich nicht Anspruch etwas wollte , dass ich. hatte nicht getestet.)

Am Ende hatte ich ein Verzeichnis mit

bar.cdr
foo.dmg
right_here/

wo right_here/die Inhalte der enthaltenen foo.dmgohne für die EULA aufgefordert zu werden.

Achten Sie darauf, sich zu lösen, wenn Sie fertig sind!

/usr/bin/hdiutil detach right_here/

Weitere Informationen: hdiutil (1) Mac OS X Manual Page .

YMMV


1
Vielen Dank - dies funktionierte gut mit einer mehrseitigen Vereinbarung, bei der ein wiederholtes 'y' nicht funktioniert hat.
Lars Rohrbach

1
Hat auch für mich gearbeitet. Obwohl ich nur die erste Zeile brauchte, um es in eine CDR-Datei zu konvertieren, kann ich es einfach ohne all diese Argumente anhängen und es funktioniert.
Maxime Viargues

7

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

yes | /bin/hdiutil [...]

Das emuliert das Drücken von 'y' und kehrt in die Befehlszeile zurück.

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

yes accept | ...

Dann wird "accept" in das Skript eingegeben.

Beachten Sie, dass, wenn das Skript mehrmals nach Eingaben fragt, der Befehl yes mehrere Einträge eingibt. Möglicherweise wird die Ausgabe als 'broken pipe' angezeigt. Dies bedeutet lediglich, dass der Befehl, den Sie beim Beenden von 'yes' eingegeben haben, noch Eingaben gesendet hat.


Ich habe das noch nie ausprobiert, daher wusste ich nichts über die starke Weiterleitung. Danke für die +50!
Mauvedeity

6

Ich bin kürzlich auf eine DMG gestoßen, die einen EULA hatte, und es hat mich wirklich irritiert, da ich nicht daran herum schreiben konnte. Ich habe herausgefunden, dass die DMG, wenn sie in eine CDR konvertiert wurde, die EULA beim Mounten der CDR umging.

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! Die yes | hdiutil...Lösungen würden für mich hängen, wenn sie aus irgendeinem verrückten Grund von einem Python-Skript aufgerufen werden.
Nathan

1

Wenn Sie eine mehrseitige EULA haben, die Sie akzeptieren müssen, können Sie zum Accept-Teil gelangen, indem Sie qvor den Rest Ihres Accept-Befehls ein setzen (da Sie nur einen akzeptierten Quit-Befehl benötigen less, können Sie auch ZZoder verwenden Q).

Wenn Sie beispielsweise in der EULA aufgefordert werden, ein einzugeben, um yzu akzeptieren, dass Sie ausgeführt werden:

yes qy | hdiutil attach ...

0

Sollten Sie nicht Puppet-eigene Tools verwenden, um Pakete zu installieren? Ich bin selbst ein Radmind-Administrator und ich kenne mich mit Puppet nicht aus, aber eine Überprüfung des Wikis zeigt, dass es ein Tool namens pkgdmg gibt, das möglicherweise das Äquivalent zu dem leistet, was Sie erreichen möchten.

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


1
Apps, für die eine Lizenz erforderlich ist, werden nicht verarbeitet.
Vitaly Kushner

Tatsächlich; Ich hatte den Eindruck, dass Sie Ihre eigenen Pakete erstellen würden, ohne dass Sie eine Lizenz akzeptieren müssten. Das ist die Einstellung eines Radmind-Administrators, nehme ich an.
NReilingh
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.