Omitir un acuerdo de licencia al montar un DMG en la línea de comando


16

Estoy automatizando la instalación de mi Mac con títeres. Como parte de esto, necesito instalar varios programas que vienen en formato .dmg.

Yo uso lo siguiente para montarlos:

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

El problema es que algunos archivos .dmg vienen con una licencia adjunta, por lo que el script está atascado aceptando la licencia. (No hay stdin / out cuando se ejecuta con puppet, por lo que no puedo aprobarlo manualmente para continuar).

¿Hay alguna manera de preaprobar o forzar la aprobación de la licencia?


Posiblemente podría ir en SF; está lidiando con problemas que surgen de trabajar con muchas máquinas. Sin embargo, también podría ir aquí.
Kevin M

2
Haga "yes | hdiutil attach disk.dmg> / dev / null" - eso escribirá una 'Y' por usted.
mauvedeity

Respuestas:


2

Si tiene una GUI y puede realizar dos llamadas de línea de comandos en paralelo, puede usar

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

y

osascript accept.scpt

el último de los cuales ejecuta el siguiente 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

En bash, puedo escribir

/System/Library/CoreServices/DiskImageMounter.app/Contents/MacOS/DiskImageMounter file.dmg & osascript accept.scpt

Olvidé mencionar que no uso marionetas. Por lo tanto, esta respuesta puede ser terriblemente inútil, pero como han pasado unos días, publiqué de todos modos.
Daniel Beck

hmm aparece un error al intentar ejecutar osascript accept.scpt ➜ dotfiles git: (master) ✗ osascript accept.scpt osascript: accept.scpt: No existe tal archivo o directorio
conceda

@grant Primero debe crear el archivo con el contenido especificado.
Daniel Beck

18

Esto funcionó para mí cuando encontré un .dmg que contenía un EULA que quería instalar a través de la línea de comando sin interacción del usuario ...

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

(nota: no estoy razonablemente seguro de todas las opciones anteriores son necesarios para el EULA de derivación, tales como -nobrowse, -noverify, -noautoopen,-mountpoint Sin embargo, he usado y no he probado sin ellos, así que no quiero la reivindicación algo que yo. no había probado)

Lo que terminé con fue un directorio con

bar.cdr
foo.dmg
right_here/

donde right_here/contenía el contenido de la foo.dmgsin que se le solicite el EULA.

¡Asegúrate de despegarte cuando hayas terminado!

/usr/bin/hdiutil detach right_here/

Para más información: hdiutil (1) Página del manual de Mac OS X .

YMMV


1
Gracias, esto funcionó bien con un acuerdo de varias páginas, donde una 'y' repetida no funcionó.
Lars Rohrbach

1
A mí también me funcionó. Aunque solo necesitaba la primera línea para convertirlo a un archivo cdr, entonces puedo adjuntarlo sin todos esos argumentos y funciona.
Maxime Viargues

7

Si solo necesita escribir "Y", entonces canalice el comando yes al comando hdiutil:

yes | /bin/hdiutil [...]

Eso emulará presionando 'y' y volverá a la línea de comando.

Para escribir algo más, simplemente colóquelo en la línea de comando como parámetro:

yes accept | ...

Eso ingresará 'aceptar' en el guión.

Tenga en cuenta que si el script solicita entradas varias veces, el comando yes colocará múltiples entradas. Puede ver resultados como 'tubería rota'; esto solo significa que el comando que ingresó para salir mientras 'sí' todavía estaba enviando entradas.


Nunca he intentado esto, así que no sabía sobre la redirección robusta. Gracias por el +50!
mauvedeity

6

Recientemente me encontré con un DMG que tenía un EULA y realmente me irritaba ya que no podía escribir alrededor. Descubrí que si convertía el DMG en un CDR, eludía el EULA al montar el CDR.

Esto es lo que hice:

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

Espero que esto ayude.


¡Esto me ayudó mucho! Las yes | hdiutil...soluciones me colgarían cuando se llamara desde un script de Python por alguna razón loca.
Nathan

1

Si tiene un EULA de múltiples páginas que necesita aceptar, puede acceder a la parte de aceptación colocando un qantes del resto de su comando de aceptación (ya que todo lo que necesita es un comando de salida aceptado less, también puede usar ZZo Q).

Por ejemplo, si el EULA requiere que escriba a ypara aceptar, ejecutará:

yes qy | hdiutil attach ...

0

¿No deberías estar usando las propias herramientas de Puppet para instalar paquetes? Yo mismo soy un administrador radmind y no estoy familiarizado con Puppet, pero un chequeo en su wiki revela que hay una herramienta llamada pkgdmg que podría hacer el equivalente de lo que estás tratando de lograr.

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


1
no maneja aplicaciones que requieren aceptar licencia.
Vitaly Kushner

En efecto; Tenía la impresión de que estaría creando sus propios paquetes sin necesidad de una aceptación de licencia. Tal es la mentalidad de un administrador de Radmind, supongo.
NReilingh
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.