如何在apt-get升级或安装期间自动保留配置文件

130次阅读
没有评论

问题描述

当在服务器上执行apt-get update; apt-get upgrade -y命令时,遇到以下消息:

Setting up sudo (1.8.16-0ubuntu1.5) ...
Configuration file '/etc/sudoers'
==> 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.
*** sudoers (Y/I/N/O/D/Z) [default=N] ?
Setting up ubuntu-minimal (1.361.1) ...

我知道debconf可以用于配置包,比如MySQL,以回答提示的问题。

请问我应该使用哪个Linux程序/模块/函数等来准备对这个提示的回答?

如果有的话,我真的很想知道是否可以通过Ansible来执行此操作。另外,还有一个BASH脚本。

请注意:我所有的发行版都是通过IaC进行的,因此自动化至关重要。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

在使用apt-get命令时,可以通过传递选项给dpkg来处理配置选项。通常我们会这样做:

apt-get install -y --no_install_recommends -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' <package_name>

当使用Ansible时,可以这样做:

apt:
  pkg: "{{ item }}"
  only_upgrade: yes
  install_recommends: no
  force: yes
  dpkg_options: 'force-confdef,force-confold'
  state: latest
with_items:
  - <package_name>

有关Ansible apt模块选项的更多详细信息,请参考这里

方案2

请注意,这种方法可能会导致配置文件的更改丢失。在执行之前,请确保已备份配置文件。
另一种方法是在执行apt-get命令之前备份配置文件,并在升级或安装完成后将其还原。这可以通过编写一个BASH脚本来实现。以下是一个示例脚本:

#!/bin/bash
# 备份配置文件
cp /etc/sudoers /etc/sudoers.backup
# 执行apt-get命令
apt-get update
apt-get upgrade -y
# 还原配置文件
cp /etc/sudoers.backup /etc/sudoers

在这个示例中,我们首先使用cp命令备份了/etc/sudoers配置文件。然后,我们执行了apt-get updateapt-get upgrade -y命令来升级系统。最后,我们使用cp命令将备份的配置文件还原回原始位置。

请注意,这种方法可能会导致配置文件的更改丢失。在执行之前,请确保已备份配置文件,并在必要时手动合并更改。

以上是两种解决方案,你可以根据自己的需求选择其中之一来保留配置文件。

正文完