비대화식으로 dpkg-reconfigure에 입력 값 제공

비대화식으로 dpkg-reconfigure에 입력 값 제공

dpkg-reconfigure를 통해 우분투 패키지를 구성하고 비대화형 모드(스크립트에서)를 통해 제공되는 모든 값을 사용하고 싶습니다.

실제로 제 경우에는 Firebird 구성이었습니다(http://www.firebirdsql.org/manual/ubusetup.html), 다음 명령을 사용할 때:

sudo dpkg-reconfigure firebird2.5-superclassic -freadline

두 가지 값을 묻는 질문에 답은 'Y'와 'newpwd'입니다.

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

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

그러나 어떤 이유로 이는 작동하지 않으며 값을 요구합니다.

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

답변1

데비안 패키지 사용법데브 컨퍼런스설치 시간 설정을 수집합니다. Debconf는 사용자에게 값을 묻는 여러 프런트엔드를 지원합니다. 사용할 debconf 프런트 엔드를 선택하는 -f옵션 입니다 .dpkg-reconfigure

프런트엔드는 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

답변2

( ) 명령을 사용하여 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-get-selections찾을 수 없는 경우 다음을 사용하세요.

apt-get install debconf-utils

설치하다.


대안은 다음을 사용하는 것입니다.시작하다.

답변3

언제든지 사용하실 수 있습니다언어를 기대하다입력이 필요한 프로세스와 자동으로 상호 작용합니다 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

답변4

내 버전예상되는솔루션을 사용하여 ArangoDB .deb 설치예상되는

import pexpect
import os

os.environ['DEBIAN_FRONTEND']= 'readline'

child = pexpect.spawnu('dpkg -i arangodb3_3.6.2-1_amd64.deb')

child.expect('user:')
child.sendline('defg')
child.expect('user:')
child.sendline('defg')
child.expect("Automatically upgrade database files")
child.sendline("yes")
child.expect("Database storage engine")
child.sendline("1")
child.expect("Backup database files before upgrading")
child.sendline("no")
child.expect(pexpect.EOF)

관련 정보