Puppetを使用してMacのインストールを自動化しています。その一環として、.dmg形式のプログラムをいくつかインストールする必要があります。
私はそれらをマウントするために以下を使用します:
Sudo /usr/bin/hdiutil mount -plist -nobrowse -readonly -quiet -mountrandom /tmp Program.dmg
問題は、一部の.dmgファイルにライセンスが添付されているため、スクリプトがライセンスを受け入れてスタックすることです。 (puppetを使用して実行する場合、stdin/outがないため、続行することを手動で承認することはできません。)
ライセンスを事前承認または強制承認する方法はありますか?
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
これは、ユーザーの操作なしでコマンドラインからインストールしたい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 [〜#〜]
「Y」を入力するだけでよい場合は、yesコマンドをhdiutilコマンドにパイプします。
yes | /bin/hdiutil [...]
これは、「y」を押すことをエミュレートし、コマンドラインに戻ります。
他の何かを入力するには、それをパラメーターとしてコマンドラインに配置するだけです。
yes accept | ...
スクリプトに「accept」と入力します。
スクリプトが複数回入力を要求する場合、yesコマンドは複数のエントリを入力することに注意してください。「brokenpipe」のような出力が表示される場合があります。これは、「yes」がまだ入力を送信している間にパイプしたコマンドが終了したことを意味します。
最近、EULAのあるDMGに出くわしましたが、スクリプトを書くことができなかったので、本当にイライラしました。 DMGをCDRに変換した場合、CDRのマウント時にEULAをバイパスすることがわかりました。
これが私がしたことです:
hdiutil convert foo.dmg -format UDTO -o bar.cdr
hdiutil attach bar.cdr
rm foo.dmg <--optional
お役に立てれば。
受け入れる必要のある複数ページのEULAがある場合は、acceptコマンドの残りの部分の前にq
を置くことでaccept部分に到達できます(必要なのはless
のaccepted quitコマンドだけなので、ZZ
を使用することもできます。またはQ
)。
たとえば、EULAで、実行を受け入れるためにy
を入力する必要がある場合:
yes qy | hdiutil attach ...
パッケージをインストールするためにpuppet独自のツールを使用するべきではありませんか?私自身はradmindadminであり、puppetに精通していませんが、彼らのwikiをチェックすると、あなたが達成しようとしていることと同等のことを行う可能性のあるpkgdmgというツールがあることがわかります。
http://projects.puppetlabs.com/projects/puppet/wiki/Puppet_Mac_Osx#packagepkgdmg