Bỏ qua thỏa thuận cấp phép khi gắn DMG trên dòng lệnh


16

Tôi đang tự động cài đặt máy Mac của mình bằng cách sử dụng con rối. Là một phần của nó, tôi cần cài đặt một số chương trình có định dạng .dmg.

Tôi sử dụng như sau để gắn kết chúng:

sudo /usr/bin/hdiutil mount -plist -nobrowse -readonly -quiet -mountrandom /tmp Program.dmg

Vấn đề là một số tệp .dmg đi kèm với giấy phép được đính kèm và do đó tập lệnh bị kẹt khi chấp nhận giấy phép. (Không có stdin / out khi chạy với con rối, vì vậy tôi không thể chấp nhận thủ công để tiếp tục.)

Có cách nào để phê duyệt trước hoặc buộc phê duyệt giấy phép không?


Có thể có thể đi trên SF; bạn đang xử lý các vấn đề phát sinh từ việc làm việc với nhiều máy. Tuy nhiên, nó cũng có thể đi đến đây.
Kevin M

2
Làm "có | hdiutil đính kèm đĩa.dmg> / dev / null" - sẽ nhập 'Y' cho bạn.
mauvedeity

Câu trả lời:


2

Nếu bạn có GUI và có thể thực hiện song song hai lệnh gọi dòng lệnh, bạn có thể sử dụng

/System/Library/CoreServices/DiskImageMounter.app/Contents/MacOS/DiskImageMounter /path/to/file.dmg

osascript accept.scpt

cái sau thực thi AppleScript sau:

tell application "System Events"
    delay 5 # wait 5 seconds -- I tested it using two terminal tabs and needed the time
    key code 48 # press tab 4 times in the license window
    key code 48
    key code 48
    key code 48
    keystroke " " # press space to click "accept"
end tell

Trong bash, tôi có thể ghi

/System/Library/CoreServices/DiskImageMounter.app/Contents/MacOS/DiskImageMounter file.dmg & osascript accept.scpt

Tôi quên đề cập rằng tôi không sử dụng con rối. Câu trả lời này do đó có thể vô dụng khủng khiếp, nhưng vì đã được vài ngày, tôi vẫn đăng.
Daniel Beck

hmm tôi nhận được một thông báo lỗi khi cố gắng chạy osascript accept.scpt ➜ dotfiles git: (master) ✗ osascript accept.scpt osascript: accept.scpt: Không có tập tin hoặc thư mục
cấp

@grant Bạn phải tạo tệp có nội dung được chỉ định trước.
Daniel Beck

18

Điều này làm việc cho tôi khi tôi gặp một .dmg có chứa EULA mà tôi muốn cài đặt nó thông qua dòng lệnh không có tương tác người dùng ...

/usr/bin/hdiutil convert -quiet foo.dmg -format UDTO -o bar
/usr/bin/hdiutil attach -quiet -nobrowse -noverify -noautoopen -mountpoint right_here bar.cdr

(lưu ý: Tôi khá chắc chắn rằng không phải tất cả các tùy chọn ở trên là cần thiết để bypass EULA, chẳng hạn như -nobrowse, -noverify, -noautoopen, -mountpointTuy nhiên, tôi sử dụng chúng và tôi đã không kiểm tra mà không có họ vì vậy tôi không muốn khẳng định một cái gì đó mà tôi. chưa thử nghiệm.)

Những gì tôi đã kết thúc là một thư mục với

bar.cdr
foo.dmg
right_here/

nơi right_here/chứa nội dung của foo.dmgmà không được nhắc nhở cho EULA.

Hãy chắc chắn để tách ra khi bạn đã hoàn tất!

/usr/bin/hdiutil detach right_here/

Để biết thêm thông tin: hdiutil (1) Mac OS X Hướng dẫn sử dụng trang .

YMMV


1
Cảm ơn - điều này đã hoạt động tốt với một thỏa thuận nhiều trang, trong đó một 'y' lặp đi lặp lại không hoạt động.
Lars Rohrbach

1
Làm việc cho tôi quá. Mặc dù tôi chỉ cần dòng đầu tiên để chuyển đổi nó thành tệp cdr, sau đó tôi chỉ có thể đính kèm nó mà không cần tất cả các đối số và nó hoạt động.
Maxime Viargues

7

Nếu nó chỉ cần gõ "Y", sau đó chuyển lệnh yes vào lệnh hdiutil:

yes | /bin/hdiutil [...]

Điều đó sẽ mô phỏng nhấn 'y' và quay lại dòng lệnh.

Để nhập một cái gì đó khác, chỉ cần đặt nó trên dòng lệnh làm tham số:

yes accept | ...

Điều đó sẽ nhập 'chấp nhận' vào tập lệnh.

Lưu ý rằng nếu tập lệnh yêu cầu nhập nhiều lần, lệnh yes sẽ đưa nhiều mục vào. Bạn có thể thấy đầu ra như 'đường ống bị hỏng' - điều này chỉ có nghĩa là lệnh bạn đã bỏ vào trong khi 'có' vẫn đang gửi đầu vào.


Tôi chưa bao giờ thử điều này, vì vậy tôi không biết về chuyển hướng mạnh mẽ. Cảm ơn vì +50!
mauvedeity

6

Gần đây tôi đã bắt gặp một DMG có EULA và nó thực sự làm tôi khó chịu vì tôi không thể viết kịch bản xung quanh nó. Tôi đã tìm ra nếu tôi chuyển đổi DMG thành CDR, nó đã bỏ qua EULA khi gắn CDR.

Đây là những gì tôi đã làm:

hdiutil convert foo.dmg -format UDTO -o bar.cdr
hdiutil attach bar.cdr
rm foo.dmg <--optional

Hi vọng điêu nay co ich.


Điều này đã giúp tôi rất nhiều! Các yes | hdiutil...giải pháp sẽ treo cho tôi khi được gọi từ một kịch bản python vì một lý do điên rồ nào đó.
Nathan

1

Nếu bạn có một EULA đa trang mà bạn cần chấp nhận, bạn có thể đến phần chấp nhận bằng cách đặt qtrước phần còn lại của lệnh chấp nhận (vì tất cả những gì bạn cần là một lệnh thoát được chấp nhận less, bạn cũng có thể sử dụng ZZhoặc Q).

Ví dụ: nếu EULA yêu cầu bạn nhập a yđể chấp nhận bạn chạy:

yes qy | hdiutil attach ...

0

Bạn có nên sử dụng các công cụ của con rối để cài đặt các gói không? Bản thân tôi là một quản trị viên radmind và tôi không quen thuộc với con rối, nhưng kiểm tra trên wiki của họ cho thấy có một công cụ gọi là pkgdmg có thể làm tương đương với những gì bạn đang cố gắng thực hiện.

http://projects.puppetlabs.com/projects/puppet/wiki/Puppet_Mac_Osx#packagepkgdmg


1
nó không xử lý các ứng dụng yêu cầu chấp nhận giấy phép.
Vitaly Kushner

Thật; Tôi có ấn tượng rằng bạn sẽ tạo ra các gói của riêng bạn mà không cần phải chấp nhận giấy phép. Đó là suy nghĩ của một quản trị viên Radmind, tôi cho rằng.
NRzingh
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.