in src/core/src/package_managers/AptitudePackageManager.py [0:0]
def __init__(self, env_layer, execution_config, composite_logger, telemetry_writer, status_handler):
super(AptitudePackageManager, self).__init__(env_layer, execution_config, composite_logger, telemetry_writer, status_handler)
# Apt constants config
self.APT_SOURCES_LIST_PATH = '/etc/apt/sources.list'
self.APT_SOURCES_DIR_PATH = '/etc/apt/sources.list.d/'
self.APT_SOURCES_DIR_LIST_EXT = 'list'
self.APT_SOURCES_DIR_SRC_EXT = 'sources'
# Support to get packages and their dependencies
custom_source_timestamp = self.env_layer.datetime.timestamp().replace(":",".")
self.custom_source_list_template = os.path.join(execution_config.temp_folder, 'azgps-src-{0}-<FORMULA>.list'.format(str(custom_source_timestamp)))
self.custom_source_parts_dir_template = os.path.join(execution_config.temp_folder, 'azgps-src-{0}-<FORMULA>.d'.format(str(custom_source_timestamp)))
self.current_source_parts_dir = self.current_source_list = self.current_source_formula = None
self.current_source_parts_file_name = "azgps-src-parts.sources"
# Repo refresh
self.cmd_repo_refresh_template = 'sudo apt-get -q update <SOURCES>'
self.cmd_dist_upgrade_simulation_template = 'LANG=en_US.UTF8 sudo apt-get -s dist-upgrade <SOURCES> ' # Dist-upgrade simulation template - <SOURCES> needs to be replaced before use; sudo is used as sometimes the sources list needs sudo to be readable
# Accept EULA (End User License Agreement) as per the EULA settings set by user
optional_accept_eula_in_cmd = "ACCEPT_EULA=Y" if execution_config.accept_package_eula else ""
# Package evaluations
self.cmd_single_package_check_versions_template = 'apt-cache madison <PACKAGE-NAME>'
self.cmd_single_package_find_install_dpkg_template = 'sudo dpkg -s <PACKAGE-NAME>'
self.cmd_single_package_find_install_apt_template = 'sudo apt list --installed <PACKAGE-NAME>'
self.single_package_upgrade_simulation_cmd = '''DEBIAN_FRONTEND=noninteractive ''' + optional_accept_eula_in_cmd + ''' LANG=en_US.UTF8 apt-get -y --only-upgrade true -s install '''
self.single_package_dependency_resolution_template = 'DEBIAN_FRONTEND=noninteractive ' + optional_accept_eula_in_cmd + ' LANG=en_US.UTF8 apt-get -y --only-upgrade true -s install <PACKAGE-NAME> '
# Package installation
# --only-upgrade: upgrade only single package (only if it is installed)
self.single_package_upgrade_cmd = '''sudo DEBIAN_FRONTEND=noninteractive LANG=en_US.UTF8 ''' + optional_accept_eula_in_cmd + ''' apt-get -y --only-upgrade true install '''
self.install_security_updates_azgps_coordinated_cmd = '''sudo DEBIAN_FRONTEND=noninteractive LANG=en_US.UTF8 ''' + optional_accept_eula_in_cmd + ''' apt-get -y --only-upgrade true dist-upgrade <SOURCES> '''
# Package manager exit code(s)
self.apt_exitcode_ok = 0
# auto OS updates
self.update_package_list = 'APT::Periodic::Update-Package-Lists'
self.unattended_upgrade = 'APT::Periodic::Unattended-Upgrade'
self.os_patch_configuration_settings_file_path = '/etc/apt/apt.conf.d/20auto-upgrades'
self.update_package_list_value = ""
self.unattended_upgrade_value = ""
# Miscellaneous
os.environ['DEBIAN_FRONTEND'] = 'noninteractive' # Avoid a config prompt
self.set_package_manager_setting(Constants.PKG_MGR_SETTING_IDENTITY, Constants.APT)
self.STR_DPKG_WAS_INTERRUPTED = "E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem."
self.ESM_MARKER = "The following packages could receive security updates with UA Infra: ESM service enabled:"
# Ubuntu Pro Client pre-requisite checks.
self.__pro_client_prereq_met = False # This flag will be used to determine if Ubuntu Pro Client can be used for querying reboot status or get packages list.
self.ubuntu_pro_client = UbuntuProClient(env_layer, composite_logger)
self.check_pro_client_prerequisites()
self.ubuntu_pro_client_all_updates_cached = []
self.ubuntu_pro_client_all_updates_versions_cached = []
self.package_install_expected_avg_time_in_seconds = 90 # As per telemetry data, the average time to install package is around 81 seconds for apt.