Обход лицензионного соглашения при установке DMG в командной строке

Я автоматизирую установку Mac с помощью марионетки. Как часть этого, мне нужно установить несколько программ, которые входят в формате .dmg.

Для их установки я использую следующее:

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

Проблема в том, что некоторые файлы .dmg поставляются с лицензией, и поэтому скрипт застревает, принимая лицензию. (Нет никакого stdin /out при работе с марионеткой, поэтому я не могу вручную одобрить его для продолжения.)

Есть ли способ одобрить или принудительно утвердить лицензию?

16 голосов | спросил Vitaly Kushner 12 SunEurope/Moscow2010-12-12T07:33:43+03:00Europe/Moscow12bEurope/MoscowSun, 12 Dec 2010 07:33:43 +0300 2010, 07:33:43

6 ответов


2

Если у вас есть графический интерфейс и вы можете выполнять два вызова командной строки параллельно, вы можете использовать

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

и

osascript accept.scpt

последний из которых выполняет следующий 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

В bash, я могу написать

/System/Library/CoreServices/DiskImageMounter.app/Contents/MacOS/DiskImageMounter file.dmg & osascript accept.scpt
ответил Daniel Beck 25 SatEurope/Moscow2010-12-25T23:44:12+03:00Europe/Moscow12bEurope/MoscowSat, 25 Dec 2010 23:44:12 +0300 2010, 23:44:12
17

Это сработало для меня, когда я столкнулся с .dmg, который содержал EULA, который я хотел установить через командную строку без взаимодействия с пользователем ...

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

(примечание: я уверен, что не все вышеупомянутые параметры необходимы для обхода EULA, например -nobrowse , -noverify, -noautoopen, -mountpoint. Однако я использовал их, и я не тестировал их без них, поэтому я не хотел требовать того, что я не тестировал.)

В итоге у меня был каталог с

bar.cdr
foo.dmg
right_here/

где right_here/ содержит содержимое foo.dmg без запроса для EULA.

Обязательно отсоединяйтесь, когда закончите!

/usr/bin/hdiutil detach right_here/

Для получения дополнительной информации: hdiutil (1) Страница руководства Mac OS X .

YMMV

ответил sorens 26 FebruaryEurope/MoscowbSat, 26 Feb 2011 12:47:31 +0300000000pmSat, 26 Feb 2011 12:47:31 +030011 2011, 12:47:31
7

Если требуется только «Y», введите команду yes в команду hdiutil:

yes | /bin/hdiutil [...]

Это будет эмулировать нажатие «y» и возврат в командной строке.

Чтобы ввести что-то еще, просто поместите его в командной строке в качестве параметра:

yes accept | ...

Это будет «принимать» в скрипт.

Обратите внимание, что если скрипт запрашивает ввод несколько раз, команда yes будет содержать несколько записей. Вы можете увидеть вывод как «broken pipe» - это просто означает, что команда, которую вы передали в quit, пока «да» все еще посылает вход.

ответил mauvedeity 8 +04002011-10-08T15:34:14+04:00312011bEurope/MoscowSat, 08 Oct 2011 15:34:14 +0400 2011, 15:34:14
5

Недавно я наткнулся на DMG, у которого было EULA, и это меня действительно раздражало, так как я не мог писать сценарий вокруг него. Я понял, что если бы я преобразовал DMG в CDR, он обходил EULA при установке CDR.

Вот что я сделал:

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

Надеюсь, что это поможет.

ответил ciphershort 2 +04002014-10-02T23:00:55+04:00312014bEurope/MoscowThu, 02 Oct 2014 23:00:55 +0400 2014, 23:00:55
1

Если у вас есть многостраничное EULA, которое вам нужно принять, вы можете получить часть принятия, поставив q до остальная часть вашей команды accept (так как все, что вам нужно, является принятой командой quit в less, вы также можете использовать ZZ или Q).

Например, если в EULA вам нужно ввести y, чтобы вы могли запускать:

yes qy | hdiutil attach ...
ответил cwhits 16 32016vEurope/Moscow11bEurope/MoscowWed, 16 Nov 2016 00:16:27 +0300 2016, 00:16:27
0

Разве вы не используете собственные инструменты марионетки для установки пакетов? Я сам администратор radmind, и я не знаком с марионеткой, но проверка их вики показывает, что есть инструмент pkgdmg, который может сделать эквивалент того, что вы пытаетесь выполнить.

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

ответил NReilingh 26 SunEurope/Moscow2010-12-26T04:36:32+03:00Europe/Moscow12bEurope/MoscowSun, 26 Dec 2010 04:36:32 +0300 2010, 04:36:32

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132