Cung cấp các giá trị đầu vào cho dpkg - cấu hình lại theo cách không tương tác


23

Tôi muốn định cấu hình gói ubfox thông qua dpkg-cấu hình lại với tất cả các giá trị được cung cấp qua chế độ không tương tác (trong tập lệnh).

Trong thực tế trường hợp của tôi là confiiguration ( http://www.firebirdsql.org/manual/ubusetup.html ), khi sử dụng lệnh:

sudo dpkg-reconfigure firebird2.5-superclassic -freadline

hỏi tôi về 2 giá trị, trong đó câu trả lời sẽ là 'Y' và 'newpwd'.

Đầu ra mẫu trông như thế này:

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

Tôi đã thử here stringsqua bash script như thế này:

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

Tuy nhiên, điều này không hoạt động vì một số lý do và nó yêu cầu các giá trị được cung cấp.

Bất kỳ ý tưởng làm thế nào để cung cấp các giá trị cần thiết cho kịch bản?

Câu trả lời:


11

Bạn luôn có thể sử dụng ngôn ngữ mong đợi để tự động hóa tương tác với một quy trình mong đợi đầu vào của nó trên a tty. Tôi chưa thực sự sử dụng nó trước đây vì vậy tôi thực sự không thể thêm mã ở đây nhưng bạn là trường hợp sử dụng điển hình.

CẬP NHẬT:

[Peter Butkovic] Tôi coi việc chỉ cho tôi expectmột hướng đi đúng đắn, kịch bản này tôi đã kết thúc với:

#!/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

cảm ơn đã chỉ cho tôi hướng đi đúng Tôi coi câu trả lời này là đúng vì đây là giải pháp dễ thực hiện.
Peter Butkovic

Tôi sẽ cảnh giác với khả năng của các vấn đề i18n, nhưng đối với "sử dụng tại nhà" thì điều này có vẻ an toàn.
Jasen

20

Các gói Debian sử dụng debconf để thu thập cài đặt thời gian cài đặt. Debconf hỗ trợ nhiều giao diện để nhắc người dùng về các giá trị. Các -ftùy chọn để dpkg-reconfigureSelects mà debconf frontend để sử dụng.

Các readlinelối vào được thiết kế để sử dụng tương tác. Đừng sử dụng nó trong một kịch bản tự động.

Nếu các giá trị mặc định là tốt, thì chỉ cần sử dụng noninteractivefrontend.

Nếu bạn muốn cung cấp các giá trị khác nhau, bạn có hai tùy chọn. Bạn có thể gắn bó với noninteractivefrontend và chèn sẵn cơ sở dữ liệu debconf . Cách dễ nhất để thực hiện việc này là cài đặt gói trên một máy và định cấu hình tương tác, sau đó trích xuất các phần có liên quan từ đó /var/cache/debconf/config.datvà cung cấp tệp này để gỡ lỗi:

DEBCONF_DB_OVERRIDE='File {/path/to/config.dat}' dpkg-reconfigure -fnoninteractive firebird2.5-superclassic

Một phương pháp khác là sử dụng editorfrontend và đặt biến môi trường VISUAL(hoặc EDITOR, nhưng được VISUALưu tiên hơn EDITORnếu nó được đặt) thành một chương trình lấy một tệp chứa các cài đặt hiện tại làm đối số và ghi đè lên tệp đó với các cài đặt bạn muốn.


6
Không cần phải phân tích /var/cache/debconf/config.datchính mình. Bạn có thể sử dụng debconf-get-selectionstừ debconf-utilsgói. Xem điều này cho ví dụ.
Joseph R.

Ngoài ra, tôi không chắc chắn nếu preseising là phù hợp ở đây. Chúng tôi đang nói về việc chạy dpkg-reconfigure, điều mà tôi đoán OP muốn tự động hóa vì anh ấy sẽ làm việc đó thường xuyên.
Joseph R.

cảm ơn vì gợi ý quyết định đi cho kịch bản mong đợi. đã không điều tra sâu hơn ở đây.
Peter Butkovic

2
@JosephR. Thật vậy, debconf-get-selectionscó khả năng sẽ hữu ích ở đây. Nếu Peter muốn làm điều này thường xuyên với các giá trị khác nhau, anh ta nên tạo một config.datcách linh hoạt (đó là một định dạng đơn giản). Điều này là dễ dàng hơn expect. expectlà con đường tuyệt vọng. Ví dụ: nó sẽ bị hỏng nếu một phiên bản mới của gói giới thiệu một câu hỏi mới (nếu không bạn cần một tập lệnh phức tạp hơn nhiều).
Gilles 'SO- ngừng trở nên xấu xa'

@JosephR liên kết về tiền gieo hạt bạn đã đăng không còn hoạt động nữa, hãy thử điều này: zacks.eu/debian-preseed
cjohnson318

13

Sử dụng debconf-set-selectionslệnh để chèn các giá trị mới vào cơ sở dữ liệu debconf ( /var/cache/debconf/config.dat).


Câu trả lời của Eli không rõ ràng đối với tôi, vì vậy tôi sẽ giải thích từng bước một.

Điều đầu tiên cần làm là cài đặt gói tương tác và nhận các lựa chọn đã chọn bằng cách (thay đổi firebirdtên gói của bạn):

sudo debconf-get-selections | grep ^firebird

hoặc là:

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

Sau đó, chọn trước cơ sở dữ liệu debconf bằng các câu trả lời bằng debconf-set-selections, ví dụ:

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

cú pháp là:

echo foo-owner-package-name foo-template-name value-type value | debconf-set-selections

Đây là một ví dụ khác cho ttf-mscorefonts-installergói:

echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | sudo debconf-set-selections

Lưu ý: Các lựa chọn đầu vào có thể từ đầu vào tiêu chuẩn hoặc tệp.

Kiểm tra: man debconf-set-selectionsđể biết thêm.


Cách khác là sử dụng Kickstart .


các lựa chọn debconf-set dường như không có hiệu lực trong mọi trường hợp, ví dụ: exim.
Jasen

1
debconf-set-select KHÔNG chạy tập lệnh cấu hình được tích hợp trong gói deb bạn đang thay đổi. Nó chỉ đặt các lựa chọn mà gói yêu cầu chỉ là phần đầu tiên của gói. dpkg-cấu hình lại chạy cả hai phần.
fred

4

Tôi đã chọc khoảng một giờ chỉ để cố gắng cô đọng giải pháp cho vấn đề này xuống một lớp lót và cuối cùng tôi đã tìm thấy nó: debconf-set-select

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

Điều này sẽ buộc debconf sử dụng mặc định và không lỗi bạn. Bạn cũng có thể đặt mặc định cấu hình cho bất kỳ gói Debian nào, xem trang hướng dẫn để biết thêm thông tin.


Không giống như sudo dpkg-reconfigure debconf -f noninteractivehay export DEBIAN_FRONTEND=noninteractive?
kenorb

0

Tôi đã cố gắng thực hiện cấu hình lại các cài đặt LDAP theo kịch bản (gói ldap-auth-config) bằng cách sử dụng phương thức debconf-get-selections / set-sel lựa chọn được đề cập ở trên, chỉ để thấy rằng gói này bỏ qua các cài đặt trong debconf sau khi cài đặt ban đầu. Bạn có thể sử dụng debconf để pre-seed trước khi cài đặt, nhưng sau khi cài đặt ldap-auth-config thích ghi đè cài đặt debconf của bạn với bất cứ điều gì được đặt trong các tệp cấu hình hệ thống mà nó quản lý. Gói pam-auth-config có hành vi tương tự.

Cơ chế EDITOR / VISUAL cũng khó sử dụng trong trường hợp này vì ldap-auth-config gọi nó nhiều lần cho các bộ câu hỏi khác nhau. Nó có thể được xử lý dễ dàng hơn với tập lệnh mong đợi hoặc bằng cách sửa đổi trực tiếp các tệp cấu hình hệ thống. Vì vậy, không phải lúc nào cũng dễ dàng tránh bị ngã ngửa!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.