Odpowiedź udzielona przez Ryana Thomsona zmierza w dobrym kierunku. Nadal nie byłby w stanie wykonać zadania (powód szczegółowy podano poniżej).
Prawidłowym (i najłatwiejszym) sposobem jest użycie opcji -o
z, apt
aby przekazać opcję dpkg i zmusić dpkg
do pytania, czy chcesz zachować zmodyfikowane pliki konfiguracyjne, czy oryginalne. Polecenie będzie takie -
sudo apt-get --reinstall -o Dpkg::Options::="--force-confask" install foo
To zada ci pytanie takie jak
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] ?
Musisz nacisnąć klawisz Y lub I, aby zainstalować oryginalny plik konfiguracyjny opiekuna pakietu. Możesz nawet nacisnąć D, aby zobaczyć, jakie zmiany lub uruchomić powłokę główną z opcją Z, aby to naprawić.
Uwaga: po zamianie znajdziesz zmodyfikowany plik jakoat /etc/foo/foo.conf.dpkg-old
Dlaczego inne opcje nie działają?
Ponieważ inne opcje w dpkg nie działają dobrze. Dostępne są opcje dotyczące plików konfiguracyjnych pakietu
--force-confmiss
--force-confnew
--force-confold
--force-confdef
--force-confmiss
nie będzie działać, gdy wersja pakietu się nie zmieni. Ze strony podręcznika
Jeśli plik konfiguracyjny został zmodyfikowany, a wersja w pakiecie uległa zmianie, zawsze instaluj nową wersję bez monitowania, chyba że podano również opcję --force-confdef , w którym to przypadku preferowane jest działanie domyślne.
--force-confmiss
współpracuje z brakującymi plikami Conffiles. On również zawiedzie, gdy wersja się nie zmieni. Cytując stronę podręcznika
confmiss: Jeśli brakuje pliku i wersja w pakiecie uległa zmianie, zawsze instaluj brakujący plik bez monitowania. Jest to niebezpieczne, ponieważ oznacza to niezachowanie zmiany (usunięcia) dokonanej w pliku
--force-confold
zachowa zmodyfikowaną wersję tylko w przypadku zmiany wersji . W przypadku tego samego pakietu również się nie powiedzie. Cytując stronę podręcznika
confold: Jeśli plik konfiguracyjny został zmodyfikowany, a wersja w pakiecie uległa zmianie, zawsze zachowuj starą wersję bez monitowania, chyba że podano również opcję --force-confdef , w takim przypadku preferowana jest akcja domyślna.
--force-confdef
również się nie powiedzie, ponieważ domyślną akcją jest zachowanie starszego pliku (wskazany w komunikacie pokazanym za pomocą --force-confask
. Ma linię, (Y/I/N/O/D/Z) [default=N]
co oznacza, że zachowanie jest domyślne. Patrz wyżej). A jeśli --force-confnew
jest określony, ale wersja się nie zmienia, to też nie będzie działać. Cytując stronę podręcznika
confdef: Jeśli plik konfiguracyjny został zmodyfikowany, a wersja w pakiecie uległa zmianie, zawsze wybieraj akcję domyślną bez monitowania. Jeśli nie ma domyślnej akcji, przestanie pytać użytkownika, chyba że podano także --force-confnew lub --force-confold , w którym to przypadku użyje go do podjęcia ostatecznej akcji.
Działa tylko --force-confask
, ponieważ wyraźnie zadaje ci pytanie, nawet jeśli wersja jest taka sama. Cytując stronę podręcznika
confask: Jeśli plik konfiguracyjny został zmodyfikowany, zawsze proponuj zastąpienie go wersją w pakiecie, nawet jeśli wersja w pakiecie nie uległa zmianie (od dpkg 1.15.8). Jeśli podano również dowolne z opcji --force-confmiss , --force-confnew , --force-confold lub --force-confdef , zostanie ono użyte do podjęcia ostatecznej akcji.
Mam nadzieję, że to pomoże.
foo
, co jeślibar
zależy od,foo
a nie chcę usunąćbar
?