Обхід ліцензійної угоди під час монтажу DMG у командному рядку


16

Я автоматизую встановлення Mac, використовуючи лялечку. У рамках цього мені потрібно встановити кілька програм, які поставляються у форматі .dmg.

Для їх монтажу я використовую наступне:

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

Проблема полягає в тому, що деякі .dmg файли поставляються з доданою ліцензією, і тому сценарій застряг, приймаючи ліцензію. (Під час бігу з лялькою немає ніякого стидіна / виходу, тому я не можу вручну затвердити його для продовження.)

Чи існує спосіб попереднього затвердження або примусового затвердження ліцензії?


Можливо, можливо, піти на SF; Ви маєте справу з проблемами, які виникають внаслідок роботи з багатьма машинами. Однак це також може піти сюди.
Кевін М

2
Зробіть "так | hdiutil приєднати disk.dmg> / dev / null" - це введе для вас "Y".
мавп

Відповіді:


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

Я забув зазначити, що не використовую лялькових. Тому ця відповідь може бути жахливо марною, але оскільки минуло кілька днів, я все-таки розмістив повідомлення.
Даніель Бек

хм, я отримую помилку при спробі запустити osascript accept.scpt ➜ dotfiles git: (master) ✗ osascript accept.scpt osascript: accept.scpt: Немає такого файлу чи каталогу
надайте

@grant Спочатку потрібно створити файл із вказаним вмістом.
Даніель Бек

18

Це працювало для мене, коли я стикався з .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

(Примітка: Я впевнений , що досить не всі з перерахованих вище опцій, необхідних для обходу ліцензійної угоди, такі як -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


1
Спасибі - це добре працювало з багатосторінковою угодою, де повторне "у" не працювало.
Ларс Рорбах

1
Працював і для мене. Хоча мені просто знадобився перший рядок, щоб перетворити його у файл cdr, я можу просто вкласти його без усіх цих аргументів, і він працює.
Максим Віаргес

7

Якщо йому просто потрібно набрати "Y", тоді введіть команду "yes" у команду hdiutil:

yes | /bin/hdiutil [...]

Це буде імітувати натискання "y" і повертається в командному рядку.

Щоб ввести щось інше, просто поставте його в командному рядку як параметр:

yes accept | ...

Це введе "сценарій" у сценарій.

Зауважте, що якщо скрипт запитує введення кілька разів, команда "Так" додасть кілька записів. Можливо, ви побачите вихід, як "зламана труба" - це просто означає, що команда, яку ви переклали, поки поки "так", все ще надсилала введення.


Я ніколи цього не пробував, тому не знав про товстий переадресацію. Дякуємо за +50!
мавп

6

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

Ось що я зробив:

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

Сподіваюсь, це допомагає.


Це допомогло мені тонну! Ці yes | hdiutil...рішення будуть висіти для мене , коли викликаються з пітона сценарію для якої - то божевільною причини.
Натан

1

Якщо у вас є багатосторінковий EULA, який потрібно прийняти, ви можете дістатись до частини прийняття, поставивши qперед іншою частиною вашої команди прийняття (оскільки все, що вам потрібно, це прийнята команда виходу less, ви також можете використовувати ZZабо Q).

Наприклад, якщо EULA вимагає, щоб ви ввели a, yщоб прийняти ваш запуск:

yes qy | hdiutil attach ...

0

Чи не використовуєте ви власні лялькові інструменти для встановлення пакетів? Я сам адміністратор радіом, і я не знайомий з маріонеткою, але перевірка їхньої вікі виявляє, що існує інструмент під назвою pkgdmg, який може зробити еквівалент тому, що ви намагаєтеся досягти.

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


1
він не обробляє додатки, які вимагають прийняття ліцензії.
Віталій Кушнер

Дійсно; У мене було враження, що ви створюватимете власні пакунки, не потребуючи прийняття ліцензії. Таке мислення адміністратора Radmind, я думаю.
NReilingh
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.