Omiń umowę licencyjną podczas montowania DMG w wierszu poleceń

16

Automatyzuję instalację Maca za pomocą marionetki. W ramach tego muszę zainstalować kilka programów w formacie .dmg.

Do ich zamontowania używam następujących elementów:

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

Problem polega na tym, że niektóre pliki .dmg są dostarczane z dołączoną licencją, więc skrypt nie może zaakceptować licencji. (Podczas biegania z marionetką nie ma standardowego wejścia / wyjścia, więc nie mogę ręcznie zatwierdzić, aby kontynuować).

Czy istnieje sposób wstępnego zatwierdzenia lub wymuszenia zatwierdzenia licencji?

Witalij Kushner
źródło
Mógłby iść na SF; masz do czynienia z problemami wynikającymi z pracy z wieloma maszynami. Jednak może się tu również udać.
Kevin M,
2
Wykonaj polecenie „tak | hdiutil attach disk.dmg> / dev / null” - spowoduje to wpisanie „Y”.
mauvedeity

Odpowiedzi:

2

Jeśli masz GUI i jesteś w stanie wykonywać dwa połączenia z linii poleceń równolegle, możesz użyć

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

i

osascript accept.scpt

ten ostatni wykonuje następujący 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

W bash, jestem w stanie pisać

/System/Library/CoreServices/DiskImageMounter.app/Contents/MacOS/DiskImageMounter file.dmg & osascript accept.scpt
Daniel Beck
źródło
Zapomniałem wspomnieć, że nie używam marionetki. Ta odpowiedź może więc być bardzo bezużyteczna, ale skoro minęło kilka dni, i tak napisałem.
Daniel Beck
hmm Występuje błąd podczas próby uruchomienia osascript accept.scpt ➜ dotfiles git: (master) ✗ osascript accept.scpt osascript: accept.scpt: Brak takiego pliku lub katalogu
przyznanie
@grant Najpierw musisz utworzyć plik o określonej treści.
Daniel Beck
18

Działa to dla mnie, gdy napotkałem plik .dmg zawierający umowę EULA, którą chciałem zainstalować za pomocą wiersza polecenia bez interakcji użytkownika ...

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

(uwaga: nie jestem dość pewny wszystkie powyższe opcje są potrzebne do obejścia EULA, takie jak -nobrowse, -noverify, -noautoopen, -mountpointjednak użyłem ich i nie testowałem bez nich, więc nie chciałem zastrzeżenia coś, co ja. nie testowałem.)

Skończyło się na katalogu z

bar.cdr
foo.dmg
right_here/

gdzie right_here/zawierała treść foo.dmgmonitu bez konieczności uzyskiwania monitu.

Pamiętaj, aby odłączyć, gdy skończysz!

/usr/bin/hdiutil detach right_here/

Aby uzyskać więcej informacji: hdiutil (1) Mac OS X Podręcznik strony .

YMMV

rany
źródło
1
Dzięki - działało to dobrze w przypadku wielostronicowej umowy, w której wielokrotne „y” nie działało.
Lars Rohrbach,
1
Pracowałem też dla mnie. Chociaż potrzebowałem tylko pierwszego wiersza, aby przekonwertować go do pliku cdr, mogę go po prostu załączyć bez tych wszystkich argumentów i działa.
Maxime Viargues,
7

Jeśli po prostu wymaga wpisania „Y”, potokuj polecenie tak w poleceniu hdiutil:

yes | /bin/hdiutil [...]

To będzie emulować naciśnięcie „y” i powrót do wiersza poleceń.

Aby wpisać coś innego, po prostu umieść to w wierszu polecenia jako parametr:

yes accept | ...

To spowoduje wpisanie „accept” w skrypcie.

Zauważ, że jeśli skrypt wiele razy pyta o dane wejściowe, polecenie tak umieści wiele wpisów. Możesz zobaczyć wynik taki jak „zepsuty potok” - oznacza to po prostu, że polecenie, które podłączyłeś do wyjścia, gdy „tak” wciąż wysyłało dane wejściowe.

mauvedeity
źródło
Nigdy tego nie próbowałem, więc nie wiedziałem o grubym przekierowaniu. Dzięki za +50!
mauvedeity 10.10.11
6

Niedawno natknąłem się na DMG z licencją EULA i naprawdę mnie to denerwowało, ponieważ nie mogłem tego zrobić. Zorientowałem się, że jeśli przekonwertuję DMG na CDR, ominie umowę EULA dotyczącą montowania CDR.

Oto co zrobiłem:

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

Mam nadzieję że to pomoże.

szyfrowanie
źródło
To pomogło mi tonę! Te yes | hdiutil...rozwiązania, które wiszą na mnie, kiedy nazywa się ze skryptu Pythona do jakiegoś szalonego powodu.
Nathan
1

Jeśli masz wielostronicową umowę EULA, którą musisz zaakceptować, możesz przejść do części akceptując, umieszczając qprzed resztą polecenia akceptacji (ponieważ wszystko, czego potrzebujesz, to zaakceptowane polecenie zakończenia less, możesz także użyć ZZlub Q).

Na przykład, jeśli umowa EULA wymaga wpisania a, yaby zaakceptować, należy uruchomić:

yes qy | hdiutil attach ...
cwhits
źródło
0

Czy nie powinieneś używać własnych narzędzi marionetek do instalowania pakietów? Sam jestem administratorem radmind i nie znam marionetek, ale sprawdzenie na ich wiki ujawnia, że ​​istnieje narzędzie o nazwie pkgdmg, które może zrobić równowartość tego, co próbujesz osiągnąć.

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

NReilingh
źródło
1
nie obsługuje aplikacji wymagających akceptacji licencji.
Vitaly Kushner
W rzeczy samej; Miałem wrażenie, że tworzysz własne pakiety bez konieczności akceptacji licencji. Taki jest sposób myślenia administratora Radminda.
NReilingh