Jak odzyskać domyślny plik konfiguracyjny Samby (system oparty na Debianie)?

11

Niedawno zainstalowałem Sambę i pomieszałem ten /etc/samba/smb.confplik. Jak odzyskać oryginalną konfigurację?

Frew Schmidt
źródło
1
sudo cp /usr/share/samba/smb.conf /etc/samba/smb.conf
ThorSummoner,
dlaczego wszyscy używają symboli zastępczych dla nazwy pakietu?
endolith

Odpowiedzi:

8

Edytowane :

Zauważyłem to w pytaniu o awarię serwera . Jeśli dpkg-reconfigure footo nie działa, użyj tego:

  1. Usuń uszkodzony plik konfiguracyjny lub zmień jego nazwę.

    sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.broken
    
  2. Poproś o wymianę od dpkg.

    sudo dpkg -i --force-confmiss /path/to/samba-common.deb
    

Oznacza dpkgto zamianę brakujących plików konfiguracyjnych na pliki z .deb. Możesz znaleźć oryginalny pakiet .deb /var/cache/apt/archiveslub możesz użyć nowej kopii tej samej wersji z repozytoriów twojej dystrybucji.

dpkg -i --force-confnew foo.deb

Mówi dpkgto o zastąpieniu istniejących plików konfiguracyjnych plikami z .deb. Możesz znaleźć oryginalny pakiet .deb /var/cache/apt/archiveslub możesz użyć nowej kopii tej samej wersji z repozytoriów twojej dystrybucji.

quack quixote
źródło
Ta flaga wymusza tylko dpkgzastąpienie pliku konfiguracyjnego, jeśli w przeciwnym razie poprosiłby o pozwolenie . To nie nie sprawiają, że w magiczny sposób odtworzyć dziewiczych pliki konfiguracyjne z opakowania.
Teddy
wierzę, że masz rację. ok, więc chcesz --force-confmisszamiast tego. w tym konkretnym przypadku, np. samba, myślę, --force-confnewże wykonałby nadpisanie, ale masz rację, że zależy to od szczegółów skryptu konfiguracji pakietu.
quack quixote
7

Krótka odpowiedź: /usr/share/samba/smb.confto oryginalna wersja pliku smb.conf.

W obliczu tej sytuacji w przypadku dowolnego pakietu robię jedną z następujących czynności:

  1. Sprawdź, czy w edytorze znajdują się kopie zapasowe oryginalnej wersji . Używam Emacsa, który zwykle pozostawia foo~pliki, i ustawiłem opcję numerycznej kontroli wersji, więc oryginalna wersja jest zawsze foo.~1~. Ale może zrobiłeś to w inny sposób lub użyłeś innego edytora. Rozważ sprawdzenie konfiguracji edytora, aby włączyć tę funkcję, jeśli jeszcze tego nie zrobiłeś; warto się w to przyzwyczaić.

  2. Ponownie skonfiguruj pakiet za pomocą dpkg-reconfigure PACKAGENAME. Czasami to załatwia sprawę. Z mojego doświadczenia wynika, że ​​rzadko działa; zależy to od sposobu, w jaki pakiet tworzy pliki konfiguracyjne.

  3. Wyczyść i ponownie zainstaluj pakiet (z apt-get purge packagenamedodanym apt-get install packagename). To zawsze powinno działać.

    W skrajnych przypadkach musisz po wyczyszczeniu ręcznie wyszukać i usunąć pliki konfiguracyjne przed ponowną instalacją pakietu, ale jest to rzadkie. Spowoduje to jednak wyeliminowanie wszelkich innych danych i / lub plików konfiguracyjnych pakietu, co nie zawsze jest dopuszczalne.

  4. Pobierz kod źródłowy dla package ( apt-get source foo) i sprawdź, czy oryginalny plik konfiguracyjny istnieje tam jako plik. Może się jednak zdarzyć, że plik konfiguracyjny nie istnieje wcześniej, ale jest tworzony podczas instalacji przez skrypt poinstalacyjny pakietu.

  5. Sprawdź skrypt postinst dla pakietu ( /var/lib/dpkg/info/foo.postinst), aby dowiedzieć się, gdzie tworzy plik konfiguracyjny i jak to robi. Następnie spróbuj ręcznie powtórzyć proces. To trochę pracy i nie zawsze jest łatwe.

Miś
źródło
To powinno być wyższe. Dla mnie było to po prostu sudo cp /usr/share/samba/smb.conf /etc/samba/smb.confzastąpienie mojego pliku skonfiskowanego pliku oryginałem.
edzillion
2

dpkg-reconfigure <package> domyślnie nie zmodyfikuje zmienionych plików conf.

Prawdopodobnie najłatwiejszym sposobem na zrobienie tego, jeśli nadal masz pakiet w apt cache, jest uruchomienie

dpgk -i --force-confask /var/cache/apt/archives/<package file name>

gdzie nazwa pliku pakietu jest zwykle podobna <package name>_<version>.deb(wystarczy użyć uzupełniania tabulatorami). Zostanie uruchomiony ten sam proces, co apt-upgrade i zapyta cię, co chcesz zrobić, gdy tylko znajdzie zmieniony plik conf. Po prostu wpisz Nza każdym razem. dpkg zainstaluje wersję pakietu pliku conf z .dpkg-distna końcu nazwy pliku. Następnie możesz użyć vimdiffinnego narzędzia do scalania, aby porównać różnice i zmodyfikować plik conf.

naught101
źródło
Brak pakietów w /var/cache/apt/archives/...
endolith
1

Możesz wyodrębnić deb i pobrać oryginalny plik:

ar p packagename.deb data.tar.gz | tar zx
John T.
źródło
Korzystanie dpkg-sourcejest łatwiejsze, a korzystanie apt-get source PACKAGEjest znacznie łatwiejsze.
Teddy
1
@ Teddy: tylko jeśli na początku znajduje się domyślny plik konfiguracyjny w pakiecie źródłowym. wiele pakietów instaluje plik konfiguracyjny specyficzny dla dostawcy; niektóre automatycznie generują swoje pliki konfiguracyjne w packagename.postinstskrypcie.
quack quixote
1

Najlepszym sposobem (otrzymanym z #ubuntu) jest zrobienie tego:

dpkg-reconfigure <package>

W tym przypadku to oznacza

dpkg-reconfigure samba-common
Frew Schmidt
źródło
1

Możesz przywrócić oryginalny smb.confplik konfiguracyjny w następujący sposób:

# cp /usr/share/samba/smb.conf /etc/samba/smb.conf
# dpkg-reconfigure samba-common

Jest to w zasadzie to, co robi proces instalacji oryginalnego pakietu (w Debian Squeeze).

Spowoduje to zastąpienie bieżącej smb.conf, więc najpierw wykonaj kopię zapasową, jeśli nie chcesz jej utracić.

Totor
źródło
1
Dziękujemy za podanie nazwy pakietu zawierającego ten plik. „sudo aptitude purge samba-common; sudo aptitude install samba” był moim wyborem, ale odpowiedź Totora wygląda na najmniej przerażającą i najbardziej Debianową z wyborów.
Martin Dorey,
0

Możesz ponownie pobrać i wyodrębnić zawartość pakietu deb

Mahmoud Hossam
źródło
1
Jest to zdecydowanie zbyt niski sposób, aby to zrobić
Frew Schmidt,
4
nie oznacza, że ​​to nie zadziała
John T
-2
$ sudo cp /usr/share/samba/smb.conf /etc/samba/smb.conf

i

$ sudo dpkg --configure -a

wykona robotę.

Kushagra Karira
źródło
Jest to prawie identyczne z wszystkimi innymi odpowiedziami tutaj. Jest także w poście z '14.
var firstName