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 korrekte (und einfachste) Weg , dies zu tun , wird unter Verwendung von -o
mit apt
dpkg Option passieren und zwingen dpkg
Sie zu fragen , ob Sie die geänderten Konfigurationsdateien oder die ursprünglichen 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 die ursprüngliche Konfigurationsdatei des Paketverwalters zu installieren. Sie können sogar D drücken, um die Änderungen zu sehen, oder eine Root-Shell mit der Option Z starten, um sich selbst zu reparieren.
Hinweis: Nach dem Ersetzen finden Sie Ihre geänderte Datei alsat /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, sofern nicht auch --force-confdef angegeben ist. In diesem Fall wird die Standardaktion bevorzugt.
--force-confmiss
funktioniert mit fehlenden Conffiles. Es wird auch fehlschlagen, wenn die Version nicht geändert wurde. Zitierende 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. Zitierende 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 ist ebenfalls angegeben. In diesem Fall wird die Standardaktion bevorzugt.
--force-confdef
scheitert auch , weil die Standard - Aktion ist ältere Datei zu behalten (angezeigt von der Meldung angezeigt mit --force-confask
. Es Linie hat , (Y/I/N/O/D/Z) [default=N]
das Haltemittel Standard. Siehe oben). Und wenn --force-confnew
angegeben, aber die Version nicht geändert wird, funktioniert das auch nicht. Zitierende 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, --force-confnew oder --force-confold wurden ebenfalls angegeben. In diesem Fall entscheidet er anhand dieser Aktion über die endgültige Aktion.
Nur --force-confask
funktioniert, weil es Ihnen die Frage explizit stellt, auch wenn die Version identisch ist. Zitierende 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 auch --force-confmiss , --force-confnew , --force-confold oder --force-confdef angegeben ist, wird die endgültige Aktion festgelegt.
Hoffe das wird helfen.
foo
, was passiert , wennbar
hängt davon ab ,foo
und ich will nicht entfernenbar
?