Відповідь, яку надав Райан Томсон, спрямовувалась у правильний шлях. Але це все-таки не зможе виконати роботу (детальна причина наведена нижче).
Правильно (і найпростіший) спосіб зробити це використовує -o
з , apt
щоб передати DPKG опції і змусити dpkg
запитати вас , чи хочете ви , щоб зберегти змінені конфігураційні файли або оригінальні з них. Команда буде такою -
sudo apt-get --reinstall -o Dpkg::Options::="--force-confask" install foo
Це ставить вам таке питання
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] ?
Вам потрібно натиснути або Y, або I, щоб встановити оригінальний конфігураційний файл сервісного пакета. Ви навіть можете натиснути D, щоб побачити, що зміни, або запустити кореневу оболонку з параметром Z, щоб виправити себе.
Примітка. Після заміни ви знайдете змінений файл якat /etc/foo/foo.conf.dpkg-old
Чому інші варіанти не спрацюють?
Оскільки інші параметри в dpkg працюють не так добре. Параметри, які стосуються файлів конфігурації пакета, є
--force-confmiss
--force-confnew
--force-confold
--force-confdef
--force-confmiss
не працює, коли версія пакета не змінюється. З man-сторінки
Якщо conffile було змінено, а версія в пакеті змінилася, завжди встановлюйте нову версію без підказки, якщо не вказано також --force-confdef , і в цьому випадку краща дія за замовчуванням.
--force-confmiss
працює з відсутніми конфілерами. Це також не вдасться, коли версія не змінилася. Цитуючи man-сторінку
confmiss: Якщо conffile відсутній і версія в пакеті змінилася, завжди встановлюйте відсутній conffile, не вимагаючи. Це небезпечно, оскільки означає збереження змін (видалення), внесених у файл
--force-confold
збереже модифіковану версію, лише якщо її змінено . Для цього ж пакету він також вийде з ладу. Цитуючи man-сторінку
confold: Якщо conffile було змінено і версія в пакеті змінилася, завжди зберігайте стару версію без підказки, якщо не вказано також --force-confdef , і в цьому випадку переважна дія за замовчуванням.
--force-confdef
також не вдасться, оскільки дією за замовчуванням є збереження старшого файлу (вказується у повідомленні, показаному с --force-confask
. У ньому є рядок, (Y/I/N/O/D/Z) [default=N]
що означає, що збереження є за замовчуванням. Див. вище). І якщо --force-confnew
вказано, але версія не змінюється, це теж не буде працювати. Цитуючи man-сторінку
confdef: Якщо conffile було змінено і версія в пакеті змінилася, завжди вибирайте дію за замовчуванням без підказки. Якщо дії за замовчуванням не буде, він перестане запитувати користувача, якщо не буде вказано також --force-confnew або --force-confold , і в такому випадку він буде використовувати це для вирішення остаточної дії.
Тільки --force-confask
буде працювати, тому що явно поставить вам питання навіть тоді, коли версія однакова. Цитуючи man-сторінку
confask: Якщо conffile було змінено завжди пропонуйте замінити його на версію в пакеті, навіть якщо версія в пакеті не змінилася (оскільки dpkg 1.15.8). Якщо будь-яке з --force-confmiss , --force-confnew , --force-confold або --force-confdef також надане, воно буде використовуватися для вирішення остаточної дії.
Сподіваюся, що це допоможе.
foo
, що робити, якщо цеbar
залежить,foo
і я не хочу видаляти йогоbar
?