コマンドラインでDMGをマウントするときにライセンス契約をバイパスする


16

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

以下を使用してそれらをマウントします。

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

問題は、いくつかの.dmgファイルにライセンスが添付されているため、スクリプトがライセンスの受け入れを停止していることです。(パペットで実行する場合、stdin / outはありませんので、手動で承認して続行することはできません。)

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


おそらくSFに進むことができます。多くのマシンでの作業から生じる問題に対処しています。しかし、ここにも行くことができます。
ケビンM

2
「yes | hdiutil attach disk.dmg> / dev / null」を実行します-「Y」を入力します。
奇術

回答:


2

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

私はパペットを使用しないことを言及するのを忘れました。したがって、この答えはひどく役に立たないかもしれませんが、それは数日だったので、とにかく投稿しました。
ダニエルベック

実行しようとしたときうーん、私はエラーを取得するosascriptをaccept.scpt➜ドットファイルはgit:(マスター)✗osascriptをaccept.scpt osascriptを:accept.scpt:そのようなファイルまたはディレクトリ
助成金

@grantまず、指定されたコンテンツでファイルを作成する必要があります。
ダニエルベック

18

これは、ユーザーとの対話なしでコマンドラインからインストールしたい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

(注:私は上記のすべてのオプションに必要な合理的にわからないEULAバイパス、など-nobrowse-noverify-noautoopen-mountpointしかし、私はそれらを使用し、私は請求何かしたくなかったので、それらなしでテストをしなかったことを私は。は、テストされていませんでした。)

私が終わったのはディレクトリでした

bar.cdr
foo.dmg
right_here/

EULAのプロンプトが表示されずにのright_here/内容が含まれていた場所foo.dmg

完了したら必ず切り離してください!

/usr/bin/hdiutil detach right_here/

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

YMMV


1
感謝-これは複数ページの契約でうまく機能しましたが、「y」が繰り返されても機能しませんでした。
ラースRohrbach

1
私のためにも働いた。最初の行でcdrファイルに変換する必要がありましたが、すべての引数なしで添付するだけで機能します。
マキシムViargues

7

「Y」の入力が必要な場合は、yesコマンドをhdiutilコマンドにパイプします。

yes | /bin/hdiutil [...]

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

他の何かを入力するには、コマンドラインにパラメーターとして入力します。

yes accept | ...

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

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


私はこれを試したことがないので、頑丈なリダイレクトについては知りませんでした。+50をありがとう!
奇術

6

最近、EULAのあるDMGに出会いましたが、スクリプトを作成できなかったので、本当にイライラしていました。DMGをCDRに変換すると、CDRのマウント時にEULAをバイパスしたかどうかがわかりました。

私がやったことは次のとおりです。

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

お役に立てれば。


これは私を助けてくれました!yes | hdiutil...いくつかのクレイジーな理由のためのPythonスクリプトから呼び出された場合の解決策は私のためにハングしていました。
ネイサン

1

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

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

yes qy | hdiutil attach ...

0

パペットのツールを使用してパッケージをインストールするべきではありませんか?私は自分でradmind管理者であり、パペットに精通していませんが、wikiを確認すると、あなたが達成しようとしていることと同等の機能を果たすpkgdmgというツールがあることがわかります。

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


1
ライセンスに同意する必要があるアプリは処理しません。
ヴィタリークシュナー

確かに; 私は、ライセンスを受け入れる必要なしに独自のパッケージを作成するという印象を受けました。これがRadmind管理者の考え方です。
-NReilingh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.