it-swarm.com.de

Wie kann ich eine Konfigurationsdatei auf die ursprünglich installierte Version zurücksetzen, nachdem ich sie bearbeitet habe?

Ich möchte eine Datei in /etc/ auf die ursprünglich installierte Form zurücksetzen. Ich habe die Datei seit der Installation bearbeitet. Wie kann ich diese Konfigurationsdatei wiederherstellen? Apt ist schlau genug nicht, um bearbeitete Konfigurationsdateien zu überschreiben. Wie sage ich also, dass ich möchte dies tun soll?

Nehmen wir als Argument an, ich möchte die Datei /etc/foo.conf aus dem Paket foo zurücksetzen.

22
Ryan Thompson

Die Antwort von Ryan Thomson war auf dem richtigen Weg. Trotzdem wäre es nicht in der Lage, die Arbeit zu erledigen (der detaillierte Grund ist unten angegeben).

Die richtige (und einfachste) Methode ist die Verwendung von _-o_ mit apt, um die Option dpkg zu übergeben, und erzwingen Sie dpkg, um Sie zu fragen, ob Sie die geänderten oder die ursprünglichen Konfigurationsdateien beibehalten möchten . Der Befehl wird so sein -

_Sudo apt-get --reinstall -o Dpkg::Options::="--force-confask" install foo
_

Dies würde Ihnen eine Frage stellen wie

_Configuration file '/etc/foo/foo.conf'
 ==> Modified (by you or by a script) since installation.
     Version in package is the same as at last installation.
   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     : start a Shell to examine the situation
 The default action is to keep your current version.
*** foo.conf (Y/I/N/O/D/Z) [default=N] ? 
_

Sie müssen entweder Y oder I drücken, um zu installieren Die ursprüngliche Konfigurationsdatei des Paketverwalters. Sie können sogar D drücken, um die Änderungen zu sehen, oder eine Root-Shell mit Z-Option starten, um sich selbst zu reparieren.

Hinweis: Nach dem Ersetzen finden Sie Ihre geänderte Datei als _at /etc/foo/foo.conf.dpkg-old_


Warum würden andere Optionen nicht funktionieren?

Weil die anderen Optionen in dpkg nicht gut funktionieren. Die Optionen, die sich mit den Konfigurationsdateien eines Pakets befassen, sind:

  • _--force-confmiss_
  • _--force-confnew_
  • _--force-confold_
  • _--force-confdef_

--force-confmiss würde nicht funktionieren, wenn sich die Paketversion nicht ändert. Aus der Manpage

Wenn eine Conffile geändert wurde und sich die Version im Paket geändert hat, installieren Sie die neue Version immer ohne Aufforderung, es sei denn, das - force-confdef ist ebenfalls vorhanden angegeben. In diesem Fall wird die Standardaktion bevorzugt.

--force-confmiss funktioniert mit fehlenden Conffiles. Es wird auch fehlschlagen, wenn die Version nicht geändert wurde. Zitieren Manpage

confmiss: Wenn eine Conffile fehlt und sich die Version im Paket geändert hat, installieren Sie die fehlende Conffile immer ohne Aufforderung. Dies ist gefährlich, da dadurch eine an der Datei vorgenommene Änderung (Entfernung) nicht beibehalten wird

--force-confold behält die geänderte Version nur bei, wenn die Version geändert wird . Für dasselbe Paket wird es auch fehlschlagen. Zitieren Manpage

confold: Wenn eine Conffile geändert wurde und sich die Version im Paket geändert hat, behalten Sie immer die alte Version bei, ohne dazu aufgefordert zu werden, es sei denn, - force-confdef wird ebenfalls angegeben. In diesem Fall wird die Standardaktion bevorzugt.

--force-confdef schlägt ebenfalls fehl, da die Standardaktion darin besteht, ältere Dateien beizubehalten (Dies geht aus der Meldung hervor, die mit _--force-confask_ angezeigt wird Zeile _(Y/I/N/O/D/Z) [default=N]_ bedeutet, dass standardmäßig beibehalten wird (siehe oben). Und wenn _--force-confnew_ angegeben ist, sich die Version jedoch nicht ändert, funktioniert dies ebenfalls nicht. Zitieren Manpage

confdef: Wenn eine Conffile geändert wurde und sich die Version im Paket geändert hat, wählen Sie immer die Standardaktion, ohne dazu aufgefordert zu werden. Wenn es keine Standardaktion gibt, wird der Benutzer nicht mehr gefragt, es sei denn - erzwingen - bestätigen oder - erzwingen -confold wurde ebenfalls angegeben. In diesem Fall wird dies verwendet, um die endgültige Aktion zu bestimmen.

Nur --force-confask wird funktionieren, da Ihnen die Frage explizit gestellt wird, auch wenn die Version dieselbe ist. Zitieren Manpage

confask: Wenn eine Conffile geändert wurde, bieten Sie immer an, sie durch die Version im Paket zu ersetzen, auch wenn sich die Version im Paket nicht geändert hat (seit dpkg 1.15.8). Wenn einer von - force-confmiss , - force-confnew , - Force-Confold oder - Force-Confdef ist Es wird auch angegeben, um die endgültige Aktion zu entscheiden.

Hoffe das wird helfen.

13
Anwar

Wenn der Schaden bereits angerichtet wurde, können Sie über die Befehlszeile die offizielle Version der Konfigurationsdatei wiederherstellen. Laden Sie zuerst die Paketdatei herunter (entweder mit apt-get --download-only wie unten beschrieben oder von der Paketseite unter packages.ubuntu.com ) und extrahieren Sie dann den Inhalt an einem temporären Speicherort. Sie können die Datei dann in /etc kopieren. Stellen Sie sicher, dass Sie die ursprünglichen Berechtigungen einhalten (die meisten Dateien in /etc gehören root und mode 644 (d. H. Wortlesbar und root-schreibbar), aber jede Ausnahme gibt es aus einem wichtigen Grund).

Sudo apt-get --download-only --reinstall install foo
mkdir /tmp/foo
dpkg-deb -x /var/cache/apt/archives/foo_VERSION_Arch.deb /tmp/foo

Beachten Sie, dass dies nicht für Konfigurationsdateien gilt, die nicht aus einem Paket stammen, z. B. /etc/fstab oder /etc/passwd. Wenn Sie diese verlieren, sind Sie auf sich allein gestellt. (Die meisten sind sowieso sehr systemabhängig.)


Für die Zukunft empfehle ich die Verwendung von etckeeper Install etckeeper . Installieren Sie das Paket und führen Sie Sudo etckeeper init aus. Dadurch wird die Versionskontrolle für alle Dateien in /etc eingerichtet. Sie müssen nichts weiter tun, um etckeeper zu verwalten. Sie müssen nur dann damit interagieren, wenn Sie eine Versionskontrolle durchführen möchten, z. B. indem Sie auf ältere Dateien verweisen. Dateien werden vor und nach jedem Lauf von apt und jede Nacht automatisch festgeschrieben (dies ist konfigurierbar).

Standardmäßig verwendet etckeeper unter Ubuntu Bazaar . Ändern Sie die Einstellung in /etc/etckeeper/etckeeper.conf, bevor Sie etckeeper init ausführen, wenn Sie Darcs, Git oder Mercury bevorzugen.

Mit Bazaar können Sie /etc/foo.conf auf die zuletzt festgeschriebene Version zurücksetzen:

cd /etc
Sudo bzr revert foo.conf

Wenn Sie in der Zeit zurückgehen möchten, verwenden Sie Sudo bzr log foo.conf, um den Verlauf der Datei anzuzeigen, und Sudo bzr revert -r 42 foo.conf, wenn Sie festgestellt haben, dass revno: 42 die Version ist, zu der Sie zurückkehren möchten.

12
Gilles

Sie können das Paket manuell von packages.ubuntu.com herunterladen, die Datei extrahieren und Ihre Version durch diese ersetzen.

Oder Sie könnten:

Sudo rm /etc/foo.conf # just for good measure
Sudo apt-get --purge --reinstall install foo

Die zweite fühlt sich viel brutaler an. Möglicherweise werden auch andere Konfigurationen gelöscht, wenn mehr als eine Datei verwendet wird. Das erste ist mehr Klicken und Anstrengung, aber es scheint viel sicherer.

Zum zweiten können Sie die Datei möglicherweise einfach löschen und --reinstall ersetzt sie möglicherweise. Wenn ja, wäre das sicherer.

7
Oli

Abhängig vom Paket finden Sie möglicherweise eine Standardkonfigurationsdatei in /usr/share/doc/foo/examples.

1
misterben

Verwenden Sie Synaptic (Ubuntu Tweak ist noch praktischer, aber Synaptic ist einfacher) und wählen Sie "Paket vollständig entfernen". Dadurch werden alle Konfigurationsdateien gelöscht (möglicherweise möchten Sie diese Dateien sichern!).

Dann neu installieren. Sie sind fertig.

Mit Ubuntu Tweak erhalten Sie noch mehr Optionen für Bereinigungs-, Rerolling- und Konfigurations-Backups. Vielleicht möchten Sie es mal sehen. Es ist im Softwarecenter.

s .: Synaptic verwendet auch die Option "Löschen" (wie von Oli oben erwähnt ...) - nur mit einer grafischen Benutzeroberfläche für eine komfortablere Handhabung.

0
piedro

Endlich fand ich die Antwort, an die ich mich vor Jahren vage erinnerte:

dpkg --force-confnew --force-confmiss -i PACKAGE.deb

Das Argument "confnew" zwingt dpkg, geänderte Konfigurationsdateien durch die vom Paket bereitgestellten zu ersetzen, und das Argument "confmiss" gilt ebenfalls für gelöschte Konfigurationsdateien.

Laut diesem Chatlog können Sie diese Optionen auch über apt-get auf folgende Weise verwenden:

apt-get -o DPkg::Options::="--force-confnew --force-confmiss" --reinstall install PACKAGE

das erspart Ihnen, die deb-Datei selbst zu finden.

Offensichtlich sind diese Optionen gefährlich und können bei Missbrauch wichtige Systemkonfigurationsdateien in die Luft jagen.

0
Ryan Thompson