비 대화식 방식으로 입력 값을 dpkg-reconfigure에 공급 this host, decline. Enable

비 대화식 모드 (스크립트에서)를 통해 제공된 모든 값으로 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

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

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



답변

항상 예상 언어 를 사용하여에 입력이 필요한 프로세스와의 상호 작용을 자동화 할 수 있습니다 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


답변

데비안 패키지는 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가 세트 인 경우) 인수로 현재 설정을 포함하는 파일을 취하는 프로그램 및 덮어 쓰기 원하는 설정 파일이.


답변

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.


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


답변

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

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

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


답변

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

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


답변