Есть ли команда для установки DMG

52

Я хочу установить файл dmg на удаленный сервер. Все, что у меня есть, это доступ по SSH. Поскольку DMG - это образ диска, я попытался смонтировать его, но, похоже, mount не распознает его формат.

fileговорит, что мой файл DMG является VAX COFF executable.

philant
источник

Ответы:

71

Сначала смонтируйте образ dmg: sudo hdiutil attach <image>.dmg

Изображение будет установлено на /Volumes/<image>. Мой содержал пакет, который я установил с:sudo installer -package /Volumes/<image>/<image>.pkg -target /

Наконец размонтировать образ: sudo hdiutil detach /Volumes/<image>.

philant
источник
Я сделал это с, Docker.dmgи у меня не было <image>.pkgтак, чтобы dit не работал
Dimitri Kopriwa
19

Вы должны быть в состоянии .dmgиспользовать:

hdiutil attach /path/to/file.dmg

А затем скопируйте его содержимое (которое появляется в /Volumes) куда угодно.

trojanfoe
источник
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/

Получил работу после прочтения инструкции из сообщения в блоге .

Ян ATAC
источник
5

Если вы хотите выполнить сценарий установки, требуется выполнить еще несколько шагов, поскольку имя .dmgфайла, имя созданного тома, имя приложения и имя устройства, которое необходимо отсоединить, могут отличаться. Плюс у них могут быть пробелы в них.

Также .dmgможет иметь .appфайл или .pkgфайл в нем, и они требуют другого поведения.

Вот функция bash для установки dmg с удаленного URL:

# 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файл, который запускается для установки программы, вам нужно будет сделать что-то другое.

voutasaurus
источник
Это будет работать только для dmg, содержащих готовые приложения, но не для пакетов или приложений установщика.
Nohillside
@patrix, можете ли вы дать мне несколько примеров пакетов и приложений-установщиков, с которыми я могу протестировать, чтобы уточнить ответ?
voutasaurus
Пакеты просты (заканчиваются на .pkg), но приложение-установщик выглядит так же, как реальное
nohillside
это не отсоединяет файл. hdiutil: detach failed - No such file or directory
Николас ДиПьяцца
1
@NicholasDiPiazza Я бы хотел, чтобы Apple упростила эту задачу, предоставив и внедрив единый простой в использовании стандарт и предоставив разработчикам инструменты для автоматического преобразования их существующих установщиков в новый стандарт.
voutasaurus
1

Вы можете попробовать команду open disk://host.tld/image.dmg.

Sanjuro
источник
openничего не делал, просто выйдите, без сообщения об ошибке.
Филант
2
Да, это так. Я только что проверил это. Он не будет отображать ничего, пока образ диска не будет полностью смонтирован, поэтому вам придется подождать около минуты, прежде чем он появится в / Volumes. (Это работает, если вы введете ssh и напечатаете open path/to/file.dmg. disk://host.tld/Хотя я не думаю, что это работает.)
daviewales
Полезно, хотя, возможно, не совсем то, что нужно ОП. Спасибо.
Дэнни Уитт