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.

filant
źródło

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

filant
źródło
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.

trojanfoe
źródło
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 .

Jan ATAC
źródło
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.

voutasaurus
źródło
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.

Sanjuro
źródło
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