是否有安装dmg的命令


51

我想在远程服务器上安装dmg文件。我所拥有的只是一个ssh访问。由于DMG是磁盘映像,因此我尝试挂载它,但是挂载似乎无法识别其格式。

file说我的dmg文件是一个VAX COFF executable

Answers:


71

首先,挂载dmg映像: sudo hdiutil attach <image>.dmg

图像将被安装到/Volumes/<image>。我的软件包包含我安装的软件包:sudo installer -package /Volumes/<image>/<image>.pkg -target /

最后卸载图像:sudo hdiutil detach /Volumes/<image>


我这样做,有Docker.dmg和我没有<image>.pkg让DIT不工作
迪米特里Kopriwa

19

您应该能够挂载.dmg使用:

hdiutil attach /path/to/file.dmg

然后将其内容(显示在中/Volumes)复制到任意位置。


5

我必须挂载并将其复制.app/Applications文件夹。对于Etcher.app:

首先,如@trojanfoe所说:

sudo hdiutil attach /Users/janatac/Etcher-1.2.1.dmg

然后

sudo cp -R /Volumes/Etcher\ 1.2.1/Etcher.app /Applications

然后将您的应用程序放在/Applications文件夹中

不要忘记卸载该卷:

sudo hdiutil unmount /Volumes/Etcher\ 1.2.1/

阅读博客文章中的说明后,它可以正常工作。


5

如果要编写安装脚本,则需要更多步骤,因为.dmg文件名,创建的卷的名称,应用程序的名称以及需要分离的设备的名称都可以不同。另外,他们可以在其中留有空间。

.dmg可以在其中包含一个.app或多个.pkg文件,并且这些文件需要不同的行为。

这是一个bash函数,用于从远程URL安装dmg:

# usage: installdmg https://example.com/path/to/pkg.dmg
function installdmg {
    set -x
    tempd=$(mktemp -d)
    curl $1 > $tempd/pkg.dmg
    listing=$(sudo hdiutil attach $tempd/pkg.dmg | grep Volumes)
    volume=$(echo "$listing" | cut -f 3)
    if [ -e "$volume"/*.app ]; then
      sudo cp -rf "$volume"/*.app /Applications
    elif [ -e "$volume"/*.pkg ]; then
      package=$(ls -1 "$volume" | grep .pkg | head -1)
      sudo installer -pkg "$volume"/"$package" -target /
    fi
    sudo hdiutil detach "$(echo "$listing" | cut -f 1)"
    rm -rf $tempd
    set +x
}

请注意,如果您.dmg.app运行该文件的文件来安装程序,那么您将需要再次执行其他操作。


这仅适用于dmg包含可立即运行的应用程序,不适用于软件包或安装程序应用程序。
nohillside

@patrix您能给我一些可以测试以完善答案的软件包和安装程序示例吗?
voutasaurus

软件包很容易(以.pkg结尾),但是安装程序的应用看起来与真实的应用相同
nohillside

这不会分离文件。hdiutil: detach failed - No such file or directory
Nicholas DiPiazza

1
@NicholasDiPiazza我希望苹果公司通过提供并强制执行一个易于使用的标准,并为开发人员提供工具来自动将其现有安装程序转换为使用新标准,从而简化此过程。
voutasaurus

1

您可以尝试使用该命令open disk://host.tld/image.dmg


open什么也没做,只是退出,没有错误信息。
philant 2012年

2
是的,它确实。我刚刚测试过。在完全安装磁盘映像之前,它不会显示任何内容,因此您必须等待一分钟左右,才能将其显示在/ Volumes中。(如果您按ssh并键入,它会起作用open path/to/file.dmg。不过我认为不会disk://host.tld/。)
daviewales 2012年

很有帮助,尽管可能不完全是OP所需要的。谢谢。
丹尼·惠特
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.