Я автоматизирую установку моего Mac с помощью Puppet. Как часть этого мне нужно установить несколько программ, которые приходят в формате .dmg.
Я использую следующее, чтобы смонтировать их:
sudo /usr/bin/hdiutil mount -plist -nobrowse -readonly -quiet -mountrandom /tmp Program.dmg
Проблема в том, что некоторые файлы .dmg поставляются с прикрепленной лицензией, и поэтому скрипт застревает, принимая лицензию. (При запуске с puppet нет стандартного ввода / вывода, поэтому я не могу подтвердить его вручную, чтобы продолжить.)
Есть ли способ предварительно одобрить или принудительно одобрить лицензию?
Ответы:
Если у вас есть графический интерфейс и вы можете выполнять два вызова командной строки параллельно, вы можете использовать
и
последний из которых выполняет следующий AppleScript:
Во
bash
, я могу написатьисточник
Это сработало для меня, когда я столкнулся с .dmg, который содержал лицензионное соглашение, которое я хотел установить через командную строку без взаимодействия с пользователем ...
(примечание: Я уверен , что достаточно не все из перечисленных выше опций, необходимых для обхода лицензионного соглашения, такие как
-nobrowse
,-noverify
,-noautoopen
,-mountpoint
Тем не менее, я использовал их , и я не сделал тест без них , так что я не хочу утверждать то , что я. не проверял.)То, что я закончил, было каталогом с
где
right_here/
содержалось содержимоеfoo.dmg
без запроса EULA.Не забудьте отделить, когда вы закончите!
Для получения дополнительной информации: hdiutil (1) Mac OS X Руководство Страница .
YMMV
источник
Если для этого просто нужно ввести «Y», то передайте команду yes в команду hdiutil:
Это будет эмулировать нажатие клавиши 'y' и возврат в командную строку.
Чтобы ввести что-то еще, просто поместите это в командную строку в качестве параметра:
Это введет «принять» в сценарий.
Обратите внимание, что если сценарий запрашивает ввод несколько раз, команда yes добавит несколько записей. Вы можете увидеть вывод как «сломанный канал» - это просто означает, что команда, которую вы отправили в quit, пока «да» все еще отправляла ввод.
источник
Недавно я наткнулся на DMG, у которого было лицензионное соглашение, и это действительно раздражало меня, так как я не мог писать сценарии вокруг него. Я понял, что если я преобразовал DMG в CDR, он обошел EULA при установке CDR.
Вот что я сделал:
Надеюсь это поможет.
источник
yes | hdiutil...
какой-то безумной причине решения будут зависать для меня при вызове из скрипта на python.Если у вас есть многостраничное лицензионное соглашение, которое вам нужно принять, вы можете перейти к части принятия, поставив
q
перед остальной частью вашей команды принятия (так как все, что вам нужно - это принятая команда выходаless
, вы также можете использоватьZZ
илиQ
).Например, если лицензионное соглашение требует от вас ввести a,
y
чтобы принять:источник
Разве вы не должны использовать собственные инструменты puppet для установки пакетов? Я сам администратор Radmind, и я не знаком с puppet, но проверка их вики показывает, что есть инструмент под названием pkgdmg, который может сделать то же самое, что вы пытаетесь выполнить.
http://projects.puppetlabs.com/projects/puppet/wiki/Puppet_Mac_Osx#packagepkgdmg
источник