Как мне вернуть файл конфигурации Samba по умолчанию (система на основе Debian)?

11

Я недавно установил Samba, и я испортил /etc/samba/smb.confфайл. Как вернуть исходную конфигурацию?

Фрю Шмидт
источник
1
sudo cp /usr/share/samba/smb.conf /etc/samba/smb.conf
ThorSummoner
Почему все используют заполнители для имени пакета?
эндолит

Ответы:

8

Отредактировано :

Обнаружил это на вопрос о сбое сервера . Если dpkg-reconfigure fooне работает, используйте это:

  1. Удалите или переименуйте испорченный файл конфигурации.

    sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.broken
    
  2. Запросить замену у dpkg.

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

Это говорит dpkgо замене отсутствующих файлов конфигурации файлами из .deb. Вы можете найти оригинальный пакет .deb /var/cache/apt/archivesили использовать свежую копию той же версии из репозиториев вашего дистрибутива.

dpkg -i --force-confnew foo.deb

Это говорит dpkgо необходимости перезаписывать существующие файлы конфигурации файлами из .deb. Вы можете найти оригинальный пакет .deb /var/cache/apt/archivesили использовать свежую копию той же версии из репозиториев вашего дистрибутива.

шарлатан
источник
Этот флаг заставляет dpkgперезаписывать файл конфигурации только в том случае, если бы в противном случае он запросил разрешение на это . Это не делает его волшебным образом воссоздавать нетронутые файлы конфигурации из пакета.
Тедди
Я верю, что ты прав. хорошо, так что вы хотите --force-confmissвместо этого. в этом конкретном случае, например, samba, я думаю, что он --force-confnewбудет выполнять перезапись, но вы правы, что это зависит от особенностей скриптов конфигурации пакета.
шарлатан-кихот
7

Краткий ответ: /usr/share/samba/smb.confоригинальная версия файла smb.conf.

Когда я сталкиваюсь с такой ситуацией для любого пакета, я делаю одно из следующего:

  1. Проверьте наличие файлов резервной копии оригинальной версии в вашем редакторе. Я использую Emacs, который обычно оставляет foo~файлы, и я установил параметр числового контроля версий, чтобы исходная версия всегда была foo.~1~. Но, возможно, вы сделали это другим способом или использовали какой-то другой редактор. Рассмотрите возможность проверки конфигурации вашего редактора, чтобы включить эту функцию, если вы этого еще не сделали; это хорошая привычка.

  2. Переконфигурируйте пакет с помощью dpkg-reconfigure PACKAGENAME. Иногда это делает трюк. По моему опыту это редко работает; это зависит от того, как пакет создает свои файлы конфигурации.

  3. Очистите и переустановите пакетapt-get purge packagenameпоследующим apt-get install packagename). Это всегда должно работать.

    В крайних случаях, после очистки вы должны вручную выследить и удалить файлы конфигурации перед переустановкой пакета, но это происходит редко. Однако это исключит любые другие данные и / или файлы конфигурации для пакета, и это не всегда приемлемо.

  4. Загрузите исходный код для пакета ( apt-get source foo) и посмотрите, существует ли там исходный файл конфигурации в виде файла. Тем не менее, может случиться так, что файл конфигурации не существует заранее, но создается при установке сценарием после установки пакета.

  5. Проверьте скрипт postinst для package ( /var/lib/dpkg/info/foo.postinst), чтобы узнать, где он создает файл конфигурации и как он это делает. Затем попробуйте повторить процесс вручную. Это немного работы, и не всегда легко.

Тедди
источник
Это должно быть выше. Для меня это был просто случай sudo cp /usr/share/samba/smb.conf /etc/samba/smb.confперезаписать мой испорченный файл conf оригиналом.
edzillion
2

dpkg-reconfigure <package> не будет изменять измененные файлы по умолчанию.

Вероятно, самый простой способ сделать это, если у вас все еще есть пакет в кэше apt, это запустить

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

где имя файла пакета обычно что-то вроде <package name>_<version>.deb(просто используйте завершение вкладки). Это будет проходить через тот же процесс, что и apt-upgrade, и спросит вас, что вы хотите сделать, когда обнаружит измененный файл conf. Просто введите Nпри каждом запросе. dpkg установит пакетную версию файла conf .dpkg-distв конце имени файла. Затем вы можете использовать vimdiffдругой инструмент слияния для сравнения различий и изменения файла read conf.

naught101
источник
Там нет пакетов, /var/cache/apt/archives/хотя ...
endolith
1

Вы можете извлечь deb и взять оригинальный файл:

ar p packagename.deb data.tar.gz | tar zx
Джон Т
источник
Использование dpkg-sourceлегче, и используя apt-get source PACKAGEэто гораздо проще.
Тедди
1
@Teddy: только если файл конфигурации по умолчанию включен в исходный пакет для начала. многие пакеты устанавливают конфигурационный файл, в значительной степени зависящий от производителя; некоторые автоматически генерируют свои конфигурационные файлы в packagename.postinstскрипте.
Квик-кихот
1

Лучший способ (полученный из #ubuntu) - сделать это:

dpkg-reconfigure <package>

В этом случае это означает

dpkg-reconfigure samba-common
Фрю Шмидт
источник
1

Вы можете восстановить исходный smb.confфайл конфигурации следующим образом:

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

Это в основном то, что делает оригинальный процесс установки пакета (в Debian Squeeze).

Это перезапишет текущее состояние smb.conf, поэтому сначала сделайте резервную копию, если не хотите ее потерять.

Totor
источник
1
Спасибо за предоставление имени пакета, который содержит этот файл. "sudo aptitude purge samba-common; sudo aptitude install samba" был моим выбором, но ответ Тотора выглядит наименее пугающим и наиболее Debian из всех вариантов.
Мартин Дори
0

Вы можете повторно загрузить и извлечь содержимое пакета deb

Махмуд Хоссам
источник
1
Это слишком низкий уровень способа сделать это
Фрю Шмидт
4
не значит, что это не сработает
Джон Т
-2
$ sudo cp /usr/share/samba/smb.conf /etc/samba/smb.conf

а также

$ sudo dpkg --configure -a

сделаю работу.

Кушагра Карира
источник
Это почти идентично всем остальным ответам здесь. Это также на пост от 14 года.
var firstName