명령 행에 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.