在升级过程中区分配置文件的真正本地修改

在升级过程中区分配置文件的真正本地修改

如何查看 conffile 的当前状态与软件包安装时的干净状态之间的差异?

我正在将 Ubuntu Server 从 12.04 升级到 14.04。安装程序声称本地更改了几个配置文件:

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] ?

(例子来源:https://raphaelhertzog.com/2010/09/21/debian-conffile-configuration-file-managed-by-dpkg/

当我选择D检查差异时,我的当前配置文件将与干净状态进行比较新的软件包版本。

有时,软件包版本之间会有很多行更改,但肯定不是本地修改。我想过滤掉这些更改并显示真正的本地修改。否则,很容易忽略重要的单行本地修改。

例如php.ini根据以下内容更改了 447 行:

diff /usr/share/php5/php.ini-production /etc/php5/apache2/php.ini | grep -E '^[<>]' -c

答案1

在修改配置文件之前,请将其存档(备份)。

一个可能的系统将导致...

/etc
/etc/.archives
/etc/.archives/bash.bashrc.00
/etc/.archives/bash.bashrc.01
/etc/bash.bashrc

/etc/.archives/bash.bashrc.00 将是原始的分发版本。如果您不介意长名称,您可以使用日期而不是数字...

/etc/.archives/bash.bashrc.20161206.003200

您也可以编写一个脚本来使这变得更容易。

答案2

  1. 按下Z进入 shell。

  2. 获取提供该文件的软件包的名称。在系统升级期间,apt命令dpkg已经指向新版本,因此您需要另一个来源来检查以前的版本:打开http://packages.ubuntu.com/并输入文件名搜索包裹内容. 选择您要升级的系统版本(“发行版”)。

    如果未找到任何内容,请返回冲突解决界面 ( exit) 并按D显示差异。检查 diff 标头,它会显示所需的文件名:

    --- /etc/php5/apache2/php.ini 2014-01-08 00:58:08.000000000 +0100
    +++ /usr/share/php5/php.ini-production 2016-10-03 15:14:37.000000000 +0200
    

    在这种情况下,它是/usr/share/php5/php.ini-production。在网页上搜索此文件。

  3. 选择正确的包名称、系统架构并获取包的 URL(下面的链接您可以从...下载所请求的文件...)。

  4. 下载该程序包。

    wget http://security.ubuntu.com/ubuntu/pool/main/p/php5/php5-common_5.3.10-1ubuntu3.25_amd64.deb
    
  5. 提取您想要比较的文件。

    dpkg-deb --fsys-tarfile php5-common_5.3.10-1ubuntu3.25_amd64.deb | tar -x ./usr/share/php5/php.ini-production
    
  6. 检查差异。

    diff -u /etc/php5/apache2/php.ini ./usr/share/php5/php.ini-production | less
    

该说明基于https://askubuntu.com/a/627018/250300

相关内容