Wie man apt-get dazu bringt, neue Konfigurationsdateien in einer unbeaufsichtigten Debian-Installation von Repo zu akzeptieren

21

Ich schreibe ein Skript für eine unbeaufsichtigte Installation eines Pakets, das sich in unserem Repository befindet. Es ist ein Softwarepaket mit einer von Debians markierten Konfigurationsdateien. Gibt es eine Option, die ich weitergeben kann apt-get/aptitude kann, damit es die neuen Konfigurationsdateien akzeptiert?

Grundsätzlich brauche ich ein apt/ aptitudeÄquivalent von dpkg --force-confnew

Ich muss die folgende Frage beantworten, die während der apt-getInstallation mit einem Y gestellt wird


Konfigurationsdatei `` / opt / application / conf / XXX.conf` '

==> File on system created by you or by a script.
==> File also in package provided by package maintainer.

What would you like to do about it ?  Your options are:
Y or I  : install the package maintainer's version
N or O  : keep your currently-installed version
  D     : show the differences between the versions
  Z     : background this process to examine the 

The default action is to keep your current version.

Zusätzliche Information:

Außerdem übergebe ich das sudoPasswort in einer Pipe, um den Befehl auszuführen

echo "mysudopass"|sudo -S apt-get mypackage

Dies kennzeichnet einen Fehler in der Installation, wenn sich die Installation in der interaktiven Konfigurationsphase befindet.

Ich bin auf Ubuntu 10.04
apt Version: Apt 0.7.25.3

Warum ich nicht verwenden kann dpkg: Diese Debians müssen von Repo installiert werden und ich habe keine lokalen Debians auf meinem Computer

Raman
quelle

Antworten:

22

Sie können dpkgParameter übergeben, um apt-getdies zu mögen

apt-get -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confnew install pkgname1 pkgname2 ...

Mit --force-confdefwenn alte Konfigurationsdateien noch vorhanden sind , werden sie nicht bekommen außer Kraft gesetzt. Also wirst du es wahrscheinlich nicht benutzen, ich dokumentiere es nur für andere.

sudofragt nicht nach einem Passwort, wenn Sie die Authentifizierungsoption für den Benutzer negieren oder das NOPASSWDTag in den jeweiligen Eintrag einfügen. z.B

someuser ALL = NOPASSWD: /usr/bin/apt-get
forcefsck
quelle
7

Sie könnten Folgendes versuchen:

export DEBIAN_FRONTEND=noninteractive
apt-get -q -y install whatever-2

Beachten Sie jedoch, dass dies Auswirkungen hat, z. B. leere Standardkennwörter (möglicherweise möchten Sie ein Deployment- / Konfigurations-Tool wie Marionette, Koch, Stoff ...?).

In sudoers (5) erfahren Sie, wie Sie kennwortlose Aufrufe zulassen sudo.

sr_
quelle
3

Alternativ zu dem, was forcefsck vorgeschlagen hat, empfehlen wir Ihnen, dies in die APT-Einstellungen aufzunehmen, damit Sie diese schwer zu schreibenden Optionen nicht ständig hinzufügen müssen. Dies ist auch hilfreich für unbeaufsichtigte Upgrades, wenn Sie über diese Einstellungen verfügen.

Erstellen Sie eine /etc/apt/apt.conf.d/71debconfDatei mit folgendem Inhalt:

Dpkg::Options {
  "--force-confnew";
};

Anmerkung (von Geoff): Diese Änderung wäre eine globale Änderung. Wenn Sie andere Pakete auf dem System haben, die Sie unbeaufsichtigt aktualisieren möchten, die Sie jedoch auch manuell konfiguriert haben, ist dies nicht die geeignete Lösung.

Te Ri
quelle
Dies kann eine gute Option sein, es ist jedoch wichtig zu beachten, dass dies eine globale Änderung wäre. Wenn Sie andere Pakete auf dem System haben, die Sie unbeaufsichtigt aktualisieren möchten, aber auch konfiguriert haben, ist dies nicht die geeignete Lösung.
Geoff
2

Zusätzlich zu den anderen Antworten müssen Sie möglicherweise auch die Umgebung UCF_FORCE_CONFFNEW = 1 festlegen .

Beispielsweise verwendet openssh in debian stretch ucf (nicht debconf) openssh-server/openssh-7.4p1/debian/openssh-server.postinst, um nach der Konfigurationsdatei zu fragen. (Sie können das openssh-server.postinstmit sehendget gegen http://security.debian.org/debian-security/pool/updates/main/o/openssh/openssh_7.4p1-10+deb9u4.dsc )

Wir mussten alle Tricks auf dieser Seite anwenden, um nicht nur liberale Benutzer von zu sein anwenden Debconf-Voreinstellungen sein .

Wir haben aber halt kurz vor export DEBIAN_FRONTEND=noninteractive weil wir wissen wollen, ob wir etwas verpasst haben (das könnte wichtig sein). Unser Anwendungsfall ist ein Bediener, der die Operation startet. Es wird erwartet, dass das Upgrade nicht interaktiv ist. Der Bediener ist jedoch anwesend, wenn ein Fehler auftritt und ein Dialogfeld angezeigt wird. Ihre Situation kann anders sein.

Aber export DEBIAN_FRONTEND=noninteractiveIst dein sprichwörtlicher Vorschlaghammer.

Achtung: Setzen -o Dpkg::Options::=--force-confnewund / oder UCF_FORCE_CONFFNEW=1bedeutet, dass alle Konfigurationsdateien aus installierten Paketen auf die vorgelagerten zurückgesetzt werden. So zum Beispiel im Fall openssh-server, Du /etc/ssh/sshd_configwird auf Werkseinstellungen zurückgesetzt werden. Und zB PermitRootLogin=yeswird entfernt. Aber natürlich benutzt du das nicht, also wird es dir gut gehen! ;-)

Peter V. Mørch
quelle