diff --git a/vmupdate/agent/entrypoint.py b/vmupdate/agent/entrypoint.py index 1a82070..256e1d2 100755 --- a/vmupdate/agent/entrypoint.py +++ b/vmupdate/agent/entrypoint.py @@ -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 @@ -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 diff --git a/vmupdate/agent/source/plugins/apt_keep_old_conffiles.py b/vmupdate/agent/source/plugins/apt_keep_old_conffiles.py new file mode 100644 index 0000000..e208fef --- /dev/null +++ b/vmupdate/agent/source/plugins/apt_keep_old_conffiles.py @@ -0,0 +1,37 @@ +# coding=utf-8 +# +# The Qubes OS Project, http://www.qubes-os.org +# +# Copyright (C) 2024 Piotr Bartman +# +# 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')