Подання вхідних значень для перенастроювання dpkg неінтерактивним способом


23

Я хотів би налаштувати пакет ubuntu через dpkg-перенастроювання з усіма значеннями, що надходять у неінтерактивному режимі (у сценарії).

Насправді мій випадок - це конфігурація firebird ( 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

Ви завжди можете використовувати мову очікування для автоматизації взаємодії з процесом, який очікує його введення на a 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

Пакети Debian використовують debconf для збору налаштувань часу встановлення. Debconf підтримує кілька фронтальних запитів, щоб підказати користувачеві про значення. -fВаріант dpkg-reconfigureвибирає , який Debconf інтерфейс для використання.

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якщо вона встановлена) програмі, яка приймає файл, що містить поточні параметри як аргумент, і замінює цей файл із потрібними налаштуваннями.


6
Не потрібно розбирати /var/cache/debconf/config.datсебе. Ви можете використовувати debconf-get-selectionsз debconf-utilsпакета. Дивіться це для прикладу.
Джозеф Р.

Крім того, я не впевнений, що попередня підготовка є правильною для цього. Ми говоримо про біг dpkg-reconfigure, який, я думаю, ОП хоче автоматизувати, тому що він буде робити це часто.
Джозеф Р.

дякую за підказки. вирішили піти на сценарій очікування. не досліджували тут глибше.
Петро Буткович

2
@JosephR. Дійсно, debconf-get-selectionsймовірно, тут буде корисно. Якщо Петро хоче це робити часто з різними значеннями, він повинен config.datдинамічно генерувати (це простий формат). Це простіше, ніж expect. expect- це шлях відчаю. Наприклад, він вийде з ладу, якщо нова версія пакета введе нове запитання (інакше вам потрібен набагато складніший сценарій).
Жил "ТАК - перестань бути злим"

@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для отримання додаткової інформації.


Альтернативний спосіб - використовувати Kickstart .


Вибір debconf-set-select не діє в усіх випадках, наприклад: exim.
Ясен

1
debconf-set-select НЕ запускає сценарій конфігурації, вбудований в пакет deb, який ви змінюєте. Він встановлює лише вибір, про який запитує пакет, який є лише першою його частиною. Перенастроювання dpkg виконує обидві частини.
fred

4

Я блукав близько години, просто намагаючись звести рішення для цього до однолінійного, і я нарешті знайшов це: debconf-set-select

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

Це змусить debconf використовувати параметри за замовчуванням, а не помилка. Ви можете також встановити за замовчуванням конфігурації для будь-якого пакету Debian, див довідкової сторінки для отримання додаткової інформації.


Хіба не те ж саме , як sudo dpkg-reconfigure debconf -f noninteractiveі export DEBIAN_FRONTEND=noninteractive?
kenorb

0

Я намагався зробити сценарійну конфігурацію параметрів LDAP (пакет ldap-auth-config), використовуючи вищезазначений метод debconf-get-select / set-selections, тільки щоб виявити, що цей пакет ігнорує налаштування в debconf після початкової установки. Ви можете використовувати debconf для попереднього розміщення перед встановленням, але після встановлення ldap-auth-config вважає за краще замінити налаштування debconf тим, що встановлено у файлах системних конфігурацій, якими він керує. Пакет pam-auth-config має таку саму поведінку.

Механізм EDITOR / VISUAL також важко використовувати в цьому випадку, оскільки ldap-auth-config викликає його кілька разів для різних наборів питань. З ним можна легше обробляти сценарій очікування або безпосередньо змінюючи файли конфігурації системи. Тож не завжди легко уникнути того, як очікувати назад!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.