Existe um comando para instalar um dmg

51

Quero instalar um arquivo dmg em um servidor remoto. Tudo o que tenho é um acesso ssh. Como um DMG é uma imagem de disco, tentei montá-lo, mas o mount parece não reconhecer seu formato.

filediz que meu arquivo dmg é um VAX COFF executable.

filante
fonte

Respostas:

71

Primeiro, monte a imagem dmg: sudo hdiutil attach <image>.dmg

A imagem será montada em /Volumes/<image>. O meu continha um pacote com o qual eu instalei:sudo installer -package /Volumes/<image>/<image>.pkg -target /

Finalmente desmontar a imagem: sudo hdiutil detach /Volumes/<image>.

filante
fonte
Eu fiz isso com Docker.dmge não tinha, <image>.pkgpara que não funcionasse
Dimitri Kopriwa 27/10
19

Você deve poder montar o .dmguso:

hdiutil attach /path/to/file.dmg

E então copie seu conteúdo (que aparece em /Volumes) onde você quiser.

trojanfoe
fonte
5

Eu tive que montar e copiar a pasta .apppara /Applications. Para Etcher.app:

Primeiro como @trojanfoe disse:

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

Então

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

Você tem seu aplicativo na /Applicationspasta

Não esqueça de desmontar o volume:

sudo hdiutil unmount /Volumes/Etcher\ 1.2.1/

Comecei a trabalhar depois de ler as instruções de uma postagem do blog .

Jan ATAC
fonte
5

Se você deseja criar um script para a instalação, .dmgserão necessárias mais algumas etapas, pois o nome do arquivo, o nome do volume criado, o nome do aplicativo e o nome do dispositivo que precisa ser desconectado podem ser diferentes. Além disso, eles podem ter espaços neles.

Também .dmgpode haver um .apparquivo ou um .pkgarquivo e isso requer um comportamento diferente.

Aqui está uma função bash para instalar um dmg a partir de um URL remoto:

# 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
}

Observe que se você .dmgpossui um .apparquivo que é executado para instalar o programa, será necessário fazer algo diferente novamente.

voutasaurus
fonte
Isso funcionará apenas para dmgs que contêm aplicativos prontos para execução, não para pacotes ou aplicativos de instalação.
Nohillside
@patrix, você pode me dar alguns exemplos de pacotes e aplicativos de instalação que eu posso testar para refinar a resposta?
precisa saber é o seguinte
Os pacotes são fáceis (terminam em .pkg), mas um aplicativo instalador parece o mesmo que um aplicativo real
nohillside
isso não desanexa o arquivo. hdiutil: detach failed - No such file or directory
Nicholas DiPiazza
1
@NicholasDiPiazza Desejo que a Apple facilite isso, fornecendo e reforçando um único padrão fácil de usar e fornecendo ferramentas aos desenvolvedores para converter automaticamente seus instaladores existentes para usar o novo padrão.
precisa saber é o seguinte
1

Você pode tentar o comando open disk://host.tld/image.dmg.

Sanjuro
fonte
opennão fez nada, apenas saiu, sem mensagem de erro.
Philant
2
Sim. Eu apenas testei. Ele não exibirá nada até que a imagem do disco esteja completamente montada; portanto, você terá que esperar um minuto ou mais antes de aparecer em / Volumes. (Ele funciona se você ssh em e tipo open path/to/file.dmgeu não acho. disk://host.tld/Obras embora.)
daviewales
Útil, embora talvez não seja exatamente o que o OP precisava. Obrigado.
Danny Whitt