गैर-संवादात्मक तरीके से dpkg-reconf कॉन्फ़िगर करने के लिए इनपुट मूल्यों को खिलाना


23

मैं गैर-संवादात्मक मोड (स्क्रिप्ट में) के माध्यम से आपूर्ति किए गए सभी मूल्यों के साथ dpkg-reconfigure के माध्यम से ubuntu पैकेज को कॉन्फ़िगर करना चाहूंगा।

वास्तव में मेरा मामला फायरबर्ड कन्फिगेशन ( 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

मैंने here stringsइस तरह से bash स्क्रिप्ट के माध्यम से कोशिश की है :

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

हालाँकि यह किसी कारण से काम नहीं आया और इसने आपूर्ति किए जाने वाले मूल्यों के लिए कहा।

कोई विचार कैसे आवश्यक मूल्यों को स्क्रिप्ट में खिलाया जाए?

जवाबों:


11

आप हमेशा एक प्रक्रिया पर बातचीत को स्वचालित करने के लिए अपेक्षित भाषा का उपयोग कर सकते हैं जो कि इसके इनपुट की अपेक्षा करता है tty। मैंने वास्तव में इसका उपयोग नहीं किया है इसलिए मैं वास्तव में यहां कोड नहीं जोड़ सकता, लेकिन आपका एक विशिष्ट उपयोग मामला है।

अद्यतन करें:

[पीटर बटकोविक] मुझे 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 मुद्दों की संभावना से सावधान रहूंगा, लेकिन "घरेलू उपयोग" के लिए यह सुरक्षित लगता है।
जैसन

20

डेबियन पैकेज इंस्टॉलेशन-टाइम सेटिंग्स को इकट्ठा करने के लिए डीबैंक का उपयोग करते हैं। Debconf मानों के लिए उपयोगकर्ता को संकेत देने के लिए कई फ्रंट का समर्थन करता है। -fकरने के लिए विकल्प dpkg-reconfigureचयन जो उपयोग करने के लिए दृश्यपटल debconf।

readlineदृश्यपटल इंटरैक्टिव उपयोग के लिए बनाया गया है। स्वचालित स्क्रिप्ट में इसका उपयोग न करें।

यदि डिफ़ॉल्ट मान ठीक हैं, तो बस noninteractiveदृश्यपटल का उपयोग करें ।

यदि आप विभिन्न मूल्यों की आपूर्ति करना चाहते हैं, तो आपके पास दो विकल्प हैं। आप noninteractiveफ्रंटएंड के साथ छड़ी कर सकते हैं , और डिबेंक डेटाबेस को छांट सकते हैं । ऐसा करने का सबसे आसान तरीका पैकेज को एक मशीन पर स्थापित करना है और इसे अंतःक्रियात्मक रूप से कॉन्फ़िगर करना है, फिर संबंधित भागों को इसमें से निकालें /var/cache/debconf/config.datऔर इस फाइल को डीबेंक्फ़ में आपूर्ति करें:

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। उदाहरण के लिए इसे देखें ।
जोसेफ आर।

इसके अलावा, मुझे यकीन नहीं है कि अगर preseeding यहां सही है। हम चलाने के बारे में बात कर रहे हैं dpkg-reconfigure, जो मुझे लगता है कि ओपी को स्वचालित करना चाहता है क्योंकि वह इसे अक्सर कर रहा होगा।
जोसेफ आर।

संकेत के लिए धन्यवाद। उम्मीद की स्क्रिप्ट के लिए जाने का फैसला किया। यहां गहराई से जांच नहीं की।
पीटर बुटकोविक

2
@JosephR। वास्तव में, debconf-get-selectionsयहाँ उपयोगी होने की संभावना है। यदि पीटर अक्सर विभिन्न मूल्यों के साथ ऐसा करना चाहता है, तो उसे config.datगतिशील रूप से उत्पन्न होना चाहिए (यह एक सरल प्रारूप है)। इससे आसान है expectexpectहताशा का मार्ग है। उदाहरण के लिए, यह टूट जाएगा यदि पैकेज का एक नया संस्करण एक नया प्रश्न प्रस्तुत करता है (या फिर आपको कहीं अधिक परिष्कृत स्क्रिप्ट की आवश्यकता है)।
गिल्स एसओ- बुराई को रोकें '17

@JosephR आपके द्वारा पूर्व-बोई गई पोस्ट के बारे में लिंक अब काम नहीं करता है, यह कोशिश करें: zacks.eu/debian-preseed
cjohnson318

13

debconf-set-selectionsडिबेंक डेटाबेस में नए मान डालने के लिए कमांड का उपयोग करें ( /var/cache/debconf/config.dat)।


एली जवाब मेरे लिए स्पष्ट नहीं था, इसलिए मैं इसे चरण दर चरण समझाता हूँ।

पहली बात यह है कि पैकेज को अंतःक्रियात्मक रूप से स्थापित करना और चुने हुए चयनों को ( firebirdअपने पैकेज के नाम में परिवर्तन ) प्राप्त करना है:

sudo debconf-get-selections | grep ^firebird

या:

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

फिर पूर्व- 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-select सभी मामलों में प्रभावी नहीं लगते हैं, उदाहरण के लिए: exim।
जस

1
debconf- सेट-चयन आपके द्वारा परिवर्तित किए जा रहे डेबिट पैकेज में निर्मित कॉन्फ़िगरेशन स्क्रिप्ट को नहीं चलाता है। यह केवल उन चयनों को निर्धारित करता है जो पैकेज पूछ रहा है, जो इसका पहला भाग है। dpkg-reconfigure दोनों हिस्सों को चलाता है।
फ्रेड

4

मैं लगभग एक घंटे से लगभग एक-लाइनर के लिए इस समाधान के लिए संक्षेपण करने की कोशिश कर रहा हूं और मुझे आखिरकार यह पता चला: debconf-set-selections

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

यह डिबैंक को बलपूर्वक उपयोग करने के लिए बाध्य करेगा और आपको बग नहीं करेगा। आप किसी भी डेबियन पैकेज के लिए कॉन्फ़िगरेशन डिफॉल्ट भी सेट कर सकते हैं, अधिक जानकारी के लिए मैनपेज देखें


के रूप में ही नहीं है sudo dpkg-reconfigure debconf -f noninteractiveया export DEBIAN_FRONTEND=noninteractive?
kenorb

0

मैं ऊपर उल्लेखित debconf-get-selections / set-selections पद्धति का उपयोग करके LDAP सेटिंग्स (ldap-Cort-config-package पैकेज) की स्क्रिप्टेड पुन: कॉन्फ़िगर करने का प्रयास कर रहा हूं, केवल यह पता लगाने के लिए कि यह पैकेज प्रारंभिक स्थापना के बाद debff में सेटिंग्स को अनदेखा करता है। आप इंस्टाल से पहले प्री-सीड के लिए डिबेंक्फ का उपयोग कर सकते हैं, लेकिन इंस्टाल करने के बाद सिस्टम डिस्क को जो भी फाइल करता है, उसे मैनेज करता है। पैकेज पीएएम-कोर-कॉन्फिगर का व्यवहार समान है।

इस मामले में EDITOR / VISUAL तंत्र का उपयोग करना भी मुश्किल है क्योंकि ldap-Cort-config यह प्रश्नों के विभिन्न सेटों के लिए कई बार आमंत्रित करता है। यह एक उम्मीद की स्क्रिप्ट के साथ या सिस्टम विन्यास फाइल को सीधे संशोधित करके अधिक आसानी से नियंत्रित किया जा सकता है। इसलिए, यह उम्मीद करने के लिए वापस गिरने से बचने के लिए हमेशा आसान नहीं होता है!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.