在命令行上安装DMG时绕过许可协议


16

我正在使用puppet自动执行Mac安装。作为它的一部分,我需要安装几个.dmg格式的程序。

我使用以下内容来安装它们:

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

问题是某些.dmg文件附带了许可证,因此脚本卡住了接受许可证。(与puppet一起运行时没有stdin / out,因此我无法手动批准它继续。)

有没有可以预先批准或强制批准许可证的方法?


可能继续使用SF;您正在处理由于使用许多计算机而引起的问题。但是,它也可以转到此处。
凯文M 2010年

2
执行“是| hdiutil附加disk.dmg> / dev / null”-这将为您键入“ Y”。
mauvedeity

Answers:


2

如果您具有GUI并能够并行执行两个命令行调用,则可以使用

/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➜dotfiles git:(master)✗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/

其中right_here/包含的内容foo.dmg而未提示输入EULA。

完成后请确保分离!

/usr/bin/hdiutil detach right_here/

有关更多信息:hdiutil(1)Mac OS X手册页

青年汽车


1
谢谢-这在多页协议中效果很好,其中重复的“ y”不起作用。
拉尔斯·罗尔巴赫

1
也为我工作。尽管我只需要第一行将其转换为cdr文件,但是我可以不附加所有这些参数就可以附加它,并且它可以工作。
Maxime Viargues

7

如果只需要键入“ Y”,则将yes命令通过管道传递到hdiutil命令中:

yes | /bin/hdiutil [...]

这将模拟按“ y”并返回命令行。

要输入其他内容,只需将其作为参数放在命令行中即可:

yes accept | ...

这将在脚本中输入“接受”。

请注意,如果脚本多次请求输入,则yes命令将放入多个条目。您可能会看到类似“ broken pipe”的输出-这仅意味着您在“ yes”仍在发送输入时通过管道将其退出。


我从来没有尝试过,所以我不知道粗壮的重定向。感谢+50!
mauvedeity

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命令之前放置a来进入接受部分(因为您所需要的只是一个接受的quit命令)less,您也可以使用ZZQ)。

例如,如果EULA要求您键入a y来接受您的运行:

yes qy | hdiutil attach ...

0

您不应该使用puppet自己的工具来安装软件包吗?我本人是一名radmind管理员,我对puppet并不熟悉,但是对他们的Wiki进行检查后发现,有一个名为pkgdmg的工具可能等效于您要完成的工作。

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


1
它不处理需要接受许可的应用程序。
Vitaly Kushner

确实; 我的印象是,您将无需许可证接受即可创建自己的软件包。我想这就是Radmind管理员的心态。
NReilingh 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.