Abaikan perjanjian lisensi saat memasang DMG di baris perintah

16

Saya mengotomatisasi instalasi Mac saya menggunakan boneka. Sebagai bagian dari itu saya perlu menginstal beberapa program yang datang dalam format .dmg.

Saya menggunakan yang berikut ini untuk memasangnya:

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

Masalahnya adalah bahwa beberapa file .dmg datang dengan lisensi terlampir, dan skrip macet menerima lisensi. (Tidak ada stdin / out saat berlari dengan boneka, jadi saya tidak bisa menyetujui secara manual untuk melanjutkan.)

Apakah ada cara untuk menyetujui atau memaksa lisensi?

Vitaly Kushner
sumber
Mungkin bisa melanjutkan SF; Anda berurusan dengan masalah yang muncul karena bekerja dengan banyak mesin. Namun, bisa juga pergi ke sini.
Kevin M
2
Lakukan "ya | hdiutil lampirkan disk.dmg> / dev / null" - itu akan mengetikkan 'Y' untuk Anda.
mauvedeity

Jawaban:

2

Jika Anda memiliki GUI dan dapat melakukan dua panggilan baris perintah secara paralel, Anda dapat menggunakan

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

dan

osascript accept.scpt

yang terakhir menjalankan AppleScript berikut:

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

Di bash, saya bisa menulis

/System/Library/CoreServices/DiskImageMounter.app/Contents/MacOS/DiskImageMounter file.dmg & osascript accept.scpt
Daniel Beck
sumber
Saya lupa menyebutkan bahwa saya tidak menggunakan boneka. Karena itu jawaban ini mungkin sangat tidak berguna, tetapi karena sudah beberapa hari, saya tetap memposting.
Daniel Beck
hmm Saya mendapatkan kesalahan ketika mencoba menjalankan osascript accept.scpt ➜ dotfiles git: (master) ✗ osascript accept.scpt osascript: accept.scpt: Tidak ada file atau direktori seperti itu
berikan
@grant Anda harus membuat file dengan konten yang ditentukan terlebih dahulu.
Daniel Beck
18

Ini berfungsi untuk saya ketika saya menemukan .dmg yang berisi EULA yang ingin saya instal melalui baris perintah tanpa interaksi pengguna ...

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

(catatan: Saya cukup yakin tidak semua pilihan di atas diperlukan untuk bypass EULA, seperti -nobrowse, -noverify, -noautoopen, -mountpointNamun, saya menggunakan mereka dan saya tidak tes tanpa mereka jadi saya tidak ingin mengklaim sesuatu yang saya. belum diuji.)

Yang akhirnya saya dapatkan adalah direktori

bar.cdr
foo.dmg
right_here/

di mana right_here/terkandung konten foo.dmgtanpa diminta untuk EULA.

Pastikan untuk melepaskan ketika Anda selesai!

/usr/bin/hdiutil detach right_here/

Untuk informasi lebih lanjut: hdiutil (1) Mac OS X Pedoman Halaman .

YMMV

Sorens
sumber
1
Terima kasih - ini bekerja dengan baik dengan perjanjian multi-halaman, di mana 'y' berulang tidak bekerja.
Lars Rohrbach
1
Bekerja untuk saya juga. Meskipun saya hanya perlu baris pertama untuk mengonversinya menjadi file cdr, maka saya bisa melampirkannya tanpa semua argumen itu dan itu berfungsi.
Maxime Viargues
7

Jika hanya perlu "Y" yang diketikkan, maka pipa perintah yes ke perintah hdiutil:

yes | /bin/hdiutil [...]

Itu akan meniru menekan 'y' dan kembali pada baris perintah.

Untuk mengetik sesuatu yang lain, cukup letakkan di baris perintah sebagai parameter:

yes accept | ...

Itu akan memasukkan 'terima' ke dalam skrip.

Perhatikan bahwa jika skrip meminta input berulang kali, perintah yes akan memasukkan banyak entri. Anda mungkin melihat output seperti 'broken pipe' - ini hanya berarti bahwa perintah yang Anda pilih berhenti sementara 'ya' masih mengirim input.

ungu muda
sumber
Saya belum pernah mencoba ini, jadi saya tidak tahu tentang pengalihan gemuk. Terima kasih untuk +50!
mauvedeity
6

Saya baru-baru ini menemukan DMG yang memiliki EULA dan itu benar-benar menjengkelkan saya karena saya tidak bisa skrip di sekitarnya. Saya tahu jika saya mengubah DMG ke CDR, itu melewati EULA pada pemasangan CDR.

Inilah yang saya lakukan:

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

Semoga ini membantu.

ciphershort
sumber
Ini membantu saya satu ton! The yes | hdiutil...solusi akan menggantung bagi saya ketika dipanggil dari skrip python untuk beberapa alasan gila.
Nathan
1

Jika Anda memiliki EULA multi-halaman yang perlu Anda terima, Anda bisa sampai ke bagian accept dengan meletakkan qsebelum perintah accept Anda yang tersisa (karena yang Anda butuhkan hanyalah perintah keluar yang diterima less, Anda juga bisa menggunakan ZZatau Q).

Misalnya, jika EULA mengharuskan Anda mengetik a yuntuk menerima, Anda akan menjalankan:

yes qy | hdiutil attach ...
cwhits
sumber
0

Bukankah Anda seharusnya menggunakan alat boneka sendiri untuk menginstal paket? Saya admin radmind sendiri dan saya tidak terbiasa dengan boneka, tetapi pemeriksaan pada wiki mereka mengungkapkan bahwa ada alat yang disebut pkgdmg yang mungkin melakukan hal yang sama dengan apa yang Anda coba capai.

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

NReilingh
sumber
1
itu tidak menangani aplikasi yang memerlukan lisensi penerimaan.
Vitaly Kushner
Memang; Saya mendapat kesan bahwa Anda akan membuat paket Anda sendiri tanpa perlu persetujuan lisensi. Begitulah pola pikir admin Radmind, saya kira.
NReilingh