Invoerwaarden invoeren voor dpkg-reconfigure op een niet-interactieve manier
Geplaatst op februari 18, 2021 door adminIk zou ubuntu-pakket willen configureren via dpkg-reconfigure met alle waarden geleverd via niet- interactieve modus (in het script).
In feite is mijn geval firebird-confiiguratie ( http://www.firebirdsql.org/manual/ubusetup.html ), dat bij gebruik van het commando:
sudo dpkg-reconfigure firebird2.5-superclassic -freadline
mij vraagt naar de 2 waarden, waarbij de antwoorden “Y” en “newpwd” zouden zijn.
Voorbeelduitvoer ziet er als volgt uit:
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
Ik “heb here strings
via bash-script als volgt geprobeerd:
sudo dpkg-reconfigure firebird2.5-superclassic -f readline << EOF Y newpwd EOF
Dit werkte echter om de een of andere reden niet en er werd gevraagd om de waarden op te geven.
Enige ideeën over hoe te voeden de vereiste waarden om te scripten?
Antwoord
Je kunt altijd de gebruiken verwacht dat taal de interactie automatiseert met een proces dat zijn invoer verwacht op een . Ik heb het “niet echt eerder gebruikt, dus ik kan” hier niet echt code toevoegen, maar die van jou is een typisch geval van gebruik.
UPDATE:
[Peter Butkovic] Ik overweeg me te verwijzen naar expect
als een goede richting, dit script eindigde met:
#!/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
Reacties
- bedankt dat je me de goede richting wijst. Ik beschouw dit antwoord als correct omdat het de gemakkelijk te implementeren oplossing was.
- Ik zou op mijn hoede zijn voor de mogelijkheid van i18n-problemen, maar voor ” thuisgebruik ” dit lijkt veilig.
Antwoord
Debian-pakketten gebruiken debconf om instellingen voor de installatietijd te verzamelen. Debconf ondersteunt meerdere frontends om de gebruiker om waarden te vragen. De -f
optie voor dpkg-reconfigure
selecteert welke debconf-frontend moet worden gebruikt.
De readline
frontend is ontworpen voor interactief gebruik. Gebruik het niet in een automatisch script.
Als de standaardwaarden in orde zijn, gebruik dan gewoon de noninteractive
frontend.
Als je wilt verschillende waarden opgeven, dan heb je twee opties. Je kunt vasthouden aan de noninteractive
frontend, en vooraf de debconf-database . De eenvoudigste manier om dit te doen is door het pakket op één machine te installeren en het interactief te configureren, vervolgens de relevante onderdelen uit /var/cache/debconf/config.dat
te extraheren en dit bestand aan debconf:
DEBCONF_DB_OVERRIDE="File {/path/to/config.dat}" dpkg-reconfigure -fnoninteractive firebird2.5-superclassic
Een andere methode is om de editor
frontend te gebruiken en de omgevingsvariabele VISUAL
(of EDITOR
, maar VISUAL
heeft voorrang op EDITOR
als dit is ingesteld ) naar een programma dat een bestand met de huidige instellingen als argument meeneemt, en dat bestand overschrijft met de gewenste instellingen.
Opmerkingen
- Neemoet
/var/cache/debconf/config.dat
jezelf ontleden. U kuntdebconf-get-selections
uit hetdebconf-utils
-pakket gebruiken. Zie dit bijvoorbeeld. - Ik ‘ m niet zeker of preconfiguratie de past hier goed. We ‘ hebben het over het uitvoeren van
dpkg-reconfigure
, waarvan ik ‘ vermoed dat het OP dat wil automatiseren omdat hij ‘ het regelmatig zal doen. - bedankt voor hints. besloot te gaan voor verwacht script. heb niet ‘ t onderzoek hier dieper.
- @JosephR. Inderdaad,
debconf-get-selections
is hier waarschijnlijk nuttig. Als Peter dit vaak met verschillende waarden wil doen, moet hij eenconfig.dat
dynamisch genereren (het ‘ is een eenvoudig formaat). Dit is gemakkelijker danexpect
.expect
is het pad van wanhoop. Het ‘ zal bijvoorbeeld worden afgebroken als een nieuwe versie van het pakket een nieuwe vraag introduceert (of je hebt een veel geavanceerder script nodig). - @ JosephR de link over pre-seeding die je hebt gepost werkt niet meer, probeer dit: zacks.eu/debian-preseed
Answer
Gebruik debconf-set-selections
commando om nieuwe waarden in de debconf-database in te voegen (/var/cache/debconf/config.dat
).
Eli antwoord was niet duidelijk voor mij, dus ik zal het stap voor stap uitleggen stap.
Het eerste dat u moet doen, is het pakket interactief installeren en de gekozen selecties ophalen door (verander firebird
in uw pakketnaam):
sudo debconf-get-selections | grep ^firebird
of:
grep -C2 firebird /var/cache/debconf/config.dat
Pre-seed de debconf-database met antwoorden door debconf-set-selections
, bijvoorbeeld:
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
waar syntaxis is:
echo foo-owner-package-name foo-template-name value-type value | debconf-set-selections
Hier is nog een voorbeeld voor ttf-mscorefonts-installer
pakket:
echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | sudo debconf-set-selections
Opmerking: de invoerselecties kunnen zijn: uit de standaardinvoer of het bestand.
Controleer: man debconf-set-selections
voor meer informatie.
Alternatieve manier is Kickstart te gebruiken.
Reacties
- debconf-set-selections niet ‘ t lijkt in alle gevallen van kracht te worden, bijvoorbeeld: exim.
- debconf-set-selections voert NIET het configuratiescript uit dat is ingebouwd in het deb-pakket dat u wilt wijzigen ing. Het stelt alleen de selecties in waar het pakket om vraagt, en dat is alleen het eerste deel ervan. dpkg-reconfigure draait beide delen.
- Dit zou het juiste antwoord op deze vraag moeten zijn.
Antwoord
Ik” heb ongeveer een uur rondgesnuffeld om de oplossing hiervoor te verdichten tot een oneliner en ik heb het eindelijk gevonden: debconf-set -selections
echo "debconf debconf/frontend select noninteractive" | sudo debconf-set-selections
Dit zal debconf dwingen de standaardinstellingen te gebruiken en u niet lastig vallen. U kunt ook de standaardconfiguratie instellen voor elk Debian-pakket, zie de manpage voor meer informatie.
Reacties
- Isn ‘ t hetzelfde als
sudo dpkg-reconfigure debconf -f noninteractive
ofexport DEBIAN_FRONTEND=noninteractive
?
Answer
Ik “heb geprobeerd om een scriptherconfiguratie van LDAP-instellingen (ldap-auth-config-pakket) uit te voeren met behulp van het debconf-get-selections / set- selections-methode hierboven vermeld, alleen om te ontdekken dat dit pakket de instellingen in debco negeert nf na de eerste installatie. U kunt debconf gebruiken om voor te zaaien vóór de installatie, maar na de installatie geeft ldap-auth-config er de voorkeur aan uw debconf-instellingen te overschrijven met alles wat is ingesteld in de systeemconfiguratiebestanden die het beheert. Pakket pam-auth-config heeft hetzelfde gedrag.
Het EDITOR / VISUAL-mechanisme is in dit geval ook moeilijk te gebruiken omdat ldap-auth-config het meerdere keren aanroept voor verschillende sets vragen. Het kan gemakkelijker worden afgehandeld met een verwacht script, of door de systeemconfiguratiebestanden rechtstreeks te wijzigen. Het is dus niet altijd gemakkelijk om te voorkomen dat u terugvalt om te verwachten!
Antwoord
Mijn versie van de verwacht dat oplossing de ArangoDB .deb installeert met pexpect
import pexpect import os os.environ["DEBIAN_FRONTEND"]= "readline" child = pexpect.spawnu("dpkg -i arangodb3_3.6.2-1_amd64.deb") child.expect("user:") child.sendline("defg") child.expect("user:") child.sendline("defg") child.expect("Automatically upgrade database files") child.sendline("yes") child.expect("Database storage engine") child.sendline("1") child.expect("Backup database files before upgrading") child.sendline("no") child.expect(pexpect.EOF)
Geef een reactie