Có một lệnh để cài đặt một dmg


51

Tôi muốn cài đặt một tập tin dmg trên một máy chủ từ xa. Tất cả tôi có là một truy cập ssh. Vì DMG là hình ảnh đĩa, tôi đã cố gắn nó, nhưng dường như mount không nhận ra định dạng của nó.

filenói tập tin dmg của tôi là a VAX COFF executable.

Câu trả lời:


69

Đầu tiên, gắn hình ảnh dmg: sudo hdiutil attach <image>.dmg

Hình ảnh sẽ được gắn vào /Volumes/<image>. Của tôi chứa một gói mà tôi đã cài đặt với:sudo installer -package /Volumes/<image>/<image>.pkg -target /

Cuối cùng ngắt kết nối hình ảnh : sudo hdiutil detach /Volumes/<image>.


19

Bạn sẽ có thể gắn kết .dmgbằng cách sử dụng:

hdiutil attach /path/to/file.dmg

Và sau đó sao chép nội dung của nó (xuất hiện trong /Volumes) bất cứ nơi nào bạn thích.


5

Tôi đã phải gắn kết và sao chép .appvào /Applicationsthư mục. Đối với Etcher.app:

Đầu tiên như @trojanfoe nói:

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

Sau đó

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

Sau đó, bạn có ứng dụng của bạn trong /Applicationsthư mục

Đừng quên ngắt kết nối âm lượng:

sudo hdiutil unmount /Volumes/Etcher\ 1.2.1/

Làm cho nó hoạt động sau khi đọc hướng dẫn từ một bài viết trên blog .


5

Nếu bạn muốn kịch bản cài đặt, nó yêu cầu một vài bước nữa vì tên của .dmgtệp, tên của Tập được tạo, tên của ứng dụng và tên của thiết bị cần tách ra đều có thể khác nhau. Thêm vào đó họ có thể có không gian trong đó.

Ngoài ra một .dmgcó thể có một .apptập tin hoặc một .pkgtập tin trong đó và những yêu cầu hành vi khác nhau.

Đây là một hàm bash để cài đặt một dmg từ một URL từ xa:

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

Lưu ý nếu bạn .dmgcó một .apptệp chạy để cài đặt chương trình, thì bạn sẽ cần phải làm lại một cái gì đó khác đi.


Điều này sẽ chỉ hoạt động đối với các ứng dụng có sẵn để chạy dmg, không dành cho các gói hoặc ứng dụng cài đặt.
nohillside

@patrix bạn có thể cho tôi một số ví dụ về các gói và ứng dụng cài đặt mà tôi có thể kiểm tra để tinh chỉnh câu trả lời không?
voutasaurus

Các gói rất dễ dàng (kết thúc bằng .pkg), nhưng một ứng dụng cài đặt trông giống như một gói thực
nohillside

Điều này không tách rời các tập tin. hdiutil: detach failed - No such file or directory
Nicholas DiP Square

1
@NicholasDiP Square Tôi ước Apple sẽ làm điều này dễ dàng hơn bằng cách cung cấp và thi hành một tiêu chuẩn dễ sử dụng và cung cấp cho các công cụ phát triển để tự động chuyển đổi trình cài đặt hiện có của họ sang sử dụng tiêu chuẩn mới.
voutasaurus

1

Bạn có thể thử lệnh open disk://host.tld/image.dmg.


openkhông làm gì cả, chỉ thoát, không có thông báo lỗi.
philant

2
Có nó làm. Tôi chỉ thử nó. Nó sẽ không hiển thị bất cứ thứ gì cho đến khi hình ảnh đĩa được gắn hoàn toàn, vì vậy bạn sẽ phải chờ một phút hoặc lâu hơn trước khi nó xuất hiện trong / Tập. (Nó hoạt động nếu bạn ssh in và gõ open path/to/file.dmg. Tôi không nghĩ rằng disk://host.tld/hoạt động mặc dù.)
daviewales

Hữu ích, mặc dù có thể không chính xác những gì OP cần. Cảm ơn.
Daniel Whitt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.