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


16

Estou automatizando minha instalação do Mac usando fantoche. Como parte disso, preciso instalar vários programas que vêm no 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, portanto, o script fica bloqueado ao aceitar a licença. (Não há stdin / out ao executar com fantoches, então não posso aprová-lo manualmente para continuar.)

Existe uma maneira de pré-aprovar ou aprovar forçosamente a licença?


Poderia continuar no SF; você está lidando com problemas que surgem do trabalho com muitas máquinas. No entanto, também pode ir aqui.
Kevin M

2
Faça "yes | hdiutil anexar disk.dmg> / dev / null" - que digitará um 'Y' para você.
Mauvedeity

Respostas:


2

Se você tiver uma GUI e puder executar duas chamadas de linha de comando em paralelo, poderá 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, eu sou capaz de escrever

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

Esqueci de mencionar que não uso marionetes. Esta resposta pode, portanto, ser terrivelmente inútil, mas como já faz alguns dias, postei de qualquer maneira.
Daniel Beck

hmm, recebo um erro ao tentar executar o osascript accept.scpt ➜ dotfiles git: (master) ✗ osascript accept.scpt osascript: accept.scpt: não existe esse arquivo ou diretório
conceda

@grant Você precisa primeiro criar o arquivo com o conteúdo especificado.
Daniel Beck

18

Isso funcionou para mim quando 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: Eu sou razoavelmente certo nem todas as opções acima são necessários para ignorar o EULA, como -nobrowse, -noverify, -noautoopen, -mountpointNo entanto, eu usei-los e eu não fiz teste sem eles, então eu não queria que a reivindicação algo que eu. não tinha testado.)

O que acabei com foi um diretório com

bar.cdr
foo.dmg
right_here/

onde right_here/continha o conteúdo do foo.dmgsem ser solicitado o EULA.

Certifique-se de desconectar quando terminar!

/usr/bin/hdiutil detach right_here/

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

YMMV


11
Obrigado - isso funcionou bem com um contrato de várias páginas, onde um 'y' repetido não funcionava.
Lars Rohrbach

11
Trabalhou para mim também. Embora eu só precisasse da primeira linha para convertê-lo em um arquivo cdr, posso anexá-lo sem todos esses argumentos e ele funciona.
Maxime Viargues

7

Se ele precisar apenas digitar "Y", envie o comando yes para o comando hdiutil:

yes | /bin/hdiutil [...]

Isso simula pressionar 'y' e retornar na linha de comando.

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

yes accept | ...

Isso entrará em 'accept' no script.

Observe que, se o script solicitar entrada várias vezes, o comando yes incluirá várias entradas. Você pode ver uma saída como 'pipe quebrado' - isso significa apenas que o comando no qual você saiu foi encerrado enquanto 'yes' ainda estava enviando entrada.


Eu nunca tentei isso, então não sabia sobre o redirecionamento robusto. Obrigado pelo +50!
mauvedeity

6

Recentemente, me deparei com um DMG que tinha um EULA e isso realmente me irritava, já que eu não podia escrever em torno dele. Eu descobri que se eu convertesse o DMG em um CDR, ignoraria o EULA na montagem do CDR.

Aqui está o que eu fiz:

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

Espero que isto ajude.


Isso me ajudou muito! As yes | hdiutil...soluções seriam suspensas para mim quando chamadas de um script python por algum motivo louco.
19415 Nathan

1

Se você tiver um EULA com várias páginas que precise aceitar, poderá acessar a parte accept colocando um qantes do resto do seu comando accept (já que tudo o que você precisa é de um comando de saída aceito less, você também pode usar ZZou Q).

Por exemplo, se o EULA exigir que você digite a ypara aceitar a execução:

yes qy | hdiutil attach ...

0

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

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


11
não lida com aplicativos que exigem aceitação de licença.
Vitaly Kushner

De fato; Fiquei com a impressão de que você criaria seus próprios pacotes sem a necessidade de uma aceitação de licença. Essa é a mentalidade de um administrador da Radmind, suponho.
NReilingh
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.