비대화 형 방식으로 입력 값을 dpkg-reconfigure에 공급
On 2월 18, 2021 by admin비를 통해 제공되는 모든 값으로 dpkg-reconfigure를 통해 우분투 패키지를 구성하고 싶습니다. 대화 형 모드 (스크립트 내).
사실 제 경우는 파이어 버드 구성입니다 ( http://www.firebirdsql.org/manual/ubusetup.html ), 다음 명령을 사용할 때 :
sudo dpkg-reconfigure firebird2.5-superclassic -freadline
2 개의 값을 요청합니다. 여기서 대답은 “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
다음과 같은 bash 스크립트를 통해 here strings
를 시도했습니다.
sudo dpkg-reconfigure firebird2.5-superclassic -f readline << EOF Y newpwd EOF
그러나 이것은 어떤 이유로 작동하지 않았으며 값을 제공하도록 요청했습니다.
피딩 방법에 대한 모든 아이디어 스크립트에 필요한 값은 무엇입니까?
답변
항상 를 사용할 수 있습니다. 언어 가 . 전에 실제로 사용하지 않았기 때문에 여기에 코드를 추가 할 수는 없지만 일반적인 사용 사례입니다.
업데이트 :
[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
댓글
- 올바른 방향을 알려 주셔서 감사합니다. 이 답변은 구현하기 쉬운 솔루션이므로 올바른 답변이라고 생각합니다.
- i18n 문제의 가능성을 경계하지만 ” 가정용 ” 안전한 것 같습니다.
답변
Debian 패키지 사용 debconf 를 사용하여 설치 시간 설정을 수집합니다. Debconf는 사용자에게 값을 묻는 여러 프런트 엔드를 지원합니다. dpkg-reconfigure
의 -f
옵션은 사용할 debconf 프런트 엔드를 선택합니다.
readline
프런트 엔드는 대화 형 사용을 위해 설계되었습니다. 자동 스크립트에서 사용하지 마세요.
기본값이 괜찮다면 noninteractive
프런트 엔드를 사용하세요.
If 다른 값을 제공하려는 경우 두 가지 옵션이 있습니다. 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
보다 우선합니다. )을 현재 설정이 포함 된 파일을 인수로 사용하고 원하는 설정으로 해당 파일을 덮어 쓰는 프로그램에 추가합니다.
코멘트
- 아니요
/var/cache/debconf/config.dat
직접 구문 분석해야합니다.debconf-utils
패키지에서debconf-get-selections
를 사용할 수 있습니다. 예를 들어 이 를 참조하세요. - 또한 미리 설정이 ‘인지 확실하지 않습니다. 여기에 딱 맞습니다. ‘
dpkg-reconfigure
를 실행하는 것에 대해 이야기하고 있습니다. ‘ OP가 원하는 것 같습니다. 자동화는 ‘ 자주 할 것이기 때문입니다. - 힌트를 주셔서 감사합니다. 스크립트를 기대하기로 결정했습니다. ‘ 여기에서 더 자세히 조사하지 않았습니다.
- @JosephR. 실제로
debconf-get-selections
가 여기에서 유용 할 것입니다. Peter가 다른 값으로이 작업을 자주 수행하려면 동적으로config.dat
를 생성해야합니다 (‘는 간단한 형식). 이것은expect
보다 쉽습니다.expect
는 절망의 길입니다. 예를 들어 ‘ 패키지의 새 버전에서 새로운 질문이 발생하면 (또는 훨씬 더 정교한 스크립트가 필요한 경우) 분해됩니다. - @ 게시 한 사전 시드에 대한 JosephR 링크가 더 이상 작동하지 않습니다. zacks.eu/debian-preseed
Answer
debconf-set-selections
명령을 사용하여 debconf 데이터베이스에 새 값을 삽입합니다 (/var/cache/debconf/config.dat
).
Eli 답변 이 명확하지 않았으므로 단계별로 설명하겠습니다. 단계.
가장 먼저 할 일은 대화식으로 패키지를 설치하고 선택한 선택 항목을 다음과 같이 가져 오는 것입니다 (firebird
를 패키지 이름으로 변경).
sudo debconf-get-selections | grep ^firebird
또는 :
grep -C2 firebird /var/cache/debconf/config.dat
그런 다음 , 예 :
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는 사용하지 않습니다. div id = “676a9a601d”>
모든 경우에 적용되지 않는 것 같습니다 (예 : exim).
답변
저는이 문제에 대한 솔루션을 한 줄로 압축하려고 한 시간 정도 꼼꼼히 살펴 봤는데 마침내 찾았습니다. debconf-set -selections
echo "debconf debconf/frontend select noninteractive" | sudo debconf-set-selections
이렇게하면 debconf에서 버그가 아닌 기본값을 사용하게됩니다. Debian 패키지에 대한 구성 기본값을 설정할 수도 있습니다. 자세한 내용은 맨 페이지를 참조 하세요.
댓글
- Isn ‘
sudo dpkg-reconfigure debconf -f noninteractive
또는export DEBIAN_FRONTEND=noninteractive
와 동일하지 않습니까?
답변
저는 debconf-get-selections / set-를 사용하여 LDAP 설정 (ldap-auth-config 패키지)의 스크립팅 된 재구성을 시도했습니다. 위에서 언급 한 선택 방법은이 패키지가 debco의 설정을 무시한다는 사실 만 알 수 있습니다. 초기 설치 후 nf. debconf를 사용하여 설치 전에 미리 시드 할 수 있지만 설치 후 ldap-auth-config는 관리하는 시스템 구성 파일에 설정된 내용으로 debconf 설정을 덮어 쓰는 것을 선호합니다. pam-auth-config 패키지는 동일한 동작을합니다.
ldap-auth-config가 여러 질문 세트에 대해 여러 번 호출하기 때문에 EDITOR / VISUAL 메커니즘도이 경우 사용하기 어렵습니다. expect 스크립트를 사용하거나 시스템 구성 파일을 직접 수정하여보다 쉽게 처리 할 수 있습니다. 따라서 예상대로 돌아가는 것을 피하는 것이 항상 쉬운 것은 아닙니다.
답변
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)
답글 남기기