Я недавно установил Samba и испортил файл /etc/samba/smb.conf
. Как вернуть исходную конфигурацию?
8 ответов
Отредактировано:
Обнаружил это на вопрос о сбое сервера. Если dpkg-reconfigure foo
не работает, используйте это:
Удалите или переименуйте испорченный файл конфигурации.
sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.broken
Запросить замену у
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
, или вы можете использовать свежую копию той же версии из репозиториев вашего дистрибутива.
Краткий ответ: /usr/share/samba/smb.conf
- это оригинальная версия файла smb.conf.
Когда я сталкиваюсь с такой ситуацией для любого пакета, я делаю одно из следующего:
Проверьте наличие файлов резервной копии оригинальной версии в вашем редакторе. Я использую Emacs, который обычно оставляет файлы
foo~
, и я установил параметр числового контроля версий, чтобы исходная версия всегда былаfoo.~1~
. Но, возможно, вы сделали это другим способом или использовали какой-то другой редактор. Рассмотрите возможность проверки конфигурации вашего редактора, чтобы включить эту функцию, если вы этого еще не сделали; это хорошая привычка.Переконфигурируйте пакет с помощью
dpkg-reconfigure PACKAGENAME
. Иногда это делает трюк. По моему опыту это редко работает; это зависит от того, как пакет создает свои файлы конфигурации.Очистите и переустановите пакет (с помощью
apt-get purge packagename
за которым следуетapt-get install packagename
). Это всегда должно работать.
В крайних случаях, после очистки вы должны вручную выследить и удалить файлы конфигурации перед переустановкой пакета, но это происходит редко. Однако это исключит любые другие данные и / или файлы конфигурации для пакета, и это не всегда приемлемо.Загрузите исходный код для пакета (
apt-get source foo
) и посмотрите, существует ли там оригинальный файл конфигурации в виде файла. Тем не менее, может случиться так, что файл конфигурации не существует заранее, но создается при установке сценарием после установки пакета.Проверьте сценарий postinst для пакета (
/var/lib/dpkg/info/foo.postinst
), чтобы узнать, где он создает файл конфигурации и как он это делает. Затем попробуйте повторить процесс вручную. Это немного работы, и не всегда легко.
dpkg-reconfigure <package>
по умолчанию не изменяет измененные файлы conf.
Вероятно, самый простой способ сделать это, если у вас все еще есть пакет в кэше 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.
Вы можете восстановить исходный файл конфигурации smb.conf
следующим образом:
# cp /usr/share/samba/smb.conf /etc/samba/smb.conf
# dpkg-reconfigure samba-common
Это в основном то, что делает оригинальный процесс установки пакета (в Debian Squeeze).
Это перезапишет текущий smb.conf
, поэтому сначала сделайте резервную копию, если вы не хотите ее потерять.
Вы можете извлечь deb и получить оригинальный файл:
ar p packagename.deb data.tar.gz | tar zx
Вы можете загрузить и извлечь содержимое пакета deb
Лучший способ (полученный из #ubuntu) - сделать это:
dpkg-reconfigure <package>
В этом случае это означает
dpkg-reconfigure samba-common
$ sudo cp /usr/share/samba/smb.conf /etc/samba/smb.conf
а также
$ sudo dpkg --configure -a
сделаю работу.