Ignorar um contrato de licença ao montar um DMG na linha de comando

16

Estou automatizando minha instalação do Mac usando o fantoche. Como parte disso, eu preciso instalar vários programas que vêm em um formato .dmg.

Eu uso o seguinte para montá-los:

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

O problema é que alguns arquivos .dmg vêm com uma licença anexada e, assim, o script fica preso ao aceitar a licença. (Não há stdin / out quando executado com fantoche, então não posso aprovar manualmente para continuar.)

Existe uma maneira de pré-aprovar ou forçar a aprovação da licença?

    
por Vitaly Kushner 12.12.2010 / 05:33

6 respostas

2

Se você tem uma GUI e é capaz de realizar duas chamadas de linha de comando em paralelo, você pode usar

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

e

osascript accept.scpt

o último dos quais executa o seguinte 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

Em bash , posso escrever

/System/Library/CoreServices/DiskImageMounter.app/Contents/MacOS/DiskImageMounter file.dmg & osascript accept.scpt
    
por 25.12.2010 / 21:44
17

Isso funcionou para mim quando eu encontrei um .dmg que continha um EULA que eu queria instalá-lo através da linha de comando sem interação do usuário ...

/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: Tenho certeza de que nem todas as opções acima são necessárias para ignorar o EULA, como -nobrowse , -noverify , -noautoopen , -mountpoint . No entanto, usei-as e Eu não testei sem eles, então eu não quis reivindicar algo que eu não tinha testado.)

O que acabei tendo foi um diretório com

bar.cdr
foo.dmg
right_here/

em que right_here/ continha o conteúdo de foo.dmg sem ser solicitado pelo EULA.

Lembre-se de separar quando terminar!

/usr/bin/hdiutil detach right_here/

Para mais informações: hdiutil (1) Mac OS X Página Manual .

YMMV

    
por 26.02.2011 / 10:47
7

Se precisar apenas de "Y", digite o comando yes no comando hdiutil:

yes | /bin/hdiutil [...]

Isso emulará pressionando 'y' e retornará na linha de comando.

Para digitar algo mais, basta colocá-lo na linha de comando como parâmetro:

yes accept | ...

Isso vai inserir "aceitar" no script.

Observe que, se o script pedir a entrada várias vezes, o comando yes colocará várias entradas. Você pode ver a saída como 'cano quebrado' - isso significa apenas que o comando que você canalizou para sair enquanto 'yes' ainda estava enviando entrada.

    
por 08.10.2011 / 13:34
5

Recentemente, deparei com um DMG que tinha um EULA e isso estava realmente me irritando, já que eu não conseguia escrever o script em torno dele. Eu descobri que se eu convertesse o DMG em um CDR ele contornava o EULA ao montar o CDR.

Veja o que eu fiz:

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

Espero que isso ajude.

    
por 02.10.2014 / 21:00
1

Se você tiver um EULA com várias páginas que precisa aceitar, poderá acessar a parte de aceitação colocando q antes do resto do comando accept (pois tudo o que você precisa é de um comando quit aceito em less , você também pode usar ZZ ou Q ).

Por exemplo, se o EULA exigir que você digite um y para aceitar sua execução:

yes qy | hdiutil attach ...
    
por 15.11.2016 / 22:16
0

Você não deveria estar usando as ferramentas do fantoche para instalar pacotes? Eu sou um administrador radmind e eu não estou familiarizado com fantoche, mas uma verificação no seu wiki revela que existe uma ferramenta chamada pkgdmg que pode fazer o equivalente ao que você está tentando realizar.

link

    
por 26.12.2010 / 02:36