Linux: jak przywrócić plik konfiguracyjny za pomocą apt-get / aptitude?

37

Od czasu do czasu tracę plik konfiguracyjny „/etc/mysql/my.cnf” i chcę go przywrócić. Plik należy do pakietu, mysql-commonktóry jest potrzebny do niektórych ważnych funkcji, więc nie mogę tego po prostu purge && install: zależności zostałyby również odinstalowane (lub jeśli mogę je tymczasowo zignorować, nie będą działać).

Czy istnieje sposób na przywrócenie pliku konfiguracyjnego z pakietu bez cofania arusuwania pliku pakietu?

dpkg-reconfigure mysql-common nie przywrócił go.

kolypto
źródło
zawsze wyodrębniałem pliki pakietów za pomocą 7zip ( 7z x /path/to/foo.deba potem 7z x data.tar.gz) ....
quack quixote
Osobiście lubię instalować coś takiego jak etckeeper w moim systemie zaraz po instalacji. W ten sposób wszystkie zmiany i wersje plików konfiguracyjnych są zapisywane. ( serverfault.com/questions/13091/advice-on-storing-etc-in-a-vcs )
Zoredache
4
To właśnie, dzieciaki, mamy kopie zapasowe ...
womble
1
@womble: w rzeczywistości sytuacja jest nieco inna: mam plik konfiguracyjny, ale został on przeze mnie zmodyfikowany. Nie korzystałem z conf.dfolderów, a kiedy opiekun pakietu aktualizuje go, proces aktualizacji naprawdę chce wyświetlać komunikaty „zmodyfikowano plik konfiguracyjny” :) Przyczyna nie jest tak ważna, aby o tym wspomnieć, więc postanowiłem uprościć moje pytanie
kolypto

Odpowiedzi:

39

dpkg -i --force-confmiss mysql-common.debodtworzy wszelkie brakujące pliki konfiguracyjne, tj. /etc/mysql/my.cnfw twoim przypadku.

TRS-80
źródło
8
Dzięki! Na Ubuntu był tosudo dpkg --force-confmiss -i /var/cache/apt/archives/mysql-common*.deb
kolypto
10

W Debian Squeeze - przynajmniej - możemy to zrobić w ten sposób, po su- lub sudodla Ubuntu -

aptitude install -o Dpkg::Options::=--force-confmiss mysql-server

To zajmie się zależnościami mysql-serveri zresetuje wszystkie brakujące pliki conf partii, w tym mysql-common. Sprzeczne (pozostałe) pliki zostaną poproszone o zachowanie lub zresetowanie.

Niestety istnieje błąd w umiejętnościach i

aptitude purge -o Dpkg::Options::=--force-all mysql-server

nie zadziała . Więc musimy to zrobić pojedynczo

dpkg --force-all --purge  mysql-common  mysql-server  mysql-client …

Spowoduje to usunięcie dowolnego pliku konfiguracyjnego , oryginalnego lub zmodyfikowanego, ale pliki niestandardowe zostaną zachowane z komunikatem na ekranie. Przy okazji pamiętaj, że dpkgrozpoznaje --force-confnewi --force-confoldopcje.

Aby mysql-serverwydrukować listę zależności na ekranie:

aptitude --simulate remove mysql-server
Jean Montané
źródło
9

Żadne z powyższych nie działało dla mnie - być może nieaktualne - w każdym razie znalazłem takie rozwiązanie:

apt-get -o Dpkg::Options::="--force-confmiss" install --reinstall mysql-common
Dave Hilditch
źródło
To polecenie, którego należy użyć, ponieważ aptitude nie jest domyślny. Nie zapomnij o sudo :)
nsn
3

Domyślne pliki konfiguracyjne mysql można znaleźć w /usr/share/doc/mysql-server-5.0/examples/lub podobnym. Może to być wszystko, czego potrzebujesz, chyba że masz włączone jakieś naprawdę specjalne / ezoteryczne konfiguracje.

sybreon
źródło
0

W moim /etc/mysql/katalogu mam my.cnf.origplik, który zawiera oryginalną zawartość my.cnf.

Nie jestem pewien, skąd /etc/mysql/my.cnf.origpochodzi - to znaczy, czy ja go stworzył, czy instalacja mysql to zrobił. Pamiętam, jak kiedyś sprawdziłem, czy było dokładnie tak samo jakmy.cnf

Jeśli masz coś takiego i nie my.cnf możesz skopiować jednego na drugi.

sudo cp /etc/mysql/my.cnf.orig /etc/mysql/my.cnf

W każdym razie jest to prosty plik tekstowy o długości 3897 bajtów, który można skopiować i wkleić z ogólnego pliku konfiguracyjnego MySQL.

Będzie to dobry pomysł raz przywrócić swój /etc/mysql/my.cnfzrobić kopię, dzięki czemu można je łatwo przywrócić w przyszłości.

pavium
źródło
Zwykle tworzę kopię zapasową oryginalnych plików konfiguracyjnych, kopiując je do /path/to/foo.conf.orig... jeśli są one automatycznie instalowane, są tworzone, gdy apt-get instaluje nową wersję i wykrywa, że ​​zmieniłeś oryginalny plik konfiguracyjny.
quack quixote
Hmm, im więcej o tym myślę, tym bardziej wydaje mi się, że utworzyłem /etc/mysql/my.cnf.origkopię zapasową, której nie zastąpiłaby nowa instalacja. Ale umieszczenie go w zupełnie innym miejscu jest dobrym pomysłem.
pavium
Starałem się być ogólny; for my.cnf Skopiowałbym go /etc/mysql/my.cnf.orig. Następnie, oczywiście, wykonaj kopię zapasową tarballa /etc. :)
quack quixote
0

Musisz ponownie zainstalować mysql-common za pomocą tego polecenia:apt-get install --reinstall mysql-common

Nikolay Chuprina
źródło
Czy to rzeczywiście przywraca brakujące pliki konfiguracyjne?
poolie
1
Nie, to nie działa.
chrishiestand