diff --git a/ubuntu/99-network-manager.cfg b/ubuntu/01-end0.yaml similarity index 55% rename from ubuntu/99-network-manager.cfg rename to ubuntu/01-end0.yaml index cba4468..9c35fca 100644 --- a/ubuntu/99-network-manager.cfg +++ b/ubuntu/01-end0.yaml @@ -1,4 +1,6 @@ -#cloud-config network: version: 2 renderer: NetworkManager + ethernets: + end0: + dhcp4: true \ No newline at end of file diff --git a/ubuntu/build.py b/ubuntu/build.py index 1cda0f2..6c9579f 100755 --- a/ubuntu/build.py +++ b/ubuntu/build.py @@ -30,9 +30,10 @@ from build_kernel import build_kernel, reorganize_kernel_debs from build_dtb import build_dtb from build_deb import PackageBuilder, PackageNotFoundError, PackageBuildError +from release_debian_changelog_update import process_debian_trees from constants import * from datetime import date -from helpers import create_new_directory, umount_dir, check_if_root, check_and_append_line_in_file, cleanup_file, cleanup_directory, change_folder_perm_read_write, print_build_logs, start_local_apt_server, build_deb_package_gz, pull_debs_wget +from helpers import create_new_directory, umount_dir, check_if_root, check_and_append_line_in_file, cleanup_file, cleanup_directory, change_folder_perm_read_write, print_build_logs, start_local_apt_server, build_deb_package_gz, pull_debs_wget, extract_vmlinux from deb_organize import generate_manifest_map from pack_deb import PackagePacker from flat_meta import create_flat_meta @@ -94,6 +95,9 @@ def parse_arguments(): help='Generate Debian binary (default: False)') parser.add_argument('--pack-image', action='store_true', default=False, help='Pack system.img with generated debians (default: False)') + parser.add_argument('--release-prep-url', type=str, required=False, + help='prepares workspace for release (default: False)', + ) parser.add_argument('--pack-variant', type=str, choices=['base', 'qcom'], default='qcom', help='Pack variant (only base or qcom, default: qcom)') parser.add_argument('--packages-manifest-path', type=str, required=False, @@ -177,6 +181,7 @@ def parse_arguments(): IF_BUILD_KERNEL = args.build_kernel IF_GEN_DEBIANS = args.gen_debians IF_PACK_IMAGE = args.pack_image +IF_RELEASE_PREP_URL = args.release_prep_url IF_FLAT_META = args.flat_meta IS_CLEANUP_ENABLED = not args.nocleanup IS_PREPARE_SOURCE = args.prepare_sources @@ -235,6 +240,8 @@ def parse_arguments(): reorganize_kernel_debs(WORKSPACE_DIR, KERNEL_DEB_OUT_DIR) build_dtb(KERNEL_DEB_OUT_DIR, LINUX_MODULES_DEB, COMBINED_DTB_FILE, OUT_DIR) + logger.info("Building vmlinux as requested") + extract_vmlinux(DEB_OUT_DIR, LINUX_IMAGE_DBGSYM_DEB, VMLINUX_QCOM_FILE, OUT_DIR) except Exception as e: logger.critical(f"Exception during kernel build : {e}") @@ -246,6 +253,26 @@ def parse_arguments(): logger.critical("Kernel build failed. Exiting.") exit(1) +if IF_RELEASE_PREP_URL: + logger.info("Running the release preparation phase") + try: + statuses = process_debian_trees( + input_root=SOURCES_DIR, + apt_source_line=IF_RELEASE_PREP_URL, + prefer_debian_changelog=False, + dry_run=False, + ) + except Exception as e: + logger.error(f"[FATAL] {e}") + #return 1 + + logger.info("\nSUMMARY") + for debian_dir, st in statuses.items(): + logger.info("-" * 80) + logger.info(f"debian dir: {debian_dir}") + logger.info(f"action: {st.get('action')}") + logger.info(f"details: {st.get('details')}") + if IF_GEN_DEBIANS or IS_PREPARE_SOURCE : error_during_packages_build = False @@ -346,19 +373,22 @@ def parse_arguments(): cleanup_directory(MOUNT_DIR) create_new_directory(MOUNT_DIR) - + packer = PackagePacker(MOUNT_DIR, IMAGE_TYPE, PACK_VARIANT, OUT_DIR, OUT_SYSTEM_IMG, APT_SERVER_CONFIG, DEB_OUT_TEMP_DIR, DEB_OUT_DIR, DEBIAN_INSTALL_DIR, IS_CLEANUP_ENABLED, PACKAGES_MANIFEST_PATH,QC_FOLDER) files_check = glob.glob(os.path.join(KERNEL_DEB_OUT_DIR, LINUX_MODULES_DEB)) if len(files_check) == 0: logger.warning(f"No files matching {LINUX_MODULES_DEB} exist in {KERNEL_DEB_OUT_DIR}. Pulling it from pkg.qualcomm.com") - cur_file = os.path.dirname(os.path.realpath(__file__)) - manifest_file_path = os.path.join(cur_file, "packages", "base", f"{IMAGE_TYPE}.manifest") + + #Get the merged manifest path + manifest_file_path = packer.get_merged_manifest() + pull_debs_wget(manifest_file_path, KERNEL_DEB_OUT_DIR,KERNEL_DEBS,KERNEL_DEB_URL) else: logger.info("Linux modules found locally. Skipping pull from pkg.qualcomm.com") build_dtb(KERNEL_DEB_OUT_DIR, LINUX_MODULES_DEB, COMBINED_DTB_FILE, OUT_DIR) - - packer = PackagePacker(MOUNT_DIR, IMAGE_TYPE, PACK_VARIANT, OUT_DIR, OUT_SYSTEM_IMG, APT_SERVER_CONFIG, DEB_OUT_TEMP_DIR, DEB_OUT_DIR, DEBIAN_INSTALL_DIR, IS_CLEANUP_ENABLED, PACKAGES_MANIFEST_PATH,QC_FOLDER) + if not IF_BUILD_KERNEL: #this is needed when user runs both build kernel and pack image extravtion dhouldnt run twice + logger.info("Building vmlinux as requested") + extract_vmlinux(DEB_OUT_DIR, LINUX_IMAGE_DBGSYM_DEB, VMLINUX_QCOM_FILE, OUT_DIR) packer.build_image() @@ -404,4 +434,4 @@ def parse_arguments(): exit(1) logger.info("Script execution sucessful") -exit(0) \ No newline at end of file +exit(0) diff --git a/ubuntu/build_deb.py b/ubuntu/build_deb.py index 1581b11..0e540d8 100644 --- a/ubuntu/build_deb.py +++ b/ubuntu/build_deb.py @@ -62,9 +62,7 @@ def __init__(self, CHROOT_NAME, CHROOT_DIR, SOURCE_DIR, APT_SERVER_CONFIG, \ self.ARCH = ARCH self.CHROOT_SUFFIX = CHROOT_SUFFIX self.SOURCE_DIR = SOURCE_DIR - self.DEB_OUT_DIR = DEB_OUT_DIR self.APT_SERVER_CONFIG = APT_SERVER_CONFIG - self.CHROOT_NAME = CHROOT_NAME self.MANIFEST_MAP = MANIFEST_MAP self.DEB_OUT_TEMP_DIR = DEB_OUT_TEMP_DIR self.IS_CLEANUP_ENABLED = IS_CLEANUP_ENABLED @@ -72,7 +70,7 @@ def __init__(self, CHROOT_NAME, CHROOT_DIR, SOURCE_DIR, APT_SERVER_CONFIG, \ self.DEB_OUT_DIR_APT = DEB_OUT_DIR_APT self.DEBIAN_INSTALL_DIR_APT = DEBIAN_INSTALL_DIR_APT self.IS_PREPARE_SOURCE = IS_PREPARE_SOURCE - self.DEBIAN_MIRROR = "http://ports.ubuntu.com" + self.DEBIAN_MIRROR = f"http://ports-ubuntu.qualcomm.com/ports.ubuntu.com/{SNAP_SHOT_DATE}" self.packages = {} self.generate_schroot_config() @@ -102,16 +100,18 @@ def generate_schroot_config(self): # this command creates a chroot environment that will be named "{DIST}-{ARCH}-{SUFFIX}" # We supply our own suffix, otherwise sbuild will use 'sbuild' cmd = f"sbuild-createchroot --arch={self.ARCH}" \ + f" --keyring="" " \ f" --chroot-suffix=-{self.CHROOT_SUFFIX}" \ f" --components=main,universe" \ f" {self.DIST}" \ f" {self.CHROOT_DIR}/{self.CHROOT_NAME}" \ f" {self.DEBIAN_MIRROR}" - + logger.debug(f"Creating schroot environment with command: {cmd}") - result = subprocess.run(cmd, shell=True, capture_output=True, text=True) + subprocess.run(["chroot", f"{self.CHROOT_DIR}/{self.CHROOT_NAME}", "bash", "-c", f"sed -i 's|{self.DEBIAN_MIRROR}|[trusted=yes] {self.DEBIAN_MIRROR}|' /etc/apt/sources.list"]) + if result.returncode != 0: raise Exception(f"Error creating schroot environment: {result.stderr}") else: diff --git a/ubuntu/constants.py b/ubuntu/constants.py index 2f0deef..bd2275d 100644 --- a/ubuntu/constants.py +++ b/ubuntu/constants.py @@ -4,7 +4,9 @@ import os +LINUX_IMAGE_DBGSYM_DEB = "oss/linux-qcom-tools*/linux-qcom-tools*_arm64.deb" LINUX_MODULES_DEB = "linux-modules-*-qcom/linux-modules-*_arm64.deb" +SNAP_SHOT_DATE = "2025-09-12" #update date for snapshot date from https://ports-ubuntu.qualcomm.com/ports.ubuntu.com/ KERNEL_DEBS = [ "linux-modules", @@ -20,6 +22,7 @@ ] COMBINED_DTB_FILE = "combined-dtb.dtb" +VMLINUX_QCOM_FILE = "vmlinux" IMAGE_NAME = "system.img" IMAGE_SIZE_IN_G = 8 diff --git a/ubuntu/helpers.py b/ubuntu/helpers.py index e5a73e4..cc6613d 100644 --- a/ubuntu/helpers.py +++ b/ubuntu/helpers.py @@ -23,6 +23,7 @@ from apt_server import AptServer from constants import TERMINAL, HOST_FS_MOUNT from color_logger import logger +import tempfile def check_if_root() -> bool: """ @@ -66,6 +67,72 @@ def check_and_append_line_in_file(file_path, line_to_check, append_if_missing=Fa return False + +def extract_vmlinux(deb_dir, deb_file_regex, vmlinux_filename, out_dir): + """ + Extracts the vmlinux file from a Debian package and places it in the output directory. + + Args: + ----- + - deb_dir (str): Directory containing the .deb files. + - deb_file_regex (str): Regex pattern to match the .deb file. + - vmlinux_filename (str): Name of the vmlinux file to extract. + - out_dir (str): Directory to copy the extracted vmlinux file to. + + Raises: + ------- + - SystemExit: If not run as root, if no matching .deb files found, or if errors occur. + """ + if not check_if_root(): + logger.error('Please run this script as root user.') + raise Exception('Root privileges required') + + vmlinux_path = os.path.join(out_dir, vmlinux_filename) + if os.path.exists(vmlinux_path): + logger.info(f"Removing existing vmlinux at {vmlinux_path}") + os.remove(vmlinux_path) + + # Step 0: Check if the .deb file exists + files = glob.glob(os.path.join(deb_dir, deb_file_regex)) + if len(files) == 0: + logger.error(f"Error: No files matching {deb_file_regex} exist in {deb_dir}") + raise Exception(f"No files matching {deb_file_regex} found") + + # Step 1: Extract the .deb package to a temporary directory + deb_file = files[0] # Assuming only one file matches the regex + try: + temp_dir = tempfile.mkdtemp() + logger.debug(f'Temp path for vmlinux extraction: {temp_dir}') + subprocess.run(["dpkg-deb", '-x', deb_file, temp_dir], check=True) + + # Step 2: Find the vmlinux file within the temporary directory + file_path = None + for root, _, files in os.walk(temp_dir): + if vmlinux_filename in files: + file_path = os.path.join(root, vmlinux_filename) + break + + # Step 3: Copy the vmlinux file to the output directory + if file_path: + try: + shutil.copy(file_path, vmlinux_path) + os.chmod(vmlinux_path, 0o644) + logger.info(f"{vmlinux_filename} has been copied to {vmlinux_path}") + except Exception as e: + logger.error(f"Error copying file {file_path}") + logger.error(f"Resulted in error: {e}") + else: + logger.error(f"{vmlinux_filename} not found in {deb_file}") + + except Exception as e: + logger.error(f"Error extracting vmlinux: {e}") + raise + finally: + # Step 4: Clean up the temporary directory + if temp_dir: + shutil.rmtree(temp_dir) + logger.info(f"Cleaned up temporary directory {temp_dir}") + def parse_debs_manifest(manifest_path): """ Parses a manifest file and returns a dictionary of module names and their corresponding versions. @@ -431,7 +498,8 @@ def build_deb_package_gz(dir, start_server=True) -> str: raise Exception(result.stderr) - # Even with a successful exit code, dpkg-scanpackages still outputs the number of entries written to stderr logger.debug(result.stderr.strip()) + # Even with a successful exit code, dpkg-scanpackages still outputs the number of entries written to stderr + logger.debug(result.stderr.strip()) cmd = f"gzip -k -f {packages_path}" @@ -454,7 +522,6 @@ def build_deb_package_gz(dir, start_server=True) -> str: return start_local_apt_server(dir) return None - def pull_debs_wget(manifest_file_path, out_dir,DEBS_to_download_list,base_url): """ Downloads Debian packages from a remote repository using wget. @@ -492,6 +559,18 @@ def pull_debs_wget(manifest_file_path, out_dir,DEBS_to_download_list,base_url): # Generate wget links and download os.makedirs(out_dir, exist_ok=True) + #logger.info(f"version map {version_map}...") + + matches = {k: v for k, v in version_map.items() if 'linux-modules' in k} + + # Get the first match (you can change this logic if needed) + first_match_value = next(iter(matches.values())) + first_match_key = next(iter(matches)) + name_suffix = first_match_value.rsplit('.', 1)[0] + + # Construct new key and update version_map + linux_qcom_tools_suffix = 'linux-qcom-tools-' + name_suffix + version_map[linux_qcom_tools_suffix] = version_map[first_match_key] for module in DEBS_to_download_list: for name, version in version_map.items(): if name.startswith(module): @@ -509,3 +588,5 @@ def pull_debs_wget(manifest_file_path, out_dir,DEBS_to_download_list,base_url): except subprocess.CalledProcessError as e: logger.error(f"error: Failed to download {url}: {e}") break # Stop after first match + + diff --git a/ubuntu/pack_deb.py b/ubuntu/pack_deb.py index bf8f34f..1e16ecf 100644 --- a/ubuntu/pack_deb.py +++ b/ubuntu/pack_deb.py @@ -26,7 +26,7 @@ from color_logger import logger class PackagePacker: - def __init__(self, MOUNT_DIR, IMAGE_TYPE, VARIANT, OUT_DIR, OUT_SYSTEM_IMG, APT_SERVER_CONFIG, TEMP_DIR, DEB_OUT_DIR, DEBIAN_INSTALL_DIR, IS_CLEANUP_ENABLED, PACKAGES_MANIFEST_PATH=None,QC_FOLDER=None): + def __init__(self, MOUNT_DIR, IMAGE_TYPE, VARIANT, OUT_DIR, OUT_SYSTEM_IMG, APT_SERVER_CONFIG, TEMP_DIR, DEB_OUT_DIR, DEBIAN_INSTALL_DIR, IS_CLEANUP_ENABLED, PACKAGES_MANIFEST_PATH=None,QC_FOLDER=None,IF_RELEASE_ENABLED=False): """ Initializes the PackagePacker instance. @@ -61,6 +61,7 @@ def __init__(self, MOUNT_DIR, IMAGE_TYPE, VARIANT, OUT_DIR, OUT_SYSTEM_IMG, APT_ self.OUT_SYSTEM_IMG = OUT_SYSTEM_IMG self.PACKAGES_MANIFEST_PATH = PACKAGES_MANIFEST_PATH self.qc_folder = QC_FOLDER + self.IS_RELEASE_ENABLED = IF_RELEASE_ENABLED self.EFI_BIN_PATH = os.path.join(self.OUT_DIR, "efi.bin") self.EFI_MOUNT_PATH = os.path.join(self.MOUNT_DIR, "boot", "efi") @@ -140,8 +141,6 @@ def merge_manifests_from_folder(self, folder_path, image_type, subdir_filter=Non logger.error(f"Failed to create or write to merged manifest file: {e}") return None - - def parse_manifests(self): """ Parses the base and QCOM manifests to gather the list of packages to include in the image. @@ -184,7 +183,14 @@ def parse_manifests(self): qc_qcom_merged = self.merge_manifests_from_folder(self.qc_folder, self.IMAGE_TYPE, "qcom") if qc_qcom_merged: logger.info(f"Using qcom manifests from: {qc_qcom_merged}") - self.DEBS.extend(parse_debs_manifest(qc_qcom_merged)) + manifest_debs = parse_debs_manifest(qc_qcom_merged) + if self.IS_RELEASE_ENABLED: + # Append +rel to everyone (no filtering) + manifest_debs[:] = [{**d, "version": (d["version"] if d["version"].endswith("+rel") else d["version"] + "+rel")} + for d in manifest_debs] + logger.info("Assuming a release build, appending +rel to all packages.") + logger.info(manifest_debs) + self.DEBS.extend(manifest_debs) return # 3. No manifest found: print message and exit @@ -220,7 +226,7 @@ def build_image(self): bash_command = f""" sudo mmdebstrap --verbose --logfile={log_file} \ --customize-hook='echo root:password | chroot "$1" chpasswd' \ ---customize-hook='cp {self.cur_file}/99-network-manager.cfg "$1/etc/cloud/cloud.cfg.d/99-network-manager.cfg"' \ +--customize-hook='cp {self.cur_file}/01-end0.yaml "$1/etc/netplan/01-end0.yaml"' \ --customize-hook='echo "PermitRootLogin yes" >> "$1/etc/ssh/sshd_config"' \ --setup-hook='echo /dev/disk/by-partlabel/system / ext4 defaults 0 1 > "$1/etc/fstab"' \ --arch=arm64 \ @@ -242,7 +248,8 @@ def build_image(self): if config.strip(): bash_command += f" \"{config.strip()}\"" - bash_command += f" \"deb [arch=arm64 trusted=yes] http://ports.ubuntu.com/ubuntu-ports noble main universe multiverse restricted\"" + bash_command += f" \"deb [arch=arm64 trusted=yes] http://ports.ubuntu.com noble main universe multiverse restricted\"" + bash_command += f" \"deb [arch=arm64 trusted=yes] https://ports-ubuntu.qualcomm.com/x04_initial_release noble main\"" out = run_command_for_result(bash_command) if out['returncode'] != 0: @@ -296,3 +303,40 @@ def extract_manifest(self, flavor): else: logger.info(f"Manifest for {flavor} saved to {manifest_path}") + + def get_merged_manifest(self): + if self.PACKAGES_MANIFEST_PATH: + logger.info(f"User provided manifest path: {self.PACKAGES_MANIFEST_PATH}") + return self.PACKAGES_MANIFEST_PATH + + manifest_paths = [] + + # Always merge from qc_folder and packages + search_dirs = [ + (self.qc_folder, "base"), + (os.path.join(self.cur_file, "packages"), "base") + ] + + if self.VARIANT == "qcom": + search_dirs += [ + (self.qc_folder, "qcom"), + (os.path.join(self.cur_file, "packages"), "qcom") + ] + + for folder, subdir in search_dirs: + if folder and os.path.isdir(folder): + for root, _, files in os.walk(folder): + # Only include manifests from subdirectories matching subdir + if subdir in os.path.relpath(root, folder).split(os.sep): + for file in files: + if file == f"{self.IMAGE_TYPE}.manifest": + manifest_paths.append(os.path.join(root, file)) + + # Merge all found manifest files into one + merged_manifest_path = os.path.join(self.TEMP_DIR, f"{self.IMAGE_TYPE}_merged.manifest") + with open(merged_manifest_path, 'w') as merged_file: + for manifest in manifest_paths: + with open(manifest, 'r') as f: + merged_file.write(f.read()) + logger.info(f"Final merged manifest saved to: {merged_manifest_path}") + return merged_manifest_path \ No newline at end of file diff --git a/ubuntu/packages/base/desktop.manifest b/ubuntu/packages/base/desktop.manifest index 8b13b9c..7908eba 100644 --- a/ubuntu/packages/base/desktop.manifest +++ b/ubuntu/packages/base/desktop.manifest @@ -9,9 +9,9 @@ alsa-utils 1.2.9-1ubuntu5 anacron 2.3-39ubuntu2 apg 2.2.3.dfsg.1-5build3 apparmor 4.0.1really4.0.1-0ubuntu0.24.04.4 -apport 2.28.1-0ubuntu3.7 -apport-core-dump-handler 2.28.1-0ubuntu3.7 -apport-gtk 2.28.1-0ubuntu3.7 +apport 2.28.1-0ubuntu3.8 +apport-core-dump-handler 2.28.1-0ubuntu3.8 +apport-gtk 2.28.1-0ubuntu3.8 apport-symptoms 0.25 appstream 1.0.2-1build6 apt 2.8.3 @@ -26,22 +26,22 @@ at-spi2-common 2.52.0-1build1 at-spi2-core 2.52.0-1build1 avahi-daemon 0.8-13ubuntu6 baobab 46.0-1build1 -base-files 13ubuntu10.2 +base-files 13ubuntu10.3 base-passwd 3.6.3build1 bash 5.2.21-2ubuntu4 bash-completion 1:2.11-8 bc 1.07.1-3ubuntu4 bcache-tools 1.0.8-5build1 -bind9-dnsutils 1:9.18.30-0ubuntu0.24.04.2 -bind9-host 1:9.18.30-0ubuntu0.24.04.2 -bind9-libs 1:9.18.30-0ubuntu0.24.04.2 -bluez 5.72-0ubuntu5.3 -bluez-cups 5.72-0ubuntu5.3 -bluez-obexd 5.72-0ubuntu5.3 +bind9-dnsutils 1:9.18.39-0ubuntu0.24.04.1 +bind9-host 1:9.18.39-0ubuntu0.24.04.1 +bind9-libs 1:9.18.39-0ubuntu0.24.04.1 +bluez 5.72-0ubuntu5.4 +bluez-cups 5.72-0ubuntu5.4 +bluez-obexd 5.72-0ubuntu5.4 bolt 0.9.7-1 brltty 6.6-4ubuntu5 -bsdextrautils 2.39.3-9ubuntu6.2 -bsdutils 1:2.39.3-9ubuntu6.2 +bsdextrautils 2.39.3-9ubuntu6.3 +bsdutils 1:2.39.3-9ubuntu6.3 btrfs-progs 6.6.3-1.1build2 bubblewrap 0.9.0-1ubuntu0.1 busybox-initramfs 1:1.36.1-6ubuntu3.1 @@ -49,7 +49,7 @@ busybox-static 1:1.36.1-6ubuntu3.1 byobu 6.11-0ubuntu1 ca-certificates 20240203 cloud-guest-utils 0.33-1 -cloud-init 25.1.2-0ubuntu0~24.04.1 +cloud-init 25.1.4-0ubuntu0~24.04.1 cloud-initramfs-copymods 0.49~24.04.1 cloud-initramfs-dyn-netconf 0.49~24.04.1 colord 1.4.7-1build2 @@ -57,7 +57,7 @@ colord-data 1.4.7-1build2 command-not-found 23.04.0 console-setup 1.226ubuntu1 console-setup-linux 1.226ubuntu1 -coreutils 9.4-3ubuntu6 +coreutils 9.4-3ubuntu6.1 cpio 2.15+dfsg-1ubuntu2 cpp 4:13.2.0-7ubuntu1 cpp-13 13.3.0-6ubuntu2~24.04 @@ -69,19 +69,19 @@ cron-daemon-common 3.0pl1-184ubuntu2 cryptsetup 2:2.7.0-1ubuntu4.2 cryptsetup-bin 2:2.7.0-1ubuntu4.2 cryptsetup-initramfs 2:2.7.0-1ubuntu4.2 -cups 2.4.7-1.2ubuntu7.3 +cups 2.4.7-1.2ubuntu7.4 cups-browsed 2.0.0-0ubuntu10.3 -cups-bsd 2.4.7-1.2ubuntu7.3 -cups-client 2.4.7-1.2ubuntu7.3 -cups-common 2.4.7-1.2ubuntu7.3 -cups-core-drivers 2.4.7-1.2ubuntu7.3 -cups-daemon 2.4.7-1.2ubuntu7.3 +cups-bsd 2.4.7-1.2ubuntu7.4 +cups-client 2.4.7-1.2ubuntu7.4 +cups-common 2.4.7-1.2ubuntu7.4 +cups-core-drivers 2.4.7-1.2ubuntu7.4 +cups-daemon 2.4.7-1.2ubuntu7.4 cups-filters 2.0.0-0ubuntu4 cups-filters-core-drivers 2.0.0-0ubuntu4 -cups-ipp-utils 2.4.7-1.2ubuntu7.3 +cups-ipp-utils 2.4.7-1.2ubuntu7.4 cups-pk-helper 0.2.6-1ubuntu8 -cups-ppdc 2.4.7-1.2ubuntu7.3 -cups-server-common 2.4.7-1.2ubuntu7.3 +cups-ppdc 2.4.7-1.2ubuntu7.4 +cups-server-common 2.4.7-1.2ubuntu7.4 curl 8.5.0-2ubuntu10.6 dash 0.5.12-6ubuntu5 dbus 1.14.10-4ubuntu4.1 @@ -91,9 +91,9 @@ dbus-session-bus-common 1.14.10-4ubuntu4.1 dbus-system-bus-common 1.14.10-4ubuntu4.1 dbus-user-session 1.14.10-4ubuntu4.1 dc 1.07.1-3ubuntu4 -dconf-cli 0.40.0-4build2 -dconf-gsettings-backend 0.40.0-4build2 -dconf-service 0.40.0-4build2 +dconf-cli 0.40.0-4ubuntu0.1 +dconf-gsettings-backend 0.40.0-4ubuntu0.1 +dconf-service 0.40.0-4ubuntu0.1 debconf 1.5.86ubuntu1 debconf-i18n 1.5.86ubuntu1 debianutils 5.17build1 @@ -101,7 +101,7 @@ desktop-file-utils 0.27-2build1 dhcpcd-base 1:10.0.6-1ubuntu3.1 dictionaries-common 1.29.7 diffutils 1:3.10-1build1 -dirmngr 2.4.4-2ubuntu17.2 +dirmngr 2.4.4-2ubuntu17.3 distro-info 1.7build1 distro-info-data 0.60ubuntu0.3 dmeventd 2:1.02.185-3ubuntu3.2 @@ -109,16 +109,16 @@ dmidecode 3.5-3ubuntu0.1 dmsetup 2:1.02.185-3ubuntu3.2 dmz-cursor-theme 0.4.5ubuntu1 dns-root-data 2024071801~ubuntu0.24.04.1 -dnsmasq-base 2.90-2build2 +dnsmasq-base 2.90-2ubuntu0.1 docbook-xml 4.5-12 dosfstools 4.2-1.1build1 -dpkg 1.22.6ubuntu6.1 +dpkg 1.22.6ubuntu6 dracut-install 060+5-1ubuntu3.3 -e2fsprogs 1.47.0-2.4~exp1ubuntu4 +e2fsprogs 1.47.0-2.4~exp1ubuntu4.1 eatmydata 131-1ubuntu1 ed 1.20.1-1 efibootmgr 18-1build2 -eject 2.39.3-9ubuntu6.2 +eject 2.39.3-9ubuntu6.3 emacsen-common 3.0.5 enchant-2 2.3.3-2build2 eog 45.3-1ubuntu2 @@ -128,13 +128,12 @@ evince 46.3.1-0ubuntu1 evince-common 46.3.1-0ubuntu1 evolution-data-server 3.52.3-0ubuntu1 evolution-data-server-common 3.52.3-0ubuntu1 -fdisk 2.39.3-9ubuntu6.2 +fdisk 2.39.3-9ubuntu6.3 file 1:5.45-3build1 finalrd 9build1 findutils 4.9.0-5build1 firefox 1:1snap1-0ubuntu5 -firmware-qcom-hlosfw 1.0.00008-1 -firmware-sof-signed 2023.12.1-1ubuntu1.5 +firmware-sof-signed 2023.12.1-1ubuntu1.7 fontconfig 2.15.0-1.1ubuntu2 fontconfig-config 2.15.0-1.1ubuntu2 fonts-dejavu-core 2.37-8 @@ -154,7 +153,7 @@ fprintd 1.94.3-1 friendly-recovery 0.2.42 ftp 20230507-2build3 fuse3 3.14.0-5build1 -fwupd 1.9.30-0ubuntu1~24.04.1 +fwupd 1.9.31-0ubuntu1~24.04.1 fwupd-signed 1.52+1.4-1 gamemode 1.8.1-2build1 gamemode-daemon 1.8.1-2build1 @@ -169,7 +168,7 @@ gdm3 46.2-1ubuntu1~24.04.1 geoclue-2.0 2.7.0-3ubuntu7 geocode-glib-common 3.26.3-6build3 gettext-base 0.21-14ubuntu2 -ghostscript 10.02.1~dfsg1-0ubuntu7.6 +ghostscript 10.02.1~dfsg1-0ubuntu7.7 gir1.2-accountsservice-1.0 23.13.9-2ubuntu6 gir1.2-adw-1 1.5.0-1ubuntu2 gir1.2-atk-1.0 2.52.0-1build1 @@ -178,7 +177,7 @@ gir1.2-freedesktop 1.80.1-1 gir1.2-gck-2 4.2.0-5 gir1.2-gcr-4 4.2.0-5 gir1.2-gdesktopenums-3.0 46.1-0ubuntu1 -gir1.2-gdkpixbuf-2.0 2.42.10+dfsg-3ubuntu3.1 +gir1.2-gdkpixbuf-2.0 2.42.10+dfsg-3ubuntu3.2 gir1.2-gdm-1.0 46.2-1ubuntu1~24.04.1 gir1.2-geoclue-2.0 2.7.0-3ubuntu7 gir1.2-girepository-2.0 1.80.1-1 @@ -190,15 +189,16 @@ gir1.2-gnomebluetooth-3.0 46.0-1ubuntu1 gir1.2-gnomedesktop-3.0 44.0-5build2 gir1.2-gnomedesktop-4.0 44.0-5build2 gir1.2-graphene-1.0 1.10.8-3build2 +gir1.2-gstreamer-1.0 1.24.2-1ubuntu0.1 gir1.2-gtk-3.0 3.24.41-4ubuntu1.3 -gir1.2-gtk-4.0 4.14.2+ds-1ubuntu3 +gir1.2-gtk-4.0 4.14.5+ds-0ubuntu0.5 gir1.2-gweather-4.0 4.4.2-1build1 gir1.2-handy-1 1.8.3-1build2 gir1.2-harfbuzz-0.0 8.3.0-2build2 gir1.2-ibus-1.0 1.5.29-2 -gir1.2-javascriptcoregtk-4.1 2.48.3-0ubuntu0.24.04.1 -gir1.2-javascriptcoregtk-6.0 2.48.3-0ubuntu0.24.04.1 -gir1.2-mutter-14 46.2-1ubuntu0.24.04.9 +gir1.2-javascriptcoregtk-4.1 2.48.5-0ubuntu0.24.04.1 +gir1.2-javascriptcoregtk-6.0 2.48.5-0ubuntu0.24.04.1 +gir1.2-mutter-14 46.2-1ubuntu0.24.04.10 gir1.2-nm-1.0 1.46.0-1ubuntu2.2 gir1.2-nma4-1.0 1.10.6-3build2 gir1.2-notify-0.7 0.8.3-1build2 @@ -209,14 +209,14 @@ gir1.2-polkit-1.0 124-2ubuntu1.24.04.2 gir1.2-rsvg-2.0 2.58.0+dfsg-1build1 gir1.2-secret-1 0.21.4-1build3 gir1.2-snapd-2 1.64-0ubuntu5 -gir1.2-soup-3.0 3.4.4-5ubuntu0.4 +gir1.2-soup-3.0 3.4.4-5ubuntu0.5 gir1.2-upowerglib-1.0 1.90.3-1 gir1.2-vte-2.91 0.76.0-1ubuntu0.1 -gir1.2-webkit-6.0 2.48.3-0ubuntu0.24.04.1 -gir1.2-webkit2-4.1 2.48.3-0ubuntu0.24.04.1 +gir1.2-webkit-6.0 2.48.5-0ubuntu0.24.04.1 +gir1.2-webkit2-4.1 2.48.5-0ubuntu0.24.04.1 gir1.2-wnck-3.0 43.0-3build4 -git 1:2.43.0-1ubuntu7.2 -git-man 1:2.43.0-1ubuntu7.2 +git 1:2.43.0-1ubuntu7.3 +git-man 1:2.43.0-1ubuntu7.3 gjs 1.80.2-1build2 gkbd-capplet 3.28.1-1build3 glib-networking 2.80.0-1build1 @@ -225,7 +225,7 @@ glib-networking-services 2.80.0-1build1 gnome-accessibility-themes 3.28-2ubuntu5 gnome-bluetooth-3-common 46.0-1ubuntu1 gnome-bluetooth-sendto 46.0-1ubuntu1 -gnome-calculator 1:46.1-1ubuntu1~24.04.1 +gnome-calculator 1:46.3-0ubuntu0.1 gnome-characters 46.0-1build1 gnome-clocks 46.0-1build1 gnome-control-center 1:46.7-0ubuntu0.24.04.2 @@ -234,7 +234,7 @@ gnome-control-center-faces 1:46.7-0ubuntu0.24.04.2 gnome-desktop3-data 44.0-5build2 gnome-disk-utility 46.0-1ubuntu3 gnome-font-viewer 46.0-1build1 -gnome-initial-setup 46.3-1ubuntu3~24.04.1 +gnome-initial-setup 46.3-1ubuntu3~24.04.2 gnome-keyring 46.1-2build1 gnome-keyring-pkcs11 46.1-2build1 gnome-logs 45.0-1build1 @@ -250,7 +250,7 @@ gnome-settings-daemon-common 46.0-1ubuntu1 gnome-shell 46.0-0ubuntu6~24.04.9 gnome-shell-common 46.0-0ubuntu6~24.04.9 gnome-shell-extension-appindicator 58-1ubuntu24.04.1 -gnome-shell-extension-desktop-icons-ng 46+really47.0.9-1ubuntu1 +gnome-shell-extension-desktop-icons-ng 46+really47.0.9-1ubuntu4 gnome-shell-extension-ubuntu-dock 90ubuntu3 gnome-shell-extension-ubuntu-tiling-assistant 46-1ubuntu1.1 gnome-startup-applications 46.0-1ubuntu4 @@ -261,15 +261,15 @@ gnome-text-editor 46.3-0ubuntu2 gnome-themes-extra 3.28-2ubuntu5 gnome-themes-extra-data 3.28-2ubuntu5 gnome-user-docs 46.0-1ubuntu1 -gnupg 2.4.4-2ubuntu17.2 -gnupg-l10n 2.4.4-2ubuntu17.2 -gnupg-utils 2.4.4-2ubuntu17.2 -gpg 2.4.4-2ubuntu17.2 -gpg-agent 2.4.4-2ubuntu17.2 -gpg-wks-client 2.4.4-2ubuntu17.2 -gpgconf 2.4.4-2ubuntu17.2 -gpgsm 2.4.4-2ubuntu17.2 -gpgv 2.4.4-2ubuntu17.2 +gnupg 2.4.4-2ubuntu17.3 +gnupg-l10n 2.4.4-2ubuntu17.3 +gnupg-utils 2.4.4-2ubuntu17.3 +gpg 2.4.4-2ubuntu17.3 +gpg-agent 2.4.4-2ubuntu17.3 +gpg-wks-client 2.4.4-2ubuntu17.3 +gpgconf 2.4.4-2ubuntu17.3 +gpgsm 2.4.4-2ubuntu17.3 +gpgv 2.4.4-2ubuntu17.3 grep 3.11-4build1 groff-base 1.23.0-3build2 grub-common 2.12-1ubuntu7.3 @@ -280,16 +280,16 @@ grub2-common 2.12-1ubuntu7.3 gsettings-desktop-schemas 46.1-0ubuntu1 gsettings-ubuntu-schemas 0.0.7+21.10.20210712-0ubuntu3 gstreamer1.0-packagekit 1.2.8-2ubuntu1.2 -gstreamer1.0-pipewire 1.0.5-1ubuntu3 +gstreamer1.0-pipewire 1.0.5-1ubuntu3.1 gtk-update-icon-cache 3.24.41-4ubuntu1.3 gtk2-engines-murrine 0.98.2-4 gtk2-engines-pixbuf 2.24.33-4ubuntu1.1 -gvfs 1.54.0-1ubuntu2 -gvfs-backends 1.54.0-1ubuntu2 -gvfs-common 1.54.0-1ubuntu2 -gvfs-daemons 1.54.0-1ubuntu2 -gvfs-fuse 1.54.0-1ubuntu2 -gvfs-libs 1.54.0-1ubuntu2 +gvfs 1.54.4-0ubuntu1~24.04.1 +gvfs-backends 1.54.4-0ubuntu1~24.04.1 +gvfs-common 1.54.4-0ubuntu1~24.04.1 +gvfs-daemons 1.54.4-0ubuntu1~24.04.1 +gvfs-fuse 1.54.4-0ubuntu1~24.04.1 +gvfs-libs 1.54.4-0ubuntu1~24.04.1 gzip 1.12-1ubuntu3.1 hdparm 9.65+ds-1build1 heif-gdk-pixbuf 1.17.6-1ubuntu4.1 @@ -320,21 +320,21 @@ initramfs-tools-core 0.142ubuntu25.5 inputattach 1:1.8.1-2build1 install-info 7.1-3build2 ipp-usb 0.9.24-0ubuntu3.3 -iproute2 6.1.0-1ubuntu6 +iproute2 6.1.0-1ubuntu6.2 iptables 1.8.10-3ubuntu2 -iputils-ping 3:20240117-1build1 -iputils-tracepath 3:20240117-1build1 +iputils-ping 3:20240117-1ubuntu0.1 +iputils-tracepath 3:20240117-1ubuntu0.1 iso-codes 4.16.0-1 -jq 1.7.1-3build1 +jq 1.7.1-3ubuntu0.24.04.1 kbd 2.6.4-2ubuntu2 kerneloops 0.12+git20140509-6ubuntu8 keyboard-configuration 1.226ubuntu1 -keyboxd 2.4.4-2ubuntu17.2 +keyboxd 2.4.4-2ubuntu17.3 klibc-utils 2.0.13-4ubuntu0.1 kmod 31+20240202-2ubuntu7.1 kpartx 0.9.4-5ubuntu8 krb5-locales 1.20.1-6ubuntu2.6 -landscape-common 24.02-0ubuntu5.3 +landscape-common 24.02-0ubuntu5.6 language-selector-common 0.225 language-selector-gnome 0.225 laptop-detect 0.16 @@ -367,9 +367,9 @@ libatm1t64 1:2.5.1-5.1build1 libatomic1 14.2.0-4ubuntu2~24.04 libatopology2t64 1.2.11-1ubuntu0.1 libatspi2.0-0t64 2.52.0-1build1 -libattr1 1:2.5.2-1build1 -libaudit-common 1:3.1.2-2.1build1 -libaudit1 1:3.1.2-2.1build1 +libattr1 1:2.5.2-1build1.1 +libaudit-common 1:3.1.2-2.1build1.1 +libaudit1 1:3.1.2-2.1build1.1 libauthen-sasl-perl 2.1700-1 libavahi-client3 0.8-13ubuntu6 libavahi-common-data 0.8-13ubuntu6 @@ -382,7 +382,7 @@ libayatana-ido3-0.4-0 0.10.1-1build2 libayatana-indicator3-7 0.9.4-1build1 libbabeltrace1 1.5.11-3build3 libbasicobjects0t64 0.6.2-2.1build1 -libblkid1 2.39.3-9ubuntu6.2 +libblkid1 2.39.3-9ubuntu6.3 libblockdev-crypto3 3.1.1-1ubuntu0.1 libblockdev-fs3 3.1.1-1ubuntu0.1 libblockdev-loop3 3.1.1-1ubuntu0.1 @@ -392,17 +392,17 @@ libblockdev-part3 3.1.1-1ubuntu0.1 libblockdev-swap3 3.1.1-1ubuntu0.1 libblockdev-utils3 3.1.1-1ubuntu0.1 libblockdev3 3.1.1-1ubuntu0.1 -libbluetooth3 5.72-0ubuntu5.3 +libbluetooth3 5.72-0ubuntu5.4 libbpf1 1:1.3.0-2build2 libbrlapi0.8 6.6-4ubuntu5 libbrotli1 1.1.0-2build2 libbsd0 0.12.1-1build1.1 libbytesize-common 2.10-1ubuntu2 libbytesize1 2.10-1ubuntu2 -libbz2-1.0 1.0.8-5.1 -libc-bin 2.39-0ubuntu8.4 -libc6 2.39-0ubuntu8.4 -libc6-dbg 2.39-0ubuntu8.4 +libbz2-1.0 1.0.8-5.1build0.1 +libc-bin 2.39-0ubuntu8.5 +libc6 2.39-0ubuntu8.5 +libc6-dbg 2.39-0ubuntu8.5 libcaca0 0.99.beta20-4build2 libcairo-gobject-perl 1.005-4build3 libcairo-gobject2 1.18.0-3build1 @@ -429,15 +429,15 @@ libcollection4t64 0.6.2-2.1build1 libcolord-gtk4-1t64 0.3.1-1build2 libcolord2 1.4.7-1build2 libcolorhug2 1.4.7-1build2 -libcom-err2 1.47.0-2.4~exp1ubuntu4 +libcom-err2 1.47.0-2.4~exp1ubuntu4.1 libcrack2 2.9.6-5.1build2 libcrypt1 1:4.4.36-4build1 libcryptsetup12 2:2.7.0-1ubuntu4.2 libcue2 2.2.1-4.1build1 -libcups2t64 2.4.7-1.2ubuntu7.3 +libcups2t64 2.4.7-1.2ubuntu7.4 libcupsfilters2-common 2.0.0-0ubuntu7.1 libcupsfilters2t64 2.0.0-0ubuntu7.1 -libcupsimage2t64 2.4.7-1.2ubuntu7.3 +libcupsimage2t64 2.4.7-1.2ubuntu7.4 libcurl3t64-gnutls 8.5.0-2ubuntu10.6 libcurl4t64 8.5.0-2ubuntu10.6 libdaemon0 0.14-7.1ubuntu4 @@ -448,7 +448,7 @@ libdbus-1-3 1.14.10-4ubuntu4.1 libdbus-glib-1-2 0.112-3build2 libdbusmenu-glib4 18.10.20180917~bzr492+repack1-3.1ubuntu5 libdbusmenu-gtk3-4 18.10.20180917~bzr492+repack1-3.1ubuntu5 -libdconf1 0.40.0-4build2 +libdconf1 0.40.0-4ubuntu0.1 libde265-0 1.0.15-1build3 libdebconfclient0 0.271ubuntu3 libdebuginfod-common 0.190-1.1ubuntu0.1 @@ -460,8 +460,8 @@ libdeflate0 1.19-1build1.1 libdevmapper-event1.02.1 2:1.02.185-3ubuntu3.2 libdevmapper1.02.1 2:1.02.185-3ubuntu3.2 libdhash1t64 0.6.2-2.1build1 -libdjvulibre-text 3.5.28-2build4 -libdjvulibre21 3.5.28-2build4 +libdjvulibre-text 3.5.28-2ubuntu0.24.04.1 +libdjvulibre21 3.5.28-2ubuntu0.24.04.1 libdotconf0 1.3-0.3fakesync1build3 libdrm-amdgpu1 2.4.122-1~ubuntu0.24.04.1 libdrm-common 2.4.122-1~ubuntu0.24.04.1 @@ -484,7 +484,7 @@ libedit2 3.1-20230828-1build1 libeditorconfig0 0.12.7-0.1 libefiboot1t64 38-3.1build1 libefivar1t64 38-3.1build1 -libegl-mesa0 24.2.8-1ubuntu1~24.04.2~rb8 +libegl-mesa0 25.0.7-0ubuntu0.24.04.2 libegl1 1.7.0-1build1 libei1 1.2.1-1 libeis1 1.2.1-1 @@ -503,10 +503,10 @@ libexempi8 2.6.5-1build1 libexif12 0.6.24-1build2 libexiv2-27 0.27.6-1build1 libexpat1 2.6.1-2ubuntu0.3 -libext2fs2t64 1.47.0-2.4~exp1ubuntu4 +libext2fs2t64 1.47.0-2.4~exp1ubuntu4.1 libextutils-depends-perl 0.8001-2 libfastjson4 1.2304.0-1build1 -libfdisk1 2.39.3-9ubuntu6.2 +libfdisk1 2.39.3-9ubuntu6.3 libffi8 3.4.6-1build1 libfftw3-single3 3.3.10-1ubuntu3 libfido2-1 1.14.0-1build3 @@ -522,18 +522,18 @@ libfontenc1 1:1.1.8-1build1 libfprint-2-2 1:1.94.7+tod1-0ubuntu5~24.04.4 libfprint-2-tod1 1:1.94.7+tod1-0ubuntu5~24.04.4 libfreeaptx0 0.1.1-2build1 -libfreerdp-server3-3 3.5.1+dfsg1-0ubuntu1 -libfreerdp3-3 3.5.1+dfsg1-0ubuntu1 +libfreerdp-server3-3 3.5.1+dfsg1-0ubuntu1.1 +libfreerdp3-3 3.5.1+dfsg1-0ubuntu1.1 libfreetype6 2.13.2+dfsg-1build3 libfribidi0 1.0.13-3build1 libftdi1-2 1.5-6build5 libfuse3-3 3.14.0-5build1 -libfwupd2 1.9.30-0ubuntu1~24.04.1 +libfwupd2 1.9.31-0ubuntu1~24.04.1 libgail-common 2.24.33-4ubuntu1.1 libgail18t64 2.24.33-4ubuntu1.1 libgamemode0 1.8.1-2build1 libgamemodeauto0 1.8.1-2build1 -libgbm1 24.2.8-1ubuntu1~24.04.2~rb8 +libgbm1 25.0.7-0ubuntu0.24.04.2 libgcc-s1 14.2.0-4ubuntu2~24.04 libgck-1-0 3.41.2-1build3 libgck-2-2 4.2.0-5 @@ -546,9 +546,9 @@ libgdata-common 0.18.1-6build2 libgdata22 0.18.1-6build2 libgdbm-compat4t64 1.23-5.1build1 libgdbm6t64 1.23-5.1build1 -libgdk-pixbuf-2.0-0 2.42.10+dfsg-3ubuntu3.1 -libgdk-pixbuf2.0-bin 2.42.10+dfsg-3ubuntu3.1 -libgdk-pixbuf2.0-common 2.42.10+dfsg-3ubuntu3.1 +libgdk-pixbuf-2.0-0 2.42.10+dfsg-3ubuntu3.2 +libgdk-pixbuf2.0-bin 2.42.10+dfsg-3ubuntu3.2 +libgdk-pixbuf2.0-common 2.42.10+dfsg-3ubuntu3.2 libgdm1 46.2-1ubuntu1~24.04.1 libgee-0.8-2 0.20.6-1build2 libgeoclue-2-0 2.7.0-3ubuntu7 @@ -558,9 +558,7 @@ libgif7 5.2.2-1ubuntu1 libgirepository-1.0-1 1.80.1-1 libgjs0g 1.80.2-1build2 libgl1 1.7.0-1build1 -libgl1-amber-dri 21.3.9-0ubuntu2 -libgl1-mesa-dri 24.2.8-1ubuntu1~24.04.2~rb8 -libglapi-mesa 24.2.8-1ubuntu1~24.04.2~rb8 +libgl1-mesa-dri 25.0.7-0ubuntu0.24.04.2 libgles2 1.7.0-1build1 libglib-object-introspection-perl 0.051-1build3 libglib-perl 3:1.329.3-3build3 @@ -570,9 +568,9 @@ libglib2.0-data 2.80.0-6ubuntu3.4 libglibmm-2.68-1t64 2.78.1-2.2build2 libglu1-mesa 9.0.2-1.1build1 libglvnd0 1.7.0-1build1 -libglx-mesa0 24.2.8-1ubuntu1~24.04.2~rb8 +libglx-mesa0 25.0.7-0ubuntu0.24.04.2 libglx0 1.7.0-1build1 -libgmp10 2:6.3.0+dfsg-2ubuntu6 +libgmp10 2:6.3.0+dfsg-2ubuntu6.1 libgnome-autoar-0-0 0.4.4-2build4 libgnome-bg-4-2t64 44.0-5build2 libgnome-bluetooth-3.0-13 46.0-1ubuntu1 @@ -583,12 +581,12 @@ libgnome-menu-3-0 3.36.0-1.1ubuntu3 libgnome-rr-4-2t64 44.0-5build2 libgnomekbd-common 3.28.1-1build3 libgnomekbd8 3.28.1-1build3 -libgnutls30t64 3.8.3-1.1ubuntu3 +libgnutls30t64 3.8.3-1.1ubuntu3.4 libgoa-1.0-0b 3.50.4-0ubuntu2 libgoa-1.0-common 3.50.4-0ubuntu2 libgoa-backend-1.0-2 3.50.4-0ubuntu2 libgomp1 14.2.0-4ubuntu2~24.04 -libgpg-error0 1.47-3build2 +libgpg-error0 1.47-3build2.1 libgpgme11t64 1.18.0-4.1ubuntu4 libgphoto2-6t64 2.5.31-2.1build2 libgphoto2-l10n 2.5.31-2.1build2 @@ -596,9 +594,9 @@ libgphoto2-port12t64 2.5.31-2.1build2 libgpm2 1.20.7-11 libgraphene-1.0-0 1.10.8-3build2 libgraphite2-3 1.3.14-2build1 -libgs-common 10.02.1~dfsg1-0ubuntu7.6 -libgs10 10.02.1~dfsg1-0ubuntu7.6 -libgs10-common 10.02.1~dfsg1-0ubuntu7.6 +libgs-common 10.02.1~dfsg1-0ubuntu7.7 +libgs10 10.02.1~dfsg1-0ubuntu7.7 +libgs10-common 10.02.1~dfsg1-0ubuntu7.7 libgsf-1-114 1.14.51-2ubuntu0.1 libgsf-1-common 1.14.51-2ubuntu0.1 libgsound0t64 1.0.3-3.2build2 @@ -609,10 +607,10 @@ libgssdp-1.6-0 1.6.3-1build3 libgtk-3-0t64 3.24.41-4ubuntu1.3 libgtk-3-bin 3.24.41-4ubuntu1.3 libgtk-3-common 3.24.41-4ubuntu1.3 -libgtk-4-1 4.14.2+ds-1ubuntu3 -libgtk-4-bin 4.14.2+ds-1ubuntu3 -libgtk-4-common 4.14.2+ds-1ubuntu3 -libgtk-4-media-gstreamer 4.14.2+ds-1ubuntu3 +libgtk-4-1 4.14.5+ds-0ubuntu0.5 +libgtk-4-bin 4.14.5+ds-0ubuntu0.5 +libgtk-4-common 4.14.5+ds-0ubuntu0.5 +libgtk-4-media-gstreamer 4.14.5+ds-0ubuntu0.5 libgtk2.0-0t64 2.24.33-4ubuntu1.1 libgtk2.0-bin 2.24.33-4ubuntu1.1 libgtk2.0-common 2.24.33-4ubuntu1.1 @@ -638,7 +636,7 @@ libheif-plugin-aomdec 1.17.6-1ubuntu4.1 libheif-plugin-aomenc 1.17.6-1ubuntu4.1 libheif-plugin-libde265 1.17.6-1ubuntu4.1 libheif1 1.17.6-1ubuntu4.1 -libhogweed6t64 3.9.1-2.2build1 +libhogweed6t64 3.9.1-2.2build1.1 libhpmud0 3.23.12+dfsg0-0ubuntu5 libhtml-form-perl 6.11-1 libhtml-format-perl 2.16-2 @@ -658,7 +656,7 @@ libical3t64 3.0.17-1.1build3 libice6 2:1.0.10-1build3 libicu74 74.2-1ubuntu3.1 libidn12 1.42-1build1 -libidn2-0 2.3.7-2build1 +libidn2-0 2.3.7-2build1.1 libiec61883-0 1.2.0-6build1 libieee1284-3t64 0.2.11-14.1build1 libijs-0.35 0.35-15.1build1 @@ -675,20 +673,20 @@ libio-socket-ssl-perl 2.085-1 libio-stringy-perl 2.111-3 libip4tc2 1.8.10-3ubuntu2 libip6tc2 1.8.10-3ubuntu2 -libipa-hbac0t64 2.9.4-1.1ubuntu6.2 +libipa-hbac0t64 2.9.4-1.1ubuntu6.3 libipc-system-simple-perl 1.30-2 libisl23 0.26-3build1.1 libisns0t64 0.101-0.3build3 libiw30t64 30~pre9-16.1ubuntu2 libjansson4 2.14-2build2 -libjavascriptcoregtk-4.1-0 2.48.3-0ubuntu0.24.04.1 -libjavascriptcoregtk-6.0-1 2.48.3-0ubuntu0.24.04.1 +libjavascriptcoregtk-4.1-0 2.48.5-0ubuntu0.24.04.1 +libjavascriptcoregtk-6.0-1 2.48.5-0ubuntu0.24.04.1 libjbig0 2.1-6.1ubuntu2 libjbig2dec0 0.20-1build3 libjcat1 0.2.0-2build3 libjpeg-turbo8 2.1.5-2ubuntu2 libjpeg8 8c-2ubuntu11 -libjq1 1.7.1-3build1 +libjq1 1.7.1-3ubuntu0.24.04.1 libjson-c5 0.17-1build1 libjson-glib-1.0-0 1.8.0-2build2 libjson-glib-1.0-common 1.8.0-2build2 @@ -707,9 +705,9 @@ libldacbt-abr2 2.0.2.3+git20200429+ed310a0-4ubuntu2 libldacbt-enc2 2.0.2.3+git20200429+ed310a0-4ubuntu2 libldap-common 2.6.7+dfsg-1~exp1ubuntu8.2 libldap2 2.6.7+dfsg-1~exp1ubuntu8.2 -libldb2 2:2.8.0+samba4.19.5+dfsg-4ubuntu9 +libldb2 2:2.8.0+samba4.19.5+dfsg-4ubuntu9.3 liblerc4 4.0.0+ds-4ubuntu2 -libllvm19 1:19.1.1-1ubuntu1~24.04.2 +libllvm20 1:20.1.2-0ubuntu1~24.04.2 liblmdb0 0.9.31-1build1 liblocale-gettext-perl 1.07-6ubuntu5 liblouis-data 3.29.0-1build1 @@ -722,25 +720,25 @@ liblua5.4-0 5.4.6-3build2 liblvm2cmd2.03 2.03.16-3ubuntu3.2 liblwp-mediatypes-perl 6.04-2 liblwp-protocol-https-perl 6.13-1 -liblz4-1 1.9.4-1build1 +liblz4-1 1.9.4-1build1.1 liblzma5 5.6.1+really5.4.5-1ubuntu0.2 liblzo2-2 2.10-2build4 libmagic-mgc 1:5.45-3build1 libmagic1t64 1:5.45-3build1 libmailtools-perl 2.21-2 -libmalcontent-0-0 0.11.1-1ubuntu1.1 +libmalcontent-0-0 0.11.1-1ubuntu1.2 libmanette-0.2-0 0.2.7-1build2 libmaxminddb0 1.9.1-1build1 libmbim-glib4 1.31.2-0ubuntu3 libmbim-proxy 1.31.2-0ubuntu3 libmbim-utils 1.31.2-0ubuntu3 -libmd0 1.1.0-2build1 +libmd0 1.1.0-2build1.1 libmediaart-2.0-0 1.9.6-1build2 libmm-glib0 1.23.4-0ubuntu2 libmnl0 1.0.5-2build1 libmodule-find-perl 0.16-2 libmodule-scandeps-perl 1.35-1ubuntu0.24.04.1 -libmount1 2.39.3-9ubuntu6.2 +libmount1 2.39.3-9ubuntu6.3 libmozjs-115-0t64 115.10.0-1 libmp3lame0 3.100-6build1 libmpc3 1.3.1-1build1.1 @@ -752,7 +750,8 @@ libmtdev1t64 1.1.6-1.1build1 libmtp-common 1.1.21-3.1build1 libmtp-runtime 1.1.21-3.1build1 libmtp9t64 1.1.21-3.1build1 -libmutter-14-0 46.2-1ubuntu0.24.04.9 +libmutter-14-0 46.2-1ubuntu0.24.04.10 +libnautilus-extension4 1:46.4-0ubuntu0.1 libncurses6 6.4+20240113-1ubuntu2 libncursesw6 6.4+20240113-1ubuntu2 libndp0 1.8-1fakesync1ubuntu0.24.04.1 @@ -761,8 +760,8 @@ libnet-http-perl 6.23-1 libnet-smtp-ssl-perl 1.04-2 libnet-ssleay-perl 1.94-1build4 libnetfilter-conntrack3 1.0.9-6build1 -libnetplan1 1.1.2-2~ubuntu24.04.1 -libnettle8t64 3.9.1-2.2build1 +libnetplan1 1.1.2-2~ubuntu24.04.2 +libnettle8t64 3.9.1-2.2build1.1 libnewt0.52 0.52.24-2ubuntu2 libnfnetlink0 1.0.2-2build1 libnfs14 5.0.2-1build1 @@ -782,8 +781,8 @@ libnotify4 0.8.3-1build2 libnpth0t64 1.6-3.1build1 libnspr4 2:4.35-1.1build1 libnss-mdns 0.15.1-4build1 -libnss-sss 2.9.4-1.1ubuntu6.2 -libnss-systemd 255.4-1ubuntu8.8 +libnss-sss 2.9.4-1.1ubuntu6.3 +libnss-systemd 255.4-1ubuntu8.10 libnss3 2:3.98-1build1 libntfs-3g89t64 1:2022.10.3-1.2ubuntu3 libnuma1 2.0.18-1build1 @@ -792,7 +791,7 @@ libogg0 1.3.5-3build1 libonig5 6.9.9-1build1 libopengl0 1.7.0-1build1 libopeniscsiusr 2.1.9-3ubuntu5.4 -libopenjp2-7 2.5.0-2ubuntu0.3 +libopenjp2-7 2.5.0-2ubuntu0.4 libopus0 1.4-1build1 liborc-0.4-0t64 1:0.4.38-1ubuntu0.1 libp11-kit0 0.25.3-4ubuntu2.1 @@ -800,13 +799,13 @@ libpackagekit-glib2-18 1.2.8-2ubuntu1.2 libpam-cap 1:2.66-5ubuntu2.2 libpam-fprintd 1.94.3-1 libpam-gnome-keyring 46.1-2build1 -libpam-modules 1.5.3-5ubuntu5 -libpam-modules-bin 1.5.3-5ubuntu5 +libpam-modules 1.5.3-5ubuntu5.4 +libpam-modules-bin 1.5.3-5ubuntu5.4 libpam-pwquality 1.4.5-3build1 -libpam-runtime 1.5.3-5ubuntu5 -libpam-sss 2.9.4-1.1ubuntu6.2 -libpam-systemd 255.4-1ubuntu8.8 -libpam0g 1.5.3-5ubuntu5 +libpam-runtime 1.5.3-5ubuntu5.4 +libpam-sss 2.9.4-1.1ubuntu6.3 +libpam-systemd 255.4-1ubuntu8.10 +libpam0g 1.5.3-5ubuntu5.4 libpango-1.0-0 1.52.1+ds-1build1 libpangocairo-1.0-0 1.52.1+ds-1build1 libpangoft2-1.0-0 1.52.1+ds-1build1 @@ -825,12 +824,12 @@ libpcre2-8-0 10.42-4ubuntu2.1 libpcsclite1 2.0.3-1build1 libpeas-1.0-0 1.36.0-3build4 libpeas-common 1.36.0-3build4 -libperl5.38t64 5.38.2-3.2ubuntu0.1 +libperl5.38t64 5.38.2-3.2ubuntu0.2 libphonenumber8 8.12.57+ds-4.2build3 libpipeline1 1.5.7-2 -libpipewire-0.3-0t64 1.0.5-1ubuntu3 -libpipewire-0.3-common 1.0.5-1ubuntu3 -libpipewire-0.3-modules 1.0.5-1ubuntu3 +libpipewire-0.3-0t64 1.0.5-1ubuntu3.1 +libpipewire-0.3-common 1.0.5-1ubuntu3.1 +libpipewire-0.3-modules 1.0.5-1ubuntu3.1 libpixman-1-0 0.42.2-1build1 libpkcs11-helper1t64 1.29.0-2.1build2 libplist-2.0-4 2.3.0-1~exp2build2 @@ -838,18 +837,18 @@ libplymouth5 24.004.60-1ubuntu7.1 libpng16-16t64 1.6.43-5build1 libpolkit-agent-1-0 124-2ubuntu1.24.04.2 libpolkit-gobject-1-0 124-2ubuntu1.24.04.2 -libpoppler-cpp0t64 24.02.0-1ubuntu9.4 -libpoppler-glib8t64 24.02.0-1ubuntu9.4 -libpoppler134 24.02.0-1ubuntu9.4 +libpoppler-cpp0t64 24.02.0-1ubuntu9.6 +libpoppler-glib8t64 24.02.0-1ubuntu9.6 +libpoppler134 24.02.0-1ubuntu9.6 libpopt0 1.19+dfsg-1build1 libportal-gtk4-1 0.7.1-5build5 libportal1 0.7.1-5build5 libppd2 2:2.0.0-0ubuntu4.1 libppd2-common 2:2.0.0-0ubuntu4.1 libproc-processtable-perl 0.636-1build3 -libproc2-0 2:4.0.4-4ubuntu3 +libproc2-0 2:4.0.4-4ubuntu3.2 libprotobuf-c1 1.4.1-1ubuntu4 -libprotobuf32t64 3.21.12-8.2ubuntu0.1 +libprotobuf32t64 3.21.12-8.2ubuntu0.2 libproxy1-plugin-gsettings 0.5.4-4build1 libproxy1-plugin-networkmanager 0.5.4-4build1 libproxy1v5 0.5.4-4build1 @@ -859,9 +858,9 @@ libpulse0 1:16.1+dfsg1-2ubuntu10.1 libpwquality-common 1.4.5-3build1 libpwquality1 1.4.5-3build1 libpython3-stdlib 3.12.3-0ubuntu2 -libpython3.12-minimal 3.12.3-1ubuntu0.7 -libpython3.12-stdlib 3.12.3-1ubuntu0.7 -libpython3.12t64 3.12.3-1ubuntu0.7 +libpython3.12-minimal 3.12.3-1ubuntu0.8 +libpython3.12-stdlib 3.12.3-1ubuntu0.8 +libpython3.12t64 3.12.3-1ubuntu0.8 libqmi-glib5 1.35.2-0ubuntu2 libqmi-proxy 1.35.2-0ubuntu2 libqmi-utils 1.35.2-0ubuntu2 @@ -891,10 +890,10 @@ libsasl2-modules 2.1.28+dfsg1-5ubuntu3.1 libsasl2-modules-db 2.1.28+dfsg1-5ubuntu3.1 libsasl2-modules-gssapi-mit 2.1.28+dfsg1-5ubuntu3.1 libsbc1 2.0-1build1 -libseccomp2 2.5.5-1ubuntu3 +libseccomp2 2.5.5-1ubuntu3.1 libsecret-1-0 0.21.4-1build3 libsecret-common 0.21.4-1build3 -libselinux1 3.5-2ubuntu2 +libselinux1 3.5-2ubuntu2.1 libsemanage-common 3.5-1build5 libsemanage2 3.5-1build5 libsensors-config 1:3.6.0-9build1 @@ -907,8 +906,8 @@ libsigc++-3.0-0 3.6.0-2 libsigsegv2 2.14-1ubuntu2 libslang2 2.3.3-3build2 libsm6 2:1.2.3-1build3 -libsmartcols1 2.39.3-9ubuntu6.2 -libsmbclient0 2:4.19.5+dfsg-4ubuntu9 +libsmartcols1 2.39.3-9ubuntu6.3 +libsmbclient0 2:4.19.5+dfsg-4ubuntu9.3 libsnapd-glib-2-1 1.64-0ubuntu5 libsndfile1 1.2.2-1ubuntu5.24.04.1 libsnmp-base 5.9.4+dfsg-1.1ubuntu3.1 @@ -916,36 +915,37 @@ libsnmp40t64 5.9.4+dfsg-1.1ubuntu3.1 libsodium23 1.0.18-1build3 libsonic0 0.2.0-13build1 libsort-naturally-perl 1.03-4 -libsoup-2.4-1 2.74.3-6ubuntu1.5 -libsoup-3.0-0 3.4.4-5ubuntu0.4 -libsoup-3.0-common 3.4.4-5ubuntu0.4 -libsoup2.4-common 2.74.3-6ubuntu1.5 +libsoup-2.4-1 2.74.3-6ubuntu1.6 +libsoup-3.0-0 3.4.4-5ubuntu0.5 +libsoup-3.0-common 3.4.4-5ubuntu0.5 +libsoup2.4-common 2.74.3-6ubuntu1.6 libsource-highlight-common 3.1.9-4.3build1 libsource-highlight4t64 3.1.9-4.3build1 -libspa-0.2-bluetooth 1.0.5-1ubuntu3 -libspa-0.2-modules 1.0.5-1ubuntu3 +libspa-0.2-bluetooth 1.0.5-1ubuntu3.1 +libspa-0.2-modules 1.0.5-1ubuntu3.1 libspectre1 0.2.12-1build2 libspeechd2 0.12.0~rc2-2build3 libspeex1 1.2.1-2ubuntu2.24.04.1 libspeexdsp1 1.2.1-1ubuntu3 -libsqlite3-0 3.45.1-1ubuntu2.3 -libss2 1.47.0-2.4~exp1ubuntu4 -libssh-4 0.10.6-2build2 -libssl3t64 3.0.13-0ubuntu3 -libsss-certmap0 2.9.4-1.1ubuntu6.2 -libsss-idmap0 2.9.4-1.1ubuntu6.2 -libsss-nss-idmap0 2.9.4-1.1ubuntu6.2 +libsqlite3-0 3.45.1-1ubuntu2.4 +libss2 1.47.0-2.4~exp1ubuntu4.1 +libssh-4 0.10.6-2ubuntu0.1 +libssl3t64 3.0.13-0ubuntu3.5 +libsss-certmap0 2.9.4-1.1ubuntu6.3 +libsss-idmap0 2.9.4-1.1ubuntu6.3 +libsss-nss-idmap0 2.9.4-1.1ubuntu6.3 libstartup-notification0 0.12-6build3 libstdc++6 14.2.0-4ubuntu2~24.04 libstemmer0d 2.2.0-4build1 libsynctex2 2023.20230311.66589-9build3 +libsysfs2 2.1.1-6build1 libsysmetrics1 1.7.3ubuntu0.24.04.3 -libsystemd-shared 255.4-1ubuntu8.8 -libsystemd0 255.4-1ubuntu8.8 +libsystemd-shared 255.4-1ubuntu8.10 +libsystemd0 255.4-1ubuntu8.10 libtag1v5 1.13.1-1build1 libtag1v5-vanilla 1.13.1-1build1 libtalloc2 2.4.2-1build2 -libtasn1-6 4.19.0-3build1 +libtasn1-6 4.19.0-3ubuntu0.24.04.1 libtcl8.6 8.6.14+dfsg-1build1 libtdb1 1.4.10-1build1 libteamdctl0 1.31-1build3 @@ -958,7 +958,7 @@ libthai-data 0.1.29-2build1 libthai0 0.1.29-2build1 libtheora0 1.1.1+dfsg.1-16.1build3 libtie-ixhash-perl 1.23-4 -libtiff6 4.5.1+git230720-4ubuntu2.2 +libtiff6 4.5.1+git230720-4ubuntu2.3 libtimedate-perl 2.3300-2 libtinfo6 6.4+20240113-1ubuntu2 libtirpc-common 1.3.4+ds-1.1build1 @@ -984,9 +984,9 @@ libtss2-tctildr0t64 4.0.1-7.1ubuntu5.1 libtwolame0 0.4.0-2build3 libu2f-udev 1.1.10-3build3 libuchardet0 0.0.8-1build1 -libudev1 255.4-1ubuntu8.8 -libudisks2-0 2.10.1-6ubuntu1.2 -libunistring5 1.1-2build1 +libudev1 255.4-1ubuntu8.10 +libudisks2-0 2.10.1-6ubuntu1.3 +libunistring5 1.1-2build1.1 libunity-protocol-private0 7.1.4+19.04.20190319-6build4 libunity-scopes-json-def-desktop 7.1.4+19.04.20190319-6build4 libunity9 7.1.4+19.04.20190319-6build4 @@ -997,7 +997,7 @@ liburi-perl 5.27-1 libusb-1.0-0 2:1.0.27-1 libusbmuxd6 2.0.2-4build3 libutempter0 1.2.1-3build1 -libuuid1 2.39.3-9ubuntu6.2 +libuuid1 2.39.3-9ubuntu6.3 libuv1t64 1.48.0-1.1build1 libv4l-0t64 1.26.1-4build3 libv4lconvert0t64 1.26.1-4build3 @@ -1017,16 +1017,16 @@ libwayland-client0 1.22.0-2.1build1 libwayland-cursor0 1.22.0-2.1build1 libwayland-egl1 1.22.0-2.1build1 libwayland-server0 1.22.0-2.1build1 -libwbclient0 2:4.19.5+dfsg-4ubuntu9 -libwebkit2gtk-4.1-0 2.48.3-0ubuntu0.24.04.1 -libwebkitgtk-6.0-4 2.48.3-0ubuntu0.24.04.1 +libwbclient0 2:4.19.5+dfsg-4ubuntu9.3 +libwebkit2gtk-4.1-0 2.48.5-0ubuntu0.24.04.1 +libwebkitgtk-6.0-4 2.48.5-0ubuntu0.24.04.1 libwebp7 1.3.2-0.4build3 libwebpdemux2 1.3.2-0.4build3 libwebpmux3 1.3.2-0.4build3 libwebrtc-audio-processing1 0.3.1-0ubuntu6 libwhoopsie-preferences0 23build3 libwhoopsie0 0.2.77build3 -libwinpr3-3 3.5.1+dfsg1-0ubuntu1 +libwinpr3-3 3.5.1+dfsg1-0ubuntu1.1 libwireplumber-0.4-0 0.4.17-1ubuntu4 libwmf-0.2-7 0.2.13-1.1build3 libwmf-0.2-7-gtk 0.2.13-1.1build3 @@ -1044,8 +1044,7 @@ libx11-protocol-perl 0.56-9 libx11-xcb1 2:1.8.7-1build1 libxau6 1:1.0.9-1build6 libxaw7 2:1.0.14-1build2 -libxcb-damage0 1.15-1ubuntu2 -libxcb-dri2-0 1.15-1ubuntu2 +libxcb-damage0 1.15-1ubuntu2 libxcb-dri3-0 1.15-1ubuntu2 libxcb-glx0 1.15-1ubuntu2 libxcb-icccm4 0.4.1-1.1build3 @@ -1083,7 +1082,7 @@ libxklavier16 5.4-5build2 libxml-parser-perl 2.47-1build3 libxml-twig-perl 1:3.52-2 libxml-xpathengine-perl 0.14-2 -libxml2 2.9.14+dfsg-1.3ubuntu3.3 +libxml2 2.9.14+dfsg-1.3ubuntu3.5 libxmlb2 0.3.18-1 libxmlsec1t64 1.2.39-5build2 libxmlsec1t64-openssl 1.2.39-5build2 @@ -1106,11 +1105,14 @@ libyaml-0-2 0.2.5-1build1 libyelp0 42.2-1ubuntu0.24.04.1 libzstd1 1.5.5+dfsg2-2build1.1 linux-base 4.5ubuntu9+24.04.1 +linux-firmware 20240318.git3b128b60-0ubuntu2.17 linux-sound-base 1.0.25+dfsg-0ubuntu7 -locales 2.39-0ubuntu8.4 +locales 2.39-0ubuntu8.5 login 1:4.13+dfsg1-4ubuntu3.2 +locales 2.39-0ubuntu8.6 +login 1:4.13+dfsg1-4ubuntu3 logrotate 3.21.0-2build1 -logsave 1.47.0-2.4~exp1ubuntu4 +logsave 1.47.0-2.4~exp1ubuntu4.1 lsb-release 12.0-2 lshw 02.19.git.2021.06.19.996aaad9c7-2build3 lsof 4.95.0-1build3 @@ -1122,20 +1124,22 @@ manpages 6.7-2 mawk 1.3.4.20240123-1build1 mdadm 4.3-1ubuntu2.1 media-types 10.1.0 -mesa-libgallium 24.2.8-1ubuntu1~24.04.2~rb8 -mesa-vulkan-drivers 24.2.8-1ubuntu1~24.04.2~rb8 +mesa-libgallium 25.0.7-0ubuntu0.24.04.2 +mesa-vulkan-drivers 25.0.7-0ubuntu0.24.04.2 mobile-broadband-provider-info 20230416-1 modemmanager 1.23.4-0ubuntu2 mokutil 0.6.0-2build3 -motd-news-config 13ubuntu10.2 -mount 2.39.3-9ubuntu6.2 +motd-news-config 13ubuntu10.3 +mount 2.39.3-9ubuntu6.3 mousetweaks 3.32.0-4build2 mscompress 0.4-10build1 mtr-tiny 0.95-1.1ubuntu0.1 multipath-tools 0.9.4-5ubuntu8 -mutter-common 46.2-1ubuntu0.24.04.9 -mutter-common-bin 46.2-1ubuntu0.24.04.9 +mutter-common 46.2-1ubuntu0.24.04.10 +mutter-common-bin 46.2-1ubuntu0.24.04.10 nano 7.2-2ubuntu0.1 +nautilus 1:46.4-0ubuntu0.1 +nautilus-data 1:46.4-0ubuntu0.1 nautilus-extension-gnome-terminal 3.52.0-1ubuntu2 nautilus-sendto 3.8.6-7build2 ncurses-base 6.4+20240113-1ubuntu2 @@ -1144,9 +1148,8 @@ ncurses-term 6.4+20240113-1ubuntu2 needrestart 3.6-7ubuntu4.5 netbase 6.4 netcat-openbsd 1.226-1ubuntu2 -netplan-generator 1.1.2-2~ubuntu24.04.1 -netplan.io 1.1.2-2~ubuntu24.04.1 -net-tools +netplan-generator 1.1.2-2~ubuntu24.04.2 +netplan.io 1.1.2-2~ubuntu24.04.2 network-manager 1.46.0-1ubuntu2.2 network-manager-config-connectivity-ubuntu 1.46.0-1ubuntu2.2 network-manager-gnome 1.34.0-1ubuntu3 @@ -1161,11 +1164,11 @@ numactl 2.0.18-1build1 open-iscsi 2.1.9-3ubuntu5.4 open-vm-tools 2:12.4.5-1~ubuntu0.24.04.2 openprinting-ppds 20230202-1 -openssh-client 1:9.6p1-3ubuntu13.12 -openssh-server 1:9.6p1-3ubuntu13.12 -openssh-sftp-server 1:9.6p1-3ubuntu13.12 -openssl 3.0.13-0ubuntu3 -openvpn 2.6.12-0ubuntu0.24.04.3 +openssh-client 1:9.6p1-3ubuntu13.14 +openssh-server 1:9.6p1-3ubuntu13.14 +openssh-sftp-server 1:9.6p1-3ubuntu13.14 +openssl 3.0.13-0ubuntu3.5 +openvpn 2.6.14-0ubuntu0.24.04.1 orca 46.1-1ubuntu1 os-prober 1.81ubuntu4 overlayroot 0.49~24.04.1 @@ -1174,23 +1177,23 @@ p11-kit-modules 0.25.3-4ubuntu2.1 packagekit 1.2.8-2ubuntu1.2 packagekit-tools 1.2.8-2ubuntu1.2 parted 3.6-4build1 -passwd 1:4.13+dfsg1-4ubuntu3 +passwd 1:4.13+dfsg1-4ubuntu3.2 pastebinit 1.6.2-1 patch 2.7.6-7build3 pci.ids 0.0~2024.03.31-1ubuntu0.1 pciutils 1:3.10.0-2build1 pcmciautils 018-14build1 -perl 5.38.2-3.2ubuntu0.1 -perl-base 5.38.2-3.2ubuntu0.1 -perl-modules-5.38 5.38.2-3.2ubuntu0.1 +perl 5.38.2-3.2ubuntu0.2 +perl-base 5.38.2-3.2ubuntu0.2 +perl-modules-5.38 5.38.2-3.2ubuntu0.2 perl-openssl-defaults 7build3 pinentry-curses 1.2.1-3ubuntu5 pinentry-gnome3 1.2.1-3ubuntu5 -pipewire 1.0.5-1ubuntu3 -pipewire-alsa 1.0.5-1ubuntu3 -pipewire-audio 1.0.5-1ubuntu3 -pipewire-bin 1.0.5-1ubuntu3 -pipewire-pulse 1.0.5-1ubuntu3 +pipewire 1.0.5-1ubuntu3.1 +pipewire-alsa 1.0.5-1ubuntu3.1 +pipewire-audio 1.0.5-1ubuntu3.1 +pipewire-bin 1.0.5-1ubuntu3.1 +pipewire-pulse 1.0.5-1ubuntu3.1 pkexec 124-2ubuntu1.24.04.2 plymouth 24.004.60-1ubuntu7.1 plymouth-label 24.004.60-1ubuntu7.1 @@ -1201,9 +1204,9 @@ policykit-desktop-privileges 0.22 polkitd 124-2ubuntu1.24.04.2 pollinate 4.33-3.1ubuntu1.1 poppler-data 0.4.12-1 -poppler-utils 24.02.0-1ubuntu9.4 -power-profiles-daemon 0.21-1 -powermgmt-base 1.37 +poppler-utils 24.02.0-1ubuntu9.6 +power-profiles-daemon 0.21-1ubuntu1 +powermgmt-base 1.37ubuntu0.1 ppp 2.4.9-1+1.1ubuntu4 pptp-linux 1.10.0-1build4 printer-driver-brlaser 6-3build2 @@ -1219,15 +1222,15 @@ printer-driver-ptouch 1.7-1build2 printer-driver-pxljr 1.4+repack0-6build2 printer-driver-sag-gdi 0.1-8 printer-driver-splix 2.0.0+svn315-7fakesync1ubuntu1 -procps 2:4.0.4-4ubuntu3 +procps 2:4.0.4-4ubuntu3.2 protection-domain-mapper 1.0-4ubuntu4 psmisc 23.7-1build1 publicsuffix 20231001.0357-0.1 -python-apt-common 2.7.7ubuntu4 +python-apt-common 2.7.7ubuntu5 python-babel-localedata 2.10.3-3build1 python3 3.12.3-0ubuntu2 -python3-apport 2.28.1-0ubuntu3.7 -python3-apt 2.7.7ubuntu4 +python3-apport 2.28.1-0ubuntu3.8 +python3-apt 2.7.7ubuntu5 python3-aptdaemon 1.1.1+bzr982-0ubuntu44 python3-aptdaemon.gtk3widgets 1.1.1+bzr982-0ubuntu44 python3-attr 23.2.0-2 @@ -1257,7 +1260,7 @@ python3-debian 0.1.49ubuntu2 python3-defer 1.0.6-2.1ubuntu1 python3-distro 1.9.0-1 python3-distro-info 1.7build1 -python3-distupgrade 1:24.04.26 +python3-distupgrade 1:24.04.27 python3-gdbm 3.12.3-0ubuntu1 python3-gi 3.48.2-1 python3-hamcrest 2.1.0-1 @@ -1282,7 +1285,7 @@ python3-markupsafe 2.1.5-1build2 python3-mdurl 0.1.2-1 python3-minimal 3.12.3-0ubuntu2 python3-netifaces 0.11.0-2build3 -python3-netplan 1.1.2-2~ubuntu24.04.1 +python3-netplan 1.1.2-2~ubuntu24.04.2 python3-newt 0.52.24-2ubuntu2 python3-oauthlib 3.2.2-1 python3-olefile 0.46-3 @@ -1291,7 +1294,7 @@ python3-packaging 24.0-1 python3-pexpect 4.9-2 python3-pil 10.2.0-1ubuntu1 python3-pkg-resources 68.1.2-2ubuntu1.2 -python3-problem-report 2.28.1-0ubuntu3.7 +python3-problem-report 2.28.1-0ubuntu3.8 python3-ptyprocess 0.7.0-5 python3-pyasn1 0.4.8-4 python3-pyasn1-modules 0.2.8-1 @@ -1305,9 +1308,9 @@ python3-serial 3.5-2 python3-service-identity 24.1.0-1 python3-setuptools 68.1.2-2ubuntu1.2 python3-six 1.16.0-4 -python3-software-properties 0.99.49.2 +python3-software-properties 0.99.49.3 python3-speechd 0.12.0~rc2-2build3 -python3-sss 2.9.4-1.1ubuntu6.2 +python3-sss 2.9.4-1.1ubuntu6.3 python3-systemd 235-1build4 python3-twisted 24.3.0-1ubuntu0.1 python3-tz 2024.1-2 @@ -1318,19 +1321,22 @@ python3-xdg 0.28-2 python3-xkit 0.5.0ubuntu6 python3-yaml 6.0.1-2build2 python3-zope.interface 6.1-1build1 -python3.12 3.12.3-1ubuntu0.7 -python3.12-minimal 3.12.3-1ubuntu0.7 +python3.12 3.12.3-1ubuntu0.8 +python3.12-minimal 3.12.3-1ubuntu0.8 qcom-iot-defaults 1.15 +python3.12 3.12.3-1ubuntu0.8 +python3.12-minimal 3.12.3-1ubuntu0.8 +qcom-iot-defaults 1.18 qcom-video-firmware 1.0.r00075.1-0ubuntu2 qrtr-tools 1.0-2ubuntu3 readline-common 8.2-4build1 -rfkill 2.39.3-9ubuntu6.2 +rfkill 2.39.3-9ubuntu6.3 rsync 3.2.7-1ubuntu1.2 rsyslog 8.2312.0-3ubuntu9.1 rtkit 0.13-5build1 run-one 1.17-0ubuntu2 rygel 0.42.5-1ubuntu3 -samba-libs 2:4.19.5+dfsg-4ubuntu9 +samba-libs 2:4.19.5+dfsg-4ubuntu9.3 sane-airscan 0.99.29-0ubuntu4 sane-utils 1.2.1-7build4 sbsigntool 0.9.4-3.1ubuntu7 @@ -1346,9 +1352,9 @@ sgml-base 1.31 sgml-data 2.0.11+nmu1 shared-mime-info 2.4-4 shim-signed 1.58+15.8-0ubuntu1 -snapd 2.67.1+24.04 -software-properties-common 0.99.49.2 -software-properties-gtk 0.99.49.2 +snapd 2.68.5+ubuntu24.04.1 +software-properties-common 0.99.49.3 +software-properties-gtk 0.99.49.3 sosreport 4.8.2-0ubuntu0~24.04.2 sound-icons 0.1-8 sound-theme-freedesktop 0.8-2ubuntu1 @@ -1359,35 +1365,36 @@ spice-vdagent 0.22.1-4build3 squashfs-tools 1:4.6.1-1build1 ssh-import-id 5.11-0ubuntu2.24.04.1 ssl-cert 1.1.2ubuntu1 -sssd 2.9.4-1.1ubuntu6.2 -sssd-ad 2.9.4-1.1ubuntu6.2 -sssd-ad-common 2.9.4-1.1ubuntu6.2 -sssd-common 2.9.4-1.1ubuntu6.2 -sssd-ipa 2.9.4-1.1ubuntu6.2 -sssd-krb5 2.9.4-1.1ubuntu6.2 -sssd-krb5-common 2.9.4-1.1ubuntu6.2 -sssd-ldap 2.9.4-1.1ubuntu6.2 -sssd-proxy 2.9.4-1.1ubuntu6.2 +sssd 2.9.4-1.1ubuntu6.3 +sssd-ad 2.9.4-1.1ubuntu6.3 +sssd-ad-common 2.9.4-1.1ubuntu6.3 +sssd-common 2.9.4-1.1ubuntu6.3 +sssd-ipa 2.9.4-1.1ubuntu6.3 +sssd-krb5 2.9.4-1.1ubuntu6.3 +sssd-krb5-common 2.9.4-1.1ubuntu6.3 +sssd-ldap 2.9.4-1.1ubuntu6.3 +sssd-proxy 2.9.4-1.1ubuntu6.3 strace 6.8-0ubuntu2 sudo 1.9.15p5-3ubuntu5.24.04.1 switcheroo-control 2.6-2build2 +sysfsutils 2.1.1-6build1 sysstat 12.6.1-2 system-config-printer-common 1.5.18-1ubuntu9 system-config-printer-udev 1.5.18-1ubuntu9 -systemd 255.4-1ubuntu8.8 -systemd-dev 255.4-1ubuntu8.8 +systemd 255.4-1ubuntu8.10 +systemd-dev 255.4-1ubuntu8.10 systemd-hwe-hwdb 255.1.4 -systemd-oomd 255.4-1ubuntu8.8 -systemd-resolved 255.4-1ubuntu8.8 -systemd-sysv 255.4-1ubuntu8.8 -systemd-timesyncd 255.4-1ubuntu8.8 +systemd-oomd 255.4-1ubuntu8.10 +systemd-resolved 255.4-1ubuntu8.10 +systemd-sysv 255.4-1ubuntu8.10 +systemd-timesyncd 255.4-1ubuntu8.10 sysvinit-utils 3.08-6ubuntu3 tar 1.35+dfsg-3build1 tc9564-firmware 4.0.0-1ubuntu1 tcl 8.6.14build1 tcl8.6 8.6.14+dfsg-1build1 tcpdump 4.99.4-3ubuntu4 -tecla 46.0-1build1 +tecla 46.0-1ubuntu0.1 telnet 0.17+2.5-3ubuntu4 thin-provisioning-tools 0.9.0-2ubuntu5.1 time 1.9-0.2build1 @@ -1406,20 +1413,20 @@ ubuntu-drivers-common 1:0.9.7.6ubuntu3.2 ubuntu-keyring 2023.11.28.1 ubuntu-minimal 1.539.2 ubuntu-mono 24.04-0ubuntu1 -ubuntu-pro-client 35.1ubuntu0~24.04 -ubuntu-pro-client-l10n 35.1ubuntu0~24.04 -ubuntu-release-upgrader-core 1:24.04.26 -ubuntu-release-upgrader-gtk 1:24.04.26 +ubuntu-pro-client 36ubuntu0~24.04 +ubuntu-pro-client-l10n 36ubuntu0~24.04 +ubuntu-release-upgrader-core 1:24.04.27 +ubuntu-release-upgrader-gtk 1:24.04.27 ubuntu-report 1.7.3ubuntu0.24.04.3 ubuntu-server 1.539.2 ubuntu-session 46.0-1ubuntu4 -ubuntu-settings 24.04.5 +ubuntu-settings 24.04.6 ubuntu-standard 1.539.2 ubuntu-wallpapers 24.04.2 ubuntu-wallpapers-noble 24.04.2 ucf 3.0043+nmu1 -udev 255.4-1ubuntu8.8 -udisks2 2.10.1-6ubuntu1.2 +udev 255.4-1ubuntu8.10 +udisks2 2.10.1-6ubuntu1.3 ufw 0.36.2-6 unattended-upgrades 2.9.1+nmu4ubuntu1 unzip 6.0-28ubuntu4.1 @@ -1434,15 +1441,20 @@ usb-modeswitch-data 20191128-6 usb.ids 2024.03.18-1 usbmuxd 1.1.1-5~exp3ubuntu2 usbutils 1:017-3build1 -util-linux 2.39.3-9ubuntu6.2 -uuid-runtime 2.39.3-9ubuntu6.2 +util-linux 2.39.3-9ubuntu6.3 +uuid-runtime 2.39.3-9ubuntu6.3 vim 2:9.1.0016-1ubuntu7.8 vim-common 2:9.1.0016-1ubuntu7.8 vim-runtime 2:9.1.0016-1ubuntu7.8 vim-tiny 2:9.1.0016-1ubuntu7.8 +util-linux 2.39.3-9ubuntu6.3 +uuid-runtime 2.39.3-9ubuntu6.3 +vim 2:9.1.0016-1ubuntu7.9 +vim-common 2:9.1.0016-1ubuntu7.9 +vim-runtime 2:9.1.0016-1ubuntu7.9 +vim-tiny 2:9.1.0016-1ubuntu7.9 wamerican 2020.12.07-2 webp-pixbuf-loader 0.2.4-2build2 -weston wget 1.21.4-1ubuntu4.1 whiptail 0.52.24-2ubuntu2 whoopsie 0.2.77build3 @@ -1492,11 +1504,11 @@ xserver-xorg-video-all 1:7.7+23ubuntu3 xserver-xorg-video-amdgpu 23.0.0-1build1 xserver-xorg-video-ati 1:22.0.0-1build1 xserver-xorg-video-fbdev 1:0.5.0-2build2 -xserver-xorg-video-nouveau 1:1.0.17-2build1 +xserver-xorg-video-nouveau 1:1.0.17-2ubuntu0.1 xserver-xorg-video-radeon 1:22.0.0-1build1 -xserver-xorg-video-vesa 1:2.6.0-1 +xserver-xorg-video-vesa 1:2.6.0-1ubuntu0.1 xwayland 2:23.2.6-1ubuntu0.6 -xxd 2:9.1.0016-1ubuntu7.8 +xxd 2:9.1.0016-1ubuntu7.9 xz-utils 5.6.1+really5.4.5-1ubuntu0.2 yaru-theme-gnome-shell 24.04.2-0ubuntu1 yaru-theme-gtk 24.04.2-0ubuntu1 @@ -1508,5 +1520,6 @@ zenity 4.0.1-1build3 zenity-common 4.0.1-1build3 zerofree 1.1.1-1build5 zip 3.0-13ubuntu0.2 -zlib1g 1:1.3.dfsg-3.1ubuntu2 +zlib1g 1:1.3.dfsg-3.1ubuntu2.1 zstd 1.5.5+dfsg2-2build1.1 + diff --git a/ubuntu/packages/base/server.manifest b/ubuntu/packages/base/server.manifest index 4ed2635..2b4b119 100644 --- a/ubuntu/packages/base/server.manifest +++ b/ubuntu/packages/base/server.manifest @@ -3,38 +3,38 @@ adduser 3.137ubuntu1 alsa-topology-conf 1.2.5.1-2 alsa-ucm-conf 1.2.10-1ubuntu5.7 apparmor 4.0.1really4.0.1-0ubuntu0.24.04.4 -apport 2.28.1-0ubuntu3.7 -apport-core-dump-handler 2.28.1-0ubuntu3.7 +apport 2.28.1-0ubuntu3.8 +apport-core-dump-handler 2.28.1-0ubuntu3.8 apport-symptoms 0.25 appstream 1.0.2-1build6 apt 2.8.3 apt-utils 2.8.3 -base-files 13ubuntu10.2 +base-files 13ubuntu10.3 base-passwd 3.6.3build1 bash 5.2.21-2ubuntu4 bash-completion 1:2.11-8 bc 1.07.1-3ubuntu4 bcache-tools 1.0.8-5build1 -bind9-dnsutils 1:9.18.30-0ubuntu0.24.04.2 -bind9-host 1:9.18.30-0ubuntu0.24.04.2 -bind9-libs 1:9.18.30-0ubuntu0.24.04.2 -bluez 5.72-0ubuntu5.3 +bind9-dnsutils 1:9.18.39-0ubuntu0.24.04.1 +bind9-host 1:9.18.39-0ubuntu0.24.04.1 +bind9-libs 1:9.18.39-0ubuntu0.24.04.1 +bluez 5.72-0ubuntu5.4 bolt 0.9.7-1 -bsdextrautils 2.39.3-9ubuntu6.2 -bsdutils 1:2.39.3-9ubuntu6.2 +bsdextrautils 2.39.3-9ubuntu6.3 +bsdutils 1:2.39.3-9ubuntu6.3 btrfs-progs 6.6.3-1.1build2 busybox-initramfs 1:1.36.1-6ubuntu3.1 busybox-static 1:1.36.1-6ubuntu3.1 byobu 6.11-0ubuntu1 ca-certificates 20240203 cloud-guest-utils 0.33-1 -cloud-init 25.1.2-0ubuntu0~24.04.1 +cloud-init 25.1.4-0ubuntu0~24.04.1 cloud-initramfs-copymods 0.49~24.04.1 cloud-initramfs-dyn-netconf 0.49~24.04.1 command-not-found 23.04.0 console-setup 1.226ubuntu1 console-setup-linux 1.226ubuntu1 -coreutils 9.4-3ubuntu6 +coreutils 9.4-3ubuntu6.1 cpio 2.15+dfsg-1ubuntu2 cron 3.0pl1-184ubuntu2 cron-daemon-common 3.0pl1-184ubuntu2 @@ -49,63 +49,62 @@ dbus-daemon 1.14.10-4ubuntu4.1 dbus-session-bus-common 1.14.10-4ubuntu4.1 dbus-system-bus-common 1.14.10-4ubuntu4.1 dbus-user-session 1.14.10-4ubuntu4.1 -dconf-gsettings-backend 0.40.0-4build2 -dconf-service 0.40.0-4build2 +dconf-gsettings-backend 0.40.0-4ubuntu0.1 +dconf-service 0.40.0-4ubuntu0.1 debconf 1.5.86ubuntu1 debconf-i18n 1.5.86ubuntu1 debianutils 5.17build1 dhcpcd-base 1:10.0.6-1ubuntu3.1 diffutils 1:3.10-1build1 -dirmngr 2.4.4-2ubuntu17.2 +dirmngr 2.4.4-2ubuntu17.3 distro-info 1.7build1 distro-info-data 0.60ubuntu0.3 dmeventd 2:1.02.185-3ubuntu3.2 dmidecode 3.5-3ubuntu0.1 dmsetup 2:1.02.185-3ubuntu3.2 dns-root-data 2024071801~ubuntu0.24.04.1 -dnsmasq-base 2.90-2build2 +dnsmasq-base 2.90-2ubuntu0.1 dosfstools 4.2-1.1build1 -dpkg 1.22.6ubuntu6.1 +dpkg 1.22.6ubuntu6 dracut-install 060+5-1ubuntu3.3 -e2fsprogs 1.47.0-2.4~exp1ubuntu4 +e2fsprogs 1.47.0-2.4~exp1ubuntu4.1 eatmydata 131-1ubuntu1 ed 1.20.1-1 efibootmgr 18-1build2 -eject 2.39.3-9ubuntu6.2 +eject 2.39.3-9ubuntu6.3 ethtool 1:6.7-1build1 -fdisk 2.39.3-9ubuntu6.2 +fdisk 2.39.3-9ubuntu6.3 file 1:5.45-3build1 finalrd 9build1 findutils 4.9.0-5build1 -firmware-qcom-hlosfw 1.0.00008-1 -firmware-sof-signed 2023.12.1-1ubuntu1.5 +firmware-sof-signed 2023.12.1-1ubuntu1.7 fonts-ubuntu-console 0.869+git20240321-0ubuntu1 friendly-recovery 0.2.42 ftp 20230507-2build3 fuse3 3.14.0-5build1 -fwupd 1.9.30-0ubuntu1~24.04.1 +fwupd 1.9.31-0ubuntu1~24.04.1 fwupd-signed 1.52+1.4-1 gawk 1:5.2.1-2build3 -gcc-14-base 14-20240412-0ubuntu1 +gcc-14-base 14.2.0-4ubuntu2~24.04 gdisk 1.0.10-1build1 gettext-base 0.21-14ubuntu2 gir1.2-girepository-2.0 1.80.1-1 gir1.2-glib-2.0 2.80.0-6ubuntu3.4 gir1.2-packagekitglib-1.0 1.2.8-2ubuntu1.2 -git 1:2.43.0-1ubuntu7.2 -git-man 1:2.43.0-1ubuntu7.2 +git 1:2.43.0-1ubuntu7.3 +git-man 1:2.43.0-1ubuntu7.3 glib-networking 2.80.0-1build1 glib-networking-common 2.80.0-1build1 glib-networking-services 2.80.0-1build1 -gnupg 2.4.4-2ubuntu17.2 -gnupg-l10n 2.4.4-2ubuntu17.2 -gnupg-utils 2.4.4-2ubuntu17.2 -gpg 2.4.4-2ubuntu17.2 -gpg-agent 2.4.4-2ubuntu17.2 -gpg-wks-client 2.4.4-2ubuntu17.2 -gpgconf 2.4.4-2ubuntu17.2 -gpgsm 2.4.4-2ubuntu17.2 -gpgv 2.4.4-2ubuntu17.2 +gnupg 2.4.4-2ubuntu17.3 +gnupg-l10n 2.4.4-2ubuntu17.3 +gnupg-utils 2.4.4-2ubuntu17.3 +gpg 2.4.4-2ubuntu17.3 +gpg-agent 2.4.4-2ubuntu17.3 +gpg-wks-client 2.4.4-2ubuntu17.3 +gpgconf 2.4.4-2ubuntu17.3 +gpgsm 2.4.4-2ubuntu17.3 +gpgv 2.4.4-2ubuntu17.3 grep 3.11-4build1 groff-base 1.23.0-3build2 grub-common 2.12-1ubuntu7.3 @@ -114,7 +113,7 @@ grub-efi-arm64-bin 2.12-1ubuntu7.3 grub-efi-arm64-signed 1.202.5+2.12-1ubuntu7.3 grub2-common 2.12-1ubuntu7.3 gsettings-desktop-schemas 46.1-0ubuntu1 -gzip 1.12-1ubuntu3.1 +gzip 1.12-1ubuntu3 hdparm 9.65+ds-1build1 hostname 3.23+nmu2ubuntu2 htop 3.3.0-4build1 @@ -127,21 +126,21 @@ initramfs-tools 0.142ubuntu25.5 initramfs-tools-bin 0.142ubuntu25.5 initramfs-tools-core 0.142ubuntu25.5 install-info 7.1-3build2 -iproute2 6.1.0-1ubuntu6 +iproute2 6.1.0-1ubuntu6.2 iptables 1.8.10-3ubuntu2 -iputils-ping 3:20240117-1build1 -iputils-tracepath 3:20240117-1build1 +iputils-ping 3:20240117-1ubuntu0.1 +iputils-tracepath 3:20240117-1ubuntu0.1 iso-codes 4.16.0-1 iw 6.7-1build1 -jq 1.7.1-3build1 +jq 1.7.1-3ubuntu0.24.04.1 kbd 2.6.4-2ubuntu2 keyboard-configuration 1.226ubuntu1 -keyboxd 2.4.4-2ubuntu17.2 +keyboxd 2.4.4-2ubuntu17.3 klibc-utils 2.0.13-4ubuntu0.1 kmod 31+20240202-2ubuntu7.1 kpartx 0.9.4-5ubuntu8 krb5-locales 1.20.1-6ubuntu2.6 -landscape-common 24.02-0ubuntu5.3 +landscape-common 24.02-0ubuntu5.6 less 590-2ubuntu2.1 libacl1 2.3.2-1build1.1 libaio1t64 0.3.113-6build1.1 @@ -156,13 +155,13 @@ libassuan0 2.5.6-1build1 libasyncns0 0.8-6build4 libatasmart4 0.19-5build3 libatm1t64 1:2.5.1-5.1build1 -libattr1 1:2.5.2-1build1 -libaudit-common 1:3.1.2-2.1build1 -libaudit1 1:3.1.2-2.1build1 +libattr1 1:2.5.2-1build1.1 +libaudit-common 1:3.1.2-2.1build1.1 +libaudit1 1:3.1.2-2.1build1.1 libavahi-client3 0.8-13ubuntu6 libavahi-common-data 0.8-13ubuntu6 libavahi-common3 0.8-13ubuntu6 -libblkid1 2.39.3-9ubuntu6.2 +libblkid1 2.39.3-9ubuntu6.3 libblockdev-crypto3 3.1.1-1ubuntu0.1 libblockdev-fs3 3.1.1-1ubuntu0.1 libblockdev-loop3 3.1.1-1ubuntu0.1 @@ -172,33 +171,32 @@ libblockdev-part3 3.1.1-1ubuntu0.1 libblockdev-swap3 3.1.1-1ubuntu0.1 libblockdev-utils3 3.1.1-1ubuntu0.1 libblockdev3 3.1.1-1ubuntu0.1 -libbluetooth3 5.72-0ubuntu5.3 +libbluetooth3 5.72-0ubuntu5.4 libbpf1 1:1.3.0-2build2 libbrotli1 1.1.0-2build2 libbsd0 0.12.1-1build1.1 libbytesize-common 2.10-1ubuntu2 libbytesize1 2.10-1ubuntu2 -libbz2-1.0 1.0.8-5.1 -libc-bin 2.39-0ubuntu8.4 -libc6 2.39-0ubuntu8.4 +libbz2-1.0 1.0.8-5.1build0.1 +libc-bin 2.39-0ubuntu8.5 +libc6 2.39-0ubuntu8.5 libcap-ng0 0.8.4-2build2 libcap2 1:2.66-5ubuntu2.2 libcap2-bin 1:2.66-5ubuntu2.2 libcbor0.10 0.10.2-1.2ubuntu2 -libcom-err2 1.47.0-2.4~exp1ubuntu4 +libcom-err2 1.47.0-2.4~exp1ubuntu4.1 libcrypt1 1:4.4.36-4build1 libcryptsetup12 2:2.7.0-1ubuntu4.2 libcurl3t64-gnutls 8.5.0-2ubuntu10.6 libcurl4t64 8.5.0-2ubuntu10.6 libdb5.3t64 5.3.28+dfsg2-7 libdbus-1-3 1.14.10-4ubuntu4.1 -libdconf1 0.40.0-4build2 +libdconf1 0.40.0-4ubuntu0.1 libdebconfclient0 0.271ubuntu3 libdevmapper-event1.02.1 2:1.02.185-3ubuntu3.2 libdevmapper1.02.1 2:1.02.185-3ubuntu3.2 libdrm-amdgpu1 2.4.122-1~ubuntu0.24.04.1 libdrm-common 2.4.122-1~ubuntu0.24.04.1 -libdrm-radeon1 2.4.122-1~ubuntu0.24.04.1 libdrm2 2.4.122-1~ubuntu0.24.04.1 libduktape207 2.7.0+tests-0ubuntu3 libdw1t64 0.190-1.1ubuntu0.1 @@ -212,9 +210,9 @@ libestr0 0.1.11-1build1 libevdev2 1.13.1+dfsg-1build1 libevent-core-2.1-7t64 2.1.12-stable-9ubuntu2 libexpat1 2.6.1-2ubuntu0.3 -libext2fs2t64 1.47.0-2.4~exp1ubuntu4 +libext2fs2t64 1.47.0-2.4~exp1ubuntu4.1 libfastjson4 1.2304.0-1build1 -libfdisk1 2.39.3-9ubuntu6.2 +libfdisk1 2.39.3-9ubuntu6.3 libffi8 3.4.6-1build1 libfido2-1 1.14.0-1build3 libflac12t64 1.4.3+ds-2.1ubuntu2 @@ -223,30 +221,29 @@ libfreetype6 2.13.2+dfsg-1build3 libfribidi0 1.0.13-3build1 libftdi1-2 1.5-6build5 libfuse3-3 3.14.0-5build1 -libfwupd2 1.9.30-0ubuntu1~24.04.1 -libgbm1 24.2.8-1ubuntu1~24.04.2~rb8 -libgcc-s1 14-20240412-0ubuntu1 +libfwupd2 1.9.31-0ubuntu1~24.04.1 +libgbm1 25.0.7-0ubuntu0.24.04.2 +libgcc-s1 14.2.0-4ubuntu2~24.04 libgcrypt20 1.10.3-2build1 libgdbm-compat4t64 1.23-5.1build1 libgdbm6t64 1.23-5.1build1 libgirepository-1.0-1 1.80.1-1 -libglapi-mesa 24.2.8-1ubuntu1~24.04.2~rb8 libglib2.0-0t64 2.80.0-6ubuntu3.4 libglib2.0-bin 2.80.0-6ubuntu3.4 libglib2.0-data 2.80.0-6ubuntu3.4 -libgmp10 2:6.3.0+dfsg-2ubuntu6 -libgnutls30t64 3.8.3-1.1ubuntu3 -libgpg-error0 1.47-3build2 +libgmp10 2:6.3.0+dfsg-2ubuntu6.1 +libgnutls30t64 3.8.3-1.1ubuntu3.4 +libgpg-error0 1.47-3build2.1 libgpgme11t64 1.18.0-4.1ubuntu4 libgpm2 1.20.7-11 libgssapi-krb5-2 1.20.1-6ubuntu2.6 -libgstreamer1.0-0 1.24.2-qc3~1ubuntu0.1 +libgstreamer1.0-0 1.24.2-1ubuntu0.1 libgudev-1.0-0 1:238-5ubuntu1 libgusb2 0.4.8-1build2 -libhogweed6t64 3.9.1-2.2build1 +libhogweed6t64 3.9.1-2.2build1.1 libibverbs1 50.0-2ubuntu0.2 libicu74 74.2-1ubuntu3.1 -libidn2-0 2.3.7-2build1 +libidn2-0 2.3.7-2build1.1 libinih1 55-1ubuntu2 libintl-perl 1.33-1build3 libintl-xs-perl 1.33-1build3 @@ -256,7 +253,7 @@ libisns0t64 0.101-0.3build3 libiw30t64 30~pre9-16.1ubuntu2 libjansson4 2.14-2build2 libjcat1 0.2.0-2build3 -libjq1 1.7.1-3build1 +libjq1 1.7.1-3ubuntu0.24.04.1 libjson-c5 0.17-1build1 libjson-glib-1.0-0 1.8.0-2build2 libjson-glib-1.0-common 1.8.0-2build2 @@ -269,12 +266,12 @@ libkrb5support0 1.20.1-6ubuntu2.6 libksba8 1.6.6-1build1 libldap-common 2.6.7+dfsg-1~exp1ubuntu8.2 libldap2 2.6.7+dfsg-1~exp1ubuntu8.2 -libllvm19 1:19.1.1-1ubuntu1~24.04.2 +libllvm20 1:20.1.2-0ubuntu1~24.04.2 liblmdb0 0.9.31-1build1 liblocale-gettext-perl 1.07-6ubuntu5 liblua5.4-0 5.4.6-3build2 liblvm2cmd2.03 2.03.16-3ubuntu3.2 -liblz4-1 1.9.4-1build1 +liblz4-1 1.9.4-1build1.1 liblzma5 5.6.1+really5.4.5-1ubuntu0.2 liblzo2-2 2.10-2build4 libmagic-mgc 1:5.45-3build1 @@ -283,12 +280,12 @@ libmaxminddb0 1.9.1-1build1 libmbim-glib4 1.31.2-0ubuntu3 libmbim-proxy 1.31.2-0ubuntu3 libmbim-utils 1.31.2-0ubuntu3 -libmd0 1.1.0-2build1 +libmd0 1.1.0-2build1.1 libmm-glib0 1.23.4-0ubuntu2 libmnl0 1.0.5-2build1 libmodule-find-perl 0.16-2 libmodule-scandeps-perl 1.35-1ubuntu0.24.04.1 -libmount1 2.39.3-9ubuntu6.2 +libmount1 2.39.3-9ubuntu6.3 libmp3lame0 3.100-6build1 libmpfr6 4.2.1-1build1.1 libmpg123-0t64 1.32.5-1ubuntu1.1 @@ -297,8 +294,8 @@ libncurses6 6.4+20240113-1ubuntu2 libncursesw6 6.4+20240113-1ubuntu2 libndp0 1.8-1fakesync1ubuntu0.24.04.1 libnetfilter-conntrack3 1.0.9-6build1 -libnetplan1 1.1.2-2~ubuntu24.04.1 -libnettle8t64 3.9.1-2.2build1 +libnetplan1 1.1.2-2~ubuntu24.04.2 +libnettle8t64 3.9.1-2.2build1.1 libnewt0.52 0.52.24-2ubuntu2 libnfnetlink0 1.0.2-2build1 libnftables1 1.0.9-1build1 @@ -310,7 +307,7 @@ libnl-route-3-200 3.7.0-0.3build1.1 libnm0 1.46.0-1ubuntu2.2 libnpth0t64 1.6-3.1build1 libnspr4 2:4.35-1.1build1 -libnss-systemd 255.4-1ubuntu8.8 +libnss-systemd 255.4-1ubuntu8.10 libnss3 2:3.98-1build1 libntfs-3g89t64 1:2022.10.3-1.2ubuntu3 libnuma1 2.0.18-1build1 @@ -319,39 +316,39 @@ libogg0 1.3.5-3build1 libonig5 6.9.9-1build1 libopeniscsiusr 2.1.9-3ubuntu5.4 libopus0 1.4-1build1 -libp11-kit0 0.25.3-4ubuntu2 +libp11-kit0 0.25.3-4ubuntu2.1 libpackagekit-glib2-18 1.2.8-2ubuntu1.2 libpam-cap 1:2.66-5ubuntu2.2 -libpam-modules 1.5.3-5ubuntu5 -libpam-modules-bin 1.5.3-5ubuntu5 -libpam-runtime 1.5.3-5ubuntu5 -libpam-systemd 255.4-1ubuntu8.8 -libpam0g 1.5.3-5ubuntu5 +libpam-modules 1.5.3-5ubuntu5.4 +libpam-modules-bin 1.5.3-5ubuntu5.4 +libpam-runtime 1.5.3-5ubuntu5.4 +libpam-systemd 255.4-1ubuntu8.10 +libpam0g 1.5.3-5ubuntu5.4 libparted2t64 3.6-4build1 libpcap0.8t64 1.10.4-4.1ubuntu3 libpci3 1:3.10.0-2build1 -libpcre2-8-0 10.42-4ubuntu2 +libpcre2-8-0 10.42-4ubuntu2.1 libpcsclite1 2.0.3-1build1 -libperl5.38t64 5.38.2-3.2ubuntu0.1 +libperl5.38t64 5.38.2-3.2ubuntu0.2 libpipeline1 1.5.7-2 -libpipewire-0.3-0t64 1.0.5-1ubuntu3 -libpipewire-0.3-common 1.0.5-1ubuntu3 -libpipewire-0.3-modules 1.0.5-1ubuntu3 +libpipewire-0.3-0t64 1.0.5-1ubuntu3.1 +libpipewire-0.3-common 1.0.5-1ubuntu3.1 +libpipewire-0.3-modules 1.0.5-1ubuntu3.1 libplymouth5 24.004.60-1ubuntu7.1 libpng16-16t64 1.6.43-5build1 libpolkit-agent-1-0 124-2ubuntu1.24.04.2 libpolkit-gobject-1-0 124-2ubuntu1.24.04.2 libpopt0 1.19+dfsg-1build1 libproc-processtable-perl 0.636-1build3 -libproc2-0 2:4.0.4-4ubuntu3 +libproc2-0 2:4.0.4-4ubuntu3.2 libprotobuf-c1 1.4.1-1ubuntu4 libproxy1v5 0.5.4-4build1 libpsl5t64 0.21.2-1.1build1 libpulse0 1:16.1+dfsg1-2ubuntu10.1 libpython3-stdlib 3.12.3-0ubuntu2 -libpython3.12-minimal 3.12.3-1ubuntu0.7 -libpython3.12-stdlib 3.12.3-1ubuntu0.7 -libpython3.12t64 3.12.3-1ubuntu0.7 +libpython3.12-minimal 3.12.3-1ubuntu0.8 +libpython3.12-stdlib 3.12.3-1ubuntu0.8 +libpython3.12t64 3.12.3-1ubuntu0.8 libqmi-glib5 1.35.2-0ubuntu2 libqmi-proxy 1.35.2-0ubuntu2 libqmi-utils 1.35.2-0ubuntu2 @@ -364,8 +361,8 @@ librtmp1 2.4+20151223.gitfa8646d.1-2build7 libsasl2-2 2.1.28+dfsg1-5ubuntu3.1 libsasl2-modules 2.1.28+dfsg1-5ubuntu3.1 libsasl2-modules-db 2.1.28+dfsg1-5ubuntu3.1 -libseccomp2 2.5.5-1ubuntu3 -libselinux1 3.5-2ubuntu2 +libseccomp2 2.5.5-1ubuntu3.1 +libselinux1 3.5-2ubuntu2.1 libsemanage-common 3.5-1build5 libsemanage2 3.5-1build5 libsensors-config 1:3.6.0-9build1 @@ -374,24 +371,24 @@ libsepol2 3.5-2build1 libsgutils2-1.46-2 1.46-3ubuntu4 libsigsegv2 2.14-1ubuntu2 libslang2 2.3.3-3build2 -libsmartcols1 2.39.3-9ubuntu6.2 +libsmartcols1 2.39.3-9ubuntu6.3 libsnapd-glib-2-1 1.64-0ubuntu5 libsndfile1 1.2.2-1ubuntu5.24.04.1 libsodium23 1.0.18-1build3 libsort-naturally-perl 1.03-4 -libsoup-3.0-0 3.4.4-5ubuntu0.4 -libsoup-3.0-common 3.4.4-5ubuntu0.4 -libspa-0.2-modules 1.0.5-1ubuntu3 +libsoup-3.0-0 3.4.4-5ubuntu0.5 +libsoup-3.0-common 3.4.4-5ubuntu0.5 +libspa-0.2-modules 1.0.5-1ubuntu3.1 libspeexdsp1 1.2.1-1ubuntu3 -libsqlite3-0 3.45.1-1ubuntu2.3 -libss2 1.47.0-2.4~exp1ubuntu4 -libssh-4 0.10.6-2build2 -libssl3t64 3.0.13-0ubuntu3 -libstdc++6 14-20240412-0ubuntu1 +libsqlite3-0 3.45.1-1ubuntu2.4 +libss2 1.47.0-2.4~exp1ubuntu4.1 +libssh-4 0.10.6-2ubuntu0.1 +libssl3t64 3.0.13-0ubuntu3.5 +libstdc++6 14.2.0-4ubuntu2~24.04 libstemmer0d 2.2.0-4build1 -libsystemd-shared 255.4-1ubuntu8.8 -libsystemd0 255.4-1ubuntu8.8 -libtasn1-6 4.19.0-3build1 +libsystemd-shared 255.4-1ubuntu8.10 +libsystemd0 255.4-1ubuntu8.10 +libtasn1-6 4.19.0-3ubuntu0.24.04.1 libtcl8.6 8.6.14+dfsg-1build1 libteamdctl0 1.31-1build3 libterm-readkey-perl 2.38-2build4 @@ -405,14 +402,14 @@ libtraceevent1 1:1.8.2-1ubuntu2.1 libtraceevent1-plugin 1:1.8.2-1ubuntu2.1 libtracefs1 1.8.0-1ubuntu1 libuchardet0 0.0.8-1build1 -libudev1 255.4-1ubuntu8.8 -libudisks2-0 2.10.1-6ubuntu1.2 -libunistring5 1.1-2build1 +libudev1 255.4-1ubuntu8.10 +libudisks2-0 2.10.1-6ubuntu1.3 +libunistring5 1.1-2build1.1 libunwind8 1.6.2-3build1.1 liburcu8t64 0.14.0-3.1build1 libusb-1.0-0 2:1.0.27-1 libutempter0 1.2.1-3build1 -libuuid1 2.39.3-9ubuntu6.2 +libuuid1 2.39.3-9ubuntu6.3 libuv1t64 1.48.0-1.1build1 libvolume-key1 0.3.12-7build2 libvorbis0a 1.3.7-1build3 @@ -425,8 +422,7 @@ libwrap0 7.6.q-33 libx11-6 2:1.8.7-1build1 libx11-data 2:1.8.7-1build1 libx11-xcb1 2:1.8.7-1build1 -libxau6 1:1.0.9-1build6 -libxcb-dri2-0 1.15-1ubuntu2 +libxau6 1:1.0.9-1build6 libxcb-dri3-0 1.15-1ubuntu2 libxcb-image0 0.4.0-2build1 libxcb-present0 1.15-1ubuntu2 @@ -439,7 +435,7 @@ libxcb1 1.15-1ubuntu2 libxdmcp6 1:1.1.3-0ubuntu6 libxext6 2:1.3.4-1build2 libxkbcommon0 1.6.0-1build1 -libxml2 2.9.14+dfsg-1.3ubuntu3.3 +libxml2 2.9.14+dfsg-1.3ubuntu3.5 libxmlb2 0.3.18-1 libxmlsec1t64 1.2.39-5build2 libxmlsec1t64-openssl 1.2.39-5build2 @@ -451,10 +447,10 @@ libxxhash0 0.8.2-2build1 libyaml-0-2 0.2.5-1build1 libzstd1 1.5.5+dfsg2-2build1.1 linux-base 4.5ubuntu9+24.04.1 -locales 2.39-0ubuntu8.4 +locales 2.39-0ubuntu8.5 login 1:4.13+dfsg1-4ubuntu3.2 logrotate 3.21.0-2build1 -logsave 1.47.0-2.4~exp1ubuntu4 +logsave 1.47.0-2.4~exp1ubuntu4.1 lsb-release 12.0-2 lshw 02.19.git.2021.06.19.996aaad9c7-2build3 lsof 4.95.0-1build3 @@ -466,11 +462,11 @@ manpages 6.7-2 mawk 1.3.4.20240123-1build1 mdadm 4.3-1ubuntu2.1 media-types 10.1.0 -mesa-libgallium 24.2.8-1ubuntu1~24.04.2~rb8 +mesa-libgallium 25.0.7-0ubuntu0.24.04.2 modemmanager 1.23.4-0ubuntu2 mokutil 0.6.0-2build3 -motd-news-config 13ubuntu10.2 -mount 2.39.3-9ubuntu6.2 +motd-news-config 13ubuntu10.3 +mount 2.39.3-9ubuntu6.3 mtr-tiny 0.95-1.1ubuntu0.1 multipath-tools 0.9.4-5ubuntu8 nano 7.2-2ubuntu0.1 @@ -480,9 +476,8 @@ ncurses-term 6.4+20240113-1ubuntu2 needrestart 3.6-7ubuntu4.5 netbase 6.4 netcat-openbsd 1.226-1ubuntu2 -net-tools -netplan-generator 1.1.2-2~ubuntu24.04.1 -netplan.io 1.1.2-2~ubuntu24.04.1 +netplan-generator 1.1.2-2~ubuntu24.04.2 +netplan.io 1.1.2-2~ubuntu24.04.2 network-manager 1.46.0-1ubuntu2.2 network-manager-pptp 1.2.12-3build2 networkd-dispatcher 2.2.4-1 @@ -491,44 +486,44 @@ ntfs-3g 1:2022.10.3-1.2ubuntu3 numactl 2.0.18-1build1 open-iscsi 2.1.9-3ubuntu5.4 open-vm-tools 2:12.4.5-1~ubuntu0.24.04.2 -openssh-client 1:9.6p1-3ubuntu13.12 -openssh-server 1:9.6p1-3ubuntu13.12 -openssh-sftp-server 1:9.6p1-3ubuntu13.12 -openssl 3.0.13-0ubuntu3 +openssh-client 1:9.6p1-3ubuntu13.14 +openssh-server 1:9.6p1-3ubuntu13.14 +openssh-sftp-server 1:9.6p1-3ubuntu13.14 +openssl 3.0.13-0ubuntu3.5 os-prober 1.81ubuntu4 overlayroot 0.49~24.04.1 packagekit 1.2.8-2ubuntu1.2 packagekit-tools 1.2.8-2ubuntu1.2 parted 3.6-4build1 -passwd 1:4.13+dfsg1-4ubuntu3 +passwd 1:4.13+dfsg1-4ubuntu3.2 pastebinit 1.6.2-1 patch 2.7.6-7build3 pci.ids 0.0~2024.03.31-1ubuntu0.1 pciutils 1:3.10.0-2build1 -perl 5.38.2-3.2ubuntu0.1 -perl-base 5.38.2-3.2ubuntu0.1 -perl-modules-5.38 5.38.2-3.2ubuntu0.1 +perl 5.38.2-3.2ubuntu0.2 +perl-base 5.38.2-3.2ubuntu0.2 +perl-modules-5.38 5.38.2-3.2ubuntu0.2 pinentry-curses 1.2.1-3ubuntu5 -pipewire 1.0.5-1ubuntu3 -pipewire-alsa 1.0.5-1ubuntu3 -pipewire-bin 1.0.5-1ubuntu3 -pipewire-pulse 1.0.5-1ubuntu3 +pipewire 1.0.5-1ubuntu3.1 +pipewire-alsa 1.0.5-1ubuntu3.1 +pipewire-bin 1.0.5-1ubuntu3.1 +pipewire-pulse 1.0.5-1ubuntu3.1 plymouth 24.004.60-1ubuntu7.1 plymouth-theme-ubuntu-text 24.004.60-1ubuntu7.1 polkitd 124-2ubuntu1.24.04.2 pollinate 4.33-3.1ubuntu1.1 -powermgmt-base 1.37 +powermgmt-base 1.37ubuntu0.1 ppp 2.4.9-1+1.1ubuntu4 pptp-linux 1.10.0-1build4 -procps 2:4.0.4-4ubuntu3 +procps 2:4.0.4-4ubuntu3.2 protection-domain-mapper 1.0-4ubuntu4 psmisc 23.7-1build1 publicsuffix 20231001.0357-0.1 -python-apt-common 2.7.7ubuntu4 +python-apt-common 2.7.7ubuntu5 python-babel-localedata 2.10.3-3build1 python3 3.12.3-0ubuntu2 -python3-apport 2.28.1-0ubuntu3.7 -python3-apt 2.7.7ubuntu4 +python3-apport 2.28.1-0ubuntu3.8 +python3-apt 2.7.7ubuntu5 python3-attr 23.2.0-2 python3-automat 22.10.0-2 python3-babel 2.10.3-3build1 @@ -551,7 +546,7 @@ python3-debconf 1.5.86ubuntu1 python3-debian 0.1.49ubuntu2 python3-distro 1.9.0-1 python3-distro-info 1.7build1 -python3-distupgrade 1:24.04.26 +python3-distupgrade 1:24.04.27 python3-gdbm 3.12.3-0ubuntu1 python3-gi 3.48.2-1 python3-hamcrest 2.1.0-1 @@ -574,14 +569,14 @@ python3-markupsafe 2.1.5-1build2 python3-mdurl 0.1.2-1 python3-minimal 3.12.3-0ubuntu2 python3-netifaces 0.11.0-2build3 -python3-netplan 1.1.2-2~ubuntu24.04.1 +python3-netplan 1.1.2-2~ubuntu24.04.2 python3-newt 0.52.24-2ubuntu2 python3-oauthlib 3.2.2-1 python3-openssl 23.2.0-1 python3-packaging 24.0-1 python3-pexpect 4.9-2 python3-pkg-resources 68.1.2-2ubuntu1.2 -python3-problem-report 2.28.1-0ubuntu3.7 +python3-problem-report 2.28.1-0ubuntu3.8 python3-ptyprocess 0.7.0-5 python3-pyasn1 0.4.8-4 python3-pyasn1-modules 0.2.8-1 @@ -595,7 +590,7 @@ python3-serial 3.5-2 python3-service-identity 24.1.0-1 python3-setuptools 68.1.2-2ubuntu1.2 python3-six 1.16.0-4 -python3-software-properties 0.99.49.2 +python3-software-properties 0.99.49.3 python3-systemd 235-1build4 python3-twisted 24.3.0-1ubuntu0.1 python3-tz 2024.1-2 @@ -604,8 +599,8 @@ python3-urllib3 2.0.7-1ubuntu0.2 python3-wadllib 1.3.6-5 python3-yaml 6.0.1-2build2 python3-zope.interface 6.1-1build1 -python3.12 3.12.3-1ubuntu0.7 -python3.12-minimal 3.12.3-1ubuntu0.7 +python3.12 3.12.3-1ubuntu0.8 +python3.12-minimal 3.12.3-1ubuntu0.8 qcom-iot-defaults 1.15 qcom-video-firmware 1.0.r00075.1-0ubuntu2 qrtr-tools 1.0-2ubuntu3 @@ -625,20 +620,21 @@ sg3-utils-udev 1.46-3ubuntu4 sgml-base 1.31 shared-mime-info 2.4-4 shim-signed 1.58+15.8-0ubuntu1 -snapd 2.67.1+24.04 -software-properties-common 0.99.49.2 +snapd 2.68.5+ubuntu24.04.1 +software-properties-common 0.99.49.3 sosreport 4.8.2-0ubuntu0~24.04.2 squashfs-tools 1:4.6.1-1build1 ssh-import-id 5.11-0ubuntu2.24.04.1 strace 6.8-0ubuntu2 sudo 1.9.15p5-3ubuntu5.24.04.1 +sysfsutils 2.1.1-6build1 sysstat 12.6.1-2 -systemd 255.4-1ubuntu8.8 -systemd-dev 255.4-1ubuntu8.8 +systemd 255.4-1ubuntu8.10 +systemd-dev 255.4-1ubuntu8.10 systemd-hwe-hwdb 255.1.4 -systemd-resolved 255.4-1ubuntu8.8 -systemd-sysv 255.4-1ubuntu8.8 -systemd-timesyncd 255.4-1ubuntu8.8 +systemd-resolved 255.4-1ubuntu8.10 +systemd-sysv 255.4-1ubuntu8.10 +systemd-timesyncd 255.4-1ubuntu8.10 sysvinit-utils 3.08-6ubuntu3 tar 1.35+dfsg-3build1 tc9564-firmware 4.0.0-1ubuntu1 @@ -654,14 +650,14 @@ trace-cmd 3.2-1ubuntu2 tzdata 2025b-0ubuntu0.24.04.1 ubuntu-keyring 2023.11.28.1 ubuntu-minimal 1.539.2 -ubuntu-pro-client 35.1ubuntu0~24.04 -ubuntu-pro-client-l10n 35.1ubuntu0~24.04 -ubuntu-release-upgrader-core 1:24.04.26 +ubuntu-pro-client 36ubuntu0~24.04 +ubuntu-pro-client-l10n 36ubuntu0~24.04 +ubuntu-release-upgrader-core 1:24.04.27 ubuntu-server 1.539.2 ubuntu-standard 1.539.2 ucf 3.0043+nmu1 -udev 255.4-1ubuntu8.8 -udisks2 2.10.1-6ubuntu1.2 +udev 255.4-1ubuntu8.10 +udisks2 2.10.1-6ubuntu1.3 ufw 0.36.2-6 unattended-upgrades 2.9.1+nmu4ubuntu1 update-manager-core 1:24.04.12 @@ -670,8 +666,8 @@ usb-modeswitch 2.6.1-3ubuntu3 usb-modeswitch-data 20191128-6 usb.ids 2024.03.18-1 usbutils 1:017-3build1 -util-linux 2.39.3-9ubuntu6.2 -uuid-runtime 2.39.3-9ubuntu6.2 +util-linux 2.39.3-9ubuntu6.3 +uuid-runtime 2.39.3-9ubuntu6.3 vim 2:9.1.0016-1ubuntu7.8 vim-common 2:9.1.0016-1ubuntu7.8 vim-runtime 2:9.1.0016-1ubuntu7.8 @@ -687,8 +683,9 @@ xdg-user-dirs 0.18-1build1 xfsprogs 6.6.0-1ubuntu2.1 xkb-data 2.41-2ubuntu1.1 xml-core 0.19 -xxd 2:9.1.0016-1ubuntu7.8 +xxd 2:9.1.0016-1ubuntu7.9 xz-utils 5.6.1+really5.4.5-1ubuntu0.2 zerofree 1.1.1-1build5 -zlib1g 1:1.3.dfsg-3.1ubuntu2 +zlib1g 1:1.3.dfsg-3.1ubuntu2.1 zstd 1.5.5+dfsg2-2build1.1 + diff --git a/ubuntu/release_debian_changelog_update.py b/ubuntu/release_debian_changelog_update.py new file mode 100644 index 0000000..2b47cd1 --- /dev/null +++ b/ubuntu/release_debian_changelog_update.py @@ -0,0 +1,855 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +""" +release_debian_changelog_update.py + +Single entry: --apt-source-line +- If it starts with "deb " -> hosted APT source line (APT mode). +- Else, if it is an existing directory path OR "file:///..." -> local filer dir (Local mode). +- Otherwise, error. + +Rules per debian/ tree (ADD +rel WITHOUT NUMERIC BUMP): +1) If NO .deb found: + - Ensure a +rel entry at the tip of the local changelog: + version := + "+rel" (only if not already ending with +rel). + - --dry-run: write simulated result to debian/changed-changelog + - default: apply with dch in-place to debian/changelog + +2) If a .deb IS found: + - Extract its changelog and read deb_top_version. + - Let base = strip_rel_suffix(deb_top_version) # remove trailing +rel if present + - If base == local_top_version: + -> Replace debian/changelog with the .deb changelog. + Else: + -> If an exact local entry equals 'base': prepend all local entries ABOVE that entry to the .deb changelog. + -> If no exact match: prepend ONLY local entries whose version is GREATER than 'base' + per dpkg --compare-versions (stop at first non-greater). + - After replace/merge, ensure a +rel entry at the tip (only suffix; no numeric bump). + - --dry-run: write merged/replaced content to debian/changed-changelog + - default: write merged/replaced content in place to debian/changelog + +Maintainer identity on +rel: +- Always taken from the signature line of the entry being extended (the current tip entry): + " -- Full Name date" +- If it cannot be parsed, the script logs an error and marks that tree as failed + (no fallback identity). + +Message for +rel entries: +- "Automated patch bump: Version updated to " + +Dependencies: + - Always: dch, dpkg-deb, dpkg + - APT mode: apt-get +""" + +import os +import re +import sys +import gzip +import lzma +import html +import shutil +import tempfile +import subprocess +import argparse +from pathlib import Path +from typing import Dict, List, Optional, Tuple + +from color_logger import logger # logger.info / logger.warning / logger.error + +# ========================= Debian Changelog Parsing ========================= + +class ChangelogEntry: + __slots__ = ("version", "distribution", "start", "end", "text") + + def __init__(self, version: str, distribution: Optional[str], start: int, end: int, text: str): + self.version = version + self.distribution = distribution + self.start = start + self.end = end + self.text = text + + +HEADER_RE = re.compile(r'^(\S+)\s+\(([^)]+)\)\s+([^\s;]+);\s*urgency=.*$', re.MULTILINE) + +# Primary: strict Debian signature line with tolerance for spaces before date +SIGNER_RE_PRIMARY = re.compile( + r'^\s*--\s*(.*?)\s*<([^>]+)>\s+.+$', + re.MULTILINE +) + +# Secondary: generic line containing , take text before '<' as name +SIGNER_RE_FALLBACK = re.compile( + r'^(?P.*?)(?P<[^>]+>).*?$', + re.MULTILINE +) + + +def parse_debian_changelog(text: str) -> List[ChangelogEntry]: + entries: List[ChangelogEntry] = [] + matches = list(HEADER_RE.finditer(text)) + if not matches: + return entries + for i, m in enumerate(matches): + start = m.start() + end = matches[i + 1].start() if i + 1 < len(matches) else len(text) + block = text[start:end] + version = m.group(2).strip() + distribution = (m.group(3) or "").strip() + entries.append(ChangelogEntry(version, distribution, start, end, block)) + return entries + + +def serialize_changelog(entries: List[ChangelogEntry]) -> str: + return "".join(e.text for e in entries) + + +def ensure_trailing_newline(s: str) -> str: + return s if s.endswith("\n") else s + "\n" + + +def add_rel_suffix(version: str) -> str: + if re.search(r'\+rel(\d+)?$', version): + return version + return version + "+rel" + + +def strip_rel_suffix(version: str) -> str: + return re.sub(r'\+rel(\d+)?$', "", version) + + +def index_of_version(entries: List[ChangelogEntry], version: str) -> Optional[int]: + for idx, e in enumerate(entries): + if e.version.strip() == version.strip(): + return idx + return None + + +def distribution_hint_from_text(text: str) -> Optional[str]: + m = HEADER_RE.search(text) + if not m: + return None + return (m.group(3) or "").strip() or None + + +def extract_maint_from_entry_text(entry_text: str) -> Tuple[Optional[str], Optional[str]]: + """ + Parse signature line from an entry block, robustly: + 1) Unescape HTML (<> -> <>) + 2) Try Debian signature format: '^ -- Name date' + 3) Fallback: last line containing '<...>' -> name is text before '<', email is the ... inside <> + Return (name, email) or (None, None). + """ + unescaped = html.unescape(entry_text) + + # Strategy 1: standard Debian signature line + matches = list(SIGNER_RE_PRIMARY.finditer(unescaped)) + if matches: + m = matches[-1] # last signature in block + name = (m.group(1) or "").strip() + email = (m.group(2) or "").strip() + if name and "@" in email: + return name, email + + # Strategy 2: generic last line containing <...> + lines = unescaped.splitlines() + for line in reversed(lines): + if "<" in line and ">" in line: + m2 = SIGNER_RE_FALLBACK.match(line.strip()) + if not m2: + continue + prefix = (m2.group("prefix") or "").strip() + # Pull name after leading '--' if present + prefix = re.sub(r'^\s*--\s*', '', prefix).strip() + # Extract email inside <> + em = re.search(r'<([^>]+)>', line) + email = em.group(1).strip() if em else "" + name = prefix + if name and "@" in email: + return name, email + + return None, None + +# ========================= Debian Version Compare (dpkg) ========================= + +def dpkg_compare(v1: str, op: str, v2: str) -> bool: + """ + Debian-accurate version compare via dpkg --compare-versions. + op ∈ {"lt","le","eq","ne","ge","gt"}. + """ + try: + res = subprocess.run( + ["dpkg", "--compare-versions", v1, op, v2], + stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL + ) + return res.returncode == 0 + except FileNotFoundError: + logger.error("dpkg is required for version comparisons but not found in PATH.") + raise + + +def newer_local_prefix(entries: List[ChangelogEntry], base: str) -> List[ChangelogEntry]: + """ + Contiguous prefix of entries whose version is strictly GREATER than 'base' (newest->oldest). + """ + newer: List[ChangelogEntry] = [] + for e in entries: + if dpkg_compare(e.version, "gt", base): + newer.append(e) + else: + break + return newer + +# ========================= dch Helpers ========================= + +def run_dch_newversion_inplace( + changelog_path: str, + new_version: str, + distribution: str, + maint_name: str, + maint_email: str +): + """ + Add a new top entry via dch with standardized message and exact identity. + NOTE: This only appends '+rel' to the version; it NEVER changes numeric parts. + """ + dch = shutil.which("dch") + if not dch: + logger.error("dch is required but not found in PATH.") + raise RuntimeError("dch is required but not found in PATH.") + env = os.environ.copy() + # Enforce identity; set all known env vars dch can read + env["DEBFULLNAME"] = maint_name + env["DEBEMAIL"] = maint_email + env["EMAIL"] = maint_email + message = f"Automated patch bump: Version updated to {new_version}" + cmd = [ + dch, + "--changelog", changelog_path, + "--newversion", new_version, + "--force-distribution", + "--distribution", distribution, + message, + ] + subprocess.run(cmd, check=True, env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) + + +def add_new_changelog_entry_with_dch( + changelog_path: str, + new_version: str, + distribution: str, + maint_name: str, + maint_email: str +) -> str: + run_dch_newversion_inplace( + changelog_path, new_version, distribution, maint_name, maint_email + ) + return Path(changelog_path).read_text(encoding="utf-8", errors="replace") + + +def ensure_rel_at_tip_inplace( + changelog_path: str, + distribution_fallback: str = "unstable" +): + """ + Ensure +rel (only suffix) at the top; maintainer MUST be parsed from tip entry. + """ + text = Path(changelog_path).read_text(encoding="utf-8", errors="replace") + entries = parse_debian_changelog(text) + if not entries: + raise RuntimeError(f"Unable to parse {changelog_path} to enforce +rel.") + + top_entry = entries[0] + top_version = top_entry.version + rel_version = add_rel_suffix(top_version) + if rel_version == top_version: + logger.info(f"Top already has +rel: {top_version}") + return + + name, email = extract_maint_from_entry_text(top_entry.text) + if not name or not email: + raise RuntimeError("Cannot parse maintainer name/email from tip entry; refusing to add +rel.") + + dist = top_entry.distribution or distribution_fallback + logger.info(f"Adding +rel via dch: {rel_version} (dist={dist}, maint={name} <{email}>)") + run_dch_newversion_inplace( + changelog_path, rel_version, dist, name, email + ) + + +def ensure_rel_at_tip_with_dch_on_temp( + base_text: str, + distribution: str, +) -> str: + """ + Ensure +rel (only suffix) at the tip WITHOUT touching the original file. + Maintainer MUST be parsed from the tip entry of 'base_text'. + """ + entries = parse_debian_changelog(base_text) + if not entries: + raise RuntimeError("Cannot parse changelog text to enforce +rel (dry-run).") + + top_entry = entries[0] + top_version = top_entry.version + rel_version = add_rel_suffix(top_version) + if rel_version == top_version: + return base_text + + name, email = extract_maint_from_entry_text(top_entry.text) + if not name or not email: + raise RuntimeError("Cannot parse maintainer from tip entry (dry-run); refusing to add +rel.") + + with tempfile.NamedTemporaryFile("w+", encoding="utf-8", delete=False, prefix="tmp-changelog-", suffix=".chlog") as tmpf: + tmp_path = tmpf.name + tmpf.write(base_text) + try: + updated = add_new_changelog_entry_with_dch( + tmp_path, + new_version=rel_version, + distribution=distribution or "unstable", + maint_name=name, + maint_email=email, + ) + return updated + finally: + try: + os.remove(tmp_path) + except Exception: + pass + +# ========================= .deb Handling ========================= + +def extract_changelog_from_deb( + deb_path: Path, package_name: str, *, prefer_debian_changelog: bool = True +) -> Tuple[str, str]: + extract_dir = Path(tempfile.mkdtemp(prefix=f"deb-extract-{package_name}-")) + try: + subprocess.run( + ["dpkg-deb", "-x", str(deb_path), str(extract_dir)], + check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True + ) + except subprocess.CalledProcessError as e: + _cleanup_dir(extract_dir) + logger.error(f"dpkg-deb extraction failed: {e.stderr or e.stdout}") + raise RuntimeError(f"dpkg-deb extraction failed: {e.stderr or e.stdout}") + + doc_base = extract_dir / "usr" / "share" / "doc" / package_name + candidates: List[Path] = [] + if doc_base.exists(): + if prefer_debian_changelog: + candidates += sorted(doc_base.glob("changelog.Debian*")) + candidates += sorted(doc_base.glob("changelog*")) + + if not candidates: + for pattern in ("**/changelog.Debian*", "**/changelog*"): + candidates += sorted(extract_dir.glob(pattern)) + + if not candidates: + _cleanup_dir(extract_dir) + raise FileNotFoundError("No changelog found in the .deb payload.") + + chosen = candidates[0] + text = read_maybe_compressed(chosen) + try: + internal_path = "/" + str(chosen.relative_to(extract_dir)).replace("\\", "/") + except Exception: + internal_path = str(chosen).replace("\\", "/") + + _cleanup_dir(extract_dir) + return text, internal_path + + +def read_maybe_compressed(path: Path) -> str: + data: bytes + if path.suffix == ".gz": + with gzip.open(path, "rb") as f: + data = f.read() + elif path.suffix in (".xz", ".lzma"): + with lzma.open(path, "rb") as f: + data = f.read() + else: + with open(path, "rb") as f: + data = f.read() + try: + return data.decode("utf-8") + except UnicodeDecodeError: + return data.decode("latin-1", errors="replace") + +# ========================= APT & Local Detection ========================= + +def _parse_arch_from_deb_line(line: str) -> Optional[str]: + m = re.search(r'\[([^\]]+)\]', line) + if not m: + return None + opts = m.group(1) + for token in opts.replace(",", " ").split(): + if token.startswith("arch="): + val = token.split("=", 1)[1].strip() + return val.split(",")[0] + return None + + +def classify_source(apt_source_line: str) -> Tuple[str, Optional[Path], Optional[str]]: + s = apt_source_line.strip() + if s.lower().startswith("deb "): + return "apt", None, s + if s.lower().startswith("file://"): + local_path = s[7:] if s.startswith("file://") else s.split("://", 1)[-1] + p = Path(local_path).resolve() + if p.is_dir(): + return "local", p, str(p) + raise ValueError(f"Provided file:// path does not exist or is not a directory: {local_path}") + p = Path(s).resolve() + if p.is_dir(): + return "local", p, str(p) + if re.match(r"^[a-zA-Z]+://", s): + raise ValueError("Provide a full APT source line starting with 'deb ...', or a local directory path.") + raise ValueError("Provided --apt-source-line is neither a 'deb ...' APT line nor an existing directory path.") + + +def apt_prepare_env(apt_line: str) -> Tuple[Dict[str, str], List[str], Path, Path, str]: + if shutil.which("apt-get") is None: + logger.error("apt-get is required for APT mode but not found in PATH.") + raise RuntimeError("apt-get is required for APT mode but not found in PATH.") + + tmp_root = Path(tempfile.mkdtemp(prefix="apt-temp-")) + apt_state = tmp_root / "state" + apt_cache = tmp_root / "cache" + empty_dir = tmp_root / "empty" + download_dir = tmp_root / "downloads" + status_file = apt_state / "status" + sources_list = tmp_root / "sources.list" + + apt_state.mkdir(parents=True, exist_ok=True) + apt_cache.mkdir(parents=True, exist_ok=True) + empty_dir.mkdir(parents=True, exist_ok=True) + download_dir.mkdir(parents=True, exist_ok=True) + status_file.write_text("") + + line = apt_line.strip() + if not line.endswith("\n"): + line += "\n" + sources_list.write_text(line) + logger.info(f"APT source line: {line.strip()}") + + arch = _parse_arch_from_deb_line(line) or "arm64" + if "arch=" not in line: + logger.warning(f"No arch=... in source line; defaulting to {arch}") + + apt_env = os.environ.copy() + apt_env["DEBIAN_FRONTEND"] = "noninteractive" + + apt_opts = [ + "-o", f"Dir::State={str(apt_state)}", + "-o", f"Dir::Cache={str(apt_cache)}", + "-o", f"Dir::State::status={str(status_file)}", + "-o", f"Dir::Etc::sourcelist={str(sources_list)}", + "-o", f"Dir::Etc::sourceparts={str(empty_dir)}", + "-o", "Debug::NoLocking=true", + "-o", "Acquire::Retries=2", + "-o", "Acquire::Languages=none", + "-o", f"APT::Architecture={arch}", + "-o", f"APT::Architectures={arch}", + ] + + logger.info(f"Running apt-get update (arch={arch})") + try: + subprocess.run( + ["apt-get", *apt_opts, "update"], + env=apt_env, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True + ) + logger.info("apt-get update completed.") + except subprocess.CalledProcessError as e: + _cleanup_dir(tmp_root) + logger.error("Failed to apt-get update.\n" + f"STDOUT:\n{e.stdout}\nSTDERR:\n{e.stderr}") + raise RuntimeError("Failed to apt-get update.") from e + + return apt_env, apt_opts, tmp_root, download_dir, arch + + +def apt_download_deb_for_any(pkg_names: List[str], apt_env: Dict[str, str], apt_opts: List[str], + download_dir: Path, arch: str) -> Tuple[Optional[Path], Optional[str]]: + for pkg in pkg_names: + pkg_arch_qualified = f"{pkg}:{arch}" if arch else pkg + logger.info(f"Attempting apt-get download for {pkg_arch_qualified} ...") + try: + subprocess.run( + ["apt-get", *apt_opts, "download", pkg_arch_qualified], + cwd=str(download_dir), env=apt_env, check=True, + stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True + ) + except subprocess.CalledProcessError as e: + logger.warning(f"Download failed for {pkg_arch_qualified}: " + f"{(e.stderr or e.stdout).strip()}") + continue + candidates = sorted(download_dir.glob(f"{pkg}_*.deb")) + if candidates: + deb_path = max(candidates, key=lambda p: p.stat().st_mtime) + logger.info(f"Using downloaded .deb: {deb_path.name}") + return deb_path, pkg + return None, None + + +def local_find_deb_for_any(pkg_names: List[str], deb_dir: Path) -> Tuple[Optional[Path], Optional[str]]: + """ + Prefer arm64 .debs if present, otherwise latest .deb regardless of arch. + """ + preferred_arch = "arm64" + for pkg in pkg_names: + arm64 = sorted(deb_dir.glob(f"{pkg}_*_{preferred_arch}.deb")) + if arm64: + deb_path = max(arm64, key=lambda p: p.stat().st_mtime) + logger.info(f"Found local arm64 .deb for {pkg}: {deb_path.name}") + return deb_path, pkg + any_arch = sorted(deb_dir.glob(f"{pkg}_*.deb")) + if any_arch: + deb_path = max(any_arch, key=lambda p: p.stat().st_mtime) + logger.info(f"Found local .deb for {pkg}: {deb_path.name}") + return deb_path, pkg + return None, None + +# ========================= Main Orchestration ========================= + +def process_debian_trees( + input_root: str, + *, + apt_source_line: str, # Either 'deb ...' APT line OR local directory path + prefer_debian_changelog: bool = True, + dry_run: bool = False, # if True: write to changed-changelog instead of changelog +) -> Dict[str, Dict[str, str]]: + # Tool checks + for tool in ("dch", "dpkg-deb", "dpkg"): + if shutil.which(tool) is None: + logger.error(f"Required tool '{tool}' not found in PATH.") + raise RuntimeError(f"Required tool '{tool}' not found in PATH.") + + mode, local_dir, normalized = classify_source(apt_source_line) + if mode == "apt" and shutil.which("apt-get") is None: + logger.error("APT mode selected but 'apt-get' not found in PATH.") + raise RuntimeError("APT mode selected but 'apt-get' not found in PATH.") + + input_root = os.path.abspath(input_root) + statuses: Dict[str, Dict[str, str]] = {} + + apt_env = None + apt_opts: List[str] = [] + tmp_root = None + download_dir = None + arch = None + + try: + if mode == "apt": + logger.info("Mode: APT") + apt_env, apt_opts, tmp_root, download_dir, arch = apt_prepare_env(normalized) + else: + logger.info(f"Mode: LOCAL (dir={local_dir})") + + # Walk the input tree + for root, dirs, files in os.walk(input_root): + if "debian" not in dirs: + continue + + debian_dir = os.path.join(root, "debian") + control_path = os.path.join(debian_dir, "control") + changelog_path = os.path.join(debian_dir, "changelog") + changed_changelog_path = os.path.join(debian_dir, "changed-changelog") + + if not (os.path.isfile(control_path) and os.path.isfile(changelog_path)): + logger.warning(f"Skipping {debian_dir}: control/changelog not present.") + continue + + logger.info("=" * 80) + logger.info(f"Processing: {debian_dir}") + + status = {"debian_dir": debian_dir, "action": "", "details": ""} + + # Parse binary packages + control_text = Path(control_path).read_text(encoding="utf-8", errors="replace") + pkg_names = _parse_binary_packages(control_text) + logger.info(f"Binary packages in control: {pkg_names if pkg_names else 'NONE'}") + if not pkg_names: + status["action"] = "skip" + status["details"] = "No binary packages found in control." + statuses[debian_dir] = status + continue + + # Load local changelog + local_text = Path(changelog_path).read_text(encoding="utf-8", errors="replace") + local_entries = parse_debian_changelog(local_text) + if not local_entries: + logger.error(f"Local debian/changelog has no valid entries: {changelog_path}") + status["action"] = "error" + status["details"] = "Local debian/changelog has no valid entries." + statuses[debian_dir] = status + continue + + local_top_entry = local_entries[0] + local_top_version = local_top_entry.version + local_top_dist = local_top_entry.distribution or "unstable" + logger.info(f"Local top version: {local_top_version} (dist={local_top_dist})") + + # Obtain .deb (APT or local) + if mode == "apt": + deb_path, chosen_pkg = apt_download_deb_for_any(pkg_names, apt_env, apt_opts, download_dir, arch) + else: + deb_path, chosen_pkg = local_find_deb_for_any(pkg_names, local_dir) + + # Writer per dry-run + def write_output_text(text: str, context: str): + if dry_run: + Path(changed_changelog_path).write_text(text, encoding="utf-8") + logger.info(f"(dry-run) wrote: {changed_changelog_path} [{context}]") + else: + Path(changelog_path).write_text(text, encoding="utf-8") + if os.path.exists(changed_changelog_path): + try: + os.remove(changed_changelog_path) + logger.info(f"removed: {changed_changelog_path}") + except Exception: + pass + logger.info(f"wrote: {changelog_path} [{context}]") + + # Case 1: no .deb → ensure +rel using the tip maintainer of local changelog + if deb_path is None: + try: + if dry_run: + final_text = ensure_rel_at_tip_with_dch_on_temp( + local_text, local_top_dist + ) + write_output_text(final_text, "no-deb +rel simulated") + else: + name, email = extract_maint_from_entry_text(local_top_entry.text) + if not name or not email: + raise RuntimeError("Cannot parse maintainer from tip entry to add +rel.") + new_version = add_rel_suffix(local_top_version) # ONLY append +rel; never bump numerics + if new_version == local_top_version: + logger.info(f"Top already has +rel: {local_top_version}. Nothing to add.") + else: + logger.info(f"No .deb found. Adding +rel via dch: {new_version} (maint={name} <{email}>)") + run_dch_newversion_inplace( + changelog_path, + new_version=new_version, + distribution=local_top_dist, + maint_name=name, + maint_email=email, + ) + if os.path.exists(changed_changelog_path): + try: + os.remove(changed_changelog_path) + logger.info(f"removed: {changed_changelog_path}") + except Exception: + pass + status["action"] = "no-deb-add-rel" + (" (dry-run)" if dry_run else "") + status["details"] = "Ensured +rel at tip (no numeric bump)." + except Exception as ex: + logger.error(str(ex)) + status["action"] = "error" + status["details"] = f"No .deb and could not add +rel: {ex}" + statuses[debian_dir] = status + continue + + # .deb present: extract its changelog + try: + deb_changelog_text, deb_internal_path = extract_changelog_from_deb( + deb_path, chosen_pkg or pkg_names[0], prefer_debian_changelog=prefer_debian_changelog + ) + logger.info(f"Extracted .deb changelog path: {deb_internal_path}") + except Exception as ex: + logger.warning(f".deb changelog extraction failed: {ex}. Falling back to +rel on local.") + try: + if dry_run: + final_text = ensure_rel_at_tip_with_dch_on_temp( + local_text, local_top_dist + ) + write_output_text(final_text, "deb-no-changelog +rel simulated") + else: + name, email = extract_maint_from_entry_text(local_top_entry.text) + if not name or not email: + raise RuntimeError("Cannot parse maintainer from tip entry to add +rel.") + new_version = add_rel_suffix(local_top_version) + if new_version != local_top_version: + run_dch_newversion_inplace( + changelog_path, + new_version=new_version, + distribution=local_top_dist, + maint_name=name, + maint_email=email, + ) + if os.path.exists(changed_changelog_path): + try: + os.remove(changed_changelog_path) + except Exception: + pass + status["action"] = "deb-no-changelog-add-rel" + (" (dry-run)" if dry_run else "") + status["details"] = "Ensured +rel at tip (no changelog found in .deb)." + except Exception as inner_ex: + logger.error(str(inner_ex)) + status["action"] = "error" + status["details"] = f".deb present but +rel addition failed: {inner_ex}" + statuses[debian_dir] = status + continue + + deb_entries = parse_debian_changelog(deb_changelog_text) + if not deb_entries: + logger.warning(".deb changelog parsed to zero entries; using +rel on local.") + try: + if dry_run: + final_text = ensure_rel_at_tip_with_dch_on_temp( + local_text, local_top_dist + ) + write_output_text(final_text, "deb-empty-changelog +rel simulated") + else: + name, email = extract_maint_from_entry_text(local_top_entry.text) + if not name or not email: + raise RuntimeError("Cannot parse maintainer from tip entry to add +rel.") + new_version = add_rel_suffix(local_top_version) + if new_version != local_top_version: + run_dch_newversion_inplace( + changelog_path, + new_version=new_version, + distribution=local_top_dist, + maint_name=name, + maint_email=email, + ) + if os.path.exists(changed_changelog_path): + try: + os.remove(changed_changelog_path) + except Exception: + pass + status["action"] = "deb-empty-changelog-add-rel" + (" (dry-run)" if dry_run else "") + status["details"] = "Ensured +rel at tip (empty .deb changelog)." + except Exception as inner_ex: + logger.error(str(inner_ex)) + status["action"] = "error" + status["details"] = f"Empty .deb changelog and +rel addition failed: {inner_ex}" + statuses[debian_dir] = status + continue + + deb_top_version = deb_entries[0].version + deb_top_base = strip_rel_suffix(deb_top_version) + logger.info(f".deb top version: {deb_top_version} (base='{deb_top_base}')") + + # Build base text (replace/merge) + if deb_top_base.strip() == local_top_version.strip(): + base_text = deb_changelog_text + logger.info("strip_rel(deb_top) == local_top -> replace with .deb changelog.") + else: + idx = index_of_version(local_entries, deb_top_base) + if idx is not None: + logger.info(f"Exact base match at local index {idx}; prepending {idx} newer local entries.") + prepend_text = serialize_changelog(local_entries[:idx]) + else: + newer = newer_local_prefix(local_entries, deb_top_base) + logger.info(f"No exact match. Prepending {len(newer)} local entries where local_ver > base (dpkg semantics).") + prepend_text = serialize_changelog(newer) + base_text = prepend_text + ensure_trailing_newline(deb_changelog_text) + + # Ensure +rel and write merged/replaced content + try: + if dry_run: + dist_hint = distribution_hint_from_text(base_text) or local_top_dist + final_text = ensure_rel_at_tip_with_dch_on_temp( + base_text, dist_hint + ) + write_output_text(final_text, "deb-merge/replace +rel simulated") + else: + Path(changelog_path).write_text(base_text, encoding="utf-8") + dist_hint = distribution_hint_from_text(base_text) or local_top_dist + ensure_rel_at_tip_inplace( + changelog_path, + distribution_fallback=dist_hint + ) + if os.path.exists(changed_changelog_path): + try: + os.remove(changed_changelog_path) + logger.info(f"removed: {changed_changelog_path}") + except Exception: + pass + logger.info("wrote: changelog [deb-merge/replace applied]") + + # Update status + result_text = Path(changed_changelog_path if dry_run else changelog_path).read_text(encoding='utf-8', errors='replace') + result_entries = parse_debian_changelog(result_text) + result_top = result_entries[0].version if result_entries else "" + status["action"] = "deb-merge-or-replace-with-rel" + (" (dry-run)" if dry_run else "") + status["details"] = ( + f"deb_top={deb_top_version}, deb_top_base={deb_top_base}, local_top={local_top_version}, result_top={result_top}" + ) + except Exception as ex: + logger.error(str(ex)) + status["action"] = "error" + status["details"] = f"Merged/replaced but failed to add +rel: {ex}" + + statuses[debian_dir] = status + + finally: + if tmp_root: + _cleanup_dir(tmp_root) + + return statuses + +# ========================= Utilities ========================= + +def _parse_binary_packages(control_text: str) -> List[str]: + pkgs = [] + for m in re.finditer(r"(?m)^\s*Package:\s*(\S+)\s*$", control_text): + pkgs.append(m.group(1)) + seen = set() + out = [] + for p in pkgs: + if p not in seen: + out.append(p) + seen.add(p) + return out + + +def _cleanup_dir(path: Path): + try: + shutil.rmtree(path, ignore_errors=True) + except Exception: + pass + +# ========================= CLI ========================= + +def _parse_args(argv: Optional[List[str]] = None) -> argparse.Namespace: + p = argparse.ArgumentParser( + description="Merge/replace Debian changelogs with .deb changelogs and add +rel (no numeric bumps). " + "Provide either a full APT source line (starting with 'deb ') or a local directory path." + ) + p.add_argument("--input-root", required=True, help="Root directory to search for 'debian/' folders.") + p.add_argument("--apt-source-line", required=True, + help="Either a full apt source line (e.g., 'deb [arch=arm64 trusted=yes] http://pkg.qualcomm.com noble/stable main') " + "OR a local directory path (e.g., /filer/pkgdrops/ubuntu/noble/stable/arm64/).") + p.add_argument("--prefer-generic-changelog", action="store_true", + help="Prefer generic changelog.* over changelog.Debian.* inside .deb.") + p.add_argument("--dry-run", action="store_true", + help="Write to debian/changed-changelog instead of modifying debian/changelog.") + return p.parse_args(argv) + +def main(argv: Optional[List[str]] = None) -> int: + args = _parse_args(argv) + try: + statuses = process_debian_trees( + input_root=args.input_root, + apt_source_line=args.apt_source_line, + prefer_debian_changelog=not args.prefer_generic_changelog, + dry_run=args.dry_run, + ) + except Exception as e: + logger.error(str(e)) + return 1 + + logger.info("\nSUMMARY") + for debian_dir, st in statuses.items(): + logger.info("-" * 80) + logger.info(f"debian dir: {debian_dir}") + logger.info(f"action: {st.get('action')}") + logger.info(f"details: {st.get('details')}") + + had_error = any(st.get("action") == "error" for st in statuses.values()) + return 2 if had_error else 0 + +if __name__ == "__main__": + sys.exit(main())