web-dev-qa-db-ja.com

コマンドラインにDMGをマウントするときに、使用許諾契約をバイパスする

Puppetを使用してMacのインストールを自動化しています。その一環として、.dmg形式のプログラムをいくつかインストールする必要があります。

私はそれらをマウントするために以下を使用します:

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

問題は、一部の.dmgファイルにライセンスが添付されているため、スクリプトがライセンスを受け入れてスタックすることです。 (puppetを使用して実行する場合、stdin/outがないため、続行することを手動で承認することはできません。)

ライセンスを事前承認または強制承認する方法はありますか?

16
Vitaly Kushner

GUIがあり、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
2
Daniel Beck

これは、ユーザーの操作なしでコマンドラインからインストールしたいEULAを含む.dmgに遭遇したときにうまくいきました...

/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など、EULAをバイパスするために上記のオプションのすべてが必要なわけではないと合理的に確信しています。だから私は自分がテストしていないことを主張したくなかった。)

私が最終的に得たのは、

bar.cdr
foo.dmg
right_here/

ここで、right_here/には、EULAの入力を求められることなく、foo.dmgの内容が含まれていました。

終わったら必ず取り外してください!

/usr/bin/hdiutil detach right_here/

詳細情報: hdiutil(1)Mac OS Xマニュアルページ

[〜#〜] ymmv [〜#〜]

18
sorens

「Y」を入力するだけでよい場合は、yesコマンドをhdiutilコマンドにパイプします。

yes | /bin/hdiutil [...]

これは、「y」を押すことをエミュレートし、コマンドラインに戻ります。

他の何かを入力するには、それをパラメーターとしてコマンドラインに配置するだけです。

yes accept | ...

スクリプトに「accept」と入力します。

スクリプトが複数回入力を要求する場合、yesコマンドは複数のエントリを入力することに注意してください。「brokenpipe」のような出力が表示される場合があります。これは、「yes」がまだ入力を送信している間にパイプしたコマンドが終了したことを意味します。

7
mauvedeity

最近、EULAのあるDMGに出くわしましたが、スクリプトを書くことができなかったので、本当にイライラしました。 DMGをCDRに変換した場合、CDRのマウント時にEULAをバイパスすることがわかりました。

これが私がしたことです:

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

お役に立てれば。

6
ciphershort

受け入れる必要のある複数ページのEULAがある場合は、acceptコマンドの残りの部分の前にqを置くことでaccept部分に到達できます(必要なのはlessのaccepted quitコマンドだけなので、ZZを使用することもできます。またはQ)。

たとえば、EULAで、実行を受け入れるためにyを入力する必要がある場合:

yes qy | hdiutil attach ...
1
cwhits

パッケージをインストールするためにpuppet独自のツールを使用するべきではありませんか?私自身はradmindadminであり、puppetに精通していませんが、彼らのwikiをチェックすると、あなたが達成しようとしていることと同等のことを行う可能性のあるpkgdmgというツールがあることがわかります。

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

0
NReilingh