问题描述
当在服务器上执行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 update
和apt-get upgrade -y
命令来升级系统。最后,我们使用cp
命令将备份的配置文件还原回原始位置。
请注意,这种方法可能会导致配置文件的更改丢失。在执行之前,请确保已备份配置文件,并在必要时手动合并更改。
以上是两种解决方案,你可以根据自己的需求选择其中之一来保留配置文件。
正文完