La risposta fornita da Ryan Thomson stava andando nella direzione giusta. Tuttavia non sarebbe in grado di svolgere il lavoro (il motivo dettagliato è riportato di seguito).
Il modo corretto (e più semplice) per farlo è usare -o
with apt
per passare l'opzione dpkg e forzare dpkg
a chiederti se vuoi conservare i file di configurazione modificati o quelli originali. Il comando sarà così:
sudo apt-get --reinstall -o Dpkg::Options::="--force-confask" install foo
Questo ti farebbe una domanda del genere
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] ?
Devi premere Y o I per installare il file di configurazione originale del manutentore del pacchetto. Puoi anche premere D per vedere quali sono le modifiche o avviare una shell di root con l'opzione Z per sistemarti.
Nota: dopo la sostituzione, troverai il tuo file modificato comeat /etc/foo/foo.conf.dpkg-old
Perché altre opzioni non funzionerebbero?
Perché le altre opzioni in dpkg non funzionano bene. Le opzioni che si occupano dei file di configurazione di un pacchetto sono
--force-confmiss
--force-confnew
--force-confold
--force-confdef
--force-confmiss
non funzionerebbe quando la versione del pacchetto non cambia. Dalla pagina man
Se un conffile è stato modificato e la versione nel pacchetto è cambiata, installare sempre la nuova versione senza chiedere conferma , a meno che non venga specificato anche --force-confdef , nel qual caso si preferisce l'azione predefinita.
--force-confmiss
funziona con i conffile mancanti. Anche fallirà quando la versione non è cambiata. Citando la pagina di manuale
confmiss: se manca un conffile e la versione nel pacchetto è cambiata, installare sempre il conffile mancante senza chiedere conferma. Questo è pericoloso, poiché significa non conservare una modifica (rimozione) apportata al file
--force-confold
manterrà la versione modificata solo se la versione è cambiata . Anche per lo stesso pacchetto fallirà. Citando la pagina di manuale
confold: se un conffile è stato modificato e la versione nel pacchetto è cambiata, mantenere sempre la versione precedente senza chiedere conferma , a meno che non venga specificato anche --force-confdef , nel qual caso si preferisce l'azione predefinita.
--force-confdef
fallirà anche perché l'azione predefinita è quella di conservare il file più vecchio (indicato dal messaggio mostrato con --force-confask
. Ha una riga (Y/I/N/O/D/Z) [default=N]
che significa che il mantenimento è predefinito. Vedi sopra). E se --force-confnew
viene specificato ma la versione non cambia, anche quella non funzionerà. Citando la pagina di manuale
confdef: se un conffile è stato modificato e la versione nel pacchetto è cambiata, scegliere sempre l'azione predefinita senza richiedere conferma. Se non vi è alcuna azione predefinita, si interromperà a chiedere all'utente a meno che non sia stato fornito anche --force-confnew o --force-confold , nel qual caso lo utilizzerà per decidere l'azione finale.
Funzionerà solo --force-confask
, perché ti farà esplicitamente la domanda anche quando la versione è la stessa. Citando la pagina di manuale
confask: se un conffile è stato modificato, offri sempre di sostituirlo con la versione nel pacchetto, anche se la versione nel pacchetto non è cambiata (da dpkg 1.15.8). Se viene fornito anche uno di --force-confmiss , --force-confnew , --force-confold o --force-confdef , verrà utilizzato per decidere l'azione finale.
Spero che possa aiutare.
foo
, cosa succede sebar
dipendefoo
e non desidero rimuoverebar
?