Answers:
编辑:
在serverfault问题上发现了这一点。如果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
,或者可以使用发行版存储库中相同版本的全新副本。
dpkg
在本来需要许可的情况下才强制覆盖配置文件。它并没有让奇迹般地重新从包装原始配置文件。
--force-confmiss
代替。在这种特殊情况下,例如samba,我认为--force-confnew
会执行覆盖,但是您说对了,它取决于软件包配置脚本的详细信息。
简短的答案:/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
),以了解在何处创建配置文件以及如何执行配置文件。然后尝试手动重复该过程。这是一项工作,并不总是那么容易。
sudo cp /usr/share/samba/smb.conf /etc/samba/smb.conf
将原始的conf文件覆盖掉的一种情况。
dpkg-reconfigure <package>
默认情况下不会修改已更改的conf文件。
如果您仍然在apt缓存中保留包,则可能是最简单的方法
dpgk -i --force-confask /var/cache/apt/archives/<package file name>
软件包文件名通常类似于<package name>_<version>.deb
(仅使用制表符补全)。这将与apt升级过程相同,并且在找到更改后的conf文件时询问您要做什么。只要N
在每个提示下输入即可。dpkg将.dpkg-dist
在文件名末尾安装conf文件的软件包版本。然后,您可以使用vimdiff
或其他合并工具比较差异,并修改读取的conf文件。
/var/cache/apt/archives/
……
您可以提取deb并获取原始文件:
ar p packagename.deb data.tar.gz | tar zx
dpkg-source
更容易,并且使用apt-get source PACKAGE
是多容易。
packagename.postinst
脚本。
最好的方法(从#ubuntu获得)是这样做的:
dpkg-reconfigure <package>
在这种情况下,这意味着
dpkg-reconfigure samba-common
您可以smb.conf
像这样恢复原始配置文件:
# cp /usr/share/samba/smb.conf /etc/samba/smb.conf
# dpkg-reconfigure samba-common
基本上,这就是原始软件包安装过程的作用(在Debian Squeeze上)。
这将覆盖您当前的内容smb.conf
,因此,如果您不想丢失它,请先进行备份。
$ sudo cp /usr/share/samba/smb.conf /etc/samba/smb.conf
和
$ sudo dpkg --configure -a
会做的工作。
sudo cp /usr/share/samba/smb.conf /etc/samba/smb.conf