我有一个运行Ubuntu 14.04.4 LTS的VPS; 它与OVH的Plesk整体安装在一起。 我正确地做了apt-get upgrade ,并且在某个时候我有一个关于PAM的消息。 该系统是法文,但基本上它说:
/etc/pam.d/common-{auth,account,password,session至less有一个文件在本地修改。 请注明是否应该丢弃本地更改并坚持标准configuration。 否则,你将不得不自己configurationauthentication系统。
我决定保留本地的变化,APT也报道:
pam-auth-update: Local modifications to /etc/pam.d/common-*, not updating. pam-auth-update: Run pam-auth-update --force to override.
我想知道本地更改和更新想要设置的文件之间有什么区别。 我怎样才能做到这一点?
因为我不想在系统上改变PAM的实时configuration,所以我最终使用chroot jail设置了一个默认的PAMconfiguration,这样我就可以查看它们之间的区别了:
# lsb_release --codename Codename: trusty # debootstrap trusty /tmp/foo I: Retrieving Release I: Retrieving Release.gpg ...
查看差异:
for f in common-{account,auth,password,session,session-noninteractive}; do echo ==== $f ==== diff --unified /etc/pam.d/$f /tmp/foo/etc/pam.d/$f done
dpkg应该会提示并允许您在configuration文件发生更改的情况下查看diff(与D ):
Configuration file `/etc/bash.bashrc' ==> Modified (by you or by a script) since installation. ==> Package distributor has shipped an updated version. What would you like to do about it ? Your options are: Y or I : install the package maintainer's version N or O : keep your currently-installed version D : show the differences between the versions Z : start a shell to examine the situation The default action is to keep your current version. *** bash.bashrc (Y/I/N/O/D/Z) [default=N]
更新:从下面的注释中可以看出,问题是不丢弃完整configuration文件(这是触发上述行为的地方)的软件包,而是使用脚本方式生成configuration文件的文件。 Debian政策手册描述如下:
E.2function齐全的维护者脚本configuration处理
对于包含特定于站点的信息的文件(例如主机名和networking细节等),最好在包的
postinst脚本中创build该文件 。这通常将涉及检查系统的其余部分的状态以确定值和其他信息,并且可能涉及提示用户一些不能以其他方式获得的信息。
使用这种方法时,应该考虑一些重要的问题:
如果您在生成configuration文件的程序中发现错误,或者文件的格式从一个版本更改为下一个版本,则必须安排
postinst脚本来做一些明智的事情 – 通常这意味着编辑已安装的configuration文件删除问题或更改语法。 您必须非常小心地执行此操作,因为用户可能已经更改了文件,也许是为了解决您的脚本正在尝试处理的问题 – 您将不得不检测这些情况并正确处理它们。如果你确实按照这个方法做了这样的
packageconfig,那么通过一个叫做packageconfig的约定,把生成configuration文件的程序作为一个单独的程序放在/usr/sbin是一个好主意,然后从安装后的脚本中运行。packageconfig程序不应该毫无疑问地覆盖现有的configuration – 如果它的操作模式是第一次设置一个软件包(而不是以后的任何重新configuration),你应该检查configuration是否已经存在,--force标志覆盖它。
这意味着您需要依赖PAM /usr/sbin/pam-auth-update的packageconfig程序来提供干运行或预览选项。
而据我可以告诉/usr/sbin/pam-auth-update不提供这样的function。
您可以复制整个目录,然后在每个文件上运行diff以检查差异
cp -r /etc/pam.d/ /home/<user>/ pam-auth-update --force diff /etc/pam.d/ /home/<user>/pam.d
一旦仔细检查每一个差异,你就可以决定是否要保留这些变化或恢复到原来的状态。 还原就像将文件复制回原来的位置一样简单