명령 행에 DMG를 마운트 할 때 라이센스 계약 우회


16

꼭두각시를 사용하여 Mac 설치를 자동화하고 있습니다. 그 일부로 .dmg 형식으로 제공되는 여러 프로그램을 설치해야합니다.

다음을 사용하여 마운트합니다.

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

문제는 일부 .dmg 파일에 라이센스가 첨부되어 있으므로 스크립트가 라이센스를 수락하는 중입니다. (꼭두각시로 실행할 때 stdin / out이 없으므로 계속 수동으로 승인 할 수 없습니다.)

라이센스를 사전 승인하거나 강제 승인하는 방법이 있습니까?


SF로 갈 수있을 것입니다. 많은 기계로 작업하면서 발생하는 문제를 다루고 있습니다. 그러나 여기에도 갈 수 있습니다.
— Kevin M

2
"yes | hdiutil attach disk.dmg> / dev / null"- 'Y'를 입력하십시오.
— mauvedeity

답변:


2

GUI가 있고 두 개의 명령 행 호출을 병렬로 수행 할 수있는 경우

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

과

osascript accept.scpt

후자는 다음 AppleScript를 실행합니다.

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

에서 bash, 나는 쓸 수 있어요

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

꼭두각시를 사용하지 않는다는 것을 잊었습니다. 따라서이 답변은별로 쓸모가 없지만 며칠이 지났으므로 어쨌든 게시했습니다.
— Daniel Beck

실행하려고 할 때 흠 오류가 발생합니다 osascript accept.scpt ➜ dotfiles 자식 (마스터) ✗ osascript accept.scpt osascript : accept.scpt : 그런 파일이 없습니다 또는 디렉토리
— 부여

@grant 먼저 지정된 내용으로 파일을 작성해야합니다.
— Daniel Beck

18

EULA가 포함 된 .dmg가 발생했을 때 사용자 상호 작용없이 명령 줄을 통해 설치하려고했습니다.

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

(참고 : 나는 위의 모든 옵션에 필요한 합리적 확실하지 오전 EULA 우회, 등 -nobrowse, -noverify, -noautoopen, -mountpoint그러나, 나는 그들을 사용하고 난 제 뭔가하고 싶지 않았다, 그래서 그들없이 테스트를 그렇지 않은 나는.이 테스트하지 않았습니다.)

내가 끝내었던 것은

bar.cdr
foo.dmg
right_here/

EULA를 요구하지 않고 right_here/의 내용이 포함 된 곳 foo.dmg.

완료되면 분리하십시오!

/usr/bin/hdiutil detach right_here/

자세한 정보 : hdiutil (1) Mac OS X 매뉴얼 페이지 .

YMMV


1
감사합니다-이것은 반복 된 'y'가 작동하지 않는 여러 페이지 계약으로 잘 작동했습니다.
— Lars Rohrbach

1
나도 일했다. cdr 파일로 변환하기 위해 첫 번째 줄이 필요했지만 모든 인수없이 첨부 할 수 있으며 작동합니다.
— Maxime Viargues

7

"Y"만 입력하면 yes 명령을 hdiutil 명령으로 파이프하십시오.

yes | /bin/hdiutil [...]

'y'를 누르는 것을 모방하고 명령 줄로 돌아갑니다.

다른 것을 입력하려면 명령 행에 매개 변수로 입력하십시오.

yes accept | ...

스크립트에 'accept'를 입력합니다.

스크립트가 입력을 여러 번 요청하면 yes 명령이 여러 항목을 입력합니다. '파이프 파이프'와 같은 출력이 표시 될 수 있습니다. 이는 'yes'가 여전히 입력을 전송하는 동안 파이프로 종료 한 명령을 의미합니다.


나는 이것을 시도하지 않았으므로 뚱뚱한 리디렉션에 대해 몰랐다. +50 주셔서 감사합니다!
— 22 분 26 초

6

나는 최근 EULA가있는 DMG를 발견했으며 스크립트를 작성할 수 없었기 때문에 실제로 나를 화나게했습니다. DMG를 CDR로 변환하면 CDR을 마운트 할 때 EULA를 우회했습니다.

내가 한 일은 다음과 같습니다.

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

도움이 되었기를 바랍니다.


이것은 나에게 도움이되었습니다! yes | hdiutil...어떤 미친 이유로 파이썬 스크립트에서 호출 할 때 솔루션은 나를 위해 놀았어요.
— Nathan

1

수락해야하는 여러 페이지로 된 EULA가있는 q경우 나머지 accept 명령 앞에 a를 추가하여 accept 부분에 도달 할 수 있습니다 (필요한 것은 종료 명령이에 있기 때문에 또는 less을 사용할 ZZ수도 있음 Q).

예를 들어 EULA에 a y를 입력해야하는 경우 다음을 실행합니다.

yes qy | hdiutil attach ...

0

꼭두각시 자체 도구를 사용하여 패키지를 설치해서는 안됩니까? 나는 radmind 관리자이고 꼭두각시에 익숙하지는 않지만 Wiki를 확인하면 달성하려는 것과 동등한 pkgdmg 도구가 있음을 알 수 있습니다.

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


1
라이센스 수락이 필요한 앱은 처리하지 않습니다.
— Vitaly Kushner

과연; 라이센스 승인이 없어도 직접 패키지를 만들 겠다는 인상을 받았습니다. Radmind 관리자의 사고 방식이라고 생각합니다.
— NReilingh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.