Czy istnieje polecenie instalacji dmg


51

Chcę zainstalować plik dmg na zdalnym serwerze. Wszystko, co mam, to dostęp ssh. Ponieważ DMG jest obrazem dysku, próbowałem go zamontować, ale wydaje się, że mount nie rozpoznaje jego formatu.

filemówi, że mój plik dmg to VAX COFF executable.

Odpowiedzi:


71

Najpierw zamontuj obraz dmg: sudo hdiutil attach <image>.dmg

Obraz zostanie zamontowany na /Volumes/<image>. Mój zawierał pakiet, który zainstalowałem z:sudo installer -package /Volumes/<image>/<image>.pkg -target /

Wreszcie odmontować obraz: sudo hdiutil detach /Volumes/<image>.


Zrobiłem to z Docker.dmgi nie miałem, <image>.pkgżeby nie działać
Dimitri Kopriwa

19

Powinieneś być w stanie zamontować za .dmgpomocą:

hdiutil attach /path/to/file.dmg

A następnie skopiuj jego zawartość (która się pojawi /Volumes) gdziekolwiek chcesz.


5

Musiałem zamontować i skopiować .appdo /Applicationsfolderu. W przypadku Etcher.app:

Po pierwsze, jak powiedział @trojanfoe:

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

Następnie

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

Następnie masz swoją aplikację w /Applicationsfolderze

Nie zapomnij odmontować woluminu:

sudo hdiutil unmount /Volumes/Etcher\ 1.2.1/

Sprawdziło się po przeczytaniu instrukcji z posta na blogu .


5

Jeśli chcesz wykonać skrypt instalacji, wymaga to kilku dodatkowych kroków, ponieważ nazwa .dmgpliku, nazwa utworzonego woluminu, nazwa aplikacji i nazwa urządzenia, które należy odłączyć, mogą być różne. Dodatkowo mogą mieć w nich spacje.

Również plik .dmgmoże zawierać .appplik lub .pkgplik, które wymagają innego zachowania.

Oto funkcja bash, aby zainstalować dmg ze zdalnego adresu 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
}

Uwaga Jeśli .dmgma .apppliku, który biegnie, aby zainstalować program, a następnie trzeba będzie ponownie zrobić coś innego.


Działa to tylko dla dmg zawierających gotowe aplikacje, a nie dla pakietów lub aplikacji instalatora.
nohillside

@patrix czy możesz podać mi przykłady pakietów i aplikacji instalacyjnych, na których mogę przetestować, aby uściślić odpowiedź?
voutasaurus

Pakiety są łatwe (koniec .pkg), ale aplikacja instalacyjna wygląda tak samo jak prawdziwa
nohillside

to nie odłącza pliku. hdiutil: detach failed - No such file or directory
Nicholas DiPiazza

1
@NicholasDiPiazza Chciałbym, aby Apple ułatwiło to, zapewniając i egzekwując jeden łatwy w użyciu standard oraz dając programistom narzędzia do automatycznej konwersji istniejących instalatorów na korzystanie z nowego standardu.
voutasaurus

1

Możesz spróbować wykonać polecenie open disk://host.tld/image.dmg.


opennic nie zrobiłem, po prostu wyjdź, bez komunikatu o błędzie.
philant

2
Tak. Właśnie to przetestowałem. Nie wyświetli niczego, dopóki obraz dysku nie zostanie całkowicie zamontowany, więc musisz poczekać minutę, zanim pojawi się w / Volumes. (Działa, jeśli wpiszesz i wpiszesz open path/to/file.dmg. Nie sądzę, że disk://host.tld/działa.)
daviewales

Pomocne, choć może nie do końca potrzebne. Dzięki.
Danny Whitt
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.