Giriş değerlerini dpkg-yeniden yapılandırmaya etkileşimli olmayan bir şekilde besleme


23

Ubuntu paketini dpkg-reconfigure ile etkileşimli olmayan mod aracılığıyla (betişte) verilen tüm değerlerle yapılandırmak istiyorum.

Aslında benim durumum firebird yapılandırmadır ( http://www.firebirdsql.org/manual/ubusetup.html ), bu komut kullanılırken:

sudo dpkg-reconfigure firebird2.5-superclassic -freadline

cevapların 'Y' ve 'newpwd' olacağı 2 değeri soruyor.

Örnek çıktı şöyle görünür:

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 stringsBöyle bash betiği ile denedim :

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

Ancak bu bir nedenden dolayı işe yaramadı ve sağlanacak değerleri istedi.

Gerekli değerleri komut dosyasına nasıl besleyeceğiniz hakkında bir fikriniz var mı?

Yanıtlar:


11

Bekliyor dilini , girişini beklediğiniz bir işlemle etkileşimi otomatikleştirmek için her zaman kullanabilirsiniz tty. Gerçekten daha önce kullanmadım, bu yüzden buraya gerçekten kod ekleyemiyorum ama sizinki tipik bir kullanım durumudur.

GÜNCELLEŞTİRME:

[Peter Butkovic] Beni expectdoğru bir yön olarak işaret ediyorum , bu senaryo ile bittim :

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

bana doğru yönü işaret ettiğin için teşekkürler. Bu cevabı, çözümü kolay olduğu kadar doğru buluyorum.
Peter Butkovic

I18n sorunları olasılığına karşı temkinli olurdum, ancak "ev kullanımı" için bu güvenli görünüyor.
Jasen,

20

Debian paketleri, kurulum zamanı ayarlarını toplamak için debconf kullanır. Debconf, kullanıcıdan değerleri istemek için birden fazla ön yüzü desteklemektedir. -fSeçenek dpkg-reconfigurekullanımına önyüzü debconf'u seçer.

Ön readlineuç etkileşimli kullanım için tasarlanmıştır. Otomatik bir komut dosyasında kullanmayın.

Varsayılan değerler iyi ise, sadece noninteractiveön ucu kullanın .

Farklı değerler sağlamak istiyorsanız iki seçeneğiniz vardır. Sen sopa ile noninteractiveson kullanıcı, ve Debconf veritabanını preseed . Bunu yapmanın en kolay yolu, paketi bir makineye kurmak ve etkileşimli olarak yapılandırmak, ardından ilgili parçaları ayıklamak /var/cache/debconf/config.datve bu dosyayı debconf'a sağlamaktır:

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

Diğer bir yöntem kullanmaktır editorön uç ve ortam değişkeni ayarlamak VISUAL(veya EDITOR, fakat VISUALüzerinde önceliğe sahiptir EDITORbu seti ise) bağımsız değişken olarak geçerli ayarları içeren bir dosya alan bir programa ve üzerinde yazma istediğiniz ayarlarla dosyanın söyledi.


6
/var/cache/debconf/config.datKendini ayrıştırmana gerek yok . Sen kullanabilirsiniz debconf-get-selectionsgelen debconf-utilspaketin. Bkz bu örneğin.
Joseph R.

Ayrıca, preseeding'in buradaki doğru seçim olup olmadığından emin değilim. Koşmaktan bahsediyoruz dpkg-reconfigure, ki OP'nin otomatikleştirmek istediğini tahmin ediyorum çünkü sık sık yapıyor olacak.
Joseph R.

ipuçları için teşekkürler. Beklenti betiği için gitmeye karar verdi. Burada daha derin araştırma yapmadı.
Peter Butkovic

2
@JosephR. Aslında, debconf-get-selectionsburada yararlı olması muhtemeldir. Peter bunu sık sık farklı değerlerle yapmak isterse, config.datdinamik olarak üretmelidir (basit bir formattır). Bu daha kolay expect. expectçaresizlik yolu. Örneğin, paketin yeni bir sürümü yeni bir soru ortaya çıkarırsa (veya çok daha karmaşık bir komut dosyasına ihtiyacınız varsa) çökecektir.
Gilles 'SO- şeytan olmayı'

: Artık işleri yayınlanmıştır öncesi tohum konusunda linke @JosephR, bu deneyin zacks.eu/debian-preseed
cjohnson318

13

debconf-set-selectionsDebconf veritabanına ( /var/cache/debconf/config.dat) yeni değerler eklemek için komutu kullanın .


Eli'nin cevabı benim için net değildi, bu yüzden adım adım açıklayacağım.

Yapılacak ilk şey, etkileşimli bir şekilde paket kurmak ve seçilen seçimleri almaktır ( firebirdpaket adınıza değiştirin ):

sudo debconf-get-selections | grep ^firebird

veya:

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

Ardından debconf veritabanını cevaplarla birlikte debconf-set-selectionshazırlayın, örneğin:

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

sözdizimi nerede:

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

İşte ttf-mscorefonts-installerpaket için başka bir örnek :

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

Not: Giriş seçimleri standart giriş veya dosyadan olabilir.

Kontrol: man debconf-set-selectionsdaha fazla bilgi için.


Alternatif yol Kickstart kullanmaktır .


debconf-set-selection, her durumda etkili görünmüyor, örneğin: exim.
Jasen,

1
debconf-set-choices değiştirdiğiniz deb paketine yerleştirilmiş olan yapılandırma betiğini çalıştırmaz. Yalnızca paketin istediği seçimleri belirler ve hangisinin yalnızca ilk kısmıdır. dpkg-reconfigure iki parçayı da çalıştırır.
Fred

4

Yaklaşık bir saattir bu konuyu çözmeyi sadece tek bir liner için yoğunlaştırmaya çalışıyorum ve sonunda buldum: debconf-set-choices

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

Bu, debconf'u varsayılanları kullanmaya zorlar ve sizi hata yapmaz. Herhangi bir Debian paketi için yapılandırma varsayılanlarını da ayarlayabilirsiniz, daha fazla bilgi için man sayfasına bakın .


Aynı sudo dpkg-reconfigure debconf -f noninteractiveya da değil export DEBIAN_FRONTEND=noninteractivemi?
kenorb 27:15

0

LDAP ayarlarının (ldap-auth-config paketi) komut dosyasıyla yeniden yapılandırılması, sadece bu paketin ilk kurulumdan sonra debconf'taki ayarları yoksaydığını bulmak için yukarıda belirtilen debconf-get-selection / set-seçimleri yöntemini kullanarak yeniden yapılandırmaya çalışıyorum. Yüklemeden önce önceden tohumlamak için debconf kullanabilirsiniz, ancak kurulumdan sonra ldap-auth-config, yönettiği sistem yapılandırma dosyalarında ayarlanmış olanlarla debconf ayarlarının üzerine yazmayı tercih eder. Paket pam-auth-config aynı davranışa sahiptir.

EDITOR / VISUAL mekanizmasının bu durumda kullanılması da zordur, çünkü ldap-auth-config farklı soru kümeleri için defalarca çağırır. Beklenen bir komut dosyasıyla veya doğrudan sistem yapılandırma dosyalarını değiştirerek daha kolay kullanılabilir. Bu yüzden, beklemek için geri dönmekten kaçınmak her zaman kolay değildir!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.