Skip to content

Commit

Permalink
updater: add flags to apt conf to auto-resolve conffiles conflicts
Browse files Browse the repository at this point in the history
fixes QubesOS/qubes-issues/issues/9072

(cherry picked from commit 009d2e4)
  • Loading branch information
piotrbartman authored and marmarek committed Nov 5, 2024
1 parent ae139f9 commit bb8436f
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 4 deletions.
10 changes: 6 additions & 4 deletions vmupdate/agent/entrypoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,12 @@ def get_package_manager(os_data, log, log_handler, log_level, no_progress):
If appropriate python package is not installed or `no_progress` is `True`
cli based version is returned.
"""
requirements = {}
# plugins MUST be applied before import anything from package managers.
# in case of apt configuration is loaded on `import apt`.
for plugin in plugins.entrypoints:
plugin(os_data, log, requirements=requirements)

if os_data["os_family"] == "Debian":
try:
from source.apt.apt_api import APT as PackageManager
Expand All @@ -82,10 +88,6 @@ def get_package_manager(os_data, log, log_handler, log_level, no_progress):
raise NotImplementedError(
"Only Debian, RedHat and ArchLinux based OS is supported.")

requirements = {}
for plugin in plugins.entrypoints:
plugin(os_data, log, requirements=requirements)

pkg_mng = PackageManager(log_handler, log_level)
pkg_mng.requirements = requirements
return pkg_mng
Expand Down
37 changes: 37 additions & 0 deletions vmupdate/agent/source/plugins/apt_keep_old_conffiles.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# coding=utf-8
#
# The Qubes OS Project, http://www.qubes-os.org
#
# Copyright (C) 2024 Piotr Bartman <prbartman@invisiblethingslab.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
# USA.

APT_CONF = "/etc/apt/apt.conf.d/01qubes-update"


def apt_keep_old_conffiles(os_data, log, **kwargs):
"""
Always chose default behavior for when conflicts in apt conffiles appears.
"""
if os_data["os_family"] != "Debian":
return

option = '''Dpkg::Options {
"--force-confdef";
"--force-confold";
}'''
with open(APT_CONF, "w") as file:
file.write(f'\n{option}\n')

0 comments on commit bb8436f

Please sign in to comment.