Bir dmg yüklemek için bir komut var mı


51

Uzak bir sunucuya bir dmg dosyası yüklemek istiyorum. Tek sahip olduğum bir ssh girişi. Bir DMG bir disk görüntüsü olduğundan, onu takmaya çalıştım, ancak mount biçimini tanımıyor gibi görünüyor.

filedmg dosyamın bir olduğunu söylüyor VAX COFF executable.

Yanıtlar:


71

İlk önce, dmg görüntüsünü bağlayın: sudo hdiutil attach <image>.dmg

Görüntü monte edilecek /Volumes/<image>. Mine, kurduğum bir paket içeriyor:sudo installer -package /Volumes/<image>/<image>.pkg -target /

Son olarak görüntüyü kaldırmak: sudo hdiutil detach /Volumes/<image>.


Bunu ben yaptım Docker.dmgve <image>.pkgişe yaramadım ki hiçbir işe yaramadı
Dimitri Kopriwa

19

.dmgKullanarak monte edebilmelisiniz :

hdiutil attach /path/to/file.dmg

Sonra /Volumesistediğiniz yerde , içeriğini (içinde görünür ) kopyalayın .


5

Ben monte zorunda kaldı ve kopyalamak .appiçin /Applicationsklasöre. Etcher.app için:

@Trojanfoe dediği gibi ilk:

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

Sonra

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

Daha sonra uygulamanızı /Applicationsklasörde bulundurun

Birimi ayırmayı unutma:

sudo hdiutil unmount /Volumes/Etcher\ 1.2.1/

Bir blog gönderisinden gelen talimatları okuduktan sonra çalışmaya başladı .


5

Yüklemeyi başlatmak isterseniz, .dmgdosyanın adı, oluşturulan Birimin adı, uygulamanın adı ve çıkarılması gereken aygıtın adı farklı olabileceğinden, birkaç adım daha gerekir. Artı, içinde boşluklar da olabilir.

Ayrıca .dmg, içinde bir .appdosya veya bir .pkgdosya olabilir ve bunlar farklı davranış gerektirir.

Uzak bir URL'den bir dmg yüklemek için bir bash işlevi:

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

Not: Programı kurmak için çalışan .dmgbir .appdosyanız varsa, tekrar farklı bir şey yapmanız gerekecek.


Bu, paketler veya yükleyici uygulamalar için değil, çalışmaya hazır uygulamalar içeren dmg'ler için işe yarar.
yokuş yukarı

@patrix, cevabı düzeltmek için test edebileceğim bazı paket ve yükleyici uygulama örnekleri verebilir misiniz?
voutasaurus

Paketler kolaydır (.pkg ile bitirin), ancak bir yükleyici uygulaması gerçek bir ile aynı görünüyor
yokuş aşağı

bu dosyayı ayırmaz. hdiutil: detach failed - No such file or directory
Nicholas DiPiazza,

1
@NicholasDiPiazza Apple'ın bunu, kullanımı kolay bir standardı sağlayarak ve uygulayarak ve geliştiricilere mevcut standartlarını yeni standardı kullanacak şekilde otomatik olarak dönüştürmek için araçlarını vererek daha kolay hale getirmesini diliyorum.
voutasaurus

1

Komutu deneyebilirsin open disk://host.tld/image.dmg.


openhiçbir şey yapmadım, sadece hata mesajı olmadan çıkın.
filant

2
Evet öyle. Daha yeni test ettim. Disk görüntüsü tamamen monte edilinceye kadar hiçbir şey göstermeyecek, bu yüzden / Volumes içinde görünmeden önce bir dakika kadar beklemeniz gerekecek. (Ssh open path/to/file.dmgdisk://host.tld/
yazıp yazıyorsa işe yarar

Yararlı, belki tam olarak OP'nin ihtiyacı olan şey değildi. Teşekkürler.
Danny Whitt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.