Apakah ada perintah untuk menginstal dmg

52

Saya ingin menginstal file dmg di server jauh. Yang saya miliki hanyalah akses ssh. Karena DMG adalah gambar disk, saya mencoba me-mount-nya, tetapi mount sepertinya tidak mengenali formatnya.

filemengatakan file dmg saya adalah a VAX COFF executable.

filant
sumber

Jawaban:

71

Pertama, pasang gambar dmg: sudo hdiutil attach <image>.dmg

Gambar akan dipasang ke /Volumes/<image>. Milik saya berisi paket yang saya instal dengan:sudo installer -package /Volumes/<image>/<image>.pkg -target /

Akhirnya unmount gambar: sudo hdiutil detach /Volumes/<image>.

filant
sumber
Saya melakukan itu dengan Docker.dmgdan saya tidak punya <image>.pkgsehingga tidak berhasil
Dimitri Kopriwa
19

Anda harus bisa memasang .dmgmenggunakan:

hdiutil attach /path/to/file.dmg

Dan kemudian salin isinya (yang muncul di /Volumes) di mana saja Anda suka.

trojanfoe
sumber
5

Saya harus memasang dan menyalin .appke /Applicationsfolder. Untuk Etcher.app:

Pertama seperti yang dikatakan @trojanfoe:

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

Kemudian

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

Anda kemudian memiliki aplikasi Anda di /Applicationsfolder

Jangan lupa untuk melepas volume:

sudo hdiutil unmount /Volumes/Etcher\ 1.2.1/

Dapatkan itu berfungsi setelah membaca instruksi dari posting blog .

Jan ATAC
sumber
5

Jika Anda ingin membuat skrip instalasi, diperlukan beberapa langkah lagi sejak nama .dmgfile, nama Volume yang dibuat, nama aplikasi, dan nama perangkat yang perlu dilepas semuanya dapat berbeda. Plus mereka dapat memiliki ruang di dalamnya.

Juga .dmgdapat memiliki .appfile atau .pkgfile di dalamnya dan ini memerlukan perilaku yang berbeda.

Inilah fungsi bash untuk menginstal dmg dari URL jarak jauh:

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

Catatan jika Anda .dmgmemiliki .appfile yang berjalan untuk menginstal program, maka Anda perlu melakukan sesuatu yang berbeda lagi.

voutasaurus
sumber
Ini hanya akan berfungsi untuk dmg yang berisi aplikasi yang siap dijalankan, bukan untuk paket atau aplikasi penginstal.
nohillside
@patrix, bisakah Anda memberi saya beberapa contoh paket dan aplikasi penginstal yang dapat saya uji untuk memperbaiki jawabannya?
voutasaurus
Paket mudah (diakhiri dengan .pkg), tetapi aplikasi penginstal terlihat sama dengan yang asli
nohillside
ini tidak melepaskan file. hdiutil: detach failed - No such file or directory
Nicholas DiPiazza
1
@NicholasDiPiazza Saya berharap Apple akan membuat ini lebih mudah dengan menyediakan dan memberlakukan standar tunggal yang mudah digunakan dan memberikan alat pengembang untuk secara otomatis mengonversi installer yang ada untuk menggunakan standar baru.
voutasaurus
1

Anda bisa mencoba perintahnya open disk://host.tld/image.dmg.

Sanjuro
sumber
opentidak melakukan apa-apa, hanya keluar, tanpa pesan kesalahan.
philant
2
Ya itu. Saya baru saja mengujinya. Ini tidak akan menampilkan apa pun sampai gambar disk telah terpasang sepenuhnya, jadi Anda harus menunggu beberapa saat sebelum muncul di / Volume. (Ini bekerja jika Anda ssh dan ketik open path/to/file.dmg. Saya tidak berpikir disk://host.tld/bekerja sekalipun.)
daviewales
Bermanfaat, meskipun mungkin bukan yang dibutuhkan OP. Terima kasih.
Danny Whitt