ป้อนค่าอินพุตให้กับ dpkg-reconfigure ด้วยวิธีที่ไม่โต้ตอบ


23

ฉันต้องการกำหนดค่าแพคเกจ ubuntu ผ่าน dpkg-reconfigure ด้วยค่าทั้งหมดที่ให้ผ่านโหมดที่ไม่โต้ตอบ (ในสคริปต์)

ในความเป็นจริงกรณีของฉันคือ firei confiiguration ( 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 script เช่นนี้แล้ว:

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

อย่างไรก็ตามสิ่งนี้ไม่ได้ผลด้วยเหตุผลบางอย่างและขอค่าที่จะให้

แนวคิดใดบ้างที่จะป้อนค่าที่ต้องการให้กับสคริปต์

คำตอบ:


11

คุณสามารถใช้คาดหวังภาษาttyเพื่อการทำงานร่วมกันโดยอัตโนมัติด้วยกระบวนการที่คาดว่าการป้อนข้อมูลของตนในการเป็น ฉันไม่ได้ใช้มันมาก่อนดังนั้นฉันจึงไม่สามารถเพิ่มรหัสได้ที่นี่ แต่ของคุณเป็นกรณีการใช้งานทั่วไป

UPDATE:

[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

แพ็คเกจ Debian ใช้debconfเพื่อรวบรวมการตั้งค่าเวลาติดตั้ง Debconf รองรับหลายส่วนหน้าเพื่อให้ผู้ใช้รับค่า -fตัวเลือกในการdpkg-reconfigureเลือกที่ debconf ส่วนหน้ากับการใช้งาน

readlineส่วนหน้าถูกออกแบบมาสำหรับการใช้งานแบบโต้ตอบ อย่าใช้มันในสคริปต์อัตโนมัติ

หากค่าเริ่มต้นดีแล้วให้ใช้noninteractiveส่วนหน้า

หากคุณต้องการระบุค่าที่แตกต่างคุณมีสองตัวเลือก คุณสามารถติดกับnoninteractiveส่วนหน้าและpreseed ฐานข้อมูล วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการติดตั้งแพคเกจบนเครื่องหนึ่งและกำหนดค่าแบบโต้ตอบจากนั้นแตกส่วนที่เกี่ยวข้องจาก/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แพ็คเกจ ดูนี้ตัวอย่างเช่น
โจเซฟอาร์

นอกจากนี้ฉันไม่แน่ใจว่าการคาดการณ์ล่วงหน้านั้นเหมาะสมหรือไม่ เรากำลังพูดถึงการวิ่งdpkg-reconfigureซึ่งฉันเดาว่า OP ต้องการให้เป็นอัตโนมัติเพราะเขาจะทำบ่อยๆ
โจเซฟอาร์

ขอบคุณสำหรับคำแนะนำ ตัดสินใจที่จะใช้สคริปต์ที่คาดหวัง ไม่ได้ตรวจสอบลึกที่นี่
Peter Butkovic

2
@JosephR แน่นอนdebconf-get-selectionsว่าน่าจะมีประโยชน์ที่นี่ หากปีเตอร์ต้องการทำสิ่งนี้บ่อยครั้งด้วยค่าที่แตกต่างกันเขาควรสร้างconfig.datแบบไดนามิก (เป็นรูปแบบง่าย ๆ ) expectนี้จะง่ายกว่า expectเป็นเส้นทางแห่งความสิ้นหวัง ตัวอย่างเช่นมันจะพังถ้าแพ็คเกจรุ่นใหม่มีคำถามใหม่ (หรือคุณต้องการสคริปต์ที่ซับซ้อนกว่านี้)
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

@JosephR ลิงก์เกี่ยวกับการเพาะเมล็ดที่คุณโพสต์แล้วไม่ทำงานลองสิ่งนี้: zacks.eu/debian-preseed
cjohnson318

13

ใช้debconf-set-selectionsคำสั่งเพื่อแทรกค่าใหม่ลงในฐานข้อมูล debconf ( /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

ฉันได้รับการ poking รอบประมาณหนึ่งชั่วโมงเพียงแค่พยายามที่จะรวมตัวแก้ปัญหานี้ลงหนึ่งซับและในที่สุดฉันก็พบว่า: debconf-set-selections

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

สิ่งนี้จะบังคับให้ debconf ใช้ค่าเริ่มต้นไม่ใช่ข้อผิดพลาดของคุณ คุณยังสามารถตั้งค่าเริ่มต้นของการกำหนดค่าสำหรับแพ็คเกจ Debian ใดก็ได้ดู manpageสำหรับข้อมูลเพิ่มเติม


คือไม่เหมือนกันsudo dpkg-reconfigure debconf -f noninteractiveหรือexport DEBIAN_FRONTEND=noninteractive?
kenorb

0

ฉันพยายามทำการตั้งค่า LDAP ใหม่สำหรับสคริปต์ (ldap-auth-config package) โดยใช้วิธีการ debconf-get-selections / set-selections ที่กล่าวถึงข้างต้นเท่านั้นที่พบว่าแพ็คเกจนี้ละเว้นการตั้งค่าใน debconf หลังจากการติดตั้งครั้งแรก คุณสามารถใช้ debconf เพื่อเตรียมข้อมูลล่วงหน้าก่อนการติดตั้ง แต่หลังจากติดตั้ง ldap-auth-config ชอบที่จะเขียนทับการตั้งค่า debconf ของคุณด้วยสิ่งที่ตั้งอยู่ในไฟล์ config ของระบบที่จัดการ แพคเกจ pam-auth-config มีพฤติกรรมเดียวกัน

กลไกการแก้ไข / การมองเห็นก็ยากที่จะใช้ในกรณีนี้เนื่องจาก ldap-auth-config เรียกใช้หลายครั้งสำหรับชุดคำถามที่แตกต่างกัน สามารถจัดการได้ง่ายขึ้นด้วยสคริปต์คาดหวังหรือแก้ไขไฟล์กำหนดค่าระบบโดยตรง ดังนั้นจึงไม่ใช่เรื่องง่ายที่จะหลีกเลี่ยงการถอยกลับไปคาดหวัง!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.