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.

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>.


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.


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 .


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.


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.