비 대화식 방식으로 입력 값을 dpkg-reconfigure에 공급


23

비 대화식 모드 (스크립트에서)를 통해 제공된 모든 값으로 dpkg-reconfigure를 통해 우분투 패키지를 구성하고 싶습니다.

사실 내 경우는 파이어 버드 구성 ( http://www.firebirdsql.org/manual/ubusetup.html )이며 명령을 사용할 때 다음과 같습니다.

sudo dpkg-reconfigure firebird2.5-superclassic -freadline

대답이 'Y'및 'newpwd'인 2 값을 묻습니다.

샘플 출력은 다음과 같습니다.

sudo dpkg-reconfigure firebird2.5-superclassic -freadline
 * Firebird 2.5 superclassic server not running
Configuring firebird2.5-superclassic
------------------------------------

Accept if you want Firebird server to start automatically.

If you only need the Firebird client and there are no databases that will be served by this host, decline.

Enable Firebird server? Y


Password for firebird 2.5
-------------------------

Firebird has a special user named SYSDBA, which is the user that has access to all databases. SYSDBA can also create new databases and users. Because of this, it 
is necessary to secure SYSDBA with a password.

The password is stored in /etc/firebird/2.5/SYSDBA.password (readable only by root). You may modify it there (don't forget to update the security database too, 
using the gsec utility), or you may use dpkg-reconfigure to update both.

To keep your existing password, leave this blank.

Password for SYSDBA: 


 * Starting Firebird 2.5 superclassic server...
   ...done.
 * Firebird 2.5 superclassic server already running

나는 here strings다음과 같이 bash 스크립트를 통해 시도했다 .

sudo dpkg-reconfigure firebird2.5-superclassic -f readline << EOF
Y
newpwd
EOF

그러나 이것은 어떤 이유로 작동하지 않았으며 값을 제공하도록 요청했습니다.

스크립트에 필요한 값을 제공하는 방법에 대한 아이디어가 있습니까?

답변:


11

항상 예상 언어 를 사용하여에 입력이 필요한 프로세스와의 상호 작용을 자동화 할 수 있습니다 tty. 전에는 실제로 사용하지 않았으므로 여기에 코드를 추가 할 수는 없지만 일반적인 사용 사례입니다.

최신 정보:

[Peter Butkovic] 나는 내가 expect올바른 방향으로 지적하는 것을 고려 한다.

#!/usr/bin/expect

spawn dpkg-reconfigure firebird2.5-superclassic -freadline
expect "Enable Firebird server?"
send "Y\r"

expect "Password for SYSDBA:"
send "newpwd\r"

# done
expect eof

올바른 방향을 알려 주셔서 감사합니다. 이 답변은 구현하기 쉬운 솔루션이므로 올바른 답변이라고 생각합니다.
Peter Butkovic

나는 i18n 문제의 가능성에 대해 조심할 것이지만 "가정용"의 경우 이것은 안전 해 보인다.
Jasen

20

데비안 패키지는 debconf 를 사용 하여 설치 시간 설정을 수집합니다. Debconf는 여러 프런트 엔드를 지원하여 사용자에게 값을 묻는 메시지를 표시합니다. -f에 옵션을 dpkg-reconfigure사용 프론트 엔드 deconf의 선택.

readline프론트 엔드는 대화 형 사용하도록 설계되었습니다. 자동 스크립트에서 사용하지 마십시오.

기본값이 양호하면 noninteractive프론트 엔드 를 사용하십시오 .

다른 값을 제공하려면 두 가지 옵션이 있습니다. noninteractive프론트 엔드를 고수 하고 debconf 데이터베이스를 미리 설정할 수 있습니다 . 가장 쉬운 방법은 한 시스템에 패키지를 설치하고 대화식으로 구성한 다음 관련 부분을 추출 /var/cache/debconf/config.dat하여이 파일을 debconf에 제공하는 것입니다.

DEBCONF_DB_OVERRIDE='File {/path/to/config.dat}' dpkg-reconfigure -fnoninteractive firebird2.5-superclassic

또 다른 방법은 사용하는 것입니다 editor프론트 엔드, 환경 변수를 설정 VISUAL(또는 EDITOR,하지만 VISUAL우선이 EDITOR가 세트 인 경우) 인수로 현재 설정을 포함하는 파일을 취하는 프로그램 및 덮어 쓰기 원하는 설정 파일이.


6
/var/cache/debconf/config.dat자신 을 파싱 할 필요가 없습니다 . 패키지 debconf-get-selections에서 사용할 수 있습니다 debconf-utils. 예를 들어 이것을 참조하십시오 .
Joseph R.

또한 미리 설정이 올바른지 잘 모르겠습니다. 우리는 running dpkg-reconfigure에 대해 이야기하고 있는데, OP가 자주 수행하기 때문에 OP가 자동화하기를 원한다고 생각합니다.
Joseph R.

힌트 주셔서 감사합니다. 스크립트를 기대하기로 결정했습니다. 더 깊이 조사하지 않았습니다.
Peter Butkovic

2
@JosephR. 실제로 debconf-get-selections여기에서 유용 할 것입니다. Peter가 다른 값으로이 작업을 자주 수행하려면 config.dat동적으로 생성해야합니다 (간단한 형식 임). 이보다 쉽습니다 expect. expect절망의 길입니다. 예를 들어, 새로운 버전의 패키지가 새로운 질문을하게되면 고장이 나거나 훨씬 더 정교한 스크립트가 필요합니다.
질 'SO-정지 존재 악마'

@JosephR 귀하가 게시 한 사전 시드에 대한 링크가 더 이상 작동하지 않습니다. 다음을 시도해보십시오. zacks.eu/debian-preseed
cjohnson318

13

debconf-set-selectionsdebconf 데이터베이스 ( /var/cache/debconf/config.dat)에 새 값을 삽입 하려면 명령을 사용하십시오 .


엘리의 대답 은 명확하지 않았으므로 단계별로 설명하겠습니다.

가장 먼저 할 일은 대화식으로 패키지를 설치하고 ( firebird패키지 이름으로 변경)하여 선택한 항목을 얻는 것입니다 .

sudo debconf-get-selections | grep ^firebird

또는:

grep -C2 firebird /var/cache/debconf/config.dat

그런 다음 debconf 데이터베이스에 대한 답변을 미리 시드했습니다 debconf-set-selections. 예를 들면 다음과 같습니다.

echo firebird2.5-superclassic shared/firebird/enabled boolean true | sudo debconf-set-selections -v
echo firebird2.5-superclassic shared/firebird/sysdba_password/new_password password foo | sudo debconf-set-selections -v

구문은 다음과 같습니다.

echo foo-owner-package-name foo-template-name value-type value | debconf-set-selections

다음은 ttf-mscorefonts-installer패키지의 다른 예입니다 .

echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | sudo debconf-set-selections

참고 : 입력 선택은 표준 입력 또는 파일에서 선택할 수 있습니다.

자세한 내용은 확인하십시오 man debconf-set-selections.


다른 방법은 킥 스타트 를 사용하는 것 입니다.


debconf-set-selections는 모든 경우에 적용되지 않는 것 같습니다 (예 : exim).
Jasen

1
debconf-set-selections는 변경중인 deb 패키지에 내장 된 구성 스크립트를 실행하지 않습니다. 패키지가 요구하는 선택 사항 만 첫 번째 부분 만 설정합니다. dpkg-reconfigure는 두 부분을 모두 실행합니다.
프레드

4

나는 약 1 시간 동안 이것에 대한 해결책을 하나의 라이너로 압축하려고 시도했으며 마침내 그것을 찾았습니다 : debconf-set-selections

echo "debconf debconf/frontend select noninteractive" | sudo debconf-set-selections

이것은 debconf가 기본값을 사용하도록 강제하고 버그를 일으키지 않습니다. 데비안 패키지의 구성 기본값을 설정할 수도 있습니다 . 자세한 내용은 맨 페이지 를 참조하십시오.


sudo dpkg-reconfigure debconf -f noninteractive또는 같지 export DEBIAN_FRONTEND=noninteractive않습니까?
kenorb

0

위에서 언급 한 debconf-get-selections / set-selections 방법을 사용하여 LDAP 설정 (ldap-auth-config 패키지)의 스크립트 재구성을 시도했지만이 패키지는 초기 설치 후 debconf의 설정을 무시합니다. 설치 전에 debconf를 사용하여 미리 시드 할 수 있지만 설치 후 ldap-auth-config는 관리하는 시스템 구성 파일에 설정된 내용으로 debconf 설정을 덮어 쓰는 것을 선호합니다. 패키지 pam-auth-config의 동작은 동일합니다.

ldap-auth-config가 다른 질문 세트에 대해 여러 번 호출하기 때문에이 경우 EDITOR / VISUAL 메커니즘도 사용하기가 어렵습니다. expect 스크립트를 사용하거나 시스템 구성 파일을 직접 수정하여보다 쉽게 ​​처리 할 수 ​​있습니다. 따라서 기대에 빠지지 않는 것이 항상 쉬운 것은 아닙니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.