0s autopkgtest [23:00:06]: starting date and time: 2025-11-06 23:00:06+0000 0s autopkgtest [23:00:06]: git checkout: 4b346b80 nova: make wait_reboot return success even when a no-op 0s autopkgtest [23:00:06]: host juju-7f2275-prod-proposed-migration-environment-15; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.2a3csm80/out --timeout-copy=6000 --setup-commands /home/ubuntu/autopkgtest-cloud/worker-config-production/setup-canonical.sh --apt-pocket=proposed=src:glib2.0 --apt-upgrade apport --timeout-short=300 --timeout-copy=20000 --timeout-build=20000 --env=ADT_TEST_TRIGGERS=glib2.0/2.80.0-6ubuntu3.5 -- ssh -s /home/ubuntu/autopkgtest/ssh-setup/nova -- --flavor autopkgtest-cpu2-ram4-disk20-amd64 --security-groups autopkgtest-juju-7f2275-prod-proposed-migration-environment-15@sto01-5.secgroup --name adt-noble-amd64-apport-20251106-230006-juju-7f2275-prod-proposed-migration-environment-15-0920b486-b3ec-4947-9dad-89fe7aff25ab --image adt/ubuntu-noble-amd64-server --keyname testbed-juju-7f2275-prod-proposed-migration-environment-15 --net-id=net_prod-autopkgtest-workers-amd64 -e TERM=linux --mirror=http://ftpmaster.internal/ubuntu/ 3s Creating nova instance adt-noble-amd64-apport-20251106-230006-juju-7f2275-prod-proposed-migration-environment-15-0920b486-b3ec-4947-9dad-89fe7aff25ab from image adt/ubuntu-noble-amd64-server-20251106.img (UUID f82ce5d4-d1c3-4471-82e5-184a3b3fdc5c)... 54s autopkgtest [23:01:00]: testbed dpkg architecture: amd64 54s autopkgtest [23:01:00]: testbed apt version: 2.8.3 55s autopkgtest [23:01:01]: @@@@@@@@@@@@@@@@@@@@ test bed setup 55s autopkgtest [23:01:01]: testbed release detected to be: None 55s autopkgtest [23:01:01]: updating testbed package index (apt update) 56s Get:1 http://ftpmaster.internal/ubuntu noble-proposed InRelease [265 kB] 56s Hit:2 http://ftpmaster.internal/ubuntu noble InRelease 56s Hit:3 http://ftpmaster.internal/ubuntu noble-updates InRelease 56s Hit:4 http://ftpmaster.internal/ubuntu noble-security InRelease 56s Get:5 http://ftpmaster.internal/ubuntu noble-proposed/multiverse Sources [9156 B] 56s Get:6 http://ftpmaster.internal/ubuntu noble-proposed/restricted Sources [44.3 kB] 56s Get:7 http://ftpmaster.internal/ubuntu noble-proposed/universe Sources [42.6 kB] 56s Get:8 http://ftpmaster.internal/ubuntu noble-proposed/main Sources [90.6 kB] 56s Get:9 http://ftpmaster.internal/ubuntu noble-proposed/main i386 Packages [82.5 kB] 56s Get:10 http://ftpmaster.internal/ubuntu noble-proposed/main amd64 Packages [478 kB] 56s Get:11 http://ftpmaster.internal/ubuntu noble-proposed/main amd64 c-n-f Metadata [2184 B] 56s Get:12 http://ftpmaster.internal/ubuntu noble-proposed/restricted i386 Packages [21.0 kB] 56s Get:13 http://ftpmaster.internal/ubuntu noble-proposed/restricted amd64 Packages [1011 kB] 56s Get:14 http://ftpmaster.internal/ubuntu noble-proposed/restricted amd64 c-n-f Metadata [444 B] 56s Get:15 http://ftpmaster.internal/ubuntu noble-proposed/universe amd64 Packages [111 kB] 56s Get:16 http://ftpmaster.internal/ubuntu noble-proposed/universe i386 Packages [51.2 kB] 56s Get:17 http://ftpmaster.internal/ubuntu noble-proposed/universe amd64 c-n-f Metadata [2328 B] 57s Get:18 http://ftpmaster.internal/ubuntu noble-proposed/multiverse i386 Packages [752 B] 57s Get:19 http://ftpmaster.internal/ubuntu noble-proposed/multiverse amd64 Packages [5288 B] 57s Get:20 http://ftpmaster.internal/ubuntu noble-proposed/multiverse amd64 c-n-f Metadata [284 B] 58s Fetched 2218 kB in 1s (2020 kB/s) 59s Reading package lists... 59s Hit:1 http://ftpmaster.internal/ubuntu noble-proposed InRelease 59s Hit:2 http://ftpmaster.internal/ubuntu noble InRelease 59s Hit:3 http://ftpmaster.internal/ubuntu noble-updates InRelease 60s Hit:4 http://ftpmaster.internal/ubuntu noble-security InRelease 60s Reading package lists... 60s Reading package lists... 61s Building dependency tree... 61s Reading state information... 61s Calculating upgrade... 61s The following packages will be upgraded: 61s gir1.2-glib-2.0 libglib2.0-0t64 libglib2.0-data 61s 3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 61s Need to get 1777 kB of archives. 61s After this operation, 0 B of additional disk space will be used. 61s Get:1 http://ftpmaster.internal/ubuntu noble-proposed/main amd64 gir1.2-glib-2.0 amd64 2.80.0-6ubuntu3.5 [183 kB] 61s Get:2 http://ftpmaster.internal/ubuntu noble-proposed/main amd64 libglib2.0-0t64 amd64 2.80.0-6ubuntu3.5 [1544 kB] 61s Get:3 http://ftpmaster.internal/ubuntu noble-proposed/main amd64 libglib2.0-data all 2.80.0-6ubuntu3.5 [48.8 kB] 61s dpkg-preconfigure: unable to re-open stdin: No such file or directory 61s Fetched 1777 kB in 0s (4490 kB/s) 62s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 106381 files and directories currently installed.) 62s Preparing to unpack .../gir1.2-glib-2.0_2.80.0-6ubuntu3.5_amd64.deb ... 62s Unpacking gir1.2-glib-2.0:amd64 (2.80.0-6ubuntu3.5) over (2.80.0-6ubuntu3.4) ... 62s Preparing to unpack .../libglib2.0-0t64_2.80.0-6ubuntu3.5_amd64.deb ... 62s Unpacking libglib2.0-0t64:amd64 (2.80.0-6ubuntu3.5) over (2.80.0-6ubuntu3.4) ... 62s Preparing to unpack .../libglib2.0-data_2.80.0-6ubuntu3.5_all.deb ... 62s Unpacking libglib2.0-data (2.80.0-6ubuntu3.5) over (2.80.0-6ubuntu3.4) ... 62s Setting up libglib2.0-0t64:amd64 (2.80.0-6ubuntu3.5) ... 62s No schema files found: doing nothing. 62s Setting up libglib2.0-data (2.80.0-6ubuntu3.5) ... 62s Setting up gir1.2-glib-2.0:amd64 (2.80.0-6ubuntu3.5) ... 62s Processing triggers for libc-bin (2.39-0ubuntu8.6) ... 62s autopkgtest [23:01:08]: upgrading testbed (apt dist-upgrade and autopurge) 62s Reading package lists... 62s Building dependency tree... 62s Reading state information... 62s Calculating upgrade...Starting pkgProblemResolver with broken count: 0 62s Starting 2 pkgProblemResolver with broken count: 0 62s Done 63s Entering ResolveByKeep 63s 63s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 63s Reading package lists... 63s Building dependency tree... 63s Reading state information... 64s Starting pkgProblemResolver with broken count: 0 64s Starting 2 pkgProblemResolver with broken count: 0 64s Done 64s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 66s autopkgtest [23:01:12]: testbed running kernel: Linux 6.8.0-87-generic #88-Ubuntu SMP PREEMPT_DYNAMIC Sat Oct 11 09:28:41 UTC 2025 66s autopkgtest [23:01:12]: @@@@@@@@@@@@@@@@@@@@ apt-source apport 72s Get:1 http://ftpmaster.internal/ubuntu noble-updates/main apport 2.28.1-0ubuntu3.8 (dsc) [3557 B] 72s Get:2 http://ftpmaster.internal/ubuntu noble-updates/main apport 2.28.1-0ubuntu3.8 (tar) [641 kB] 72s Get:3 http://ftpmaster.internal/ubuntu noble-updates/main apport 2.28.1-0ubuntu3.8 (asc) [833 B] 72s Get:4 http://ftpmaster.internal/ubuntu noble-updates/main apport 2.28.1-0ubuntu3.8 (diff) [204 kB] 72s gpgv: Signature made Fri Jul 11 15:03:54 2025 UTC 72s gpgv: using RSA key 47F22AE7A2754291722BF090F6E140F6DB359E58 72s gpgv: Can't check signature: No public key 72s dpkg-source: warning: cannot verify inline signature for ./apport_2.28.1-0ubuntu3.8.dsc: no acceptable signature found 72s autopkgtest [23:01:18]: testing package apport version 2.28.1-0ubuntu3.8 73s autopkgtest [23:01:19]: build not needed 74s autopkgtest [23:01:20]: test unit-and-integration-tests: preparing testbed 74s Reading package lists... 75s Building dependency tree... 75s Reading state information... 75s Starting pkgProblemResolver with broken count: 0 75s Starting 2 pkgProblemResolver with broken count: 0 75s Done 75s The following NEW packages will be installed: 75s adwaita-icon-theme apport-gtk apport-retrace apport-valgrind at-spi2-common 75s ca-certificates-java cpp cpp-13 cpp-13-x86-64-linux-gnu cpp-x86-64-linux-gnu 75s dconf-gsettings-backend dconf-service default-jdk-headless 75s default-jre-headless dictionaries-common emacsen-common fontconfig gcc 75s gcc-13 gcc-13-base gcc-13-x86-64-linux-gnu gcc-x86-64-linux-gnu gdb 75s gir1.2-atk-1.0 gir1.2-freedesktop gir1.2-gdkpixbuf-2.0 gir1.2-gtk-3.0 75s gir1.2-harfbuzz-0.0 gir1.2-pango-1.0 gir1.2-wnck-3.0 gnome-terminal 75s gnome-terminal-data gsettings-desktop-schemas gtk-update-icon-cache 75s hicolor-icon-theme humanity-icon-theme java-common libasan8 75s libatk-bridge2.0-0t64 libatk1.0-0t64 libatomic1 libatspi2.0-0t64 75s libavahi-client3 libavahi-common-data libavahi-common3 libbabeltrace1 75s libc6-dbg libcairo-gobject2 libcairo2 libcc1-0 libcolord2 libcups2t64 75s libdatrie1 libdconf1 libdebuginfod-common libdebuginfod1t64 libepoxy0 75s libgcc-13-dev libgdk-pixbuf-2.0-0 libgdk-pixbuf2.0-common libgomp1 75s libgraphite2-3 libgtk-3-0t64 libgtk-3-common libhandy-1-0 75s libharfbuzz-gobject0 libharfbuzz0b libhwasan0 libice6 libipt2 libisl23 75s libitm1 liblcms2-2 liblsan0 libmpc3 libpango-1.0-0 libpangocairo-1.0-0 75s libpangoft2-1.0-0 libpangoxft-1.0-0 libpcsclite1 libpixman-1-0 libquadmath0 75s libsm6 libsource-highlight-common libsource-highlight4t64 75s libstartup-notification0 libthai-data libthai0 libtsan2 libubsan1 75s libvte-2.91-0 libvte-2.91-common libwayland-client0 libwayland-cursor0 75s libwayland-egl1 libwhoopsie-preferences0 libwhoopsie0 libwnck-3-0 75s libwnck-3-common libx11-xcb1 libxaw7 libxcb-render0 libxcb-shm0 libxcb-util1 75s libxcomposite1 libxcursor1 libxdamage1 libxfixes3 libxft2 libxi6 75s libxinerama1 libxmu6 libxrandr2 libxrender1 libxres1 libxt6t64 75s openjdk-21-jdk-headless openjdk-21-jre-headless python3-iniconfig 75s python3-packaging python3-pluggy python3-psutil python3-pytest 75s python3-zstandard session-migration ubuntu-mono valgrind 75s whoopsie-preferences x11-common xbitmaps xterm 75s 0 upgraded, 131 newly installed, 0 to remove and 0 not upgraded. 75s Need to get 217 MB of archives. 75s After this operation, 634 MB of additional disk space will be used. 75s Get:1 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libdebuginfod-common all 0.190-1.1ubuntu0.1 [14.6 kB] 75s Get:2 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libgdk-pixbuf2.0-common all 2.42.10+dfsg-3ubuntu3.2 [8192 B] 75s Get:3 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libgdk-pixbuf-2.0-0 amd64 2.42.10+dfsg-3ubuntu3.2 [147 kB] 75s Get:4 http://ftpmaster.internal/ubuntu noble-updates/main amd64 gtk-update-icon-cache amd64 3.24.41-4ubuntu1.3 [51.9 kB] 75s Get:5 http://ftpmaster.internal/ubuntu noble/main amd64 hicolor-icon-theme all 0.17-2 [9976 B] 75s Get:6 http://ftpmaster.internal/ubuntu noble/main amd64 humanity-icon-theme all 0.6.16 [1282 kB] 76s Get:7 http://ftpmaster.internal/ubuntu noble/main amd64 ubuntu-mono all 24.04-0ubuntu1 [151 kB] 76s Get:8 http://ftpmaster.internal/ubuntu noble/main amd64 adwaita-icon-theme all 46.0-1 [723 kB] 76s Get:9 http://ftpmaster.internal/ubuntu noble/main amd64 at-spi2-common all 2.52.0-1build1 [8674 B] 76s Get:10 http://ftpmaster.internal/ubuntu noble/main amd64 libatk1.0-0t64 amd64 2.52.0-1build1 [55.3 kB] 76s Get:11 http://ftpmaster.internal/ubuntu noble/main amd64 gir1.2-atk-1.0 amd64 2.52.0-1build1 [23.1 kB] 76s Get:12 http://ftpmaster.internal/ubuntu noble/main amd64 libpixman-1-0 amd64 0.42.2-1build1 [279 kB] 76s Get:13 http://ftpmaster.internal/ubuntu noble/main amd64 libxcb-render0 amd64 1.15-1ubuntu2 [16.2 kB] 76s Get:14 http://ftpmaster.internal/ubuntu noble/main amd64 libxcb-shm0 amd64 1.15-1ubuntu2 [5756 B] 76s Get:15 http://ftpmaster.internal/ubuntu noble/main amd64 libxrender1 amd64 1:0.9.10-1.1build1 [19.0 kB] 76s Get:16 http://ftpmaster.internal/ubuntu noble/main amd64 libcairo2 amd64 1.18.0-3build1 [566 kB] 76s Get:17 http://ftpmaster.internal/ubuntu noble/main amd64 libcairo-gobject2 amd64 1.18.0-3build1 [127 kB] 76s Get:18 http://ftpmaster.internal/ubuntu noble/main amd64 gir1.2-freedesktop amd64 1.80.1-1 [49.7 kB] 76s Get:19 http://ftpmaster.internal/ubuntu noble-updates/main amd64 gir1.2-gdkpixbuf-2.0 amd64 2.42.10+dfsg-3ubuntu3.2 [9488 B] 76s Get:20 http://ftpmaster.internal/ubuntu noble/main amd64 libgraphite2-3 amd64 1.3.14-2build1 [73.0 kB] 76s Get:21 http://ftpmaster.internal/ubuntu noble/main amd64 libharfbuzz0b amd64 8.3.0-2build2 [469 kB] 76s Get:22 http://ftpmaster.internal/ubuntu noble/main amd64 libharfbuzz-gobject0 amd64 8.3.0-2build2 [34.3 kB] 76s Get:23 http://ftpmaster.internal/ubuntu noble/main amd64 gir1.2-harfbuzz-0.0 amd64 8.3.0-2build2 [44.5 kB] 76s Get:24 http://ftpmaster.internal/ubuntu noble/main amd64 fontconfig amd64 2.15.0-1.1ubuntu2 [180 kB] 76s Get:25 http://ftpmaster.internal/ubuntu noble/main amd64 libthai-data all 0.1.29-2build1 [158 kB] 76s Get:26 http://ftpmaster.internal/ubuntu noble/main amd64 libdatrie1 amd64 0.2.13-3build1 [19.0 kB] 76s Get:27 http://ftpmaster.internal/ubuntu noble/main amd64 libthai0 amd64 0.1.29-2build1 [18.9 kB] 76s Get:28 http://ftpmaster.internal/ubuntu noble/main amd64 libpango-1.0-0 amd64 1.52.1+ds-1build1 [231 kB] 76s Get:29 http://ftpmaster.internal/ubuntu noble/main amd64 libpangoft2-1.0-0 amd64 1.52.1+ds-1build1 [42.5 kB] 76s Get:30 http://ftpmaster.internal/ubuntu noble/main amd64 libpangocairo-1.0-0 amd64 1.52.1+ds-1build1 [28.8 kB] 76s Get:31 http://ftpmaster.internal/ubuntu noble/main amd64 libxft2 amd64 2.3.6-1build1 [45.3 kB] 76s Get:32 http://ftpmaster.internal/ubuntu noble/main amd64 libpangoxft-1.0-0 amd64 1.52.1+ds-1build1 [20.3 kB] 76s Get:33 http://ftpmaster.internal/ubuntu noble/main amd64 gir1.2-pango-1.0 amd64 1.52.1+ds-1build1 [34.8 kB] 76s Get:34 http://ftpmaster.internal/ubuntu noble/main amd64 libxi6 amd64 2:1.8.1-1build1 [32.4 kB] 76s Get:35 http://ftpmaster.internal/ubuntu noble/main amd64 libatspi2.0-0t64 amd64 2.52.0-1build1 [80.5 kB] 76s Get:36 http://ftpmaster.internal/ubuntu noble/main amd64 libatk-bridge2.0-0t64 amd64 2.52.0-1build1 [66.0 kB] 76s Get:37 http://ftpmaster.internal/ubuntu noble/main amd64 liblcms2-2 amd64 2.14-2build1 [161 kB] 76s Get:38 http://ftpmaster.internal/ubuntu noble/main amd64 libcolord2 amd64 1.4.7-1build2 [149 kB] 76s Get:39 http://ftpmaster.internal/ubuntu noble/main amd64 libavahi-common-data amd64 0.8-13ubuntu6 [29.7 kB] 76s Get:40 http://ftpmaster.internal/ubuntu noble/main amd64 libavahi-common3 amd64 0.8-13ubuntu6 [23.3 kB] 76s Get:41 http://ftpmaster.internal/ubuntu noble/main amd64 libavahi-client3 amd64 0.8-13ubuntu6 [26.8 kB] 76s Get:42 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libcups2t64 amd64 2.4.7-1.2ubuntu7.4 [272 kB] 76s Get:43 http://ftpmaster.internal/ubuntu noble/main amd64 libepoxy0 amd64 1.5.10-1build1 [220 kB] 76s Get:44 http://ftpmaster.internal/ubuntu noble/main amd64 libwayland-client0 amd64 1.22.0-2.1build1 [26.4 kB] 76s Get:45 http://ftpmaster.internal/ubuntu noble/main amd64 libwayland-cursor0 amd64 1.22.0-2.1build1 [10.4 kB] 76s Get:46 http://ftpmaster.internal/ubuntu noble/main amd64 libwayland-egl1 amd64 1.22.0-2.1build1 [5628 B] 76s Get:47 http://ftpmaster.internal/ubuntu noble/main amd64 libxcomposite1 amd64 1:0.4.5-1build3 [6320 B] 76s Get:48 http://ftpmaster.internal/ubuntu noble/main amd64 libxfixes3 amd64 1:6.0.0-2build1 [10.8 kB] 76s Get:49 http://ftpmaster.internal/ubuntu noble/main amd64 libxcursor1 amd64 1:1.2.1-1build1 [20.7 kB] 76s Get:50 http://ftpmaster.internal/ubuntu noble/main amd64 libxdamage1 amd64 1:1.1.6-1build1 [6150 B] 76s Get:51 http://ftpmaster.internal/ubuntu noble/main amd64 libxinerama1 amd64 2:1.1.4-3build1 [6396 B] 76s Get:52 http://ftpmaster.internal/ubuntu noble/main amd64 libxrandr2 amd64 2:1.5.2-2build1 [19.7 kB] 76s Get:53 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libdconf1 amd64 0.40.0-4ubuntu0.1 [39.6 kB] 76s Get:54 http://ftpmaster.internal/ubuntu noble-updates/main amd64 dconf-service amd64 0.40.0-4ubuntu0.1 [27.6 kB] 76s Get:55 http://ftpmaster.internal/ubuntu noble-updates/main amd64 dconf-gsettings-backend amd64 0.40.0-4ubuntu0.1 [22.1 kB] 76s Get:56 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libgtk-3-common all 3.24.41-4ubuntu1.3 [1426 kB] 76s Get:57 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libgtk-3-0t64 amd64 3.24.41-4ubuntu1.3 [2913 kB] 76s Get:58 http://ftpmaster.internal/ubuntu noble-updates/main amd64 gir1.2-gtk-3.0 amd64 3.24.41-4ubuntu1.3 [245 kB] 76s Get:59 http://ftpmaster.internal/ubuntu noble/main amd64 libx11-xcb1 amd64 2:1.8.7-1build1 [7800 B] 76s Get:60 http://ftpmaster.internal/ubuntu noble/main amd64 libxcb-util1 amd64 0.4.0-1build3 [10.7 kB] 76s Get:61 http://ftpmaster.internal/ubuntu noble/main amd64 libstartup-notification0 amd64 0.12-6build3 [18.4 kB] 76s Get:62 http://ftpmaster.internal/ubuntu noble/main amd64 libxres1 amd64 2:1.2.1-1build1 [6778 B] 76s Get:63 http://ftpmaster.internal/ubuntu noble/main amd64 libwnck-3-common all 43.0-3build4 [19.5 kB] 76s Get:64 http://ftpmaster.internal/ubuntu noble/main amd64 libwnck-3-0 amd64 43.0-3build4 [113 kB] 76s Get:65 http://ftpmaster.internal/ubuntu noble/main amd64 gir1.2-wnck-3.0 amd64 43.0-3build4 [10.2 kB] 76s Get:66 http://ftpmaster.internal/ubuntu noble/main amd64 gnome-terminal-data all 3.52.0-1ubuntu2 [38.5 kB] 76s Get:67 http://ftpmaster.internal/ubuntu noble/main amd64 session-migration amd64 0.3.9build1 [9034 B] 76s Get:68 http://ftpmaster.internal/ubuntu noble-updates/main amd64 gsettings-desktop-schemas all 46.1-0ubuntu1 [35.6 kB] 76s Get:69 http://ftpmaster.internal/ubuntu noble/main amd64 libhandy-1-0 amd64 1.8.3-1build2 [232 kB] 76s Get:70 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libvte-2.91-common amd64 0.76.0-1ubuntu0.1 [13.5 kB] 76s Get:71 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libvte-2.91-0 amd64 0.76.0-1ubuntu0.1 [230 kB] 76s Get:72 http://ftpmaster.internal/ubuntu noble/main amd64 gnome-terminal amd64 3.52.0-1ubuntu2 [217 kB] 76s Get:73 http://ftpmaster.internal/ubuntu noble/main amd64 xbitmaps all 1.1.1-2.2 [22.4 kB] 76s Get:74 http://ftpmaster.internal/ubuntu noble/main amd64 x11-common all 1:7.7+23ubuntu3 [21.7 kB] 76s Get:75 http://ftpmaster.internal/ubuntu noble/main amd64 libice6 amd64 2:1.0.10-1build3 [41.4 kB] 76s Get:76 http://ftpmaster.internal/ubuntu noble/main amd64 libsm6 amd64 2:1.2.3-1build3 [15.7 kB] 76s Get:77 http://ftpmaster.internal/ubuntu noble/main amd64 libxt6t64 amd64 1:1.2.1-1.2build1 [171 kB] 76s Get:78 http://ftpmaster.internal/ubuntu noble/main amd64 libxmu6 amd64 2:1.1.3-3build2 [47.6 kB] 76s Get:79 http://ftpmaster.internal/ubuntu noble/main amd64 libxaw7 amd64 2:1.0.14-1build2 [187 kB] 77s Get:80 http://ftpmaster.internal/ubuntu noble/universe amd64 xterm amd64 390-1ubuntu3 [883 kB] 77s Get:81 http://ftpmaster.internal/ubuntu noble/main amd64 libwhoopsie-preferences0 amd64 23build3 [14.4 kB] 77s Get:82 http://ftpmaster.internal/ubuntu noble/main amd64 libwhoopsie0 amd64 0.2.77build3 [10.9 kB] 77s Get:83 http://ftpmaster.internal/ubuntu noble/main amd64 whoopsie-preferences amd64 23build3 [8850 B] 77s Get:84 http://ftpmaster.internal/ubuntu noble-updates/main amd64 apport-gtk all 2.28.1-0ubuntu3.8 [9758 B] 77s Get:85 http://ftpmaster.internal/ubuntu noble/main amd64 libbabeltrace1 amd64 1.5.11-3build3 [164 kB] 77s Get:86 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libdebuginfod1t64 amd64 0.190-1.1ubuntu0.1 [17.1 kB] 77s Get:87 http://ftpmaster.internal/ubuntu noble/main amd64 libipt2 amd64 2.0.6-1build1 [45.7 kB] 77s Get:88 http://ftpmaster.internal/ubuntu noble/main amd64 libsource-highlight-common all 3.1.9-4.3build1 [64.2 kB] 77s Get:89 http://ftpmaster.internal/ubuntu noble/main amd64 libsource-highlight4t64 amd64 3.1.9-4.3build1 [258 kB] 77s Get:90 http://ftpmaster.internal/ubuntu noble/main amd64 gdb amd64 15.0.50.20240403-0ubuntu1 [4010 kB] 77s Get:91 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libc6-dbg amd64 2.39-0ubuntu8.6 [7458 kB] 77s Get:92 http://ftpmaster.internal/ubuntu noble-updates/main amd64 apport-retrace all 2.28.1-0ubuntu3.8 [14.4 kB] 77s Get:93 http://ftpmaster.internal/ubuntu noble/main amd64 valgrind amd64 1:3.22.0-0ubuntu3 [14.9 MB] 78s Get:94 http://ftpmaster.internal/ubuntu noble-updates/universe amd64 apport-valgrind all 2.28.1-0ubuntu3.8 [5228 B] 78s Get:95 http://ftpmaster.internal/ubuntu noble/main amd64 ca-certificates-java all 20240118 [11.6 kB] 78s Get:96 http://ftpmaster.internal/ubuntu noble-updates/main amd64 gcc-13-base amd64 13.3.0-6ubuntu2~24.04 [51.5 kB] 78s Get:97 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libisl23 amd64 0.26-3build1.1 [680 kB] 78s Get:98 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libmpc3 amd64 1.3.1-1build1.1 [54.6 kB] 78s Get:99 http://ftpmaster.internal/ubuntu noble-updates/main amd64 cpp-13-x86-64-linux-gnu amd64 13.3.0-6ubuntu2~24.04 [10.7 MB] 78s Get:100 http://ftpmaster.internal/ubuntu noble-updates/main amd64 cpp-13 amd64 13.3.0-6ubuntu2~24.04 [1038 B] 78s Get:101 http://ftpmaster.internal/ubuntu noble/main amd64 cpp-x86-64-linux-gnu amd64 4:13.2.0-7ubuntu1 [5326 B] 78s Get:102 http://ftpmaster.internal/ubuntu noble/main amd64 cpp amd64 4:13.2.0-7ubuntu1 [22.4 kB] 78s Get:103 http://ftpmaster.internal/ubuntu noble/main amd64 java-common all 0.75+exp1 [6798 B] 78s Get:104 http://ftpmaster.internal/ubuntu noble/main amd64 libpcsclite1 amd64 2.0.3-1build1 [21.4 kB] 78s Get:105 http://ftpmaster.internal/ubuntu noble-updates/main amd64 openjdk-21-jre-headless amd64 21.0.8+9~us1-0ubuntu1~24.04.1 [46.4 MB] 79s Get:106 http://ftpmaster.internal/ubuntu noble/main amd64 default-jre-headless amd64 2:1.21-75+exp1 [3094 B] 79s Get:107 http://ftpmaster.internal/ubuntu noble-updates/main amd64 openjdk-21-jdk-headless amd64 21.0.8+9~us1-0ubuntu1~24.04.1 [82.7 MB] 81s Get:108 http://ftpmaster.internal/ubuntu noble/main amd64 default-jdk-headless amd64 2:1.21-75+exp1 [960 B] 81s Get:109 http://ftpmaster.internal/ubuntu noble/main amd64 emacsen-common all 3.0.5 [12.1 kB] 81s Get:110 http://ftpmaster.internal/ubuntu noble/main amd64 dictionaries-common all 1.29.7 [188 kB] 81s Get:111 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libcc1-0 amd64 14.2.0-4ubuntu2~24.04 [48.0 kB] 81s Get:112 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libgomp1 amd64 14.2.0-4ubuntu2~24.04 [148 kB] 81s Get:113 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libitm1 amd64 14.2.0-4ubuntu2~24.04 [29.7 kB] 81s Get:114 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libatomic1 amd64 14.2.0-4ubuntu2~24.04 [10.5 kB] 81s Get:115 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libasan8 amd64 14.2.0-4ubuntu2~24.04 [3031 kB] 81s Get:116 http://ftpmaster.internal/ubuntu noble-updates/main amd64 liblsan0 amd64 14.2.0-4ubuntu2~24.04 [1322 kB] 81s Get:117 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libtsan2 amd64 14.2.0-4ubuntu2~24.04 [2772 kB] 81s Get:118 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libubsan1 amd64 14.2.0-4ubuntu2~24.04 [1184 kB] 81s Get:119 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libhwasan0 amd64 14.2.0-4ubuntu2~24.04 [1641 kB] 81s Get:120 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libquadmath0 amd64 14.2.0-4ubuntu2~24.04 [153 kB] 81s Get:121 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libgcc-13-dev amd64 13.3.0-6ubuntu2~24.04 [2681 kB] 82s Get:122 http://ftpmaster.internal/ubuntu noble-updates/main amd64 gcc-13-x86-64-linux-gnu amd64 13.3.0-6ubuntu2~24.04 [21.1 MB] 82s Get:123 http://ftpmaster.internal/ubuntu noble-updates/main amd64 gcc-13 amd64 13.3.0-6ubuntu2~24.04 [494 kB] 82s Get:124 http://ftpmaster.internal/ubuntu noble/main amd64 gcc-x86-64-linux-gnu amd64 4:13.2.0-7ubuntu1 [1212 B] 82s Get:125 http://ftpmaster.internal/ubuntu noble/main amd64 gcc amd64 4:13.2.0-7ubuntu1 [5018 B] 82s Get:126 http://ftpmaster.internal/ubuntu noble/universe amd64 python3-iniconfig all 1.1.1-2 [6024 B] 82s Get:127 http://ftpmaster.internal/ubuntu noble/main amd64 python3-packaging all 24.0-1 [41.1 kB] 82s Get:128 http://ftpmaster.internal/ubuntu noble/universe amd64 python3-pluggy all 1.4.0-1 [20.4 kB] 82s Get:129 http://ftpmaster.internal/ubuntu noble/main amd64 python3-psutil amd64 5.9.8-2build2 [195 kB] 82s Get:130 http://ftpmaster.internal/ubuntu noble/universe amd64 python3-pytest all 7.4.4-1 [305 kB] 82s Get:131 http://ftpmaster.internal/ubuntu noble/universe amd64 python3-zstandard amd64 0.22.0-1build1 [360 kB] 82s Preconfiguring packages ... 82s Fetched 217 MB in 7s (32.5 MB/s) 82s Selecting previously unselected package libdebuginfod-common. 82s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 106381 files and directories currently installed.) 82s Preparing to unpack .../000-libdebuginfod-common_0.190-1.1ubuntu0.1_all.deb ... 82s Unpacking libdebuginfod-common (0.190-1.1ubuntu0.1) ... 82s Selecting previously unselected package libgdk-pixbuf2.0-common. 82s Preparing to unpack .../001-libgdk-pixbuf2.0-common_2.42.10+dfsg-3ubuntu3.2_all.deb ... 82s Unpacking libgdk-pixbuf2.0-common (2.42.10+dfsg-3ubuntu3.2) ... 82s Selecting previously unselected package libgdk-pixbuf-2.0-0:amd64. 82s Preparing to unpack .../002-libgdk-pixbuf-2.0-0_2.42.10+dfsg-3ubuntu3.2_amd64.deb ... 82s Unpacking libgdk-pixbuf-2.0-0:amd64 (2.42.10+dfsg-3ubuntu3.2) ... 82s Selecting previously unselected package gtk-update-icon-cache. 82s Preparing to unpack .../003-gtk-update-icon-cache_3.24.41-4ubuntu1.3_amd64.deb ... 82s Unpacking gtk-update-icon-cache (3.24.41-4ubuntu1.3) ... 82s Selecting previously unselected package hicolor-icon-theme. 82s Preparing to unpack .../004-hicolor-icon-theme_0.17-2_all.deb ... 82s Unpacking hicolor-icon-theme (0.17-2) ... 82s Selecting previously unselected package humanity-icon-theme. 82s Preparing to unpack .../005-humanity-icon-theme_0.6.16_all.deb ... 82s Unpacking humanity-icon-theme (0.6.16) ... 83s Selecting previously unselected package ubuntu-mono. 83s Preparing to unpack .../006-ubuntu-mono_24.04-0ubuntu1_all.deb ... 83s Unpacking ubuntu-mono (24.04-0ubuntu1) ... 83s Selecting previously unselected package adwaita-icon-theme. 83s Preparing to unpack .../007-adwaita-icon-theme_46.0-1_all.deb ... 83s Unpacking adwaita-icon-theme (46.0-1) ... 83s Selecting previously unselected package at-spi2-common. 83s Preparing to unpack .../008-at-spi2-common_2.52.0-1build1_all.deb ... 83s Unpacking at-spi2-common (2.52.0-1build1) ... 83s Selecting previously unselected package libatk1.0-0t64:amd64. 83s Preparing to unpack .../009-libatk1.0-0t64_2.52.0-1build1_amd64.deb ... 83s Unpacking libatk1.0-0t64:amd64 (2.52.0-1build1) ... 83s Selecting previously unselected package gir1.2-atk-1.0:amd64. 83s Preparing to unpack .../010-gir1.2-atk-1.0_2.52.0-1build1_amd64.deb ... 83s Unpacking gir1.2-atk-1.0:amd64 (2.52.0-1build1) ... 83s Selecting previously unselected package libpixman-1-0:amd64. 83s Preparing to unpack .../011-libpixman-1-0_0.42.2-1build1_amd64.deb ... 83s Unpacking libpixman-1-0:amd64 (0.42.2-1build1) ... 84s Selecting previously unselected package libxcb-render0:amd64. 84s Preparing to unpack .../012-libxcb-render0_1.15-1ubuntu2_amd64.deb ... 84s Unpacking libxcb-render0:amd64 (1.15-1ubuntu2) ... 84s Selecting previously unselected package libxcb-shm0:amd64. 84s Preparing to unpack .../013-libxcb-shm0_1.15-1ubuntu2_amd64.deb ... 84s Unpacking libxcb-shm0:amd64 (1.15-1ubuntu2) ... 84s Selecting previously unselected package libxrender1:amd64. 84s Preparing to unpack .../014-libxrender1_1%3a0.9.10-1.1build1_amd64.deb ... 84s Unpacking libxrender1:amd64 (1:0.9.10-1.1build1) ... 84s Selecting previously unselected package libcairo2:amd64. 84s Preparing to unpack .../015-libcairo2_1.18.0-3build1_amd64.deb ... 84s Unpacking libcairo2:amd64 (1.18.0-3build1) ... 84s Selecting previously unselected package libcairo-gobject2:amd64. 84s Preparing to unpack .../016-libcairo-gobject2_1.18.0-3build1_amd64.deb ... 84s Unpacking libcairo-gobject2:amd64 (1.18.0-3build1) ... 84s Selecting previously unselected package gir1.2-freedesktop:amd64. 84s Preparing to unpack .../017-gir1.2-freedesktop_1.80.1-1_amd64.deb ... 84s Unpacking gir1.2-freedesktop:amd64 (1.80.1-1) ... 84s Selecting previously unselected package gir1.2-gdkpixbuf-2.0:amd64. 84s Preparing to unpack .../018-gir1.2-gdkpixbuf-2.0_2.42.10+dfsg-3ubuntu3.2_amd64.deb ... 84s Unpacking gir1.2-gdkpixbuf-2.0:amd64 (2.42.10+dfsg-3ubuntu3.2) ... 84s Selecting previously unselected package libgraphite2-3:amd64. 84s Preparing to unpack .../019-libgraphite2-3_1.3.14-2build1_amd64.deb ... 84s Unpacking libgraphite2-3:amd64 (1.3.14-2build1) ... 84s Selecting previously unselected package libharfbuzz0b:amd64. 84s Preparing to unpack .../020-libharfbuzz0b_8.3.0-2build2_amd64.deb ... 84s Unpacking libharfbuzz0b:amd64 (8.3.0-2build2) ... 84s Selecting previously unselected package libharfbuzz-gobject0:amd64. 84s Preparing to unpack .../021-libharfbuzz-gobject0_8.3.0-2build2_amd64.deb ... 84s Unpacking libharfbuzz-gobject0:amd64 (8.3.0-2build2) ... 84s Selecting previously unselected package gir1.2-harfbuzz-0.0:amd64. 84s Preparing to unpack .../022-gir1.2-harfbuzz-0.0_8.3.0-2build2_amd64.deb ... 84s Unpacking gir1.2-harfbuzz-0.0:amd64 (8.3.0-2build2) ... 84s Selecting previously unselected package fontconfig. 84s Preparing to unpack .../023-fontconfig_2.15.0-1.1ubuntu2_amd64.deb ... 84s Unpacking fontconfig (2.15.0-1.1ubuntu2) ... 84s Selecting previously unselected package libthai-data. 84s Preparing to unpack .../024-libthai-data_0.1.29-2build1_all.deb ... 84s Unpacking libthai-data (0.1.29-2build1) ... 84s Selecting previously unselected package libdatrie1:amd64. 84s Preparing to unpack .../025-libdatrie1_0.2.13-3build1_amd64.deb ... 84s Unpacking libdatrie1:amd64 (0.2.13-3build1) ... 84s Selecting previously unselected package libthai0:amd64. 84s Preparing to unpack .../026-libthai0_0.1.29-2build1_amd64.deb ... 84s Unpacking libthai0:amd64 (0.1.29-2build1) ... 84s Selecting previously unselected package libpango-1.0-0:amd64. 84s Preparing to unpack .../027-libpango-1.0-0_1.52.1+ds-1build1_amd64.deb ... 84s Unpacking libpango-1.0-0:amd64 (1.52.1+ds-1build1) ... 84s Selecting previously unselected package libpangoft2-1.0-0:amd64. 84s Preparing to unpack .../028-libpangoft2-1.0-0_1.52.1+ds-1build1_amd64.deb ... 84s Unpacking libpangoft2-1.0-0:amd64 (1.52.1+ds-1build1) ... 84s Selecting previously unselected package libpangocairo-1.0-0:amd64. 84s Preparing to unpack .../029-libpangocairo-1.0-0_1.52.1+ds-1build1_amd64.deb ... 84s Unpacking libpangocairo-1.0-0:amd64 (1.52.1+ds-1build1) ... 84s Selecting previously unselected package libxft2:amd64. 84s Preparing to unpack .../030-libxft2_2.3.6-1build1_amd64.deb ... 84s Unpacking libxft2:amd64 (2.3.6-1build1) ... 84s Selecting previously unselected package libpangoxft-1.0-0:amd64. 84s Preparing to unpack .../031-libpangoxft-1.0-0_1.52.1+ds-1build1_amd64.deb ... 84s Unpacking libpangoxft-1.0-0:amd64 (1.52.1+ds-1build1) ... 84s Selecting previously unselected package gir1.2-pango-1.0:amd64. 84s Preparing to unpack .../032-gir1.2-pango-1.0_1.52.1+ds-1build1_amd64.deb ... 84s Unpacking gir1.2-pango-1.0:amd64 (1.52.1+ds-1build1) ... 84s Selecting previously unselected package libxi6:amd64. 84s Preparing to unpack .../033-libxi6_2%3a1.8.1-1build1_amd64.deb ... 84s Unpacking libxi6:amd64 (2:1.8.1-1build1) ... 84s Selecting previously unselected package libatspi2.0-0t64:amd64. 84s Preparing to unpack .../034-libatspi2.0-0t64_2.52.0-1build1_amd64.deb ... 84s Unpacking libatspi2.0-0t64:amd64 (2.52.0-1build1) ... 84s Selecting previously unselected package libatk-bridge2.0-0t64:amd64. 84s Preparing to unpack .../035-libatk-bridge2.0-0t64_2.52.0-1build1_amd64.deb ... 84s Unpacking libatk-bridge2.0-0t64:amd64 (2.52.0-1build1) ... 84s Selecting previously unselected package liblcms2-2:amd64. 84s Preparing to unpack .../036-liblcms2-2_2.14-2build1_amd64.deb ... 84s Unpacking liblcms2-2:amd64 (2.14-2build1) ... 84s Selecting previously unselected package libcolord2:amd64. 84s Preparing to unpack .../037-libcolord2_1.4.7-1build2_amd64.deb ... 84s Unpacking libcolord2:amd64 (1.4.7-1build2) ... 84s Selecting previously unselected package libavahi-common-data:amd64. 84s Preparing to unpack .../038-libavahi-common-data_0.8-13ubuntu6_amd64.deb ... 84s Unpacking libavahi-common-data:amd64 (0.8-13ubuntu6) ... 84s Selecting previously unselected package libavahi-common3:amd64. 84s Preparing to unpack .../039-libavahi-common3_0.8-13ubuntu6_amd64.deb ... 84s Unpacking libavahi-common3:amd64 (0.8-13ubuntu6) ... 84s Selecting previously unselected package libavahi-client3:amd64. 84s Preparing to unpack .../040-libavahi-client3_0.8-13ubuntu6_amd64.deb ... 84s Unpacking libavahi-client3:amd64 (0.8-13ubuntu6) ... 84s Selecting previously unselected package libcups2t64:amd64. 84s Preparing to unpack .../041-libcups2t64_2.4.7-1.2ubuntu7.4_amd64.deb ... 84s Unpacking libcups2t64:amd64 (2.4.7-1.2ubuntu7.4) ... 84s Selecting previously unselected package libepoxy0:amd64. 84s Preparing to unpack .../042-libepoxy0_1.5.10-1build1_amd64.deb ... 84s Unpacking libepoxy0:amd64 (1.5.10-1build1) ... 84s Selecting previously unselected package libwayland-client0:amd64. 84s Preparing to unpack .../043-libwayland-client0_1.22.0-2.1build1_amd64.deb ... 84s Unpacking libwayland-client0:amd64 (1.22.0-2.1build1) ... 84s Selecting previously unselected package libwayland-cursor0:amd64. 84s Preparing to unpack .../044-libwayland-cursor0_1.22.0-2.1build1_amd64.deb ... 84s Unpacking libwayland-cursor0:amd64 (1.22.0-2.1build1) ... 84s Selecting previously unselected package libwayland-egl1:amd64. 84s Preparing to unpack .../045-libwayland-egl1_1.22.0-2.1build1_amd64.deb ... 84s Unpacking libwayland-egl1:amd64 (1.22.0-2.1build1) ... 84s Selecting previously unselected package libxcomposite1:amd64. 84s Preparing to unpack .../046-libxcomposite1_1%3a0.4.5-1build3_amd64.deb ... 84s Unpacking libxcomposite1:amd64 (1:0.4.5-1build3) ... 84s Selecting previously unselected package libxfixes3:amd64. 84s Preparing to unpack .../047-libxfixes3_1%3a6.0.0-2build1_amd64.deb ... 84s Unpacking libxfixes3:amd64 (1:6.0.0-2build1) ... 84s Selecting previously unselected package libxcursor1:amd64. 84s Preparing to unpack .../048-libxcursor1_1%3a1.2.1-1build1_amd64.deb ... 84s Unpacking libxcursor1:amd64 (1:1.2.1-1build1) ... 84s Selecting previously unselected package libxdamage1:amd64. 84s Preparing to unpack .../049-libxdamage1_1%3a1.1.6-1build1_amd64.deb ... 84s Unpacking libxdamage1:amd64 (1:1.1.6-1build1) ... 84s Selecting previously unselected package libxinerama1:amd64. 84s Preparing to unpack .../050-libxinerama1_2%3a1.1.4-3build1_amd64.deb ... 84s Unpacking libxinerama1:amd64 (2:1.1.4-3build1) ... 84s Selecting previously unselected package libxrandr2:amd64. 84s Preparing to unpack .../051-libxrandr2_2%3a1.5.2-2build1_amd64.deb ... 84s Unpacking libxrandr2:amd64 (2:1.5.2-2build1) ... 84s Selecting previously unselected package libdconf1:amd64. 84s Preparing to unpack .../052-libdconf1_0.40.0-4ubuntu0.1_amd64.deb ... 84s Unpacking libdconf1:amd64 (0.40.0-4ubuntu0.1) ... 84s Selecting previously unselected package dconf-service. 84s Preparing to unpack .../053-dconf-service_0.40.0-4ubuntu0.1_amd64.deb ... 84s Unpacking dconf-service (0.40.0-4ubuntu0.1) ... 84s Selecting previously unselected package dconf-gsettings-backend:amd64. 84s Preparing to unpack .../054-dconf-gsettings-backend_0.40.0-4ubuntu0.1_amd64.deb ... 84s Unpacking dconf-gsettings-backend:amd64 (0.40.0-4ubuntu0.1) ... 84s Selecting previously unselected package libgtk-3-common. 84s Preparing to unpack .../055-libgtk-3-common_3.24.41-4ubuntu1.3_all.deb ... 84s Unpacking libgtk-3-common (3.24.41-4ubuntu1.3) ... 84s Selecting previously unselected package libgtk-3-0t64:amd64. 84s Preparing to unpack .../056-libgtk-3-0t64_3.24.41-4ubuntu1.3_amd64.deb ... 84s Unpacking libgtk-3-0t64:amd64 (3.24.41-4ubuntu1.3) ... 84s Selecting previously unselected package gir1.2-gtk-3.0:amd64. 84s Preparing to unpack .../057-gir1.2-gtk-3.0_3.24.41-4ubuntu1.3_amd64.deb ... 84s Unpacking gir1.2-gtk-3.0:amd64 (3.24.41-4ubuntu1.3) ... 85s Selecting previously unselected package libx11-xcb1:amd64. 85s Preparing to unpack .../058-libx11-xcb1_2%3a1.8.7-1build1_amd64.deb ... 85s Unpacking libx11-xcb1:amd64 (2:1.8.7-1build1) ... 85s Selecting previously unselected package libxcb-util1:amd64. 85s Preparing to unpack .../059-libxcb-util1_0.4.0-1build3_amd64.deb ... 85s Unpacking libxcb-util1:amd64 (0.4.0-1build3) ... 85s Selecting previously unselected package libstartup-notification0:amd64. 85s Preparing to unpack .../060-libstartup-notification0_0.12-6build3_amd64.deb ... 85s Unpacking libstartup-notification0:amd64 (0.12-6build3) ... 85s Selecting previously unselected package libxres1:amd64. 85s Preparing to unpack .../061-libxres1_2%3a1.2.1-1build1_amd64.deb ... 85s Unpacking libxres1:amd64 (2:1.2.1-1build1) ... 85s Selecting previously unselected package libwnck-3-common. 85s Preparing to unpack .../062-libwnck-3-common_43.0-3build4_all.deb ... 85s Unpacking libwnck-3-common (43.0-3build4) ... 85s Selecting previously unselected package libwnck-3-0:amd64. 85s Preparing to unpack .../063-libwnck-3-0_43.0-3build4_amd64.deb ... 85s Unpacking libwnck-3-0:amd64 (43.0-3build4) ... 85s Selecting previously unselected package gir1.2-wnck-3.0:amd64. 85s Preparing to unpack .../064-gir1.2-wnck-3.0_43.0-3build4_amd64.deb ... 85s Unpacking gir1.2-wnck-3.0:amd64 (43.0-3build4) ... 85s Selecting previously unselected package gnome-terminal-data. 85s Preparing to unpack .../065-gnome-terminal-data_3.52.0-1ubuntu2_all.deb ... 85s Unpacking gnome-terminal-data (3.52.0-1ubuntu2) ... 85s Selecting previously unselected package session-migration. 85s Preparing to unpack .../066-session-migration_0.3.9build1_amd64.deb ... 85s Unpacking session-migration (0.3.9build1) ... 85s Selecting previously unselected package gsettings-desktop-schemas. 85s Preparing to unpack .../067-gsettings-desktop-schemas_46.1-0ubuntu1_all.deb ... 85s Unpacking gsettings-desktop-schemas (46.1-0ubuntu1) ... 85s Selecting previously unselected package libhandy-1-0:amd64. 85s Preparing to unpack .../068-libhandy-1-0_1.8.3-1build2_amd64.deb ... 85s Unpacking libhandy-1-0:amd64 (1.8.3-1build2) ... 85s Selecting previously unselected package libvte-2.91-common. 85s Preparing to unpack .../069-libvte-2.91-common_0.76.0-1ubuntu0.1_amd64.deb ... 85s Unpacking libvte-2.91-common (0.76.0-1ubuntu0.1) ... 85s Selecting previously unselected package libvte-2.91-0:amd64. 85s Preparing to unpack .../070-libvte-2.91-0_0.76.0-1ubuntu0.1_amd64.deb ... 85s Unpacking libvte-2.91-0:amd64 (0.76.0-1ubuntu0.1) ... 85s Selecting previously unselected package gnome-terminal. 85s Preparing to unpack .../071-gnome-terminal_3.52.0-1ubuntu2_amd64.deb ... 85s Unpacking gnome-terminal (3.52.0-1ubuntu2) ... 85s Selecting previously unselected package xbitmaps. 85s Preparing to unpack .../072-xbitmaps_1.1.1-2.2_all.deb ... 85s Unpacking xbitmaps (1.1.1-2.2) ... 85s Selecting previously unselected package x11-common. 85s Preparing to unpack .../073-x11-common_1%3a7.7+23ubuntu3_all.deb ... 85s Unpacking x11-common (1:7.7+23ubuntu3) ... 85s Selecting previously unselected package libice6:amd64. 85s Preparing to unpack .../074-libice6_2%3a1.0.10-1build3_amd64.deb ... 85s Unpacking libice6:amd64 (2:1.0.10-1build3) ... 85s Selecting previously unselected package libsm6:amd64. 85s Preparing to unpack .../075-libsm6_2%3a1.2.3-1build3_amd64.deb ... 85s Unpacking libsm6:amd64 (2:1.2.3-1build3) ... 85s Selecting previously unselected package libxt6t64:amd64. 85s Preparing to unpack .../076-libxt6t64_1%3a1.2.1-1.2build1_amd64.deb ... 85s Unpacking libxt6t64:amd64 (1:1.2.1-1.2build1) ... 85s Selecting previously unselected package libxmu6:amd64. 85s Preparing to unpack .../077-libxmu6_2%3a1.1.3-3build2_amd64.deb ... 85s Unpacking libxmu6:amd64 (2:1.1.3-3build2) ... 85s Selecting previously unselected package libxaw7:amd64. 85s Preparing to unpack .../078-libxaw7_2%3a1.0.14-1build2_amd64.deb ... 85s Unpacking libxaw7:amd64 (2:1.0.14-1build2) ... 85s Selecting previously unselected package xterm. 85s Preparing to unpack .../079-xterm_390-1ubuntu3_amd64.deb ... 85s Unpacking xterm (390-1ubuntu3) ... 85s Selecting previously unselected package libwhoopsie-preferences0. 85s Preparing to unpack .../080-libwhoopsie-preferences0_23build3_amd64.deb ... 85s Unpacking libwhoopsie-preferences0 (23build3) ... 85s Selecting previously unselected package libwhoopsie0:amd64. 85s Preparing to unpack .../081-libwhoopsie0_0.2.77build3_amd64.deb ... 85s Unpacking libwhoopsie0:amd64 (0.2.77build3) ... 85s Selecting previously unselected package whoopsie-preferences. 85s Preparing to unpack .../082-whoopsie-preferences_23build3_amd64.deb ... 85s Unpacking whoopsie-preferences (23build3) ... 85s Selecting previously unselected package apport-gtk. 85s Preparing to unpack .../083-apport-gtk_2.28.1-0ubuntu3.8_all.deb ... 85s Unpacking apport-gtk (2.28.1-0ubuntu3.8) ... 85s Selecting previously unselected package libbabeltrace1:amd64. 85s Preparing to unpack .../084-libbabeltrace1_1.5.11-3build3_amd64.deb ... 85s Unpacking libbabeltrace1:amd64 (1.5.11-3build3) ... 85s Selecting previously unselected package libdebuginfod1t64:amd64. 85s Preparing to unpack .../085-libdebuginfod1t64_0.190-1.1ubuntu0.1_amd64.deb ... 85s Unpacking libdebuginfod1t64:amd64 (0.190-1.1ubuntu0.1) ... 85s Selecting previously unselected package libipt2. 85s Preparing to unpack .../086-libipt2_2.0.6-1build1_amd64.deb ... 85s Unpacking libipt2 (2.0.6-1build1) ... 85s Selecting previously unselected package libsource-highlight-common. 85s Preparing to unpack .../087-libsource-highlight-common_3.1.9-4.3build1_all.deb ... 85s Unpacking libsource-highlight-common (3.1.9-4.3build1) ... 85s Selecting previously unselected package libsource-highlight4t64:amd64. 85s Preparing to unpack .../088-libsource-highlight4t64_3.1.9-4.3build1_amd64.deb ... 85s Unpacking libsource-highlight4t64:amd64 (3.1.9-4.3build1) ... 85s Selecting previously unselected package gdb. 85s Preparing to unpack .../089-gdb_15.0.50.20240403-0ubuntu1_amd64.deb ... 85s Unpacking gdb (15.0.50.20240403-0ubuntu1) ... 85s Selecting previously unselected package libc6-dbg:amd64. 85s Preparing to unpack .../090-libc6-dbg_2.39-0ubuntu8.6_amd64.deb ... 85s Unpacking libc6-dbg:amd64 (2.39-0ubuntu8.6) ... 85s Selecting previously unselected package apport-retrace. 85s Preparing to unpack .../091-apport-retrace_2.28.1-0ubuntu3.8_all.deb ... 85s Unpacking apport-retrace (2.28.1-0ubuntu3.8) ... 85s Selecting previously unselected package valgrind. 85s Preparing to unpack .../092-valgrind_1%3a3.22.0-0ubuntu3_amd64.deb ... 85s Unpacking valgrind (1:3.22.0-0ubuntu3) ... 86s Selecting previously unselected package apport-valgrind. 86s Preparing to unpack .../093-apport-valgrind_2.28.1-0ubuntu3.8_all.deb ... 86s Unpacking apport-valgrind (2.28.1-0ubuntu3.8) ... 86s Selecting previously unselected package ca-certificates-java. 86s Preparing to unpack .../094-ca-certificates-java_20240118_all.deb ... 86s Unpacking ca-certificates-java (20240118) ... 86s Selecting previously unselected package gcc-13-base:amd64. 86s Preparing to unpack .../095-gcc-13-base_13.3.0-6ubuntu2~24.04_amd64.deb ... 86s Unpacking gcc-13-base:amd64 (13.3.0-6ubuntu2~24.04) ... 86s Selecting previously unselected package libisl23:amd64. 86s Preparing to unpack .../096-libisl23_0.26-3build1.1_amd64.deb ... 86s Unpacking libisl23:amd64 (0.26-3build1.1) ... 86s Selecting previously unselected package libmpc3:amd64. 86s Preparing to unpack .../097-libmpc3_1.3.1-1build1.1_amd64.deb ... 86s Unpacking libmpc3:amd64 (1.3.1-1build1.1) ... 86s Selecting previously unselected package cpp-13-x86-64-linux-gnu. 86s Preparing to unpack .../098-cpp-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04_amd64.deb ... 86s Unpacking cpp-13-x86-64-linux-gnu (13.3.0-6ubuntu2~24.04) ... 86s Selecting previously unselected package cpp-13. 86s Preparing to unpack .../099-cpp-13_13.3.0-6ubuntu2~24.04_amd64.deb ... 86s Unpacking cpp-13 (13.3.0-6ubuntu2~24.04) ... 86s Selecting previously unselected package cpp-x86-64-linux-gnu. 86s Preparing to unpack .../100-cpp-x86-64-linux-gnu_4%3a13.2.0-7ubuntu1_amd64.deb ... 86s Unpacking cpp-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... 86s Selecting previously unselected package cpp. 86s Preparing to unpack .../101-cpp_4%3a13.2.0-7ubuntu1_amd64.deb ... 86s Unpacking cpp (4:13.2.0-7ubuntu1) ... 86s Selecting previously unselected package java-common. 86s Preparing to unpack .../102-java-common_0.75+exp1_all.deb ... 86s Unpacking java-common (0.75+exp1) ... 86s Selecting previously unselected package libpcsclite1:amd64. 86s Preparing to unpack .../103-libpcsclite1_2.0.3-1build1_amd64.deb ... 86s Unpacking libpcsclite1:amd64 (2.0.3-1build1) ... 86s Selecting previously unselected package openjdk-21-jre-headless:amd64. 86s Preparing to unpack .../104-openjdk-21-jre-headless_21.0.8+9~us1-0ubuntu1~24.04.1_amd64.deb ... 86s Unpacking openjdk-21-jre-headless:amd64 (21.0.8+9~us1-0ubuntu1~24.04.1) ... 87s Selecting previously unselected package default-jre-headless. 87s Preparing to unpack .../105-default-jre-headless_2%3a1.21-75+exp1_amd64.deb ... 87s Unpacking default-jre-headless (2:1.21-75+exp1) ... 87s Selecting previously unselected package openjdk-21-jdk-headless:amd64. 87s Preparing to unpack .../106-openjdk-21-jdk-headless_21.0.8+9~us1-0ubuntu1~24.04.1_amd64.deb ... 87s Unpacking openjdk-21-jdk-headless:amd64 (21.0.8+9~us1-0ubuntu1~24.04.1) ... 87s Selecting previously unselected package default-jdk-headless. 87s Preparing to unpack .../107-default-jdk-headless_2%3a1.21-75+exp1_amd64.deb ... 87s Unpacking default-jdk-headless (2:1.21-75+exp1) ... 87s Selecting previously unselected package emacsen-common. 87s Preparing to unpack .../108-emacsen-common_3.0.5_all.deb ... 87s Unpacking emacsen-common (3.0.5) ... 87s Selecting previously unselected package dictionaries-common. 87s Preparing to unpack .../109-dictionaries-common_1.29.7_all.deb ... 87s Adding 'diversion of /usr/share/dict/words to /usr/share/dict/words.pre-dictionaries-common by dictionaries-common' 87s Unpacking dictionaries-common (1.29.7) ... 87s Selecting previously unselected package libcc1-0:amd64. 87s Preparing to unpack .../110-libcc1-0_14.2.0-4ubuntu2~24.04_amd64.deb ... 87s Unpacking libcc1-0:amd64 (14.2.0-4ubuntu2~24.04) ... 87s Selecting previously unselected package libgomp1:amd64. 87s Preparing to unpack .../111-libgomp1_14.2.0-4ubuntu2~24.04_amd64.deb ... 87s Unpacking libgomp1:amd64 (14.2.0-4ubuntu2~24.04) ... 87s Selecting previously unselected package libitm1:amd64. 87s Preparing to unpack .../112-libitm1_14.2.0-4ubuntu2~24.04_amd64.deb ... 87s Unpacking libitm1:amd64 (14.2.0-4ubuntu2~24.04) ... 87s Selecting previously unselected package libatomic1:amd64. 87s Preparing to unpack .../113-libatomic1_14.2.0-4ubuntu2~24.04_amd64.deb ... 87s Unpacking libatomic1:amd64 (14.2.0-4ubuntu2~24.04) ... 87s Selecting previously unselected package libasan8:amd64. 87s Preparing to unpack .../114-libasan8_14.2.0-4ubuntu2~24.04_amd64.deb ... 87s Unpacking libasan8:amd64 (14.2.0-4ubuntu2~24.04) ... 87s Selecting previously unselected package liblsan0:amd64. 87s Preparing to unpack .../115-liblsan0_14.2.0-4ubuntu2~24.04_amd64.deb ... 87s Unpacking liblsan0:amd64 (14.2.0-4ubuntu2~24.04) ... 87s Selecting previously unselected package libtsan2:amd64. 87s Preparing to unpack .../116-libtsan2_14.2.0-4ubuntu2~24.04_amd64.deb ... 87s Unpacking libtsan2:amd64 (14.2.0-4ubuntu2~24.04) ... 87s Selecting previously unselected package libubsan1:amd64. 87s Preparing to unpack .../117-libubsan1_14.2.0-4ubuntu2~24.04_amd64.deb ... 87s Unpacking libubsan1:amd64 (14.2.0-4ubuntu2~24.04) ... 87s Selecting previously unselected package libhwasan0:amd64. 87s Preparing to unpack .../118-libhwasan0_14.2.0-4ubuntu2~24.04_amd64.deb ... 87s Unpacking libhwasan0:amd64 (14.2.0-4ubuntu2~24.04) ... 87s Selecting previously unselected package libquadmath0:amd64. 87s Preparing to unpack .../119-libquadmath0_14.2.0-4ubuntu2~24.04_amd64.deb ... 87s Unpacking libquadmath0:amd64 (14.2.0-4ubuntu2~24.04) ... 88s Selecting previously unselected package libgcc-13-dev:amd64. 88s Preparing to unpack .../120-libgcc-13-dev_13.3.0-6ubuntu2~24.04_amd64.deb ... 88s Unpacking libgcc-13-dev:amd64 (13.3.0-6ubuntu2~24.04) ... 88s Selecting previously unselected package gcc-13-x86-64-linux-gnu. 88s Preparing to unpack .../121-gcc-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04_amd64.deb ... 88s Unpacking gcc-13-x86-64-linux-gnu (13.3.0-6ubuntu2~24.04) ... 88s Selecting previously unselected package gcc-13. 88s Preparing to unpack .../122-gcc-13_13.3.0-6ubuntu2~24.04_amd64.deb ... 88s Unpacking gcc-13 (13.3.0-6ubuntu2~24.04) ... 88s Selecting previously unselected package gcc-x86-64-linux-gnu. 88s Preparing to unpack .../123-gcc-x86-64-linux-gnu_4%3a13.2.0-7ubuntu1_amd64.deb ... 88s Unpacking gcc-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... 88s Selecting previously unselected package gcc. 88s Preparing to unpack .../124-gcc_4%3a13.2.0-7ubuntu1_amd64.deb ... 88s Unpacking gcc (4:13.2.0-7ubuntu1) ... 88s Selecting previously unselected package python3-iniconfig. 88s Preparing to unpack .../125-python3-iniconfig_1.1.1-2_all.deb ... 88s Unpacking python3-iniconfig (1.1.1-2) ... 88s Selecting previously unselected package python3-packaging. 88s Preparing to unpack .../126-python3-packaging_24.0-1_all.deb ... 88s Unpacking python3-packaging (24.0-1) ... 88s Selecting previously unselected package python3-pluggy. 88s Preparing to unpack .../127-python3-pluggy_1.4.0-1_all.deb ... 88s Unpacking python3-pluggy (1.4.0-1) ... 88s Selecting previously unselected package python3-psutil. 88s Preparing to unpack .../128-python3-psutil_5.9.8-2build2_amd64.deb ... 88s Unpacking python3-psutil (5.9.8-2build2) ... 88s Selecting previously unselected package python3-pytest. 88s Preparing to unpack .../129-python3-pytest_7.4.4-1_all.deb ... 88s Unpacking python3-pytest (7.4.4-1) ... 88s Selecting previously unselected package python3-zstandard. 88s Preparing to unpack .../130-python3-zstandard_0.22.0-1build1_amd64.deb ... 88s Unpacking python3-zstandard (0.22.0-1build1) ... 88s Setting up libgraphite2-3:amd64 (1.3.14-2build1) ... 88s Setting up liblcms2-2:amd64 (2.14-2build1) ... 88s Setting up python3-iniconfig (1.1.1-2) ... 88s Setting up libpixman-1-0:amd64 (0.42.2-1build1) ... 88s Setting up libx11-xcb1:amd64 (2:1.8.7-1build1) ... 88s Setting up libwhoopsie-preferences0 (23build3) ... 88s Setting up session-migration (0.3.9build1) ... 88s Created symlink /etc/systemd/user/graphical-session-pre.target.wants/session-migration.service → /usr/lib/systemd/user/session-migration.service. 88s Setting up fontconfig (2.15.0-1.1ubuntu2) ... 90s Regenerating fonts cache... done. 90s Setting up libxdamage1:amd64 (1:1.1.6-1build1) ... 90s Setting up hicolor-icon-theme (0.17-2) ... 90s Setting up libxi6:amd64 (2:1.8.1-1build1) ... 90s Setting up java-common (0.75+exp1) ... 90s Setting up libxrender1:amd64 (1:0.9.10-1.1build1) ... 90s Setting up libvte-2.91-common (0.76.0-1ubuntu0.1) ... 90s Setting up libdatrie1:amd64 (0.2.13-3build1) ... 90s Setting up libdebuginfod-common (0.190-1.1ubuntu0.1) ... 90s Setting up libxcb-render0:amd64 (1.15-1ubuntu2) ... 90s Setting up libwnck-3-common (43.0-3build4) ... 90s Setting up libgdk-pixbuf2.0-common (2.42.10+dfsg-3ubuntu3.2) ... 90s Setting up x11-common (1:7.7+23ubuntu3) ... 91s Setting up libxcb-shm0:amd64 (1.15-1ubuntu2) ... 91s Setting up libwhoopsie0:amd64 (0.2.77build3) ... 91s Setting up libgomp1:amd64 (14.2.0-4ubuntu2~24.04) ... 91s Setting up libcairo2:amd64 (1.18.0-3build1) ... 91s Setting up libcolord2:amd64 (1.4.7-1build2) ... 91s Setting up python3-psutil (5.9.8-2build2) ... 91s Setting up gnome-terminal-data (3.52.0-1ubuntu2) ... 91s Setting up libsource-highlight-common (3.1.9-4.3build1) ... 91s Setting up libxcb-util1:amd64 (0.4.0-1build3) ... 91s Setting up libc6-dbg:amd64 (2.39-0ubuntu8.6) ... 91s Setting up libdconf1:amd64 (0.40.0-4ubuntu0.1) ... 91s Setting up python3-zstandard (0.22.0-1build1) ... 91s Setting up python3-packaging (24.0-1) ... 91s Setting up gcc-13-base:amd64 (13.3.0-6ubuntu2~24.04) ... 91s Setting up emacsen-common (3.0.5) ... 91s Setting up libepoxy0:amd64 (1.5.10-1build1) ... 91s Setting up libxfixes3:amd64 (1:6.0.0-2build1) ... 91s Setting up libavahi-common-data:amd64 (0.8-13ubuntu6) ... 91s Setting up libatspi2.0-0t64:amd64 (2.52.0-1build1) ... 91s Setting up libquadmath0:amd64 (14.2.0-4ubuntu2~24.04) ... 91s Setting up libxinerama1:amd64 (2:1.1.4-3build1) ... 91s Setting up libmpc3:amd64 (1.3.1-1build1.1) ... 91s Setting up libatomic1:amd64 (14.2.0-4ubuntu2~24.04) ... 91s Setting up libxrandr2:amd64 (2:1.5.2-2build1) ... 91s Setting up libipt2 (2.0.6-1build1) ... 91s Setting up libpcsclite1:amd64 (2.0.3-1build1) ... 91s Setting up libbabeltrace1:amd64 (1.5.11-3build3) ... 91s Setting up python3-pluggy (1.4.0-1) ... 91s Setting up libubsan1:amd64 (14.2.0-4ubuntu2~24.04) ... 91s Setting up libhwasan0:amd64 (14.2.0-4ubuntu2~24.04) ... 91s Setting up at-spi2-common (2.52.0-1build1) ... 91s Setting up libasan8:amd64 (14.2.0-4ubuntu2~24.04) ... 91s Setting up libharfbuzz0b:amd64 (8.3.0-2build2) ... 91s Setting up libthai-data (0.1.29-2build1) ... 91s Setting up libgdk-pixbuf-2.0-0:amd64 (2.42.10+dfsg-3ubuntu3.2) ... 91s Setting up libcairo-gobject2:amd64 (1.18.0-3build1) ... 91s Setting up libwayland-egl1:amd64 (1.22.0-2.1build1) ... 91s Setting up libtsan2:amd64 (14.2.0-4ubuntu2~24.04) ... 91s Setting up ca-certificates-java (20240118) ... 91s No JRE found. Skipping Java certificates setup. 91s Setting up libisl23:amd64 (0.26-3build1.1) ... 91s Setting up valgrind (1:3.22.0-0ubuntu3) ... 91s Setting up libxcomposite1:amd64 (1:0.4.5-1build3) ... 91s Setting up libcc1-0:amd64 (14.2.0-4ubuntu2~24.04) ... 91s Setting up xbitmaps (1.1.1-2.2) ... 91s Setting up liblsan0:amd64 (14.2.0-4ubuntu2~24.04) ... 91s Setting up libitm1:amd64 (14.2.0-4ubuntu2~24.04) ... 91s Setting up libxres1:amd64 (2:1.2.1-1build1) ... 91s Setting up libstartup-notification0:amd64 (0.12-6build3) ... 91s Setting up libwayland-client0:amd64 (1.22.0-2.1build1) ... 91s Setting up gtk-update-icon-cache (3.24.41-4ubuntu1.3) ... 91s Setting up libdebuginfod1t64:amd64 (0.190-1.1ubuntu0.1) ... 91s Setting up libice6:amd64 (2:1.0.10-1build3) ... 91s Setting up libxft2:amd64 (2.3.6-1build1) ... 91s Setting up gir1.2-freedesktop:amd64 (1.80.1-1) ... 91s Setting up libatk1.0-0t64:amd64 (2.52.0-1build1) ... 91s Setting up openjdk-21-jre-headless:amd64 (21.0.8+9~us1-0ubuntu1~24.04.1) ... 91s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/java to provide /usr/bin/java (java) in auto mode 91s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jpackage to provide /usr/bin/jpackage (jpackage) in auto mode 91s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode 91s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode 91s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode 91s Setting up gir1.2-gdkpixbuf-2.0:amd64 (2.42.10+dfsg-3ubuntu3.2) ... 91s Setting up dictionaries-common (1.29.7) ... 91s Setting up gir1.2-atk-1.0:amd64 (2.52.0-1build1) ... 91s Setting up cpp-13-x86-64-linux-gnu (13.3.0-6ubuntu2~24.04) ... 91s Setting up python3-pytest (7.4.4-1) ... 92s Setting up libxcursor1:amd64 (1:1.2.1-1build1) ... 92s Setting up libavahi-common3:amd64 (0.8-13ubuntu6) ... 92s Setting up apport-valgrind (2.28.1-0ubuntu3.8) ... 92s Setting up dconf-service (0.40.0-4ubuntu0.1) ... 92s Setting up libsource-highlight4t64:amd64 (3.1.9-4.3build1) ... 92s Setting up whoopsie-preferences (23build3) ... 92s Setting up libharfbuzz-gobject0:amd64 (8.3.0-2build2) ... 92s Setting up gir1.2-harfbuzz-0.0:amd64 (8.3.0-2build2) ... 92s Setting up libthai0:amd64 (0.1.29-2build1) ... 92s Setting up gdb (15.0.50.20240403-0ubuntu1) ... 92s Setting up libgcc-13-dev:amd64 (13.3.0-6ubuntu2~24.04) ... 92s Setting up libwayland-cursor0:amd64 (1.22.0-2.1build1) ... 92s Setting up libsm6:amd64 (2:1.2.3-1build3) ... 92s Setting up libavahi-client3:amd64 (0.8-13ubuntu6) ... 92s Setting up cpp-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... 92s Setting up libatk-bridge2.0-0t64:amd64 (2.52.0-1build1) ... 92s Setting up cpp-13 (13.3.0-6ubuntu2~24.04) ... 92s Setting up dconf-gsettings-backend:amd64 (0.40.0-4ubuntu0.1) ... 92s Setting up gcc-13-x86-64-linux-gnu (13.3.0-6ubuntu2~24.04) ... 92s Setting up libpango-1.0-0:amd64 (1.52.1+ds-1build1) ... 92s Setting up apport-retrace (2.28.1-0ubuntu3.8) ... 92s Setting up libxt6t64:amd64 (1:1.2.1-1.2build1) ... 92s Setting up gcc-13 (13.3.0-6ubuntu2~24.04) ... 92s Setting up cpp (4:13.2.0-7ubuntu1) ... 92s Setting up libpangoft2-1.0-0:amd64 (1.52.1+ds-1build1) ... 92s Setting up libcups2t64:amd64 (2.4.7-1.2ubuntu7.4) ... 92s Setting up libgtk-3-common (3.24.41-4ubuntu1.3) ... 92s Setting up libpangocairo-1.0-0:amd64 (1.52.1+ds-1build1) ... 92s Setting up gsettings-desktop-schemas (46.1-0ubuntu1) ... 92s Setting up libxmu6:amd64 (2:1.1.3-3build2) ... 92s Setting up libpangoxft-1.0-0:amd64 (1.52.1+ds-1build1) ... 92s Setting up gcc-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... 92s Setting up libxaw7:amd64 (2:1.0.14-1build2) ... 92s Setting up gcc (4:13.2.0-7ubuntu1) ... 92s Setting up gir1.2-pango-1.0:amd64 (1.52.1+ds-1build1) ... 92s Setting up xterm (390-1ubuntu3) ... 92s update-alternatives: using /usr/bin/xterm to provide /usr/bin/x-terminal-emulator (x-terminal-emulator) in auto mode 92s update-alternatives: using /usr/bin/lxterm to provide /usr/bin/x-terminal-emulator (x-terminal-emulator) in auto mode 92s Setting up adwaita-icon-theme (46.0-1) ... 92s update-alternatives: using /usr/share/icons/Adwaita/cursor.theme to provide /usr/share/icons/default/index.theme (x-cursor-theme) in auto mode 92s Setting up humanity-icon-theme (0.6.16) ... 92s Setting up ubuntu-mono (24.04-0ubuntu1) ... 92s Processing triggers for man-db (2.12.0-4build2) ... 93s Processing triggers for libglib2.0-0t64:amd64 (2.80.0-6ubuntu3.5) ... 93s Processing triggers for dbus (1.14.10-4ubuntu4.1) ... 93s Setting up libgtk-3-0t64:amd64 (3.24.41-4ubuntu1.3) ... 93s Setting up libwnck-3-0:amd64 (43.0-3build4) ... 93s Setting up libhandy-1-0:amd64 (1.8.3-1build2) ... 93s Processing triggers for libc-bin (2.39-0ubuntu8.6) ... 93s Setting up gir1.2-gtk-3.0:amd64 (3.24.41-4ubuntu1.3) ... 93s Setting up libvte-2.91-0:amd64 (0.76.0-1ubuntu0.1) ... 93s Setting up gir1.2-wnck-3.0:amd64 (43.0-3build4) ... 93s Setting up apport-gtk (2.28.1-0ubuntu3.8) ... 93s Setting up gnome-terminal (3.52.0-1ubuntu2) ... 93s update-alternatives: using /usr/bin/gnome-terminal.wrapper to provide /usr/bin/x-terminal-emulator (x-terminal-emulator) in auto mode 93s Processing triggers for ca-certificates-java (20240118) ... 93s Adding debian:ACCVRAIZ1.pem 93s Adding debian:AC_RAIZ_FNMT-RCM.pem 93s Adding debian:AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.pem 93s Adding debian:ANF_Secure_Server_Root_CA.pem 93s Adding debian:Actalis_Authentication_Root_CA.pem 93s Adding debian:AffirmTrust_Commercial.pem 93s Adding debian:AffirmTrust_Networking.pem 93s Adding debian:AffirmTrust_Premium.pem 93s Adding debian:AffirmTrust_Premium_ECC.pem 93s Adding debian:Amazon_Root_CA_1.pem 93s Adding debian:Amazon_Root_CA_2.pem 93s Adding debian:Amazon_Root_CA_3.pem 93s Adding debian:Amazon_Root_CA_4.pem 93s Adding debian:Atos_TrustedRoot_2011.pem 93s Adding debian:Atos_TrustedRoot_Root_CA_ECC_TLS_2021.pem 93s Adding debian:Atos_TrustedRoot_Root_CA_RSA_TLS_2021.pem 93s Adding debian:Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.pem 93s Adding debian:BJCA_Global_Root_CA1.pem 93s Adding debian:BJCA_Global_Root_CA2.pem 93s Adding debian:Baltimore_CyberTrust_Root.pem 93s Adding debian:Buypass_Class_2_Root_CA.pem 93s Adding debian:Buypass_Class_3_Root_CA.pem 93s Adding debian:CA_Disig_Root_R2.pem 93s Adding debian:CFCA_EV_ROOT.pem 93s Adding debian:COMODO_Certification_Authority.pem 93s Adding debian:COMODO_ECC_Certification_Authority.pem 93s Adding debian:COMODO_RSA_Certification_Authority.pem 93s Adding debian:Certainly_Root_E1.pem 93s Adding debian:Certainly_Root_R1.pem 93s Adding debian:Certigna.pem 93s Adding debian:Certigna_Root_CA.pem 93s Adding debian:Certum_EC-384_CA.pem 93s Adding debian:Certum_Trusted_Network_CA.pem 93s Adding debian:Certum_Trusted_Network_CA_2.pem 93s Adding debian:Certum_Trusted_Root_CA.pem 93s Adding debian:CommScope_Public_Trust_ECC_Root-01.pem 93s Adding debian:CommScope_Public_Trust_ECC_Root-02.pem 93s Adding debian:CommScope_Public_Trust_RSA_Root-01.pem 93s Adding debian:CommScope_Public_Trust_RSA_Root-02.pem 93s Adding debian:Comodo_AAA_Services_root.pem 93s Adding debian:D-TRUST_BR_Root_CA_1_2020.pem 93s Adding debian:D-TRUST_EV_Root_CA_1_2020.pem 93s Adding debian:D-TRUST_Root_Class_3_CA_2_2009.pem 93s Adding debian:D-TRUST_Root_Class_3_CA_2_EV_2009.pem 93s Adding debian:DigiCert_Assured_ID_Root_CA.pem 93s Adding debian:DigiCert_Assured_ID_Root_G2.pem 93s Adding debian:DigiCert_Assured_ID_Root_G3.pem 93s Adding debian:DigiCert_Global_Root_CA.pem 93s Adding debian:DigiCert_Global_Root_G2.pem 93s Adding debian:DigiCert_Global_Root_G3.pem 93s Adding debian:DigiCert_High_Assurance_EV_Root_CA.pem 93s Adding debian:DigiCert_TLS_ECC_P384_Root_G5.pem 93s Adding debian:DigiCert_TLS_RSA4096_Root_G5.pem 93s Adding debian:DigiCert_Trusted_Root_G4.pem 93s Adding debian:Entrust.net_Premium_2048_Secure_Server_CA.pem 93s Adding debian:Entrust_Root_Certification_Authority.pem 93s Adding debian:Entrust_Root_Certification_Authority_-_EC1.pem 93s Adding debian:Entrust_Root_Certification_Authority_-_G2.pem 93s Adding debian:Entrust_Root_Certification_Authority_-_G4.pem 93s Adding debian:GDCA_TrustAUTH_R5_ROOT.pem 93s Adding debian:GLOBALTRUST_2020.pem 93s Adding debian:GTS_Root_R1.pem 93s Adding debian:GTS_Root_R2.pem 93s Adding debian:GTS_Root_R3.pem 93s Adding debian:GTS_Root_R4.pem 93s Adding debian:GlobalSign_ECC_Root_CA_-_R4.pem 93s Adding debian:GlobalSign_ECC_Root_CA_-_R5.pem 93s Adding debian:GlobalSign_Root_CA.pem 93s Adding debian:GlobalSign_Root_CA_-_R3.pem 93s Adding debian:GlobalSign_Root_CA_-_R6.pem 93s Adding debian:GlobalSign_Root_E46.pem 93s Adding debian:GlobalSign_Root_R46.pem 93s Adding debian:Go_Daddy_Class_2_CA.pem 93s Adding debian:Go_Daddy_Root_Certificate_Authority_-_G2.pem 93s Adding debian:HARICA_TLS_ECC_Root_CA_2021.pem 93s Adding debian:HARICA_TLS_RSA_Root_CA_2021.pem 93s Adding debian:Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.pem 93s Adding debian:Hellenic_Academic_and_Research_Institutions_RootCA_2015.pem 93s Adding debian:HiPKI_Root_CA_-_G1.pem 93s Adding debian:Hongkong_Post_Root_CA_3.pem 93s Adding debian:ISRG_Root_X1.pem 93s Adding debian:ISRG_Root_X2.pem 93s Adding debian:IdenTrust_Commercial_Root_CA_1.pem 93s Adding debian:IdenTrust_Public_Sector_Root_CA_1.pem 93s Adding debian:Izenpe.com.pem 93s Adding debian:Microsec_e-Szigno_Root_CA_2009.pem 93s Adding debian:Microsoft_ECC_Root_Certificate_Authority_2017.pem 93s Adding debian:Microsoft_RSA_Root_Certificate_Authority_2017.pem 93s Adding debian:NAVER_Global_Root_Certification_Authority.pem 93s Adding debian:NetLock_Arany_=Class_Gold=_Főtanúsítvány.pem 93s Adding debian:OISTE_WISeKey_Global_Root_GB_CA.pem 93s Adding debian:OISTE_WISeKey_Global_Root_GC_CA.pem 93s Adding debian:QuoVadis_Root_CA_1_G3.pem 93s Adding debian:QuoVadis_Root_CA_2.pem 93s Adding debian:QuoVadis_Root_CA_2_G3.pem 93s Adding debian:QuoVadis_Root_CA_3.pem 93s Adding debian:QuoVadis_Root_CA_3_G3.pem 93s Adding debian:SSL.com_EV_Root_Certification_Authority_ECC.pem 93s Adding debian:SSL.com_EV_Root_Certification_Authority_RSA_R2.pem 93s Adding debian:SSL.com_Root_Certification_Authority_ECC.pem 93s Adding debian:SSL.com_Root_Certification_Authority_RSA.pem 93s Adding debian:SSL.com_TLS_ECC_Root_CA_2022.pem 93s Adding debian:SSL.com_TLS_RSA_Root_CA_2022.pem 93s Adding debian:SZAFIR_ROOT_CA2.pem 93s Adding debian:Sectigo_Public_Server_Authentication_Root_E46.pem 93s Adding debian:Sectigo_Public_Server_Authentication_Root_R46.pem 93s Adding debian:SecureSign_RootCA11.pem 93s Adding debian:SecureTrust_CA.pem 93s Adding debian:Secure_Global_CA.pem 93s Adding debian:Security_Communication_ECC_RootCA1.pem 93s Adding debian:Security_Communication_RootCA2.pem 93s Adding debian:Security_Communication_RootCA3.pem 93s Adding debian:Security_Communication_Root_CA.pem 93s Adding debian:Starfield_Class_2_CA.pem 93s Adding debian:Starfield_Root_Certificate_Authority_-_G2.pem 93s Adding debian:Starfield_Services_Root_Certificate_Authority_-_G2.pem 93s Adding debian:SwissSign_Gold_CA_-_G2.pem 93s Adding debian:SwissSign_Silver_CA_-_G2.pem 93s Adding debian:T-TeleSec_GlobalRoot_Class_2.pem 93s Adding debian:T-TeleSec_GlobalRoot_Class_3.pem 93s Adding debian:TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.pem 93s Adding debian:TWCA_Global_Root_CA.pem 93s Adding debian:TWCA_Root_Certification_Authority.pem 93s Adding debian:TeliaSonera_Root_CA_v1.pem 93s Adding debian:Telia_Root_CA_v2.pem 93s Adding debian:TrustAsia_Global_Root_CA_G3.pem 93s Adding debian:TrustAsia_Global_Root_CA_G4.pem 93s Adding debian:Trustwave_Global_Certification_Authority.pem 93s Adding debian:Trustwave_Global_ECC_P256_Certification_Authority.pem 93s Adding debian:Trustwave_Global_ECC_P384_Certification_Authority.pem 93s Adding debian:TunTrust_Root_CA.pem 93s Adding debian:UCA_Extended_Validation_Root.pem 93s Adding debian:UCA_Global_G2_Root.pem 93s Adding debian:USERTrust_ECC_Certification_Authority.pem 93s Adding debian:USERTrust_RSA_Certification_Authority.pem 93s Adding debian:XRamp_Global_CA_Root.pem 93s Adding debian:certSIGN_ROOT_CA.pem 93s Adding debian:certSIGN_Root_CA_G2.pem 93s Adding debian:e-Szigno_Root_CA_2017.pem 93s Adding debian:ePKI_Root_Certification_Authority.pem 93s Adding debian:emSign_ECC_Root_CA_-_C3.pem 93s Adding debian:emSign_ECC_Root_CA_-_G3.pem 93s Adding debian:emSign_Root_CA_-_C1.pem 93s Adding debian:emSign_Root_CA_-_G1.pem 93s Adding debian:vTrus_ECC_Root_CA.pem 93s Adding debian:vTrus_Root_CA.pem 93s done. 93s Setting up default-jre-headless (2:1.21-75+exp1) ... 93s Setting up openjdk-21-jdk-headless:amd64 (21.0.8+9~us1-0ubuntu1~24.04.1) ... 93s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jar to provide /usr/bin/jar (jar) in auto mode 93s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jarsigner to provide /usr/bin/jarsigner (jarsigner) in auto mode 93s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/javac to provide /usr/bin/javac (javac) in auto mode 93s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/javadoc to provide /usr/bin/javadoc (javadoc) in auto mode 93s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/javap to provide /usr/bin/javap (javap) in auto mode 93s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jcmd to provide /usr/bin/jcmd (jcmd) in auto mode 93s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jdb to provide /usr/bin/jdb (jdb) in auto mode 93s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jdeprscan to provide /usr/bin/jdeprscan (jdeprscan) in auto mode 93s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jdeps to provide /usr/bin/jdeps (jdeps) in auto mode 93s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jfr to provide /usr/bin/jfr (jfr) in auto mode 93s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jimage to provide /usr/bin/jimage (jimage) in auto mode 93s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jinfo to provide /usr/bin/jinfo (jinfo) in auto mode 93s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jlink to provide /usr/bin/jlink (jlink) in auto mode 93s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jmap to provide /usr/bin/jmap (jmap) in auto mode 93s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jmod to provide /usr/bin/jmod (jmod) in auto mode 93s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jps to provide /usr/bin/jps (jps) in auto mode 93s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jrunscript to provide /usr/bin/jrunscript (jrunscript) in auto mode 93s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jshell to provide /usr/bin/jshell (jshell) in auto mode 93s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jstack to provide /usr/bin/jstack (jstack) in auto mode 93s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jstat to provide /usr/bin/jstat (jstat) in auto mode 93s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jstatd to provide /usr/bin/jstatd (jstatd) in auto mode 93s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jwebserver to provide /usr/bin/jwebserver (jwebserver) in auto mode 93s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/serialver to provide /usr/bin/serialver (serialver) in auto mode 93s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jhsdb to provide /usr/bin/jhsdb (jhsdb) in auto mode 93s Setting up default-jdk-headless (2:1.21-75+exp1) ... 93s Processing triggers for dictionaries-common (1.29.7) ... 94s Processing triggers for libc-bin (2.39-0ubuntu8.6) ... 95s autopkgtest [23:01:41]: test unit-and-integration-tests: cp -r tests "$AUTOPKGTEST_TMP" && cd "$AUTOPKGTEST_TMP" && python3 -m pytest -ra -v tests/unit/ tests/integration/ 95s autopkgtest [23:01:41]: test unit-and-integration-tests: [----------------------- 95s ============================= test session starts ============================== 95s platform linux -- Python 3.12.3, pytest-7.4.4, pluggy-1.4.0 -- /usr/bin/python3 95s cachedir: .pytest_cache 95s rootdir: /tmp/autopkgtest.4KsJyk/autopkgtest_tmp 96s collecting ... collected 528 items 96s 96s tests/unit/test_crashdb.py::T::test_accepts_default PASSED [ 0%] 96s tests/unit/test_crashdb.py::T::test_accepts_problem_types PASSED [ 0%] 96s tests/unit/test_crashdb.py::T::test_change_master_id PASSED [ 0%] 96s tests/unit/test_crashdb.py::T::test_check_duplicate PASSED [ 0%] 96s tests/unit/test_crashdb.py::T::test_check_duplicate_custom_signature PASSED [ 0%] 96s tests/unit/test_crashdb.py::T::test_check_duplicate_multiple_masters PASSED [ 1%] 96s tests/unit/test_crashdb.py::T::test_check_duplicate_multiple_regressions PASSED [ 1%] 96s tests/unit/test_crashdb.py::T::test_check_duplicate_report_arg PASSED [ 1%] 96s tests/unit/test_crashdb.py::T::test_check_duplicate_utf8 PASSED [ 1%] 96s tests/unit/test_crashdb.py::T::test_db_corruption PASSED [ 1%] 96s tests/unit/test_crashdb.py::T::test_duplicate_db_fixed PASSED [ 2%] 96s tests/unit/test_crashdb.py::T::test_duplicate_db_publish_long_sigs PASSED [ 2%] 96s tests/unit/test_crashdb.py::T::test_duplicate_db_remove PASSED [ 2%] 96s tests/unit/test_crashdb.py::T::test_dynamic_crashdb_conf PASSED [ 2%] 96s tests/unit/test_crashdb.py::T::test_get_affected_packages PASSED [ 2%] 96s tests/unit/test_crashdb.py::T::test_get_distro_release PASSED [ 3%] 96s tests/unit/test_crashdb.py::T::test_known_address_sig PASSED [ 3%] 96s tests/unit/test_crashdb.py::T::test_mark_regression PASSED [ 3%] 96s tests/unit/test_crashdb.py::T::test_no_sample_data PASSED [ 3%] 96s tests/unit/test_crashdb.py::T::test_retrace_markers PASSED [ 3%] 96s tests/unit/test_crashdb.py::T::test_status PASSED [ 3%] 96s tests/unit/test_crashdb.py::T::test_submit PASSED [ 4%] 96s tests/unit/test_crashdb.py::T::test_update PASSED [ 4%] 96s tests/unit/test_crashdb.py::T::test_update_filter PASSED [ 4%] 96s tests/unit/test_crashdb.py::T::test_update_traces PASSED [ 4%] 96s tests/unit/test_deprecation.py::TestDeprecation::test_unicode_gettext PASSED [ 4%] 96s tests/unit/test_fileutils.py::T::test_find_package_desktopfile_deleted PASSED [ 5%] 96s tests/unit/test_fileutils.py::T::test_get_core_path_missing_timestamp PASSED [ 5%] 96s tests/unit/test_fileutils.py::T::test_get_core_path_proc_pid_fd PASSED [ 5%] 96s tests/unit/test_fileutils.py::T::test_get_dbus_socket PASSED [ 5%] 96s tests/unit/test_fileutils.py::T::test_get_login_defs PASSED [ 5%] 96s tests/unit/test_fileutils.py::T::test_get_login_defs_missing PASSED [ 6%] 96s tests/unit/test_fileutils.py::T::test_get_process_environ PASSED [ 6%] 96s tests/unit/test_fileutils.py::T::test_get_process_environ_empty PASSED [ 6%] 96s tests/unit/test_fileutils.py::T::test_get_process_environ_malformed PASSED [ 6%] 96s tests/unit/test_fileutils.py::T::test_get_recent_crashes PASSED [ 6%] 96s tests/unit/test_fileutils.py::T::test_get_starttime PASSED [ 7%] 96s tests/unit/test_fileutils.py::T::test_get_sys_gid_max PASSED [ 7%] 96s tests/unit/test_fileutils.py::T::test_get_sys_gid_max_default PASSED [ 7%] 96s tests/unit/test_fileutils.py::T::test_get_sys_uid_max PASSED [ 7%] 96s tests/unit/test_fileutils.py::T::test_get_sys_uid_max_default PASSED [ 7%] 96s tests/unit/test_fileutils.py::T::test_get_uid_and_gid PASSED [ 7%] 96s tests/unit/test_fileutils.py::T::test_likely_packaged PASSED [ 8%] 96s tests/unit/test_helper.py::TestTestHelper::test_get_init_systemd PASSED [ 8%] 96s tests/unit/test_helper.py::TestTestHelper::test_wait_for_process_to_appear PASSED [ 8%] 96s tests/unit/test_helper.py::TestTestHelper::test_wait_for_process_to_appear_multiple PASSED [ 8%] 96s tests/unit/test_helper.py::TestTestHelper::test_wait_for_process_to_appear_timeout PASSED [ 8%] 96s tests/unit/test_helper.py::TestTestHelper::test_wait_for_sleeping_state PASSED [ 9%] 96s tests/unit/test_helper.py::TestTestHelper::test_wait_for_sleeping_state_timeout PASSED [ 9%] 96s tests/unit/test_helper.py::TestTestHelper::test_wrap_object_with_statement PASSED [ 9%] 96s tests/unit/test_hooks_image.py::TestGeneralHookImage::test_add_info PASSED [ 9%] 96s tests/unit/test_hooks_image.py::TestGeneralHookImage::test_add_info_empty_build_info PASSED [ 9%] 96s tests/unit/test_hooks_image.py::TestGeneralHookImage::test_add_info_unknown_field PASSED [ 10%] 96s tests/unit/test_hooks_image.py::TestGeneralHookImage::test_no_cloud_build_info PASSED [ 10%] 96s tests/unit/test_hooks_wayland_session.py::TestGeneralHookWaylandSession::test_is_no_wayland_session PASSED [ 10%] 96s tests/unit/test_hooks_wayland_session.py::TestGeneralHookWaylandSession::test_is_wayland_session PASSED [ 10%] 96s tests/unit/test_hookutils.py::TestHookutils::test_attach_dmesg PASSED [ 10%] 96s tests/unit/test_hookutils.py::TestHookutils::test_attach_dmi PASSED [ 10%] 96s tests/unit/test_hookutils.py::TestHookutils::test_attach_journal_errors_with_date PASSED [ 11%] 96s tests/unit/test_hookutils.py::TestHookutils::test_attach_journal_errors_without_date PASSED [ 11%] 96s tests/unit/test_hookutils.py::TestHookutils::test_deprecated_upstart_functions PASSED [ 11%] 96s tests/unit/test_hookutils.py::TestHookutils::test_dmesg_overwrite PASSED [ 11%] 96s tests/unit/test_hookutils.py::TestHookutils::test_path_to_key PASSED [ 11%] 96s tests/unit/test_hookutils.py::TestHookutils::test_recent_syslog_journald_cmd PASSED [ 12%] 96s tests/unit/test_hookutils.py::TestHookutils::test_recent_syslog_long_process PASSED [ 12%] 96s tests/unit/test_hookutils.py::TestHookutils::test_recent_syslog_race_condition PASSED [ 12%] 96s tests/unit/test_packaging_apt_dpkg.py::TestPackagingAptDpkg::test_is_distro_package_no_candidate PASSED [ 12%] 96s tests/unit/test_packaging_apt_dpkg.py::TestPackagingAptDpkg::test_is_distro_package_no_installed_version PASSED [ 12%] 96s tests/unit/test_packaging_apt_dpkg.py::TestPackagingAptDpkg::test_is_distro_package_ppa PASSED [ 13%] 96s tests/unit/test_packaging_apt_dpkg.py::TestPackagingAptDpkg::test_is_distro_package_system_image PASSED [ 13%] 96s tests/unit/test_packaging_apt_dpkg.py::TestPackagingAptDpkg::test_parse_deb822_sources_extra_lines PASSED [ 13%] 96s tests/unit/test_packaging_apt_dpkg.py::TestPackagingAptDpkg::test_read_mirror_file PASSED [ 13%] 96s tests/unit/test_packaging_impl.py::TestPackagingImpl::test_determine_debian_unstable PASSED [ 13%] 96s tests/unit/test_packaging_impl.py::TestPackagingImpl::test_determine_ubuntu PASSED [ 14%] 96s tests/unit/test_parse_segv.py::TestHookParseSegv::test_add_info_without_segv_reason PASSED [ 14%] 96s tests/unit/test_parse_segv.py::TestHookParseSegv::test_debug PASSED [ 14%] 96s tests/unit/test_parse_segv.py::TestHookParseSegv::test_invalid_00_registers PASSED [ 14%] 96s tests/unit/test_parse_segv.py::TestHookParseSegv::test_invalid_01_disassembly PASSED [ 14%] 96s tests/unit/test_parse_segv.py::TestHookParseSegv::test_invalid_02_maps PASSED [ 14%] 96s tests/unit/test_parse_segv.py::TestHookParseSegv::test_ioport_operation PASSED [ 15%] 96s tests/unit/test_parse_segv.py::TestHookParseSegv::test_register_values PASSED [ 15%] 96s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_crackful_disasm PASSED [ 15%] 96s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_dest_missing PASSED [ 15%] 96s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_dest_not_writable PASSED [ 15%] 96s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_dest_null PASSED [ 16%] 96s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_pc_missing PASSED [ 16%] 96s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_pc_null PASSED [ 16%] 96s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_pc_nx_unwritable PASSED [ 16%] 96s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_pc_nx_writable PASSED [ 16%] 96s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_src_missing PASSED [ 17%] 96s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_src_not_readable PASSED [ 17%] 96s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_src_null PASSED [ 17%] 96s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_stack_failure PASSED [ 17%] 96s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_stack_kernel_segfault PASSED [ 17%] 96s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_unknown PASSED [ 17%] 96s tests/unit/test_problem_report.py::T::test_add_tag_drop_duplicates PASSED [ 18%] 96s tests/unit/test_problem_report.py::T::test_add_tags PASSED [ 18%] 96s tests/unit/test_problem_report.py::T::test_basic_operations PASSED [ 18%] 96s tests/unit/test_problem_report.py::T::test_consistency_checks PASSED [ 18%] 96s tests/unit/test_problem_report.py::T::test_ctor_arguments PASSED [ 18%] 96s tests/unit/test_problem_report.py::T::test_get_on_disk_size PASSED [ 19%] 96s tests/unit/test_problem_report.py::T::test_get_timestamp PASSED [ 19%] 96s tests/unit/test_problem_report.py::T::test_get_timestamp_locale_german SKIPPED [ 19%] 96s tests/unit/test_problem_report.py::T::test_get_timestamp_returns_none PASSED [ 19%] 96s tests/unit/test_problem_report.py::T::test_import_dict PASSED [ 19%] 96s tests/unit/test_problem_report.py::T::test_iter PASSED [ 20%] 96s tests/unit/test_problem_report.py::T::test_load PASSED [ 20%] 96s tests/unit/test_problem_report.py::T::test_load_binary_blob PASSED [ 20%] 96s tests/unit/test_problem_report.py::T::test_load_incorrect_padding PASSED [ 20%] 96s tests/unit/test_problem_report.py::T::test_load_invalid_utf8 PASSED [ 20%] 96s tests/unit/test_problem_report.py::T::test_load_key_filter PASSED [ 21%] 96s tests/unit/test_problem_report.py::T::test_load_missing_colon PASSED [ 21%] 96s tests/unit/test_problem_report.py::T::test_load_zstd_compressed_data PASSED [ 21%] 96s tests/unit/test_problem_report.py::T::test_modify PASSED [ 21%] 96s tests/unit/test_problem_report.py::T::test_read_file PASSED [ 21%] 96s tests/unit/test_problem_report.py::T::test_read_file_legacy PASSED [ 21%] 96s tests/unit/test_problem_report.py::T::test_reading_zstd_compressed_value PASSED [ 22%] 96s tests/unit/test_problem_report.py::T::test_sorted_items PASSED [ 22%] 96s tests/unit/test_problem_report.py::T::test_updating PASSED [ 22%] 96s tests/unit/test_problem_report.py::T::test_write PASSED [ 22%] 96s tests/unit/test_problem_report.py::T::test_write_empty_fileobj PASSED [ 22%] 96s tests/unit/test_problem_report.py::T::test_write_fileobj PASSED [ 23%] 96s tests/unit/test_problem_report.py::T::test_write_mime_extra_headers PASSED [ 23%] 96s tests/unit/test_problem_report.py::T::test_write_mime_order PASSED [ 23%] 96s tests/unit/test_problem_report.py::T::test_write_mime_text PASSED [ 23%] 96s tests/unit/test_problem_report.py::T::test_writing_zstd_compressed_value PASSED [ 23%] 96s tests/unit/test_problem_report.py::T::test_zstandard_missing PASSED [ 24%] 96s tests/unit/test_problem_report.py::T::test_zstd_compressed_value_length PASSED [ 24%] 96s tests/unit/test_problem_report.py::TestEntryParser::test_parse PASSED [ 24%] 96s tests/unit/test_problem_report.py::TestEntryParser::test_skip_entries PASSED [ 24%] 96s tests/unit/test_problem_report.py::TestEntryParser::test_skip_last_entry PASSED [ 24%] 96s tests/unit/test_problem_report.py::TestEntryParser::test_skip_partial_entries PASSED [ 25%] 96s tests/unit/test_report.py::T::test_add_hooks_info_invalid_source PASSED [ 25%] 96s tests/unit/test_report.py::T::test_add_snap_contact_info_github PASSED [ 25%] 96s tests/unit/test_report.py::T::test_add_snap_contact_info_launchpad PASSED [ 25%] 96s tests/unit/test_report.py::T::test_add_snap_contact_launchpad_distro PASSED [ 25%] 96s tests/unit/test_report.py::T::test_address_to_offset PASSED [ 25%] 96s tests/unit/test_report.py::T::test_address_to_offset_arm PASSED [ 26%] 96s tests/unit/test_report.py::T::test_crash_signature PASSED [ 26%] 96s tests/unit/test_report.py::T::test_crash_signature_addresses PASSED [ 26%] 96s tests/unit/test_report.py::T::test_gdb_add_info_no_gdb PASSED [ 26%] 96s tests/unit/test_report.py::T::test_gen_stacktrace_top PASSED [ 26%] 96s tests/unit/test_report.py::T::test_has_useful_stacktrace PASSED [ 27%] 96s tests/unit/test_report.py::T::test_missing_uid PASSED [ 27%] 96s tests/unit/test_report.py::T::test_nonascii_data PASSED [ 27%] 96s tests/unit/test_report.py::T::test_report_from_systemd_coredump_default PASSED [ 27%] 96s tests/unit/test_report.py::T::test_report_from_systemd_coredump_missing_crash PASSED [ 27%] 96s tests/unit/test_report.py::T::test_report_from_systemd_coredump_storage_journal PASSED [ 28%] 96s tests/unit/test_report.py::T::test_report_from_systemd_coredump_storage_none PASSED [ 28%] 96s tests/unit/test_report.py::T::test_standard_title PASSED [ 28%] 96s tests/unit/test_report.py::T::test_suspend_resume PASSED [ 28%] 96s tests/unit/test_rethread.py::T::test_exc_raise PASSED [ 28%] 96s tests/unit/test_rethread.py::T::test_exc_raise_complex PASSED [ 28%] 96s tests/unit/test_rethread.py::T::test_exception PASSED [ 29%] 96s tests/unit/test_rethread.py::T::test_no_return_value PASSED [ 29%] 96s tests/unit/test_rethread.py::T::test_return_value PASSED [ 29%] 96s tests/unit/test_sandboxutils.py::TestSandboxutils::test_make_sandbox PASSED [ 29%] 96s tests/unit/test_sandboxutils.py::TestSandboxutils::test_make_sandbox_install_packages_failure PASSED [ 29%] 96s tests/unit/test_sandboxutils.py::TestSandboxutils::test_make_sandbox_with_sandbox_dir PASSED [ 30%] 96s tests/unit/test_sandboxutils.py::TestSandboxutils::test_move_base_files_first_existing PASSED [ 30%] 96s tests/unit/test_sandboxutils.py::TestSandboxutils::test_move_base_files_first_missing PASSED [ 30%] 96s tests/unit/test_signal_crashes.py::TestApport::test_check_kernel_crash PASSED [ 30%] 96s tests/unit/test_signal_crashes.py::TestApport::test_check_lock_not_writable PASSED [ 30%] 96s tests/unit/test_signal_crashes.py::TestApport::test_check_lock_taken PASSED [ 31%] 96s tests/unit/test_signal_crashes.py::TestApport::test_consistency_checks_before_forwarding PASSED [ 31%] 96s tests/unit/test_signal_crashes.py::TestApport::test_consistency_checks_mismatching_uid PASSED [ 31%] 96s tests/unit/test_signal_crashes.py::TestApport::test_consistency_checks_replaced_process PASSED [ 31%] 96s tests/unit/test_signal_crashes.py::TestApport::test_forward_crash_to_container PASSED [ 31%] 96s tests/unit/test_signal_crashes.py::TestApport::test_init_error_log_is_tty PASSED [ 32%] 96s tests/unit/test_signal_crashes.py::TestApport::test_is_closing_session PASSED [ 32%] 96s tests/unit/test_signal_crashes.py::TestApport::test_is_closing_session_gdbus_failure PASSED [ 32%] 96s tests/unit/test_signal_crashes.py::TestApport::test_is_closing_session_no_determine_socket PASSED [ 32%] 96s tests/unit/test_signal_crashes.py::TestApport::test_is_closing_session_no_environ PASSED [ 32%] 96s tests/unit/test_signal_crashes.py::TestApport::test_is_closing_session_socket_not_exists PASSED [ 32%] 96s tests/unit/test_signal_crashes.py::TestApport::test_main_ignore_watchdog_restart PASSED [ 33%] 96s tests/unit/test_signal_crashes.py::TestApport::test_main_start PASSED [ 33%] 96s tests/unit/test_signal_crashes.py::TestApport::test_main_stop PASSED [ 33%] 96s tests/unit/test_signal_crashes.py::TestApport::test_missing_proc_pid PASSED [ 33%] 96s tests/unit/test_signal_crashes.py::TestApport::test_non_existing_systemd_coredump PASSED [ 33%] 96s tests/unit/test_signal_crashes.py::TestApport::test_parse_arguments PASSED [ 34%] 96s tests/unit/test_signal_crashes.py::TestApport::test_parse_arguments_kernel_without_pidfd PASSED [ 34%] 96s tests/unit/test_signal_crashes.py::TestApport::test_pidfd_getpid_on_stdout PASSED [ 34%] 96s tests/unit/test_signal_crashes.py::TestApport::test_pidfd_getpid_process_gone PASSED [ 34%] 96s tests/unit/test_signal_crashes.py::TestApport::test_proc_pid_has_same_pid PASSED [ 34%] 96s tests/unit/test_signal_crashes.py::TestApport::test_proc_pid_has_same_pid_false PASSED [ 35%] 96s tests/unit/test_signal_crashes.py::TestApport::test_proc_pid_not_exist PASSED [ 35%] 96s tests/unit/test_signal_crashes.py::TestApport::test_process_crash_from_kernel_replaced_process PASSED [ 35%] 96s tests/unit/test_signal_crashes.py::TestApport::test_reading_core_from_journal_log PASSED [ 35%] 96s tests/unit/test_signal_crashes.py::TestApport::test_receive_arguments_via_socket_import_error PASSED [ 35%] 96s tests/unit/test_signal_crashes.py::TestApport::test_receive_arguments_via_socket_invalid_socket PASSED [ 35%] 96s tests/unit/test_signal_crashes.py::TestApport::test_refine_core_ulimit_huge PASSED [ 36%] 96s tests/unit/test_signal_crashes.py::TestApport::test_start PASSED [ 36%] 96s tests/unit/test_signal_crashes.py::TestApport::test_stop PASSED [ 36%] 96s tests/unit/test_signal_crashes.py::TestApport::test_systemd_journal_import_error PASSED [ 36%] 96s tests/unit/test_ui.py::TestUI::test_open_url PASSED [ 36%] 96s tests/unit/test_ui.py::TestUI::test_open_url_webbrowser_fails PASSED [ 37%] 96s tests/unit/test_ui.py::TestUI::test_open_url_webbrowser_fallback PASSED [ 37%] 96s tests/unit/test_user_group.py::TestUserGroup::test_get_process_user_and_group_is_not_root PASSED [ 37%] 96s tests/unit/test_user_group.py::TestUserGroup::test_get_process_user_and_group_is_root PASSED [ 37%] 97s tests/integration/test_apport_checkreports.py::TestApportCheckreports::test_has_no_system_report PASSED [ 37%] 97s tests/integration/test_apport_checkreports.py::TestApportCheckreports::test_has_system_report PASSED [ 38%] 97s tests/integration/test_apport_checkreports.py::TestApportCheckreports::test_has_user_report PASSED [ 38%] 97s tests/integration/test_apport_checkreports.py::TestApportCheckreports::test_no_report PASSED [ 38%] 97s tests/integration/test_apport_unpack.py::TestApportUnpack::test_broken_core_dump PASSED [ 38%] 97s tests/integration/test_apport_unpack.py::TestApportUnpack::test_broken_report PASSED [ 38%] 97s tests/integration/test_apport_unpack.py::TestApportUnpack::test_error PASSED [ 39%] 97s tests/integration/test_apport_unpack.py::TestApportUnpack::test_help PASSED [ 39%] 97s tests/integration/test_apport_unpack.py::TestApportUnpack::test_unpack PASSED [ 39%] 97s tests/integration/test_apport_unpack.py::TestApportUnpack::test_unpack_stdin PASSED [ 39%] 98s tests/integration/test_apport_valgrind.py::TestApportValgrind::test_help_display PASSED [ 39%] 98s tests/integration/test_apport_valgrind.py::TestApportValgrind::test_intentional_mem_leak_detection PASSED [ 39%] 98s tests/integration/test_apport_valgrind.py::TestApportValgrind::test_invalid_args PASSED [ 40%] 99s tests/integration/test_apport_valgrind.py::TestApportValgrind::test_unpackaged_exe PASSED [ 40%] 99s tests/integration/test_apport_valgrind.py::TestApportValgrind::test_valgrind_min_installed PASSED [ 40%] 100s tests/integration/test_apport_valgrind.py::TestApportValgrind::test_vlog_created PASSED [ 40%] 100s tests/integration/test_crash_digger.py::T::test_alternate_crashdb PASSED [ 40%] 100s tests/integration/test_crash_digger.py::T::test_crash_gdb_sandbox PASSED [ 41%] 100s tests/integration/test_crash_digger.py::T::test_crashes PASSED [ 41%] 100s tests/integration/test_crash_digger.py::T::test_crashes_error PASSED [ 41%] 100s tests/integration/test_crash_digger.py::T::test_crashes_transient_error PASSED [ 41%] 100s tests/integration/test_crash_digger.py::T::test_dupcheck PASSED [ 41%] 100s tests/integration/test_crash_digger.py::T::test_publish_db PASSED [ 42%] 100s tests/integration/test_crash_digger.py::T::test_stderr_redirection PASSED [ 42%] 100s tests/integration/test_crashdb_launchpad.py::T::test_1_download SKIPPED [ 42%] 100s tests/integration/test_crashdb_launchpad.py::T::test_2_update_traces SKIPPED [ 42%] 100s tests/integration/test_crashdb_launchpad.py::T::test_can_update SKIPPED [ 42%] 100s tests/integration/test_crashdb_launchpad.py::T::test_download_robustness SKIPPED [ 42%] 100s tests/integration/test_crashdb_launchpad.py::T::test_duplicates SKIPPED [ 43%] 100s tests/integration/test_crashdb_launchpad.py::T::test_escalation SKIPPED [ 43%] 100s tests/integration/test_crashdb_launchpad.py::T::test_get_affected_packages SKIPPED [ 43%] 100s tests/integration/test_crashdb_launchpad.py::T::test_get_comment_url SKIPPED [ 43%] 100s tests/integration/test_crashdb_launchpad.py::T::test_get_distro_release SKIPPED [ 43%] 100s tests/integration/test_crashdb_launchpad.py::T::test_get_fixed_version SKIPPED [ 44%] 100s tests/integration/test_crashdb_launchpad.py::T::test_is_reporter SKIPPED [ 44%] 100s tests/integration/test_crashdb_launchpad.py::T::test_marking_foreign_arch SKIPPED [ 44%] 100s tests/integration/test_crashdb_launchpad.py::T::test_marking_project SKIPPED [ 44%] 100s tests/integration/test_crashdb_launchpad.py::T::test_marking_python SKIPPED [ 44%] 100s tests/integration/test_crashdb_launchpad.py::T::test_marking_python_task_mangle SKIPPED [ 45%] 100s tests/integration/test_crashdb_launchpad.py::T::test_marking_segv SKIPPED [ 45%] 100s tests/integration/test_crashdb_launchpad.py::T::test_project SKIPPED [ 45%] 100s tests/integration/test_crashdb_launchpad.py::T::test_update_comment SKIPPED [ 45%] 100s tests/integration/test_crashdb_launchpad.py::T::test_update_description SKIPPED [ 45%] 100s tests/integration/test_crashdb_launchpad.py::T::test_update_filter SKIPPED [ 46%] 100s tests/integration/test_crashdb_launchpad.py::T::test_update_traces_invalid SKIPPED [ 46%] 101s tests/integration/test_dupdb_admin.py::TestDupdbAdmin::test_changeid PASSED [ 46%] 101s tests/integration/test_dupdb_admin.py::TestDupdbAdmin::test_changeid_missing_argument PASSED [ 46%] 101s tests/integration/test_dupdb_admin.py::TestDupdbAdmin::test_dump_database PASSED [ 46%] 101s tests/integration/test_dupdb_admin.py::TestDupdbAdmin::test_dump_empty_database PASSED [ 46%] 101s tests/integration/test_dupdb_admin.py::TestDupdbAdmin::test_missing_db_file PASSED [ 47%] 101s tests/integration/test_dupdb_admin.py::TestDupdbAdmin::test_no_command PASSED [ 47%] 101s tests/integration/test_dupdb_admin.py::TestDupdbAdmin::test_publish PASSED [ 47%] 101s tests/integration/test_dupdb_admin.py::TestDupdbAdmin::test_publish_missing_argument PASSED [ 47%] 101s tests/integration/test_dupdb_admin.py::TestDupdbAdmin::test_removeid PASSED [ 47%] 102s tests/integration/test_dupdb_admin.py::TestDupdbAdmin::test_removeid_missing_argument PASSED [ 48%] 102s tests/integration/test_dupdb_admin.py::TestDupdbAdmin::test_unknown_command PASSED [ 48%] 102s tests/integration/test_fileutils.py::T::test_check_files_md5 PASSED [ 48%] 111s tests/integration/test_fileutils.py::T::test_clean_core_directory PASSED [ 48%] 111s tests/integration/test_fileutils.py::T::test_delete_report PASSED [ 48%] 111s tests/integration/test_fileutils.py::T::test_find_file_package PASSED [ 49%] 111s tests/integration/test_fileutils.py::T::test_find_package_desktopfile_multiple PASSED [ 49%] 111s tests/integration/test_fileutils.py::T::test_find_package_desktopfile_no_display PASSED [ 49%] 111s tests/integration/test_fileutils.py::T::test_find_package_desktopfile_none PASSED [ 49%] 111s tests/integration/test_fileutils.py::T::test_find_package_desktopfile_one PASSED [ 49%] 111s tests/integration/test_fileutils.py::T::test_get_all_reports PASSED [ 50%] 111s tests/integration/test_fileutils.py::T::test_get_config PASSED [ 50%] 111s tests/integration/test_fileutils.py::T::test_get_core_path PASSED [ 50%] 111s tests/integration/test_fileutils.py::T::test_get_system_reports PASSED [ 50%] 111s tests/integration/test_fileutils.py::T::test_get_system_reports_guest PASSED [ 50%] 111s tests/integration/test_fileutils.py::T::test_links_with_shared_library PASSED [ 50%] 111s tests/integration/test_fileutils.py::T::test_make_report_file PASSED [ 51%] 113s tests/integration/test_fileutils.py::T::test_mark_2nd_report_upload PASSED [ 51%] 113s tests/integration/test_fileutils.py::T::test_mark_hanging_process PASSED [ 51%] 113s tests/integration/test_fileutils.py::T::test_mark_report_upload PASSED [ 51%] 113s tests/integration/test_fileutils.py::T::test_seen PASSED [ 51%] 113s tests/integration/test_fileutils.py::T::test_shared_libraries PASSED [ 52%] 113s tests/integration/test_fileutils.py::T::test_unwritable_report PASSED [ 52%] 113s tests/integration/test_github.py::TestGitHub::test__format_report PASSED [ 52%] 113s tests/integration/test_github.py::TestGitHub::test_authentication_complete PASSED [ 52%] 113s tests/integration/test_github.py::TestGitHub::test_not_implemented_methods PASSED [ 52%] 113s tests/integration/test_github.py::TestGitHub::test_upload PASSED [ 53%] 113s tests/integration/test_helper.py::TestHelper::test_pidof_non_existing_program PASSED [ 53%] 113s tests/integration/test_helper.py::TestHelper::test_pidof_running_python PASSED [ 53%] 113s tests/integration/test_helper.py::TestHelper::test_read_shebang_binary PASSED [ 53%] 113s tests/integration/test_helper.py::TestHelper::test_read_shebang_shell_script PASSED [ 53%] 114s tests/integration/test_hooks.py::T::test_gcc_ide_hook_file PASSED [ 53%] 114s tests/integration/test_hooks.py::T::test_gcc_ide_hook_file_binary PASSED [ 54%] 114s tests/integration/test_hooks.py::T::test_gcc_ide_hook_pipe PASSED [ 54%] 114s tests/integration/test_hooks.py::T::test_general_hook_generic PASSED [ 54%] 115s tests/integration/test_hooks.py::T::test_kernel_crashdump_kdump PASSED [ 54%] 115s tests/integration/test_hooks.py::T::test_kernel_crashdump_kdump_log_dir_symlink PASSED [ 54%] 115s tests/integration/test_hooks.py::T::test_kernel_crashdump_kdump_log_symlink PASSED [ 55%] 116s tests/integration/test_hooks.py::T::test_kernel_crashdump_kexec PASSED [ 55%] 116s tests/integration/test_hooks.py::T::test_kernel_crashdump_log_symlink PASSED [ 55%] 117s tests/integration/test_hooks.py::T::test_kernel_oops_hook PASSED [ 55%] 117s tests/integration/test_hooks.py::T::test_package_hook_logs PASSED [ 55%] 117s tests/integration/test_hooks.py::T::test_package_hook_nologs PASSED [ 56%] 118s tests/integration/test_hooks.py::T::test_package_hook_non_existing_package PASSED [ 56%] 118s tests/integration/test_hooks.py::T::test_package_hook_tags PASSED [ 56%] 118s tests/integration/test_hooks.py::T::test_package_hook_uninstalled PASSED [ 56%] 118s tests/integration/test_hookutils.py::T::test_attach_file PASSED [ 56%] 118s tests/integration/test_hookutils.py::T::test_attach_file_binary PASSED [ 57%] 118s tests/integration/test_hookutils.py::T::test_attach_file_if_exists PASSED [ 57%] 118s tests/integration/test_hookutils.py::T::test_attach_mac_events PASSED [ 57%] 118s tests/integration/test_hookutils.py::T::test_command_output PASSED [ 57%] 118s tests/integration/test_hookutils.py::T::test_in_session_of_problem SKIPPED [ 57%] 118s tests/integration/test_hookutils.py::T::test_module_license_evaluation PASSED [ 57%] 119s tests/integration/test_hookutils.py::T::test_no_crashes PASSED [ 58%] 119s tests/integration/test_hookutils.py::T::test_real_module_license_evaluation PASSED [ 58%] 119s tests/integration/test_hookutils.py::T::test_recent_syslog PASSED [ 58%] 119s tests/integration/test_hookutils.py::T::test_recent_syslog_overflow PASSED [ 58%] 119s tests/integration/test_hookutils.py::T::test_xsession_errors PASSED [ 58%] 119s tests/integration/test_java_crashes.py::TestJavaCrashes::test_crash_class PASSED [ 59%] 120s tests/integration/test_java_crashes.py::TestJavaCrashes::test_crash_jar PASSED [ 59%] 120s tests/integration/test_packaging.py::T::test_get_os_version PASSED [ 59%] 120s tests/integration/test_packaging.py::T::test_get_uninstalled_package PASSED [ 59%] 120s tests/integration/test_packaging_apt_dpkg.py::T::test_check_files_md5 PASSED [ 59%] 120s tests/integration/test_packaging_apt_dpkg.py::T::test_compare_versions PASSED [ 60%] 120s tests/integration/test_packaging_apt_dpkg.py::T::test_enabled PASSED [ 60%] 120s tests/integration/test_packaging_apt_dpkg.py::T::test_get_architecture PASSED [ 60%] 120s tests/integration/test_packaging_apt_dpkg.py::T::test_get_available_version PASSED [ 60%] 120s tests/integration/test_packaging_apt_dpkg.py::T::test_get_dependencies_depends_and_pre_depends PASSED [ 60%] 121s tests/integration/test_packaging_apt_dpkg.py::T::test_get_dependencies_depends_only PASSED [ 60%] 121s tests/integration/test_packaging_apt_dpkg.py::T::test_get_dependencies_pre_depends_only PASSED [ 61%] 121s tests/integration/test_packaging_apt_dpkg.py::T::test_get_file_package PASSED [ 61%] 121s tests/integration/test_packaging_apt_dpkg.py::T::test_get_file_package_diversion PASSED [ 61%] 121s tests/integration/test_packaging_apt_dpkg.py::T::test_get_file_package_uninstalled PASSED [ 61%] 121s tests/integration/test_packaging_apt_dpkg.py::T::test_get_file_package_uninstalled_multiarch PASSED [ 61%] 121s tests/integration/test_packaging_apt_dpkg.py::T::test_get_files PASSED [ 62%] 121s tests/integration/test_packaging_apt_dpkg.py::T::test_get_kernel_package PASSED [ 62%] 121s tests/integration/test_packaging_apt_dpkg.py::T::test_get_library_paths PASSED [ 62%] 121s tests/integration/test_packaging_apt_dpkg.py::T::test_get_modified_conffiles PASSED [ 62%] 122s tests/integration/test_packaging_apt_dpkg.py::T::test_get_package_origin PASSED [ 62%] 122s tests/integration/test_packaging_apt_dpkg.py::T::test_get_source PASSED [ 63%] 122s tests/integration/test_packaging_apt_dpkg.py::T::test_get_system_architecture PASSED [ 63%] 122s tests/integration/test_packaging_apt_dpkg.py::T::test_get_version PASSED [ 63%] 123s tests/integration/test_packaging_apt_dpkg.py::T::test_is_distro_package PASSED [ 63%] 123s tests/integration/test_packaging_apt_dpkg.py::T::test_mirror_from_apt_sources PASSED [ 63%] 123s tests/integration/test_packaging_apt_dpkg.py::T::test_mirror_from_apt_sources_with_options PASSED [ 64%] 123s tests/integration/test_packaging_apt_dpkg.py::T::test_mirror_from_deb822_apt_sources PASSED [ 64%] 123s tests/integration/test_packaging_apt_dpkg.py::T::test_package_name_glob PASSED [ 64%] 123s tests/integration/test_packaging_rpm.py::TestPackagingRpm::test_get_dependencies SKIPPED [ 64%] 123s tests/integration/test_packaging_rpm.py::TestPackagingRpm::test_get_header SKIPPED [ 64%] 123s tests/integration/test_packaging_rpm.py::TestPackagingRpm::test_get_headers_by_tag SKIPPED [ 64%] 123s tests/integration/test_packaging_rpm.py::TestPackagingRpm::test_get_system_architecture SKIPPED [ 65%] 123s tests/integration/test_packaging_rpm.py::TestPackagingRpm::test_get_version SKIPPED [ 65%] 125s tests/integration/test_problem_report.py::T::test_add_to_existing PASSED [ 65%] 125s tests/integration/test_problem_report.py::T::test_big_file PASSED [ 65%] 125s tests/integration/test_problem_report.py::T::test_compressed_values PASSED [ 65%] 125s tests/integration/test_problem_report.py::T::test_extract_keys PASSED [ 66%] 125s tests/integration/test_problem_report.py::T::test_size_limit PASSED [ 66%] 125s tests/integration/test_problem_report.py::T::test_write_append PASSED [ 66%] 126s tests/integration/test_problem_report.py::T::test_write_delayed_fileobj PASSED [ 66%] 126s tests/integration/test_problem_report.py::T::test_write_file PASSED [ 66%] 126s tests/integration/test_problem_report.py::T::test_write_mime_binary PASSED [ 67%] 126s tests/integration/test_problem_report.py::T::test_write_mime_filter PASSED [ 67%] 126s tests/integration/test_python_crashes.py::T::test_deleted_working_directory PASSED [ 67%] 126s tests/integration/test_python_crashes.py::T::test_existing PASSED [ 67%] 127s tests/integration/test_python_crashes.py::T::test_general PASSED [ 67%] 127s tests/integration/test_python_crashes.py::T::test_generic_os_error PASSED [ 67%] 127s tests/integration/test_python_crashes.py::T::test_generic_os_error_no_errno PASSED [ 68%] 127s tests/integration/test_python_crashes.py::T::test_getcwd_error PASSED [ 68%] 127s tests/integration/test_python_crashes.py::T::test_ignoring PASSED [ 68%] 127s tests/integration/test_python_crashes.py::T::test_interactive PASSED [ 68%] 127s tests/integration/test_python_crashes.py::T::test_no_argv PASSED [ 68%] 128s tests/integration/test_python_crashes.py::T::test_no_flooding PASSED [ 69%] 128s tests/integration/test_python_crashes.py::T::test_python_env PASSED [ 69%] 128s tests/integration/test_python_crashes.py::T::test_subclassed_os_error PASSED [ 69%] 128s tests/integration/test_python_crashes.py::T::test_symlink PASSED [ 69%] 128s tests/integration/test_recoverable_problem.py::TestRecoverableProblem::test_invalid_data PASSED [ 69%] 129s tests/integration/test_recoverable_problem.py::TestRecoverableProblem::test_recoverable_problem PASSED [ 70%] 129s tests/integration/test_recoverable_problem.py::TestRecoverableProblem::test_recoverable_problem_dupe_sig PASSED [ 70%] 129s tests/integration/test_recoverable_problem.py::TestRecoverableProblem::test_wait_for_report_timeout PASSED [ 70%] 129s tests/integration/test_report.py::T::test_add_gdb_info PASSED [ 70%] 130s tests/integration/test_report.py::T::test_add_gdb_info_abort PASSED [ 70%] 131s tests/integration/test_report.py::T::test_add_gdb_info_damaged PASSED [ 71%] 131s tests/integration/test_report.py::T::test_add_gdb_info_damaged_gz_core PASSED [ 71%] 132s tests/integration/test_report.py::T::test_add_gdb_info_exe_missing PASSED [ 71%] 132s tests/integration/test_report.py::T::test_add_gdb_info_load PASSED [ 71%] 132s tests/integration/test_report.py::T::test_add_gdb_info_script PASSED [ 71%] 133s tests/integration/test_report.py::T::test_add_gdb_info_short_core_file PASSED [ 71%] 133s tests/integration/test_report.py::T::test_add_hooks_info PASSED [ 72%] 133s tests/integration/test_report.py::T::test_add_hooks_info_errors PASSED [ 72%] 133s tests/integration/test_report.py::T::test_add_hooks_info_opt PASSED [ 72%] 133s tests/integration/test_report.py::T::test_add_os_info PASSED [ 72%] 133s tests/integration/test_report.py::T::test_add_package_info PASSED [ 72%] 133s tests/integration/test_report.py::T::test_add_path_classification PASSED [ 73%] 133s tests/integration/test_report.py::T::test_add_proc_info PASSED [ 73%] 133s tests/integration/test_report.py::T::test_add_proc_info_current_desktop PASSED [ 73%] 134s tests/integration/test_report.py::T::test_add_proc_info_nonascii PASSED [ 73%] 134s tests/integration/test_report.py::T::test_add_user_info PASSED [ 73%] 134s tests/integration/test_report.py::T::test_add_user_info_missing_user PASSED [ 74%] 135s tests/integration/test_report.py::T::test_add_zz_parse_segv_details PASSED [ 74%] 135s tests/integration/test_report.py::T::test_address_to_offset_live PASSED [ 74%] 135s tests/integration/test_report.py::T::test_allowlisting PASSED [ 74%] 135s tests/integration/test_report.py::T::test_check_interpreted PASSED [ 74%] 135s tests/integration/test_report.py::T::test_check_interpreted_no_exec PASSED [ 75%] 135s tests/integration/test_report.py::T::test_check_interpreted_twistd SKIPPED [ 75%] 135s tests/integration/test_report.py::T::test_command_output PASSED [ 75%] 135s tests/integration/test_report.py::T::test_command_output_passes_env PASSED [ 75%] 135s tests/integration/test_report.py::T::test_command_output_raises_error PASSED [ 75%] 135s tests/integration/test_report.py::T::test_command_output_timeout PASSED [ 75%] 135s tests/integration/test_report.py::T::test_command_output_timeout_no_output PASSED [ 76%] 135s tests/integration/test_report.py::T::test_denylisting PASSED [ 76%] 135s tests/integration/test_report.py::T::test_extrapath_preferred PASSED [ 76%] 136s tests/integration/test_report.py::T::test_ignoring PASSED [ 76%] 136s tests/integration/test_report.py::T::test_obsolete_packages PASSED [ 76%] 136s tests/integration/test_report.py::T::test_search_bug_patterns PASSED [ 77%] 136s tests/integration/test_report.py::T::test_wait_for_proc_cmdline_failure PASSED [ 77%] 143s tests/integration/test_signal_crashes.py::T::test_core_dump_packaged PASSED [ 77%] 144s tests/integration/test_signal_crashes.py::T::test_core_dump_packaged_sigquit PASSED [ 77%] 144s tests/integration/test_signal_crashes.py::T::test_core_dump_packaged_sigquit_via_socket PASSED [ 77%] 148s tests/integration/test_signal_crashes.py::T::test_core_dump_unpackaged PASSED [ 78%] 148s tests/integration/test_signal_crashes.py::T::test_core_file_injection PASSED [ 78%] 149s tests/integration/test_signal_crashes.py::T::test_coredump_from_socket PASSED [ 78%] 151s tests/integration/test_signal_crashes.py::T::test_crash_apport PASSED [ 78%] 151s tests/integration/test_signal_crashes.py::T::test_crash_apport_from_systemd_coredump PASSED [ 78%] 152s tests/integration/test_signal_crashes.py::T::test_crash_setuid_drop PASSED [ 78%] 153s tests/integration/test_signal_crashes.py::T::test_crash_setuid_drop_via_socket PASSED [ 79%] 154s tests/integration/test_signal_crashes.py::T::test_crash_setuid_keep PASSED [ 79%] 155s tests/integration/test_signal_crashes.py::T::test_crash_setuid_unpackaged PASSED [ 79%] 156s tests/integration/test_signal_crashes.py::T::test_crash_suid_dumpable_debug PASSED [ 79%] 156s tests/integration/test_signal_crashes.py::T::test_create_test_non_sleep_process PASSED [ 79%] 156s tests/integration/test_signal_crashes.py::T::test_create_test_sleep_process PASSED [ 80%] 156s tests/integration/test_signal_crashes.py::T::test_empty_core_dump PASSED [ 80%] 158s tests/integration/test_signal_crashes.py::T::test_flood_limit PASSED [ 80%] 159s tests/integration/test_signal_crashes.py::T::test_ignore PASSED [ 80%] 159s tests/integration/test_signal_crashes.py::T::test_ignore_sigquit PASSED [ 80%] 160s tests/integration/test_signal_crashes.py::T::test_ignore_sigxcpu PASSED [ 81%] 160s tests/integration/test_signal_crashes.py::T::test_is_not_same_ns PASSED [ 81%] 161s tests/integration/test_signal_crashes.py::T::test_leak_inaccessible_files PASSED [ 81%] 161s tests/integration/test_signal_crashes.py::T::test_logging_file PASSED [ 81%] 162s tests/integration/test_signal_crashes.py::T::test_logging_stderr PASSED [ 81%] 164s tests/integration/test_signal_crashes.py::T::test_modify_after_start PASSED [ 82%] 165s tests/integration/test_signal_crashes.py::T::test_nonreadable_exe PASSED [ 82%] 165s tests/integration/test_signal_crashes.py::T::test_parallel_crash SKIPPED [ 82%] 165s tests/integration/test_signal_crashes.py::T::test_unpackaged_binary PASSED [ 82%] 166s tests/integration/test_signal_crashes.py::T::test_unpackaged_script PASSED [ 82%] 166s tests/integration/test_signal_crashes.py::T::test_unsupported_arguments_no_stderr PASSED [ 82%] 166s tests/integration/test_signal_crashes.py::T::test_wait_for_core_file_core_not_created PASSED [ 83%] 166s tests/integration/test_signal_crashes.py::T::test_wait_for_core_file_timeout PASSED [ 83%] 166s tests/integration/test_signal_crashes.py::T::test_wait_for_gdb_sleeping_child_process PASSED [ 83%] 166s tests/integration/test_signal_crashes.py::T::test_wait_for_gdb_sleeping_child_process_timeout PASSED [ 83%] 166s tests/integration/test_ui.py::T::test_can_examine_locally_crash PASSED [ 83%] 166s tests/integration/test_ui.py::T::test_can_examine_locally_nocrash PASSED [ 84%] 167s tests/integration/test_ui.py::T::test_collect_info_crashdb_errors PASSED [ 84%] 167s tests/integration/test_ui.py::T::test_collect_info_crashdb_name PASSED [ 84%] 167s tests/integration/test_ui.py::T::test_collect_info_crashdb_spec PASSED [ 84%] 167s tests/integration/test_ui.py::T::test_collect_info_distro PASSED [ 84%] 167s tests/integration/test_ui.py::T::test_collect_info_exepath PASSED [ 85%] 168s tests/integration/test_ui.py::T::test_collect_info_package PASSED [ 85%] 168s tests/integration/test_ui.py::T::test_collect_info_permissions PASSED [ 85%] 168s tests/integration/test_ui.py::T::test_db_no_accept PASSED [ 85%] 168s tests/integration/test_ui.py::T::test_file_report_http_error PASSED [ 85%] 168s tests/integration/test_ui.py::T::test_file_report_nodelay PASSED [ 85%] 168s tests/integration/test_ui.py::T::test_file_report_upload_delay PASSED [ 86%] 168s tests/integration/test_ui.py::T::test_file_report_upload_message PASSED [ 86%] 168s tests/integration/test_ui.py::T::test_format_filesize PASSED [ 86%] 168s tests/integration/test_ui.py::T::test_get_desktop_entry PASSED [ 86%] 168s tests/integration/test_ui.py::T::test_get_desktop_entry_broken PASSED [ 86%] 168s tests/integration/test_ui.py::T::test_get_size_constructed PASSED [ 87%] 168s tests/integration/test_ui.py::T::test_get_size_loaded PASSED [ 87%] 168s tests/integration/test_ui.py::T::test_handle_duplicate PASSED [ 87%] 169s tests/integration/test_ui.py::T::test_hooks_choices_db_no_accept PASSED [ 87%] 169s tests/integration/test_ui.py::T::test_interactive_hooks_cancel PASSED [ 87%] 169s tests/integration/test_ui.py::T::test_interactive_hooks_choices PASSED [ 88%] 170s tests/integration/test_ui.py::T::test_interactive_hooks_file PASSED [ 88%] 170s tests/integration/test_ui.py::T::test_interactive_hooks_information PASSED [ 88%] 171s tests/integration/test_ui.py::T::test_interactive_hooks_yesno PASSED [ 88%] 171s tests/integration/test_ui.py::T::test_load_report PASSED [ 88%] 171s tests/integration/test_ui.py::T::test_parse_argv_apport_bug PASSED [ 89%] 171s tests/integration/test_ui.py::T::test_parse_argv_single_arg PASSED [ 89%] 173s tests/integration/test_ui.py::T::test_restart PASSED [ 89%] 173s tests/integration/test_ui.py::T::test_run_as_real_user PASSED [ 89%] 173s tests/integration/test_ui.py::T::test_run_as_real_user_no_gvfsd PASSED [ 89%] 173s tests/integration/test_ui.py::T::test_run_as_real_user_no_sudo PASSED [ 89%] 173s tests/integration/test_ui.py::T::test_run_as_real_user_non_root PASSED [ 90%] 174s tests/integration/test_ui.py::T::test_run_crash PASSED [ 90%] 175s tests/integration/test_ui.py::T::test_run_crash_abort PASSED [ 90%] 175s tests/integration/test_ui.py::T::test_run_crash_anonymity PASSED [ 90%] 176s tests/integration/test_ui.py::T::test_run_crash_anonymity_escaping PASSED [ 90%] 176s tests/integration/test_ui.py::T::test_run_crash_anonymity_order PASSED [ 91%] 177s tests/integration/test_ui.py::T::test_run_crash_anonymity_substring PASSED [ 91%] 177s tests/integration/test_ui.py::T::test_run_crash_argv_file PASSED [ 91%] 177s tests/integration/test_ui.py::T::test_run_crash_broken PASSED [ 91%] 178s tests/integration/test_ui.py::T::test_run_crash_errors PASSED [ 91%] 178s tests/integration/test_ui.py::T::test_run_crash_ignore PASSED [ 92%] 178s tests/integration/test_ui.py::T::test_run_crash_kernel PASSED [ 92%] 179s tests/integration/test_ui.py::T::test_run_crash_known PASSED [ 92%] 180s tests/integration/test_ui.py::T::test_run_crash_malicious_crashdb PASSED [ 92%] 180s tests/integration/test_ui.py::T::test_run_crash_malicious_exec_path PASSED [ 92%] 180s tests/integration/test_ui.py::T::test_run_crash_malicious_package PASSED [ 92%] 180s tests/integration/test_ui.py::T::test_run_crash_nocore PASSED [ 93%] 180s tests/integration/test_ui.py::T::test_run_crash_package PASSED [ 93%] 181s tests/integration/test_ui.py::T::test_run_crash_precollected PASSED [ 93%] 181s tests/integration/test_ui.py::T::test_run_crash_preretraced PASSED [ 93%] 182s tests/integration/test_ui.py::T::test_run_crash_private_keys PASSED [ 93%] 182s tests/integration/test_ui.py::T::test_run_crash_uninstalled PASSED [ 94%] 182s tests/integration/test_ui.py::T::test_run_crash_unreportable PASSED [ 94%] 182s tests/integration/test_ui.py::T::test_run_crash_updated_binary PASSED [ 94%] 182s tests/integration/test_ui.py::T::test_run_nopending PASSED [ 94%] 183s tests/integration/test_ui.py::T::test_run_report_bug_file PASSED [ 94%] 183s tests/integration/test_ui.py::T::test_run_report_bug_kernel_thread PASSED [ 95%] 183s tests/integration/test_ui.py::T::test_run_report_bug_list_symptoms PASSED [ 95%] 183s tests/integration/test_ui.py::T::test_run_report_bug_noargs PASSED [ 95%] 183s tests/integration/test_ui.py::T::test_run_report_bug_noperm_pid PASSED [ 95%] 183s tests/integration/test_ui.py::T::test_run_report_bug_package PASSED [ 95%] 184s tests/integration/test_ui.py::T::test_run_report_bug_pid_tags PASSED [ 96%] 184s tests/integration/test_ui.py::T::test_run_report_bug_unpackaged_pid PASSED [ 96%] 184s tests/integration/test_ui.py::T::test_run_report_bug_wrong_pid PASSED [ 96%] 184s tests/integration/test_ui.py::T::test_run_report_hanging PASSED [ 96%] 184s tests/integration/test_ui.py::T::test_run_restart PASSED [ 96%] 185s tests/integration/test_ui.py::T::test_run_symptom PASSED [ 96%] 185s tests/integration/test_ui.py::T::test_run_update_report_different_binary_source PASSED [ 97%] 186s tests/integration/test_ui.py::T::test_run_update_report_existing_package_cli_cmdname PASSED [ 97%] 186s tests/integration/test_ui.py::T::test_run_update_report_existing_package_cli_tags PASSED [ 97%] 186s tests/integration/test_ui.py::T::test_run_update_report_existing_package_from_bug PASSED [ 97%] 186s tests/integration/test_ui.py::T::test_run_update_report_nonexisting_package_cli PASSED [ 97%] 186s tests/integration/test_ui.py::T::test_run_update_report_nonexisting_package_from_bug PASSED [ 98%] 186s tests/integration/test_ui.py::T::test_run_update_report_noninstalled_but_hook PASSED [ 98%] 186s tests/integration/test_ui.py::T::test_run_version PASSED [ 98%] 186s tests/integration/test_ui.py::T::test_wait_for_pid PASSED [ 98%] 186s tests/integration/test_ui_cli.py::TestApportCli::test_save_report_in_temp_directory PASSED [ 98%] 186s tests/integration/test_ui_cli.py::TestApportCli::test_ui_update_view PASSED [ 99%] 186s tests/integration/test_ui_gtk.py::test_unusable_display PASSED [ 99%] 186s tests/integration/test_unkillable_shutdown.py::TestUnkillableShutdown::test_omit_all_processes PASSED [ 99%] 187s tests/integration/test_unkillable_shutdown.py::TestUnkillableShutdown::test_omit_all_processes_except_one PASSED [ 99%] 187s tests/integration/test_unkillable_shutdown.py::TestUnkillableShutdown::test_write_reports PASSED [ 99%] 187s tests/integration/test_whoopsie_upload_all.py::TestWhoopsieUploadAll::test_process_report_malformed_report PASSED [100%] 187s 187s =========================== short test summary info ============================ 187s SKIPPED [1] tests/unit/test_problem_report.py:86: Missing German locale support 187s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:196: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 187s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:246: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 187s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:494: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 187s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:887: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 187s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:499: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 187s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:895: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 187s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:482: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 187s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:340: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 187s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:475: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 187s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:693: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 187s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:489: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 187s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:624: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 187s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:588: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 187s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:657: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 187s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:934: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 187s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:550: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 187s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:830: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 187s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:401: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 187s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:368: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 187s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:437: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 187s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:670: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 187s SKIPPED [1] tests/integration/test_hookutils.py:376: no logind session 187s SKIPPED [1] tests/integration/test_packaging_rpm.py:20: rpm module not available 187s SKIPPED [1] tests/integration/test_packaging_rpm.py:25: rpm module not available 187s SKIPPED [1] tests/integration/test_packaging_rpm.py:31: rpm module not available 187s SKIPPED [1] tests/integration/test_packaging_rpm.py:38: rpm module not available 187s SKIPPED [1] tests/integration/test_packaging_rpm.py:45: rpm module not available 187s SKIPPED [1] tests/integration/test_report.py:563: twistd not installed 187s SKIPPED [1] tests/integration/test_signal_crashes.py:237: fix test as multiple instances can be started within 30s 187s ================== 498 passed, 30 skipped in 91.61s (0:01:31) ================== 187s autopkgtest [23:03:13]: test unit-and-integration-tests: -----------------------] 188s autopkgtest [23:03:14]: test unit-and-integration-tests: - - - - - - - - - - results - - - - - - - - - - 188s unit-and-integration-tests PASS 188s autopkgtest [23:03:14]: test system-tests: preparing testbed 195s Creating nova instance adt-noble-amd64-apport-20251106-230006-juju-7f2275-prod-proposed-migration-environment-15-0920b486-b3ec-4947-9dad-89fe7aff25ab from image adt/ubuntu-noble-amd64-server-20251106.img (UUID f82ce5d4-d1c3-4471-82e5-184a3b3fdc5c)... 242s autopkgtest [23:04:08]: testbed dpkg architecture: amd64 242s autopkgtest [23:04:08]: testbed apt version: 2.8.3 242s autopkgtest [23:04:08]: @@@@@@@@@@@@@@@@@@@@ test bed setup 242s autopkgtest [23:04:08]: testbed release detected to be: noble 243s autopkgtest [23:04:09]: updating testbed package index (apt update) 243s Get:1 http://ftpmaster.internal/ubuntu noble-proposed InRelease [265 kB] 243s Hit:2 http://ftpmaster.internal/ubuntu noble InRelease 243s Hit:3 http://ftpmaster.internal/ubuntu noble-updates InRelease 243s Hit:4 http://ftpmaster.internal/ubuntu noble-security InRelease 243s Get:5 http://ftpmaster.internal/ubuntu noble-proposed/multiverse Sources [9156 B] 243s Get:6 http://ftpmaster.internal/ubuntu noble-proposed/universe Sources [42.6 kB] 243s Get:7 http://ftpmaster.internal/ubuntu noble-proposed/main Sources [90.6 kB] 244s Get:8 http://ftpmaster.internal/ubuntu noble-proposed/restricted Sources [44.3 kB] 244s Get:9 http://ftpmaster.internal/ubuntu noble-proposed/main i386 Packages [82.5 kB] 244s Get:10 http://ftpmaster.internal/ubuntu noble-proposed/main amd64 Packages [478 kB] 244s Get:11 http://ftpmaster.internal/ubuntu noble-proposed/main amd64 c-n-f Metadata [2184 B] 244s Get:12 http://ftpmaster.internal/ubuntu noble-proposed/restricted i386 Packages [21.0 kB] 244s Get:13 http://ftpmaster.internal/ubuntu noble-proposed/restricted amd64 Packages [1011 kB] 244s Get:14 http://ftpmaster.internal/ubuntu noble-proposed/restricted amd64 c-n-f Metadata [444 B] 244s Get:15 http://ftpmaster.internal/ubuntu noble-proposed/universe amd64 Packages [111 kB] 244s Get:16 http://ftpmaster.internal/ubuntu noble-proposed/universe i386 Packages [51.2 kB] 244s Get:17 http://ftpmaster.internal/ubuntu noble-proposed/universe amd64 c-n-f Metadata [2328 B] 244s Get:18 http://ftpmaster.internal/ubuntu noble-proposed/multiverse i386 Packages [752 B] 244s Get:19 http://ftpmaster.internal/ubuntu noble-proposed/multiverse amd64 Packages [5288 B] 244s Get:20 http://ftpmaster.internal/ubuntu noble-proposed/multiverse amd64 c-n-f Metadata [284 B] 246s Fetched 2218 kB in 1s (2344 kB/s) 246s Reading package lists... 247s Hit:1 http://ftpmaster.internal/ubuntu noble-proposed InRelease 247s Hit:2 http://ftpmaster.internal/ubuntu noble InRelease 247s Hit:3 http://ftpmaster.internal/ubuntu noble-updates InRelease 247s Hit:4 http://ftpmaster.internal/ubuntu noble-security InRelease 248s Reading package lists... 248s Reading package lists... 248s Building dependency tree... 248s Reading state information... 248s Calculating upgrade... 248s The following packages will be upgraded: 248s gir1.2-glib-2.0 libglib2.0-0t64 libglib2.0-data 248s 3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 248s Need to get 1777 kB of archives. 248s After this operation, 0 B of additional disk space will be used. 248s Get:1 http://ftpmaster.internal/ubuntu noble-proposed/main amd64 gir1.2-glib-2.0 amd64 2.80.0-6ubuntu3.5 [183 kB] 249s Get:2 http://ftpmaster.internal/ubuntu noble-proposed/main amd64 libglib2.0-0t64 amd64 2.80.0-6ubuntu3.5 [1544 kB] 249s Get:3 http://ftpmaster.internal/ubuntu noble-proposed/main amd64 libglib2.0-data all 2.80.0-6ubuntu3.5 [48.8 kB] 249s debconf: unable to initialize frontend: Dialog 249s debconf: (Dialog frontend will not work on a dumb terminal, an emacs shell buffer, or without a controlling terminal.) 249s debconf: falling back to frontend: Readline 249s debconf: unable to initialize frontend: Readline 249s debconf: (This frontend requires a controlling tty.) 249s debconf: falling back to frontend: Teletype 249s dpkg-preconfigure: unable to re-open stdin: 249s Fetched 1777 kB in 0s (4842 kB/s) 249s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 106381 files and directories currently installed.) 249s Preparing to unpack .../gir1.2-glib-2.0_2.80.0-6ubuntu3.5_amd64.deb ... 249s Unpacking gir1.2-glib-2.0:amd64 (2.80.0-6ubuntu3.5) over (2.80.0-6ubuntu3.4) ... 249s Preparing to unpack .../libglib2.0-0t64_2.80.0-6ubuntu3.5_amd64.deb ... 249s Unpacking libglib2.0-0t64:amd64 (2.80.0-6ubuntu3.5) over (2.80.0-6ubuntu3.4) ... 249s Preparing to unpack .../libglib2.0-data_2.80.0-6ubuntu3.5_all.deb ... 249s Unpacking libglib2.0-data (2.80.0-6ubuntu3.5) over (2.80.0-6ubuntu3.4) ... 249s Setting up libglib2.0-0t64:amd64 (2.80.0-6ubuntu3.5) ... 249s No schema files found: doing nothing. 249s Setting up libglib2.0-data (2.80.0-6ubuntu3.5) ... 249s Setting up gir1.2-glib-2.0:amd64 (2.80.0-6ubuntu3.5) ... 249s Processing triggers for libc-bin (2.39-0ubuntu8.6) ... 250s autopkgtest [23:04:16]: upgrading testbed (apt dist-upgrade and autopurge) 250s Reading package lists... 250s Building dependency tree... 250s Reading state information... 250s Calculating upgrade...Starting pkgProblemResolver with broken count: 0 250s Starting 2 pkgProblemResolver with broken count: 0 250s Done 250s Entering ResolveByKeep 251s 251s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 251s Reading package lists... 251s Building dependency tree... 251s Reading state information... 251s Starting pkgProblemResolver with broken count: 0 251s Starting 2 pkgProblemResolver with broken count: 0 251s Done 252s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 254s Reading package lists... 254s Building dependency tree... 254s Reading state information... 254s Starting pkgProblemResolver with broken count: 0 254s Starting 2 pkgProblemResolver with broken count: 0 254s Done 255s The following NEW packages will be installed: 255s adwaita-icon-theme apport-gtk apport-kde apport-retrace apport-valgrind 255s at-spi2-common chaos-marmosets cpp cpp-13 cpp-13-x86-64-linux-gnu 255s cpp-x86-64-linux-gnu dbus-x11 dconf-gsettings-backend dconf-service 255s desktop-file-utils fontconfig gcc gcc-13 gcc-13-base gcc-13-x86-64-linux-gnu 255s gcc-x86-64-linux-gnu gdb gdb-multiarch gir1.2-atk-1.0 gir1.2-freedesktop 255s gir1.2-gdkpixbuf-2.0 gir1.2-gtk-3.0 gir1.2-harfbuzz-0.0 gir1.2-pango-1.0 255s gir1.2-wnck-3.0 gnome-icon-theme gnome-terminal gnome-terminal-data 255s gsettings-desktop-schemas gtk-update-icon-cache gvfs-common gvfs-daemons 255s gvfs-libs hicolor-icon-theme humanity-icon-theme libasan8 255s libatk-bridge2.0-0t64 libatk1.0-0t64 libatomic1 libatspi2.0-0t64 255s libavahi-client3 libavahi-common-data libavahi-common3 libbabeltrace1 255s libc6-dbg libcairo-gobject2 libcairo2 libcc1-0 libcolord2 libcups2t64 255s libdatrie1 libdconf1 libdebuginfod-common libdebuginfod1t64 255s libdouble-conversion3 libdrm-amdgpu1 libdrm-intel1 libegl-mesa0 libegl1 255s libepoxy0 libfontenc1 libgbm1 libgcc-13-dev libgck-2-2 libgcr-4-4 255s libgdk-pixbuf-2.0-0 libgdk-pixbuf2.0-common libgl1 libgl1-mesa-dri libglvnd0 255s libglx-mesa0 libglx0 libgomp1 libgraphite2-3 libgtk-3-0t64 libgtk-3-common 255s libhandy-1-0 libharfbuzz-gobject0 libharfbuzz0b libhwasan0 libice6 255s libinput-bin libinput10 libipt2 libisl23 libitm1 liblcms2-2 libllvm20 255s liblsan0 libmd4c0 libmpc3 libmtdev1t64 libpango-1.0-0 libpangocairo-1.0-0 255s libpangoft2-1.0-0 libpangoxft-1.0-0 libpciaccess0 libpcre2-16-0 255s libpixman-1-0 libqt5core5t64 libqt5dbus5t64 libqt5designer5 libqt5gui5t64 255s libqt5help5 libqt5network5t64 libqt5printsupport5t64 libqt5sql5t64 255s libqt5test5t64 libqt5widgets5t64 libqt5xml5t64 libquadmath0 librsvg2-2 255s librsvg2-common libsecret-1-0 libsecret-common libsm6 255s libsource-highlight-common libsource-highlight4t64 libstartup-notification0 255s libthai-data libthai0 libtsan2 libubsan1 libvte-2.91-0 libvte-2.91-common 255s libvulkan1 libwacom-common libwacom9 libwayland-client0 libwayland-cursor0 255s libwayland-egl1 libwayland-server0 libwhoopsie-preferences0 libwhoopsie0 255s libwnck-3-0 libwnck-3-common libx11-xcb1 libxaw7 libxcb-dri3-0 libxcb-glx0 255s libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-present0 libxcb-randr0 255s libxcb-render-util0 libxcb-render0 libxcb-shape0 libxcb-shm0 libxcb-sync1 255s libxcb-util1 libxcb-xfixes0 libxcb-xinerama0 libxcb-xinput0 libxcb-xkb1 255s libxcomposite1 libxcursor1 libxdamage1 libxfixes3 libxfont2 libxft2 libxi6 255s libxinerama1 libxkbcommon-x11-0 libxkbfile1 libxmu6 libxrandr2 libxrender1 255s libxres1 libxshmfence1 libxt6t64 libxxf86vm1 mesa-libgallium 255s python3-iniconfig python3-packaging python3-pluggy python3-psutil 255s python3-pyqt5 python3-pyqt5.sip python3-pytest session-migration 255s ubuntu-dbgsym-keyring ubuntu-mono valgrind whoopsie-preferences x11-common 255s x11-xkb-utils xserver-common xvfb 255s 0 upgraded, 194 newly installed, 0 to remove and 0 not upgraded. 255s Need to get 163 MB of archives. 255s After this operation, 628 MB of additional disk space will be used. 255s Get:1 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libdebuginfod-common all 0.190-1.1ubuntu0.1 [14.6 kB] 255s Get:2 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libgdk-pixbuf2.0-common all 2.42.10+dfsg-3ubuntu3.2 [8192 B] 255s Get:3 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libgdk-pixbuf-2.0-0 amd64 2.42.10+dfsg-3ubuntu3.2 [147 kB] 255s Get:4 http://ftpmaster.internal/ubuntu noble-updates/main amd64 gtk-update-icon-cache amd64 3.24.41-4ubuntu1.3 [51.9 kB] 255s Get:5 http://ftpmaster.internal/ubuntu noble/main amd64 hicolor-icon-theme all 0.17-2 [9976 B] 255s Get:6 http://ftpmaster.internal/ubuntu noble/main amd64 humanity-icon-theme all 0.6.16 [1282 kB] 255s Get:7 http://ftpmaster.internal/ubuntu noble/main amd64 ubuntu-mono all 24.04-0ubuntu1 [151 kB] 255s Get:8 http://ftpmaster.internal/ubuntu noble/main amd64 adwaita-icon-theme all 46.0-1 [723 kB] 255s Get:9 http://ftpmaster.internal/ubuntu noble/main amd64 at-spi2-common all 2.52.0-1build1 [8674 B] 255s Get:10 http://ftpmaster.internal/ubuntu noble/main amd64 libatk1.0-0t64 amd64 2.52.0-1build1 [55.3 kB] 255s Get:11 http://ftpmaster.internal/ubuntu noble/main amd64 gir1.2-atk-1.0 amd64 2.52.0-1build1 [23.1 kB] 255s Get:12 http://ftpmaster.internal/ubuntu noble/main amd64 libpixman-1-0 amd64 0.42.2-1build1 [279 kB] 255s Get:13 http://ftpmaster.internal/ubuntu noble/main amd64 libxcb-render0 amd64 1.15-1ubuntu2 [16.2 kB] 255s Get:14 http://ftpmaster.internal/ubuntu noble/main amd64 libxcb-shm0 amd64 1.15-1ubuntu2 [5756 B] 255s Get:15 http://ftpmaster.internal/ubuntu noble/main amd64 libxrender1 amd64 1:0.9.10-1.1build1 [19.0 kB] 255s Get:16 http://ftpmaster.internal/ubuntu noble/main amd64 libcairo2 amd64 1.18.0-3build1 [566 kB] 255s Get:17 http://ftpmaster.internal/ubuntu noble/main amd64 libcairo-gobject2 amd64 1.18.0-3build1 [127 kB] 255s Get:18 http://ftpmaster.internal/ubuntu noble/main amd64 gir1.2-freedesktop amd64 1.80.1-1 [49.7 kB] 255s Get:19 http://ftpmaster.internal/ubuntu noble-updates/main amd64 gir1.2-gdkpixbuf-2.0 amd64 2.42.10+dfsg-3ubuntu3.2 [9488 B] 255s Get:20 http://ftpmaster.internal/ubuntu noble/main amd64 libgraphite2-3 amd64 1.3.14-2build1 [73.0 kB] 255s Get:21 http://ftpmaster.internal/ubuntu noble/main amd64 libharfbuzz0b amd64 8.3.0-2build2 [469 kB] 255s Get:22 http://ftpmaster.internal/ubuntu noble/main amd64 libharfbuzz-gobject0 amd64 8.3.0-2build2 [34.3 kB] 255s Get:23 http://ftpmaster.internal/ubuntu noble/main amd64 gir1.2-harfbuzz-0.0 amd64 8.3.0-2build2 [44.5 kB] 255s Get:24 http://ftpmaster.internal/ubuntu noble/main amd64 fontconfig amd64 2.15.0-1.1ubuntu2 [180 kB] 255s Get:25 http://ftpmaster.internal/ubuntu noble/main amd64 libthai-data all 0.1.29-2build1 [158 kB] 255s Get:26 http://ftpmaster.internal/ubuntu noble/main amd64 libdatrie1 amd64 0.2.13-3build1 [19.0 kB] 255s Get:27 http://ftpmaster.internal/ubuntu noble/main amd64 libthai0 amd64 0.1.29-2build1 [18.9 kB] 255s Get:28 http://ftpmaster.internal/ubuntu noble/main amd64 libpango-1.0-0 amd64 1.52.1+ds-1build1 [231 kB] 255s Get:29 http://ftpmaster.internal/ubuntu noble/main amd64 libpangoft2-1.0-0 amd64 1.52.1+ds-1build1 [42.5 kB] 255s Get:30 http://ftpmaster.internal/ubuntu noble/main amd64 libpangocairo-1.0-0 amd64 1.52.1+ds-1build1 [28.8 kB] 255s Get:31 http://ftpmaster.internal/ubuntu noble/main amd64 libxft2 amd64 2.3.6-1build1 [45.3 kB] 255s Get:32 http://ftpmaster.internal/ubuntu noble/main amd64 libpangoxft-1.0-0 amd64 1.52.1+ds-1build1 [20.3 kB] 255s Get:33 http://ftpmaster.internal/ubuntu noble/main amd64 gir1.2-pango-1.0 amd64 1.52.1+ds-1build1 [34.8 kB] 255s Get:34 http://ftpmaster.internal/ubuntu noble/main amd64 libxi6 amd64 2:1.8.1-1build1 [32.4 kB] 255s Get:35 http://ftpmaster.internal/ubuntu noble/main amd64 libatspi2.0-0t64 amd64 2.52.0-1build1 [80.5 kB] 255s Get:36 http://ftpmaster.internal/ubuntu noble/main amd64 libatk-bridge2.0-0t64 amd64 2.52.0-1build1 [66.0 kB] 255s Get:37 http://ftpmaster.internal/ubuntu noble/main amd64 liblcms2-2 amd64 2.14-2build1 [161 kB] 255s Get:38 http://ftpmaster.internal/ubuntu noble/main amd64 libcolord2 amd64 1.4.7-1build2 [149 kB] 255s Get:39 http://ftpmaster.internal/ubuntu noble/main amd64 libavahi-common-data amd64 0.8-13ubuntu6 [29.7 kB] 255s Get:40 http://ftpmaster.internal/ubuntu noble/main amd64 libavahi-common3 amd64 0.8-13ubuntu6 [23.3 kB] 255s Get:41 http://ftpmaster.internal/ubuntu noble/main amd64 libavahi-client3 amd64 0.8-13ubuntu6 [26.8 kB] 255s Get:42 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libcups2t64 amd64 2.4.7-1.2ubuntu7.4 [272 kB] 255s Get:43 http://ftpmaster.internal/ubuntu noble/main amd64 libepoxy0 amd64 1.5.10-1build1 [220 kB] 255s Get:44 http://ftpmaster.internal/ubuntu noble/main amd64 libwayland-client0 amd64 1.22.0-2.1build1 [26.4 kB] 255s Get:45 http://ftpmaster.internal/ubuntu noble/main amd64 libwayland-cursor0 amd64 1.22.0-2.1build1 [10.4 kB] 255s Get:46 http://ftpmaster.internal/ubuntu noble/main amd64 libwayland-egl1 amd64 1.22.0-2.1build1 [5628 B] 255s Get:47 http://ftpmaster.internal/ubuntu noble/main amd64 libxcomposite1 amd64 1:0.4.5-1build3 [6320 B] 255s Get:48 http://ftpmaster.internal/ubuntu noble/main amd64 libxfixes3 amd64 1:6.0.0-2build1 [10.8 kB] 255s Get:49 http://ftpmaster.internal/ubuntu noble/main amd64 libxcursor1 amd64 1:1.2.1-1build1 [20.7 kB] 255s Get:50 http://ftpmaster.internal/ubuntu noble/main amd64 libxdamage1 amd64 1:1.1.6-1build1 [6150 B] 255s Get:51 http://ftpmaster.internal/ubuntu noble/main amd64 libxinerama1 amd64 2:1.1.4-3build1 [6396 B] 255s Get:52 http://ftpmaster.internal/ubuntu noble/main amd64 libxrandr2 amd64 2:1.5.2-2build1 [19.7 kB] 255s Get:53 http://ftpmaster.internal/ubuntu noble-updates/main amd64 dbus-x11 amd64 1.14.10-4ubuntu4.1 [23.3 kB] 255s Get:54 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libdconf1 amd64 0.40.0-4ubuntu0.1 [39.6 kB] 255s Get:55 http://ftpmaster.internal/ubuntu noble-updates/main amd64 dconf-service amd64 0.40.0-4ubuntu0.1 [27.6 kB] 255s Get:56 http://ftpmaster.internal/ubuntu noble-updates/main amd64 dconf-gsettings-backend amd64 0.40.0-4ubuntu0.1 [22.1 kB] 255s Get:57 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libgtk-3-common all 3.24.41-4ubuntu1.3 [1426 kB] 255s Get:58 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libgtk-3-0t64 amd64 3.24.41-4ubuntu1.3 [2913 kB] 255s Get:59 http://ftpmaster.internal/ubuntu noble-updates/main amd64 gir1.2-gtk-3.0 amd64 3.24.41-4ubuntu1.3 [245 kB] 255s Get:60 http://ftpmaster.internal/ubuntu noble/main amd64 libx11-xcb1 amd64 2:1.8.7-1build1 [7800 B] 255s Get:61 http://ftpmaster.internal/ubuntu noble/main amd64 libxcb-util1 amd64 0.4.0-1build3 [10.7 kB] 255s Get:62 http://ftpmaster.internal/ubuntu noble/main amd64 libstartup-notification0 amd64 0.12-6build3 [18.4 kB] 255s Get:63 http://ftpmaster.internal/ubuntu noble/main amd64 libxres1 amd64 2:1.2.1-1build1 [6778 B] 255s Get:64 http://ftpmaster.internal/ubuntu noble/main amd64 libwnck-3-common all 43.0-3build4 [19.5 kB] 255s Get:65 http://ftpmaster.internal/ubuntu noble/main amd64 libwnck-3-0 amd64 43.0-3build4 [113 kB] 255s Get:66 http://ftpmaster.internal/ubuntu noble/main amd64 gir1.2-wnck-3.0 amd64 43.0-3build4 [10.2 kB] 255s Get:67 http://ftpmaster.internal/ubuntu noble/main amd64 gnome-terminal-data all 3.52.0-1ubuntu2 [38.5 kB] 255s Get:68 http://ftpmaster.internal/ubuntu noble/main amd64 session-migration amd64 0.3.9build1 [9034 B] 255s Get:69 http://ftpmaster.internal/ubuntu noble-updates/main amd64 gsettings-desktop-schemas all 46.1-0ubuntu1 [35.6 kB] 255s Get:70 http://ftpmaster.internal/ubuntu noble/main amd64 libhandy-1-0 amd64 1.8.3-1build2 [232 kB] 255s Get:71 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libvte-2.91-common amd64 0.76.0-1ubuntu0.1 [13.5 kB] 256s Get:72 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libvte-2.91-0 amd64 0.76.0-1ubuntu0.1 [230 kB] 256s Get:73 http://ftpmaster.internal/ubuntu noble/main amd64 gnome-terminal amd64 3.52.0-1ubuntu2 [217 kB] 256s Get:74 http://ftpmaster.internal/ubuntu noble/main amd64 libwhoopsie-preferences0 amd64 23build3 [14.4 kB] 256s Get:75 http://ftpmaster.internal/ubuntu noble/main amd64 libwhoopsie0 amd64 0.2.77build3 [10.9 kB] 256s Get:76 http://ftpmaster.internal/ubuntu noble/main amd64 whoopsie-preferences amd64 23build3 [8850 B] 256s Get:77 http://ftpmaster.internal/ubuntu noble-updates/main amd64 apport-gtk all 2.28.1-0ubuntu3.8 [9758 B] 256s Get:78 http://ftpmaster.internal/ubuntu noble/universe amd64 python3-pyqt5.sip amd64 12.13.0-1build3 [61.3 kB] 256s Get:79 http://ftpmaster.internal/ubuntu noble/universe amd64 libdouble-conversion3 amd64 3.3.0-1build1 [40.3 kB] 256s Get:80 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libpcre2-16-0 amd64 10.42-4ubuntu2.1 [210 kB] 256s Get:81 http://ftpmaster.internal/ubuntu noble/universe amd64 libqt5core5t64 amd64 5.15.13+dfsg-1ubuntu1 [2011 kB] 256s Get:82 http://ftpmaster.internal/ubuntu noble/universe amd64 libqt5dbus5t64 amd64 5.15.13+dfsg-1ubuntu1 [220 kB] 256s Get:83 http://ftpmaster.internal/ubuntu noble/main amd64 libglvnd0 amd64 1.7.0-1build1 [69.6 kB] 256s Get:84 http://ftpmaster.internal/ubuntu noble/main amd64 libwayland-server0 amd64 1.22.0-2.1build1 [33.9 kB] 256s Get:85 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libdrm-amdgpu1 amd64 2.4.122-1~ubuntu0.24.04.1 [20.7 kB] 256s Get:86 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libpciaccess0 amd64 0.17-3ubuntu0.24.04.2 [18.9 kB] 256s Get:87 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libdrm-intel1 amd64 2.4.122-1~ubuntu0.24.04.1 [63.8 kB] 256s Get:88 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libllvm20 amd64 1:20.1.2-0ubuntu1~24.04.2 [30.6 MB] 256s Get:89 http://ftpmaster.internal/ubuntu noble/main amd64 libxcb-dri3-0 amd64 1.15-1ubuntu2 [7142 B] 256s Get:90 http://ftpmaster.internal/ubuntu noble/main amd64 libxcb-present0 amd64 1.15-1ubuntu2 [5676 B] 256s Get:91 http://ftpmaster.internal/ubuntu noble/main amd64 libxcb-randr0 amd64 1.15-1ubuntu2 [17.9 kB] 256s Get:92 http://ftpmaster.internal/ubuntu noble/main amd64 libxcb-sync1 amd64 1.15-1ubuntu2 [9312 B] 256s Get:93 http://ftpmaster.internal/ubuntu noble/main amd64 libxcb-xfixes0 amd64 1.15-1ubuntu2 [10.2 kB] 256s Get:94 http://ftpmaster.internal/ubuntu noble/main amd64 libxshmfence1 amd64 1.3-1build5 [4764 B] 256s Get:95 http://ftpmaster.internal/ubuntu noble-updates/main amd64 mesa-libgallium amd64 25.0.7-0ubuntu0.24.04.2 [10.3 MB] 256s Get:96 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libgbm1 amd64 25.0.7-0ubuntu0.24.04.2 [32.7 kB] 256s Get:97 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libegl-mesa0 amd64 25.0.7-0ubuntu0.24.04.2 [124 kB] 256s Get:98 http://ftpmaster.internal/ubuntu noble/main amd64 libegl1 amd64 1.7.0-1build1 [28.7 kB] 256s Get:99 http://ftpmaster.internal/ubuntu noble/main amd64 libxcb-glx0 amd64 1.15-1ubuntu2 [24.8 kB] 256s Get:100 http://ftpmaster.internal/ubuntu noble/main amd64 libxxf86vm1 amd64 1:1.1.4-1build4 [9282 B] 256s Get:101 http://ftpmaster.internal/ubuntu noble/main amd64 libvulkan1 amd64 1.3.275.0-1build1 [142 kB] 256s Get:102 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libgl1-mesa-dri amd64 25.0.7-0ubuntu0.24.04.2 [35.8 kB] 256s Get:103 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libglx-mesa0 amd64 25.0.7-0ubuntu0.24.04.2 [141 kB] 256s Get:104 http://ftpmaster.internal/ubuntu noble/main amd64 libglx0 amd64 1.7.0-1build1 [38.6 kB] 256s Get:105 http://ftpmaster.internal/ubuntu noble/main amd64 libgl1 amd64 1.7.0-1build1 [102 kB] 256s Get:106 http://ftpmaster.internal/ubuntu noble/main amd64 x11-common all 1:7.7+23ubuntu3 [21.7 kB] 256s Get:107 http://ftpmaster.internal/ubuntu noble/main amd64 libice6 amd64 2:1.0.10-1build3 [41.4 kB] 256s Get:108 http://ftpmaster.internal/ubuntu noble/main amd64 libmtdev1t64 amd64 1.1.6-1.1build1 [14.4 kB] 256s Get:109 http://ftpmaster.internal/ubuntu noble/main amd64 libwacom-common all 2.10.0-2 [63.4 kB] 256s Get:110 http://ftpmaster.internal/ubuntu noble/main amd64 libwacom9 amd64 2.10.0-2 [23.9 kB] 256s Get:111 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libinput-bin amd64 1.25.0-1ubuntu3.1 [22.6 kB] 256s Get:112 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libinput10 amd64 1.25.0-1ubuntu3.1 [133 kB] 256s Get:113 http://ftpmaster.internal/ubuntu noble/universe amd64 libmd4c0 amd64 0.4.8-1build1 [42.3 kB] 256s Get:114 http://ftpmaster.internal/ubuntu noble/universe amd64 libqt5network5t64 amd64 5.15.13+dfsg-1ubuntu1 [723 kB] 256s Get:115 http://ftpmaster.internal/ubuntu noble/main amd64 libsm6 amd64 2:1.2.3-1build3 [15.7 kB] 256s Get:116 http://ftpmaster.internal/ubuntu noble/main amd64 libxcb-icccm4 amd64 0.4.1-1.1build3 [10.8 kB] 256s Get:117 http://ftpmaster.internal/ubuntu noble/main amd64 libxcb-image0 amd64 0.4.0-2build1 [10.8 kB] 256s Get:118 http://ftpmaster.internal/ubuntu noble/main amd64 libxcb-keysyms1 amd64 0.4.0-1build4 [7956 B] 256s Get:119 http://ftpmaster.internal/ubuntu noble/main amd64 libxcb-render-util0 amd64 0.3.9-1build4 [9608 B] 256s Get:120 http://ftpmaster.internal/ubuntu noble/main amd64 libxcb-shape0 amd64 1.15-1ubuntu2 [6100 B] 256s Get:121 http://ftpmaster.internal/ubuntu noble/main amd64 libxcb-xinerama0 amd64 1.15-1ubuntu2 [5410 B] 256s Get:122 http://ftpmaster.internal/ubuntu noble/main amd64 libxcb-xinput0 amd64 1.15-1ubuntu2 [33.2 kB] 256s Get:123 http://ftpmaster.internal/ubuntu noble/main amd64 libxcb-xkb1 amd64 1.15-1ubuntu2 [32.3 kB] 256s Get:124 http://ftpmaster.internal/ubuntu noble/main amd64 libxkbcommon-x11-0 amd64 1.6.0-1build1 [14.5 kB] 257s Get:125 http://ftpmaster.internal/ubuntu noble/universe amd64 libqt5gui5t64 amd64 5.15.13+dfsg-1ubuntu1 [3748 kB] 257s Get:126 http://ftpmaster.internal/ubuntu noble/universe amd64 libqt5widgets5t64 amd64 5.15.13+dfsg-1ubuntu1 [2561 kB] 257s Get:127 http://ftpmaster.internal/ubuntu noble/universe amd64 libqt5xml5t64 amd64 5.15.13+dfsg-1ubuntu1 [124 kB] 257s Get:128 http://ftpmaster.internal/ubuntu noble/universe amd64 libqt5designer5 amd64 5.15.13-1 [2824 kB] 257s Get:129 http://ftpmaster.internal/ubuntu noble/universe amd64 libqt5sql5t64 amd64 5.15.13+dfsg-1ubuntu1 [122 kB] 257s Get:130 http://ftpmaster.internal/ubuntu noble/universe amd64 libqt5help5 amd64 5.15.13-1 [161 kB] 257s Get:131 http://ftpmaster.internal/ubuntu noble/universe amd64 libqt5printsupport5t64 amd64 5.15.13+dfsg-1ubuntu1 [208 kB] 257s Get:132 http://ftpmaster.internal/ubuntu noble/universe amd64 libqt5test5t64 amd64 5.15.13+dfsg-1ubuntu1 [148 kB] 257s Get:133 http://ftpmaster.internal/ubuntu noble/universe amd64 python3-pyqt5 amd64 5.15.10+dfsg-1build6 [2753 kB] 257s Get:134 http://ftpmaster.internal/ubuntu noble-updates/universe amd64 apport-kde all 2.28.1-0ubuntu3.8 [18.8 kB] 257s Get:135 http://ftpmaster.internal/ubuntu noble/main amd64 libbabeltrace1 amd64 1.5.11-3build3 [164 kB] 257s Get:136 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libdebuginfod1t64 amd64 0.190-1.1ubuntu0.1 [17.1 kB] 257s Get:137 http://ftpmaster.internal/ubuntu noble/main amd64 libipt2 amd64 2.0.6-1build1 [45.7 kB] 257s Get:138 http://ftpmaster.internal/ubuntu noble/main amd64 libsource-highlight-common all 3.1.9-4.3build1 [64.2 kB] 257s Get:139 http://ftpmaster.internal/ubuntu noble/main amd64 libsource-highlight4t64 amd64 3.1.9-4.3build1 [258 kB] 257s Get:140 http://ftpmaster.internal/ubuntu noble/main amd64 gdb amd64 15.0.50.20240403-0ubuntu1 [4010 kB] 257s Get:141 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libc6-dbg amd64 2.39-0ubuntu8.6 [7458 kB] 257s Get:142 http://ftpmaster.internal/ubuntu noble-updates/main amd64 apport-retrace all 2.28.1-0ubuntu3.8 [14.4 kB] 257s Get:143 http://ftpmaster.internal/ubuntu noble/main amd64 valgrind amd64 1:3.22.0-0ubuntu3 [14.9 MB] 258s Get:144 http://ftpmaster.internal/ubuntu noble-updates/universe amd64 apport-valgrind all 2.28.1-0ubuntu3.8 [5228 B] 258s Get:145 http://ftpmaster.internal/ubuntu noble/universe amd64 chaos-marmosets amd64 0.1.2-2 [8808 B] 258s Get:146 http://ftpmaster.internal/ubuntu noble-updates/main amd64 gcc-13-base amd64 13.3.0-6ubuntu2~24.04 [51.5 kB] 258s Get:147 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libisl23 amd64 0.26-3build1.1 [680 kB] 258s Get:148 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libmpc3 amd64 1.3.1-1build1.1 [54.6 kB] 258s Get:149 http://ftpmaster.internal/ubuntu noble-updates/main amd64 cpp-13-x86-64-linux-gnu amd64 13.3.0-6ubuntu2~24.04 [10.7 MB] 258s Get:150 http://ftpmaster.internal/ubuntu noble-updates/main amd64 cpp-13 amd64 13.3.0-6ubuntu2~24.04 [1038 B] 258s Get:151 http://ftpmaster.internal/ubuntu noble/main amd64 cpp-x86-64-linux-gnu amd64 4:13.2.0-7ubuntu1 [5326 B] 258s Get:152 http://ftpmaster.internal/ubuntu noble/main amd64 cpp amd64 4:13.2.0-7ubuntu1 [22.4 kB] 258s Get:153 http://ftpmaster.internal/ubuntu noble/main amd64 desktop-file-utils amd64 0.27-2build1 [53.8 kB] 258s Get:154 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libcc1-0 amd64 14.2.0-4ubuntu2~24.04 [48.0 kB] 258s Get:155 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libgomp1 amd64 14.2.0-4ubuntu2~24.04 [148 kB] 258s Get:156 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libitm1 amd64 14.2.0-4ubuntu2~24.04 [29.7 kB] 258s Get:157 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libatomic1 amd64 14.2.0-4ubuntu2~24.04 [10.5 kB] 258s Get:158 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libasan8 amd64 14.2.0-4ubuntu2~24.04 [3031 kB] 258s Get:159 http://ftpmaster.internal/ubuntu noble-updates/main amd64 liblsan0 amd64 14.2.0-4ubuntu2~24.04 [1322 kB] 258s Get:160 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libtsan2 amd64 14.2.0-4ubuntu2~24.04 [2772 kB] 258s Get:161 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libubsan1 amd64 14.2.0-4ubuntu2~24.04 [1184 kB] 258s Get:162 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libhwasan0 amd64 14.2.0-4ubuntu2~24.04 [1641 kB] 258s Get:163 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libquadmath0 amd64 14.2.0-4ubuntu2~24.04 [153 kB] 258s Get:164 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libgcc-13-dev amd64 13.3.0-6ubuntu2~24.04 [2681 kB] 258s Get:165 http://ftpmaster.internal/ubuntu noble-updates/main amd64 gcc-13-x86-64-linux-gnu amd64 13.3.0-6ubuntu2~24.04 [21.1 MB] 259s Get:166 http://ftpmaster.internal/ubuntu noble-updates/main amd64 gcc-13 amd64 13.3.0-6ubuntu2~24.04 [494 kB] 259s Get:167 http://ftpmaster.internal/ubuntu noble/main amd64 gcc-x86-64-linux-gnu amd64 4:13.2.0-7ubuntu1 [1212 B] 259s Get:168 http://ftpmaster.internal/ubuntu noble/main amd64 gcc amd64 4:13.2.0-7ubuntu1 [5018 B] 259s Get:169 http://ftpmaster.internal/ubuntu noble/universe amd64 gdb-multiarch amd64 15.0.50.20240403-0ubuntu1 [5152 kB] 259s Get:170 http://ftpmaster.internal/ubuntu noble/main amd64 librsvg2-2 amd64 2.58.0+dfsg-1build1 [2135 kB] 259s Get:171 http://ftpmaster.internal/ubuntu noble/main amd64 librsvg2-common amd64 2.58.0+dfsg-1build1 [11.8 kB] 259s Get:172 http://ftpmaster.internal/ubuntu noble/universe amd64 gnome-icon-theme all 3.12.0-5 [9619 kB] 259s Get:173 http://ftpmaster.internal/ubuntu noble-updates/main amd64 gvfs-common all 1.54.4-0ubuntu1~24.04.1 [13.7 kB] 259s Get:174 http://ftpmaster.internal/ubuntu noble/main amd64 libgck-2-2 amd64 4.2.0-5 [77.0 kB] 259s Get:175 http://ftpmaster.internal/ubuntu noble/main amd64 libgcr-4-4 amd64 4.2.0-5 [192 kB] 259s Get:176 http://ftpmaster.internal/ubuntu noble/main amd64 libsecret-common all 0.21.4-1build3 [4962 B] 259s Get:177 http://ftpmaster.internal/ubuntu noble/main amd64 libsecret-1-0 amd64 0.21.4-1build3 [116 kB] 259s Get:178 http://ftpmaster.internal/ubuntu noble-updates/main amd64 gvfs-libs amd64 1.54.4-0ubuntu1~24.04.1 [107 kB] 259s Get:179 http://ftpmaster.internal/ubuntu noble-updates/main amd64 gvfs-daemons amd64 1.54.4-0ubuntu1~24.04.1 [116 kB] 259s Get:180 http://ftpmaster.internal/ubuntu noble/main amd64 libfontenc1 amd64 1:1.1.8-1build1 [14.0 kB] 259s Get:181 http://ftpmaster.internal/ubuntu noble/main amd64 libxt6t64 amd64 1:1.2.1-1.2build1 [171 kB] 259s Get:182 http://ftpmaster.internal/ubuntu noble/main amd64 libxmu6 amd64 2:1.1.3-3build2 [47.6 kB] 259s Get:183 http://ftpmaster.internal/ubuntu noble/main amd64 libxaw7 amd64 2:1.0.14-1build2 [187 kB] 259s Get:184 http://ftpmaster.internal/ubuntu noble/main amd64 libxfont2 amd64 1:2.0.6-1build1 [93.0 kB] 259s Get:185 http://ftpmaster.internal/ubuntu noble/main amd64 libxkbfile1 amd64 1:1.1.0-1build4 [70.0 kB] 259s Get:186 http://ftpmaster.internal/ubuntu noble/universe amd64 python3-iniconfig all 1.1.1-2 [6024 B] 259s Get:187 http://ftpmaster.internal/ubuntu noble/main amd64 python3-packaging all 24.0-1 [41.1 kB] 259s Get:188 http://ftpmaster.internal/ubuntu noble/universe amd64 python3-pluggy all 1.4.0-1 [20.4 kB] 259s Get:189 http://ftpmaster.internal/ubuntu noble/main amd64 python3-psutil amd64 5.9.8-2build2 [195 kB] 259s Get:190 http://ftpmaster.internal/ubuntu noble/universe amd64 python3-pytest all 7.4.4-1 [305 kB] 259s Get:191 http://ftpmaster.internal/ubuntu noble/main amd64 ubuntu-dbgsym-keyring all 2023.11.28.1 [4528 B] 259s Get:192 http://ftpmaster.internal/ubuntu noble/main amd64 x11-xkb-utils amd64 7.7+8build2 [170 kB] 259s Get:193 http://ftpmaster.internal/ubuntu noble-updates/main amd64 xserver-common all 2:21.1.12-1ubuntu1.5 [34.6 kB] 259s Get:194 http://ftpmaster.internal/ubuntu noble-updates/universe amd64 xvfb amd64 2:21.1.12-1ubuntu1.5 [877 kB] 260s Preconfiguring packages ... 260s Fetched 163 MB in 5s (34.4 MB/s) 260s Selecting previously unselected package libdebuginfod-common. 260s (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 106381 files and directories currently installed.) 260s Preparing to unpack .../000-libdebuginfod-common_0.190-1.1ubuntu0.1_all.deb ... 260s Unpacking libdebuginfod-common (0.190-1.1ubuntu0.1) ... 260s Selecting previously unselected package libgdk-pixbuf2.0-common. 260s Preparing to unpack .../001-libgdk-pixbuf2.0-common_2.42.10+dfsg-3ubuntu3.2_all.deb ... 260s Unpacking libgdk-pixbuf2.0-common (2.42.10+dfsg-3ubuntu3.2) ... 260s Selecting previously unselected package libgdk-pixbuf-2.0-0:amd64. 260s Preparing to unpack .../002-libgdk-pixbuf-2.0-0_2.42.10+dfsg-3ubuntu3.2_amd64.deb ... 260s Unpacking libgdk-pixbuf-2.0-0:amd64 (2.42.10+dfsg-3ubuntu3.2) ... 260s Selecting previously unselected package gtk-update-icon-cache. 260s Preparing to unpack .../003-gtk-update-icon-cache_3.24.41-4ubuntu1.3_amd64.deb ... 260s Unpacking gtk-update-icon-cache (3.24.41-4ubuntu1.3) ... 260s Selecting previously unselected package hicolor-icon-theme. 260s Preparing to unpack .../004-hicolor-icon-theme_0.17-2_all.deb ... 260s Unpacking hicolor-icon-theme (0.17-2) ... 260s Selecting previously unselected package humanity-icon-theme. 260s Preparing to unpack .../005-humanity-icon-theme_0.6.16_all.deb ... 260s Unpacking humanity-icon-theme (0.6.16) ... 261s Selecting previously unselected package ubuntu-mono. 261s Preparing to unpack .../006-ubuntu-mono_24.04-0ubuntu1_all.deb ... 261s Unpacking ubuntu-mono (24.04-0ubuntu1) ... 261s Selecting previously unselected package adwaita-icon-theme. 261s Preparing to unpack .../007-adwaita-icon-theme_46.0-1_all.deb ... 261s Unpacking adwaita-icon-theme (46.0-1) ... 261s Selecting previously unselected package at-spi2-common. 261s Preparing to unpack .../008-at-spi2-common_2.52.0-1build1_all.deb ... 261s Unpacking at-spi2-common (2.52.0-1build1) ... 261s Selecting previously unselected package libatk1.0-0t64:amd64. 261s Preparing to unpack .../009-libatk1.0-0t64_2.52.0-1build1_amd64.deb ... 261s Unpacking libatk1.0-0t64:amd64 (2.52.0-1build1) ... 261s Selecting previously unselected package gir1.2-atk-1.0:amd64. 261s Preparing to unpack .../010-gir1.2-atk-1.0_2.52.0-1build1_amd64.deb ... 261s Unpacking gir1.2-atk-1.0:amd64 (2.52.0-1build1) ... 261s Selecting previously unselected package libpixman-1-0:amd64. 261s Preparing to unpack .../011-libpixman-1-0_0.42.2-1build1_amd64.deb ... 261s Unpacking libpixman-1-0:amd64 (0.42.2-1build1) ... 261s Selecting previously unselected package libxcb-render0:amd64. 261s Preparing to unpack .../012-libxcb-render0_1.15-1ubuntu2_amd64.deb ... 261s Unpacking libxcb-render0:amd64 (1.15-1ubuntu2) ... 261s Selecting previously unselected package libxcb-shm0:amd64. 261s Preparing to unpack .../013-libxcb-shm0_1.15-1ubuntu2_amd64.deb ... 261s Unpacking libxcb-shm0:amd64 (1.15-1ubuntu2) ... 261s Selecting previously unselected package libxrender1:amd64. 261s Preparing to unpack .../014-libxrender1_1%3a0.9.10-1.1build1_amd64.deb ... 261s Unpacking libxrender1:amd64 (1:0.9.10-1.1build1) ... 261s Selecting previously unselected package libcairo2:amd64. 261s Preparing to unpack .../015-libcairo2_1.18.0-3build1_amd64.deb ... 261s Unpacking libcairo2:amd64 (1.18.0-3build1) ... 261s Selecting previously unselected package libcairo-gobject2:amd64. 261s Preparing to unpack .../016-libcairo-gobject2_1.18.0-3build1_amd64.deb ... 261s Unpacking libcairo-gobject2:amd64 (1.18.0-3build1) ... 261s Selecting previously unselected package gir1.2-freedesktop:amd64. 261s Preparing to unpack .../017-gir1.2-freedesktop_1.80.1-1_amd64.deb ... 261s Unpacking gir1.2-freedesktop:amd64 (1.80.1-1) ... 261s Selecting previously unselected package gir1.2-gdkpixbuf-2.0:amd64. 261s Preparing to unpack .../018-gir1.2-gdkpixbuf-2.0_2.42.10+dfsg-3ubuntu3.2_amd64.deb ... 261s Unpacking gir1.2-gdkpixbuf-2.0:amd64 (2.42.10+dfsg-3ubuntu3.2) ... 261s Selecting previously unselected package libgraphite2-3:amd64. 261s Preparing to unpack .../019-libgraphite2-3_1.3.14-2build1_amd64.deb ... 261s Unpacking libgraphite2-3:amd64 (1.3.14-2build1) ... 261s Selecting previously unselected package libharfbuzz0b:amd64. 261s Preparing to unpack .../020-libharfbuzz0b_8.3.0-2build2_amd64.deb ... 261s Unpacking libharfbuzz0b:amd64 (8.3.0-2build2) ... 261s Selecting previously unselected package libharfbuzz-gobject0:amd64. 261s Preparing to unpack .../021-libharfbuzz-gobject0_8.3.0-2build2_amd64.deb ... 261s Unpacking libharfbuzz-gobject0:amd64 (8.3.0-2build2) ... 261s Selecting previously unselected package gir1.2-harfbuzz-0.0:amd64. 261s Preparing to unpack .../022-gir1.2-harfbuzz-0.0_8.3.0-2build2_amd64.deb ... 261s Unpacking gir1.2-harfbuzz-0.0:amd64 (8.3.0-2build2) ... 261s Selecting previously unselected package fontconfig. 261s Preparing to unpack .../023-fontconfig_2.15.0-1.1ubuntu2_amd64.deb ... 261s Unpacking fontconfig (2.15.0-1.1ubuntu2) ... 261s Selecting previously unselected package libthai-data. 261s Preparing to unpack .../024-libthai-data_0.1.29-2build1_all.deb ... 261s Unpacking libthai-data (0.1.29-2build1) ... 261s Selecting previously unselected package libdatrie1:amd64. 261s Preparing to unpack .../025-libdatrie1_0.2.13-3build1_amd64.deb ... 261s Unpacking libdatrie1:amd64 (0.2.13-3build1) ... 261s Selecting previously unselected package libthai0:amd64. 261s Preparing to unpack .../026-libthai0_0.1.29-2build1_amd64.deb ... 261s Unpacking libthai0:amd64 (0.1.29-2build1) ... 261s Selecting previously unselected package libpango-1.0-0:amd64. 261s Preparing to unpack .../027-libpango-1.0-0_1.52.1+ds-1build1_amd64.deb ... 261s Unpacking libpango-1.0-0:amd64 (1.52.1+ds-1build1) ... 261s Selecting previously unselected package libpangoft2-1.0-0:amd64. 261s Preparing to unpack .../028-libpangoft2-1.0-0_1.52.1+ds-1build1_amd64.deb ... 261s Unpacking libpangoft2-1.0-0:amd64 (1.52.1+ds-1build1) ... 261s Selecting previously unselected package libpangocairo-1.0-0:amd64. 261s Preparing to unpack .../029-libpangocairo-1.0-0_1.52.1+ds-1build1_amd64.deb ... 261s Unpacking libpangocairo-1.0-0:amd64 (1.52.1+ds-1build1) ... 261s Selecting previously unselected package libxft2:amd64. 261s Preparing to unpack .../030-libxft2_2.3.6-1build1_amd64.deb ... 261s Unpacking libxft2:amd64 (2.3.6-1build1) ... 261s Selecting previously unselected package libpangoxft-1.0-0:amd64. 261s Preparing to unpack .../031-libpangoxft-1.0-0_1.52.1+ds-1build1_amd64.deb ... 261s Unpacking libpangoxft-1.0-0:amd64 (1.52.1+ds-1build1) ... 261s Selecting previously unselected package gir1.2-pango-1.0:amd64. 261s Preparing to unpack .../032-gir1.2-pango-1.0_1.52.1+ds-1build1_amd64.deb ... 261s Unpacking gir1.2-pango-1.0:amd64 (1.52.1+ds-1build1) ... 261s Selecting previously unselected package libxi6:amd64. 261s Preparing to unpack .../033-libxi6_2%3a1.8.1-1build1_amd64.deb ... 261s Unpacking libxi6:amd64 (2:1.8.1-1build1) ... 261s Selecting previously unselected package libatspi2.0-0t64:amd64. 261s Preparing to unpack .../034-libatspi2.0-0t64_2.52.0-1build1_amd64.deb ... 261s Unpacking libatspi2.0-0t64:amd64 (2.52.0-1build1) ... 261s Selecting previously unselected package libatk-bridge2.0-0t64:amd64. 261s Preparing to unpack .../035-libatk-bridge2.0-0t64_2.52.0-1build1_amd64.deb ... 261s Unpacking libatk-bridge2.0-0t64:amd64 (2.52.0-1build1) ... 262s Selecting previously unselected package liblcms2-2:amd64. 262s Preparing to unpack .../036-liblcms2-2_2.14-2build1_amd64.deb ... 262s Unpacking liblcms2-2:amd64 (2.14-2build1) ... 262s Selecting previously unselected package libcolord2:amd64. 262s Preparing to unpack .../037-libcolord2_1.4.7-1build2_amd64.deb ... 262s Unpacking libcolord2:amd64 (1.4.7-1build2) ... 262s Selecting previously unselected package libavahi-common-data:amd64. 262s Preparing to unpack .../038-libavahi-common-data_0.8-13ubuntu6_amd64.deb ... 262s Unpacking libavahi-common-data:amd64 (0.8-13ubuntu6) ... 262s Selecting previously unselected package libavahi-common3:amd64. 262s Preparing to unpack .../039-libavahi-common3_0.8-13ubuntu6_amd64.deb ... 262s Unpacking libavahi-common3:amd64 (0.8-13ubuntu6) ... 262s Selecting previously unselected package libavahi-client3:amd64. 262s Preparing to unpack .../040-libavahi-client3_0.8-13ubuntu6_amd64.deb ... 262s Unpacking libavahi-client3:amd64 (0.8-13ubuntu6) ... 262s Selecting previously unselected package libcups2t64:amd64. 262s Preparing to unpack .../041-libcups2t64_2.4.7-1.2ubuntu7.4_amd64.deb ... 262s Unpacking libcups2t64:amd64 (2.4.7-1.2ubuntu7.4) ... 262s Selecting previously unselected package libepoxy0:amd64. 262s Preparing to unpack .../042-libepoxy0_1.5.10-1build1_amd64.deb ... 262s Unpacking libepoxy0:amd64 (1.5.10-1build1) ... 262s Selecting previously unselected package libwayland-client0:amd64. 262s Preparing to unpack .../043-libwayland-client0_1.22.0-2.1build1_amd64.deb ... 262s Unpacking libwayland-client0:amd64 (1.22.0-2.1build1) ... 262s Selecting previously unselected package libwayland-cursor0:amd64. 262s Preparing to unpack .../044-libwayland-cursor0_1.22.0-2.1build1_amd64.deb ... 262s Unpacking libwayland-cursor0:amd64 (1.22.0-2.1build1) ... 262s Selecting previously unselected package libwayland-egl1:amd64. 262s Preparing to unpack .../045-libwayland-egl1_1.22.0-2.1build1_amd64.deb ... 262s Unpacking libwayland-egl1:amd64 (1.22.0-2.1build1) ... 262s Selecting previously unselected package libxcomposite1:amd64. 262s Preparing to unpack .../046-libxcomposite1_1%3a0.4.5-1build3_amd64.deb ... 262s Unpacking libxcomposite1:amd64 (1:0.4.5-1build3) ... 262s Selecting previously unselected package libxfixes3:amd64. 262s Preparing to unpack .../047-libxfixes3_1%3a6.0.0-2build1_amd64.deb ... 262s Unpacking libxfixes3:amd64 (1:6.0.0-2build1) ... 262s Selecting previously unselected package libxcursor1:amd64. 262s Preparing to unpack .../048-libxcursor1_1%3a1.2.1-1build1_amd64.deb ... 262s Unpacking libxcursor1:amd64 (1:1.2.1-1build1) ... 262s Selecting previously unselected package libxdamage1:amd64. 262s Preparing to unpack .../049-libxdamage1_1%3a1.1.6-1build1_amd64.deb ... 262s Unpacking libxdamage1:amd64 (1:1.1.6-1build1) ... 262s Selecting previously unselected package libxinerama1:amd64. 262s Preparing to unpack .../050-libxinerama1_2%3a1.1.4-3build1_amd64.deb ... 262s Unpacking libxinerama1:amd64 (2:1.1.4-3build1) ... 262s Selecting previously unselected package libxrandr2:amd64. 262s Preparing to unpack .../051-libxrandr2_2%3a1.5.2-2build1_amd64.deb ... 262s Unpacking libxrandr2:amd64 (2:1.5.2-2build1) ... 262s Selecting previously unselected package dbus-x11. 262s Preparing to unpack .../052-dbus-x11_1.14.10-4ubuntu4.1_amd64.deb ... 262s Unpacking dbus-x11 (1.14.10-4ubuntu4.1) ... 262s Selecting previously unselected package libdconf1:amd64. 262s Preparing to unpack .../053-libdconf1_0.40.0-4ubuntu0.1_amd64.deb ... 262s Unpacking libdconf1:amd64 (0.40.0-4ubuntu0.1) ... 262s Selecting previously unselected package dconf-service. 262s Preparing to unpack .../054-dconf-service_0.40.0-4ubuntu0.1_amd64.deb ... 262s Unpacking dconf-service (0.40.0-4ubuntu0.1) ... 262s Selecting previously unselected package dconf-gsettings-backend:amd64. 262s Preparing to unpack .../055-dconf-gsettings-backend_0.40.0-4ubuntu0.1_amd64.deb ... 262s Unpacking dconf-gsettings-backend:amd64 (0.40.0-4ubuntu0.1) ... 262s Selecting previously unselected package libgtk-3-common. 262s Preparing to unpack .../056-libgtk-3-common_3.24.41-4ubuntu1.3_all.deb ... 262s Unpacking libgtk-3-common (3.24.41-4ubuntu1.3) ... 262s Selecting previously unselected package libgtk-3-0t64:amd64. 262s Preparing to unpack .../057-libgtk-3-0t64_3.24.41-4ubuntu1.3_amd64.deb ... 262s Unpacking libgtk-3-0t64:amd64 (3.24.41-4ubuntu1.3) ... 262s Selecting previously unselected package gir1.2-gtk-3.0:amd64. 262s Preparing to unpack .../058-gir1.2-gtk-3.0_3.24.41-4ubuntu1.3_amd64.deb ... 262s Unpacking gir1.2-gtk-3.0:amd64 (3.24.41-4ubuntu1.3) ... 262s Selecting previously unselected package libx11-xcb1:amd64. 262s Preparing to unpack .../059-libx11-xcb1_2%3a1.8.7-1build1_amd64.deb ... 262s Unpacking libx11-xcb1:amd64 (2:1.8.7-1build1) ... 262s Selecting previously unselected package libxcb-util1:amd64. 262s Preparing to unpack .../060-libxcb-util1_0.4.0-1build3_amd64.deb ... 262s Unpacking libxcb-util1:amd64 (0.4.0-1build3) ... 262s Selecting previously unselected package libstartup-notification0:amd64. 262s Preparing to unpack .../061-libstartup-notification0_0.12-6build3_amd64.deb ... 262s Unpacking libstartup-notification0:amd64 (0.12-6build3) ... 262s Selecting previously unselected package libxres1:amd64. 262s Preparing to unpack .../062-libxres1_2%3a1.2.1-1build1_amd64.deb ... 262s Unpacking libxres1:amd64 (2:1.2.1-1build1) ... 262s Selecting previously unselected package libwnck-3-common. 262s Preparing to unpack .../063-libwnck-3-common_43.0-3build4_all.deb ... 262s Unpacking libwnck-3-common (43.0-3build4) ... 262s Selecting previously unselected package libwnck-3-0:amd64. 262s Preparing to unpack .../064-libwnck-3-0_43.0-3build4_amd64.deb ... 262s Unpacking libwnck-3-0:amd64 (43.0-3build4) ... 262s Selecting previously unselected package gir1.2-wnck-3.0:amd64. 262s Preparing to unpack .../065-gir1.2-wnck-3.0_43.0-3build4_amd64.deb ... 262s Unpacking gir1.2-wnck-3.0:amd64 (43.0-3build4) ... 262s Selecting previously unselected package gnome-terminal-data. 262s Preparing to unpack .../066-gnome-terminal-data_3.52.0-1ubuntu2_all.deb ... 262s Unpacking gnome-terminal-data (3.52.0-1ubuntu2) ... 262s Selecting previously unselected package session-migration. 262s Preparing to unpack .../067-session-migration_0.3.9build1_amd64.deb ... 262s Unpacking session-migration (0.3.9build1) ... 262s Selecting previously unselected package gsettings-desktop-schemas. 262s Preparing to unpack .../068-gsettings-desktop-schemas_46.1-0ubuntu1_all.deb ... 262s Unpacking gsettings-desktop-schemas (46.1-0ubuntu1) ... 262s Selecting previously unselected package libhandy-1-0:amd64. 262s Preparing to unpack .../069-libhandy-1-0_1.8.3-1build2_amd64.deb ... 262s Unpacking libhandy-1-0:amd64 (1.8.3-1build2) ... 262s Selecting previously unselected package libvte-2.91-common. 262s Preparing to unpack .../070-libvte-2.91-common_0.76.0-1ubuntu0.1_amd64.deb ... 262s Unpacking libvte-2.91-common (0.76.0-1ubuntu0.1) ... 262s Selecting previously unselected package libvte-2.91-0:amd64. 262s Preparing to unpack .../071-libvte-2.91-0_0.76.0-1ubuntu0.1_amd64.deb ... 262s Unpacking libvte-2.91-0:amd64 (0.76.0-1ubuntu0.1) ... 262s Selecting previously unselected package gnome-terminal. 262s Preparing to unpack .../072-gnome-terminal_3.52.0-1ubuntu2_amd64.deb ... 262s Unpacking gnome-terminal (3.52.0-1ubuntu2) ... 262s Selecting previously unselected package libwhoopsie-preferences0. 262s Preparing to unpack .../073-libwhoopsie-preferences0_23build3_amd64.deb ... 262s Unpacking libwhoopsie-preferences0 (23build3) ... 262s Selecting previously unselected package libwhoopsie0:amd64. 262s Preparing to unpack .../074-libwhoopsie0_0.2.77build3_amd64.deb ... 262s Unpacking libwhoopsie0:amd64 (0.2.77build3) ... 262s Selecting previously unselected package whoopsie-preferences. 262s Preparing to unpack .../075-whoopsie-preferences_23build3_amd64.deb ... 262s Unpacking whoopsie-preferences (23build3) ... 262s Selecting previously unselected package apport-gtk. 262s Preparing to unpack .../076-apport-gtk_2.28.1-0ubuntu3.8_all.deb ... 262s Unpacking apport-gtk (2.28.1-0ubuntu3.8) ... 262s Selecting previously unselected package python3-pyqt5.sip. 262s Preparing to unpack .../077-python3-pyqt5.sip_12.13.0-1build3_amd64.deb ... 262s Unpacking python3-pyqt5.sip (12.13.0-1build3) ... 262s Selecting previously unselected package libdouble-conversion3:amd64. 262s Preparing to unpack .../078-libdouble-conversion3_3.3.0-1build1_amd64.deb ... 262s Unpacking libdouble-conversion3:amd64 (3.3.0-1build1) ... 262s Selecting previously unselected package libpcre2-16-0:amd64. 262s Preparing to unpack .../079-libpcre2-16-0_10.42-4ubuntu2.1_amd64.deb ... 262s Unpacking libpcre2-16-0:amd64 (10.42-4ubuntu2.1) ... 262s Selecting previously unselected package libqt5core5t64:amd64. 262s Preparing to unpack .../080-libqt5core5t64_5.15.13+dfsg-1ubuntu1_amd64.deb ... 262s Unpacking libqt5core5t64:amd64 (5.15.13+dfsg-1ubuntu1) ... 262s Selecting previously unselected package libqt5dbus5t64:amd64. 262s Preparing to unpack .../081-libqt5dbus5t64_5.15.13+dfsg-1ubuntu1_amd64.deb ... 262s Unpacking libqt5dbus5t64:amd64 (5.15.13+dfsg-1ubuntu1) ... 263s Selecting previously unselected package libglvnd0:amd64. 263s Preparing to unpack .../082-libglvnd0_1.7.0-1build1_amd64.deb ... 263s Unpacking libglvnd0:amd64 (1.7.0-1build1) ... 263s Selecting previously unselected package libwayland-server0:amd64. 263s Preparing to unpack .../083-libwayland-server0_1.22.0-2.1build1_amd64.deb ... 263s Unpacking libwayland-server0:amd64 (1.22.0-2.1build1) ... 263s Selecting previously unselected package libdrm-amdgpu1:amd64. 263s Preparing to unpack .../084-libdrm-amdgpu1_2.4.122-1~ubuntu0.24.04.1_amd64.deb ... 263s Unpacking libdrm-amdgpu1:amd64 (2.4.122-1~ubuntu0.24.04.1) ... 263s Selecting previously unselected package libpciaccess0:amd64. 263s Preparing to unpack .../085-libpciaccess0_0.17-3ubuntu0.24.04.2_amd64.deb ... 263s Unpacking libpciaccess0:amd64 (0.17-3ubuntu0.24.04.2) ... 263s Selecting previously unselected package libdrm-intel1:amd64. 263s Preparing to unpack .../086-libdrm-intel1_2.4.122-1~ubuntu0.24.04.1_amd64.deb ... 263s Unpacking libdrm-intel1:amd64 (2.4.122-1~ubuntu0.24.04.1) ... 263s Selecting previously unselected package libllvm20:amd64. 263s Preparing to unpack .../087-libllvm20_1%3a20.1.2-0ubuntu1~24.04.2_amd64.deb ... 263s Unpacking libllvm20:amd64 (1:20.1.2-0ubuntu1~24.04.2) ... 263s Selecting previously unselected package libxcb-dri3-0:amd64. 263s Preparing to unpack .../088-libxcb-dri3-0_1.15-1ubuntu2_amd64.deb ... 263s Unpacking libxcb-dri3-0:amd64 (1.15-1ubuntu2) ... 263s Selecting previously unselected package libxcb-present0:amd64. 263s Preparing to unpack .../089-libxcb-present0_1.15-1ubuntu2_amd64.deb ... 263s Unpacking libxcb-present0:amd64 (1.15-1ubuntu2) ... 263s Selecting previously unselected package libxcb-randr0:amd64. 263s Preparing to unpack .../090-libxcb-randr0_1.15-1ubuntu2_amd64.deb ... 263s Unpacking libxcb-randr0:amd64 (1.15-1ubuntu2) ... 263s Selecting previously unselected package libxcb-sync1:amd64. 263s Preparing to unpack .../091-libxcb-sync1_1.15-1ubuntu2_amd64.deb ... 263s Unpacking libxcb-sync1:amd64 (1.15-1ubuntu2) ... 263s Selecting previously unselected package libxcb-xfixes0:amd64. 263s Preparing to unpack .../092-libxcb-xfixes0_1.15-1ubuntu2_amd64.deb ... 263s Unpacking libxcb-xfixes0:amd64 (1.15-1ubuntu2) ... 263s Selecting previously unselected package libxshmfence1:amd64. 263s Preparing to unpack .../093-libxshmfence1_1.3-1build5_amd64.deb ... 263s Unpacking libxshmfence1:amd64 (1.3-1build5) ... 263s Selecting previously unselected package mesa-libgallium:amd64. 263s Preparing to unpack .../094-mesa-libgallium_25.0.7-0ubuntu0.24.04.2_amd64.deb ... 263s Unpacking mesa-libgallium:amd64 (25.0.7-0ubuntu0.24.04.2) ... 263s Selecting previously unselected package libgbm1:amd64. 263s Preparing to unpack .../095-libgbm1_25.0.7-0ubuntu0.24.04.2_amd64.deb ... 263s Unpacking libgbm1:amd64 (25.0.7-0ubuntu0.24.04.2) ... 263s Selecting previously unselected package libegl-mesa0:amd64. 263s Preparing to unpack .../096-libegl-mesa0_25.0.7-0ubuntu0.24.04.2_amd64.deb ... 263s Unpacking libegl-mesa0:amd64 (25.0.7-0ubuntu0.24.04.2) ... 263s Selecting previously unselected package libegl1:amd64. 263s Preparing to unpack .../097-libegl1_1.7.0-1build1_amd64.deb ... 263s Unpacking libegl1:amd64 (1.7.0-1build1) ... 263s Selecting previously unselected package libxcb-glx0:amd64. 263s Preparing to unpack .../098-libxcb-glx0_1.15-1ubuntu2_amd64.deb ... 263s Unpacking libxcb-glx0:amd64 (1.15-1ubuntu2) ... 263s Selecting previously unselected package libxxf86vm1:amd64. 263s Preparing to unpack .../099-libxxf86vm1_1%3a1.1.4-1build4_amd64.deb ... 263s Unpacking libxxf86vm1:amd64 (1:1.1.4-1build4) ... 263s Selecting previously unselected package libvulkan1:amd64. 263s Preparing to unpack .../100-libvulkan1_1.3.275.0-1build1_amd64.deb ... 263s Unpacking libvulkan1:amd64 (1.3.275.0-1build1) ... 263s Selecting previously unselected package libgl1-mesa-dri:amd64. 263s Preparing to unpack .../101-libgl1-mesa-dri_25.0.7-0ubuntu0.24.04.2_amd64.deb ... 263s Unpacking libgl1-mesa-dri:amd64 (25.0.7-0ubuntu0.24.04.2) ... 263s Selecting previously unselected package libglx-mesa0:amd64. 263s Preparing to unpack .../102-libglx-mesa0_25.0.7-0ubuntu0.24.04.2_amd64.deb ... 263s Unpacking libglx-mesa0:amd64 (25.0.7-0ubuntu0.24.04.2) ... 263s Selecting previously unselected package libglx0:amd64. 263s Preparing to unpack .../103-libglx0_1.7.0-1build1_amd64.deb ... 263s Unpacking libglx0:amd64 (1.7.0-1build1) ... 264s Selecting previously unselected package libgl1:amd64. 264s Preparing to unpack .../104-libgl1_1.7.0-1build1_amd64.deb ... 264s Unpacking libgl1:amd64 (1.7.0-1build1) ... 264s Selecting previously unselected package x11-common. 264s Preparing to unpack .../105-x11-common_1%3a7.7+23ubuntu3_all.deb ... 264s Unpacking x11-common (1:7.7+23ubuntu3) ... 264s Selecting previously unselected package libice6:amd64. 264s Preparing to unpack .../106-libice6_2%3a1.0.10-1build3_amd64.deb ... 264s Unpacking libice6:amd64 (2:1.0.10-1build3) ... 264s Selecting previously unselected package libmtdev1t64:amd64. 264s Preparing to unpack .../107-libmtdev1t64_1.1.6-1.1build1_amd64.deb ... 264s Unpacking libmtdev1t64:amd64 (1.1.6-1.1build1) ... 264s Selecting previously unselected package libwacom-common. 264s Preparing to unpack .../108-libwacom-common_2.10.0-2_all.deb ... 264s Unpacking libwacom-common (2.10.0-2) ... 264s Selecting previously unselected package libwacom9:amd64. 264s Preparing to unpack .../109-libwacom9_2.10.0-2_amd64.deb ... 264s Unpacking libwacom9:amd64 (2.10.0-2) ... 264s Selecting previously unselected package libinput-bin. 264s Preparing to unpack .../110-libinput-bin_1.25.0-1ubuntu3.1_amd64.deb ... 264s Unpacking libinput-bin (1.25.0-1ubuntu3.1) ... 264s Selecting previously unselected package libinput10:amd64. 264s Preparing to unpack .../111-libinput10_1.25.0-1ubuntu3.1_amd64.deb ... 264s Unpacking libinput10:amd64 (1.25.0-1ubuntu3.1) ... 264s Selecting previously unselected package libmd4c0:amd64. 264s Preparing to unpack .../112-libmd4c0_0.4.8-1build1_amd64.deb ... 264s Unpacking libmd4c0:amd64 (0.4.8-1build1) ... 264s Selecting previously unselected package libqt5network5t64:amd64. 264s Preparing to unpack .../113-libqt5network5t64_5.15.13+dfsg-1ubuntu1_amd64.deb ... 264s Unpacking libqt5network5t64:amd64 (5.15.13+dfsg-1ubuntu1) ... 264s Selecting previously unselected package libsm6:amd64. 264s Preparing to unpack .../114-libsm6_2%3a1.2.3-1build3_amd64.deb ... 264s Unpacking libsm6:amd64 (2:1.2.3-1build3) ... 264s Selecting previously unselected package libxcb-icccm4:amd64. 264s Preparing to unpack .../115-libxcb-icccm4_0.4.1-1.1build3_amd64.deb ... 264s Unpacking libxcb-icccm4:amd64 (0.4.1-1.1build3) ... 264s Selecting previously unselected package libxcb-image0:amd64. 264s Preparing to unpack .../116-libxcb-image0_0.4.0-2build1_amd64.deb ... 264s Unpacking libxcb-image0:amd64 (0.4.0-2build1) ... 264s Selecting previously unselected package libxcb-keysyms1:amd64. 264s Preparing to unpack .../117-libxcb-keysyms1_0.4.0-1build4_amd64.deb ... 264s Unpacking libxcb-keysyms1:amd64 (0.4.0-1build4) ... 264s Selecting previously unselected package libxcb-render-util0:amd64. 264s Preparing to unpack .../118-libxcb-render-util0_0.3.9-1build4_amd64.deb ... 264s Unpacking libxcb-render-util0:amd64 (0.3.9-1build4) ... 264s Selecting previously unselected package libxcb-shape0:amd64. 264s Preparing to unpack .../119-libxcb-shape0_1.15-1ubuntu2_amd64.deb ... 264s Unpacking libxcb-shape0:amd64 (1.15-1ubuntu2) ... 264s Selecting previously unselected package libxcb-xinerama0:amd64. 264s Preparing to unpack .../120-libxcb-xinerama0_1.15-1ubuntu2_amd64.deb ... 264s Unpacking libxcb-xinerama0:amd64 (1.15-1ubuntu2) ... 264s Selecting previously unselected package libxcb-xinput0:amd64. 264s Preparing to unpack .../121-libxcb-xinput0_1.15-1ubuntu2_amd64.deb ... 264s Unpacking libxcb-xinput0:amd64 (1.15-1ubuntu2) ... 264s Selecting previously unselected package libxcb-xkb1:amd64. 264s Preparing to unpack .../122-libxcb-xkb1_1.15-1ubuntu2_amd64.deb ... 264s Unpacking libxcb-xkb1:amd64 (1.15-1ubuntu2) ... 264s Selecting previously unselected package libxkbcommon-x11-0:amd64. 264s Preparing to unpack .../123-libxkbcommon-x11-0_1.6.0-1build1_amd64.deb ... 264s Unpacking libxkbcommon-x11-0:amd64 (1.6.0-1build1) ... 264s Selecting previously unselected package libqt5gui5t64:amd64. 264s Preparing to unpack .../124-libqt5gui5t64_5.15.13+dfsg-1ubuntu1_amd64.deb ... 264s Unpacking libqt5gui5t64:amd64 (5.15.13+dfsg-1ubuntu1) ... 264s Selecting previously unselected package libqt5widgets5t64:amd64. 264s Preparing to unpack .../125-libqt5widgets5t64_5.15.13+dfsg-1ubuntu1_amd64.deb ... 264s Unpacking libqt5widgets5t64:amd64 (5.15.13+dfsg-1ubuntu1) ... 264s Selecting previously unselected package libqt5xml5t64:amd64. 264s Preparing to unpack .../126-libqt5xml5t64_5.15.13+dfsg-1ubuntu1_amd64.deb ... 264s Unpacking libqt5xml5t64:amd64 (5.15.13+dfsg-1ubuntu1) ... 264s Selecting previously unselected package libqt5designer5:amd64. 264s Preparing to unpack .../127-libqt5designer5_5.15.13-1_amd64.deb ... 264s Unpacking libqt5designer5:amd64 (5.15.13-1) ... 264s Selecting previously unselected package libqt5sql5t64:amd64. 264s Preparing to unpack .../128-libqt5sql5t64_5.15.13+dfsg-1ubuntu1_amd64.deb ... 264s Unpacking libqt5sql5t64:amd64 (5.15.13+dfsg-1ubuntu1) ... 264s Selecting previously unselected package libqt5help5:amd64. 264s Preparing to unpack .../129-libqt5help5_5.15.13-1_amd64.deb ... 264s Unpacking libqt5help5:amd64 (5.15.13-1) ... 264s Selecting previously unselected package libqt5printsupport5t64:amd64. 264s Preparing to unpack .../130-libqt5printsupport5t64_5.15.13+dfsg-1ubuntu1_amd64.deb ... 264s Unpacking libqt5printsupport5t64:amd64 (5.15.13+dfsg-1ubuntu1) ... 264s Selecting previously unselected package libqt5test5t64:amd64. 264s Preparing to unpack .../131-libqt5test5t64_5.15.13+dfsg-1ubuntu1_amd64.deb ... 264s Unpacking libqt5test5t64:amd64 (5.15.13+dfsg-1ubuntu1) ... 264s Selecting previously unselected package python3-pyqt5. 264s Preparing to unpack .../132-python3-pyqt5_5.15.10+dfsg-1build6_amd64.deb ... 264s Unpacking python3-pyqt5 (5.15.10+dfsg-1build6) ... 264s Selecting previously unselected package apport-kde. 264s Preparing to unpack .../133-apport-kde_2.28.1-0ubuntu3.8_all.deb ... 264s Unpacking apport-kde (2.28.1-0ubuntu3.8) ... 264s Selecting previously unselected package libbabeltrace1:amd64. 264s Preparing to unpack .../134-libbabeltrace1_1.5.11-3build3_amd64.deb ... 264s Unpacking libbabeltrace1:amd64 (1.5.11-3build3) ... 264s Selecting previously unselected package libdebuginfod1t64:amd64. 264s Preparing to unpack .../135-libdebuginfod1t64_0.190-1.1ubuntu0.1_amd64.deb ... 264s Unpacking libdebuginfod1t64:amd64 (0.190-1.1ubuntu0.1) ... 264s Selecting previously unselected package libipt2. 264s Preparing to unpack .../136-libipt2_2.0.6-1build1_amd64.deb ... 264s Unpacking libipt2 (2.0.6-1build1) ... 264s Selecting previously unselected package libsource-highlight-common. 264s Preparing to unpack .../137-libsource-highlight-common_3.1.9-4.3build1_all.deb ... 264s Unpacking libsource-highlight-common (3.1.9-4.3build1) ... 264s Selecting previously unselected package libsource-highlight4t64:amd64. 264s Preparing to unpack .../138-libsource-highlight4t64_3.1.9-4.3build1_amd64.deb ... 264s Unpacking libsource-highlight4t64:amd64 (3.1.9-4.3build1) ... 264s Selecting previously unselected package gdb. 264s Preparing to unpack .../139-gdb_15.0.50.20240403-0ubuntu1_amd64.deb ... 264s Unpacking gdb (15.0.50.20240403-0ubuntu1) ... 265s Selecting previously unselected package libc6-dbg:amd64. 265s Preparing to unpack .../140-libc6-dbg_2.39-0ubuntu8.6_amd64.deb ... 265s Unpacking libc6-dbg:amd64 (2.39-0ubuntu8.6) ... 265s Selecting previously unselected package apport-retrace. 265s Preparing to unpack .../141-apport-retrace_2.28.1-0ubuntu3.8_all.deb ... 265s Unpacking apport-retrace (2.28.1-0ubuntu3.8) ... 265s Selecting previously unselected package valgrind. 265s Preparing to unpack .../142-valgrind_1%3a3.22.0-0ubuntu3_amd64.deb ... 265s Unpacking valgrind (1:3.22.0-0ubuntu3) ... 265s Selecting previously unselected package apport-valgrind. 265s Preparing to unpack .../143-apport-valgrind_2.28.1-0ubuntu3.8_all.deb ... 265s Unpacking apport-valgrind (2.28.1-0ubuntu3.8) ... 265s Selecting previously unselected package chaos-marmosets. 265s Preparing to unpack .../144-chaos-marmosets_0.1.2-2_amd64.deb ... 265s Unpacking chaos-marmosets (0.1.2-2) ... 265s Selecting previously unselected package gcc-13-base:amd64. 265s Preparing to unpack .../145-gcc-13-base_13.3.0-6ubuntu2~24.04_amd64.deb ... 265s Unpacking gcc-13-base:amd64 (13.3.0-6ubuntu2~24.04) ... 265s Selecting previously unselected package libisl23:amd64. 265s Preparing to unpack .../146-libisl23_0.26-3build1.1_amd64.deb ... 265s Unpacking libisl23:amd64 (0.26-3build1.1) ... 265s Selecting previously unselected package libmpc3:amd64. 265s Preparing to unpack .../147-libmpc3_1.3.1-1build1.1_amd64.deb ... 265s Unpacking libmpc3:amd64 (1.3.1-1build1.1) ... 265s Selecting previously unselected package cpp-13-x86-64-linux-gnu. 265s Preparing to unpack .../148-cpp-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04_amd64.deb ... 265s Unpacking cpp-13-x86-64-linux-gnu (13.3.0-6ubuntu2~24.04) ... 265s Selecting previously unselected package cpp-13. 265s Preparing to unpack .../149-cpp-13_13.3.0-6ubuntu2~24.04_amd64.deb ... 265s Unpacking cpp-13 (13.3.0-6ubuntu2~24.04) ... 265s Selecting previously unselected package cpp-x86-64-linux-gnu. 265s Preparing to unpack .../150-cpp-x86-64-linux-gnu_4%3a13.2.0-7ubuntu1_amd64.deb ... 265s Unpacking cpp-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... 265s Selecting previously unselected package cpp. 265s Preparing to unpack .../151-cpp_4%3a13.2.0-7ubuntu1_amd64.deb ... 265s Unpacking cpp (4:13.2.0-7ubuntu1) ... 265s Selecting previously unselected package desktop-file-utils. 265s Preparing to unpack .../152-desktop-file-utils_0.27-2build1_amd64.deb ... 265s Unpacking desktop-file-utils (0.27-2build1) ... 265s Selecting previously unselected package libcc1-0:amd64. 265s Preparing to unpack .../153-libcc1-0_14.2.0-4ubuntu2~24.04_amd64.deb ... 265s Unpacking libcc1-0:amd64 (14.2.0-4ubuntu2~24.04) ... 265s Selecting previously unselected package libgomp1:amd64. 265s Preparing to unpack .../154-libgomp1_14.2.0-4ubuntu2~24.04_amd64.deb ... 265s Unpacking libgomp1:amd64 (14.2.0-4ubuntu2~24.04) ... 265s Selecting previously unselected package libitm1:amd64. 265s Preparing to unpack .../155-libitm1_14.2.0-4ubuntu2~24.04_amd64.deb ... 265s Unpacking libitm1:amd64 (14.2.0-4ubuntu2~24.04) ... 265s Selecting previously unselected package libatomic1:amd64. 265s Preparing to unpack .../156-libatomic1_14.2.0-4ubuntu2~24.04_amd64.deb ... 265s Unpacking libatomic1:amd64 (14.2.0-4ubuntu2~24.04) ... 265s Selecting previously unselected package libasan8:amd64. 265s Preparing to unpack .../157-libasan8_14.2.0-4ubuntu2~24.04_amd64.deb ... 265s Unpacking libasan8:amd64 (14.2.0-4ubuntu2~24.04) ... 265s Selecting previously unselected package liblsan0:amd64. 265s Preparing to unpack .../158-liblsan0_14.2.0-4ubuntu2~24.04_amd64.deb ... 265s Unpacking liblsan0:amd64 (14.2.0-4ubuntu2~24.04) ... 265s Selecting previously unselected package libtsan2:amd64. 265s Preparing to unpack .../159-libtsan2_14.2.0-4ubuntu2~24.04_amd64.deb ... 265s Unpacking libtsan2:amd64 (14.2.0-4ubuntu2~24.04) ... 265s Selecting previously unselected package libubsan1:amd64. 265s Preparing to unpack .../160-libubsan1_14.2.0-4ubuntu2~24.04_amd64.deb ... 265s Unpacking libubsan1:amd64 (14.2.0-4ubuntu2~24.04) ... 265s Selecting previously unselected package libhwasan0:amd64. 265s Preparing to unpack .../161-libhwasan0_14.2.0-4ubuntu2~24.04_amd64.deb ... 265s Unpacking libhwasan0:amd64 (14.2.0-4ubuntu2~24.04) ... 266s Selecting previously unselected package libquadmath0:amd64. 266s Preparing to unpack .../162-libquadmath0_14.2.0-4ubuntu2~24.04_amd64.deb ... 266s Unpacking libquadmath0:amd64 (14.2.0-4ubuntu2~24.04) ... 266s Selecting previously unselected package libgcc-13-dev:amd64. 266s Preparing to unpack .../163-libgcc-13-dev_13.3.0-6ubuntu2~24.04_amd64.deb ... 266s Unpacking libgcc-13-dev:amd64 (13.3.0-6ubuntu2~24.04) ... 266s Selecting previously unselected package gcc-13-x86-64-linux-gnu. 266s Preparing to unpack .../164-gcc-13-x86-64-linux-gnu_13.3.0-6ubuntu2~24.04_amd64.deb ... 266s Unpacking gcc-13-x86-64-linux-gnu (13.3.0-6ubuntu2~24.04) ... 266s Selecting previously unselected package gcc-13. 266s Preparing to unpack .../165-gcc-13_13.3.0-6ubuntu2~24.04_amd64.deb ... 266s Unpacking gcc-13 (13.3.0-6ubuntu2~24.04) ... 266s Selecting previously unselected package gcc-x86-64-linux-gnu. 266s Preparing to unpack .../166-gcc-x86-64-linux-gnu_4%3a13.2.0-7ubuntu1_amd64.deb ... 266s Unpacking gcc-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... 266s Selecting previously unselected package gcc. 266s Preparing to unpack .../167-gcc_4%3a13.2.0-7ubuntu1_amd64.deb ... 266s Unpacking gcc (4:13.2.0-7ubuntu1) ... 266s Selecting previously unselected package gdb-multiarch. 266s Preparing to unpack .../168-gdb-multiarch_15.0.50.20240403-0ubuntu1_amd64.deb ... 266s Unpacking gdb-multiarch (15.0.50.20240403-0ubuntu1) ... 266s Selecting previously unselected package librsvg2-2:amd64. 266s Preparing to unpack .../169-librsvg2-2_2.58.0+dfsg-1build1_amd64.deb ... 266s Unpacking librsvg2-2:amd64 (2.58.0+dfsg-1build1) ... 266s Selecting previously unselected package librsvg2-common:amd64. 266s Preparing to unpack .../170-librsvg2-common_2.58.0+dfsg-1build1_amd64.deb ... 266s Unpacking librsvg2-common:amd64 (2.58.0+dfsg-1build1) ... 266s Selecting previously unselected package gnome-icon-theme. 266s Preparing to unpack .../171-gnome-icon-theme_3.12.0-5_all.deb ... 266s Unpacking gnome-icon-theme (3.12.0-5) ... 267s Selecting previously unselected package gvfs-common. 267s Preparing to unpack .../172-gvfs-common_1.54.4-0ubuntu1~24.04.1_all.deb ... 267s Unpacking gvfs-common (1.54.4-0ubuntu1~24.04.1) ... 267s Selecting previously unselected package libgck-2-2:amd64. 267s Preparing to unpack .../173-libgck-2-2_4.2.0-5_amd64.deb ... 267s Unpacking libgck-2-2:amd64 (4.2.0-5) ... 267s Selecting previously unselected package libgcr-4-4:amd64. 267s Preparing to unpack .../174-libgcr-4-4_4.2.0-5_amd64.deb ... 267s Unpacking libgcr-4-4:amd64 (4.2.0-5) ... 267s Selecting previously unselected package libsecret-common. 267s Preparing to unpack .../175-libsecret-common_0.21.4-1build3_all.deb ... 267s Unpacking libsecret-common (0.21.4-1build3) ... 267s Selecting previously unselected package libsecret-1-0:amd64. 267s Preparing to unpack .../176-libsecret-1-0_0.21.4-1build3_amd64.deb ... 267s Unpacking libsecret-1-0:amd64 (0.21.4-1build3) ... 267s Selecting previously unselected package gvfs-libs:amd64. 267s Preparing to unpack .../177-gvfs-libs_1.54.4-0ubuntu1~24.04.1_amd64.deb ... 267s Unpacking gvfs-libs:amd64 (1.54.4-0ubuntu1~24.04.1) ... 267s Selecting previously unselected package gvfs-daemons. 267s Preparing to unpack .../178-gvfs-daemons_1.54.4-0ubuntu1~24.04.1_amd64.deb ... 267s Unpacking gvfs-daemons (1.54.4-0ubuntu1~24.04.1) ... 267s Selecting previously unselected package libfontenc1:amd64. 267s Preparing to unpack .../179-libfontenc1_1%3a1.1.8-1build1_amd64.deb ... 267s Unpacking libfontenc1:amd64 (1:1.1.8-1build1) ... 267s Selecting previously unselected package libxt6t64:amd64. 267s Preparing to unpack .../180-libxt6t64_1%3a1.2.1-1.2build1_amd64.deb ... 267s Unpacking libxt6t64:amd64 (1:1.2.1-1.2build1) ... 267s Selecting previously unselected package libxmu6:amd64. 267s Preparing to unpack .../181-libxmu6_2%3a1.1.3-3build2_amd64.deb ... 267s Unpacking libxmu6:amd64 (2:1.1.3-3build2) ... 267s Selecting previously unselected package libxaw7:amd64. 267s Preparing to unpack .../182-libxaw7_2%3a1.0.14-1build2_amd64.deb ... 267s Unpacking libxaw7:amd64 (2:1.0.14-1build2) ... 267s Selecting previously unselected package libxfont2:amd64. 267s Preparing to unpack .../183-libxfont2_1%3a2.0.6-1build1_amd64.deb ... 267s Unpacking libxfont2:amd64 (1:2.0.6-1build1) ... 267s Selecting previously unselected package libxkbfile1:amd64. 267s Preparing to unpack .../184-libxkbfile1_1%3a1.1.0-1build4_amd64.deb ... 267s Unpacking libxkbfile1:amd64 (1:1.1.0-1build4) ... 267s Selecting previously unselected package python3-iniconfig. 267s Preparing to unpack .../185-python3-iniconfig_1.1.1-2_all.deb ... 267s Unpacking python3-iniconfig (1.1.1-2) ... 267s Selecting previously unselected package python3-packaging. 267s Preparing to unpack .../186-python3-packaging_24.0-1_all.deb ... 267s Unpacking python3-packaging (24.0-1) ... 267s Selecting previously unselected package python3-pluggy. 267s Preparing to unpack .../187-python3-pluggy_1.4.0-1_all.deb ... 267s Unpacking python3-pluggy (1.4.0-1) ... 267s Selecting previously unselected package python3-psutil. 267s Preparing to unpack .../188-python3-psutil_5.9.8-2build2_amd64.deb ... 267s Unpacking python3-psutil (5.9.8-2build2) ... 267s Selecting previously unselected package python3-pytest. 267s Preparing to unpack .../189-python3-pytest_7.4.4-1_all.deb ... 267s Unpacking python3-pytest (7.4.4-1) ... 267s Selecting previously unselected package ubuntu-dbgsym-keyring. 267s Preparing to unpack .../190-ubuntu-dbgsym-keyring_2023.11.28.1_all.deb ... 267s Unpacking ubuntu-dbgsym-keyring (2023.11.28.1) ... 267s Selecting previously unselected package x11-xkb-utils. 267s Preparing to unpack .../191-x11-xkb-utils_7.7+8build2_amd64.deb ... 267s Unpacking x11-xkb-utils (7.7+8build2) ... 267s Selecting previously unselected package xserver-common. 267s Preparing to unpack .../192-xserver-common_2%3a21.1.12-1ubuntu1.5_all.deb ... 267s Unpacking xserver-common (2:21.1.12-1ubuntu1.5) ... 267s Selecting previously unselected package xvfb. 267s Preparing to unpack .../193-xvfb_2%3a21.1.12-1ubuntu1.5_amd64.deb ... 267s Unpacking xvfb (2:21.1.12-1ubuntu1.5) ... 267s Setting up libgraphite2-3:amd64 (1.3.14-2build1) ... 267s Setting up libxcb-dri3-0:amd64 (1.15-1ubuntu2) ... 267s Setting up liblcms2-2:amd64 (2.14-2build1) ... 267s Setting up python3-iniconfig (1.1.1-2) ... 267s Setting up libpixman-1-0:amd64 (0.42.2-1build1) ... 267s Setting up libwayland-server0:amd64 (1.22.0-2.1build1) ... 267s Setting up libx11-xcb1:amd64 (2:1.8.7-1build1) ... 267s Setting up libwhoopsie-preferences0 (23build3) ... 267s Setting up libpciaccess0:amd64 (0.17-3ubuntu0.24.04.2) ... 267s Setting up session-migration (0.3.9build1) ... 267s Created symlink /etc/systemd/user/graphical-session-pre.target.wants/session-migration.service → /usr/lib/systemd/user/session-migration.service. 267s Setting up fontconfig (2.15.0-1.1ubuntu2) ... 269s Regenerating fonts cache... done. 269s Setting up libdouble-conversion3:amd64 (3.3.0-1build1) ... 269s Setting up libgck-2-2:amd64 (4.2.0-5) ... 269s Setting up libxdamage1:amd64 (1:1.1.6-1build1) ... 269s Setting up libxcb-xfixes0:amd64 (1.15-1ubuntu2) ... 269s Setting up desktop-file-utils (0.27-2build1) ... 269s Setting up libgcr-4-4:amd64 (4.2.0-5) ... 269s Setting up hicolor-icon-theme (0.17-2) ... 269s Setting up libxi6:amd64 (2:1.8.1-1build1) ... 269s Setting up libxcb-xinput0:amd64 (1.15-1ubuntu2) ... 269s Setting up libxrender1:amd64 (1:0.9.10-1.1build1) ... 269s Setting up libvte-2.91-common (0.76.0-1ubuntu0.1) ... 269s Setting up libdatrie1:amd64 (0.2.13-3build1) ... 269s Setting up libdebuginfod-common (0.190-1.1ubuntu0.1) ... 269s Setting up libxcb-render0:amd64 (1.15-1ubuntu2) ... 269s Setting up libglvnd0:amd64 (1.7.0-1build1) ... 269s Setting up libwnck-3-common (43.0-3build4) ... 269s Setting up libxcb-glx0:amd64 (1.15-1ubuntu2) ... 269s Setting up ubuntu-dbgsym-keyring (2023.11.28.1) ... 269s Setting up libdrm-intel1:amd64 (2.4.122-1~ubuntu0.24.04.1) ... 269s Setting up libgdk-pixbuf2.0-common (2.42.10+dfsg-3ubuntu3.2) ... 269s Setting up libxcb-keysyms1:amd64 (0.4.0-1build4) ... 269s Setting up libxcb-shape0:amd64 (1.15-1ubuntu2) ... 269s Setting up x11-common (1:7.7+23ubuntu3) ... 270s Setting up libxcb-render-util0:amd64 (0.3.9-1build4) ... 270s Setting up libxcb-shm0:amd64 (1.15-1ubuntu2) ... 270s Setting up libxcb-icccm4:amd64 (0.4.1-1.1build3) ... 270s Setting up libwhoopsie0:amd64 (0.2.77build3) ... 270s Setting up libgomp1:amd64 (14.2.0-4ubuntu2~24.04) ... 270s Setting up libcairo2:amd64 (1.18.0-3build1) ... 270s Setting up libpcre2-16-0:amd64 (10.42-4ubuntu2.1) ... 270s Setting up libcolord2:amd64 (1.4.7-1build2) ... 270s Setting up python3-psutil (5.9.8-2build2) ... 270s Setting up gnome-terminal-data (3.52.0-1ubuntu2) ... 270s Setting up libsource-highlight-common (3.1.9-4.3build1) ... 270s Setting up libxcb-util1:amd64 (0.4.0-1build3) ... 270s Setting up libxxf86vm1:amd64 (1:1.1.4-1build4) ... 270s Setting up libc6-dbg:amd64 (2.39-0ubuntu8.6) ... 270s Setting up libxcb-xkb1:amd64 (1.15-1ubuntu2) ... 270s Setting up libxcb-image0:amd64 (0.4.0-2build1) ... 270s Setting up libxcb-present0:amd64 (1.15-1ubuntu2) ... 270s Setting up libdconf1:amd64 (0.40.0-4ubuntu0.1) ... 270s Setting up libqt5core5t64:amd64 (5.15.13+dfsg-1ubuntu1) ... 270s Setting up libfontenc1:amd64 (1:1.1.8-1build1) ... 270s Setting up python3-packaging (24.0-1) ... 270s Setting up libxcb-xinerama0:amd64 (1.15-1ubuntu2) ... 270s Setting up gcc-13-base:amd64 (13.3.0-6ubuntu2~24.04) ... 270s Setting up libepoxy0:amd64 (1.5.10-1build1) ... 270s Setting up libxfixes3:amd64 (1:6.0.0-2build1) ... 270s Setting up libxcb-sync1:amd64 (1.15-1ubuntu2) ... 270s Setting up libavahi-common-data:amd64 (0.8-13ubuntu6) ... 270s Setting up libatspi2.0-0t64:amd64 (2.52.0-1build1) ... 270s Setting up libquadmath0:amd64 (14.2.0-4ubuntu2~24.04) ... 270s Setting up chaos-marmosets (0.1.2-2) ... 270s Setting up libxinerama1:amd64 (2:1.1.4-3build1) ... 270s Setting up libxkbcommon-x11-0:amd64 (1.6.0-1build1) ... 270s Setting up libmpc3:amd64 (1.3.1-1build1.1) ... 270s Setting up libatomic1:amd64 (14.2.0-4ubuntu2~24.04) ... 270s Setting up libxrandr2:amd64 (2:1.5.2-2build1) ... 270s Setting up libllvm20:amd64 (1:20.1.2-0ubuntu1~24.04.2) ... 270s Setting up libipt2 (2.0.6-1build1) ... 270s Setting up libbabeltrace1:amd64 (1.5.11-3build3) ... 270s Setting up libvulkan1:amd64 (1.3.275.0-1build1) ... 270s Setting up python3-pluggy (1.4.0-1) ... 270s Setting up libubsan1:amd64 (14.2.0-4ubuntu2~24.04) ... 270s Setting up python3-pyqt5.sip (12.13.0-1build3) ... 270s Setting up libmtdev1t64:amd64 (1.1.6-1.1build1) ... 270s Setting up libxshmfence1:amd64 (1.3-1build5) ... 270s Setting up libhwasan0:amd64 (14.2.0-4ubuntu2~24.04) ... 270s Setting up at-spi2-common (2.52.0-1build1) ... 270s Setting up dbus-x11 (1.14.10-4ubuntu4.1) ... 270s Setting up libxcb-randr0:amd64 (1.15-1ubuntu2) ... 270s Setting up libasan8:amd64 (14.2.0-4ubuntu2~24.04) ... 270s Setting up libqt5sql5t64:amd64 (5.15.13+dfsg-1ubuntu1) ... 270s Setting up libmd4c0:amd64 (0.4.8-1build1) ... 270s Setting up libharfbuzz0b:amd64 (8.3.0-2build2) ... 270s Setting up libthai-data (0.1.29-2build1) ... 270s Setting up libgdk-pixbuf-2.0-0:amd64 (2.42.10+dfsg-3ubuntu3.2) ... 270s Setting up libcairo-gobject2:amd64 (1.18.0-3build1) ... 270s Setting up libwayland-egl1:amd64 (1.22.0-2.1build1) ... 270s Setting up libxkbfile1:amd64 (1:1.1.0-1build4) ... 270s Setting up libtsan2:amd64 (14.2.0-4ubuntu2~24.04) ... 270s Setting up libisl23:amd64 (0.26-3build1.1) ... 270s Setting up valgrind (1:3.22.0-0ubuntu3) ... 270s Setting up gvfs-common (1.54.4-0ubuntu1~24.04.1) ... 270s Setting up libxcomposite1:amd64 (1:0.4.5-1build3) ... 270s Setting up libxfont2:amd64 (1:2.0.6-1build1) ... 270s Setting up libcc1-0:amd64 (14.2.0-4ubuntu2~24.04) ... 270s Setting up libsecret-common (0.21.4-1build3) ... 270s Setting up liblsan0:amd64 (14.2.0-4ubuntu2~24.04) ... 270s Setting up libitm1:amd64 (14.2.0-4ubuntu2~24.04) ... 270s Setting up libxres1:amd64 (2:1.2.1-1build1) ... 270s Setting up libdrm-amdgpu1:amd64 (2.4.122-1~ubuntu0.24.04.1) ... 270s Setting up libwacom-common (2.10.0-2) ... 270s Setting up libstartup-notification0:amd64 (0.12-6build3) ... 270s Setting up libwayland-client0:amd64 (1.22.0-2.1build1) ... 270s Setting up gtk-update-icon-cache (3.24.41-4ubuntu1.3) ... 270s Setting up libdebuginfod1t64:amd64 (0.190-1.1ubuntu0.1) ... 270s Setting up libice6:amd64 (2:1.0.10-1build3) ... 270s Setting up mesa-libgallium:amd64 (25.0.7-0ubuntu0.24.04.2) ... 270s Setting up libxft2:amd64 (2.3.6-1build1) ... 270s Setting up libqt5dbus5t64:amd64 (5.15.13+dfsg-1ubuntu1) ... 270s Setting up gir1.2-freedesktop:amd64 (1.80.1-1) ... 270s Setting up libatk1.0-0t64:amd64 (2.52.0-1build1) ... 270s Setting up gir1.2-gdkpixbuf-2.0:amd64 (2.42.10+dfsg-3ubuntu3.2) ... 270s Setting up libgbm1:amd64 (25.0.7-0ubuntu0.24.04.2) ... 270s Setting up gir1.2-atk-1.0:amd64 (2.52.0-1build1) ... 270s Setting up libwacom9:amd64 (2.10.0-2) ... 270s Setting up cpp-13-x86-64-linux-gnu (13.3.0-6ubuntu2~24.04) ... 270s Setting up python3-pytest (7.4.4-1) ... 270s Setting up libxcursor1:amd64 (1:1.2.1-1build1) ... 270s Setting up libgl1-mesa-dri:amd64 (25.0.7-0ubuntu0.24.04.2) ... 270s Setting up libqt5network5t64:amd64 (5.15.13+dfsg-1ubuntu1) ... 270s Setting up libavahi-common3:amd64 (0.8-13ubuntu6) ... 270s Setting up apport-valgrind (2.28.1-0ubuntu3.8) ... 270s Setting up libqt5xml5t64:amd64 (5.15.13+dfsg-1ubuntu1) ... 270s Setting up dconf-service (0.40.0-4ubuntu0.1) ... 270s Setting up libsource-highlight4t64:amd64 (3.1.9-4.3build1) ... 270s Setting up whoopsie-preferences (23build3) ... 270s Setting up libharfbuzz-gobject0:amd64 (8.3.0-2build2) ... 270s Setting up libqt5test5t64:amd64 (5.15.13+dfsg-1ubuntu1) ... 270s Setting up gir1.2-harfbuzz-0.0:amd64 (8.3.0-2build2) ... 270s Setting up libinput-bin (1.25.0-1ubuntu3.1) ... 270s Setting up libthai0:amd64 (0.1.29-2build1) ... 270s Setting up libsecret-1-0:amd64 (0.21.4-1build3) ... 270s Setting up libegl-mesa0:amd64 (25.0.7-0ubuntu0.24.04.2) ... 270s Setting up gdb (15.0.50.20240403-0ubuntu1) ... 270s Setting up gdb-multiarch (15.0.50.20240403-0ubuntu1) ... 270s Setting up libgcc-13-dev:amd64 (13.3.0-6ubuntu2~24.04) ... 270s Setting up libwayland-cursor0:amd64 (1.22.0-2.1build1) ... 270s Setting up libegl1:amd64 (1.7.0-1build1) ... 270s Setting up libsm6:amd64 (2:1.2.3-1build3) ... 270s Setting up libavahi-client3:amd64 (0.8-13ubuntu6) ... 270s Setting up cpp-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... 270s Setting up libatk-bridge2.0-0t64:amd64 (2.52.0-1build1) ... 270s Setting up libinput10:amd64 (1.25.0-1ubuntu3.1) ... 270s Setting up libglx-mesa0:amd64 (25.0.7-0ubuntu0.24.04.2) ... 270s Setting up libglx0:amd64 (1.7.0-1build1) ... 270s Setting up cpp-13 (13.3.0-6ubuntu2~24.04) ... 270s Setting up dconf-gsettings-backend:amd64 (0.40.0-4ubuntu0.1) ... 270s Setting up gcc-13-x86-64-linux-gnu (13.3.0-6ubuntu2~24.04) ... 270s Setting up libpango-1.0-0:amd64 (1.52.1+ds-1build1) ... 270s Setting up apport-retrace (2.28.1-0ubuntu3.8) ... 270s Setting up libgl1:amd64 (1.7.0-1build1) ... 270s Setting up libxt6t64:amd64 (1:1.2.1-1.2build1) ... 270s Setting up gcc-13 (13.3.0-6ubuntu2~24.04) ... 270s Setting up cpp (4:13.2.0-7ubuntu1) ... 270s Setting up libpangoft2-1.0-0:amd64 (1.52.1+ds-1build1) ... 270s Setting up libcups2t64:amd64 (2.4.7-1.2ubuntu7.4) ... 270s Setting up libgtk-3-common (3.24.41-4ubuntu1.3) ... 270s Setting up libpangocairo-1.0-0:amd64 (1.52.1+ds-1build1) ... 270s Setting up gsettings-desktop-schemas (46.1-0ubuntu1) ... 270s Setting up libxmu6:amd64 (2:1.1.3-3build2) ... 270s Setting up libpangoxft-1.0-0:amd64 (1.52.1+ds-1build1) ... 270s Setting up gcc-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... 270s Setting up libxaw7:amd64 (2:1.0.14-1build2) ... 270s Setting up gcc (4:13.2.0-7ubuntu1) ... 270s Setting up librsvg2-2:amd64 (2.58.0+dfsg-1build1) ... 270s Setting up gir1.2-pango-1.0:amd64 (1.52.1+ds-1build1) ... 270s Setting up libqt5gui5t64:amd64 (5.15.13+dfsg-1ubuntu1) ... 270s Setting up librsvg2-common:amd64 (2.58.0+dfsg-1build1) ... 270s Setting up libqt5widgets5t64:amd64 (5.15.13+dfsg-1ubuntu1) ... 270s Setting up x11-xkb-utils (7.7+8build2) ... 270s Setting up libqt5help5:amd64 (5.15.13-1) ... 270s Setting up gnome-icon-theme (3.12.0-5) ... 270s update-alternatives: using /usr/share/icons/gnome/scalable/places/debian-swirl.svg to provide /usr/share/icons/gnome/scalable/places/start-here.svg (start-here.svg) in auto mode 270s Setting up xserver-common (2:21.1.12-1ubuntu1.5) ... 270s Setting up libqt5printsupport5t64:amd64 (5.15.13+dfsg-1ubuntu1) ... 270s Setting up libqt5designer5:amd64 (5.15.13-1) ... 270s Setting up xvfb (2:21.1.12-1ubuntu1.5) ... 270s Setting up python3-pyqt5 (5.15.10+dfsg-1build6) ... 270s Setting up adwaita-icon-theme (46.0-1) ... 270s update-alternatives: using /usr/share/icons/Adwaita/cursor.theme to provide /usr/share/icons/default/index.theme (x-cursor-theme) in auto mode 270s Setting up humanity-icon-theme (0.6.16) ... 271s Setting up ubuntu-mono (24.04-0ubuntu1) ... 271s Processing triggers for man-db (2.12.0-4build2) ... 271s Processing triggers for libglib2.0-0t64:amd64 (2.80.0-6ubuntu3.5) ... 271s Processing triggers for dbus (1.14.10-4ubuntu4.1) ... 271s Setting up libgtk-3-0t64:amd64 (3.24.41-4ubuntu1.3) ... 271s Processing triggers for udev (255.4-1ubuntu8.11) ... 272s Setting up gvfs-libs:amd64 (1.54.4-0ubuntu1~24.04.1) ... 272s Setting up libwnck-3-0:amd64 (43.0-3build4) ... 272s Setting up libhandy-1-0:amd64 (1.8.3-1build2) ... 272s Processing triggers for libc-bin (2.39-0ubuntu8.6) ... 272s Setting up gir1.2-gtk-3.0:amd64 (3.24.41-4ubuntu1.3) ... 272s Setting up libvte-2.91-0:amd64 (0.76.0-1ubuntu0.1) ... 272s Setting up gvfs-daemons (1.54.4-0ubuntu1~24.04.1) ... 272s Setting up gir1.2-wnck-3.0:amd64 (43.0-3build4) ... 272s Setting up gnome-terminal (3.52.0-1ubuntu2) ... 272s update-alternatives: using /usr/bin/gnome-terminal.wrapper to provide /usr/bin/x-terminal-emulator (x-terminal-emulator) in auto mode 272s Setting up apport-kde (2.28.1-0ubuntu3.8) ... 272s Setting up apport-gtk (2.28.1-0ubuntu3.8) ... 272s Processing triggers for libgdk-pixbuf-2.0-0:amd64 (2.42.10+dfsg-3ubuntu3.2) ... 272s Processing triggers for libc-bin (2.39-0ubuntu8.6) ... 274s autopkgtest [23:04:40]: test system-tests: [----------------------- 274s ============================= test session starts ============================== 274s platform linux -- Python 3.12.3, pytest-7.4.4, pluggy-1.4.0 -- /usr/bin/python3 274s cachedir: .pytest_cache 274s rootdir: /tmp/autopkgtest.4KsJyk/autopkgtest_tmp 275s collecting ... collected 102 items 275s 501s tests/system/test_apport_retrace.py::test_retrace_system_sandbox FAILED [ 0%] 719s tests/system/test_apport_retrace.py::test_retrace_system_sandbox_gdb_sandbox FAILED [ 1%] 851s tests/system/test_apport_retrace.py::test_retrace_jammy_sandbox FAILED [ 2%] 860s tests/system/test_apport_retrace.py::test_retrace_jammy_sandbox_gdb_sandbox FAILED [ 3%] 1100s tests/system/test_apport_valgrind.py::TestApportValgrind::test_sandbox_cache_options FAILED [ 4%] 1100s tests/system/test_github_query.py::TestGitHubQuery::test_api_authentication PASSED [ 5%] 1132s tests/system/test_packaging_apt_dpkg.py::test_install_packages_versioned[one-line] PASSED [ 6%] 1145s tests/system/test_packaging_apt_dpkg.py::test_install_packages_versioned[deb822] PASSED [ 7%] 1151s tests/system/test_packaging_apt_dpkg.py::test_install_packages_unversioned[one-line] PASSED [ 8%] 1167s tests/system/test_packaging_apt_dpkg.py::test_install_packages_unversioned[deb822] PASSED [ 9%] 1174s tests/system/test_packaging_apt_dpkg.py::test_install_packages_dependencies[one-line] PASSED [ 10%] 1182s tests/system/test_packaging_apt_dpkg.py::test_install_packages_dependencies[deb822] PASSED [ 11%] 1403s tests/system/test_packaging_apt_dpkg.py::test_install_packages_system[one-line] FAILED [ 12%] 1625s tests/system/test_packaging_apt_dpkg.py::test_install_packages_system[deb822] FAILED [ 13%] 1626s tests/system/test_packaging_apt_dpkg.py::test_install_packages_error[one-line] PASSED [ 14%] 1628s tests/system/test_packaging_apt_dpkg.py::test_install_packages_error[deb822] PASSED [ 15%] 1995s tests/system/test_packaging_apt_dpkg.py::test_install_packages_permanent_sandbox[one-line] PASSED [ 16%] 2430s tests/system/test_packaging_apt_dpkg.py::test_install_packages_permanent_sandbox[deb822] PASSED [ 17%] 2435s tests/system/test_packaging_apt_dpkg.py::test_install_packages_permanent_sandbox_repack[one-line] PASSED [ 18%] 2460s tests/system/test_packaging_apt_dpkg.py::test_install_packages_permanent_sandbox_repack[deb822] PASSED [ 19%] 2464s tests/system/test_packaging_apt_dpkg.py::test_install_packages_armhf[one-line] PASSED [ 20%] 2470s tests/system/test_packaging_apt_dpkg.py::test_install_packages_armhf[deb822] PASSED [ 21%] 2693s tests/system/test_packaging_apt_dpkg.py::test_install_packages_from_launchpad[one-line] FAILED [ 22%] 2916s tests/system/test_packaging_apt_dpkg.py::test_install_packages_from_launchpad[deb822] FAILED [ 23%] 3138s tests/system/test_packaging_apt_dpkg.py::test_install_old_packages[one-line] FAILED [ 24%] 3359s tests/system/test_packaging_apt_dpkg.py::test_install_old_packages[deb822] FAILED [ 25%] 3362s tests/system/test_packaging_apt_dpkg.py::test_get_source_tree_sandbox[one-line] PASSED [ 26%] 3363s tests/system/test_packaging_apt_dpkg.py::test_get_source_tree_sandbox[deb822] PASSED [ 27%] 3577s tests/system/test_packaging_apt_dpkg.py::test_get_source_tree_lp_sandbox[one-line] FAILED [ 28%] 3795s tests/system/test_packaging_apt_dpkg.py::test_get_source_tree_lp_sandbox[deb822] FAILED [ 29%] 3827s tests/system/test_packaging_apt_dpkg.py::test_create_sources_for_a_named_ppa[one-line] FAILED [ 30%] 3873s tests/system/test_packaging_apt_dpkg.py::test_create_sources_for_a_named_ppa[deb822] FAILED [ 31%] 3904s tests/system/test_packaging_apt_dpkg.py::test_create_sources_for_an_unnamed_ppa[one-line] PASSED [ 32%] 3951s tests/system/test_packaging_apt_dpkg.py::test_create_sources_for_an_unnamed_ppa[deb822] PASSED [ 33%] 3951s tests/system/test_packaging_apt_dpkg.py::test_use_sources_for_a_ppa[one-line] PASSED [ 34%] 3952s tests/system/test_packaging_apt_dpkg.py::test_use_sources_for_a_ppa[deb822] PASSED [ 35%] 3985s tests/system/test_packaging_apt_dpkg.py::test_install_package_from_a_ppa[one-line] FAILED [ 36%] 4033s tests/system/test_packaging_apt_dpkg.py::test_install_package_from_a_ppa[deb822] FAILED [ 37%] 4034s tests/system/test_python_crashes.py::T::test_dbus_service_other_error PASSED [ 38%] 4060s tests/system/test_python_crashes.py::T::test_dbus_service_timeout_running PASSED [ 39%] 4060s tests/system/test_python_crashes.py::T::test_dbus_service_unknown_invalid PASSED [ 40%] 4060s tests/system/test_python_crashes.py::T::test_dbus_service_unknown_wrongbus_notrunning PASSED [ 41%] 4060s tests/system/test_python_crashes.py::T::test_dbus_service_unknown_wrongbus_running PASSED [ 42%] 4060s tests/system/test_signal_crashes.py::T::test_crash_system_slice SKIPPED [ 43%] 4060s tests/system/test_signal_crashes.py::T::test_create_test_non_sleep_process SKIPPED [ 44%] 4060s tests/system/test_signal_crashes.py::T::test_create_test_sleep_process SKIPPED [ 45%] 4060s tests/system/test_signal_crashes.py::T::test_limit_size SKIPPED (Ple...) [ 46%] 4060s tests/system/test_ui_gtk.py::T::test_administrator_disabled_reporting PASSED [ 47%] 4060s tests/system/test_ui_gtk.py::T::test_apport_bug_package_layout PASSED [ 48%] 4060s tests/system/test_ui_gtk.py::T::test_apport_bug_package_layout_load_file PASSED [ 49%] 4060s tests/system/test_ui_gtk.py::T::test_broken_crash_details PASSED [ 50%] 4061s tests/system/test_ui_gtk.py::T::test_bug_report_installed_package PASSED [ 50%] 4061s tests/system/test_ui_gtk.py::T::test_bug_report_uninstalled_package PASSED [ 51%] 4061s tests/system/test_ui_gtk.py::T::test_close_button PASSED [ 52%] 4061s tests/system/test_ui_gtk.py::T::test_close_during_collect PASSED [ 53%] 4061s tests/system/test_ui_gtk.py::T::test_crash_details PASSED [ 54%] 4062s tests/system/test_ui_gtk.py::T::test_crash_noaccept PASSED [ 55%] 4062s tests/system/test_ui_gtk.py::T::test_crash_nodetails PASSED [ 56%] 4062s tests/system/test_ui_gtk.py::T::test_dialog_nonascii PASSED [ 57%] 4062s tests/system/test_ui_gtk.py::T::test_examine_button PASSED [ 58%] 4062s tests/system/test_ui_gtk.py::T::test_hang_layout PASSED [ 59%] 4062s tests/system/test_ui_gtk.py::T::test_immediate_close PASSED [ 60%] 4062s tests/system/test_ui_gtk.py::T::test_kernel_crash_layout PASSED [ 61%] 4064s tests/system/test_ui_gtk.py::T::test_kerneloops_nodetails PASSED [ 62%] 4064s tests/system/test_ui_gtk.py::T::test_missing_icon PASSED [ 63%] 4064s tests/system/test_ui_gtk.py::T::test_package_crash_layout PASSED [ 64%] 4064s tests/system/test_ui_gtk.py::T::test_recoverable_crash_layout PASSED [ 65%] 4064s tests/system/test_ui_gtk.py::T::test_regular_crash_layout PASSED [ 66%] 4064s tests/system/test_ui_gtk.py::T::test_regular_crash_layout_norestart PASSED [ 67%] 4064s tests/system/test_ui_gtk.py::T::test_regular_crash_layout_restart PASSED [ 68%] 4064s tests/system/test_ui_gtk.py::T::test_regular_crash_thread_layout PASSED [ 69%] 4064s tests/system/test_ui_gtk.py::T::test_resizing PASSED [ 70%] 4064s tests/system/test_ui_gtk.py::T::test_system_crash_from_console_layout PASSED [ 71%] 4064s tests/system/test_ui_gtk.py::T::test_system_crash_layout PASSED [ 72%] 4064s tests/system/test_ui_gtk.py::T::test_text_to_markup PASSED [ 73%] 4064s tests/system/test_ui_gtk.py::T::test_text_to_markup_url_followed_by_dot PASSED [ 74%] 4064s tests/system/test_ui_gtk.py::T::test_ui_run_terminal PASSED [ 75%] 4064s tests/system/test_ui_gtk.py::T::test_ui_update_view_destroyed PASSED [ 76%] 4065s tests/system/test_ui_gtk.py::T::test_update_report PASSED [ 77%] 4065s tests/system/test_ui_gtk.py::T::test_update_report_different_binary_source PASSED [ 78%] 4066s tests/system/test_ui_kde.py::T::test_1_crash_details PASSED [ 79%] 4067s tests/system/test_ui_kde.py::T::test_1_crash_noaccept PASSED [ 80%] 4068s tests/system/test_ui_kde.py::T::test_1_crash_nodetails PASSED [ 81%] 4069s tests/system/test_ui_kde.py::T::test_1_update_report PASSED [ 82%] 4069s tests/system/test_ui_kde.py::T::test_1_update_report_different_binary_source PASSED [ 83%] 4069s tests/system/test_ui_kde.py::T::test_administrator_disabled_reporting PASSED [ 84%] 4069s tests/system/test_ui_kde.py::T::test_apport_bug_package_layout PASSED [ 85%] 4070s tests/system/test_ui_kde.py::T::test_bug_report_installed_package PASSED [ 86%] 4071s tests/system/test_ui_kde.py::T::test_bug_report_uninstalled_package PASSED [ 87%] 4071s tests/system/test_ui_kde.py::T::test_close_button PASSED [ 88%] 4071s tests/system/test_ui_kde.py::T::test_kernel_crash_layout PASSED [ 89%] 4071s tests/system/test_ui_kde.py::T::test_package_crash_layout PASSED [ 90%] 4071s tests/system/test_ui_kde.py::T::test_recoverable_crash_layout PASSED [ 91%] 4071s tests/system/test_ui_kde.py::T::test_regular_crash_layout PASSED [ 92%] 4071s tests/system/test_ui_kde.py::T::test_regular_crash_layout_norestart PASSED [ 93%] 4071s tests/system/test_ui_kde.py::T::test_regular_crash_layout_restart PASSED [ 94%] 4071s tests/system/test_ui_kde.py::T::test_regular_crash_thread_layout PASSED [ 95%] 4071s tests/system/test_ui_kde.py::T::test_system_crash_layout PASSED [ 96%] 4071s tests/system/test_ui_kde.py::T::test_ui_question_choice_hide_dialog PASSED [ 97%] 4071s tests/system/test_ui_kde.py::T::test_ui_question_file_close PASSED [ 98%] 4071s tests/system/test_ui_kde.py::T::test_ui_run_terminal PASSED [ 99%] 4071s tests/system/test_ui_kde.py::T::test_ui_set_upload_progress PASSED [100%] 4071s 4071s =================================== FAILURES =================================== 4071s _________________________ test_retrace_system_sandbox __________________________ 4071s 4071s workdir = PosixPath('/tmp/tmpa4vous2w') 4071s module_cachedir = PosixPath('/tmp/tmppvfqx32e/cache') 4071s divide_by_zero_crash = '/tmp/tmppvfqx32e/divide-by-zero.crash' 4071s 4071s @pytest.mark.skipif(not has_internet(), reason="online test") 4071s @pytest.mark.skipif( 4071s impl.get_system_architecture() != "amd64", 4071s reason="Test only works on amd64. See https://launchpad.net/bugs/2069815", 4071s ) 4071s def test_retrace_system_sandbox( 4071s workdir: pathlib.Path, module_cachedir: pathlib.Path, divide_by_zero_crash: str 4071s ) -> None: 4071s """Retrace a divide-by-zero crash in a system sandbox.""" 4071s retraced_report_filename = workdir / "retraced.crash" 4071s env = os.environ | local_test_environment() 4071s cmd = [ 4071s "apport-retrace", 4071s "-v", 4071s "-o", 4071s str(retraced_report_filename), 4071s "--sandbox", 4071s "system", 4071s "--cache", 4071s str(module_cachedir), 4071s divide_by_zero_crash, 4071s ] 4071s > subprocess.run(cmd, check=True, env=env) 4071s 4071s tests/system/test_apport_retrace.py:194: 4071s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4071s 4071s input = None, capture_output = False, timeout = None, check = True 4071s popenargs = (['apport-retrace', '-v', '-o', '/tmp/tmpa4vous2w/retraced.crash', '--sandbox', 'system', ...],) 4071s kwargs = {'env': {'ADTTMP': '/tmp/autopkgtest.4KsJyk/autopkgtest_tmp', 'ADT_ARTIFACTS': '/tmp/autopkgtest.4KsJyk/system-tests-artifacts', 'ADT_NORMAL_USER': 'ubuntu', 'ADT_TEST_TRIGGERS': 'glib2.0/2.80.0-6ubuntu3.5', ...}} 4071s process = 4071s stdout = None, stderr = None, retcode = 1 4071s 4071s def run(*popenargs, 4071s input=None, capture_output=False, timeout=None, check=False, **kwargs): 4071s """Run command with arguments and return a CompletedProcess instance. 4071s 4071s The returned instance will have attributes args, returncode, stdout and 4071s stderr. By default, stdout and stderr are not captured, and those attributes 4071s will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them, 4071s or pass capture_output=True to capture both. 4071s 4071s If check is True and the exit code was non-zero, it raises a 4071s CalledProcessError. The CalledProcessError object will have the return code 4071s in the returncode attribute, and output & stderr attributes if those streams 4071s were captured. 4071s 4071s If timeout is given, and the process takes too long, a TimeoutExpired 4071s exception will be raised. 4071s 4071s There is an optional argument "input", allowing you to 4071s pass bytes or a string to the subprocess's stdin. If you use this argument 4071s you may not also use the Popen constructor's "stdin" argument, as 4071s it will be used internally. 4071s 4071s By default, all communication is in bytes, and therefore any "input" should 4071s be bytes, and the stdout and stderr will be bytes. If in text mode, any 4071s "input" should be a string, and stdout and stderr will be strings decoded 4071s according to locale encoding, or by "encoding" if set. Text mode is 4071s triggered by setting any of text, encoding, errors or universal_newlines. 4071s 4071s The other arguments are the same as for the Popen constructor. 4071s """ 4071s if input is not None: 4071s if kwargs.get('stdin') is not None: 4071s raise ValueError('stdin and input arguments may not both be used.') 4071s kwargs['stdin'] = PIPE 4071s 4071s if capture_output: 4071s if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None: 4071s raise ValueError('stdout and stderr arguments may not be used ' 4071s 'with capture_output.') 4071s kwargs['stdout'] = PIPE 4071s kwargs['stderr'] = PIPE 4071s 4071s with Popen(*popenargs, **kwargs) as process: 4071s try: 4071s stdout, stderr = process.communicate(input, timeout=timeout) 4071s except TimeoutExpired as exc: 4071s process.kill() 4071s if _mswindows: 4071s # Windows accumulates the output in a single blocking 4071s # read() call run on child threads, with the timeout 4071s # being done in a join() on those threads. communicate() 4071s # _after_ kill() is required to collect that and add it 4071s # to the exception. 4071s exc.stdout, exc.stderr = process.communicate() 4071s else: 4071s # POSIX _communicate already populated the output so 4071s # far into the TimeoutExpired exception. 4071s process.wait() 4071s raise 4071s except: # Including KeyboardInterrupt, communicate handled that. 4071s process.kill() 4071s # We don't call process.wait() as .__exit__ does that for us. 4071s raise 4071s retcode = process.poll() 4071s if check and retcode: 4071s > raise CalledProcessError(retcode, process.args, 4071s output=stdout, stderr=stderr) 4071s E subprocess.CalledProcessError: Command '['apport-retrace', '-v', '-o', '/tmp/tmpa4vous2w/retraced.crash', '--sandbox', 'system', '--cache', '/tmp/tmppvfqx32e/cache', '/tmp/tmppvfqx32e/divide-by-zero.crash']' returned non-zero exit status 1. 4071s 4071s /usr/lib/python3.12/subprocess.py:571: CalledProcessError 4071s ---------------------------- Captured stdout setup ----------------------------- 4071s [Thread debugging using libthread_db enabled] 4071s Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". 4071s 4071s Program received signal SIGILL, Illegal instruction. 4071s 0x00005555555551a0 in ?? () 4071s Saved corefile /tmp/tmppvfqx32e/divide-by-zero.core 4071s ---------------------------- Captured stderr setup ----------------------------- 4071s 4071s warning: could not find '.gnu_debugaltlink' file for /usr/bin/divide-by-zero 4071s warning: Memory read failed for corefile section, 4096 bytes at 0xffffffffff600000. 4071s ----------------------------- Captured stdout call ----------------------------- 4071s Get:1 http://ftpmaster.internal/ubuntu noble-proposed InRelease [265 kB] 4071s Get:2 http://ftpmaster.internal/ubuntu noble InRelease [256 kB] 4071s Get:3 http://ftpmaster.internal/ubuntu noble-updates InRelease [126 kB] 4071s Get:4 http://ftpmaster.internal/ubuntu noble-security InRelease [126 kB] 4071s Get:5 http://ftpmaster.internal/ubuntu noble-proposed/multiverse Sources [9156 B] 4071s Get:6 http://ftpmaster.internal/ubuntu noble-proposed/universe Sources [42.6 kB] 4071s Get:7 http://ftpmaster.internal/ubuntu noble-proposed/restricted Sources [44.3 kB] 4071s Get:8 http://ftpmaster.internal/ubuntu noble-proposed/main Sources [90.6 kB] 4071s Get:9 http://ftpmaster.internal/ubuntu noble-proposed/main amd64 Packages [478 kB] 4071s Get:10 http://ftpmaster.internal/ubuntu noble-proposed/main amd64 c-n-f Metadata [2184 B] 4071s Get:11 http://ftpmaster.internal/ubuntu noble-proposed/restricted amd64 Packages [1011 kB] 4071s Get:12 http://ftpmaster.internal/ubuntu noble-proposed/restricted amd64 c-n-f Metadata [444 B] 4071s Get:13 http://ftpmaster.internal/ubuntu noble-proposed/universe amd64 Packages [111 kB] 4071s Get:14 http://ftpmaster.internal/ubuntu noble-proposed/universe amd64 c-n-f Metadata [2328 B] 4071s Get:15 http://ftpmaster.internal/ubuntu noble-proposed/multiverse amd64 Packages [5288 B] 4071s Get:16 http://ftpmaster.internal/ubuntu noble-proposed/multiverse amd64 c-n-f Metadata [284 B] 4071s Get:17 http://ftpmaster.internal/ubuntu noble/main Sources [1384 kB] 4071s Get:18 http://ftpmaster.internal/ubuntu noble/universe Sources [19.8 MB] 4071s Get:19 http://ftpmaster.internal/ubuntu noble/multiverse Sources [299 kB] 4071s Get:20 http://ftpmaster.internal/ubuntu noble/restricted Sources [18.7 kB] 4071s Get:21 http://ftpmaster.internal/ubuntu noble/main amd64 Packages [1401 kB] 4071s Get:22 http://ftpmaster.internal/ubuntu noble/main amd64 c-n-f Metadata [30.5 kB] 4071s Get:23 http://ftpmaster.internal/ubuntu noble/restricted amd64 Packages [93.9 kB] 4071s Get:24 http://ftpmaster.internal/ubuntu noble/restricted amd64 c-n-f Metadata [416 B] 4071s Get:25 http://ftpmaster.internal/ubuntu noble/universe amd64 Packages [15.0 MB] 4071s Get:26 http://ftpmaster.internal/ubuntu noble/universe amd64 c-n-f Metadata [301 kB] 4071s Get:27 http://ftpmaster.internal/ubuntu noble/multiverse amd64 Packages [269 kB] 4071s Get:28 http://ftpmaster.internal/ubuntu noble/multiverse amd64 c-n-f Metadata [8328 B] 4071s Get:29 http://ftpmaster.internal/ubuntu noble-updates/universe Sources [482 kB] 4071s Get:30 http://ftpmaster.internal/ubuntu noble-updates/restricted Sources [55.3 kB] 4071s Get:31 http://ftpmaster.internal/ubuntu noble-updates/main Sources [477 kB] 4071s Get:32 http://ftpmaster.internal/ubuntu noble-updates/multiverse Sources [24.3 kB] 4071s Get:33 http://ftpmaster.internal/ubuntu noble-updates/main amd64 Packages [1585 kB] 4071s Get:34 http://ftpmaster.internal/ubuntu noble-updates/main amd64 c-n-f Metadata [15.7 kB] 4071s Get:35 http://ftpmaster.internal/ubuntu noble-updates/restricted amd64 Packages [2244 kB] 4071s Get:36 http://ftpmaster.internal/ubuntu noble-updates/restricted amd64 c-n-f Metadata [516 B] 4071s Get:37 http://ftpmaster.internal/ubuntu noble-updates/universe amd64 Packages [1498 kB] 4071s Get:38 http://ftpmaster.internal/ubuntu noble-updates/universe amd64 c-n-f Metadata [31.4 kB] 4071s Get:39 http://ftpmaster.internal/ubuntu noble-updates/multiverse amd64 Packages [30.3 kB] 4071s Get:40 http://ftpmaster.internal/ubuntu noble-updates/multiverse amd64 c-n-f Metadata [484 B] 4071s Get:41 http://ftpmaster.internal/ubuntu noble-security/universe Sources [325 kB] 4071s Get:42 http://ftpmaster.internal/ubuntu noble-security/multiverse Sources [18.6 kB] 4071s Get:43 http://ftpmaster.internal/ubuntu noble-security/restricted Sources [51.6 kB] 4071s Get:44 http://ftpmaster.internal/ubuntu noble-security/main Sources [211 kB] 4071s Get:45 http://ftpmaster.internal/ubuntu noble-security/main amd64 Packages [1305 kB] 4071s Get:46 http://ftpmaster.internal/ubuntu noble-security/main amd64 c-n-f Metadata [9336 B] 4071s Get:47 http://ftpmaster.internal/ubuntu noble-security/restricted amd64 Packages [2135 kB] 4071s Get:48 http://ftpmaster.internal/ubuntu noble-security/restricted amd64 c-n-f Metadata [500 B] 4071s Get:49 http://ftpmaster.internal/ubuntu noble-security/universe amd64 Packages [906 kB] 4071s Get:50 http://ftpmaster.internal/ubuntu noble-security/universe amd64 c-n-f Metadata [19.4 kB] 4071s Get:51 http://ftpmaster.internal/ubuntu noble-security/multiverse amd64 Packages [27.4 kB] 4071s Get:52 http://ftpmaster.internal/ubuntu noble-security/multiverse amd64 c-n-f Metadata [384 B] 4071s Fetched 52.7 MB in 0s (0 B/s) 4071s Get:1 http://ftpmaster.internal/ubuntu noble-updates/main amd64 gcc-14-base amd64 14.2.0-4ubuntu2~24.04 [50.8 kB] 4071s Get:2 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libgcc-s1 amd64 14.2.0-4ubuntu2~24.04 [78.6 kB] 4071s Get:3 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libc6 amd64 2.39-0ubuntu8.6 [3263 kB] 4071s Get:4 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libunistring5 amd64 1.1-2build1.1 [536 kB] 4071s Get:5 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libidn2-0 amd64 2.3.7-2build1.1 [66.2 kB] 4071s Get:6 http://ftpmaster.internal/ubuntu noble/universe amd64 chaos-marmosets amd64 0.1.2-2 [8808 B] 4071s Get:7 http://ftpmaster.internal/ubuntu noble-updates/universe amd64 lib32stdc++6-14-dbg amd64 14.2.0-4ubuntu2~24.04 [12.5 MB] 4071s Get:8 http://ftpmaster.internal/ubuntu noble-updates/universe amd64 libstdc++6-14-dbg amd64 14.2.0-4ubuntu2~24.04 [12.7 MB] 4071s Get:9 http://ftpmaster.internal/ubuntu noble-updates/universe amd64 libx32stdc++6-14-dbg amd64 14.2.0-4ubuntu2~24.04 [12.6 MB] 4071s Get:10 http://ftpmaster.internal/ubuntu noble-updates/main amd64 libc6-dbg amd64 2.39-0ubuntu8.6 [7458 kB] 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Err 4071s Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) Could not connect to launchpad.net:443 (185.125.189.223), connection timed out Could not connect to launchpad.net:443 (185.125.189.222), connection timed out 4071s Err 4071s Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4071s Err 4071s Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4071s Fetched 49.3 MB in 6s (0 B/s) 4071s ----------------------------- Captured stderr call ----------------------------- 4071s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmppvfqx32e/cache/system/apt/var/lib/apt/lists/partial/ftpmaster.internal_ubuntu_dists_noble-proposed_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 4071s res = self._cache.update(fetch_progress, slist, pulse_interval) 4071s ERROR: Package download error, try again later: Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/chaos-marmosets-dbgsym_0.1.2-2_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) Could not connect to launchpad.net:443 (185.125.189.223), connection timed out Could not connect to launchpad.net:443 (185.125.189.222), connection timed out 4071s Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libidn2-0-dbgsym_2.3.7-2build1.1_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4071s Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libunistring5-dbgsym_1.1-2build1.1_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4071s 4071s ___________________ test_retrace_system_sandbox_gdb_sandbox ____________________ 4071s 4071s workdir = PosixPath('/tmp/tmpthq7_z0a') 4071s module_cachedir = PosixPath('/tmp/tmppvfqx32e/cache') 4071s divide_by_zero_crash = '/tmp/tmppvfqx32e/divide-by-zero.crash' 4071s 4071s @pytest.mark.skipif(not has_internet(), reason="online test") 4071s @pytest.mark.skipif( 4071s impl.get_system_architecture() != "amd64", 4071s reason="GDB sandbox only available on amd64", 4071s ) 4071s def test_retrace_system_sandbox_gdb_sandbox( 4071s workdir: pathlib.Path, module_cachedir: pathlib.Path, divide_by_zero_crash: str 4071s ) -> None: 4071s """Retrace a divide-by-zero crash in a system sandbox with a GDB sandbox.""" 4071s retraced_report_filename = workdir / "retraced.crash" 4071s env = os.environ | local_test_environment() 4071s cmd = [ 4071s "apport-retrace", 4071s "-v", 4071s "-o", 4071s str(retraced_report_filename), 4071s "--sandbox", 4071s "system", 4071s "--gdb-sandbox", 4071s "--cache", 4071s str(module_cachedir), 4071s divide_by_zero_crash, 4071s ] 4071s > subprocess.run(cmd, check=True, env=env) 4071s 4071s tests/system/test_apport_retrace.py:224: 4071s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4071s 4071s input = None, capture_output = False, timeout = None, check = True 4071s popenargs = (['apport-retrace', '-v', '-o', '/tmp/tmpthq7_z0a/retraced.crash', '--sandbox', 'system', ...],) 4071s kwargs = {'env': {'ADTTMP': '/tmp/autopkgtest.4KsJyk/autopkgtest_tmp', 'ADT_ARTIFACTS': '/tmp/autopkgtest.4KsJyk/system-tests-artifacts', 'ADT_NORMAL_USER': 'ubuntu', 'ADT_TEST_TRIGGERS': 'glib2.0/2.80.0-6ubuntu3.5', ...}} 4071s process = 4071s stdout = None, stderr = None, retcode = 1 4071s 4071s def run(*popenargs, 4071s input=None, capture_output=False, timeout=None, check=False, **kwargs): 4071s """Run command with arguments and return a CompletedProcess instance. 4071s 4071s The returned instance will have attributes args, returncode, stdout and 4071s stderr. By default, stdout and stderr are not captured, and those attributes 4071s will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them, 4071s or pass capture_output=True to capture both. 4071s 4071s If check is True and the exit code was non-zero, it raises a 4071s CalledProcessError. The CalledProcessError object will have the return code 4071s in the returncode attribute, and output & stderr attributes if those streams 4071s were captured. 4071s 4071s If timeout is given, and the process takes too long, a TimeoutExpired 4071s exception will be raised. 4071s 4071s There is an optional argument "input", allowing you to 4071s pass bytes or a string to the subprocess's stdin. If you use this argument 4071s you may not also use the Popen constructor's "stdin" argument, as 4071s it will be used internally. 4071s 4071s By default, all communication is in bytes, and therefore any "input" should 4071s be bytes, and the stdout and stderr will be bytes. If in text mode, any 4071s "input" should be a string, and stdout and stderr will be strings decoded 4071s according to locale encoding, or by "encoding" if set. Text mode is 4071s triggered by setting any of text, encoding, errors or universal_newlines. 4071s 4071s The other arguments are the same as for the Popen constructor. 4071s """ 4071s if input is not None: 4071s if kwargs.get('stdin') is not None: 4071s raise ValueError('stdin and input arguments may not both be used.') 4071s kwargs['stdin'] = PIPE 4071s 4071s if capture_output: 4071s if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None: 4071s raise ValueError('stdout and stderr arguments may not be used ' 4071s 'with capture_output.') 4071s kwargs['stdout'] = PIPE 4071s kwargs['stderr'] = PIPE 4071s 4071s with Popen(*popenargs, **kwargs) as process: 4071s try: 4071s stdout, stderr = process.communicate(input, timeout=timeout) 4071s except TimeoutExpired as exc: 4071s process.kill() 4071s if _mswindows: 4071s # Windows accumulates the output in a single blocking 4071s # read() call run on child threads, with the timeout 4071s # being done in a join() on those threads. communicate() 4071s # _after_ kill() is required to collect that and add it 4071s # to the exception. 4071s exc.stdout, exc.stderr = process.communicate() 4071s else: 4071s # POSIX _communicate already populated the output so 4071s # far into the TimeoutExpired exception. 4071s process.wait() 4071s raise 4071s except: # Including KeyboardInterrupt, communicate handled that. 4071s process.kill() 4071s # We don't call process.wait() as .__exit__ does that for us. 4071s raise 4071s retcode = process.poll() 4071s if check and retcode: 4071s > raise CalledProcessError(retcode, process.args, 4071s output=stdout, stderr=stderr) 4071s E subprocess.CalledProcessError: Command '['apport-retrace', '-v', '-o', '/tmp/tmpthq7_z0a/retraced.crash', '--sandbox', 'system', '--gdb-sandbox', '--cache', '/tmp/tmppvfqx32e/cache', '/tmp/tmppvfqx32e/divide-by-zero.crash']' returned non-zero exit status 1. 4071s 4071s /usr/lib/python3.12/subprocess.py:571: CalledProcessError 4071s ----------------------------- Captured stdout call ----------------------------- 4071s Hit http://ftpmaster.internal/ubuntu noble-proposed InRelease 4071s Hit http://ftpmaster.internal/ubuntu noble InRelease 4071s Hit http://ftpmaster.internal/ubuntu noble-updates InRelease 4071s Hit http://ftpmaster.internal/ubuntu noble-security InRelease 4071s Fetched 0 B in 0s (0 B/s) 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Ign 4071s Err 4071s Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) Could not connect to launchpad.net:443 (185.125.189.222), connection timed out Could not connect to launchpad.net:443 (185.125.189.223), connection timed out 4071s Err 4071s Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4071s Err 4071s Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4071s Fetched 0 B in 6s (0 B/s) 4071s ----------------------------- Captured stderr call ----------------------------- 4071s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmppvfqx32e/cache/system/apt/var/lib/apt/lists/partial/ftpmaster.internal_ubuntu_dists_noble-proposed_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 4071s res = self._cache.update(fetch_progress, slist, pulse_interval) 4071s ERROR: Package download error, try again later: Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/chaos-marmosets-dbgsym_0.1.2-2_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) Could not connect to launchpad.net:443 (185.125.189.222), connection timed out Could not connect to launchpad.net:443 (185.125.189.223), connection timed out 4071s Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libidn2-0-dbgsym_2.3.7-2build1.1_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4071s Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libunistring5-dbgsym_1.1-2build1.1_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4071s 4071s __________________________ test_retrace_jammy_sandbox __________________________ 4071s 4071s workdir = PosixPath('/tmp/tmpjp2s863s') 4071s module_cachedir = PosixPath('/tmp/tmppvfqx32e/cache') 4071s sandbox_config = '/tmp/tmpjp2s863s/config' 4071s 4071s @pytest.mark.skipif(not has_internet(), reason="online test") 4071s @pytest.mark.skipif( 4071s impl.get_system_architecture() != "amd64", 4071s reason="Test only works on amd64. See https://launchpad.net/bugs/2069815", 4071s ) 4071s def test_retrace_jammy_sandbox( 4071s workdir: pathlib.Path, module_cachedir: pathlib.Path, sandbox_config: pathlib.Path 4071s ) -> None: 4071s """Retrace a sleep crash from jammy in a sandbox.""" 4071s crash = get_test_data_directory() / "jammy_usr_bin_sleep.1000.crash" 4071s retraced_report_filename = workdir / "retraced.crash" 4071s env = os.environ | local_test_environment() 4071s cmd = [ 4071s "apport-retrace", 4071s "-v", 4071s "-o", 4071s str(retraced_report_filename), 4071s "--sandbox", 4071s str(sandbox_config), 4071s "--cache", 4071s str(module_cachedir), 4071s "--sandbox-dir", 4071s str(workdir / "apport_sandbox"), 4071s str(crash), 4071s ] 4071s > subprocess.run(cmd, check=True, env=env) 4071s 4071s tests/system/test_apport_retrace.py:256: 4071s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4071s 4071s input = None, capture_output = False, timeout = None, check = True 4071s popenargs = (['apport-retrace', '-v', '-o', '/tmp/tmpjp2s863s/retraced.crash', '--sandbox', '/tmp/tmpjp2s863s/config', ...],) 4071s kwargs = {'env': {'ADTTMP': '/tmp/autopkgtest.4KsJyk/autopkgtest_tmp', 'ADT_ARTIFACTS': '/tmp/autopkgtest.4KsJyk/system-tests-artifacts', 'ADT_NORMAL_USER': 'ubuntu', 'ADT_TEST_TRIGGERS': 'glib2.0/2.80.0-6ubuntu3.5', ...}} 4071s process = 4071s stdout = None, stderr = None, retcode = -9 4071s 4071s def run(*popenargs, 4071s input=None, capture_output=False, timeout=None, check=False, **kwargs): 4071s """Run command with arguments and return a CompletedProcess instance. 4071s 4071s The returned instance will have attributes args, returncode, stdout and 4071s stderr. By default, stdout and stderr are not captured, and those attributes 4071s will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them, 4071s or pass capture_output=True to capture both. 4071s 4071s If check is True and the exit code was non-zero, it raises a 4071s CalledProcessError. The CalledProcessError object will have the return code 4071s in the returncode attribute, and output & stderr attributes if those streams 4071s were captured. 4071s 4071s If timeout is given, and the process takes too long, a TimeoutExpired 4071s exception will be raised. 4071s 4071s There is an optional argument "input", allowing you to 4071s pass bytes or a string to the subprocess's stdin. If you use this argument 4071s you may not also use the Popen constructor's "stdin" argument, as 4071s it will be used internally. 4071s 4071s By default, all communication is in bytes, and therefore any "input" should 4071s be bytes, and the stdout and stderr will be bytes. If in text mode, any 4071s "input" should be a string, and stdout and stderr will be strings decoded 4071s according to locale encoding, or by "encoding" if set. Text mode is 4071s triggered by setting any of text, encoding, errors or universal_newlines. 4071s 4071s The other arguments are the same as for the Popen constructor. 4071s """ 4071s if input is not None: 4071s if kwargs.get('stdin') is not None: 4071s raise ValueError('stdin and input arguments may not both be used.') 4071s kwargs['stdin'] = PIPE 4071s 4071s if capture_output: 4071s if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None: 4071s raise ValueError('stdout and stderr arguments may not be used ' 4071s 'with capture_output.') 4071s kwargs['stdout'] = PIPE 4071s kwargs['stderr'] = PIPE 4071s 4071s with Popen(*popenargs, **kwargs) as process: 4071s try: 4071s stdout, stderr = process.communicate(input, timeout=timeout) 4071s except TimeoutExpired as exc: 4071s process.kill() 4071s if _mswindows: 4071s # Windows accumulates the output in a single blocking 4071s # read() call run on child threads, with the timeout 4071s # being done in a join() on those threads. communicate() 4071s # _after_ kill() is required to collect that and add it 4071s # to the exception. 4071s exc.stdout, exc.stderr = process.communicate() 4071s else: 4071s # POSIX _communicate already populated the output so 4071s # far into the TimeoutExpired exception. 4071s process.wait() 4071s raise 4071s except: # Including KeyboardInterrupt, communicate handled that. 4071s process.kill() 4071s # We don't call process.wait() as .__exit__ does that for us. 4071s raise 4071s retcode = process.poll() 4071s if check and retcode: 4071s > raise CalledProcessError(retcode, process.args, 4071s output=stdout, stderr=stderr) 4071s E subprocess.CalledProcessError: Command '['apport-retrace', '-v', '-o', '/tmp/tmpjp2s863s/retraced.crash', '--sandbox', '/tmp/tmpjp2s863s/config', '--cache', '/tmp/tmppvfqx32e/cache', '--sandbox-dir', '/tmp/tmpjp2s863s/apport_sandbox', '/tmp/autopkgtest.4KsJyk/autopkgtest_tmp/tests/data/jammy_usr_bin_sleep.1000.crash']' died with . 4071s 4071s /usr/lib/python3.12/subprocess.py:571: CalledProcessError 4071s ----------------------------- Captured stderr call ----------------------------- 4071s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmppvfqx32e/cache/Ubuntu 22.04/apt/var/lib/apt/lists/partial/ftpmaster.internal_ubuntu_dists_jammy_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 4071s res = self._cache.update(fetch_progress, slist, pulse_interval) 4071s ____________________ test_retrace_jammy_sandbox_gdb_sandbox ____________________ 4071s 4071s workdir = PosixPath('/tmp/tmpm3ra2mwj') 4071s module_cachedir = PosixPath('/tmp/tmppvfqx32e/cache') 4071s sandbox_config = '/tmp/tmpm3ra2mwj/config' 4071s 4071s @pytest.mark.skipif(not has_internet(), reason="online test") 4071s @pytest.mark.skipif( 4071s impl.get_system_architecture() != "amd64", 4071s reason="GDB sandbox only available on amd64", 4071s ) 4071s def test_retrace_jammy_sandbox_gdb_sandbox( 4071s workdir: pathlib.Path, module_cachedir: pathlib.Path, sandbox_config: pathlib.Path 4071s ) -> None: 4071s """Retrace a sleep crash from jammy in a sandbox with a GDB sandbox.""" 4071s crash = get_test_data_directory() / "jammy_usr_bin_sleep.1000.crash" 4071s retraced_report_filename = workdir / "retraced.crash" 4071s env = os.environ | local_test_environment() 4071s cmd = [ 4071s "apport-retrace", 4071s "-v", 4071s "-o", 4071s str(retraced_report_filename), 4071s "--sandbox", 4071s str(sandbox_config), 4071s "--gdb-sandbox", 4071s "--cache", 4071s str(module_cachedir), 4071s "--sandbox-dir", 4071s str(workdir / "apport_sandbox"), 4071s str(crash), 4071s ] 4071s > subprocess.run(cmd, check=True, env=env) 4071s 4071s tests/system/test_apport_retrace.py:290: 4071s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4071s 4071s input = None, capture_output = False, timeout = None, check = True 4071s popenargs = (['apport-retrace', '-v', '-o', '/tmp/tmpm3ra2mwj/retraced.crash', '--sandbox', '/tmp/tmpm3ra2mwj/config', ...],) 4071s kwargs = {'env': {'ADTTMP': '/tmp/autopkgtest.4KsJyk/autopkgtest_tmp', 'ADT_ARTIFACTS': '/tmp/autopkgtest.4KsJyk/system-tests-artifacts', 'ADT_NORMAL_USER': 'ubuntu', 'ADT_TEST_TRIGGERS': 'glib2.0/2.80.0-6ubuntu3.5', ...}} 4071s process = 4071s stdout = None, stderr = None, retcode = 1 4071s 4071s def run(*popenargs, 4071s input=None, capture_output=False, timeout=None, check=False, **kwargs): 4071s """Run command with arguments and return a CompletedProcess instance. 4071s 4071s The returned instance will have attributes args, returncode, stdout and 4071s stderr. By default, stdout and stderr are not captured, and those attributes 4071s will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them, 4071s or pass capture_output=True to capture both. 4071s 4071s If check is True and the exit code was non-zero, it raises a 4071s CalledProcessError. The CalledProcessError object will have the return code 4071s in the returncode attribute, and output & stderr attributes if those streams 4071s were captured. 4071s 4071s If timeout is given, and the process takes too long, a TimeoutExpired 4071s exception will be raised. 4071s 4071s There is an optional argument "input", allowing you to 4071s pass bytes or a string to the subprocess's stdin. If you use this argument 4071s you may not also use the Popen constructor's "stdin" argument, as 4071s it will be used internally. 4071s 4071s By default, all communication is in bytes, and therefore any "input" should 4071s be bytes, and the stdout and stderr will be bytes. If in text mode, any 4071s "input" should be a string, and stdout and stderr will be strings decoded 4071s according to locale encoding, or by "encoding" if set. Text mode is 4071s triggered by setting any of text, encoding, errors or universal_newlines. 4071s 4071s The other arguments are the same as for the Popen constructor. 4071s """ 4071s if input is not None: 4071s if kwargs.get('stdin') is not None: 4071s raise ValueError('stdin and input arguments may not both be used.') 4071s kwargs['stdin'] = PIPE 4071s 4071s if capture_output: 4071s if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None: 4071s raise ValueError('stdout and stderr arguments may not be used ' 4071s 'with capture_output.') 4071s kwargs['stdout'] = PIPE 4071s kwargs['stderr'] = PIPE 4071s 4071s with Popen(*popenargs, **kwargs) as process: 4071s try: 4071s stdout, stderr = process.communicate(input, timeout=timeout) 4071s except TimeoutExpired as exc: 4071s process.kill() 4071s if _mswindows: 4071s # Windows accumulates the output in a single blocking 4071s # read() call run on child threads, with the timeout 4071s # being done in a join() on those threads. communicate() 4071s # _after_ kill() is required to collect that and add it 4071s # to the exception. 4071s exc.stdout, exc.stderr = process.communicate() 4071s else: 4071s # POSIX _communicate already populated the output so 4071s # far into the TimeoutExpired exception. 4071s process.wait() 4071s raise 4071s except: # Including KeyboardInterrupt, communicate handled that. 4071s process.kill() 4071s # We don't call process.wait() as .__exit__ does that for us. 4071s raise 4071s retcode = process.poll() 4071s if check and retcode: 4071s > raise CalledProcessError(retcode, process.args, 4071s output=stdout, stderr=stderr) 4071s E subprocess.CalledProcessError: Command '['apport-retrace', '-v', '-o', '/tmp/tmpm3ra2mwj/retraced.crash', '--sandbox', '/tmp/tmpm3ra2mwj/config', '--gdb-sandbox', '--cache', '/tmp/tmppvfqx32e/cache', '--sandbox-dir', '/tmp/tmpm3ra2mwj/apport_sandbox', '/tmp/autopkgtest.4KsJyk/autopkgtest_tmp/tests/data/jammy_usr_bin_sleep.1000.crash']' returned non-zero exit status 1. 4071s 4071s /usr/lib/python3.12/subprocess.py:571: CalledProcessError 4071s ----------------------------- Captured stdout call ----------------------------- 4071s Hit http://ftpmaster.internal/ubuntu jammy InRelease 4071s Fetched 0 B in 0s (0 B/s) 4071s Fetched 0 B in 0s (0 B/s) 4071s Extracting downloaded debs... 4071s Get:1 http://ftpmaster.internal/ubuntu jammy/main amd64 gcc-12-base amd64 12-20220319-1ubuntu1 [18.9 kB] 4071s Get:2 http://ftpmaster.internal/ubuntu jammy/main amd64 libcrypt1 amd64 1:4.4.27-1 [82.0 kB] 4071s Get:3 http://ftpmaster.internal/ubuntu jammy/main amd64 libc6 amd64 2.35-0ubuntu3 [3235 kB] 4071s Get:4 http://ftpmaster.internal/ubuntu jammy/main amd64 libgcc-s1 amd64 12-20220319-1ubuntu1 [54.2 kB] 4071s Get:5 http://ftpmaster.internal/ubuntu jammy/main amd64 libacl1 amd64 2.3.1-1 [16.2 kB] 4071s Get:6 http://ftpmaster.internal/ubuntu jammy/main amd64 libattr1 amd64 1:2.5.1-1build1 [13.3 kB] 4071s Get:7 http://ftpmaster.internal/ubuntu jammy/main amd64 libgmp10 amd64 2:6.2.1+dfsg-3ubuntu1 [250 kB] 4071s Get:8 http://ftpmaster.internal/ubuntu jammy/main amd64 libpcre2-8-0 amd64 10.39-3build1 [220 kB] 4071s Get:9 http://ftpmaster.internal/ubuntu jammy/main amd64 libselinux1 amd64 3.3-1build2 [74.6 kB] 4071s Get:10 http://ftpmaster.internal/ubuntu jammy/main amd64 coreutils amd64 8.32-4.1ubuntu1 [1438 kB] 4071s Get:11 http://ftpmaster.internal/ubuntu jammy/main amd64 libbz2-1.0 amd64 1.0.8-5build1 [34.4 kB] 4071s Get:12 http://ftpmaster.internal/ubuntu jammy/main amd64 liblzma5 amd64 5.2.5-2ubuntu1 [99.5 kB] 4071s Get:13 http://ftpmaster.internal/ubuntu jammy/main amd64 libzstd1 amd64 1.4.8+dfsg-3build1 [324 kB] 4071s Get:14 http://ftpmaster.internal/ubuntu jammy/main amd64 zlib1g amd64 1:1.2.11.dfsg-2ubuntu9 [58.2 kB] 4071s Get:15 http://ftpmaster.internal/ubuntu jammy/main amd64 tar amd64 1.34+dfsg-1build3 [295 kB] 4071s Get:16 http://ftpmaster.internal/ubuntu jammy/main amd64 dpkg amd64 1.21.1ubuntu2 [1240 kB] 4071s Get:17 http://ftpmaster.internal/ubuntu jammy/main amd64 perl-base amd64 5.34.0-3ubuntu1 [1762 kB] 4071s Get:18 http://ftpmaster.internal/ubuntu jammy/main amd64 debconf all 1.5.79ubuntu1 [126 kB] 4071s Get:19 http://ftpmaster.internal/ubuntu jammy/main amd64 sensible-utils all 0.0.17 [20.1 kB] 4071s Get:20 http://ftpmaster.internal/ubuntu jammy/main amd64 ucf all 3.0043 [56.1 kB] 4071s Get:21 http://ftpmaster.internal/ubuntu jammy/main amd64 libdebuginfod-common all 0.186-1build1 [7878 B] 4071s Get:22 http://ftpmaster.internal/ubuntu jammy/main amd64 libblkid1 amd64 2.37.2-4ubuntu3 [104 kB] 4071s Get:23 http://ftpmaster.internal/ubuntu jammy/main amd64 libcom-err2 amd64 1.46.5-2ubuntu1 [9846 B] 4071s Get:24 http://ftpmaster.internal/ubuntu jammy/main amd64 libdb5.3 amd64 5.3.28+dfsg1-0.8ubuntu3 [722 kB] 4071s Get:25 http://ftpmaster.internal/ubuntu jammy/main amd64 libkrb5support0 amd64 1.19.2-2 [32.4 kB] 4071s Get:26 http://ftpmaster.internal/ubuntu jammy/main amd64 libk5crypto3 amd64 1.19.2-2 [86.4 kB] 4071s Get:27 http://ftpmaster.internal/ubuntu jammy/main amd64 libkeyutils1 amd64 1.6.1-2ubuntu3 [10.4 kB] 4071s Get:28 http://ftpmaster.internal/ubuntu jammy/main amd64 libssl3 amd64 3.0.2-0ubuntu1 [1899 kB] 4071s Get:29 http://ftpmaster.internal/ubuntu jammy/main amd64 libkrb5-3 amd64 1.19.2-2 [356 kB] 4071s Get:30 http://ftpmaster.internal/ubuntu jammy/main amd64 libgssapi-krb5-2 amd64 1.19.2-2 [144 kB] 4071s Get:31 http://ftpmaster.internal/ubuntu jammy/main amd64 libmount1 amd64 2.37.2-4ubuntu3 [122 kB] 4071s Get:32 http://ftpmaster.internal/ubuntu jammy/main amd64 libtinfo6 amd64 6.3-2 [104 kB] 4071s Get:33 http://ftpmaster.internal/ubuntu jammy/main amd64 libncursesw6 amd64 6.3-2 [149 kB] 4071s Get:34 http://ftpmaster.internal/ubuntu jammy/main amd64 libtirpc-common all 1.3.2-2build1 [7616 B] 4071s Get:35 http://ftpmaster.internal/ubuntu jammy/main amd64 libtirpc3 amd64 1.3.2-2build1 [81.1 kB] 4071s Get:36 http://ftpmaster.internal/ubuntu jammy/main amd64 libnsl2 amd64 1.3.0-2build2 [42.3 kB] 4071s Get:37 http://ftpmaster.internal/ubuntu jammy/main amd64 libpcre3 amd64 2:8.39-13build5 [245 kB] 4071s Get:38 http://ftpmaster.internal/ubuntu jammy/main amd64 libuuid1 amd64 2.37.2-4ubuntu3 [24.2 kB] 4071s Get:39 http://ftpmaster.internal/ubuntu jammy/main amd64 libelf1 amd64 0.186-1build1 [51.0 kB] 4071s Get:40 http://ftpmaster.internal/ubuntu jammy/main amd64 libexpat1 amd64 2.4.7-1 [90.7 kB] 4071s Get:41 http://ftpmaster.internal/ubuntu jammy/main amd64 libffi8 amd64 3.4.2-4 [22.3 kB] 4071s Get:42 http://ftpmaster.internal/ubuntu jammy/main amd64 libglib2.0-0 amd64 2.72.1-1 [1460 kB] 4071s Get:43 http://ftpmaster.internal/ubuntu jammy/main amd64 libnettle8 amd64 3.7.3-1build2 [159 kB] 4071s Get:44 http://ftpmaster.internal/ubuntu jammy/main amd64 libhogweed6 amd64 3.7.3-1build2 [199 kB] 4071s Get:45 http://ftpmaster.internal/ubuntu jammy/main amd64 libunistring2 amd64 1.0-1 [554 kB] 4071s Get:46 http://ftpmaster.internal/ubuntu jammy/main amd64 libidn2-0 amd64 2.3.2-2build1 [66.4 kB] 4071s Get:47 http://ftpmaster.internal/ubuntu jammy/main amd64 libp11-kit0 amd64 0.24.0-6build1 [252 kB] 4071s Get:48 http://ftpmaster.internal/ubuntu jammy/main amd64 libtasn1-6 amd64 4.18.0-4build1 [42.9 kB] 4071s Get:49 http://ftpmaster.internal/ubuntu jammy/main amd64 libgnutls30 amd64 3.7.3-4ubuntu1 [968 kB] 4071s Get:50 http://ftpmaster.internal/ubuntu jammy/main amd64 libstdc++6 amd64 12-20220319-1ubuntu1 [699 kB] 4071s Get:51 http://ftpmaster.internal/ubuntu jammy/main amd64 libicu70 amd64 70.1-2 [10.6 MB] 4071s Get:52 http://ftpmaster.internal/ubuntu jammy/main amd64 libmpdec3 amd64 2.5.1-2build2 [86.8 kB] 4071s Get:53 http://ftpmaster.internal/ubuntu jammy/main amd64 libpython3.10-minimal amd64 3.10.4-3 [809 kB] 4071s Get:54 http://ftpmaster.internal/ubuntu jammy/main amd64 media-types all 7.0.0 [25.5 kB] 4071s Get:55 http://ftpmaster.internal/ubuntu jammy/main amd64 readline-common all 8.1.2-1 [53.5 kB] 4071s Get:56 http://ftpmaster.internal/ubuntu jammy/main amd64 libreadline8 amd64 8.1.2-1 [153 kB] 4071s Get:57 http://ftpmaster.internal/ubuntu jammy/main amd64 libsqlite3-0 amd64 3.37.2-2 [643 kB] 4071s Get:58 http://ftpmaster.internal/ubuntu jammy/main amd64 libpython3.10-stdlib amd64 3.10.4-3 [1830 kB] 4071s Get:59 http://ftpmaster.internal/ubuntu jammy/main amd64 libxxhash0 amd64 0.8.1-1 [27.3 kB] 4071s Get:60 http://ftpmaster.internal/ubuntu jammy/main amd64 libnghttp2-14 amd64 1.43.0-1build3 [76.3 kB] 4071s Get:61 http://ftpmaster.internal/ubuntu jammy/main amd64 libpsl5 amd64 0.21.0-1.2build2 [58.4 kB] 4071s Get:62 http://ftpmaster.internal/ubuntu jammy/main amd64 libdw1 amd64 0.186-1build1 [250 kB] 4071s Get:63 http://ftpmaster.internal/ubuntu jammy/main amd64 libbabeltrace1 amd64 1.5.8-2build1 [160 kB] 4071s Get:64 http://ftpmaster.internal/ubuntu jammy/main amd64 libbrotli1 amd64 1.0.9-2build6 [315 kB] 4071s Get:65 http://ftpmaster.internal/ubuntu jammy/main amd64 libsasl2-modules-db amd64 2.1.27+dfsg2-3ubuntu1 [20.8 kB] 4071s Get:66 http://ftpmaster.internal/ubuntu jammy/main amd64 libsasl2-2 amd64 2.1.27+dfsg2-3ubuntu1 [53.9 kB] 4071s Get:67 http://ftpmaster.internal/ubuntu jammy/main amd64 libldap-2.5-0 amd64 2.5.11+dfsg-1~exp1ubuntu3 [184 kB] 4071s Get:68 http://ftpmaster.internal/ubuntu jammy/main amd64 librtmp1 amd64 2.4+20151223.gitfa8646d.1-2build4 [58.2 kB] 4071s Get:69 http://ftpmaster.internal/ubuntu jammy/main amd64 libssh-4 amd64 0.9.6-2build1 [184 kB] 4071s Get:70 http://ftpmaster.internal/ubuntu jammy/main amd64 libcurl3-gnutls amd64 7.81.0-1 [282 kB] 4071s Get:71 http://ftpmaster.internal/ubuntu jammy/main amd64 libdebuginfod1 amd64 0.186-1build1 [12.7 kB] 4071s Get:72 http://ftpmaster.internal/ubuntu jammy/main amd64 libipt2 amd64 2.0.5-1 [46.4 kB] 4071s Get:73 http://ftpmaster.internal/ubuntu jammy/main amd64 libmpfr6 amd64 4.1.0-3build3 [1425 kB] 4071s Get:74 http://ftpmaster.internal/ubuntu jammy/main amd64 libpython3.10 amd64 3.10.4-3 [1951 kB] 4071s Get:75 http://ftpmaster.internal/ubuntu jammy/main amd64 libsource-highlight-common all 3.1.9-4.1build2 [64.5 kB] 4071s Get:76 http://ftpmaster.internal/ubuntu jammy/main amd64 libboost-regex1.74.0 amd64 1.74.0-14ubuntu3 [511 kB] 4071s Get:77 http://ftpmaster.internal/ubuntu jammy/main amd64 libsource-highlight4v5 amd64 3.1.9-4.1build2 [207 kB] 4071s Get:78 http://ftpmaster.internal/ubuntu jammy/main amd64 gdb amd64 12.0.90-0ubuntu1 [3930 kB] 4071s Fetched 42.1 MB in 0s (0 B/s) 4071s Extracting downloaded debs... 4071s ----------------------------- Captured stderr call ----------------------------- 4071s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmppvfqx32e/cache/Ubuntu 22.04/apt/var/lib/apt/lists/partial/ftpmaster.internal_ubuntu_dists_jammy_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 4071s res = self._cache.update(fetch_progress, slist, pulse_interval) 4071s Traceback (most recent call last): 4071s File "/usr/bin/apport-retrace", line 696, in 4071s main() 4071s File "/usr/bin/apport-retrace", line 465, in main 4071s sandbox, cache, outdated_msg = apport.sandboxutils.make_sandbox( 4071s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 4071s File "/usr/lib/python3/dist-packages/apport/sandboxutils.py", line 273, in make_sandbox 4071s pkgs = needed_runtime_packages(report, pkgmap_cache_dir, pkg_versions, verbose) 4071s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 4071s File "/usr/lib/python3/dist-packages/apport/sandboxutils.py", line 102, in needed_runtime_packages 4071s pkg = packaging.get_file_package( 4071s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 4071s File "/usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py", line 628, in get_file_package 4071s return self._search_contents(file, map_cachedir, release, arch) 4071s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 4071s File "/usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py", line 1568, in _search_contents 4071s contents_mapping = self._contents_mapping(map_cachedir, release, arch) 4071s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 4071s File "/usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py", line 199, in _contents_mapping 4071s self._contents_mapping_obj = pickle.load(fp) 4071s ^^^^^^^^^^^^^^^ 4071s EOFError: Ran out of input 4071s ________________ TestApportValgrind.test_sandbox_cache_options _________________ 4071s 4071s self = 4071s 4071s @unittest.skipIf(MEM_TOTAL_MiB < 2000, f"{MEM_TOTAL_MiB} MiB is not enough memory") 4071s def test_sandbox_cache_options(self): 4071s """apport-valgrind creates a user specified sandbox and cache""" 4071s sandbox = os.path.join(self.workdir, "test-sandbox") 4071s cache = os.path.join(self.workdir, "test-cache") 4071s 4071s cmd = [ 4071s "apport-valgrind", 4071s "--sandbox-dir", 4071s sandbox, 4071s "--cache", 4071s cache, 4071s "/usr/bin/true", 4071s ] 4071s > subprocess.check_call(cmd, env=self.env) 4071s 4071s tests/system/test_apport_valgrind.py:58: 4071s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4071s 4071s popenargs = (['apport-valgrind', '--sandbox-dir', '/tmp/tmp76gxybj8/test-sandbox', '--cache', '/tmp/tmp76gxybj8/test-cache', '/usr/bin/true'],) 4071s kwargs = {'env': {'ADTTMP': '/tmp/autopkgtest.4KsJyk/autopkgtest_tmp', 'ADT_ARTIFACTS': '/tmp/autopkgtest.4KsJyk/system-tests-artifacts', 'ADT_NORMAL_USER': 'ubuntu', 'ADT_TEST_TRIGGERS': 'glib2.0/2.80.0-6ubuntu3.5', ...}} 4071s retcode = 1 4071s cmd = ['apport-valgrind', '--sandbox-dir', '/tmp/tmp76gxybj8/test-sandbox', '--cache', '/tmp/tmp76gxybj8/test-cache', '/usr/bin/true'] 4071s 4071s def check_call(*popenargs, **kwargs): 4071s """Run command with arguments. Wait for command to complete. If 4071s the exit code was zero then return, otherwise raise 4071s CalledProcessError. The CalledProcessError object will have the 4071s return code in the returncode attribute. 4071s 4071s The arguments are the same as for the call function. Example: 4071s 4071s check_call(["ls", "-l"]) 4071s """ 4071s retcode = call(*popenargs, **kwargs) 4071s if retcode: 4071s cmd = kwargs.get("args") 4071s if cmd is None: 4071s cmd = popenargs[0] 4071s > raise CalledProcessError(retcode, cmd) 4071s E subprocess.CalledProcessError: Command '['apport-valgrind', '--sandbox-dir', '/tmp/tmp76gxybj8/test-sandbox', '--cache', '/tmp/tmp76gxybj8/test-cache', '/usr/bin/true']' returned non-zero exit status 1. 4071s 4071s /usr/lib/python3.12/subprocess.py:413: CalledProcessError 4071s ----------------------------- Captured stderr call ----------------------------- 4071s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmp76gxybj8/test-cache/system/apt/var/lib/apt/lists/partial/ftpmaster.internal_ubuntu_dists_noble-proposed_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 4071s res = self._cache.update(fetch_progress, slist, pulse_interval) 4071s ERROR: Package download error, try again later: Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/coreutils-dbgsym_9.4-3ubuntu6.1_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) Could not connect to launchpad.net:443 (185.125.189.223), connection timed out Could not connect to launchpad.net:443 (185.125.189.222), connection timed out 4071s Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libacl1-dbgsym_2.3.2-1build1.1_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4071s Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libattr1-dbgsym_2.5.2-1build1.1_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4071s Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libgmp10-dbgsym_6.3.0%2bdfsg-2ubuntu6.1_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4071s Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libidn2-0-dbgsym_2.3.7-2build1.1_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4071s Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libpcre2-8-0-dbgsym_10.42-4ubuntu2.1_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4071s Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libselinux1-dbgsym_3.5-2ubuntu2.1_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4071s Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libssl3t64-dbgsym_3.0.13-0ubuntu3.6_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4071s Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libunistring5-dbgsym_1.1-2build1.1_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4071s 4071s 4071s Interrupted while creating sandbox 4071s ____________________ test_install_packages_system[one-line] ____________________ 4071s 4071s self = 4071s rootdir = '/tmp/tmpdnrqbhrz/root', configdir = None, release = 'Ubuntu 24.04' 4071s packages = [('coreutils', '9.4-3ubuntu6.1'), ('tzdata', '1.1')], verbose = False 4071s cache_dir = '/tmp/tmpdnrqbhrz/cache', permanent_rootdir = False 4071s architecture = 'amd64', origins = None, install_dbg = True, install_deps = False 4071s 4071s def install_packages( 4071s self, 4071s rootdir, 4071s configdir, 4071s release, 4071s packages, 4071s verbose=False, 4071s cache_dir=None, 4071s permanent_rootdir=False, 4071s architecture=None, 4071s origins=None, 4071s install_dbg=True, 4071s install_deps=False, 4071s ): # pylint: disable=too-many-arguments 4071s # TODO: Split into smaller functions/methods 4071s # pylint: disable=too-many-branches,too-many-locals 4071s # pylint: disable=too-many-nested-blocks,too-many-statements 4071s """Install packages into a sandbox (for apport-retrace). 4071s 4071s In order to work without any special permissions and without touching 4071s the running system, this should only download and unpack packages into 4071s the given root directory, not install them into the system. 4071s 4071s configdir points to a directory with by-release configuration files for 4071s the packaging system; this is completely dependent on the backend 4071s implementation, the only assumption is that this looks into 4071s configdir/release/, so that you can use retracing for multiple 4071s DistroReleases. As a special case, if configdir is None, it uses the 4071s current system configuration, and "release" is ignored. 4071s 4071s release is the value of the report's 'DistroRelease' field. 4071s 4071s packages is a list of ('packagename', 'version') tuples. If the version 4071s is None, it should install the most current available version. 4071s 4071s If cache_dir is given, then the downloaded packages will be stored 4071s there, to speed up subsequent retraces. 4071s 4071s If permanent_rootdir is True, then the sandbox created from the 4071s downloaded packages will be reused, to speed up subsequent retraces. 4071s 4071s If architecture is given, the sandbox will be created with packages of 4071s the given architecture (as specified in a report's "Architecture" 4071s field). If not given it defaults to the host system's architecture. 4071s 4071s If origins is given, the sandbox will be created with apt data sources 4071s for foreign origins. 4071s 4071s If install_deps is True, then the dependencies of packages will also 4071s be installed. 4071s 4071s Return a string with outdated packages, or an empty string if all 4071s packages were installed. 4071s 4071s If something is wrong with the environment (invalid configuration, 4071s package servers down, etc.), this should raise a SystemError with a 4071s meaningful error message. 4071s """ 4071s if not architecture: 4071s architecture = self.get_system_architecture() 4071s if not configdir: 4071s apt_dir = "/etc/apt" 4071s self._current_release_codename = self.get_distro_codename() 4071s else: 4071s # support architecture specific config, fall back to global config 4071s apt_dir = os.path.join(configdir, release) 4071s if architecture != self.get_system_architecture(): 4071s arch_apt_dir = os.path.join(configdir, release, architecture) 4071s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 4071s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 4071s if os.path.exists(arch_old_sources) or ( 4071s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 4071s ): 4071s apt_dir = arch_apt_dir 4071s 4071s # set mirror for get_file_package() 4071s try: 4071s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 4071s except SystemError as error: 4071s apport.logging.warning("cannot determine mirror: %s", str(error)) 4071s 4071s # set current release code name for _distro_release_to_codename 4071s with open( 4071s os.path.join(configdir, release, "codename"), encoding="utf-8" 4071s ) as f: 4071s self._current_release_codename = f.read().strip() 4071s 4071s # create apt sandbox 4071s if cache_dir: 4071s tmp_aptroot = False 4071s if architecture != self.get_system_architecture(): 4071s aptroot_arch = architecture 4071s else: 4071s aptroot_arch = "" 4071s if configdir: 4071s aptroot = os.path.join(cache_dir, release, aptroot_arch, "apt") 4071s else: 4071s aptroot = os.path.join(cache_dir, "system", aptroot_arch, "apt") 4071s if not os.path.isdir(aptroot): 4071s os.makedirs(aptroot) 4071s else: 4071s tmp_aptroot = True 4071s aptroot = tempfile.mkdtemp() 4071s 4071s apt.apt_pkg.config.set("APT::Architecture", architecture) 4071s apt.apt_pkg.config.set("Acquire::Languages", "none") 4071s # directly connect to Launchpad when downloading deb files 4071s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 4071s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 4071s 4071s if verbose: 4071s fetchProgress = apt.progress.text.AcquireProgress() 4071s else: 4071s fetchProgress = apt.progress.base.AcquireProgress() 4071s if not tmp_aptroot: 4071s apt_cache = self._sandbox_cache( 4071s aptroot, 4071s apt_dir, 4071s fetchProgress, 4071s self.get_distro_name(), 4071s self._current_release_codename, 4071s origins, 4071s architecture, 4071s ) 4071s else: 4071s self._build_apt_sandbox( 4071s aptroot, 4071s apt_dir, 4071s self.get_distro_name(), 4071s self._current_release_codename, 4071s origins, 4071s ) 4071s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 4071s try: 4071s apt_cache.update(fetchProgress) 4071s except apt.cache.FetchFailedException as error: 4071s raise SystemError(str(error)) from error 4071s apt_cache.open() 4071s 4071s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 4071s 4071s obsolete = "" 4071s 4071s src_records = apt.apt_pkg.SourceRecords() 4071s 4071s # read original package list 4071s pkg_list = os.path.join(rootdir, "packages.txt") 4071s pkg_versions = {} 4071s if os.path.exists(pkg_list): 4071s with open(pkg_list, encoding="utf-8") as f: 4071s for line in f: 4071s line = line.strip() 4071s if not line: 4071s continue 4071s (p, v) = line.split() 4071s pkg_versions[p] = v 4071s 4071s # mark packages for installation 4071s real_pkgs = set() 4071s lp_cache = {} 4071s fetcher = apt.apt_pkg.Acquire(fetchProgress) 4071s # need to keep AcquireFile references 4071s acquire_queue = [] 4071s # add any dependencies to the packages list 4071s if install_deps: 4071s deps = [] 4071s for pkg, ver in packages: 4071s try: 4071s cache_pkg = apt_cache[pkg] 4071s except KeyError: 4071s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 4071s obsolete += f"{m}\n" 4071s apport.logging.warning("%s", m) 4071s continue 4071s for dep in cache_pkg.candidate.dependencies: 4071s # the dependency may be satisfied by a different package 4071s if dep[0].name not in apt_cache: 4071s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 4071s # the version in dep is the one from pkg's dependencies, 4071s # so use the version from the cache 4071s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 4071s # if the dependency is in the list of packages we don't 4071s # need to look up its dependencies again 4071s if dep[0].name in [pkg[0] for pkg in packages]: 4071s continue 4071s # if the package is already extracted in the sandbox 4071s # because the report needs that package we don't want to 4071s # install a newer version which may cause a CRC mismatch 4071s # with the installed dbg symbols 4071s if dep[0].name in pkg_versions: 4071s inst_version = pkg_versions[dep[0].name] 4071s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 4071s deps.append((dep[0].name, inst_version)) 4071s else: 4071s deps.append((dep[0].name, dep_pkg_vers)) 4071s else: 4071s deps.append((dep[0].name, dep_pkg_vers)) 4071s if dep[0].name not in [pkg[0] for pkg in packages]: 4071s packages.append((dep[0].name, None)) 4071s packages.extend(deps) 4071s 4071s for pkg, ver in packages: 4071s try: 4071s cache_pkg = apt_cache[pkg] 4071s except KeyError: 4071s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 4071s obsolete += f"{m}\n" 4071s apport.logging.warning("%s", m) 4071s continue 4071s 4071s # try to select matching version 4071s try: 4071s if ver: 4071s cache_pkg.candidate = cache_pkg.versions[ver] 4071s except KeyError: 4071s (lp_url, sha1sum) = self.get_lp_binary_package( 4071s release, pkg, ver, architecture 4071s ) 4071s if lp_url: 4071s acquire_queue.append( 4071s apt.apt_pkg.AcquireFile( 4071s fetcher, lp_url, hash=f"sha1:{sha1sum}", destdir=archivedir 4071s ) 4071s ) 4071s lp_cache[pkg] = ver 4071s else: 4071s obsolete += ( 4071s f"{pkg} version {ver} required," 4071s f" but {cache_pkg.candidate.version} is available\n" 4071s ) 4071s ver = cache_pkg.candidate.version 4071s 4072s candidate = cache_pkg.candidate 4072s real_pkgs.add(pkg) 4072s 4072s if permanent_rootdir: 4072s virtual_mapping = self._virtual_mapping(aptroot) 4072s # Remember all the virtual packages that this package provides, 4072s # so that if we encounter that virtual package as a 4072s # Conflicts/Replaces later, we know to remove this package from 4072s # the cache. 4072s for p in candidate.provides: 4072s virtual_mapping.setdefault(p, set()).add(pkg) 4072s conflicts = [] 4072s if "Conflicts" in candidate.record: 4072s conflicts += apt.apt_pkg.parse_depends( 4072s candidate.record["Conflicts"] 4072s ) 4072s if "Replaces" in candidate.record: 4072s conflicts += apt.apt_pkg.parse_depends(candidate.record["Replaces"]) 4072s for conflict in conflicts: 4072s # if the package conflicts with itself its wonky e.g. 4072s # gdb in artful 4072s if conflict[0][0] == candidate.package.name: 4072s continue 4072s # apt_pkg.parse_depends needs to handle the or operator, 4072s # but as policy states it is invalid to use that in 4072s # Replaces/Depends, we can safely choose the first value 4072s # here. 4072s conflict = conflict[0] 4072s if apt_cache.is_virtual_package(conflict[0]): 4072s try: 4072s providers = virtual_mapping[conflict[0]] 4072s except KeyError: 4072s # We may not have seen the virtual package that 4072s # this conflicts with, so we can assume it's not 4072s # unpacked into the sandbox. 4072s continue 4072s for p in providers: 4072s # if the candidate package being installed 4072s # conflicts with but also provides a virtual 4072s # package don't act on the candidate e.g. 4072s # libpam-modules and libpam-mkhomedir in artful 4072s if p == candidate.package.name: 4072s continue 4072s debs = os.path.join(archivedir, f"{p}_*.deb") 4072s for path in glob.glob(debs): 4072s ver = self._deb_version(path) 4072s if apt.apt_pkg.check_dep(ver, conflict[2], conflict[1]): 4072s os.unlink(path) 4072s try: 4072s del pkg_versions[p] 4072s except KeyError: 4072s pass 4072s del providers 4072s else: 4072s debs = os.path.join(archivedir, f"{conflict[0]}_*.deb") 4072s for path in glob.glob(debs): 4072s ver = self._deb_version(path) 4072s if apt.apt_pkg.check_dep(ver, conflict[2], conflict[1]): 4072s os.unlink(path) 4072s try: 4072s del pkg_versions[conflict[0]] 4072s except KeyError: 4072s pass 4072s 4072s if candidate.architecture != "all" and install_dbg: 4072s try: 4072s dbg_pkg = f"{pkg}-dbg" 4072s dbg = apt_cache[dbg_pkg] 4072s pkg_found = False 4072s # try to get the same version as pkg 4072s if ver: 4072s try: 4072s dbg.candidate = dbg.versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbg_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbg_pkg] = ver 4072s pkg_found = True 4072s # if it can't be found in Launchpad failover to a 4072s # code path that'll use -dbgsym packages 4072s else: 4072s raise 4072s if not pkg_found: 4072s try: 4072s dbg.candidate = dbg.versions[candidate.version] 4072s except KeyError: 4072s obsolete += ( 4072s f"outdated -dbg package for {pkg}:" 4072s f" package version {ver}" 4072s f" -dbg version {dbg.candidate.version}\n" 4072s ) 4072s real_pkgs.add(dbg_pkg) 4072s except KeyError: 4072s # install all -dbg from the source package; lookup() just 4072s # works from the current list pointer, we always need to 4072s # start from the beginning 4072s src_records.restart() 4072s if src_records.lookup(candidate.source_name): 4072s # ignore transitional packages 4072s # False positive, see 4072s # https://github.com/PyCQA/pylint/issues/7122 4072s # pylint: disable=not-an-iterable 4072s dbgs = [ 4072s p 4072s for p in src_records.binaries 4072s if p.endswith("-dbg") 4072s and p in apt_cache 4072s and "transitional" not in apt_cache[p].candidate.description 4072s ] 4072s # if a specific version of a package was requested 4072s # only install dbg pkgs whose version matches 4072s if ver: 4072s for dbg in dbgs: 4072s if apt_cache[dbg].candidate.version != ver: 4072s dbgs.remove(dbg) 4072s else: 4072s dbgs = [] 4072s if dbgs: 4072s for p in dbgs: 4072s # if the package has already been added to 4072s # real_pkgs don't search for it again 4072s if p in real_pkgs: 4072s continue 4072s pkg_found = False 4072s # prefer the version requested 4072s if ver: 4072s try: 4072s apt_cache[p].candidate = apt_cache[p].versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, p, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[p] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s try: 4072s apt_cache[p].candidate = apt_cache[p].versions[ 4072s candidate.version 4072s ] 4072s except KeyError: 4072s # we don't really expect that, but it's 4072s # possible that other binaries have a 4072s # different version 4072s pass 4072s real_pkgs.add(p) 4072s else: 4072s pkg_found = False 4072s dbgsym_pkg = f"{pkg}-dbgsym" 4072s try: 4072s dbgsym = apt_cache[dbgsym_pkg] 4072s real_pkgs.add(dbgsym_pkg) 4072s # prefer the version requested 4072s if ver: 4072s try: 4072s dbgsym.candidate = dbgsym.versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbgsym_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbgsym_pkg] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s try: 4072s dbgsym.candidate = dbgsym.versions[ 4072s candidate.version 4072s ] 4072s except KeyError: 4072s obsolete += ( 4072s f"outdated debug symbol package" 4072s f" for {pkg}: package version" 4072s f" {candidate.version}" 4072s f" dbgsym version" 4072s f" {dbgsym.candidate.version}\n" 4072s ) 4072s 4072s except KeyError: 4072s if ver: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbgsym_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbgsym_pkg] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s obsolete += f"no debug symbol package found for {pkg}\n" 4072s 4072s # unpack packages, weed out the ones that are already installed (for 4072s # permanent sandboxes) 4072s logger = logging.getLogger(__name__) 4072s requested_pkgs = dict(packages) 4072s for p in real_pkgs.copy(): 4072s if p in requested_pkgs: 4072s if requested_pkgs[p] is None: 4072s # We already have the latest version of this package 4072s if pkg_versions.get(p) == apt_cache[p].candidate.version: 4072s logger.debug( 4072s "Removing %s which is already the right version", p 4072s ) 4072s real_pkgs.remove(p) 4072s else: 4072s logger.debug( 4072s "Installing %s version %s", 4072s p, 4072s apt_cache[p].candidate.version, 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s elif pkg_versions.get(p) != requested_pkgs[p]: 4072s logger.debug( 4072s "Installing %s version %s", p, apt_cache[p].candidate.version 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s elif pkg_versions.get(p) != apt_cache[p].candidate.version: 4072s logger.debug( 4072s "Installing %s version %s", p, apt_cache[p].candidate.version 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s else: 4072s logger.debug("Removing %s which is already the right version", p) 4072s real_pkgs.remove(p) 4072s elif pkg_versions.get(p) != apt_cache[p].candidate.version: 4072s logger.debug("Installing %s", p) 4072s apt_cache[p].mark_install(False, False) 4072s else: 4072s logger.debug("Removing %s which is already the right version", p) 4072s real_pkgs.remove(p) 4072s 4072s last_written = time.time() 4072s # fetch packages 4072s try: 4072s > apt_cache.fetch_archives(fetcher=fetcher) 4072s 4072s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1321: 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s /usr/lib/python3/dist-packages/apt/cache.py:475: in fetch_archives 4072s return self._fetch_archives( 4072s /usr/lib/python3/dist-packages/apt/cache.py:443: in _fetch_archives 4072s return self._run_fetcher(fetcher, allow_unauthenticated) 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s 4072s self = 4072s fetcher = 4072s allow_unauthenticated = True 4072s 4072s def _run_fetcher( 4072s self, fetcher: apt_pkg.Acquire, allow_unauthenticated: bool | None 4072s ) -> int: 4072s if allow_unauthenticated is None: 4072s allow_unauthenticated = apt_pkg.config.find_b( 4072s "APT::Get::" "AllowUnauthenticated", False 4072s ) 4072s 4072s untrusted = [item for item in fetcher.items if not item.is_trusted] 4072s if untrusted and not allow_unauthenticated: 4072s raise UntrustedException( 4072s "Untrusted packages:\n%s" % "\n".join(i.desc_uri for i in untrusted) 4072s ) 4072s 4072s # do the actual fetching 4072s res = fetcher.run() 4072s 4072s # now check the result (this is the code from apt-get.cc) 4072s failed = False 4072s err_msg = "" 4072s for item in fetcher.items: 4072s if item.status == item.STAT_DONE: 4072s continue 4072s if item.STAT_IDLE: 4072s continue 4072s err_msg += f"Failed to fetch {item.desc_uri} {item.error_text}\n" 4072s failed = True 4072s 4072s # we raise a exception if the download failed or it was cancelt 4072s if res == fetcher.RESULT_CANCELLED: 4072s raise FetchCancelledException(err_msg) 4072s elif failed: 4072s > raise FetchFailedException(err_msg) 4072s E apt.cache.FetchFailedException: Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/coreutils-dbgsym_9.4-3ubuntu6.1_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) Could not connect to launchpad.net:443 (185.125.189.222), connection timed out Could not connect to launchpad.net:443 (185.125.189.223), connection timed out 4072s 4072s /usr/lib/python3/dist-packages/apt/cache.py:424: FetchFailedException 4072s 4072s During handling of the above exception, another exception occurred: 4072s 4072s cachedir = '/tmp/tmpdnrqbhrz/cache', workdir = '/tmp/tmpdnrqbhrz' 4072s rootdir = '/tmp/tmpdnrqbhrz/root', apt_style = 'one-line' 4072s 4072s @pytest.mark.skipif(not has_internet(), reason="online test") 4072s def test_install_packages_system(cachedir, workdir, rootdir, apt_style): 4072s # pylint: disable=unused-argument 4072s """install_packages() with system configuration""" 4072s # trigger an unrelated package query here to get the cache set up, 4072s # reproducing an install failure when the internal caches are not 4072s # reset properly 4072s impl.get_version("dash") 4072s 4072s release = " ".join(impl.get_os_version()) 4072s cachedir = os.path.join(workdir, "cache") 4072s rootdir = os.path.join(workdir, "root") 4072s 4072s > result = impl.install_packages( 4072s rootdir, 4072s None, 4072s release, 4072s [("coreutils", impl.get_version("coreutils")), ("tzdata", "1.1")], 4072s False, 4072s cachedir, 4072s ) 4072s 4072s tests/system/test_packaging_apt_dpkg.py:316: 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s 4072s self = 4072s rootdir = '/tmp/tmpdnrqbhrz/root', configdir = None, release = 'Ubuntu 24.04' 4072s packages = [('coreutils', '9.4-3ubuntu6.1'), ('tzdata', '1.1')], verbose = False 4072s cache_dir = '/tmp/tmpdnrqbhrz/cache', permanent_rootdir = False 4072s architecture = 'amd64', origins = None, install_dbg = True, install_deps = False 4072s 4072s def install_packages( 4072s self, 4072s rootdir, 4072s configdir, 4072s release, 4072s packages, 4072s verbose=False, 4072s cache_dir=None, 4072s permanent_rootdir=False, 4072s architecture=None, 4072s origins=None, 4072s install_dbg=True, 4072s install_deps=False, 4072s ): # pylint: disable=too-many-arguments 4072s # TODO: Split into smaller functions/methods 4072s # pylint: disable=too-many-branches,too-many-locals 4072s # pylint: disable=too-many-nested-blocks,too-many-statements 4072s """Install packages into a sandbox (for apport-retrace). 4072s 4072s In order to work without any special permissions and without touching 4072s the running system, this should only download and unpack packages into 4072s the given root directory, not install them into the system. 4072s 4072s configdir points to a directory with by-release configuration files for 4072s the packaging system; this is completely dependent on the backend 4072s implementation, the only assumption is that this looks into 4072s configdir/release/, so that you can use retracing for multiple 4072s DistroReleases. As a special case, if configdir is None, it uses the 4072s current system configuration, and "release" is ignored. 4072s 4072s release is the value of the report's 'DistroRelease' field. 4072s 4072s packages is a list of ('packagename', 'version') tuples. If the version 4072s is None, it should install the most current available version. 4072s 4072s If cache_dir is given, then the downloaded packages will be stored 4072s there, to speed up subsequent retraces. 4072s 4072s If permanent_rootdir is True, then the sandbox created from the 4072s downloaded packages will be reused, to speed up subsequent retraces. 4072s 4072s If architecture is given, the sandbox will be created with packages of 4072s the given architecture (as specified in a report's "Architecture" 4072s field). If not given it defaults to the host system's architecture. 4072s 4072s If origins is given, the sandbox will be created with apt data sources 4072s for foreign origins. 4072s 4072s If install_deps is True, then the dependencies of packages will also 4072s be installed. 4072s 4072s Return a string with outdated packages, or an empty string if all 4072s packages were installed. 4072s 4072s If something is wrong with the environment (invalid configuration, 4072s package servers down, etc.), this should raise a SystemError with a 4072s meaningful error message. 4072s """ 4072s if not architecture: 4072s architecture = self.get_system_architecture() 4072s if not configdir: 4072s apt_dir = "/etc/apt" 4072s self._current_release_codename = self.get_distro_codename() 4072s else: 4072s # support architecture specific config, fall back to global config 4072s apt_dir = os.path.join(configdir, release) 4072s if architecture != self.get_system_architecture(): 4072s arch_apt_dir = os.path.join(configdir, release, architecture) 4072s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 4072s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 4072s if os.path.exists(arch_old_sources) or ( 4072s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 4072s ): 4072s apt_dir = arch_apt_dir 4072s 4072s # set mirror for get_file_package() 4072s try: 4072s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 4072s except SystemError as error: 4072s apport.logging.warning("cannot determine mirror: %s", str(error)) 4072s 4072s # set current release code name for _distro_release_to_codename 4072s with open( 4072s os.path.join(configdir, release, "codename"), encoding="utf-8" 4072s ) as f: 4072s self._current_release_codename = f.read().strip() 4072s 4072s # create apt sandbox 4072s if cache_dir: 4072s tmp_aptroot = False 4072s if architecture != self.get_system_architecture(): 4072s aptroot_arch = architecture 4072s else: 4072s aptroot_arch = "" 4072s if configdir: 4072s aptroot = os.path.join(cache_dir, release, aptroot_arch, "apt") 4072s else: 4072s aptroot = os.path.join(cache_dir, "system", aptroot_arch, "apt") 4072s if not os.path.isdir(aptroot): 4072s os.makedirs(aptroot) 4072s else: 4072s tmp_aptroot = True 4072s aptroot = tempfile.mkdtemp() 4072s 4072s apt.apt_pkg.config.set("APT::Architecture", architecture) 4072s apt.apt_pkg.config.set("Acquire::Languages", "none") 4072s # directly connect to Launchpad when downloading deb files 4072s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 4072s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 4072s 4072s if verbose: 4072s fetchProgress = apt.progress.text.AcquireProgress() 4072s else: 4072s fetchProgress = apt.progress.base.AcquireProgress() 4072s if not tmp_aptroot: 4072s apt_cache = self._sandbox_cache( 4072s aptroot, 4072s apt_dir, 4072s fetchProgress, 4072s self.get_distro_name(), 4072s self._current_release_codename, 4072s origins, 4072s architecture, 4072s ) 4072s else: 4072s self._build_apt_sandbox( 4072s aptroot, 4072s apt_dir, 4072s self.get_distro_name(), 4072s self._current_release_codename, 4072s origins, 4072s ) 4072s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 4072s try: 4072s apt_cache.update(fetchProgress) 4072s except apt.cache.FetchFailedException as error: 4072s raise SystemError(str(error)) from error 4072s apt_cache.open() 4072s 4072s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 4072s 4072s obsolete = "" 4072s 4072s src_records = apt.apt_pkg.SourceRecords() 4072s 4072s # read original package list 4072s pkg_list = os.path.join(rootdir, "packages.txt") 4072s pkg_versions = {} 4072s if os.path.exists(pkg_list): 4072s with open(pkg_list, encoding="utf-8") as f: 4072s for line in f: 4072s line = line.strip() 4072s if not line: 4072s continue 4072s (p, v) = line.split() 4072s pkg_versions[p] = v 4072s 4072s # mark packages for installation 4072s real_pkgs = set() 4072s lp_cache = {} 4072s fetcher = apt.apt_pkg.Acquire(fetchProgress) 4072s # need to keep AcquireFile references 4072s acquire_queue = [] 4072s # add any dependencies to the packages list 4072s if install_deps: 4072s deps = [] 4072s for pkg, ver in packages: 4072s try: 4072s cache_pkg = apt_cache[pkg] 4072s except KeyError: 4072s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 4072s obsolete += f"{m}\n" 4072s apport.logging.warning("%s", m) 4072s continue 4072s for dep in cache_pkg.candidate.dependencies: 4072s # the dependency may be satisfied by a different package 4072s if dep[0].name not in apt_cache: 4072s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 4072s # the version in dep is the one from pkg's dependencies, 4072s # so use the version from the cache 4072s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 4072s # if the dependency is in the list of packages we don't 4072s # need to look up its dependencies again 4072s if dep[0].name in [pkg[0] for pkg in packages]: 4072s continue 4072s # if the package is already extracted in the sandbox 4072s # because the report needs that package we don't want to 4072s # install a newer version which may cause a CRC mismatch 4072s # with the installed dbg symbols 4072s if dep[0].name in pkg_versions: 4072s inst_version = pkg_versions[dep[0].name] 4072s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 4072s deps.append((dep[0].name, inst_version)) 4072s else: 4072s deps.append((dep[0].name, dep_pkg_vers)) 4072s else: 4072s deps.append((dep[0].name, dep_pkg_vers)) 4072s if dep[0].name not in [pkg[0] for pkg in packages]: 4072s packages.append((dep[0].name, None)) 4072s packages.extend(deps) 4072s 4072s for pkg, ver in packages: 4072s try: 4072s cache_pkg = apt_cache[pkg] 4072s except KeyError: 4072s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 4072s obsolete += f"{m}\n" 4072s apport.logging.warning("%s", m) 4072s continue 4072s 4072s # try to select matching version 4072s try: 4072s if ver: 4072s cache_pkg.candidate = cache_pkg.versions[ver] 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, lp_url, hash=f"sha1:{sha1sum}", destdir=archivedir 4072s ) 4072s ) 4072s lp_cache[pkg] = ver 4072s else: 4072s obsolete += ( 4072s f"{pkg} version {ver} required," 4072s f" but {cache_pkg.candidate.version} is available\n" 4072s ) 4072s ver = cache_pkg.candidate.version 4072s 4072s candidate = cache_pkg.candidate 4072s real_pkgs.add(pkg) 4072s 4072s if permanent_rootdir: 4072s virtual_mapping = self._virtual_mapping(aptroot) 4072s # Remember all the virtual packages that this package provides, 4072s # so that if we encounter that virtual package as a 4072s # Conflicts/Replaces later, we know to remove this package from 4072s # the cache. 4072s for p in candidate.provides: 4072s virtual_mapping.setdefault(p, set()).add(pkg) 4072s conflicts = [] 4072s if "Conflicts" in candidate.record: 4072s conflicts += apt.apt_pkg.parse_depends( 4072s candidate.record["Conflicts"] 4072s ) 4072s if "Replaces" in candidate.record: 4072s conflicts += apt.apt_pkg.parse_depends(candidate.record["Replaces"]) 4072s for conflict in conflicts: 4072s # if the package conflicts with itself its wonky e.g. 4072s # gdb in artful 4072s if conflict[0][0] == candidate.package.name: 4072s continue 4072s # apt_pkg.parse_depends needs to handle the or operator, 4072s # but as policy states it is invalid to use that in 4072s # Replaces/Depends, we can safely choose the first value 4072s # here. 4072s conflict = conflict[0] 4072s if apt_cache.is_virtual_package(conflict[0]): 4072s try: 4072s providers = virtual_mapping[conflict[0]] 4072s except KeyError: 4072s # We may not have seen the virtual package that 4072s # this conflicts with, so we can assume it's not 4072s # unpacked into the sandbox. 4072s continue 4072s for p in providers: 4072s # if the candidate package being installed 4072s # conflicts with but also provides a virtual 4072s # package don't act on the candidate e.g. 4072s # libpam-modules and libpam-mkhomedir in artful 4072s if p == candidate.package.name: 4072s continue 4072s debs = os.path.join(archivedir, f"{p}_*.deb") 4072s for path in glob.glob(debs): 4072s ver = self._deb_version(path) 4072s if apt.apt_pkg.check_dep(ver, conflict[2], conflict[1]): 4072s os.unlink(path) 4072s try: 4072s del pkg_versions[p] 4072s except KeyError: 4072s pass 4072s del providers 4072s else: 4072s debs = os.path.join(archivedir, f"{conflict[0]}_*.deb") 4072s for path in glob.glob(debs): 4072s ver = self._deb_version(path) 4072s if apt.apt_pkg.check_dep(ver, conflict[2], conflict[1]): 4072s os.unlink(path) 4072s try: 4072s del pkg_versions[conflict[0]] 4072s except KeyError: 4072s pass 4072s 4072s if candidate.architecture != "all" and install_dbg: 4072s try: 4072s dbg_pkg = f"{pkg}-dbg" 4072s dbg = apt_cache[dbg_pkg] 4072s pkg_found = False 4072s # try to get the same version as pkg 4072s if ver: 4072s try: 4072s dbg.candidate = dbg.versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbg_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbg_pkg] = ver 4072s pkg_found = True 4072s # if it can't be found in Launchpad failover to a 4072s # code path that'll use -dbgsym packages 4072s else: 4072s raise 4072s if not pkg_found: 4072s try: 4072s dbg.candidate = dbg.versions[candidate.version] 4072s except KeyError: 4072s obsolete += ( 4072s f"outdated -dbg package for {pkg}:" 4072s f" package version {ver}" 4072s f" -dbg version {dbg.candidate.version}\n" 4072s ) 4072s real_pkgs.add(dbg_pkg) 4072s except KeyError: 4072s # install all -dbg from the source package; lookup() just 4072s # works from the current list pointer, we always need to 4072s # start from the beginning 4072s src_records.restart() 4072s if src_records.lookup(candidate.source_name): 4072s # ignore transitional packages 4072s # False positive, see 4072s # https://github.com/PyCQA/pylint/issues/7122 4072s # pylint: disable=not-an-iterable 4072s dbgs = [ 4072s p 4072s for p in src_records.binaries 4072s if p.endswith("-dbg") 4072s and p in apt_cache 4072s and "transitional" not in apt_cache[p].candidate.description 4072s ] 4072s # if a specific version of a package was requested 4072s # only install dbg pkgs whose version matches 4072s if ver: 4072s for dbg in dbgs: 4072s if apt_cache[dbg].candidate.version != ver: 4072s dbgs.remove(dbg) 4072s else: 4072s dbgs = [] 4072s if dbgs: 4072s for p in dbgs: 4072s # if the package has already been added to 4072s # real_pkgs don't search for it again 4072s if p in real_pkgs: 4072s continue 4072s pkg_found = False 4072s # prefer the version requested 4072s if ver: 4072s try: 4072s apt_cache[p].candidate = apt_cache[p].versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, p, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[p] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s try: 4072s apt_cache[p].candidate = apt_cache[p].versions[ 4072s candidate.version 4072s ] 4072s except KeyError: 4072s # we don't really expect that, but it's 4072s # possible that other binaries have a 4072s # different version 4072s pass 4072s real_pkgs.add(p) 4072s else: 4072s pkg_found = False 4072s dbgsym_pkg = f"{pkg}-dbgsym" 4072s try: 4072s dbgsym = apt_cache[dbgsym_pkg] 4072s real_pkgs.add(dbgsym_pkg) 4072s # prefer the version requested 4072s if ver: 4072s try: 4072s dbgsym.candidate = dbgsym.versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbgsym_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbgsym_pkg] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s try: 4072s dbgsym.candidate = dbgsym.versions[ 4072s candidate.version 4072s ] 4072s except KeyError: 4072s obsolete += ( 4072s f"outdated debug symbol package" 4072s f" for {pkg}: package version" 4072s f" {candidate.version}" 4072s f" dbgsym version" 4072s f" {dbgsym.candidate.version}\n" 4072s ) 4072s 4072s except KeyError: 4072s if ver: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbgsym_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbgsym_pkg] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s obsolete += f"no debug symbol package found for {pkg}\n" 4072s 4072s # unpack packages, weed out the ones that are already installed (for 4072s # permanent sandboxes) 4072s logger = logging.getLogger(__name__) 4072s requested_pkgs = dict(packages) 4072s for p in real_pkgs.copy(): 4072s if p in requested_pkgs: 4072s if requested_pkgs[p] is None: 4072s # We already have the latest version of this package 4072s if pkg_versions.get(p) == apt_cache[p].candidate.version: 4072s logger.debug( 4072s "Removing %s which is already the right version", p 4072s ) 4072s real_pkgs.remove(p) 4072s else: 4072s logger.debug( 4072s "Installing %s version %s", 4072s p, 4072s apt_cache[p].candidate.version, 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s elif pkg_versions.get(p) != requested_pkgs[p]: 4072s logger.debug( 4072s "Installing %s version %s", p, apt_cache[p].candidate.version 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s elif pkg_versions.get(p) != apt_cache[p].candidate.version: 4072s logger.debug( 4072s "Installing %s version %s", p, apt_cache[p].candidate.version 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s else: 4072s logger.debug("Removing %s which is already the right version", p) 4072s real_pkgs.remove(p) 4072s elif pkg_versions.get(p) != apt_cache[p].candidate.version: 4072s logger.debug("Installing %s", p) 4072s apt_cache[p].mark_install(False, False) 4072s else: 4072s logger.debug("Removing %s which is already the right version", p) 4072s real_pkgs.remove(p) 4072s 4072s last_written = time.time() 4072s # fetch packages 4072s try: 4072s apt_cache.fetch_archives(fetcher=fetcher) 4072s except apt.cache.FetchFailedException as error: 4072s apport.logging.error( 4072s "Package download error, try again later: %s", str(error) 4072s ) 4072s > sys.exit(1) # transient error 4072s E SystemExit: 1 4072s 4072s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1326: SystemExit 4072s ----------------------------- Captured stderr call ----------------------------- 4072s ERROR: Package download error, try again later: Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/coreutils-dbgsym_9.4-3ubuntu6.1_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) Could not connect to launchpad.net:443 (185.125.189.222), connection timed out Could not connect to launchpad.net:443 (185.125.189.223), connection timed out 4072s 4072s _____________________ test_install_packages_system[deb822] _____________________ 4072s 4072s self = 4072s rootdir = '/tmp/tmph7wdp7d7/root', configdir = None, release = 'Ubuntu 24.04' 4072s packages = [('coreutils', '9.4-3ubuntu6.1'), ('tzdata', '1.1')], verbose = False 4072s cache_dir = '/tmp/tmph7wdp7d7/cache', permanent_rootdir = False 4072s architecture = 'amd64', origins = None, install_dbg = True, install_deps = False 4072s 4072s def install_packages( 4072s self, 4072s rootdir, 4072s configdir, 4072s release, 4072s packages, 4072s verbose=False, 4072s cache_dir=None, 4072s permanent_rootdir=False, 4072s architecture=None, 4072s origins=None, 4072s install_dbg=True, 4072s install_deps=False, 4072s ): # pylint: disable=too-many-arguments 4072s # TODO: Split into smaller functions/methods 4072s # pylint: disable=too-many-branches,too-many-locals 4072s # pylint: disable=too-many-nested-blocks,too-many-statements 4072s """Install packages into a sandbox (for apport-retrace). 4072s 4072s In order to work without any special permissions and without touching 4072s the running system, this should only download and unpack packages into 4072s the given root directory, not install them into the system. 4072s 4072s configdir points to a directory with by-release configuration files for 4072s the packaging system; this is completely dependent on the backend 4072s implementation, the only assumption is that this looks into 4072s configdir/release/, so that you can use retracing for multiple 4072s DistroReleases. As a special case, if configdir is None, it uses the 4072s current system configuration, and "release" is ignored. 4072s 4072s release is the value of the report's 'DistroRelease' field. 4072s 4072s packages is a list of ('packagename', 'version') tuples. If the version 4072s is None, it should install the most current available version. 4072s 4072s If cache_dir is given, then the downloaded packages will be stored 4072s there, to speed up subsequent retraces. 4072s 4072s If permanent_rootdir is True, then the sandbox created from the 4072s downloaded packages will be reused, to speed up subsequent retraces. 4072s 4072s If architecture is given, the sandbox will be created with packages of 4072s the given architecture (as specified in a report's "Architecture" 4072s field). If not given it defaults to the host system's architecture. 4072s 4072s If origins is given, the sandbox will be created with apt data sources 4072s for foreign origins. 4072s 4072s If install_deps is True, then the dependencies of packages will also 4072s be installed. 4072s 4072s Return a string with outdated packages, or an empty string if all 4072s packages were installed. 4072s 4072s If something is wrong with the environment (invalid configuration, 4072s package servers down, etc.), this should raise a SystemError with a 4072s meaningful error message. 4072s """ 4072s if not architecture: 4072s architecture = self.get_system_architecture() 4072s if not configdir: 4072s apt_dir = "/etc/apt" 4072s self._current_release_codename = self.get_distro_codename() 4072s else: 4072s # support architecture specific config, fall back to global config 4072s apt_dir = os.path.join(configdir, release) 4072s if architecture != self.get_system_architecture(): 4072s arch_apt_dir = os.path.join(configdir, release, architecture) 4072s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 4072s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 4072s if os.path.exists(arch_old_sources) or ( 4072s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 4072s ): 4072s apt_dir = arch_apt_dir 4072s 4072s # set mirror for get_file_package() 4072s try: 4072s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 4072s except SystemError as error: 4072s apport.logging.warning("cannot determine mirror: %s", str(error)) 4072s 4072s # set current release code name for _distro_release_to_codename 4072s with open( 4072s os.path.join(configdir, release, "codename"), encoding="utf-8" 4072s ) as f: 4072s self._current_release_codename = f.read().strip() 4072s 4072s # create apt sandbox 4072s if cache_dir: 4072s tmp_aptroot = False 4072s if architecture != self.get_system_architecture(): 4072s aptroot_arch = architecture 4072s else: 4072s aptroot_arch = "" 4072s if configdir: 4072s aptroot = os.path.join(cache_dir, release, aptroot_arch, "apt") 4072s else: 4072s aptroot = os.path.join(cache_dir, "system", aptroot_arch, "apt") 4072s if not os.path.isdir(aptroot): 4072s os.makedirs(aptroot) 4072s else: 4072s tmp_aptroot = True 4072s aptroot = tempfile.mkdtemp() 4072s 4072s apt.apt_pkg.config.set("APT::Architecture", architecture) 4072s apt.apt_pkg.config.set("Acquire::Languages", "none") 4072s # directly connect to Launchpad when downloading deb files 4072s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 4072s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 4072s 4072s if verbose: 4072s fetchProgress = apt.progress.text.AcquireProgress() 4072s else: 4072s fetchProgress = apt.progress.base.AcquireProgress() 4072s if not tmp_aptroot: 4072s apt_cache = self._sandbox_cache( 4072s aptroot, 4072s apt_dir, 4072s fetchProgress, 4072s self.get_distro_name(), 4072s self._current_release_codename, 4072s origins, 4072s architecture, 4072s ) 4072s else: 4072s self._build_apt_sandbox( 4072s aptroot, 4072s apt_dir, 4072s self.get_distro_name(), 4072s self._current_release_codename, 4072s origins, 4072s ) 4072s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 4072s try: 4072s apt_cache.update(fetchProgress) 4072s except apt.cache.FetchFailedException as error: 4072s raise SystemError(str(error)) from error 4072s apt_cache.open() 4072s 4072s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 4072s 4072s obsolete = "" 4072s 4072s src_records = apt.apt_pkg.SourceRecords() 4072s 4072s # read original package list 4072s pkg_list = os.path.join(rootdir, "packages.txt") 4072s pkg_versions = {} 4072s if os.path.exists(pkg_list): 4072s with open(pkg_list, encoding="utf-8") as f: 4072s for line in f: 4072s line = line.strip() 4072s if not line: 4072s continue 4072s (p, v) = line.split() 4072s pkg_versions[p] = v 4072s 4072s # mark packages for installation 4072s real_pkgs = set() 4072s lp_cache = {} 4072s fetcher = apt.apt_pkg.Acquire(fetchProgress) 4072s # need to keep AcquireFile references 4072s acquire_queue = [] 4072s # add any dependencies to the packages list 4072s if install_deps: 4072s deps = [] 4072s for pkg, ver in packages: 4072s try: 4072s cache_pkg = apt_cache[pkg] 4072s except KeyError: 4072s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 4072s obsolete += f"{m}\n" 4072s apport.logging.warning("%s", m) 4072s continue 4072s for dep in cache_pkg.candidate.dependencies: 4072s # the dependency may be satisfied by a different package 4072s if dep[0].name not in apt_cache: 4072s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 4072s # the version in dep is the one from pkg's dependencies, 4072s # so use the version from the cache 4072s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 4072s # if the dependency is in the list of packages we don't 4072s # need to look up its dependencies again 4072s if dep[0].name in [pkg[0] for pkg in packages]: 4072s continue 4072s # if the package is already extracted in the sandbox 4072s # because the report needs that package we don't want to 4072s # install a newer version which may cause a CRC mismatch 4072s # with the installed dbg symbols 4072s if dep[0].name in pkg_versions: 4072s inst_version = pkg_versions[dep[0].name] 4072s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 4072s deps.append((dep[0].name, inst_version)) 4072s else: 4072s deps.append((dep[0].name, dep_pkg_vers)) 4072s else: 4072s deps.append((dep[0].name, dep_pkg_vers)) 4072s if dep[0].name not in [pkg[0] for pkg in packages]: 4072s packages.append((dep[0].name, None)) 4072s packages.extend(deps) 4072s 4072s for pkg, ver in packages: 4072s try: 4072s cache_pkg = apt_cache[pkg] 4072s except KeyError: 4072s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 4072s obsolete += f"{m}\n" 4072s apport.logging.warning("%s", m) 4072s continue 4072s 4072s # try to select matching version 4072s try: 4072s if ver: 4072s cache_pkg.candidate = cache_pkg.versions[ver] 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, lp_url, hash=f"sha1:{sha1sum}", destdir=archivedir 4072s ) 4072s ) 4072s lp_cache[pkg] = ver 4072s else: 4072s obsolete += ( 4072s f"{pkg} version {ver} required," 4072s f" but {cache_pkg.candidate.version} is available\n" 4072s ) 4072s ver = cache_pkg.candidate.version 4072s 4072s candidate = cache_pkg.candidate 4072s real_pkgs.add(pkg) 4072s 4072s if permanent_rootdir: 4072s virtual_mapping = self._virtual_mapping(aptroot) 4072s # Remember all the virtual packages that this package provides, 4072s # so that if we encounter that virtual package as a 4072s # Conflicts/Replaces later, we know to remove this package from 4072s # the cache. 4072s for p in candidate.provides: 4072s virtual_mapping.setdefault(p, set()).add(pkg) 4072s conflicts = [] 4072s if "Conflicts" in candidate.record: 4072s conflicts += apt.apt_pkg.parse_depends( 4072s candidate.record["Conflicts"] 4072s ) 4072s if "Replaces" in candidate.record: 4072s conflicts += apt.apt_pkg.parse_depends(candidate.record["Replaces"]) 4072s for conflict in conflicts: 4072s # if the package conflicts with itself its wonky e.g. 4072s # gdb in artful 4072s if conflict[0][0] == candidate.package.name: 4072s continue 4072s # apt_pkg.parse_depends needs to handle the or operator, 4072s # but as policy states it is invalid to use that in 4072s # Replaces/Depends, we can safely choose the first value 4072s # here. 4072s conflict = conflict[0] 4072s if apt_cache.is_virtual_package(conflict[0]): 4072s try: 4072s providers = virtual_mapping[conflict[0]] 4072s except KeyError: 4072s # We may not have seen the virtual package that 4072s # this conflicts with, so we can assume it's not 4072s # unpacked into the sandbox. 4072s continue 4072s for p in providers: 4072s # if the candidate package being installed 4072s # conflicts with but also provides a virtual 4072s # package don't act on the candidate e.g. 4072s # libpam-modules and libpam-mkhomedir in artful 4072s if p == candidate.package.name: 4072s continue 4072s debs = os.path.join(archivedir, f"{p}_*.deb") 4072s for path in glob.glob(debs): 4072s ver = self._deb_version(path) 4072s if apt.apt_pkg.check_dep(ver, conflict[2], conflict[1]): 4072s os.unlink(path) 4072s try: 4072s del pkg_versions[p] 4072s except KeyError: 4072s pass 4072s del providers 4072s else: 4072s debs = os.path.join(archivedir, f"{conflict[0]}_*.deb") 4072s for path in glob.glob(debs): 4072s ver = self._deb_version(path) 4072s if apt.apt_pkg.check_dep(ver, conflict[2], conflict[1]): 4072s os.unlink(path) 4072s try: 4072s del pkg_versions[conflict[0]] 4072s except KeyError: 4072s pass 4072s 4072s if candidate.architecture != "all" and install_dbg: 4072s try: 4072s dbg_pkg = f"{pkg}-dbg" 4072s dbg = apt_cache[dbg_pkg] 4072s pkg_found = False 4072s # try to get the same version as pkg 4072s if ver: 4072s try: 4072s dbg.candidate = dbg.versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbg_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbg_pkg] = ver 4072s pkg_found = True 4072s # if it can't be found in Launchpad failover to a 4072s # code path that'll use -dbgsym packages 4072s else: 4072s raise 4072s if not pkg_found: 4072s try: 4072s dbg.candidate = dbg.versions[candidate.version] 4072s except KeyError: 4072s obsolete += ( 4072s f"outdated -dbg package for {pkg}:" 4072s f" package version {ver}" 4072s f" -dbg version {dbg.candidate.version}\n" 4072s ) 4072s real_pkgs.add(dbg_pkg) 4072s except KeyError: 4072s # install all -dbg from the source package; lookup() just 4072s # works from the current list pointer, we always need to 4072s # start from the beginning 4072s src_records.restart() 4072s if src_records.lookup(candidate.source_name): 4072s # ignore transitional packages 4072s # False positive, see 4072s # https://github.com/PyCQA/pylint/issues/7122 4072s # pylint: disable=not-an-iterable 4072s dbgs = [ 4072s p 4072s for p in src_records.binaries 4072s if p.endswith("-dbg") 4072s and p in apt_cache 4072s and "transitional" not in apt_cache[p].candidate.description 4072s ] 4072s # if a specific version of a package was requested 4072s # only install dbg pkgs whose version matches 4072s if ver: 4072s for dbg in dbgs: 4072s if apt_cache[dbg].candidate.version != ver: 4072s dbgs.remove(dbg) 4072s else: 4072s dbgs = [] 4072s if dbgs: 4072s for p in dbgs: 4072s # if the package has already been added to 4072s # real_pkgs don't search for it again 4072s if p in real_pkgs: 4072s continue 4072s pkg_found = False 4072s # prefer the version requested 4072s if ver: 4072s try: 4072s apt_cache[p].candidate = apt_cache[p].versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, p, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[p] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s try: 4072s apt_cache[p].candidate = apt_cache[p].versions[ 4072s candidate.version 4072s ] 4072s except KeyError: 4072s # we don't really expect that, but it's 4072s # possible that other binaries have a 4072s # different version 4072s pass 4072s real_pkgs.add(p) 4072s else: 4072s pkg_found = False 4072s dbgsym_pkg = f"{pkg}-dbgsym" 4072s try: 4072s dbgsym = apt_cache[dbgsym_pkg] 4072s real_pkgs.add(dbgsym_pkg) 4072s # prefer the version requested 4072s if ver: 4072s try: 4072s dbgsym.candidate = dbgsym.versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbgsym_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbgsym_pkg] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s try: 4072s dbgsym.candidate = dbgsym.versions[ 4072s candidate.version 4072s ] 4072s except KeyError: 4072s obsolete += ( 4072s f"outdated debug symbol package" 4072s f" for {pkg}: package version" 4072s f" {candidate.version}" 4072s f" dbgsym version" 4072s f" {dbgsym.candidate.version}\n" 4072s ) 4072s 4072s except KeyError: 4072s if ver: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbgsym_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbgsym_pkg] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s obsolete += f"no debug symbol package found for {pkg}\n" 4072s 4072s # unpack packages, weed out the ones that are already installed (for 4072s # permanent sandboxes) 4072s logger = logging.getLogger(__name__) 4072s requested_pkgs = dict(packages) 4072s for p in real_pkgs.copy(): 4072s if p in requested_pkgs: 4072s if requested_pkgs[p] is None: 4072s # We already have the latest version of this package 4072s if pkg_versions.get(p) == apt_cache[p].candidate.version: 4072s logger.debug( 4072s "Removing %s which is already the right version", p 4072s ) 4072s real_pkgs.remove(p) 4072s else: 4072s logger.debug( 4072s "Installing %s version %s", 4072s p, 4072s apt_cache[p].candidate.version, 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s elif pkg_versions.get(p) != requested_pkgs[p]: 4072s logger.debug( 4072s "Installing %s version %s", p, apt_cache[p].candidate.version 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s elif pkg_versions.get(p) != apt_cache[p].candidate.version: 4072s logger.debug( 4072s "Installing %s version %s", p, apt_cache[p].candidate.version 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s else: 4072s logger.debug("Removing %s which is already the right version", p) 4072s real_pkgs.remove(p) 4072s elif pkg_versions.get(p) != apt_cache[p].candidate.version: 4072s logger.debug("Installing %s", p) 4072s apt_cache[p].mark_install(False, False) 4072s else: 4072s logger.debug("Removing %s which is already the right version", p) 4072s real_pkgs.remove(p) 4072s 4072s last_written = time.time() 4072s # fetch packages 4072s try: 4072s > apt_cache.fetch_archives(fetcher=fetcher) 4072s 4072s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1321: 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s /usr/lib/python3/dist-packages/apt/cache.py:475: in fetch_archives 4072s return self._fetch_archives( 4072s /usr/lib/python3/dist-packages/apt/cache.py:443: in _fetch_archives 4072s return self._run_fetcher(fetcher, allow_unauthenticated) 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s 4072s self = 4072s fetcher = 4072s allow_unauthenticated = True 4072s 4072s def _run_fetcher( 4072s self, fetcher: apt_pkg.Acquire, allow_unauthenticated: bool | None 4072s ) -> int: 4072s if allow_unauthenticated is None: 4072s allow_unauthenticated = apt_pkg.config.find_b( 4072s "APT::Get::" "AllowUnauthenticated", False 4072s ) 4072s 4072s untrusted = [item for item in fetcher.items if not item.is_trusted] 4072s if untrusted and not allow_unauthenticated: 4072s raise UntrustedException( 4072s "Untrusted packages:\n%s" % "\n".join(i.desc_uri for i in untrusted) 4072s ) 4072s 4072s # do the actual fetching 4072s res = fetcher.run() 4072s 4072s # now check the result (this is the code from apt-get.cc) 4072s failed = False 4072s err_msg = "" 4072s for item in fetcher.items: 4072s if item.status == item.STAT_DONE: 4072s continue 4072s if item.STAT_IDLE: 4072s continue 4072s err_msg += f"Failed to fetch {item.desc_uri} {item.error_text}\n" 4072s failed = True 4072s 4072s # we raise a exception if the download failed or it was cancelt 4072s if res == fetcher.RESULT_CANCELLED: 4072s raise FetchCancelledException(err_msg) 4072s elif failed: 4072s > raise FetchFailedException(err_msg) 4072s E apt.cache.FetchFailedException: Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/coreutils-dbgsym_9.4-3ubuntu6.1_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Could not connect to launchpad.net:443 (185.125.189.223), connection timed out Could not connect to launchpad.net:443 (185.125.189.222), connection timed out 4072s 4072s /usr/lib/python3/dist-packages/apt/cache.py:424: FetchFailedException 4072s 4072s During handling of the above exception, another exception occurred: 4072s 4072s cachedir = '/tmp/tmph7wdp7d7/cache', workdir = '/tmp/tmph7wdp7d7' 4072s rootdir = '/tmp/tmph7wdp7d7/root', apt_style = 'deb822' 4072s 4072s @pytest.mark.skipif(not has_internet(), reason="online test") 4072s def test_install_packages_system(cachedir, workdir, rootdir, apt_style): 4072s # pylint: disable=unused-argument 4072s """install_packages() with system configuration""" 4072s # trigger an unrelated package query here to get the cache set up, 4072s # reproducing an install failure when the internal caches are not 4072s # reset properly 4072s impl.get_version("dash") 4072s 4072s release = " ".join(impl.get_os_version()) 4072s cachedir = os.path.join(workdir, "cache") 4072s rootdir = os.path.join(workdir, "root") 4072s 4072s > result = impl.install_packages( 4072s rootdir, 4072s None, 4072s release, 4072s [("coreutils", impl.get_version("coreutils")), ("tzdata", "1.1")], 4072s False, 4072s cachedir, 4072s ) 4072s 4072s tests/system/test_packaging_apt_dpkg.py:316: 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s 4072s self = 4072s rootdir = '/tmp/tmph7wdp7d7/root', configdir = None, release = 'Ubuntu 24.04' 4072s packages = [('coreutils', '9.4-3ubuntu6.1'), ('tzdata', '1.1')], verbose = False 4072s cache_dir = '/tmp/tmph7wdp7d7/cache', permanent_rootdir = False 4072s architecture = 'amd64', origins = None, install_dbg = True, install_deps = False 4072s 4072s def install_packages( 4072s self, 4072s rootdir, 4072s configdir, 4072s release, 4072s packages, 4072s verbose=False, 4072s cache_dir=None, 4072s permanent_rootdir=False, 4072s architecture=None, 4072s origins=None, 4072s install_dbg=True, 4072s install_deps=False, 4072s ): # pylint: disable=too-many-arguments 4072s # TODO: Split into smaller functions/methods 4072s # pylint: disable=too-many-branches,too-many-locals 4072s # pylint: disable=too-many-nested-blocks,too-many-statements 4072s """Install packages into a sandbox (for apport-retrace). 4072s 4072s In order to work without any special permissions and without touching 4072s the running system, this should only download and unpack packages into 4072s the given root directory, not install them into the system. 4072s 4072s configdir points to a directory with by-release configuration files for 4072s the packaging system; this is completely dependent on the backend 4072s implementation, the only assumption is that this looks into 4072s configdir/release/, so that you can use retracing for multiple 4072s DistroReleases. As a special case, if configdir is None, it uses the 4072s current system configuration, and "release" is ignored. 4072s 4072s release is the value of the report's 'DistroRelease' field. 4072s 4072s packages is a list of ('packagename', 'version') tuples. If the version 4072s is None, it should install the most current available version. 4072s 4072s If cache_dir is given, then the downloaded packages will be stored 4072s there, to speed up subsequent retraces. 4072s 4072s If permanent_rootdir is True, then the sandbox created from the 4072s downloaded packages will be reused, to speed up subsequent retraces. 4072s 4072s If architecture is given, the sandbox will be created with packages of 4072s the given architecture (as specified in a report's "Architecture" 4072s field). If not given it defaults to the host system's architecture. 4072s 4072s If origins is given, the sandbox will be created with apt data sources 4072s for foreign origins. 4072s 4072s If install_deps is True, then the dependencies of packages will also 4072s be installed. 4072s 4072s Return a string with outdated packages, or an empty string if all 4072s packages were installed. 4072s 4072s If something is wrong with the environment (invalid configuration, 4072s package servers down, etc.), this should raise a SystemError with a 4072s meaningful error message. 4072s """ 4072s if not architecture: 4072s architecture = self.get_system_architecture() 4072s if not configdir: 4072s apt_dir = "/etc/apt" 4072s self._current_release_codename = self.get_distro_codename() 4072s else: 4072s # support architecture specific config, fall back to global config 4072s apt_dir = os.path.join(configdir, release) 4072s if architecture != self.get_system_architecture(): 4072s arch_apt_dir = os.path.join(configdir, release, architecture) 4072s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 4072s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 4072s if os.path.exists(arch_old_sources) or ( 4072s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 4072s ): 4072s apt_dir = arch_apt_dir 4072s 4072s # set mirror for get_file_package() 4072s try: 4072s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 4072s except SystemError as error: 4072s apport.logging.warning("cannot determine mirror: %s", str(error)) 4072s 4072s # set current release code name for _distro_release_to_codename 4072s with open( 4072s os.path.join(configdir, release, "codename"), encoding="utf-8" 4072s ) as f: 4072s self._current_release_codename = f.read().strip() 4072s 4072s # create apt sandbox 4072s if cache_dir: 4072s tmp_aptroot = False 4072s if architecture != self.get_system_architecture(): 4072s aptroot_arch = architecture 4072s else: 4072s aptroot_arch = "" 4072s if configdir: 4072s aptroot = os.path.join(cache_dir, release, aptroot_arch, "apt") 4072s else: 4072s aptroot = os.path.join(cache_dir, "system", aptroot_arch, "apt") 4072s if not os.path.isdir(aptroot): 4072s os.makedirs(aptroot) 4072s else: 4072s tmp_aptroot = True 4072s aptroot = tempfile.mkdtemp() 4072s 4072s apt.apt_pkg.config.set("APT::Architecture", architecture) 4072s apt.apt_pkg.config.set("Acquire::Languages", "none") 4072s # directly connect to Launchpad when downloading deb files 4072s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 4072s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 4072s 4072s if verbose: 4072s fetchProgress = apt.progress.text.AcquireProgress() 4072s else: 4072s fetchProgress = apt.progress.base.AcquireProgress() 4072s if not tmp_aptroot: 4072s apt_cache = self._sandbox_cache( 4072s aptroot, 4072s apt_dir, 4072s fetchProgress, 4072s self.get_distro_name(), 4072s self._current_release_codename, 4072s origins, 4072s architecture, 4072s ) 4072s else: 4072s self._build_apt_sandbox( 4072s aptroot, 4072s apt_dir, 4072s self.get_distro_name(), 4072s self._current_release_codename, 4072s origins, 4072s ) 4072s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 4072s try: 4072s apt_cache.update(fetchProgress) 4072s except apt.cache.FetchFailedException as error: 4072s raise SystemError(str(error)) from error 4072s apt_cache.open() 4072s 4072s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 4072s 4072s obsolete = "" 4072s 4072s src_records = apt.apt_pkg.SourceRecords() 4072s 4072s # read original package list 4072s pkg_list = os.path.join(rootdir, "packages.txt") 4072s pkg_versions = {} 4072s if os.path.exists(pkg_list): 4072s with open(pkg_list, encoding="utf-8") as f: 4072s for line in f: 4072s line = line.strip() 4072s if not line: 4072s continue 4072s (p, v) = line.split() 4072s pkg_versions[p] = v 4072s 4072s # mark packages for installation 4072s real_pkgs = set() 4072s lp_cache = {} 4072s fetcher = apt.apt_pkg.Acquire(fetchProgress) 4072s # need to keep AcquireFile references 4072s acquire_queue = [] 4072s # add any dependencies to the packages list 4072s if install_deps: 4072s deps = [] 4072s for pkg, ver in packages: 4072s try: 4072s cache_pkg = apt_cache[pkg] 4072s except KeyError: 4072s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 4072s obsolete += f"{m}\n" 4072s apport.logging.warning("%s", m) 4072s continue 4072s for dep in cache_pkg.candidate.dependencies: 4072s # the dependency may be satisfied by a different package 4072s if dep[0].name not in apt_cache: 4072s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 4072s # the version in dep is the one from pkg's dependencies, 4072s # so use the version from the cache 4072s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 4072s # if the dependency is in the list of packages we don't 4072s # need to look up its dependencies again 4072s if dep[0].name in [pkg[0] for pkg in packages]: 4072s continue 4072s # if the package is already extracted in the sandbox 4072s # because the report needs that package we don't want to 4072s # install a newer version which may cause a CRC mismatch 4072s # with the installed dbg symbols 4072s if dep[0].name in pkg_versions: 4072s inst_version = pkg_versions[dep[0].name] 4072s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 4072s deps.append((dep[0].name, inst_version)) 4072s else: 4072s deps.append((dep[0].name, dep_pkg_vers)) 4072s else: 4072s deps.append((dep[0].name, dep_pkg_vers)) 4072s if dep[0].name not in [pkg[0] for pkg in packages]: 4072s packages.append((dep[0].name, None)) 4072s packages.extend(deps) 4072s 4072s for pkg, ver in packages: 4072s try: 4072s cache_pkg = apt_cache[pkg] 4072s except KeyError: 4072s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 4072s obsolete += f"{m}\n" 4072s apport.logging.warning("%s", m) 4072s continue 4072s 4072s # try to select matching version 4072s try: 4072s if ver: 4072s cache_pkg.candidate = cache_pkg.versions[ver] 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, lp_url, hash=f"sha1:{sha1sum}", destdir=archivedir 4072s ) 4072s ) 4072s lp_cache[pkg] = ver 4072s else: 4072s obsolete += ( 4072s f"{pkg} version {ver} required," 4072s f" but {cache_pkg.candidate.version} is available\n" 4072s ) 4072s ver = cache_pkg.candidate.version 4072s 4072s candidate = cache_pkg.candidate 4072s real_pkgs.add(pkg) 4072s 4072s if permanent_rootdir: 4072s virtual_mapping = self._virtual_mapping(aptroot) 4072s # Remember all the virtual packages that this package provides, 4072s # so that if we encounter that virtual package as a 4072s # Conflicts/Replaces later, we know to remove this package from 4072s # the cache. 4072s for p in candidate.provides: 4072s virtual_mapping.setdefault(p, set()).add(pkg) 4072s conflicts = [] 4072s if "Conflicts" in candidate.record: 4072s conflicts += apt.apt_pkg.parse_depends( 4072s candidate.record["Conflicts"] 4072s ) 4072s if "Replaces" in candidate.record: 4072s conflicts += apt.apt_pkg.parse_depends(candidate.record["Replaces"]) 4072s for conflict in conflicts: 4072s # if the package conflicts with itself its wonky e.g. 4072s # gdb in artful 4072s if conflict[0][0] == candidate.package.name: 4072s continue 4072s # apt_pkg.parse_depends needs to handle the or operator, 4072s # but as policy states it is invalid to use that in 4072s # Replaces/Depends, we can safely choose the first value 4072s # here. 4072s conflict = conflict[0] 4072s if apt_cache.is_virtual_package(conflict[0]): 4072s try: 4072s providers = virtual_mapping[conflict[0]] 4072s except KeyError: 4072s # We may not have seen the virtual package that 4072s # this conflicts with, so we can assume it's not 4072s # unpacked into the sandbox. 4072s continue 4072s for p in providers: 4072s # if the candidate package being installed 4072s # conflicts with but also provides a virtual 4072s # package don't act on the candidate e.g. 4072s # libpam-modules and libpam-mkhomedir in artful 4072s if p == candidate.package.name: 4072s continue 4072s debs = os.path.join(archivedir, f"{p}_*.deb") 4072s for path in glob.glob(debs): 4072s ver = self._deb_version(path) 4072s if apt.apt_pkg.check_dep(ver, conflict[2], conflict[1]): 4072s os.unlink(path) 4072s try: 4072s del pkg_versions[p] 4072s except KeyError: 4072s pass 4072s del providers 4072s else: 4072s debs = os.path.join(archivedir, f"{conflict[0]}_*.deb") 4072s for path in glob.glob(debs): 4072s ver = self._deb_version(path) 4072s if apt.apt_pkg.check_dep(ver, conflict[2], conflict[1]): 4072s os.unlink(path) 4072s try: 4072s del pkg_versions[conflict[0]] 4072s except KeyError: 4072s pass 4072s 4072s if candidate.architecture != "all" and install_dbg: 4072s try: 4072s dbg_pkg = f"{pkg}-dbg" 4072s dbg = apt_cache[dbg_pkg] 4072s pkg_found = False 4072s # try to get the same version as pkg 4072s if ver: 4072s try: 4072s dbg.candidate = dbg.versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbg_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbg_pkg] = ver 4072s pkg_found = True 4072s # if it can't be found in Launchpad failover to a 4072s # code path that'll use -dbgsym packages 4072s else: 4072s raise 4072s if not pkg_found: 4072s try: 4072s dbg.candidate = dbg.versions[candidate.version] 4072s except KeyError: 4072s obsolete += ( 4072s f"outdated -dbg package for {pkg}:" 4072s f" package version {ver}" 4072s f" -dbg version {dbg.candidate.version}\n" 4072s ) 4072s real_pkgs.add(dbg_pkg) 4072s except KeyError: 4072s # install all -dbg from the source package; lookup() just 4072s # works from the current list pointer, we always need to 4072s # start from the beginning 4072s src_records.restart() 4072s if src_records.lookup(candidate.source_name): 4072s # ignore transitional packages 4072s # False positive, see 4072s # https://github.com/PyCQA/pylint/issues/7122 4072s # pylint: disable=not-an-iterable 4072s dbgs = [ 4072s p 4072s for p in src_records.binaries 4072s if p.endswith("-dbg") 4072s and p in apt_cache 4072s and "transitional" not in apt_cache[p].candidate.description 4072s ] 4072s # if a specific version of a package was requested 4072s # only install dbg pkgs whose version matches 4072s if ver: 4072s for dbg in dbgs: 4072s if apt_cache[dbg].candidate.version != ver: 4072s dbgs.remove(dbg) 4072s else: 4072s dbgs = [] 4072s if dbgs: 4072s for p in dbgs: 4072s # if the package has already been added to 4072s # real_pkgs don't search for it again 4072s if p in real_pkgs: 4072s continue 4072s pkg_found = False 4072s # prefer the version requested 4072s if ver: 4072s try: 4072s apt_cache[p].candidate = apt_cache[p].versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, p, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[p] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s try: 4072s apt_cache[p].candidate = apt_cache[p].versions[ 4072s candidate.version 4072s ] 4072s except KeyError: 4072s # we don't really expect that, but it's 4072s # possible that other binaries have a 4072s # different version 4072s pass 4072s real_pkgs.add(p) 4072s else: 4072s pkg_found = False 4072s dbgsym_pkg = f"{pkg}-dbgsym" 4072s try: 4072s dbgsym = apt_cache[dbgsym_pkg] 4072s real_pkgs.add(dbgsym_pkg) 4072s # prefer the version requested 4072s if ver: 4072s try: 4072s dbgsym.candidate = dbgsym.versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbgsym_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbgsym_pkg] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s try: 4072s dbgsym.candidate = dbgsym.versions[ 4072s candidate.version 4072s ] 4072s except KeyError: 4072s obsolete += ( 4072s f"outdated debug symbol package" 4072s f" for {pkg}: package version" 4072s f" {candidate.version}" 4072s f" dbgsym version" 4072s f" {dbgsym.candidate.version}\n" 4072s ) 4072s 4072s except KeyError: 4072s if ver: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbgsym_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbgsym_pkg] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s obsolete += f"no debug symbol package found for {pkg}\n" 4072s 4072s # unpack packages, weed out the ones that are already installed (for 4072s # permanent sandboxes) 4072s logger = logging.getLogger(__name__) 4072s requested_pkgs = dict(packages) 4072s for p in real_pkgs.copy(): 4072s if p in requested_pkgs: 4072s if requested_pkgs[p] is None: 4072s # We already have the latest version of this package 4072s if pkg_versions.get(p) == apt_cache[p].candidate.version: 4072s logger.debug( 4072s "Removing %s which is already the right version", p 4072s ) 4072s real_pkgs.remove(p) 4072s else: 4072s logger.debug( 4072s "Installing %s version %s", 4072s p, 4072s apt_cache[p].candidate.version, 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s elif pkg_versions.get(p) != requested_pkgs[p]: 4072s logger.debug( 4072s "Installing %s version %s", p, apt_cache[p].candidate.version 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s elif pkg_versions.get(p) != apt_cache[p].candidate.version: 4072s logger.debug( 4072s "Installing %s version %s", p, apt_cache[p].candidate.version 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s else: 4072s logger.debug("Removing %s which is already the right version", p) 4072s real_pkgs.remove(p) 4072s elif pkg_versions.get(p) != apt_cache[p].candidate.version: 4072s logger.debug("Installing %s", p) 4072s apt_cache[p].mark_install(False, False) 4072s else: 4072s logger.debug("Removing %s which is already the right version", p) 4072s real_pkgs.remove(p) 4072s 4072s last_written = time.time() 4072s # fetch packages 4072s try: 4072s apt_cache.fetch_archives(fetcher=fetcher) 4072s except apt.cache.FetchFailedException as error: 4072s apport.logging.error( 4072s "Package download error, try again later: %s", str(error) 4072s ) 4072s > sys.exit(1) # transient error 4072s E SystemExit: 1 4072s 4072s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1326: SystemExit 4072s ----------------------------- Captured stderr call ----------------------------- 4072s ERROR: Package download error, try again later: Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/coreutils-dbgsym_9.4-3ubuntu6.1_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Could not connect to launchpad.net:443 (185.125.189.223), connection timed out Could not connect to launchpad.net:443 (185.125.189.222), connection timed out 4072s 4072s ________________ test_install_packages_from_launchpad[one-line] ________________ 4072s 4072s self = 4072s rootdir = '/tmp/tmpi9uhkktf/root', configdir = '/tmp/tmpi9uhkktf/config' 4072s release = 'Foonux 20.04' 4072s packages = [('distro-info-data', '0.43ubuntu1.9'), ('libc6', '2.31-0ubuntu9.4'), ('qemu-utils', '1:4.2-3ubuntu6.1')] 4072s verbose = False, cache_dir = '/tmp/tmpi9uhkktf/cache', permanent_rootdir = False 4072s architecture = 'amd64', origins = None, install_dbg = True, install_deps = False 4072s 4072s def install_packages( 4072s self, 4072s rootdir, 4072s configdir, 4072s release, 4072s packages, 4072s verbose=False, 4072s cache_dir=None, 4072s permanent_rootdir=False, 4072s architecture=None, 4072s origins=None, 4072s install_dbg=True, 4072s install_deps=False, 4072s ): # pylint: disable=too-many-arguments 4072s # TODO: Split into smaller functions/methods 4072s # pylint: disable=too-many-branches,too-many-locals 4072s # pylint: disable=too-many-nested-blocks,too-many-statements 4072s """Install packages into a sandbox (for apport-retrace). 4072s 4072s In order to work without any special permissions and without touching 4072s the running system, this should only download and unpack packages into 4072s the given root directory, not install them into the system. 4072s 4072s configdir points to a directory with by-release configuration files for 4072s the packaging system; this is completely dependent on the backend 4072s implementation, the only assumption is that this looks into 4072s configdir/release/, so that you can use retracing for multiple 4072s DistroReleases. As a special case, if configdir is None, it uses the 4072s current system configuration, and "release" is ignored. 4072s 4072s release is the value of the report's 'DistroRelease' field. 4072s 4072s packages is a list of ('packagename', 'version') tuples. If the version 4072s is None, it should install the most current available version. 4072s 4072s If cache_dir is given, then the downloaded packages will be stored 4072s there, to speed up subsequent retraces. 4072s 4072s If permanent_rootdir is True, then the sandbox created from the 4072s downloaded packages will be reused, to speed up subsequent retraces. 4072s 4072s If architecture is given, the sandbox will be created with packages of 4072s the given architecture (as specified in a report's "Architecture" 4072s field). If not given it defaults to the host system's architecture. 4072s 4072s If origins is given, the sandbox will be created with apt data sources 4072s for foreign origins. 4072s 4072s If install_deps is True, then the dependencies of packages will also 4072s be installed. 4072s 4072s Return a string with outdated packages, or an empty string if all 4072s packages were installed. 4072s 4072s If something is wrong with the environment (invalid configuration, 4072s package servers down, etc.), this should raise a SystemError with a 4072s meaningful error message. 4072s """ 4072s if not architecture: 4072s architecture = self.get_system_architecture() 4072s if not configdir: 4072s apt_dir = "/etc/apt" 4072s self._current_release_codename = self.get_distro_codename() 4072s else: 4072s # support architecture specific config, fall back to global config 4072s apt_dir = os.path.join(configdir, release) 4072s if architecture != self.get_system_architecture(): 4072s arch_apt_dir = os.path.join(configdir, release, architecture) 4072s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 4072s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 4072s if os.path.exists(arch_old_sources) or ( 4072s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 4072s ): 4072s apt_dir = arch_apt_dir 4072s 4072s # set mirror for get_file_package() 4072s try: 4072s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 4072s except SystemError as error: 4072s apport.logging.warning("cannot determine mirror: %s", str(error)) 4072s 4072s # set current release code name for _distro_release_to_codename 4072s with open( 4072s os.path.join(configdir, release, "codename"), encoding="utf-8" 4072s ) as f: 4072s self._current_release_codename = f.read().strip() 4072s 4072s # create apt sandbox 4072s if cache_dir: 4072s tmp_aptroot = False 4072s if architecture != self.get_system_architecture(): 4072s aptroot_arch = architecture 4072s else: 4072s aptroot_arch = "" 4072s if configdir: 4072s aptroot = os.path.join(cache_dir, release, aptroot_arch, "apt") 4072s else: 4072s aptroot = os.path.join(cache_dir, "system", aptroot_arch, "apt") 4072s if not os.path.isdir(aptroot): 4072s os.makedirs(aptroot) 4072s else: 4072s tmp_aptroot = True 4072s aptroot = tempfile.mkdtemp() 4072s 4072s apt.apt_pkg.config.set("APT::Architecture", architecture) 4072s apt.apt_pkg.config.set("Acquire::Languages", "none") 4072s # directly connect to Launchpad when downloading deb files 4072s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 4072s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 4072s 4072s if verbose: 4072s fetchProgress = apt.progress.text.AcquireProgress() 4072s else: 4072s fetchProgress = apt.progress.base.AcquireProgress() 4072s if not tmp_aptroot: 4072s apt_cache = self._sandbox_cache( 4072s aptroot, 4072s apt_dir, 4072s fetchProgress, 4072s self.get_distro_name(), 4072s self._current_release_codename, 4072s origins, 4072s architecture, 4072s ) 4072s else: 4072s self._build_apt_sandbox( 4072s aptroot, 4072s apt_dir, 4072s self.get_distro_name(), 4072s self._current_release_codename, 4072s origins, 4072s ) 4072s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 4072s try: 4072s apt_cache.update(fetchProgress) 4072s except apt.cache.FetchFailedException as error: 4072s raise SystemError(str(error)) from error 4072s apt_cache.open() 4072s 4072s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 4072s 4072s obsolete = "" 4072s 4072s src_records = apt.apt_pkg.SourceRecords() 4072s 4072s # read original package list 4072s pkg_list = os.path.join(rootdir, "packages.txt") 4072s pkg_versions = {} 4072s if os.path.exists(pkg_list): 4072s with open(pkg_list, encoding="utf-8") as f: 4072s for line in f: 4072s line = line.strip() 4072s if not line: 4072s continue 4072s (p, v) = line.split() 4072s pkg_versions[p] = v 4072s 4072s # mark packages for installation 4072s real_pkgs = set() 4072s lp_cache = {} 4072s fetcher = apt.apt_pkg.Acquire(fetchProgress) 4072s # need to keep AcquireFile references 4072s acquire_queue = [] 4072s # add any dependencies to the packages list 4072s if install_deps: 4072s deps = [] 4072s for pkg, ver in packages: 4072s try: 4072s cache_pkg = apt_cache[pkg] 4072s except KeyError: 4072s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 4072s obsolete += f"{m}\n" 4072s apport.logging.warning("%s", m) 4072s continue 4072s for dep in cache_pkg.candidate.dependencies: 4072s # the dependency may be satisfied by a different package 4072s if dep[0].name not in apt_cache: 4072s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 4072s # the version in dep is the one from pkg's dependencies, 4072s # so use the version from the cache 4072s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 4072s # if the dependency is in the list of packages we don't 4072s # need to look up its dependencies again 4072s if dep[0].name in [pkg[0] for pkg in packages]: 4072s continue 4072s # if the package is already extracted in the sandbox 4072s # because the report needs that package we don't want to 4072s # install a newer version which may cause a CRC mismatch 4072s # with the installed dbg symbols 4072s if dep[0].name in pkg_versions: 4072s inst_version = pkg_versions[dep[0].name] 4072s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 4072s deps.append((dep[0].name, inst_version)) 4072s else: 4072s deps.append((dep[0].name, dep_pkg_vers)) 4072s else: 4072s deps.append((dep[0].name, dep_pkg_vers)) 4072s if dep[0].name not in [pkg[0] for pkg in packages]: 4072s packages.append((dep[0].name, None)) 4072s packages.extend(deps) 4072s 4072s for pkg, ver in packages: 4072s try: 4072s cache_pkg = apt_cache[pkg] 4072s except KeyError: 4072s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 4072s obsolete += f"{m}\n" 4072s apport.logging.warning("%s", m) 4072s continue 4072s 4072s # try to select matching version 4072s try: 4072s if ver: 4072s cache_pkg.candidate = cache_pkg.versions[ver] 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, lp_url, hash=f"sha1:{sha1sum}", destdir=archivedir 4072s ) 4072s ) 4072s lp_cache[pkg] = ver 4072s else: 4072s obsolete += ( 4072s f"{pkg} version {ver} required," 4072s f" but {cache_pkg.candidate.version} is available\n" 4072s ) 4072s ver = cache_pkg.candidate.version 4072s 4072s candidate = cache_pkg.candidate 4072s real_pkgs.add(pkg) 4072s 4072s if permanent_rootdir: 4072s virtual_mapping = self._virtual_mapping(aptroot) 4072s # Remember all the virtual packages that this package provides, 4072s # so that if we encounter that virtual package as a 4072s # Conflicts/Replaces later, we know to remove this package from 4072s # the cache. 4072s for p in candidate.provides: 4072s virtual_mapping.setdefault(p, set()).add(pkg) 4072s conflicts = [] 4072s if "Conflicts" in candidate.record: 4072s conflicts += apt.apt_pkg.parse_depends( 4072s candidate.record["Conflicts"] 4072s ) 4072s if "Replaces" in candidate.record: 4072s conflicts += apt.apt_pkg.parse_depends(candidate.record["Replaces"]) 4072s for conflict in conflicts: 4072s # if the package conflicts with itself its wonky e.g. 4072s # gdb in artful 4072s if conflict[0][0] == candidate.package.name: 4072s continue 4072s # apt_pkg.parse_depends needs to handle the or operator, 4072s # but as policy states it is invalid to use that in 4072s # Replaces/Depends, we can safely choose the first value 4072s # here. 4072s conflict = conflict[0] 4072s if apt_cache.is_virtual_package(conflict[0]): 4072s try: 4072s providers = virtual_mapping[conflict[0]] 4072s except KeyError: 4072s # We may not have seen the virtual package that 4072s # this conflicts with, so we can assume it's not 4072s # unpacked into the sandbox. 4072s continue 4072s for p in providers: 4072s # if the candidate package being installed 4072s # conflicts with but also provides a virtual 4072s # package don't act on the candidate e.g. 4072s # libpam-modules and libpam-mkhomedir in artful 4072s if p == candidate.package.name: 4072s continue 4072s debs = os.path.join(archivedir, f"{p}_*.deb") 4072s for path in glob.glob(debs): 4072s ver = self._deb_version(path) 4072s if apt.apt_pkg.check_dep(ver, conflict[2], conflict[1]): 4072s os.unlink(path) 4072s try: 4072s del pkg_versions[p] 4072s except KeyError: 4072s pass 4072s del providers 4072s else: 4072s debs = os.path.join(archivedir, f"{conflict[0]}_*.deb") 4072s for path in glob.glob(debs): 4072s ver = self._deb_version(path) 4072s if apt.apt_pkg.check_dep(ver, conflict[2], conflict[1]): 4072s os.unlink(path) 4072s try: 4072s del pkg_versions[conflict[0]] 4072s except KeyError: 4072s pass 4072s 4072s if candidate.architecture != "all" and install_dbg: 4072s try: 4072s dbg_pkg = f"{pkg}-dbg" 4072s dbg = apt_cache[dbg_pkg] 4072s pkg_found = False 4072s # try to get the same version as pkg 4072s if ver: 4072s try: 4072s dbg.candidate = dbg.versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbg_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbg_pkg] = ver 4072s pkg_found = True 4072s # if it can't be found in Launchpad failover to a 4072s # code path that'll use -dbgsym packages 4072s else: 4072s raise 4072s if not pkg_found: 4072s try: 4072s dbg.candidate = dbg.versions[candidate.version] 4072s except KeyError: 4072s obsolete += ( 4072s f"outdated -dbg package for {pkg}:" 4072s f" package version {ver}" 4072s f" -dbg version {dbg.candidate.version}\n" 4072s ) 4072s real_pkgs.add(dbg_pkg) 4072s except KeyError: 4072s # install all -dbg from the source package; lookup() just 4072s # works from the current list pointer, we always need to 4072s # start from the beginning 4072s src_records.restart() 4072s if src_records.lookup(candidate.source_name): 4072s # ignore transitional packages 4072s # False positive, see 4072s # https://github.com/PyCQA/pylint/issues/7122 4072s # pylint: disable=not-an-iterable 4072s dbgs = [ 4072s p 4072s for p in src_records.binaries 4072s if p.endswith("-dbg") 4072s and p in apt_cache 4072s and "transitional" not in apt_cache[p].candidate.description 4072s ] 4072s # if a specific version of a package was requested 4072s # only install dbg pkgs whose version matches 4072s if ver: 4072s for dbg in dbgs: 4072s if apt_cache[dbg].candidate.version != ver: 4072s dbgs.remove(dbg) 4072s else: 4072s dbgs = [] 4072s if dbgs: 4072s for p in dbgs: 4072s # if the package has already been added to 4072s # real_pkgs don't search for it again 4072s if p in real_pkgs: 4072s continue 4072s pkg_found = False 4072s # prefer the version requested 4072s if ver: 4072s try: 4072s apt_cache[p].candidate = apt_cache[p].versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, p, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[p] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s try: 4072s apt_cache[p].candidate = apt_cache[p].versions[ 4072s candidate.version 4072s ] 4072s except KeyError: 4072s # we don't really expect that, but it's 4072s # possible that other binaries have a 4072s # different version 4072s pass 4072s real_pkgs.add(p) 4072s else: 4072s pkg_found = False 4072s dbgsym_pkg = f"{pkg}-dbgsym" 4072s try: 4072s dbgsym = apt_cache[dbgsym_pkg] 4072s real_pkgs.add(dbgsym_pkg) 4072s # prefer the version requested 4072s if ver: 4072s try: 4072s dbgsym.candidate = dbgsym.versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbgsym_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbgsym_pkg] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s try: 4072s dbgsym.candidate = dbgsym.versions[ 4072s candidate.version 4072s ] 4072s except KeyError: 4072s obsolete += ( 4072s f"outdated debug symbol package" 4072s f" for {pkg}: package version" 4072s f" {candidate.version}" 4072s f" dbgsym version" 4072s f" {dbgsym.candidate.version}\n" 4072s ) 4072s 4072s except KeyError: 4072s if ver: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbgsym_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbgsym_pkg] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s obsolete += f"no debug symbol package found for {pkg}\n" 4072s 4072s # unpack packages, weed out the ones that are already installed (for 4072s # permanent sandboxes) 4072s logger = logging.getLogger(__name__) 4072s requested_pkgs = dict(packages) 4072s for p in real_pkgs.copy(): 4072s if p in requested_pkgs: 4072s if requested_pkgs[p] is None: 4072s # We already have the latest version of this package 4072s if pkg_versions.get(p) == apt_cache[p].candidate.version: 4072s logger.debug( 4072s "Removing %s which is already the right version", p 4072s ) 4072s real_pkgs.remove(p) 4072s else: 4072s logger.debug( 4072s "Installing %s version %s", 4072s p, 4072s apt_cache[p].candidate.version, 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s elif pkg_versions.get(p) != requested_pkgs[p]: 4072s logger.debug( 4072s "Installing %s version %s", p, apt_cache[p].candidate.version 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s elif pkg_versions.get(p) != apt_cache[p].candidate.version: 4072s logger.debug( 4072s "Installing %s version %s", p, apt_cache[p].candidate.version 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s else: 4072s logger.debug("Removing %s which is already the right version", p) 4072s real_pkgs.remove(p) 4072s elif pkg_versions.get(p) != apt_cache[p].candidate.version: 4072s logger.debug("Installing %s", p) 4072s apt_cache[p].mark_install(False, False) 4072s else: 4072s logger.debug("Removing %s which is already the right version", p) 4072s real_pkgs.remove(p) 4072s 4072s last_written = time.time() 4072s # fetch packages 4072s try: 4072s > apt_cache.fetch_archives(fetcher=fetcher) 4072s 4072s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1321: 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s /usr/lib/python3/dist-packages/apt/cache.py:475: in fetch_archives 4072s return self._fetch_archives( 4072s /usr/lib/python3/dist-packages/apt/cache.py:443: in _fetch_archives 4072s return self._run_fetcher(fetcher, allow_unauthenticated) 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s 4072s self = 4072s fetcher = 4072s allow_unauthenticated = True 4072s 4072s def _run_fetcher( 4072s self, fetcher: apt_pkg.Acquire, allow_unauthenticated: bool | None 4072s ) -> int: 4072s if allow_unauthenticated is None: 4072s allow_unauthenticated = apt_pkg.config.find_b( 4072s "APT::Get::" "AllowUnauthenticated", False 4072s ) 4072s 4072s untrusted = [item for item in fetcher.items if not item.is_trusted] 4072s if untrusted and not allow_unauthenticated: 4072s raise UntrustedException( 4072s "Untrusted packages:\n%s" % "\n".join(i.desc_uri for i in untrusted) 4072s ) 4072s 4072s # do the actual fetching 4072s res = fetcher.run() 4072s 4072s # now check the result (this is the code from apt-get.cc) 4072s failed = False 4072s err_msg = "" 4072s for item in fetcher.items: 4072s if item.status == item.STAT_DONE: 4072s continue 4072s if item.STAT_IDLE: 4072s continue 4072s err_msg += f"Failed to fetch {item.desc_uri} {item.error_text}\n" 4072s failed = True 4072s 4072s # we raise a exception if the download failed or it was cancelt 4072s if res == fetcher.RESULT_CANCELLED: 4072s raise FetchCancelledException(err_msg) 4072s elif failed: 4072s > raise FetchFailedException(err_msg) 4072s E apt.cache.FetchFailedException: Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/distro-info-data_0.43ubuntu1.9_all.deb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) Could not connect to launchpad.net:443 (185.125.189.222), connection timed out Could not connect to launchpad.net:443 (185.125.189.223), connection timed out 4072s E Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libc6_2.31-0ubuntu9.4_amd64.deb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4072s E Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libc6-dbg_2.31-0ubuntu9.4_amd64.deb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4072s E Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/qemu-utils_4.2-3ubuntu6.1_amd64.deb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4072s E Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/qemu-utils-dbgsym_4.2-3ubuntu6.1_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4072s 4072s /usr/lib/python3/dist-packages/apt/cache.py:424: FetchFailedException 4072s 4072s During handling of the above exception, another exception occurred: 4072s 4072s configdir = '/tmp/tmpi9uhkktf/config', cachedir = '/tmp/tmpi9uhkktf/cache' 4072s rootdir = '/tmp/tmpi9uhkktf/root', apt_style = 'one-line' 4072s 4072s @pytest.mark.skipif(not has_internet(), reason="online test") 4072s def test_install_packages_from_launchpad(configdir, cachedir, rootdir, apt_style): 4072s """install_packages() using packages only available on Launchpad""" 4072s release = _setup_foonux_config(configdir, apt_style, release="focal") 4072s # Wanted are superseded versions from -updates or -security. 4072s wanted = { 4072s "distro-info-data": "0.43ubuntu1.9", # arch all 4072s "libc6": "2.31-0ubuntu9.4", # -dbg, arch specific 4072s "qemu-utils": "1:4.2-3ubuntu6.1", # -dbgsym, arch specific 4072s } 4072s > obsolete = impl.install_packages( 4072s rootdir, configdir, release, list(wanted.items()), False, cachedir 4072s ) 4072s 4072s tests/system/test_packaging_apt_dpkg.py:581: 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s 4072s self = 4072s rootdir = '/tmp/tmpi9uhkktf/root', configdir = '/tmp/tmpi9uhkktf/config' 4072s release = 'Foonux 20.04' 4072s packages = [('distro-info-data', '0.43ubuntu1.9'), ('libc6', '2.31-0ubuntu9.4'), ('qemu-utils', '1:4.2-3ubuntu6.1')] 4072s verbose = False, cache_dir = '/tmp/tmpi9uhkktf/cache', permanent_rootdir = False 4072s architecture = 'amd64', origins = None, install_dbg = True, install_deps = False 4072s 4072s def install_packages( 4072s self, 4072s rootdir, 4072s configdir, 4072s release, 4072s packages, 4072s verbose=False, 4072s cache_dir=None, 4072s permanent_rootdir=False, 4072s architecture=None, 4072s origins=None, 4072s install_dbg=True, 4072s install_deps=False, 4072s ): # pylint: disable=too-many-arguments 4072s # TODO: Split into smaller functions/methods 4072s # pylint: disable=too-many-branches,too-many-locals 4072s # pylint: disable=too-many-nested-blocks,too-many-statements 4072s """Install packages into a sandbox (for apport-retrace). 4072s 4072s In order to work without any special permissions and without touching 4072s the running system, this should only download and unpack packages into 4072s the given root directory, not install them into the system. 4072s 4072s configdir points to a directory with by-release configuration files for 4072s the packaging system; this is completely dependent on the backend 4072s implementation, the only assumption is that this looks into 4072s configdir/release/, so that you can use retracing for multiple 4072s DistroReleases. As a special case, if configdir is None, it uses the 4072s current system configuration, and "release" is ignored. 4072s 4072s release is the value of the report's 'DistroRelease' field. 4072s 4072s packages is a list of ('packagename', 'version') tuples. If the version 4072s is None, it should install the most current available version. 4072s 4072s If cache_dir is given, then the downloaded packages will be stored 4072s there, to speed up subsequent retraces. 4072s 4072s If permanent_rootdir is True, then the sandbox created from the 4072s downloaded packages will be reused, to speed up subsequent retraces. 4072s 4072s If architecture is given, the sandbox will be created with packages of 4072s the given architecture (as specified in a report's "Architecture" 4072s field). If not given it defaults to the host system's architecture. 4072s 4072s If origins is given, the sandbox will be created with apt data sources 4072s for foreign origins. 4072s 4072s If install_deps is True, then the dependencies of packages will also 4072s be installed. 4072s 4072s Return a string with outdated packages, or an empty string if all 4072s packages were installed. 4072s 4072s If something is wrong with the environment (invalid configuration, 4072s package servers down, etc.), this should raise a SystemError with a 4072s meaningful error message. 4072s """ 4072s if not architecture: 4072s architecture = self.get_system_architecture() 4072s if not configdir: 4072s apt_dir = "/etc/apt" 4072s self._current_release_codename = self.get_distro_codename() 4072s else: 4072s # support architecture specific config, fall back to global config 4072s apt_dir = os.path.join(configdir, release) 4072s if architecture != self.get_system_architecture(): 4072s arch_apt_dir = os.path.join(configdir, release, architecture) 4072s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 4072s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 4072s if os.path.exists(arch_old_sources) or ( 4072s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 4072s ): 4072s apt_dir = arch_apt_dir 4072s 4072s # set mirror for get_file_package() 4072s try: 4072s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 4072s except SystemError as error: 4072s apport.logging.warning("cannot determine mirror: %s", str(error)) 4072s 4072s # set current release code name for _distro_release_to_codename 4072s with open( 4072s os.path.join(configdir, release, "codename"), encoding="utf-8" 4072s ) as f: 4072s self._current_release_codename = f.read().strip() 4072s 4072s # create apt sandbox 4072s if cache_dir: 4072s tmp_aptroot = False 4072s if architecture != self.get_system_architecture(): 4072s aptroot_arch = architecture 4072s else: 4072s aptroot_arch = "" 4072s if configdir: 4072s aptroot = os.path.join(cache_dir, release, aptroot_arch, "apt") 4072s else: 4072s aptroot = os.path.join(cache_dir, "system", aptroot_arch, "apt") 4072s if not os.path.isdir(aptroot): 4072s os.makedirs(aptroot) 4072s else: 4072s tmp_aptroot = True 4072s aptroot = tempfile.mkdtemp() 4072s 4072s apt.apt_pkg.config.set("APT::Architecture", architecture) 4072s apt.apt_pkg.config.set("Acquire::Languages", "none") 4072s # directly connect to Launchpad when downloading deb files 4072s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 4072s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 4072s 4072s if verbose: 4072s fetchProgress = apt.progress.text.AcquireProgress() 4072s else: 4072s fetchProgress = apt.progress.base.AcquireProgress() 4072s if not tmp_aptroot: 4072s apt_cache = self._sandbox_cache( 4072s aptroot, 4072s apt_dir, 4072s fetchProgress, 4072s self.get_distro_name(), 4072s self._current_release_codename, 4072s origins, 4072s architecture, 4072s ) 4072s else: 4072s self._build_apt_sandbox( 4072s aptroot, 4072s apt_dir, 4072s self.get_distro_name(), 4072s self._current_release_codename, 4072s origins, 4072s ) 4072s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 4072s try: 4072s apt_cache.update(fetchProgress) 4072s except apt.cache.FetchFailedException as error: 4072s raise SystemError(str(error)) from error 4072s apt_cache.open() 4072s 4072s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 4072s 4072s obsolete = "" 4072s 4072s src_records = apt.apt_pkg.SourceRecords() 4072s 4072s # read original package list 4072s pkg_list = os.path.join(rootdir, "packages.txt") 4072s pkg_versions = {} 4072s if os.path.exists(pkg_list): 4072s with open(pkg_list, encoding="utf-8") as f: 4072s for line in f: 4072s line = line.strip() 4072s if not line: 4072s continue 4072s (p, v) = line.split() 4072s pkg_versions[p] = v 4072s 4072s # mark packages for installation 4072s real_pkgs = set() 4072s lp_cache = {} 4072s fetcher = apt.apt_pkg.Acquire(fetchProgress) 4072s # need to keep AcquireFile references 4072s acquire_queue = [] 4072s # add any dependencies to the packages list 4072s if install_deps: 4072s deps = [] 4072s for pkg, ver in packages: 4072s try: 4072s cache_pkg = apt_cache[pkg] 4072s except KeyError: 4072s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 4072s obsolete += f"{m}\n" 4072s apport.logging.warning("%s", m) 4072s continue 4072s for dep in cache_pkg.candidate.dependencies: 4072s # the dependency may be satisfied by a different package 4072s if dep[0].name not in apt_cache: 4072s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 4072s # the version in dep is the one from pkg's dependencies, 4072s # so use the version from the cache 4072s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 4072s # if the dependency is in the list of packages we don't 4072s # need to look up its dependencies again 4072s if dep[0].name in [pkg[0] for pkg in packages]: 4072s continue 4072s # if the package is already extracted in the sandbox 4072s # because the report needs that package we don't want to 4072s # install a newer version which may cause a CRC mismatch 4072s # with the installed dbg symbols 4072s if dep[0].name in pkg_versions: 4072s inst_version = pkg_versions[dep[0].name] 4072s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 4072s deps.append((dep[0].name, inst_version)) 4072s else: 4072s deps.append((dep[0].name, dep_pkg_vers)) 4072s else: 4072s deps.append((dep[0].name, dep_pkg_vers)) 4072s if dep[0].name not in [pkg[0] for pkg in packages]: 4072s packages.append((dep[0].name, None)) 4072s packages.extend(deps) 4072s 4072s for pkg, ver in packages: 4072s try: 4072s cache_pkg = apt_cache[pkg] 4072s except KeyError: 4072s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 4072s obsolete += f"{m}\n" 4072s apport.logging.warning("%s", m) 4072s continue 4072s 4072s # try to select matching version 4072s try: 4072s if ver: 4072s cache_pkg.candidate = cache_pkg.versions[ver] 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, lp_url, hash=f"sha1:{sha1sum}", destdir=archivedir 4072s ) 4072s ) 4072s lp_cache[pkg] = ver 4072s else: 4072s obsolete += ( 4072s f"{pkg} version {ver} required," 4072s f" but {cache_pkg.candidate.version} is available\n" 4072s ) 4072s ver = cache_pkg.candidate.version 4072s 4072s candidate = cache_pkg.candidate 4072s real_pkgs.add(pkg) 4072s 4072s if permanent_rootdir: 4072s virtual_mapping = self._virtual_mapping(aptroot) 4072s # Remember all the virtual packages that this package provides, 4072s # so that if we encounter that virtual package as a 4072s # Conflicts/Replaces later, we know to remove this package from 4072s # the cache. 4072s for p in candidate.provides: 4072s virtual_mapping.setdefault(p, set()).add(pkg) 4072s conflicts = [] 4072s if "Conflicts" in candidate.record: 4072s conflicts += apt.apt_pkg.parse_depends( 4072s candidate.record["Conflicts"] 4072s ) 4072s if "Replaces" in candidate.record: 4072s conflicts += apt.apt_pkg.parse_depends(candidate.record["Replaces"]) 4072s for conflict in conflicts: 4072s # if the package conflicts with itself its wonky e.g. 4072s # gdb in artful 4072s if conflict[0][0] == candidate.package.name: 4072s continue 4072s # apt_pkg.parse_depends needs to handle the or operator, 4072s # but as policy states it is invalid to use that in 4072s # Replaces/Depends, we can safely choose the first value 4072s # here. 4072s conflict = conflict[0] 4072s if apt_cache.is_virtual_package(conflict[0]): 4072s try: 4072s providers = virtual_mapping[conflict[0]] 4072s except KeyError: 4072s # We may not have seen the virtual package that 4072s # this conflicts with, so we can assume it's not 4072s # unpacked into the sandbox. 4072s continue 4072s for p in providers: 4072s # if the candidate package being installed 4072s # conflicts with but also provides a virtual 4072s # package don't act on the candidate e.g. 4072s # libpam-modules and libpam-mkhomedir in artful 4072s if p == candidate.package.name: 4072s continue 4072s debs = os.path.join(archivedir, f"{p}_*.deb") 4072s for path in glob.glob(debs): 4072s ver = self._deb_version(path) 4072s if apt.apt_pkg.check_dep(ver, conflict[2], conflict[1]): 4072s os.unlink(path) 4072s try: 4072s del pkg_versions[p] 4072s except KeyError: 4072s pass 4072s del providers 4072s else: 4072s debs = os.path.join(archivedir, f"{conflict[0]}_*.deb") 4072s for path in glob.glob(debs): 4072s ver = self._deb_version(path) 4072s if apt.apt_pkg.check_dep(ver, conflict[2], conflict[1]): 4072s os.unlink(path) 4072s try: 4072s del pkg_versions[conflict[0]] 4072s except KeyError: 4072s pass 4072s 4072s if candidate.architecture != "all" and install_dbg: 4072s try: 4072s dbg_pkg = f"{pkg}-dbg" 4072s dbg = apt_cache[dbg_pkg] 4072s pkg_found = False 4072s # try to get the same version as pkg 4072s if ver: 4072s try: 4072s dbg.candidate = dbg.versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbg_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbg_pkg] = ver 4072s pkg_found = True 4072s # if it can't be found in Launchpad failover to a 4072s # code path that'll use -dbgsym packages 4072s else: 4072s raise 4072s if not pkg_found: 4072s try: 4072s dbg.candidate = dbg.versions[candidate.version] 4072s except KeyError: 4072s obsolete += ( 4072s f"outdated -dbg package for {pkg}:" 4072s f" package version {ver}" 4072s f" -dbg version {dbg.candidate.version}\n" 4072s ) 4072s real_pkgs.add(dbg_pkg) 4072s except KeyError: 4072s # install all -dbg from the source package; lookup() just 4072s # works from the current list pointer, we always need to 4072s # start from the beginning 4072s src_records.restart() 4072s if src_records.lookup(candidate.source_name): 4072s # ignore transitional packages 4072s # False positive, see 4072s # https://github.com/PyCQA/pylint/issues/7122 4072s # pylint: disable=not-an-iterable 4072s dbgs = [ 4072s p 4072s for p in src_records.binaries 4072s if p.endswith("-dbg") 4072s and p in apt_cache 4072s and "transitional" not in apt_cache[p].candidate.description 4072s ] 4072s # if a specific version of a package was requested 4072s # only install dbg pkgs whose version matches 4072s if ver: 4072s for dbg in dbgs: 4072s if apt_cache[dbg].candidate.version != ver: 4072s dbgs.remove(dbg) 4072s else: 4072s dbgs = [] 4072s if dbgs: 4072s for p in dbgs: 4072s # if the package has already been added to 4072s # real_pkgs don't search for it again 4072s if p in real_pkgs: 4072s continue 4072s pkg_found = False 4072s # prefer the version requested 4072s if ver: 4072s try: 4072s apt_cache[p].candidate = apt_cache[p].versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, p, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[p] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s try: 4072s apt_cache[p].candidate = apt_cache[p].versions[ 4072s candidate.version 4072s ] 4072s except KeyError: 4072s # we don't really expect that, but it's 4072s # possible that other binaries have a 4072s # different version 4072s pass 4072s real_pkgs.add(p) 4072s else: 4072s pkg_found = False 4072s dbgsym_pkg = f"{pkg}-dbgsym" 4072s try: 4072s dbgsym = apt_cache[dbgsym_pkg] 4072s real_pkgs.add(dbgsym_pkg) 4072s # prefer the version requested 4072s if ver: 4072s try: 4072s dbgsym.candidate = dbgsym.versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbgsym_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbgsym_pkg] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s try: 4072s dbgsym.candidate = dbgsym.versions[ 4072s candidate.version 4072s ] 4072s except KeyError: 4072s obsolete += ( 4072s f"outdated debug symbol package" 4072s f" for {pkg}: package version" 4072s f" {candidate.version}" 4072s f" dbgsym version" 4072s f" {dbgsym.candidate.version}\n" 4072s ) 4072s 4072s except KeyError: 4072s if ver: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbgsym_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbgsym_pkg] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s obsolete += f"no debug symbol package found for {pkg}\n" 4072s 4072s # unpack packages, weed out the ones that are already installed (for 4072s # permanent sandboxes) 4072s logger = logging.getLogger(__name__) 4072s requested_pkgs = dict(packages) 4072s for p in real_pkgs.copy(): 4072s if p in requested_pkgs: 4072s if requested_pkgs[p] is None: 4072s # We already have the latest version of this package 4072s if pkg_versions.get(p) == apt_cache[p].candidate.version: 4072s logger.debug( 4072s "Removing %s which is already the right version", p 4072s ) 4072s real_pkgs.remove(p) 4072s else: 4072s logger.debug( 4072s "Installing %s version %s", 4072s p, 4072s apt_cache[p].candidate.version, 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s elif pkg_versions.get(p) != requested_pkgs[p]: 4072s logger.debug( 4072s "Installing %s version %s", p, apt_cache[p].candidate.version 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s elif pkg_versions.get(p) != apt_cache[p].candidate.version: 4072s logger.debug( 4072s "Installing %s version %s", p, apt_cache[p].candidate.version 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s else: 4072s logger.debug("Removing %s which is already the right version", p) 4072s real_pkgs.remove(p) 4072s elif pkg_versions.get(p) != apt_cache[p].candidate.version: 4072s logger.debug("Installing %s", p) 4072s apt_cache[p].mark_install(False, False) 4072s else: 4072s logger.debug("Removing %s which is already the right version", p) 4072s real_pkgs.remove(p) 4072s 4072s last_written = time.time() 4072s # fetch packages 4072s try: 4072s apt_cache.fetch_archives(fetcher=fetcher) 4072s except apt.cache.FetchFailedException as error: 4072s apport.logging.error( 4072s "Package download error, try again later: %s", str(error) 4072s ) 4072s > sys.exit(1) # transient error 4072s E SystemExit: 1 4072s 4072s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1326: SystemExit 4072s ----------------------------- Captured stderr call ----------------------------- 4072s ERROR: Package download error, try again later: Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/distro-info-data_0.43ubuntu1.9_all.deb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) Could not connect to launchpad.net:443 (185.125.189.222), connection timed out Could not connect to launchpad.net:443 (185.125.189.223), connection timed out 4072s Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libc6_2.31-0ubuntu9.4_amd64.deb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4072s Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libc6-dbg_2.31-0ubuntu9.4_amd64.deb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4072s Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/qemu-utils_4.2-3ubuntu6.1_amd64.deb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4072s Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/qemu-utils-dbgsym_4.2-3ubuntu6.1_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4072s 4072s _________________ test_install_packages_from_launchpad[deb822] _________________ 4072s 4072s self = 4072s rootdir = '/tmp/tmp0sj6j3pc/root', configdir = '/tmp/tmp0sj6j3pc/config' 4072s release = 'Foonux 20.04' 4072s packages = [('distro-info-data', '0.43ubuntu1.9'), ('libc6', '2.31-0ubuntu9.4'), ('qemu-utils', '1:4.2-3ubuntu6.1')] 4072s verbose = False, cache_dir = '/tmp/tmp0sj6j3pc/cache', permanent_rootdir = False 4072s architecture = 'amd64', origins = None, install_dbg = True, install_deps = False 4072s 4072s def install_packages( 4072s self, 4072s rootdir, 4072s configdir, 4072s release, 4072s packages, 4072s verbose=False, 4072s cache_dir=None, 4072s permanent_rootdir=False, 4072s architecture=None, 4072s origins=None, 4072s install_dbg=True, 4072s install_deps=False, 4072s ): # pylint: disable=too-many-arguments 4072s # TODO: Split into smaller functions/methods 4072s # pylint: disable=too-many-branches,too-many-locals 4072s # pylint: disable=too-many-nested-blocks,too-many-statements 4072s """Install packages into a sandbox (for apport-retrace). 4072s 4072s In order to work without any special permissions and without touching 4072s the running system, this should only download and unpack packages into 4072s the given root directory, not install them into the system. 4072s 4072s configdir points to a directory with by-release configuration files for 4072s the packaging system; this is completely dependent on the backend 4072s implementation, the only assumption is that this looks into 4072s configdir/release/, so that you can use retracing for multiple 4072s DistroReleases. As a special case, if configdir is None, it uses the 4072s current system configuration, and "release" is ignored. 4072s 4072s release is the value of the report's 'DistroRelease' field. 4072s 4072s packages is a list of ('packagename', 'version') tuples. If the version 4072s is None, it should install the most current available version. 4072s 4072s If cache_dir is given, then the downloaded packages will be stored 4072s there, to speed up subsequent retraces. 4072s 4072s If permanent_rootdir is True, then the sandbox created from the 4072s downloaded packages will be reused, to speed up subsequent retraces. 4072s 4072s If architecture is given, the sandbox will be created with packages of 4072s the given architecture (as specified in a report's "Architecture" 4072s field). If not given it defaults to the host system's architecture. 4072s 4072s If origins is given, the sandbox will be created with apt data sources 4072s for foreign origins. 4072s 4072s If install_deps is True, then the dependencies of packages will also 4072s be installed. 4072s 4072s Return a string with outdated packages, or an empty string if all 4072s packages were installed. 4072s 4072s If something is wrong with the environment (invalid configuration, 4072s package servers down, etc.), this should raise a SystemError with a 4072s meaningful error message. 4072s """ 4072s if not architecture: 4072s architecture = self.get_system_architecture() 4072s if not configdir: 4072s apt_dir = "/etc/apt" 4072s self._current_release_codename = self.get_distro_codename() 4072s else: 4072s # support architecture specific config, fall back to global config 4072s apt_dir = os.path.join(configdir, release) 4072s if architecture != self.get_system_architecture(): 4072s arch_apt_dir = os.path.join(configdir, release, architecture) 4072s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 4072s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 4072s if os.path.exists(arch_old_sources) or ( 4072s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 4072s ): 4072s apt_dir = arch_apt_dir 4072s 4072s # set mirror for get_file_package() 4072s try: 4072s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 4072s except SystemError as error: 4072s apport.logging.warning("cannot determine mirror: %s", str(error)) 4072s 4072s # set current release code name for _distro_release_to_codename 4072s with open( 4072s os.path.join(configdir, release, "codename"), encoding="utf-8" 4072s ) as f: 4072s self._current_release_codename = f.read().strip() 4072s 4072s # create apt sandbox 4072s if cache_dir: 4072s tmp_aptroot = False 4072s if architecture != self.get_system_architecture(): 4072s aptroot_arch = architecture 4072s else: 4072s aptroot_arch = "" 4072s if configdir: 4072s aptroot = os.path.join(cache_dir, release, aptroot_arch, "apt") 4072s else: 4072s aptroot = os.path.join(cache_dir, "system", aptroot_arch, "apt") 4072s if not os.path.isdir(aptroot): 4072s os.makedirs(aptroot) 4072s else: 4072s tmp_aptroot = True 4072s aptroot = tempfile.mkdtemp() 4072s 4072s apt.apt_pkg.config.set("APT::Architecture", architecture) 4072s apt.apt_pkg.config.set("Acquire::Languages", "none") 4072s # directly connect to Launchpad when downloading deb files 4072s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 4072s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 4072s 4072s if verbose: 4072s fetchProgress = apt.progress.text.AcquireProgress() 4072s else: 4072s fetchProgress = apt.progress.base.AcquireProgress() 4072s if not tmp_aptroot: 4072s apt_cache = self._sandbox_cache( 4072s aptroot, 4072s apt_dir, 4072s fetchProgress, 4072s self.get_distro_name(), 4072s self._current_release_codename, 4072s origins, 4072s architecture, 4072s ) 4072s else: 4072s self._build_apt_sandbox( 4072s aptroot, 4072s apt_dir, 4072s self.get_distro_name(), 4072s self._current_release_codename, 4072s origins, 4072s ) 4072s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 4072s try: 4072s apt_cache.update(fetchProgress) 4072s except apt.cache.FetchFailedException as error: 4072s raise SystemError(str(error)) from error 4072s apt_cache.open() 4072s 4072s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 4072s 4072s obsolete = "" 4072s 4072s src_records = apt.apt_pkg.SourceRecords() 4072s 4072s # read original package list 4072s pkg_list = os.path.join(rootdir, "packages.txt") 4072s pkg_versions = {} 4072s if os.path.exists(pkg_list): 4072s with open(pkg_list, encoding="utf-8") as f: 4072s for line in f: 4072s line = line.strip() 4072s if not line: 4072s continue 4072s (p, v) = line.split() 4072s pkg_versions[p] = v 4072s 4072s # mark packages for installation 4072s real_pkgs = set() 4072s lp_cache = {} 4072s fetcher = apt.apt_pkg.Acquire(fetchProgress) 4072s # need to keep AcquireFile references 4072s acquire_queue = [] 4072s # add any dependencies to the packages list 4072s if install_deps: 4072s deps = [] 4072s for pkg, ver in packages: 4072s try: 4072s cache_pkg = apt_cache[pkg] 4072s except KeyError: 4072s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 4072s obsolete += f"{m}\n" 4072s apport.logging.warning("%s", m) 4072s continue 4072s for dep in cache_pkg.candidate.dependencies: 4072s # the dependency may be satisfied by a different package 4072s if dep[0].name not in apt_cache: 4072s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 4072s # the version in dep is the one from pkg's dependencies, 4072s # so use the version from the cache 4072s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 4072s # if the dependency is in the list of packages we don't 4072s # need to look up its dependencies again 4072s if dep[0].name in [pkg[0] for pkg in packages]: 4072s continue 4072s # if the package is already extracted in the sandbox 4072s # because the report needs that package we don't want to 4072s # install a newer version which may cause a CRC mismatch 4072s # with the installed dbg symbols 4072s if dep[0].name in pkg_versions: 4072s inst_version = pkg_versions[dep[0].name] 4072s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 4072s deps.append((dep[0].name, inst_version)) 4072s else: 4072s deps.append((dep[0].name, dep_pkg_vers)) 4072s else: 4072s deps.append((dep[0].name, dep_pkg_vers)) 4072s if dep[0].name not in [pkg[0] for pkg in packages]: 4072s packages.append((dep[0].name, None)) 4072s packages.extend(deps) 4072s 4072s for pkg, ver in packages: 4072s try: 4072s cache_pkg = apt_cache[pkg] 4072s except KeyError: 4072s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 4072s obsolete += f"{m}\n" 4072s apport.logging.warning("%s", m) 4072s continue 4072s 4072s # try to select matching version 4072s try: 4072s if ver: 4072s cache_pkg.candidate = cache_pkg.versions[ver] 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, lp_url, hash=f"sha1:{sha1sum}", destdir=archivedir 4072s ) 4072s ) 4072s lp_cache[pkg] = ver 4072s else: 4072s obsolete += ( 4072s f"{pkg} version {ver} required," 4072s f" but {cache_pkg.candidate.version} is available\n" 4072s ) 4072s ver = cache_pkg.candidate.version 4072s 4072s candidate = cache_pkg.candidate 4072s real_pkgs.add(pkg) 4072s 4072s if permanent_rootdir: 4072s virtual_mapping = self._virtual_mapping(aptroot) 4072s # Remember all the virtual packages that this package provides, 4072s # so that if we encounter that virtual package as a 4072s # Conflicts/Replaces later, we know to remove this package from 4072s # the cache. 4072s for p in candidate.provides: 4072s virtual_mapping.setdefault(p, set()).add(pkg) 4072s conflicts = [] 4072s if "Conflicts" in candidate.record: 4072s conflicts += apt.apt_pkg.parse_depends( 4072s candidate.record["Conflicts"] 4072s ) 4072s if "Replaces" in candidate.record: 4072s conflicts += apt.apt_pkg.parse_depends(candidate.record["Replaces"]) 4072s for conflict in conflicts: 4072s # if the package conflicts with itself its wonky e.g. 4072s # gdb in artful 4072s if conflict[0][0] == candidate.package.name: 4072s continue 4072s # apt_pkg.parse_depends needs to handle the or operator, 4072s # but as policy states it is invalid to use that in 4072s # Replaces/Depends, we can safely choose the first value 4072s # here. 4072s conflict = conflict[0] 4072s if apt_cache.is_virtual_package(conflict[0]): 4072s try: 4072s providers = virtual_mapping[conflict[0]] 4072s except KeyError: 4072s # We may not have seen the virtual package that 4072s # this conflicts with, so we can assume it's not 4072s # unpacked into the sandbox. 4072s continue 4072s for p in providers: 4072s # if the candidate package being installed 4072s # conflicts with but also provides a virtual 4072s # package don't act on the candidate e.g. 4072s # libpam-modules and libpam-mkhomedir in artful 4072s if p == candidate.package.name: 4072s continue 4072s debs = os.path.join(archivedir, f"{p}_*.deb") 4072s for path in glob.glob(debs): 4072s ver = self._deb_version(path) 4072s if apt.apt_pkg.check_dep(ver, conflict[2], conflict[1]): 4072s os.unlink(path) 4072s try: 4072s del pkg_versions[p] 4072s except KeyError: 4072s pass 4072s del providers 4072s else: 4072s debs = os.path.join(archivedir, f"{conflict[0]}_*.deb") 4072s for path in glob.glob(debs): 4072s ver = self._deb_version(path) 4072s if apt.apt_pkg.check_dep(ver, conflict[2], conflict[1]): 4072s os.unlink(path) 4072s try: 4072s del pkg_versions[conflict[0]] 4072s except KeyError: 4072s pass 4072s 4072s if candidate.architecture != "all" and install_dbg: 4072s try: 4072s dbg_pkg = f"{pkg}-dbg" 4072s dbg = apt_cache[dbg_pkg] 4072s pkg_found = False 4072s # try to get the same version as pkg 4072s if ver: 4072s try: 4072s dbg.candidate = dbg.versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbg_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbg_pkg] = ver 4072s pkg_found = True 4072s # if it can't be found in Launchpad failover to a 4072s # code path that'll use -dbgsym packages 4072s else: 4072s raise 4072s if not pkg_found: 4072s try: 4072s dbg.candidate = dbg.versions[candidate.version] 4072s except KeyError: 4072s obsolete += ( 4072s f"outdated -dbg package for {pkg}:" 4072s f" package version {ver}" 4072s f" -dbg version {dbg.candidate.version}\n" 4072s ) 4072s real_pkgs.add(dbg_pkg) 4072s except KeyError: 4072s # install all -dbg from the source package; lookup() just 4072s # works from the current list pointer, we always need to 4072s # start from the beginning 4072s src_records.restart() 4072s if src_records.lookup(candidate.source_name): 4072s # ignore transitional packages 4072s # False positive, see 4072s # https://github.com/PyCQA/pylint/issues/7122 4072s # pylint: disable=not-an-iterable 4072s dbgs = [ 4072s p 4072s for p in src_records.binaries 4072s if p.endswith("-dbg") 4072s and p in apt_cache 4072s and "transitional" not in apt_cache[p].candidate.description 4072s ] 4072s # if a specific version of a package was requested 4072s # only install dbg pkgs whose version matches 4072s if ver: 4072s for dbg in dbgs: 4072s if apt_cache[dbg].candidate.version != ver: 4072s dbgs.remove(dbg) 4072s else: 4072s dbgs = [] 4072s if dbgs: 4072s for p in dbgs: 4072s # if the package has already been added to 4072s # real_pkgs don't search for it again 4072s if p in real_pkgs: 4072s continue 4072s pkg_found = False 4072s # prefer the version requested 4072s if ver: 4072s try: 4072s apt_cache[p].candidate = apt_cache[p].versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, p, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[p] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s try: 4072s apt_cache[p].candidate = apt_cache[p].versions[ 4072s candidate.version 4072s ] 4072s except KeyError: 4072s # we don't really expect that, but it's 4072s # possible that other binaries have a 4072s # different version 4072s pass 4072s real_pkgs.add(p) 4072s else: 4072s pkg_found = False 4072s dbgsym_pkg = f"{pkg}-dbgsym" 4072s try: 4072s dbgsym = apt_cache[dbgsym_pkg] 4072s real_pkgs.add(dbgsym_pkg) 4072s # prefer the version requested 4072s if ver: 4072s try: 4072s dbgsym.candidate = dbgsym.versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbgsym_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbgsym_pkg] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s try: 4072s dbgsym.candidate = dbgsym.versions[ 4072s candidate.version 4072s ] 4072s except KeyError: 4072s obsolete += ( 4072s f"outdated debug symbol package" 4072s f" for {pkg}: package version" 4072s f" {candidate.version}" 4072s f" dbgsym version" 4072s f" {dbgsym.candidate.version}\n" 4072s ) 4072s 4072s except KeyError: 4072s if ver: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbgsym_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbgsym_pkg] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s obsolete += f"no debug symbol package found for {pkg}\n" 4072s 4072s # unpack packages, weed out the ones that are already installed (for 4072s # permanent sandboxes) 4072s logger = logging.getLogger(__name__) 4072s requested_pkgs = dict(packages) 4072s for p in real_pkgs.copy(): 4072s if p in requested_pkgs: 4072s if requested_pkgs[p] is None: 4072s # We already have the latest version of this package 4072s if pkg_versions.get(p) == apt_cache[p].candidate.version: 4072s logger.debug( 4072s "Removing %s which is already the right version", p 4072s ) 4072s real_pkgs.remove(p) 4072s else: 4072s logger.debug( 4072s "Installing %s version %s", 4072s p, 4072s apt_cache[p].candidate.version, 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s elif pkg_versions.get(p) != requested_pkgs[p]: 4072s logger.debug( 4072s "Installing %s version %s", p, apt_cache[p].candidate.version 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s elif pkg_versions.get(p) != apt_cache[p].candidate.version: 4072s logger.debug( 4072s "Installing %s version %s", p, apt_cache[p].candidate.version 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s else: 4072s logger.debug("Removing %s which is already the right version", p) 4072s real_pkgs.remove(p) 4072s elif pkg_versions.get(p) != apt_cache[p].candidate.version: 4072s logger.debug("Installing %s", p) 4072s apt_cache[p].mark_install(False, False) 4072s else: 4072s logger.debug("Removing %s which is already the right version", p) 4072s real_pkgs.remove(p) 4072s 4072s last_written = time.time() 4072s # fetch packages 4072s try: 4072s > apt_cache.fetch_archives(fetcher=fetcher) 4072s 4072s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1321: 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s /usr/lib/python3/dist-packages/apt/cache.py:475: in fetch_archives 4072s return self._fetch_archives( 4072s /usr/lib/python3/dist-packages/apt/cache.py:443: in _fetch_archives 4072s return self._run_fetcher(fetcher, allow_unauthenticated) 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s 4072s self = 4072s fetcher = 4072s allow_unauthenticated = True 4072s 4072s def _run_fetcher( 4072s self, fetcher: apt_pkg.Acquire, allow_unauthenticated: bool | None 4072s ) -> int: 4072s if allow_unauthenticated is None: 4072s allow_unauthenticated = apt_pkg.config.find_b( 4072s "APT::Get::" "AllowUnauthenticated", False 4072s ) 4072s 4072s untrusted = [item for item in fetcher.items if not item.is_trusted] 4072s if untrusted and not allow_unauthenticated: 4072s raise UntrustedException( 4072s "Untrusted packages:\n%s" % "\n".join(i.desc_uri for i in untrusted) 4072s ) 4072s 4072s # do the actual fetching 4072s res = fetcher.run() 4072s 4072s # now check the result (this is the code from apt-get.cc) 4072s failed = False 4072s err_msg = "" 4072s for item in fetcher.items: 4072s if item.status == item.STAT_DONE: 4072s continue 4072s if item.STAT_IDLE: 4072s continue 4072s err_msg += f"Failed to fetch {item.desc_uri} {item.error_text}\n" 4072s failed = True 4072s 4072s # we raise a exception if the download failed or it was cancelt 4072s if res == fetcher.RESULT_CANCELLED: 4072s raise FetchCancelledException(err_msg) 4072s elif failed: 4072s > raise FetchFailedException(err_msg) 4072s E apt.cache.FetchFailedException: Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/distro-info-data_0.43ubuntu1.9_all.deb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) Could not connect to launchpad.net:443 (185.125.189.222), connection timed out Could not connect to launchpad.net:443 (185.125.189.223), connection timed out 4072s E Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libc6_2.31-0ubuntu9.4_amd64.deb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4072s E Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libc6-dbg_2.31-0ubuntu9.4_amd64.deb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4072s E Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/qemu-utils_4.2-3ubuntu6.1_amd64.deb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4072s E Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/qemu-utils-dbgsym_4.2-3ubuntu6.1_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4072s 4072s /usr/lib/python3/dist-packages/apt/cache.py:424: FetchFailedException 4072s 4072s During handling of the above exception, another exception occurred: 4072s 4072s configdir = '/tmp/tmp0sj6j3pc/config', cachedir = '/tmp/tmp0sj6j3pc/cache' 4072s rootdir = '/tmp/tmp0sj6j3pc/root', apt_style = 'deb822' 4072s 4072s @pytest.mark.skipif(not has_internet(), reason="online test") 4072s def test_install_packages_from_launchpad(configdir, cachedir, rootdir, apt_style): 4072s """install_packages() using packages only available on Launchpad""" 4072s release = _setup_foonux_config(configdir, apt_style, release="focal") 4072s # Wanted are superseded versions from -updates or -security. 4072s wanted = { 4072s "distro-info-data": "0.43ubuntu1.9", # arch all 4072s "libc6": "2.31-0ubuntu9.4", # -dbg, arch specific 4072s "qemu-utils": "1:4.2-3ubuntu6.1", # -dbgsym, arch specific 4072s } 4072s > obsolete = impl.install_packages( 4072s rootdir, configdir, release, list(wanted.items()), False, cachedir 4072s ) 4072s 4072s tests/system/test_packaging_apt_dpkg.py:581: 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s 4072s self = 4072s rootdir = '/tmp/tmp0sj6j3pc/root', configdir = '/tmp/tmp0sj6j3pc/config' 4072s release = 'Foonux 20.04' 4072s packages = [('distro-info-data', '0.43ubuntu1.9'), ('libc6', '2.31-0ubuntu9.4'), ('qemu-utils', '1:4.2-3ubuntu6.1')] 4072s verbose = False, cache_dir = '/tmp/tmp0sj6j3pc/cache', permanent_rootdir = False 4072s architecture = 'amd64', origins = None, install_dbg = True, install_deps = False 4072s 4072s def install_packages( 4072s self, 4072s rootdir, 4072s configdir, 4072s release, 4072s packages, 4072s verbose=False, 4072s cache_dir=None, 4072s permanent_rootdir=False, 4072s architecture=None, 4072s origins=None, 4072s install_dbg=True, 4072s install_deps=False, 4072s ): # pylint: disable=too-many-arguments 4072s # TODO: Split into smaller functions/methods 4072s # pylint: disable=too-many-branches,too-many-locals 4072s # pylint: disable=too-many-nested-blocks,too-many-statements 4072s """Install packages into a sandbox (for apport-retrace). 4072s 4072s In order to work without any special permissions and without touching 4072s the running system, this should only download and unpack packages into 4072s the given root directory, not install them into the system. 4072s 4072s configdir points to a directory with by-release configuration files for 4072s the packaging system; this is completely dependent on the backend 4072s implementation, the only assumption is that this looks into 4072s configdir/release/, so that you can use retracing for multiple 4072s DistroReleases. As a special case, if configdir is None, it uses the 4072s current system configuration, and "release" is ignored. 4072s 4072s release is the value of the report's 'DistroRelease' field. 4072s 4072s packages is a list of ('packagename', 'version') tuples. If the version 4072s is None, it should install the most current available version. 4072s 4072s If cache_dir is given, then the downloaded packages will be stored 4072s there, to speed up subsequent retraces. 4072s 4072s If permanent_rootdir is True, then the sandbox created from the 4072s downloaded packages will be reused, to speed up subsequent retraces. 4072s 4072s If architecture is given, the sandbox will be created with packages of 4072s the given architecture (as specified in a report's "Architecture" 4072s field). If not given it defaults to the host system's architecture. 4072s 4072s If origins is given, the sandbox will be created with apt data sources 4072s for foreign origins. 4072s 4072s If install_deps is True, then the dependencies of packages will also 4072s be installed. 4072s 4072s Return a string with outdated packages, or an empty string if all 4072s packages were installed. 4072s 4072s If something is wrong with the environment (invalid configuration, 4072s package servers down, etc.), this should raise a SystemError with a 4072s meaningful error message. 4072s """ 4072s if not architecture: 4072s architecture = self.get_system_architecture() 4072s if not configdir: 4072s apt_dir = "/etc/apt" 4072s self._current_release_codename = self.get_distro_codename() 4072s else: 4072s # support architecture specific config, fall back to global config 4072s apt_dir = os.path.join(configdir, release) 4072s if architecture != self.get_system_architecture(): 4072s arch_apt_dir = os.path.join(configdir, release, architecture) 4072s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 4072s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 4072s if os.path.exists(arch_old_sources) or ( 4072s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 4072s ): 4072s apt_dir = arch_apt_dir 4072s 4072s # set mirror for get_file_package() 4072s try: 4072s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 4072s except SystemError as error: 4072s apport.logging.warning("cannot determine mirror: %s", str(error)) 4072s 4072s # set current release code name for _distro_release_to_codename 4072s with open( 4072s os.path.join(configdir, release, "codename"), encoding="utf-8" 4072s ) as f: 4072s self._current_release_codename = f.read().strip() 4072s 4072s # create apt sandbox 4072s if cache_dir: 4072s tmp_aptroot = False 4072s if architecture != self.get_system_architecture(): 4072s aptroot_arch = architecture 4072s else: 4072s aptroot_arch = "" 4072s if configdir: 4072s aptroot = os.path.join(cache_dir, release, aptroot_arch, "apt") 4072s else: 4072s aptroot = os.path.join(cache_dir, "system", aptroot_arch, "apt") 4072s if not os.path.isdir(aptroot): 4072s os.makedirs(aptroot) 4072s else: 4072s tmp_aptroot = True 4072s aptroot = tempfile.mkdtemp() 4072s 4072s apt.apt_pkg.config.set("APT::Architecture", architecture) 4072s apt.apt_pkg.config.set("Acquire::Languages", "none") 4072s # directly connect to Launchpad when downloading deb files 4072s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 4072s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 4072s 4072s if verbose: 4072s fetchProgress = apt.progress.text.AcquireProgress() 4072s else: 4072s fetchProgress = apt.progress.base.AcquireProgress() 4072s if not tmp_aptroot: 4072s apt_cache = self._sandbox_cache( 4072s aptroot, 4072s apt_dir, 4072s fetchProgress, 4072s self.get_distro_name(), 4072s self._current_release_codename, 4072s origins, 4072s architecture, 4072s ) 4072s else: 4072s self._build_apt_sandbox( 4072s aptroot, 4072s apt_dir, 4072s self.get_distro_name(), 4072s self._current_release_codename, 4072s origins, 4072s ) 4072s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 4072s try: 4072s apt_cache.update(fetchProgress) 4072s except apt.cache.FetchFailedException as error: 4072s raise SystemError(str(error)) from error 4072s apt_cache.open() 4072s 4072s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 4072s 4072s obsolete = "" 4072s 4072s src_records = apt.apt_pkg.SourceRecords() 4072s 4072s # read original package list 4072s pkg_list = os.path.join(rootdir, "packages.txt") 4072s pkg_versions = {} 4072s if os.path.exists(pkg_list): 4072s with open(pkg_list, encoding="utf-8") as f: 4072s for line in f: 4072s line = line.strip() 4072s if not line: 4072s continue 4072s (p, v) = line.split() 4072s pkg_versions[p] = v 4072s 4072s # mark packages for installation 4072s real_pkgs = set() 4072s lp_cache = {} 4072s fetcher = apt.apt_pkg.Acquire(fetchProgress) 4072s # need to keep AcquireFile references 4072s acquire_queue = [] 4072s # add any dependencies to the packages list 4072s if install_deps: 4072s deps = [] 4072s for pkg, ver in packages: 4072s try: 4072s cache_pkg = apt_cache[pkg] 4072s except KeyError: 4072s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 4072s obsolete += f"{m}\n" 4072s apport.logging.warning("%s", m) 4072s continue 4072s for dep in cache_pkg.candidate.dependencies: 4072s # the dependency may be satisfied by a different package 4072s if dep[0].name not in apt_cache: 4072s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 4072s # the version in dep is the one from pkg's dependencies, 4072s # so use the version from the cache 4072s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 4072s # if the dependency is in the list of packages we don't 4072s # need to look up its dependencies again 4072s if dep[0].name in [pkg[0] for pkg in packages]: 4072s continue 4072s # if the package is already extracted in the sandbox 4072s # because the report needs that package we don't want to 4072s # install a newer version which may cause a CRC mismatch 4072s # with the installed dbg symbols 4072s if dep[0].name in pkg_versions: 4072s inst_version = pkg_versions[dep[0].name] 4072s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 4072s deps.append((dep[0].name, inst_version)) 4072s else: 4072s deps.append((dep[0].name, dep_pkg_vers)) 4072s else: 4072s deps.append((dep[0].name, dep_pkg_vers)) 4072s if dep[0].name not in [pkg[0] for pkg in packages]: 4072s packages.append((dep[0].name, None)) 4072s packages.extend(deps) 4072s 4072s for pkg, ver in packages: 4072s try: 4072s cache_pkg = apt_cache[pkg] 4072s except KeyError: 4072s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 4072s obsolete += f"{m}\n" 4072s apport.logging.warning("%s", m) 4072s continue 4072s 4072s # try to select matching version 4072s try: 4072s if ver: 4072s cache_pkg.candidate = cache_pkg.versions[ver] 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, lp_url, hash=f"sha1:{sha1sum}", destdir=archivedir 4072s ) 4072s ) 4072s lp_cache[pkg] = ver 4072s else: 4072s obsolete += ( 4072s f"{pkg} version {ver} required," 4072s f" but {cache_pkg.candidate.version} is available\n" 4072s ) 4072s ver = cache_pkg.candidate.version 4072s 4072s candidate = cache_pkg.candidate 4072s real_pkgs.add(pkg) 4072s 4072s if permanent_rootdir: 4072s virtual_mapping = self._virtual_mapping(aptroot) 4072s # Remember all the virtual packages that this package provides, 4072s # so that if we encounter that virtual package as a 4072s # Conflicts/Replaces later, we know to remove this package from 4072s # the cache. 4072s for p in candidate.provides: 4072s virtual_mapping.setdefault(p, set()).add(pkg) 4072s conflicts = [] 4072s if "Conflicts" in candidate.record: 4072s conflicts += apt.apt_pkg.parse_depends( 4072s candidate.record["Conflicts"] 4072s ) 4072s if "Replaces" in candidate.record: 4072s conflicts += apt.apt_pkg.parse_depends(candidate.record["Replaces"]) 4072s for conflict in conflicts: 4072s # if the package conflicts with itself its wonky e.g. 4072s # gdb in artful 4072s if conflict[0][0] == candidate.package.name: 4072s continue 4072s # apt_pkg.parse_depends needs to handle the or operator, 4072s # but as policy states it is invalid to use that in 4072s # Replaces/Depends, we can safely choose the first value 4072s # here. 4072s conflict = conflict[0] 4072s if apt_cache.is_virtual_package(conflict[0]): 4072s try: 4072s providers = virtual_mapping[conflict[0]] 4072s except KeyError: 4072s # We may not have seen the virtual package that 4072s # this conflicts with, so we can assume it's not 4072s # unpacked into the sandbox. 4072s continue 4072s for p in providers: 4072s # if the candidate package being installed 4072s # conflicts with but also provides a virtual 4072s # package don't act on the candidate e.g. 4072s # libpam-modules and libpam-mkhomedir in artful 4072s if p == candidate.package.name: 4072s continue 4072s debs = os.path.join(archivedir, f"{p}_*.deb") 4072s for path in glob.glob(debs): 4072s ver = self._deb_version(path) 4072s if apt.apt_pkg.check_dep(ver, conflict[2], conflict[1]): 4072s os.unlink(path) 4072s try: 4072s del pkg_versions[p] 4072s except KeyError: 4072s pass 4072s del providers 4072s else: 4072s debs = os.path.join(archivedir, f"{conflict[0]}_*.deb") 4072s for path in glob.glob(debs): 4072s ver = self._deb_version(path) 4072s if apt.apt_pkg.check_dep(ver, conflict[2], conflict[1]): 4072s os.unlink(path) 4072s try: 4072s del pkg_versions[conflict[0]] 4072s except KeyError: 4072s pass 4072s 4072s if candidate.architecture != "all" and install_dbg: 4072s try: 4072s dbg_pkg = f"{pkg}-dbg" 4072s dbg = apt_cache[dbg_pkg] 4072s pkg_found = False 4072s # try to get the same version as pkg 4072s if ver: 4072s try: 4072s dbg.candidate = dbg.versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbg_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbg_pkg] = ver 4072s pkg_found = True 4072s # if it can't be found in Launchpad failover to a 4072s # code path that'll use -dbgsym packages 4072s else: 4072s raise 4072s if not pkg_found: 4072s try: 4072s dbg.candidate = dbg.versions[candidate.version] 4072s except KeyError: 4072s obsolete += ( 4072s f"outdated -dbg package for {pkg}:" 4072s f" package version {ver}" 4072s f" -dbg version {dbg.candidate.version}\n" 4072s ) 4072s real_pkgs.add(dbg_pkg) 4072s except KeyError: 4072s # install all -dbg from the source package; lookup() just 4072s # works from the current list pointer, we always need to 4072s # start from the beginning 4072s src_records.restart() 4072s if src_records.lookup(candidate.source_name): 4072s # ignore transitional packages 4072s # False positive, see 4072s # https://github.com/PyCQA/pylint/issues/7122 4072s # pylint: disable=not-an-iterable 4072s dbgs = [ 4072s p 4072s for p in src_records.binaries 4072s if p.endswith("-dbg") 4072s and p in apt_cache 4072s and "transitional" not in apt_cache[p].candidate.description 4072s ] 4072s # if a specific version of a package was requested 4072s # only install dbg pkgs whose version matches 4072s if ver: 4072s for dbg in dbgs: 4072s if apt_cache[dbg].candidate.version != ver: 4072s dbgs.remove(dbg) 4072s else: 4072s dbgs = [] 4072s if dbgs: 4072s for p in dbgs: 4072s # if the package has already been added to 4072s # real_pkgs don't search for it again 4072s if p in real_pkgs: 4072s continue 4072s pkg_found = False 4072s # prefer the version requested 4072s if ver: 4072s try: 4072s apt_cache[p].candidate = apt_cache[p].versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, p, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[p] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s try: 4072s apt_cache[p].candidate = apt_cache[p].versions[ 4072s candidate.version 4072s ] 4072s except KeyError: 4072s # we don't really expect that, but it's 4072s # possible that other binaries have a 4072s # different version 4072s pass 4072s real_pkgs.add(p) 4072s else: 4072s pkg_found = False 4072s dbgsym_pkg = f"{pkg}-dbgsym" 4072s try: 4072s dbgsym = apt_cache[dbgsym_pkg] 4072s real_pkgs.add(dbgsym_pkg) 4072s # prefer the version requested 4072s if ver: 4072s try: 4072s dbgsym.candidate = dbgsym.versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbgsym_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbgsym_pkg] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s try: 4072s dbgsym.candidate = dbgsym.versions[ 4072s candidate.version 4072s ] 4072s except KeyError: 4072s obsolete += ( 4072s f"outdated debug symbol package" 4072s f" for {pkg}: package version" 4072s f" {candidate.version}" 4072s f" dbgsym version" 4072s f" {dbgsym.candidate.version}\n" 4072s ) 4072s 4072s except KeyError: 4072s if ver: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbgsym_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbgsym_pkg] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s obsolete += f"no debug symbol package found for {pkg}\n" 4072s 4072s # unpack packages, weed out the ones that are already installed (for 4072s # permanent sandboxes) 4072s logger = logging.getLogger(__name__) 4072s requested_pkgs = dict(packages) 4072s for p in real_pkgs.copy(): 4072s if p in requested_pkgs: 4072s if requested_pkgs[p] is None: 4072s # We already have the latest version of this package 4072s if pkg_versions.get(p) == apt_cache[p].candidate.version: 4072s logger.debug( 4072s "Removing %s which is already the right version", p 4072s ) 4072s real_pkgs.remove(p) 4072s else: 4072s logger.debug( 4072s "Installing %s version %s", 4072s p, 4072s apt_cache[p].candidate.version, 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s elif pkg_versions.get(p) != requested_pkgs[p]: 4072s logger.debug( 4072s "Installing %s version %s", p, apt_cache[p].candidate.version 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s elif pkg_versions.get(p) != apt_cache[p].candidate.version: 4072s logger.debug( 4072s "Installing %s version %s", p, apt_cache[p].candidate.version 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s else: 4072s logger.debug("Removing %s which is already the right version", p) 4072s real_pkgs.remove(p) 4072s elif pkg_versions.get(p) != apt_cache[p].candidate.version: 4072s logger.debug("Installing %s", p) 4072s apt_cache[p].mark_install(False, False) 4072s else: 4072s logger.debug("Removing %s which is already the right version", p) 4072s real_pkgs.remove(p) 4072s 4072s last_written = time.time() 4072s # fetch packages 4072s try: 4072s apt_cache.fetch_archives(fetcher=fetcher) 4072s except apt.cache.FetchFailedException as error: 4072s apport.logging.error( 4072s "Package download error, try again later: %s", str(error) 4072s ) 4072s > sys.exit(1) # transient error 4072s E SystemExit: 1 4072s 4072s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1326: SystemExit 4072s ----------------------------- Captured stderr call ----------------------------- 4072s ERROR: Package download error, try again later: Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/distro-info-data_0.43ubuntu1.9_all.deb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) Could not connect to launchpad.net:443 (185.125.189.222), connection timed out Could not connect to launchpad.net:443 (185.125.189.223), connection timed out 4072s Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libc6_2.31-0ubuntu9.4_amd64.deb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4072s Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libc6-dbg_2.31-0ubuntu9.4_amd64.deb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4072s Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/qemu-utils_4.2-3ubuntu6.1_amd64.deb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4072s Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/qemu-utils-dbgsym_4.2-3ubuntu6.1_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) 4072s 4072s _____________________ test_install_old_packages[one-line] ______________________ 4072s 4072s self = 4072s rootdir = '/tmp/tmpcrw6zpcd/root', configdir = '/tmp/tmpcrw6zpcd/config' 4072s release = 'Foonux 22.04', packages = [('libcurl4', '7.74.0-1.3ubuntu3')] 4072s verbose = False, cache_dir = '/tmp/tmpcrw6zpcd/cache', permanent_rootdir = False 4072s architecture = 'amd64', origins = None, install_dbg = True, install_deps = False 4072s 4072s def install_packages( 4072s self, 4072s rootdir, 4072s configdir, 4072s release, 4072s packages, 4072s verbose=False, 4072s cache_dir=None, 4072s permanent_rootdir=False, 4072s architecture=None, 4072s origins=None, 4072s install_dbg=True, 4072s install_deps=False, 4072s ): # pylint: disable=too-many-arguments 4072s # TODO: Split into smaller functions/methods 4072s # pylint: disable=too-many-branches,too-many-locals 4072s # pylint: disable=too-many-nested-blocks,too-many-statements 4072s """Install packages into a sandbox (for apport-retrace). 4072s 4072s In order to work without any special permissions and without touching 4072s the running system, this should only download and unpack packages into 4072s the given root directory, not install them into the system. 4072s 4072s configdir points to a directory with by-release configuration files for 4072s the packaging system; this is completely dependent on the backend 4072s implementation, the only assumption is that this looks into 4072s configdir/release/, so that you can use retracing for multiple 4072s DistroReleases. As a special case, if configdir is None, it uses the 4072s current system configuration, and "release" is ignored. 4072s 4072s release is the value of the report's 'DistroRelease' field. 4072s 4072s packages is a list of ('packagename', 'version') tuples. If the version 4072s is None, it should install the most current available version. 4072s 4072s If cache_dir is given, then the downloaded packages will be stored 4072s there, to speed up subsequent retraces. 4072s 4072s If permanent_rootdir is True, then the sandbox created from the 4072s downloaded packages will be reused, to speed up subsequent retraces. 4072s 4072s If architecture is given, the sandbox will be created with packages of 4072s the given architecture (as specified in a report's "Architecture" 4072s field). If not given it defaults to the host system's architecture. 4072s 4072s If origins is given, the sandbox will be created with apt data sources 4072s for foreign origins. 4072s 4072s If install_deps is True, then the dependencies of packages will also 4072s be installed. 4072s 4072s Return a string with outdated packages, or an empty string if all 4072s packages were installed. 4072s 4072s If something is wrong with the environment (invalid configuration, 4072s package servers down, etc.), this should raise a SystemError with a 4072s meaningful error message. 4072s """ 4072s if not architecture: 4072s architecture = self.get_system_architecture() 4072s if not configdir: 4072s apt_dir = "/etc/apt" 4072s self._current_release_codename = self.get_distro_codename() 4072s else: 4072s # support architecture specific config, fall back to global config 4072s apt_dir = os.path.join(configdir, release) 4072s if architecture != self.get_system_architecture(): 4072s arch_apt_dir = os.path.join(configdir, release, architecture) 4072s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 4072s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 4072s if os.path.exists(arch_old_sources) or ( 4072s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 4072s ): 4072s apt_dir = arch_apt_dir 4072s 4072s # set mirror for get_file_package() 4072s try: 4072s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 4072s except SystemError as error: 4072s apport.logging.warning("cannot determine mirror: %s", str(error)) 4072s 4072s # set current release code name for _distro_release_to_codename 4072s with open( 4072s os.path.join(configdir, release, "codename"), encoding="utf-8" 4072s ) as f: 4072s self._current_release_codename = f.read().strip() 4072s 4072s # create apt sandbox 4072s if cache_dir: 4072s tmp_aptroot = False 4072s if architecture != self.get_system_architecture(): 4072s aptroot_arch = architecture 4072s else: 4072s aptroot_arch = "" 4072s if configdir: 4072s aptroot = os.path.join(cache_dir, release, aptroot_arch, "apt") 4072s else: 4072s aptroot = os.path.join(cache_dir, "system", aptroot_arch, "apt") 4072s if not os.path.isdir(aptroot): 4072s os.makedirs(aptroot) 4072s else: 4072s tmp_aptroot = True 4072s aptroot = tempfile.mkdtemp() 4072s 4072s apt.apt_pkg.config.set("APT::Architecture", architecture) 4072s apt.apt_pkg.config.set("Acquire::Languages", "none") 4072s # directly connect to Launchpad when downloading deb files 4072s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 4072s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 4072s 4072s if verbose: 4072s fetchProgress = apt.progress.text.AcquireProgress() 4072s else: 4072s fetchProgress = apt.progress.base.AcquireProgress() 4072s if not tmp_aptroot: 4072s apt_cache = self._sandbox_cache( 4072s aptroot, 4072s apt_dir, 4072s fetchProgress, 4072s self.get_distro_name(), 4072s self._current_release_codename, 4072s origins, 4072s architecture, 4072s ) 4072s else: 4072s self._build_apt_sandbox( 4072s aptroot, 4072s apt_dir, 4072s self.get_distro_name(), 4072s self._current_release_codename, 4072s origins, 4072s ) 4072s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 4072s try: 4072s apt_cache.update(fetchProgress) 4072s except apt.cache.FetchFailedException as error: 4072s raise SystemError(str(error)) from error 4072s apt_cache.open() 4072s 4072s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 4072s 4072s obsolete = "" 4072s 4072s src_records = apt.apt_pkg.SourceRecords() 4072s 4072s # read original package list 4072s pkg_list = os.path.join(rootdir, "packages.txt") 4072s pkg_versions = {} 4072s if os.path.exists(pkg_list): 4072s with open(pkg_list, encoding="utf-8") as f: 4072s for line in f: 4072s line = line.strip() 4072s if not line: 4072s continue 4072s (p, v) = line.split() 4072s pkg_versions[p] = v 4072s 4072s # mark packages for installation 4072s real_pkgs = set() 4072s lp_cache = {} 4072s fetcher = apt.apt_pkg.Acquire(fetchProgress) 4072s # need to keep AcquireFile references 4072s acquire_queue = [] 4072s # add any dependencies to the packages list 4072s if install_deps: 4072s deps = [] 4072s for pkg, ver in packages: 4072s try: 4072s cache_pkg = apt_cache[pkg] 4072s except KeyError: 4072s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 4072s obsolete += f"{m}\n" 4072s apport.logging.warning("%s", m) 4072s continue 4072s for dep in cache_pkg.candidate.dependencies: 4072s # the dependency may be satisfied by a different package 4072s if dep[0].name not in apt_cache: 4072s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 4072s # the version in dep is the one from pkg's dependencies, 4072s # so use the version from the cache 4072s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 4072s # if the dependency is in the list of packages we don't 4072s # need to look up its dependencies again 4072s if dep[0].name in [pkg[0] for pkg in packages]: 4072s continue 4072s # if the package is already extracted in the sandbox 4072s # because the report needs that package we don't want to 4072s # install a newer version which may cause a CRC mismatch 4072s # with the installed dbg symbols 4072s if dep[0].name in pkg_versions: 4072s inst_version = pkg_versions[dep[0].name] 4072s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 4072s deps.append((dep[0].name, inst_version)) 4072s else: 4072s deps.append((dep[0].name, dep_pkg_vers)) 4072s else: 4072s deps.append((dep[0].name, dep_pkg_vers)) 4072s if dep[0].name not in [pkg[0] for pkg in packages]: 4072s packages.append((dep[0].name, None)) 4072s packages.extend(deps) 4072s 4072s for pkg, ver in packages: 4072s try: 4072s cache_pkg = apt_cache[pkg] 4072s except KeyError: 4072s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 4072s obsolete += f"{m}\n" 4072s apport.logging.warning("%s", m) 4072s continue 4072s 4072s # try to select matching version 4072s try: 4072s if ver: 4072s cache_pkg.candidate = cache_pkg.versions[ver] 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, lp_url, hash=f"sha1:{sha1sum}", destdir=archivedir 4072s ) 4072s ) 4072s lp_cache[pkg] = ver 4072s else: 4072s obsolete += ( 4072s f"{pkg} version {ver} required," 4072s f" but {cache_pkg.candidate.version} is available\n" 4072s ) 4072s ver = cache_pkg.candidate.version 4072s 4072s candidate = cache_pkg.candidate 4072s real_pkgs.add(pkg) 4072s 4072s if permanent_rootdir: 4072s virtual_mapping = self._virtual_mapping(aptroot) 4072s # Remember all the virtual packages that this package provides, 4072s # so that if we encounter that virtual package as a 4072s # Conflicts/Replaces later, we know to remove this package from 4072s # the cache. 4072s for p in candidate.provides: 4072s virtual_mapping.setdefault(p, set()).add(pkg) 4072s conflicts = [] 4072s if "Conflicts" in candidate.record: 4072s conflicts += apt.apt_pkg.parse_depends( 4072s candidate.record["Conflicts"] 4072s ) 4072s if "Replaces" in candidate.record: 4072s conflicts += apt.apt_pkg.parse_depends(candidate.record["Replaces"]) 4072s for conflict in conflicts: 4072s # if the package conflicts with itself its wonky e.g. 4072s # gdb in artful 4072s if conflict[0][0] == candidate.package.name: 4072s continue 4072s # apt_pkg.parse_depends needs to handle the or operator, 4072s # but as policy states it is invalid to use that in 4072s # Replaces/Depends, we can safely choose the first value 4072s # here. 4072s conflict = conflict[0] 4072s if apt_cache.is_virtual_package(conflict[0]): 4072s try: 4072s providers = virtual_mapping[conflict[0]] 4072s except KeyError: 4072s # We may not have seen the virtual package that 4072s # this conflicts with, so we can assume it's not 4072s # unpacked into the sandbox. 4072s continue 4072s for p in providers: 4072s # if the candidate package being installed 4072s # conflicts with but also provides a virtual 4072s # package don't act on the candidate e.g. 4072s # libpam-modules and libpam-mkhomedir in artful 4072s if p == candidate.package.name: 4072s continue 4072s debs = os.path.join(archivedir, f"{p}_*.deb") 4072s for path in glob.glob(debs): 4072s ver = self._deb_version(path) 4072s if apt.apt_pkg.check_dep(ver, conflict[2], conflict[1]): 4072s os.unlink(path) 4072s try: 4072s del pkg_versions[p] 4072s except KeyError: 4072s pass 4072s del providers 4072s else: 4072s debs = os.path.join(archivedir, f"{conflict[0]}_*.deb") 4072s for path in glob.glob(debs): 4072s ver = self._deb_version(path) 4072s if apt.apt_pkg.check_dep(ver, conflict[2], conflict[1]): 4072s os.unlink(path) 4072s try: 4072s del pkg_versions[conflict[0]] 4072s except KeyError: 4072s pass 4072s 4072s if candidate.architecture != "all" and install_dbg: 4072s try: 4072s dbg_pkg = f"{pkg}-dbg" 4072s dbg = apt_cache[dbg_pkg] 4072s pkg_found = False 4072s # try to get the same version as pkg 4072s if ver: 4072s try: 4072s dbg.candidate = dbg.versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbg_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbg_pkg] = ver 4072s pkg_found = True 4072s # if it can't be found in Launchpad failover to a 4072s # code path that'll use -dbgsym packages 4072s else: 4072s raise 4072s if not pkg_found: 4072s try: 4072s dbg.candidate = dbg.versions[candidate.version] 4072s except KeyError: 4072s obsolete += ( 4072s f"outdated -dbg package for {pkg}:" 4072s f" package version {ver}" 4072s f" -dbg version {dbg.candidate.version}\n" 4072s ) 4072s real_pkgs.add(dbg_pkg) 4072s except KeyError: 4072s # install all -dbg from the source package; lookup() just 4072s # works from the current list pointer, we always need to 4072s # start from the beginning 4072s src_records.restart() 4072s if src_records.lookup(candidate.source_name): 4072s # ignore transitional packages 4072s # False positive, see 4072s # https://github.com/PyCQA/pylint/issues/7122 4072s # pylint: disable=not-an-iterable 4072s dbgs = [ 4072s p 4072s for p in src_records.binaries 4072s if p.endswith("-dbg") 4072s and p in apt_cache 4072s and "transitional" not in apt_cache[p].candidate.description 4072s ] 4072s # if a specific version of a package was requested 4072s # only install dbg pkgs whose version matches 4072s if ver: 4072s for dbg in dbgs: 4072s if apt_cache[dbg].candidate.version != ver: 4072s dbgs.remove(dbg) 4072s else: 4072s dbgs = [] 4072s if dbgs: 4072s for p in dbgs: 4072s # if the package has already been added to 4072s # real_pkgs don't search for it again 4072s if p in real_pkgs: 4072s continue 4072s pkg_found = False 4072s # prefer the version requested 4072s if ver: 4072s try: 4072s apt_cache[p].candidate = apt_cache[p].versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, p, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[p] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s try: 4072s apt_cache[p].candidate = apt_cache[p].versions[ 4072s candidate.version 4072s ] 4072s except KeyError: 4072s # we don't really expect that, but it's 4072s # possible that other binaries have a 4072s # different version 4072s pass 4072s real_pkgs.add(p) 4072s else: 4072s pkg_found = False 4072s dbgsym_pkg = f"{pkg}-dbgsym" 4072s try: 4072s dbgsym = apt_cache[dbgsym_pkg] 4072s real_pkgs.add(dbgsym_pkg) 4072s # prefer the version requested 4072s if ver: 4072s try: 4072s dbgsym.candidate = dbgsym.versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbgsym_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbgsym_pkg] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s try: 4072s dbgsym.candidate = dbgsym.versions[ 4072s candidate.version 4072s ] 4072s except KeyError: 4072s obsolete += ( 4072s f"outdated debug symbol package" 4072s f" for {pkg}: package version" 4072s f" {candidate.version}" 4072s f" dbgsym version" 4072s f" {dbgsym.candidate.version}\n" 4072s ) 4072s 4072s except KeyError: 4072s if ver: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbgsym_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbgsym_pkg] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s obsolete += f"no debug symbol package found for {pkg}\n" 4072s 4072s # unpack packages, weed out the ones that are already installed (for 4072s # permanent sandboxes) 4072s logger = logging.getLogger(__name__) 4072s requested_pkgs = dict(packages) 4072s for p in real_pkgs.copy(): 4072s if p in requested_pkgs: 4072s if requested_pkgs[p] is None: 4072s # We already have the latest version of this package 4072s if pkg_versions.get(p) == apt_cache[p].candidate.version: 4072s logger.debug( 4072s "Removing %s which is already the right version", p 4072s ) 4072s real_pkgs.remove(p) 4072s else: 4072s logger.debug( 4072s "Installing %s version %s", 4072s p, 4072s apt_cache[p].candidate.version, 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s elif pkg_versions.get(p) != requested_pkgs[p]: 4072s logger.debug( 4072s "Installing %s version %s", p, apt_cache[p].candidate.version 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s elif pkg_versions.get(p) != apt_cache[p].candidate.version: 4072s logger.debug( 4072s "Installing %s version %s", p, apt_cache[p].candidate.version 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s else: 4072s logger.debug("Removing %s which is already the right version", p) 4072s real_pkgs.remove(p) 4072s elif pkg_versions.get(p) != apt_cache[p].candidate.version: 4072s logger.debug("Installing %s", p) 4072s apt_cache[p].mark_install(False, False) 4072s else: 4072s logger.debug("Removing %s which is already the right version", p) 4072s real_pkgs.remove(p) 4072s 4072s last_written = time.time() 4072s # fetch packages 4072s try: 4072s > apt_cache.fetch_archives(fetcher=fetcher) 4072s 4072s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1321: 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s /usr/lib/python3/dist-packages/apt/cache.py:475: in fetch_archives 4072s return self._fetch_archives( 4072s /usr/lib/python3/dist-packages/apt/cache.py:443: in _fetch_archives 4072s return self._run_fetcher(fetcher, allow_unauthenticated) 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s 4072s self = 4072s fetcher = 4072s allow_unauthenticated = True 4072s 4072s def _run_fetcher( 4072s self, fetcher: apt_pkg.Acquire, allow_unauthenticated: bool | None 4072s ) -> int: 4072s if allow_unauthenticated is None: 4072s allow_unauthenticated = apt_pkg.config.find_b( 4072s "APT::Get::" "AllowUnauthenticated", False 4072s ) 4072s 4072s untrusted = [item for item in fetcher.items if not item.is_trusted] 4072s if untrusted and not allow_unauthenticated: 4072s raise UntrustedException( 4072s "Untrusted packages:\n%s" % "\n".join(i.desc_uri for i in untrusted) 4072s ) 4072s 4072s # do the actual fetching 4072s res = fetcher.run() 4072s 4072s # now check the result (this is the code from apt-get.cc) 4072s failed = False 4072s err_msg = "" 4072s for item in fetcher.items: 4072s if item.status == item.STAT_DONE: 4072s continue 4072s if item.STAT_IDLE: 4072s continue 4072s err_msg += f"Failed to fetch {item.desc_uri} {item.error_text}\n" 4072s failed = True 4072s 4072s # we raise a exception if the download failed or it was cancelt 4072s if res == fetcher.RESULT_CANCELLED: 4072s raise FetchCancelledException(err_msg) 4072s elif failed: 4072s > raise FetchFailedException(err_msg) 4072s E apt.cache.FetchFailedException: Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libcurl4_7.74.0-1.3ubuntu3_amd64.deb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Could not connect to launchpad.net:443 (185.125.189.223), connection timed out Could not connect to launchpad.net:443 (185.125.189.222), connection timed out 4072s E Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libcurl4-dbgsym_7.74.0-1.3ubuntu3_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) 4072s 4072s /usr/lib/python3/dist-packages/apt/cache.py:424: FetchFailedException 4072s 4072s During handling of the above exception, another exception occurred: 4072s 4072s configdir = '/tmp/tmpcrw6zpcd/config', cachedir = '/tmp/tmpcrw6zpcd/cache' 4072s rootdir = '/tmp/tmpcrw6zpcd/root', apt_style = 'one-line' 4072s 4072s @pytest.mark.skipif(not has_internet(), reason="online test") 4072s def test_install_old_packages(configdir, cachedir, rootdir, apt_style): 4072s """Sandbox will install older package versions from launchpad.""" 4072s release = _setup_foonux_config(configdir, apt_style) 4072s wanted_package = "libcurl4" 4072s wanted_version = "7.81.0-1" # pre-release version 4072s obsolete = impl.install_packages( 4072s rootdir, configdir, release, [(wanted_package, wanted_version)], False, cachedir 4072s ) 4072s 4072s assert obsolete == "" 4072s 4072s def sandbox_ver(pkg): 4072s with gzip.open( 4072s os.path.join(rootdir, "usr/share/doc", pkg, "changelog.Debian.gz") 4072s ) as f: 4072s return f.readline().decode().split()[1][1:-1] 4072s 4072s # the version is as expected 4072s assert sandbox_ver(wanted_package) == wanted_version 4072s 4072s # keeps track of package version 4072s with open(os.path.join(rootdir, "packages.txt"), encoding="utf-8") as f: 4072s pkglist = f.read().splitlines() 4072s assert f"{wanted_package} {wanted_version}" in pkglist 4072s 4072s wanted_version = "7.74.0-1.3ubuntu3" 4072s > obsolete = impl.install_packages( 4072s rootdir, configdir, release, [(wanted_package, wanted_version)], False, cachedir 4072s ) 4072s 4072s tests/system/test_packaging_apt_dpkg.py:660: 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s 4072s self = 4072s rootdir = '/tmp/tmpcrw6zpcd/root', configdir = '/tmp/tmpcrw6zpcd/config' 4072s release = 'Foonux 22.04', packages = [('libcurl4', '7.74.0-1.3ubuntu3')] 4072s verbose = False, cache_dir = '/tmp/tmpcrw6zpcd/cache', permanent_rootdir = False 4072s architecture = 'amd64', origins = None, install_dbg = True, install_deps = False 4072s 4072s def install_packages( 4072s self, 4072s rootdir, 4072s configdir, 4072s release, 4072s packages, 4072s verbose=False, 4072s cache_dir=None, 4072s permanent_rootdir=False, 4072s architecture=None, 4072s origins=None, 4072s install_dbg=True, 4072s install_deps=False, 4072s ): # pylint: disable=too-many-arguments 4072s # TODO: Split into smaller functions/methods 4072s # pylint: disable=too-many-branches,too-many-locals 4072s # pylint: disable=too-many-nested-blocks,too-many-statements 4072s """Install packages into a sandbox (for apport-retrace). 4072s 4072s In order to work without any special permissions and without touching 4072s the running system, this should only download and unpack packages into 4072s the given root directory, not install them into the system. 4072s 4072s configdir points to a directory with by-release configuration files for 4072s the packaging system; this is completely dependent on the backend 4072s implementation, the only assumption is that this looks into 4072s configdir/release/, so that you can use retracing for multiple 4072s DistroReleases. As a special case, if configdir is None, it uses the 4072s current system configuration, and "release" is ignored. 4072s 4072s release is the value of the report's 'DistroRelease' field. 4072s 4072s packages is a list of ('packagename', 'version') tuples. If the version 4072s is None, it should install the most current available version. 4072s 4072s If cache_dir is given, then the downloaded packages will be stored 4072s there, to speed up subsequent retraces. 4072s 4072s If permanent_rootdir is True, then the sandbox created from the 4072s downloaded packages will be reused, to speed up subsequent retraces. 4072s 4072s If architecture is given, the sandbox will be created with packages of 4072s the given architecture (as specified in a report's "Architecture" 4072s field). If not given it defaults to the host system's architecture. 4072s 4072s If origins is given, the sandbox will be created with apt data sources 4072s for foreign origins. 4072s 4072s If install_deps is True, then the dependencies of packages will also 4072s be installed. 4072s 4072s Return a string with outdated packages, or an empty string if all 4072s packages were installed. 4072s 4072s If something is wrong with the environment (invalid configuration, 4072s package servers down, etc.), this should raise a SystemError with a 4072s meaningful error message. 4072s """ 4072s if not architecture: 4072s architecture = self.get_system_architecture() 4072s if not configdir: 4072s apt_dir = "/etc/apt" 4072s self._current_release_codename = self.get_distro_codename() 4072s else: 4072s # support architecture specific config, fall back to global config 4072s apt_dir = os.path.join(configdir, release) 4072s if architecture != self.get_system_architecture(): 4072s arch_apt_dir = os.path.join(configdir, release, architecture) 4072s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 4072s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 4072s if os.path.exists(arch_old_sources) or ( 4072s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 4072s ): 4072s apt_dir = arch_apt_dir 4072s 4072s # set mirror for get_file_package() 4072s try: 4072s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 4072s except SystemError as error: 4072s apport.logging.warning("cannot determine mirror: %s", str(error)) 4072s 4072s # set current release code name for _distro_release_to_codename 4072s with open( 4072s os.path.join(configdir, release, "codename"), encoding="utf-8" 4072s ) as f: 4072s self._current_release_codename = f.read().strip() 4072s 4072s # create apt sandbox 4072s if cache_dir: 4072s tmp_aptroot = False 4072s if architecture != self.get_system_architecture(): 4072s aptroot_arch = architecture 4072s else: 4072s aptroot_arch = "" 4072s if configdir: 4072s aptroot = os.path.join(cache_dir, release, aptroot_arch, "apt") 4072s else: 4072s aptroot = os.path.join(cache_dir, "system", aptroot_arch, "apt") 4072s if not os.path.isdir(aptroot): 4072s os.makedirs(aptroot) 4072s else: 4072s tmp_aptroot = True 4072s aptroot = tempfile.mkdtemp() 4072s 4072s apt.apt_pkg.config.set("APT::Architecture", architecture) 4072s apt.apt_pkg.config.set("Acquire::Languages", "none") 4072s # directly connect to Launchpad when downloading deb files 4072s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 4072s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 4072s 4072s if verbose: 4072s fetchProgress = apt.progress.text.AcquireProgress() 4072s else: 4072s fetchProgress = apt.progress.base.AcquireProgress() 4072s if not tmp_aptroot: 4072s apt_cache = self._sandbox_cache( 4072s aptroot, 4072s apt_dir, 4072s fetchProgress, 4072s self.get_distro_name(), 4072s self._current_release_codename, 4072s origins, 4072s architecture, 4072s ) 4072s else: 4072s self._build_apt_sandbox( 4072s aptroot, 4072s apt_dir, 4072s self.get_distro_name(), 4072s self._current_release_codename, 4072s origins, 4072s ) 4072s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 4072s try: 4072s apt_cache.update(fetchProgress) 4072s except apt.cache.FetchFailedException as error: 4072s raise SystemError(str(error)) from error 4072s apt_cache.open() 4072s 4072s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 4072s 4072s obsolete = "" 4072s 4072s src_records = apt.apt_pkg.SourceRecords() 4072s 4072s # read original package list 4072s pkg_list = os.path.join(rootdir, "packages.txt") 4072s pkg_versions = {} 4072s if os.path.exists(pkg_list): 4072s with open(pkg_list, encoding="utf-8") as f: 4072s for line in f: 4072s line = line.strip() 4072s if not line: 4072s continue 4072s (p, v) = line.split() 4072s pkg_versions[p] = v 4072s 4072s # mark packages for installation 4072s real_pkgs = set() 4072s lp_cache = {} 4072s fetcher = apt.apt_pkg.Acquire(fetchProgress) 4072s # need to keep AcquireFile references 4072s acquire_queue = [] 4072s # add any dependencies to the packages list 4072s if install_deps: 4072s deps = [] 4072s for pkg, ver in packages: 4072s try: 4072s cache_pkg = apt_cache[pkg] 4072s except KeyError: 4072s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 4072s obsolete += f"{m}\n" 4072s apport.logging.warning("%s", m) 4072s continue 4072s for dep in cache_pkg.candidate.dependencies: 4072s # the dependency may be satisfied by a different package 4072s if dep[0].name not in apt_cache: 4072s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 4072s # the version in dep is the one from pkg's dependencies, 4072s # so use the version from the cache 4072s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 4072s # if the dependency is in the list of packages we don't 4072s # need to look up its dependencies again 4072s if dep[0].name in [pkg[0] for pkg in packages]: 4072s continue 4072s # if the package is already extracted in the sandbox 4072s # because the report needs that package we don't want to 4072s # install a newer version which may cause a CRC mismatch 4072s # with the installed dbg symbols 4072s if dep[0].name in pkg_versions: 4072s inst_version = pkg_versions[dep[0].name] 4072s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 4072s deps.append((dep[0].name, inst_version)) 4072s else: 4072s deps.append((dep[0].name, dep_pkg_vers)) 4072s else: 4072s deps.append((dep[0].name, dep_pkg_vers)) 4072s if dep[0].name not in [pkg[0] for pkg in packages]: 4072s packages.append((dep[0].name, None)) 4072s packages.extend(deps) 4072s 4072s for pkg, ver in packages: 4072s try: 4072s cache_pkg = apt_cache[pkg] 4072s except KeyError: 4072s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 4072s obsolete += f"{m}\n" 4072s apport.logging.warning("%s", m) 4072s continue 4072s 4072s # try to select matching version 4072s try: 4072s if ver: 4072s cache_pkg.candidate = cache_pkg.versions[ver] 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, lp_url, hash=f"sha1:{sha1sum}", destdir=archivedir 4072s ) 4072s ) 4072s lp_cache[pkg] = ver 4072s else: 4072s obsolete += ( 4072s f"{pkg} version {ver} required," 4072s f" but {cache_pkg.candidate.version} is available\n" 4072s ) 4072s ver = cache_pkg.candidate.version 4072s 4072s candidate = cache_pkg.candidate 4072s real_pkgs.add(pkg) 4072s 4072s if permanent_rootdir: 4072s virtual_mapping = self._virtual_mapping(aptroot) 4072s # Remember all the virtual packages that this package provides, 4072s # so that if we encounter that virtual package as a 4072s # Conflicts/Replaces later, we know to remove this package from 4072s # the cache. 4072s for p in candidate.provides: 4072s virtual_mapping.setdefault(p, set()).add(pkg) 4072s conflicts = [] 4072s if "Conflicts" in candidate.record: 4072s conflicts += apt.apt_pkg.parse_depends( 4072s candidate.record["Conflicts"] 4072s ) 4072s if "Replaces" in candidate.record: 4072s conflicts += apt.apt_pkg.parse_depends(candidate.record["Replaces"]) 4072s for conflict in conflicts: 4072s # if the package conflicts with itself its wonky e.g. 4072s # gdb in artful 4072s if conflict[0][0] == candidate.package.name: 4072s continue 4072s # apt_pkg.parse_depends needs to handle the or operator, 4072s # but as policy states it is invalid to use that in 4072s # Replaces/Depends, we can safely choose the first value 4072s # here. 4072s conflict = conflict[0] 4072s if apt_cache.is_virtual_package(conflict[0]): 4072s try: 4072s providers = virtual_mapping[conflict[0]] 4072s except KeyError: 4072s # We may not have seen the virtual package that 4072s # this conflicts with, so we can assume it's not 4072s # unpacked into the sandbox. 4072s continue 4072s for p in providers: 4072s # if the candidate package being installed 4072s # conflicts with but also provides a virtual 4072s # package don't act on the candidate e.g. 4072s # libpam-modules and libpam-mkhomedir in artful 4072s if p == candidate.package.name: 4072s continue 4072s debs = os.path.join(archivedir, f"{p}_*.deb") 4072s for path in glob.glob(debs): 4072s ver = self._deb_version(path) 4072s if apt.apt_pkg.check_dep(ver, conflict[2], conflict[1]): 4072s os.unlink(path) 4072s try: 4072s del pkg_versions[p] 4072s except KeyError: 4072s pass 4072s del providers 4072s else: 4072s debs = os.path.join(archivedir, f"{conflict[0]}_*.deb") 4072s for path in glob.glob(debs): 4072s ver = self._deb_version(path) 4072s if apt.apt_pkg.check_dep(ver, conflict[2], conflict[1]): 4072s os.unlink(path) 4072s try: 4072s del pkg_versions[conflict[0]] 4072s except KeyError: 4072s pass 4072s 4072s if candidate.architecture != "all" and install_dbg: 4072s try: 4072s dbg_pkg = f"{pkg}-dbg" 4072s dbg = apt_cache[dbg_pkg] 4072s pkg_found = False 4072s # try to get the same version as pkg 4072s if ver: 4072s try: 4072s dbg.candidate = dbg.versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbg_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbg_pkg] = ver 4072s pkg_found = True 4072s # if it can't be found in Launchpad failover to a 4072s # code path that'll use -dbgsym packages 4072s else: 4072s raise 4072s if not pkg_found: 4072s try: 4072s dbg.candidate = dbg.versions[candidate.version] 4072s except KeyError: 4072s obsolete += ( 4072s f"outdated -dbg package for {pkg}:" 4072s f" package version {ver}" 4072s f" -dbg version {dbg.candidate.version}\n" 4072s ) 4072s real_pkgs.add(dbg_pkg) 4072s except KeyError: 4072s # install all -dbg from the source package; lookup() just 4072s # works from the current list pointer, we always need to 4072s # start from the beginning 4072s src_records.restart() 4072s if src_records.lookup(candidate.source_name): 4072s # ignore transitional packages 4072s # False positive, see 4072s # https://github.com/PyCQA/pylint/issues/7122 4072s # pylint: disable=not-an-iterable 4072s dbgs = [ 4072s p 4072s for p in src_records.binaries 4072s if p.endswith("-dbg") 4072s and p in apt_cache 4072s and "transitional" not in apt_cache[p].candidate.description 4072s ] 4072s # if a specific version of a package was requested 4072s # only install dbg pkgs whose version matches 4072s if ver: 4072s for dbg in dbgs: 4072s if apt_cache[dbg].candidate.version != ver: 4072s dbgs.remove(dbg) 4072s else: 4072s dbgs = [] 4072s if dbgs: 4072s for p in dbgs: 4072s # if the package has already been added to 4072s # real_pkgs don't search for it again 4072s if p in real_pkgs: 4072s continue 4072s pkg_found = False 4072s # prefer the version requested 4072s if ver: 4072s try: 4072s apt_cache[p].candidate = apt_cache[p].versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, p, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[p] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s try: 4072s apt_cache[p].candidate = apt_cache[p].versions[ 4072s candidate.version 4072s ] 4072s except KeyError: 4072s # we don't really expect that, but it's 4072s # possible that other binaries have a 4072s # different version 4072s pass 4072s real_pkgs.add(p) 4072s else: 4072s pkg_found = False 4072s dbgsym_pkg = f"{pkg}-dbgsym" 4072s try: 4072s dbgsym = apt_cache[dbgsym_pkg] 4072s real_pkgs.add(dbgsym_pkg) 4072s # prefer the version requested 4072s if ver: 4072s try: 4072s dbgsym.candidate = dbgsym.versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbgsym_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbgsym_pkg] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s try: 4072s dbgsym.candidate = dbgsym.versions[ 4072s candidate.version 4072s ] 4072s except KeyError: 4072s obsolete += ( 4072s f"outdated debug symbol package" 4072s f" for {pkg}: package version" 4072s f" {candidate.version}" 4072s f" dbgsym version" 4072s f" {dbgsym.candidate.version}\n" 4072s ) 4072s 4072s except KeyError: 4072s if ver: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbgsym_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbgsym_pkg] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s obsolete += f"no debug symbol package found for {pkg}\n" 4072s 4072s # unpack packages, weed out the ones that are already installed (for 4072s # permanent sandboxes) 4072s logger = logging.getLogger(__name__) 4072s requested_pkgs = dict(packages) 4072s for p in real_pkgs.copy(): 4072s if p in requested_pkgs: 4072s if requested_pkgs[p] is None: 4072s # We already have the latest version of this package 4072s if pkg_versions.get(p) == apt_cache[p].candidate.version: 4072s logger.debug( 4072s "Removing %s which is already the right version", p 4072s ) 4072s real_pkgs.remove(p) 4072s else: 4072s logger.debug( 4072s "Installing %s version %s", 4072s p, 4072s apt_cache[p].candidate.version, 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s elif pkg_versions.get(p) != requested_pkgs[p]: 4072s logger.debug( 4072s "Installing %s version %s", p, apt_cache[p].candidate.version 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s elif pkg_versions.get(p) != apt_cache[p].candidate.version: 4072s logger.debug( 4072s "Installing %s version %s", p, apt_cache[p].candidate.version 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s else: 4072s logger.debug("Removing %s which is already the right version", p) 4072s real_pkgs.remove(p) 4072s elif pkg_versions.get(p) != apt_cache[p].candidate.version: 4072s logger.debug("Installing %s", p) 4072s apt_cache[p].mark_install(False, False) 4072s else: 4072s logger.debug("Removing %s which is already the right version", p) 4072s real_pkgs.remove(p) 4072s 4072s last_written = time.time() 4072s # fetch packages 4072s try: 4072s apt_cache.fetch_archives(fetcher=fetcher) 4072s except apt.cache.FetchFailedException as error: 4072s apport.logging.error( 4072s "Package download error, try again later: %s", str(error) 4072s ) 4072s > sys.exit(1) # transient error 4072s E SystemExit: 1 4072s 4072s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1326: SystemExit 4072s ----------------------------- Captured stderr call ----------------------------- 4072s ERROR: Package download error, try again later: Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libcurl4_7.74.0-1.3ubuntu3_amd64.deb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Could not connect to launchpad.net:443 (185.125.189.223), connection timed out Could not connect to launchpad.net:443 (185.125.189.222), connection timed out 4072s Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libcurl4-dbgsym_7.74.0-1.3ubuntu3_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) 4072s 4072s ______________________ test_install_old_packages[deb822] _______________________ 4072s 4072s self = 4072s rootdir = '/tmp/tmpl589y_lj/root', configdir = '/tmp/tmpl589y_lj/config' 4072s release = 'Foonux 22.04', packages = [('libcurl4', '7.74.0-1.3ubuntu3')] 4072s verbose = False, cache_dir = '/tmp/tmpl589y_lj/cache', permanent_rootdir = False 4072s architecture = 'amd64', origins = None, install_dbg = True, install_deps = False 4072s 4072s def install_packages( 4072s self, 4072s rootdir, 4072s configdir, 4072s release, 4072s packages, 4072s verbose=False, 4072s cache_dir=None, 4072s permanent_rootdir=False, 4072s architecture=None, 4072s origins=None, 4072s install_dbg=True, 4072s install_deps=False, 4072s ): # pylint: disable=too-many-arguments 4072s # TODO: Split into smaller functions/methods 4072s # pylint: disable=too-many-branches,too-many-locals 4072s # pylint: disable=too-many-nested-blocks,too-many-statements 4072s """Install packages into a sandbox (for apport-retrace). 4072s 4072s In order to work without any special permissions and without touching 4072s the running system, this should only download and unpack packages into 4072s the given root directory, not install them into the system. 4072s 4072s configdir points to a directory with by-release configuration files for 4072s the packaging system; this is completely dependent on the backend 4072s implementation, the only assumption is that this looks into 4072s configdir/release/, so that you can use retracing for multiple 4072s DistroReleases. As a special case, if configdir is None, it uses the 4072s current system configuration, and "release" is ignored. 4072s 4072s release is the value of the report's 'DistroRelease' field. 4072s 4072s packages is a list of ('packagename', 'version') tuples. If the version 4072s is None, it should install the most current available version. 4072s 4072s If cache_dir is given, then the downloaded packages will be stored 4072s there, to speed up subsequent retraces. 4072s 4072s If permanent_rootdir is True, then the sandbox created from the 4072s downloaded packages will be reused, to speed up subsequent retraces. 4072s 4072s If architecture is given, the sandbox will be created with packages of 4072s the given architecture (as specified in a report's "Architecture" 4072s field). If not given it defaults to the host system's architecture. 4072s 4072s If origins is given, the sandbox will be created with apt data sources 4072s for foreign origins. 4072s 4072s If install_deps is True, then the dependencies of packages will also 4072s be installed. 4072s 4072s Return a string with outdated packages, or an empty string if all 4072s packages were installed. 4072s 4072s If something is wrong with the environment (invalid configuration, 4072s package servers down, etc.), this should raise a SystemError with a 4072s meaningful error message. 4072s """ 4072s if not architecture: 4072s architecture = self.get_system_architecture() 4072s if not configdir: 4072s apt_dir = "/etc/apt" 4072s self._current_release_codename = self.get_distro_codename() 4072s else: 4072s # support architecture specific config, fall back to global config 4072s apt_dir = os.path.join(configdir, release) 4072s if architecture != self.get_system_architecture(): 4072s arch_apt_dir = os.path.join(configdir, release, architecture) 4072s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 4072s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 4072s if os.path.exists(arch_old_sources) or ( 4072s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 4072s ): 4072s apt_dir = arch_apt_dir 4072s 4072s # set mirror for get_file_package() 4072s try: 4072s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 4072s except SystemError as error: 4072s apport.logging.warning("cannot determine mirror: %s", str(error)) 4072s 4072s # set current release code name for _distro_release_to_codename 4072s with open( 4072s os.path.join(configdir, release, "codename"), encoding="utf-8" 4072s ) as f: 4072s self._current_release_codename = f.read().strip() 4072s 4072s # create apt sandbox 4072s if cache_dir: 4072s tmp_aptroot = False 4072s if architecture != self.get_system_architecture(): 4072s aptroot_arch = architecture 4072s else: 4072s aptroot_arch = "" 4072s if configdir: 4072s aptroot = os.path.join(cache_dir, release, aptroot_arch, "apt") 4072s else: 4072s aptroot = os.path.join(cache_dir, "system", aptroot_arch, "apt") 4072s if not os.path.isdir(aptroot): 4072s os.makedirs(aptroot) 4072s else: 4072s tmp_aptroot = True 4072s aptroot = tempfile.mkdtemp() 4072s 4072s apt.apt_pkg.config.set("APT::Architecture", architecture) 4072s apt.apt_pkg.config.set("Acquire::Languages", "none") 4072s # directly connect to Launchpad when downloading deb files 4072s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 4072s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 4072s 4072s if verbose: 4072s fetchProgress = apt.progress.text.AcquireProgress() 4072s else: 4072s fetchProgress = apt.progress.base.AcquireProgress() 4072s if not tmp_aptroot: 4072s apt_cache = self._sandbox_cache( 4072s aptroot, 4072s apt_dir, 4072s fetchProgress, 4072s self.get_distro_name(), 4072s self._current_release_codename, 4072s origins, 4072s architecture, 4072s ) 4072s else: 4072s self._build_apt_sandbox( 4072s aptroot, 4072s apt_dir, 4072s self.get_distro_name(), 4072s self._current_release_codename, 4072s origins, 4072s ) 4072s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 4072s try: 4072s apt_cache.update(fetchProgress) 4072s except apt.cache.FetchFailedException as error: 4072s raise SystemError(str(error)) from error 4072s apt_cache.open() 4072s 4072s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 4072s 4072s obsolete = "" 4072s 4072s src_records = apt.apt_pkg.SourceRecords() 4072s 4072s # read original package list 4072s pkg_list = os.path.join(rootdir, "packages.txt") 4072s pkg_versions = {} 4072s if os.path.exists(pkg_list): 4072s with open(pkg_list, encoding="utf-8") as f: 4072s for line in f: 4072s line = line.strip() 4072s if not line: 4072s continue 4072s (p, v) = line.split() 4072s pkg_versions[p] = v 4072s 4072s # mark packages for installation 4072s real_pkgs = set() 4072s lp_cache = {} 4072s fetcher = apt.apt_pkg.Acquire(fetchProgress) 4072s # need to keep AcquireFile references 4072s acquire_queue = [] 4072s # add any dependencies to the packages list 4072s if install_deps: 4072s deps = [] 4072s for pkg, ver in packages: 4072s try: 4072s cache_pkg = apt_cache[pkg] 4072s except KeyError: 4072s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 4072s obsolete += f"{m}\n" 4072s apport.logging.warning("%s", m) 4072s continue 4072s for dep in cache_pkg.candidate.dependencies: 4072s # the dependency may be satisfied by a different package 4072s if dep[0].name not in apt_cache: 4072s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 4072s # the version in dep is the one from pkg's dependencies, 4072s # so use the version from the cache 4072s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 4072s # if the dependency is in the list of packages we don't 4072s # need to look up its dependencies again 4072s if dep[0].name in [pkg[0] for pkg in packages]: 4072s continue 4072s # if the package is already extracted in the sandbox 4072s # because the report needs that package we don't want to 4072s # install a newer version which may cause a CRC mismatch 4072s # with the installed dbg symbols 4072s if dep[0].name in pkg_versions: 4072s inst_version = pkg_versions[dep[0].name] 4072s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 4072s deps.append((dep[0].name, inst_version)) 4072s else: 4072s deps.append((dep[0].name, dep_pkg_vers)) 4072s else: 4072s deps.append((dep[0].name, dep_pkg_vers)) 4072s if dep[0].name not in [pkg[0] for pkg in packages]: 4072s packages.append((dep[0].name, None)) 4072s packages.extend(deps) 4072s 4072s for pkg, ver in packages: 4072s try: 4072s cache_pkg = apt_cache[pkg] 4072s except KeyError: 4072s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 4072s obsolete += f"{m}\n" 4072s apport.logging.warning("%s", m) 4072s continue 4072s 4072s # try to select matching version 4072s try: 4072s if ver: 4072s cache_pkg.candidate = cache_pkg.versions[ver] 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, lp_url, hash=f"sha1:{sha1sum}", destdir=archivedir 4072s ) 4072s ) 4072s lp_cache[pkg] = ver 4072s else: 4072s obsolete += ( 4072s f"{pkg} version {ver} required," 4072s f" but {cache_pkg.candidate.version} is available\n" 4072s ) 4072s ver = cache_pkg.candidate.version 4072s 4072s candidate = cache_pkg.candidate 4072s real_pkgs.add(pkg) 4072s 4072s if permanent_rootdir: 4072s virtual_mapping = self._virtual_mapping(aptroot) 4072s # Remember all the virtual packages that this package provides, 4072s # so that if we encounter that virtual package as a 4072s # Conflicts/Replaces later, we know to remove this package from 4072s # the cache. 4072s for p in candidate.provides: 4072s virtual_mapping.setdefault(p, set()).add(pkg) 4072s conflicts = [] 4072s if "Conflicts" in candidate.record: 4072s conflicts += apt.apt_pkg.parse_depends( 4072s candidate.record["Conflicts"] 4072s ) 4072s if "Replaces" in candidate.record: 4072s conflicts += apt.apt_pkg.parse_depends(candidate.record["Replaces"]) 4072s for conflict in conflicts: 4072s # if the package conflicts with itself its wonky e.g. 4072s # gdb in artful 4072s if conflict[0][0] == candidate.package.name: 4072s continue 4072s # apt_pkg.parse_depends needs to handle the or operator, 4072s # but as policy states it is invalid to use that in 4072s # Replaces/Depends, we can safely choose the first value 4072s # here. 4072s conflict = conflict[0] 4072s if apt_cache.is_virtual_package(conflict[0]): 4072s try: 4072s providers = virtual_mapping[conflict[0]] 4072s except KeyError: 4072s # We may not have seen the virtual package that 4072s # this conflicts with, so we can assume it's not 4072s # unpacked into the sandbox. 4072s continue 4072s for p in providers: 4072s # if the candidate package being installed 4072s # conflicts with but also provides a virtual 4072s # package don't act on the candidate e.g. 4072s # libpam-modules and libpam-mkhomedir in artful 4072s if p == candidate.package.name: 4072s continue 4072s debs = os.path.join(archivedir, f"{p}_*.deb") 4072s for path in glob.glob(debs): 4072s ver = self._deb_version(path) 4072s if apt.apt_pkg.check_dep(ver, conflict[2], conflict[1]): 4072s os.unlink(path) 4072s try: 4072s del pkg_versions[p] 4072s except KeyError: 4072s pass 4072s del providers 4072s else: 4072s debs = os.path.join(archivedir, f"{conflict[0]}_*.deb") 4072s for path in glob.glob(debs): 4072s ver = self._deb_version(path) 4072s if apt.apt_pkg.check_dep(ver, conflict[2], conflict[1]): 4072s os.unlink(path) 4072s try: 4072s del pkg_versions[conflict[0]] 4072s except KeyError: 4072s pass 4072s 4072s if candidate.architecture != "all" and install_dbg: 4072s try: 4072s dbg_pkg = f"{pkg}-dbg" 4072s dbg = apt_cache[dbg_pkg] 4072s pkg_found = False 4072s # try to get the same version as pkg 4072s if ver: 4072s try: 4072s dbg.candidate = dbg.versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbg_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbg_pkg] = ver 4072s pkg_found = True 4072s # if it can't be found in Launchpad failover to a 4072s # code path that'll use -dbgsym packages 4072s else: 4072s raise 4072s if not pkg_found: 4072s try: 4072s dbg.candidate = dbg.versions[candidate.version] 4072s except KeyError: 4072s obsolete += ( 4072s f"outdated -dbg package for {pkg}:" 4072s f" package version {ver}" 4072s f" -dbg version {dbg.candidate.version}\n" 4072s ) 4072s real_pkgs.add(dbg_pkg) 4072s except KeyError: 4072s # install all -dbg from the source package; lookup() just 4072s # works from the current list pointer, we always need to 4072s # start from the beginning 4072s src_records.restart() 4072s if src_records.lookup(candidate.source_name): 4072s # ignore transitional packages 4072s # False positive, see 4072s # https://github.com/PyCQA/pylint/issues/7122 4072s # pylint: disable=not-an-iterable 4072s dbgs = [ 4072s p 4072s for p in src_records.binaries 4072s if p.endswith("-dbg") 4072s and p in apt_cache 4072s and "transitional" not in apt_cache[p].candidate.description 4072s ] 4072s # if a specific version of a package was requested 4072s # only install dbg pkgs whose version matches 4072s if ver: 4072s for dbg in dbgs: 4072s if apt_cache[dbg].candidate.version != ver: 4072s dbgs.remove(dbg) 4072s else: 4072s dbgs = [] 4072s if dbgs: 4072s for p in dbgs: 4072s # if the package has already been added to 4072s # real_pkgs don't search for it again 4072s if p in real_pkgs: 4072s continue 4072s pkg_found = False 4072s # prefer the version requested 4072s if ver: 4072s try: 4072s apt_cache[p].candidate = apt_cache[p].versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, p, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[p] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s try: 4072s apt_cache[p].candidate = apt_cache[p].versions[ 4072s candidate.version 4072s ] 4072s except KeyError: 4072s # we don't really expect that, but it's 4072s # possible that other binaries have a 4072s # different version 4072s pass 4072s real_pkgs.add(p) 4072s else: 4072s pkg_found = False 4072s dbgsym_pkg = f"{pkg}-dbgsym" 4072s try: 4072s dbgsym = apt_cache[dbgsym_pkg] 4072s real_pkgs.add(dbgsym_pkg) 4072s # prefer the version requested 4072s if ver: 4072s try: 4072s dbgsym.candidate = dbgsym.versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbgsym_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbgsym_pkg] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s try: 4072s dbgsym.candidate = dbgsym.versions[ 4072s candidate.version 4072s ] 4072s except KeyError: 4072s obsolete += ( 4072s f"outdated debug symbol package" 4072s f" for {pkg}: package version" 4072s f" {candidate.version}" 4072s f" dbgsym version" 4072s f" {dbgsym.candidate.version}\n" 4072s ) 4072s 4072s except KeyError: 4072s if ver: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbgsym_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbgsym_pkg] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s obsolete += f"no debug symbol package found for {pkg}\n" 4072s 4072s # unpack packages, weed out the ones that are already installed (for 4072s # permanent sandboxes) 4072s logger = logging.getLogger(__name__) 4072s requested_pkgs = dict(packages) 4072s for p in real_pkgs.copy(): 4072s if p in requested_pkgs: 4072s if requested_pkgs[p] is None: 4072s # We already have the latest version of this package 4072s if pkg_versions.get(p) == apt_cache[p].candidate.version: 4072s logger.debug( 4072s "Removing %s which is already the right version", p 4072s ) 4072s real_pkgs.remove(p) 4072s else: 4072s logger.debug( 4072s "Installing %s version %s", 4072s p, 4072s apt_cache[p].candidate.version, 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s elif pkg_versions.get(p) != requested_pkgs[p]: 4072s logger.debug( 4072s "Installing %s version %s", p, apt_cache[p].candidate.version 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s elif pkg_versions.get(p) != apt_cache[p].candidate.version: 4072s logger.debug( 4072s "Installing %s version %s", p, apt_cache[p].candidate.version 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s else: 4072s logger.debug("Removing %s which is already the right version", p) 4072s real_pkgs.remove(p) 4072s elif pkg_versions.get(p) != apt_cache[p].candidate.version: 4072s logger.debug("Installing %s", p) 4072s apt_cache[p].mark_install(False, False) 4072s else: 4072s logger.debug("Removing %s which is already the right version", p) 4072s real_pkgs.remove(p) 4072s 4072s last_written = time.time() 4072s # fetch packages 4072s try: 4072s > apt_cache.fetch_archives(fetcher=fetcher) 4072s 4072s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1321: 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s /usr/lib/python3/dist-packages/apt/cache.py:475: in fetch_archives 4072s return self._fetch_archives( 4072s /usr/lib/python3/dist-packages/apt/cache.py:443: in _fetch_archives 4072s return self._run_fetcher(fetcher, allow_unauthenticated) 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s 4072s self = 4072s fetcher = 4072s allow_unauthenticated = True 4072s 4072s def _run_fetcher( 4072s self, fetcher: apt_pkg.Acquire, allow_unauthenticated: bool | None 4072s ) -> int: 4072s if allow_unauthenticated is None: 4072s allow_unauthenticated = apt_pkg.config.find_b( 4072s "APT::Get::" "AllowUnauthenticated", False 4072s ) 4072s 4072s untrusted = [item for item in fetcher.items if not item.is_trusted] 4072s if untrusted and not allow_unauthenticated: 4072s raise UntrustedException( 4072s "Untrusted packages:\n%s" % "\n".join(i.desc_uri for i in untrusted) 4072s ) 4072s 4072s # do the actual fetching 4072s res = fetcher.run() 4072s 4072s # now check the result (this is the code from apt-get.cc) 4072s failed = False 4072s err_msg = "" 4072s for item in fetcher.items: 4072s if item.status == item.STAT_DONE: 4072s continue 4072s if item.STAT_IDLE: 4072s continue 4072s err_msg += f"Failed to fetch {item.desc_uri} {item.error_text}\n" 4072s failed = True 4072s 4072s # we raise a exception if the download failed or it was cancelt 4072s if res == fetcher.RESULT_CANCELLED: 4072s raise FetchCancelledException(err_msg) 4072s elif failed: 4072s > raise FetchFailedException(err_msg) 4072s E apt.cache.FetchFailedException: Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libcurl4_7.74.0-1.3ubuntu3_amd64.deb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Could not connect to launchpad.net:443 (185.125.189.223), connection timed out Could not connect to launchpad.net:443 (185.125.189.222), connection timed out 4072s E Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libcurl4-dbgsym_7.74.0-1.3ubuntu3_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) 4072s 4072s /usr/lib/python3/dist-packages/apt/cache.py:424: FetchFailedException 4072s 4072s During handling of the above exception, another exception occurred: 4072s 4072s configdir = '/tmp/tmpl589y_lj/config', cachedir = '/tmp/tmpl589y_lj/cache' 4072s rootdir = '/tmp/tmpl589y_lj/root', apt_style = 'deb822' 4072s 4072s @pytest.mark.skipif(not has_internet(), reason="online test") 4072s def test_install_old_packages(configdir, cachedir, rootdir, apt_style): 4072s """Sandbox will install older package versions from launchpad.""" 4072s release = _setup_foonux_config(configdir, apt_style) 4072s wanted_package = "libcurl4" 4072s wanted_version = "7.81.0-1" # pre-release version 4072s obsolete = impl.install_packages( 4072s rootdir, configdir, release, [(wanted_package, wanted_version)], False, cachedir 4072s ) 4072s 4072s assert obsolete == "" 4072s 4072s def sandbox_ver(pkg): 4072s with gzip.open( 4072s os.path.join(rootdir, "usr/share/doc", pkg, "changelog.Debian.gz") 4072s ) as f: 4072s return f.readline().decode().split()[1][1:-1] 4072s 4072s # the version is as expected 4072s assert sandbox_ver(wanted_package) == wanted_version 4072s 4072s # keeps track of package version 4072s with open(os.path.join(rootdir, "packages.txt"), encoding="utf-8") as f: 4072s pkglist = f.read().splitlines() 4072s assert f"{wanted_package} {wanted_version}" in pkglist 4072s 4072s wanted_version = "7.74.0-1.3ubuntu3" 4072s > obsolete = impl.install_packages( 4072s rootdir, configdir, release, [(wanted_package, wanted_version)], False, cachedir 4072s ) 4072s 4072s tests/system/test_packaging_apt_dpkg.py:660: 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s 4072s self = 4072s rootdir = '/tmp/tmpl589y_lj/root', configdir = '/tmp/tmpl589y_lj/config' 4072s release = 'Foonux 22.04', packages = [('libcurl4', '7.74.0-1.3ubuntu3')] 4072s verbose = False, cache_dir = '/tmp/tmpl589y_lj/cache', permanent_rootdir = False 4072s architecture = 'amd64', origins = None, install_dbg = True, install_deps = False 4072s 4072s def install_packages( 4072s self, 4072s rootdir, 4072s configdir, 4072s release, 4072s packages, 4072s verbose=False, 4072s cache_dir=None, 4072s permanent_rootdir=False, 4072s architecture=None, 4072s origins=None, 4072s install_dbg=True, 4072s install_deps=False, 4072s ): # pylint: disable=too-many-arguments 4072s # TODO: Split into smaller functions/methods 4072s # pylint: disable=too-many-branches,too-many-locals 4072s # pylint: disable=too-many-nested-blocks,too-many-statements 4072s """Install packages into a sandbox (for apport-retrace). 4072s 4072s In order to work without any special permissions and without touching 4072s the running system, this should only download and unpack packages into 4072s the given root directory, not install them into the system. 4072s 4072s configdir points to a directory with by-release configuration files for 4072s the packaging system; this is completely dependent on the backend 4072s implementation, the only assumption is that this looks into 4072s configdir/release/, so that you can use retracing for multiple 4072s DistroReleases. As a special case, if configdir is None, it uses the 4072s current system configuration, and "release" is ignored. 4072s 4072s release is the value of the report's 'DistroRelease' field. 4072s 4072s packages is a list of ('packagename', 'version') tuples. If the version 4072s is None, it should install the most current available version. 4072s 4072s If cache_dir is given, then the downloaded packages will be stored 4072s there, to speed up subsequent retraces. 4072s 4072s If permanent_rootdir is True, then the sandbox created from the 4072s downloaded packages will be reused, to speed up subsequent retraces. 4072s 4072s If architecture is given, the sandbox will be created with packages of 4072s the given architecture (as specified in a report's "Architecture" 4072s field). If not given it defaults to the host system's architecture. 4072s 4072s If origins is given, the sandbox will be created with apt data sources 4072s for foreign origins. 4072s 4072s If install_deps is True, then the dependencies of packages will also 4072s be installed. 4072s 4072s Return a string with outdated packages, or an empty string if all 4072s packages were installed. 4072s 4072s If something is wrong with the environment (invalid configuration, 4072s package servers down, etc.), this should raise a SystemError with a 4072s meaningful error message. 4072s """ 4072s if not architecture: 4072s architecture = self.get_system_architecture() 4072s if not configdir: 4072s apt_dir = "/etc/apt" 4072s self._current_release_codename = self.get_distro_codename() 4072s else: 4072s # support architecture specific config, fall back to global config 4072s apt_dir = os.path.join(configdir, release) 4072s if architecture != self.get_system_architecture(): 4072s arch_apt_dir = os.path.join(configdir, release, architecture) 4072s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 4072s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 4072s if os.path.exists(arch_old_sources) or ( 4072s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 4072s ): 4072s apt_dir = arch_apt_dir 4072s 4072s # set mirror for get_file_package() 4072s try: 4072s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 4072s except SystemError as error: 4072s apport.logging.warning("cannot determine mirror: %s", str(error)) 4072s 4072s # set current release code name for _distro_release_to_codename 4072s with open( 4072s os.path.join(configdir, release, "codename"), encoding="utf-8" 4072s ) as f: 4072s self._current_release_codename = f.read().strip() 4072s 4072s # create apt sandbox 4072s if cache_dir: 4072s tmp_aptroot = False 4072s if architecture != self.get_system_architecture(): 4072s aptroot_arch = architecture 4072s else: 4072s aptroot_arch = "" 4072s if configdir: 4072s aptroot = os.path.join(cache_dir, release, aptroot_arch, "apt") 4072s else: 4072s aptroot = os.path.join(cache_dir, "system", aptroot_arch, "apt") 4072s if not os.path.isdir(aptroot): 4072s os.makedirs(aptroot) 4072s else: 4072s tmp_aptroot = True 4072s aptroot = tempfile.mkdtemp() 4072s 4072s apt.apt_pkg.config.set("APT::Architecture", architecture) 4072s apt.apt_pkg.config.set("Acquire::Languages", "none") 4072s # directly connect to Launchpad when downloading deb files 4072s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 4072s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 4072s 4072s if verbose: 4072s fetchProgress = apt.progress.text.AcquireProgress() 4072s else: 4072s fetchProgress = apt.progress.base.AcquireProgress() 4072s if not tmp_aptroot: 4072s apt_cache = self._sandbox_cache( 4072s aptroot, 4072s apt_dir, 4072s fetchProgress, 4072s self.get_distro_name(), 4072s self._current_release_codename, 4072s origins, 4072s architecture, 4072s ) 4072s else: 4072s self._build_apt_sandbox( 4072s aptroot, 4072s apt_dir, 4072s self.get_distro_name(), 4072s self._current_release_codename, 4072s origins, 4072s ) 4072s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 4072s try: 4072s apt_cache.update(fetchProgress) 4072s except apt.cache.FetchFailedException as error: 4072s raise SystemError(str(error)) from error 4072s apt_cache.open() 4072s 4072s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 4072s 4072s obsolete = "" 4072s 4072s src_records = apt.apt_pkg.SourceRecords() 4072s 4072s # read original package list 4072s pkg_list = os.path.join(rootdir, "packages.txt") 4072s pkg_versions = {} 4072s if os.path.exists(pkg_list): 4072s with open(pkg_list, encoding="utf-8") as f: 4072s for line in f: 4072s line = line.strip() 4072s if not line: 4072s continue 4072s (p, v) = line.split() 4072s pkg_versions[p] = v 4072s 4072s # mark packages for installation 4072s real_pkgs = set() 4072s lp_cache = {} 4072s fetcher = apt.apt_pkg.Acquire(fetchProgress) 4072s # need to keep AcquireFile references 4072s acquire_queue = [] 4072s # add any dependencies to the packages list 4072s if install_deps: 4072s deps = [] 4072s for pkg, ver in packages: 4072s try: 4072s cache_pkg = apt_cache[pkg] 4072s except KeyError: 4072s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 4072s obsolete += f"{m}\n" 4072s apport.logging.warning("%s", m) 4072s continue 4072s for dep in cache_pkg.candidate.dependencies: 4072s # the dependency may be satisfied by a different package 4072s if dep[0].name not in apt_cache: 4072s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 4072s # the version in dep is the one from pkg's dependencies, 4072s # so use the version from the cache 4072s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 4072s # if the dependency is in the list of packages we don't 4072s # need to look up its dependencies again 4072s if dep[0].name in [pkg[0] for pkg in packages]: 4072s continue 4072s # if the package is already extracted in the sandbox 4072s # because the report needs that package we don't want to 4072s # install a newer version which may cause a CRC mismatch 4072s # with the installed dbg symbols 4072s if dep[0].name in pkg_versions: 4072s inst_version = pkg_versions[dep[0].name] 4072s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 4072s deps.append((dep[0].name, inst_version)) 4072s else: 4072s deps.append((dep[0].name, dep_pkg_vers)) 4072s else: 4072s deps.append((dep[0].name, dep_pkg_vers)) 4072s if dep[0].name not in [pkg[0] for pkg in packages]: 4072s packages.append((dep[0].name, None)) 4072s packages.extend(deps) 4072s 4072s for pkg, ver in packages: 4072s try: 4072s cache_pkg = apt_cache[pkg] 4072s except KeyError: 4072s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 4072s obsolete += f"{m}\n" 4072s apport.logging.warning("%s", m) 4072s continue 4072s 4072s # try to select matching version 4072s try: 4072s if ver: 4072s cache_pkg.candidate = cache_pkg.versions[ver] 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, lp_url, hash=f"sha1:{sha1sum}", destdir=archivedir 4072s ) 4072s ) 4072s lp_cache[pkg] = ver 4072s else: 4072s obsolete += ( 4072s f"{pkg} version {ver} required," 4072s f" but {cache_pkg.candidate.version} is available\n" 4072s ) 4072s ver = cache_pkg.candidate.version 4072s 4072s candidate = cache_pkg.candidate 4072s real_pkgs.add(pkg) 4072s 4072s if permanent_rootdir: 4072s virtual_mapping = self._virtual_mapping(aptroot) 4072s # Remember all the virtual packages that this package provides, 4072s # so that if we encounter that virtual package as a 4072s # Conflicts/Replaces later, we know to remove this package from 4072s # the cache. 4072s for p in candidate.provides: 4072s virtual_mapping.setdefault(p, set()).add(pkg) 4072s conflicts = [] 4072s if "Conflicts" in candidate.record: 4072s conflicts += apt.apt_pkg.parse_depends( 4072s candidate.record["Conflicts"] 4072s ) 4072s if "Replaces" in candidate.record: 4072s conflicts += apt.apt_pkg.parse_depends(candidate.record["Replaces"]) 4072s for conflict in conflicts: 4072s # if the package conflicts with itself its wonky e.g. 4072s # gdb in artful 4072s if conflict[0][0] == candidate.package.name: 4072s continue 4072s # apt_pkg.parse_depends needs to handle the or operator, 4072s # but as policy states it is invalid to use that in 4072s # Replaces/Depends, we can safely choose the first value 4072s # here. 4072s conflict = conflict[0] 4072s if apt_cache.is_virtual_package(conflict[0]): 4072s try: 4072s providers = virtual_mapping[conflict[0]] 4072s except KeyError: 4072s # We may not have seen the virtual package that 4072s # this conflicts with, so we can assume it's not 4072s # unpacked into the sandbox. 4072s continue 4072s for p in providers: 4072s # if the candidate package being installed 4072s # conflicts with but also provides a virtual 4072s # package don't act on the candidate e.g. 4072s # libpam-modules and libpam-mkhomedir in artful 4072s if p == candidate.package.name: 4072s continue 4072s debs = os.path.join(archivedir, f"{p}_*.deb") 4072s for path in glob.glob(debs): 4072s ver = self._deb_version(path) 4072s if apt.apt_pkg.check_dep(ver, conflict[2], conflict[1]): 4072s os.unlink(path) 4072s try: 4072s del pkg_versions[p] 4072s except KeyError: 4072s pass 4072s del providers 4072s else: 4072s debs = os.path.join(archivedir, f"{conflict[0]}_*.deb") 4072s for path in glob.glob(debs): 4072s ver = self._deb_version(path) 4072s if apt.apt_pkg.check_dep(ver, conflict[2], conflict[1]): 4072s os.unlink(path) 4072s try: 4072s del pkg_versions[conflict[0]] 4072s except KeyError: 4072s pass 4072s 4072s if candidate.architecture != "all" and install_dbg: 4072s try: 4072s dbg_pkg = f"{pkg}-dbg" 4072s dbg = apt_cache[dbg_pkg] 4072s pkg_found = False 4072s # try to get the same version as pkg 4072s if ver: 4072s try: 4072s dbg.candidate = dbg.versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbg_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbg_pkg] = ver 4072s pkg_found = True 4072s # if it can't be found in Launchpad failover to a 4072s # code path that'll use -dbgsym packages 4072s else: 4072s raise 4072s if not pkg_found: 4072s try: 4072s dbg.candidate = dbg.versions[candidate.version] 4072s except KeyError: 4072s obsolete += ( 4072s f"outdated -dbg package for {pkg}:" 4072s f" package version {ver}" 4072s f" -dbg version {dbg.candidate.version}\n" 4072s ) 4072s real_pkgs.add(dbg_pkg) 4072s except KeyError: 4072s # install all -dbg from the source package; lookup() just 4072s # works from the current list pointer, we always need to 4072s # start from the beginning 4072s src_records.restart() 4072s if src_records.lookup(candidate.source_name): 4072s # ignore transitional packages 4072s # False positive, see 4072s # https://github.com/PyCQA/pylint/issues/7122 4072s # pylint: disable=not-an-iterable 4072s dbgs = [ 4072s p 4072s for p in src_records.binaries 4072s if p.endswith("-dbg") 4072s and p in apt_cache 4072s and "transitional" not in apt_cache[p].candidate.description 4072s ] 4072s # if a specific version of a package was requested 4072s # only install dbg pkgs whose version matches 4072s if ver: 4072s for dbg in dbgs: 4072s if apt_cache[dbg].candidate.version != ver: 4072s dbgs.remove(dbg) 4072s else: 4072s dbgs = [] 4072s if dbgs: 4072s for p in dbgs: 4072s # if the package has already been added to 4072s # real_pkgs don't search for it again 4072s if p in real_pkgs: 4072s continue 4072s pkg_found = False 4072s # prefer the version requested 4072s if ver: 4072s try: 4072s apt_cache[p].candidate = apt_cache[p].versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, p, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[p] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s try: 4072s apt_cache[p].candidate = apt_cache[p].versions[ 4072s candidate.version 4072s ] 4072s except KeyError: 4072s # we don't really expect that, but it's 4072s # possible that other binaries have a 4072s # different version 4072s pass 4072s real_pkgs.add(p) 4072s else: 4072s pkg_found = False 4072s dbgsym_pkg = f"{pkg}-dbgsym" 4072s try: 4072s dbgsym = apt_cache[dbgsym_pkg] 4072s real_pkgs.add(dbgsym_pkg) 4072s # prefer the version requested 4072s if ver: 4072s try: 4072s dbgsym.candidate = dbgsym.versions[ver] 4072s pkg_found = True 4072s except KeyError: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbgsym_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbgsym_pkg] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s try: 4072s dbgsym.candidate = dbgsym.versions[ 4072s candidate.version 4072s ] 4072s except KeyError: 4072s obsolete += ( 4072s f"outdated debug symbol package" 4072s f" for {pkg}: package version" 4072s f" {candidate.version}" 4072s f" dbgsym version" 4072s f" {dbgsym.candidate.version}\n" 4072s ) 4072s 4072s except KeyError: 4072s if ver: 4072s (lp_url, sha1sum) = self.get_lp_binary_package( 4072s release, dbgsym_pkg, ver, architecture 4072s ) 4072s if lp_url: 4072s acquire_queue.append( 4072s apt.apt_pkg.AcquireFile( 4072s fetcher, 4072s lp_url, 4072s hash=f"sha1:{sha1sum}", 4072s destdir=archivedir, 4072s ) 4072s ) 4072s lp_cache[dbgsym_pkg] = ver 4072s pkg_found = True 4072s if not pkg_found: 4072s obsolete += f"no debug symbol package found for {pkg}\n" 4072s 4072s # unpack packages, weed out the ones that are already installed (for 4072s # permanent sandboxes) 4072s logger = logging.getLogger(__name__) 4072s requested_pkgs = dict(packages) 4072s for p in real_pkgs.copy(): 4072s if p in requested_pkgs: 4072s if requested_pkgs[p] is None: 4072s # We already have the latest version of this package 4072s if pkg_versions.get(p) == apt_cache[p].candidate.version: 4072s logger.debug( 4072s "Removing %s which is already the right version", p 4072s ) 4072s real_pkgs.remove(p) 4072s else: 4072s logger.debug( 4072s "Installing %s version %s", 4072s p, 4072s apt_cache[p].candidate.version, 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s elif pkg_versions.get(p) != requested_pkgs[p]: 4072s logger.debug( 4072s "Installing %s version %s", p, apt_cache[p].candidate.version 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s elif pkg_versions.get(p) != apt_cache[p].candidate.version: 4072s logger.debug( 4072s "Installing %s version %s", p, apt_cache[p].candidate.version 4072s ) 4072s apt_cache[p].mark_install(False, False) 4072s else: 4072s logger.debug("Removing %s which is already the right version", p) 4072s real_pkgs.remove(p) 4072s elif pkg_versions.get(p) != apt_cache[p].candidate.version: 4072s logger.debug("Installing %s", p) 4072s apt_cache[p].mark_install(False, False) 4072s else: 4072s logger.debug("Removing %s which is already the right version", p) 4072s real_pkgs.remove(p) 4072s 4072s last_written = time.time() 4072s # fetch packages 4072s try: 4072s apt_cache.fetch_archives(fetcher=fetcher) 4072s except apt.cache.FetchFailedException as error: 4072s apport.logging.error( 4072s "Package download error, try again later: %s", str(error) 4072s ) 4072s > sys.exit(1) # transient error 4072s E SystemExit: 1 4072s 4072s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1326: SystemExit 4072s ----------------------------- Captured stderr call ----------------------------- 4072s ERROR: Package download error, try again later: Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libcurl4_7.74.0-1.3ubuntu3_amd64.deb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) Could not connect to launchpad.net:443 (185.125.189.223), connection timed out Could not connect to launchpad.net:443 (185.125.189.222), connection timed out 4072s Failed to fetch https://launchpad.net/ubuntu/%2barchive/primary/%2bfiles/libcurl4-dbgsym_7.74.0-1.3ubuntu3_amd64.ddeb Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::f3). - connect (101: Network is unreachable) Cannot initiate the connection to launchpad.net:443 (2620:2d:4000:1009::3ba). - connect (101: Network is unreachable) 4072s 4072s __________________ test_get_source_tree_lp_sandbox[one-line] ___________________ 4072s 4072s configdir = '/tmp/tmp_g3ontw8/config', workdir = '/tmp/tmp_g3ontw8' 4072s rootdir = '/tmp/tmp_g3ontw8/root', apt_style = 'one-line' 4072s 4072s @pytest.mark.skipif(not has_internet(), reason="online test") 4072s def test_get_source_tree_lp_sandbox(configdir, workdir, rootdir, apt_style): 4072s release = _setup_foonux_config(configdir, apt_style) 4072s wanted_package = "curl" 4072s wanted_version = "7.81.0-1ubuntu1.2" # superseded -security version 4072s out_dir = os.path.join(workdir, "out") 4072s os.mkdir(out_dir) 4072s # pylint: disable=protected-access 4072s impl._build_apt_sandbox( 4072s rootdir, os.path.join(configdir, release), "ubuntu", "jammy", origins=None 4072s ) 4072s > res = impl.get_source_tree( 4072s wanted_package, out_dir, version=wanted_version, sandbox=rootdir 4072s ) 4072s 4072s tests/system/test_packaging_apt_dpkg.py:702: 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s 4072s self = 4072s srcpackage = 'curl', output_dir = '/tmp/tmp_g3ontw8/out' 4072s version = '7.81.0-1ubuntu1.2', sandbox = '/tmp/tmp_g3ontw8/root' 4072s 4072s def get_source_tree(self, srcpackage, output_dir, version=None, sandbox=None): 4072s # TODO: Split into smaller functions/methods 4072s # pylint: disable=too-many-branches,too-many-locals 4072s """Download source package and unpack it into output_dir. 4072s 4072s This also has to care about applying patches etc., so that output_dir 4072s will eventually contain the actually compiled source. output_dir needs 4072s to exist and should be empty. 4072s 4072s If version is given, this particular version will be retrieved. 4072s Otherwise this will fetch the latest available version. 4072s 4072s If sandbox is given, it calls apt-get source in that sandbox, otherwise 4072s it uses the system apt configuration. 4072s 4072s If apt_update is True, it will call apt-get update before apt-get 4072s source. This is mostly necessary for freshly created sandboxes. 4072s 4072s Return the directory that contains the actual source root directory 4072s (which might be a subdirectory of output_dir). Return None if the 4072s source is not available. 4072s """ 4072s # configure apt for sandbox 4072s env = os.environ.copy() 4072s if sandbox: 4072s # hard to change, pylint: disable=consider-using-with 4072s f = tempfile.NamedTemporaryFile("w+") 4072s f.write( 4072s f'Dir "{sandbox}";\n' 4072s f'Dir::State::Status "/var/lib/dpkg/status";\n' 4072s f'Debug::NoLocking "true";\n' 4072s ) 4072s f.flush() 4072s env["APT_CONFIG"] = f.name 4072s 4072s if sandbox and not glob.glob(f"{sandbox}/var/lib/apt/lists/*Sources"): 4072s subprocess.call(["apt-get", "-qq", "update"], env=env) 4072s 4072s # fetch source tree 4072s argv = ["apt-get", "-qq", "--assume-yes", "source", srcpackage] 4072s if version: 4072s argv[-1] += f"={version}" 4072s try: 4072s if subprocess.call(argv, cwd=output_dir, env=env) != 0: 4072s if not version: 4072s return None 4072s sf_urls = self.get_lp_source_package(srcpackage, version) 4072s if sf_urls: 4072s proxy = "" 4072s if apt.apt_pkg.config.find("Acquire::http::Proxy") != "": 4072s proxy = apt.apt_pkg.config.find("Acquire::http::Proxy") 4072s apt.apt_pkg.config.set("Acquire::http::Proxy", "") 4072s fetchProgress = apt.progress.base.AcquireProgress() 4072s fetcher = apt.apt_pkg.Acquire(fetchProgress) 4072s af_queue = [] 4072s for sf in sf_urls: 4072s af_queue.append( 4072s apt.apt_pkg.AcquireFile(fetcher, sf, destdir=output_dir) 4072s ) 4072s result = fetcher.run() 4072s if result != fetcher.RESULT_CONTINUE: 4072s return None 4072s if proxy: 4072s apt.apt_pkg.config.set("Acquire::http::Proxy", proxy) 4072s for dsc in glob.glob(os.path.join(output_dir, "*.dsc")): 4072s subprocess.call( 4072s ["dpkg-source", "-sn", "-x", dsc], 4072s stdout=subprocess.PIPE, 4072s cwd=output_dir, 4072s ) 4072s else: 4072s return None 4072s except OSError: 4072s return None 4072s 4072s # find top level directory 4072s root = None 4072s for d in glob.glob(os.path.join(output_dir, f"{srcpackage}-*")): 4072s if os.path.isdir(d): 4072s root = d 4072s > assert root, "could not determine source tree root directory" 4072s E AssertionError: could not determine source tree root directory 4072s 4072s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:796: AssertionError 4072s ----------------------------- Captured stderr call ----------------------------- 4072s W: Download is performed unsandboxed as root as file '/tmp/tmp_g3ontw8/root/var/lib/apt/lists/partial/archive.ubuntu.com_ubuntu_dists_jammy_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 4072s E: Can not find version '7.81.0-1ubuntu1.2' of package 'curl' 4072s E: Unable to find a source package for curl 4072s ___________________ test_get_source_tree_lp_sandbox[deb822] ____________________ 4072s 4072s configdir = '/tmp/tmp57g0_56b/config', workdir = '/tmp/tmp57g0_56b' 4072s rootdir = '/tmp/tmp57g0_56b/root', apt_style = 'deb822' 4072s 4072s @pytest.mark.skipif(not has_internet(), reason="online test") 4072s def test_get_source_tree_lp_sandbox(configdir, workdir, rootdir, apt_style): 4072s release = _setup_foonux_config(configdir, apt_style) 4072s wanted_package = "curl" 4072s wanted_version = "7.81.0-1ubuntu1.2" # superseded -security version 4072s out_dir = os.path.join(workdir, "out") 4072s os.mkdir(out_dir) 4072s # pylint: disable=protected-access 4072s impl._build_apt_sandbox( 4072s rootdir, os.path.join(configdir, release), "ubuntu", "jammy", origins=None 4072s ) 4072s > res = impl.get_source_tree( 4072s wanted_package, out_dir, version=wanted_version, sandbox=rootdir 4072s ) 4072s 4072s tests/system/test_packaging_apt_dpkg.py:702: 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s 4072s self = 4072s srcpackage = 'curl', output_dir = '/tmp/tmp57g0_56b/out' 4072s version = '7.81.0-1ubuntu1.2', sandbox = '/tmp/tmp57g0_56b/root' 4072s 4072s def get_source_tree(self, srcpackage, output_dir, version=None, sandbox=None): 4072s # TODO: Split into smaller functions/methods 4072s # pylint: disable=too-many-branches,too-many-locals 4072s """Download source package and unpack it into output_dir. 4072s 4072s This also has to care about applying patches etc., so that output_dir 4072s will eventually contain the actually compiled source. output_dir needs 4072s to exist and should be empty. 4072s 4072s If version is given, this particular version will be retrieved. 4072s Otherwise this will fetch the latest available version. 4072s 4072s If sandbox is given, it calls apt-get source in that sandbox, otherwise 4072s it uses the system apt configuration. 4072s 4072s If apt_update is True, it will call apt-get update before apt-get 4072s source. This is mostly necessary for freshly created sandboxes. 4072s 4072s Return the directory that contains the actual source root directory 4072s (which might be a subdirectory of output_dir). Return None if the 4072s source is not available. 4072s """ 4072s # configure apt for sandbox 4072s env = os.environ.copy() 4072s if sandbox: 4072s # hard to change, pylint: disable=consider-using-with 4072s f = tempfile.NamedTemporaryFile("w+") 4072s f.write( 4072s f'Dir "{sandbox}";\n' 4072s f'Dir::State::Status "/var/lib/dpkg/status";\n' 4072s f'Debug::NoLocking "true";\n' 4072s ) 4072s f.flush() 4072s env["APT_CONFIG"] = f.name 4072s 4072s if sandbox and not glob.glob(f"{sandbox}/var/lib/apt/lists/*Sources"): 4072s subprocess.call(["apt-get", "-qq", "update"], env=env) 4072s 4072s # fetch source tree 4072s argv = ["apt-get", "-qq", "--assume-yes", "source", srcpackage] 4072s if version: 4072s argv[-1] += f"={version}" 4072s try: 4072s if subprocess.call(argv, cwd=output_dir, env=env) != 0: 4072s if not version: 4072s return None 4072s sf_urls = self.get_lp_source_package(srcpackage, version) 4072s if sf_urls: 4072s proxy = "" 4072s if apt.apt_pkg.config.find("Acquire::http::Proxy") != "": 4072s proxy = apt.apt_pkg.config.find("Acquire::http::Proxy") 4072s apt.apt_pkg.config.set("Acquire::http::Proxy", "") 4072s fetchProgress = apt.progress.base.AcquireProgress() 4072s fetcher = apt.apt_pkg.Acquire(fetchProgress) 4072s af_queue = [] 4072s for sf in sf_urls: 4072s af_queue.append( 4072s apt.apt_pkg.AcquireFile(fetcher, sf, destdir=output_dir) 4072s ) 4072s result = fetcher.run() 4072s if result != fetcher.RESULT_CONTINUE: 4072s return None 4072s if proxy: 4072s apt.apt_pkg.config.set("Acquire::http::Proxy", proxy) 4072s for dsc in glob.glob(os.path.join(output_dir, "*.dsc")): 4072s subprocess.call( 4072s ["dpkg-source", "-sn", "-x", dsc], 4072s stdout=subprocess.PIPE, 4072s cwd=output_dir, 4072s ) 4072s else: 4072s return None 4072s except OSError: 4072s return None 4072s 4072s # find top level directory 4072s root = None 4072s for d in glob.glob(os.path.join(output_dir, f"{srcpackage}-*")): 4072s if os.path.isdir(d): 4072s root = d 4072s > assert root, "could not determine source tree root directory" 4072s E AssertionError: could not determine source tree root directory 4072s 4072s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:796: AssertionError 4072s ----------------------------- Captured stderr call ----------------------------- 4072s W: Download is performed unsandboxed as root as file '/tmp/tmp57g0_56b/root/var/lib/apt/lists/partial/archive.ubuntu.com_ubuntu_dists_jammy_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 4072s E: Can not find version '7.81.0-1ubuntu1.2' of package 'curl' 4072s E: Unable to find a source package for curl 4072s ________________ test_create_sources_for_a_named_ppa[one-line] _________________ 4072s 4072s configdir = '/tmp/tmpk62ni5dn/config', rootdir = '/tmp/tmpk62ni5dn/root' 4072s apt_style = 'one-line' 4072s 4072s @skip_if_command_is_missing("gpg") 4072s @pytest.mark.skipif(not has_internet(), reason="online test") 4072s def test_create_sources_for_a_named_ppa(configdir, rootdir, apt_style): 4072s """Add sources.list entries for a named PPA.""" 4072s ppa = "LP-PPA-daisy-pluckers-daisy-seeds" 4072s release = _setup_foonux_config(configdir, apt_style) 4072s # pylint: disable=protected-access 4072s impl._build_apt_sandbox( 4072s rootdir, os.path.join(configdir, release), "ubuntu", "jammy", origins=[ppa] 4072s ) 4072s if WITH_DEB822_SUPPORT: 4072s ppasource = os.path.join( 4072s rootdir, "etc", "apt", "sources.list.d", f"{ppa}.sources" 4072s ) 4072s entries = _parse_deb822_sources(ppasource) 4072s assert [ 4072s e 4072s for e in entries 4072s if {"deb", "deb-src"} == set(e.types) 4072s and "jammy" in e.suites 4072s and "main" in e.comps 4072s and "http://ppa.launchpad.net/" 4072s "daisy-pluckers/daisy-seeds/ubuntu" in e.uris 4072s ] 4072s assert [ 4072s e 4072s for e in entries 4072s if "deb" in e.types 4072s and "jammy" in e.suites 4072s and "main/debug" in e.comps 4072s and "http://ppa.launchpad.net/" 4072s "daisy-pluckers/daisy-seeds/ubuntu" in e.uris 4072s ] 4072s else: 4072s with open( 4072s os.path.join(rootdir, "etc", "apt", "sources.list.d", f"{ppa}.list"), 4072s encoding="utf-8", 4072s ) as f: 4072s sources = f.read().splitlines() 4072s assert ( 4072s "deb http://ppa.launchpad.net/daisy-pluckers/daisy-seeds/ubuntu" 4072s " jammy main main/debug" in sources 4072s ) 4072s assert ( 4072s "deb-src http://ppa.launchpad.net/daisy-pluckers/daisy-seeds/ubuntu" 4072s " jammy main" in sources 4072s ) 4072s 4072s gpg = subprocess.run( 4072s [ 4072s "gpg", 4072s "--no-options", 4072s "--no-default-keyring", 4072s "--no-auto-check-trustdb", 4072s "--trust-model", 4072s "always", 4072s "--batch", 4072s "--list-keys", 4072s "--keyring", 4072s os.path.join( 4072s rootdir, 4072s "etc", 4072s "apt", 4072s "trusted.gpg.d", 4072s "LP-PPA-daisy-pluckers-daisy-seeds.gpg", 4072s ), 4072s ], 4072s check=True, 4072s stdout=subprocess.PIPE, 4072s ) 4072s apt_keys = gpg.stdout.decode() 4072s > assert "Launchpad PPA for Daisy Pluckers" in apt_keys 4072s E AssertionError: assert 'Launchpad PPA for Daisy Pluckers' in '' 4072s 4072s tests/system/test_packaging_apt_dpkg.py:783: AssertionError 4072s ----------------------------- Captured stdout call ----------------------------- 4072s Executing: /tmp/apt-key-gpghome.IJcPKPeTU2/gpg.1.sh --quiet --keyserver keyserver.ubuntu.com --recv-key EE4C183F8F691A32EAF73FDC26A03F88AD6B4C33 4072s ----------------------------- Captured stderr call ----------------------------- 4072s Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)). 4072s gpg: keyserver receive failed: Network is unreachable 4072s WARNING: Unable to import key for https://api.launchpad.net/devel/~daisy-pluckers/+archive/ubuntu/daisy-seeds 4072s _________________ test_create_sources_for_a_named_ppa[deb822] __________________ 4072s 4072s configdir = '/tmp/tmpt33rpf4y/config', rootdir = '/tmp/tmpt33rpf4y/root' 4072s apt_style = 'deb822' 4072s 4072s @skip_if_command_is_missing("gpg") 4072s @pytest.mark.skipif(not has_internet(), reason="online test") 4072s def test_create_sources_for_a_named_ppa(configdir, rootdir, apt_style): 4072s """Add sources.list entries for a named PPA.""" 4072s ppa = "LP-PPA-daisy-pluckers-daisy-seeds" 4072s release = _setup_foonux_config(configdir, apt_style) 4072s # pylint: disable=protected-access 4072s impl._build_apt_sandbox( 4072s rootdir, os.path.join(configdir, release), "ubuntu", "jammy", origins=[ppa] 4072s ) 4072s if WITH_DEB822_SUPPORT: 4072s ppasource = os.path.join( 4072s rootdir, "etc", "apt", "sources.list.d", f"{ppa}.sources" 4072s ) 4072s entries = _parse_deb822_sources(ppasource) 4072s assert [ 4072s e 4072s for e in entries 4072s if {"deb", "deb-src"} == set(e.types) 4072s and "jammy" in e.suites 4072s and "main" in e.comps 4072s and "http://ppa.launchpad.net/" 4072s "daisy-pluckers/daisy-seeds/ubuntu" in e.uris 4072s ] 4072s assert [ 4072s e 4072s for e in entries 4072s if "deb" in e.types 4072s and "jammy" in e.suites 4072s and "main/debug" in e.comps 4072s and "http://ppa.launchpad.net/" 4072s "daisy-pluckers/daisy-seeds/ubuntu" in e.uris 4072s ] 4072s else: 4072s with open( 4072s os.path.join(rootdir, "etc", "apt", "sources.list.d", f"{ppa}.list"), 4072s encoding="utf-8", 4072s ) as f: 4072s sources = f.read().splitlines() 4072s assert ( 4072s "deb http://ppa.launchpad.net/daisy-pluckers/daisy-seeds/ubuntu" 4072s " jammy main main/debug" in sources 4072s ) 4072s assert ( 4072s "deb-src http://ppa.launchpad.net/daisy-pluckers/daisy-seeds/ubuntu" 4072s " jammy main" in sources 4072s ) 4072s 4072s gpg = subprocess.run( 4072s [ 4072s "gpg", 4072s "--no-options", 4072s "--no-default-keyring", 4072s "--no-auto-check-trustdb", 4072s "--trust-model", 4072s "always", 4072s "--batch", 4072s "--list-keys", 4072s "--keyring", 4072s os.path.join( 4072s rootdir, 4072s "etc", 4072s "apt", 4072s "trusted.gpg.d", 4072s "LP-PPA-daisy-pluckers-daisy-seeds.gpg", 4072s ), 4072s ], 4072s check=True, 4072s stdout=subprocess.PIPE, 4072s ) 4072s apt_keys = gpg.stdout.decode() 4072s > assert "Launchpad PPA for Daisy Pluckers" in apt_keys 4072s E AssertionError: assert 'Launchpad PPA for Daisy Pluckers' in '' 4072s 4072s tests/system/test_packaging_apt_dpkg.py:783: AssertionError 4072s ----------------------------- Captured stdout call ----------------------------- 4072s Executing: /tmp/apt-key-gpghome.xdZUFYg0KQ/gpg.1.sh --quiet --keyserver keyserver.ubuntu.com --recv-key EE4C183F8F691A32EAF73FDC26A03F88AD6B4C33 4072s ----------------------------- Captured stderr call ----------------------------- 4072s Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)). 4072s gpg: keyserver receive failed: Connection timed out 4072s WARNING: Unable to import key for https://api.launchpad.net/devel/~daisy-pluckers/+archive/ubuntu/daisy-seeds 4072s __________________ test_install_package_from_a_ppa[one-line] ___________________ 4072s 4072s self = 4072s fetch_progress = 4072s pulse_interval = 0, raise_on_error = True, sources_list = None 4072s 4072s def update( 4072s self, 4072s fetch_progress: AcquireProgress | None = None, 4072s pulse_interval: int = 0, 4072s raise_on_error: bool = True, 4072s sources_list: str | None = None, 4072s ) -> int: 4072s """Run the equivalent of apt-get update. 4072s 4072s You probably want to call open() afterwards, in order to utilise the 4072s new cache. Otherwise, the old cache will be used which can lead to 4072s strange bugs. 4072s 4072s The first parameter *fetch_progress* may be set to an instance of 4072s apt.progress.FetchProgress, the default is apt.progress.FetchProgress() 4072s . 4072s sources_list -- Update a alternative sources.list than the default. 4072s Note that the sources.list.d directory is ignored in this case 4072s """ 4072s with _WrappedLock(apt_pkg.config.find_dir("Dir::State::Lists")): 4072s if sources_list: 4072s old_sources_list = apt_pkg.config.find("Dir::Etc::sourcelist") 4072s old_sources_list_d = apt_pkg.config.find("Dir::Etc::sourceparts") 4072s old_cleanup = apt_pkg.config.find("APT::List-Cleanup") 4072s apt_pkg.config.set( 4072s "Dir::Etc::sourcelist", os.path.abspath(sources_list) 4072s ) 4072s apt_pkg.config.set("Dir::Etc::sourceparts", "xxx") 4072s apt_pkg.config.set("APT::List-Cleanup", "0") 4072s slist = apt_pkg.SourceList() 4072s slist.read_main_list() 4072s else: 4072s slist = self._list 4072s 4072s try: 4072s if fetch_progress is None: 4072s fetch_progress = apt.progress.base.AcquireProgress() 4072s try: 4072s > res = self._cache.update(fetch_progress, slist, pulse_interval) 4072s E apt_pkg.Error: W:Download is performed unsandboxed as root as file '/tmp/tmpr4emvh2n/cache/Foonux 22.04/apt/var/lib/apt/lists/partial/archive.ubuntu.com_ubuntu_dists_jammy_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied), W:GPG error: http://ppa.launchpad.net/apport-hackers/apport-autopkgtests/ubuntu jammy InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY AAD2CE78135EFFF5, E:The repository 'http://ppa.launchpad.net/apport-hackers/apport-autopkgtests/ubuntu jammy InRelease' is not signed. 4072s 4072s /usr/lib/python3/dist-packages/apt/cache.py:562: Error 4072s 4072s During handling of the above exception, another exception occurred: 4072s 4072s self = 4072s aptroot = '/tmp/tmpr4emvh2n/cache/Foonux 22.04/apt' 4072s apt_dir = '/tmp/tmpr4emvh2n/config/Foonux 22.04' 4072s fetchProgress = 4072s distro_name = 'ubuntu', release_codename = 'jammy' 4072s origins = ['LP-PPA-apport-hackers-apport-autopkgtests'], arch = 'amd64' 4072s 4072s def _sandbox_cache( 4072s self, 4072s aptroot, 4072s apt_dir, 4072s fetchProgress, 4072s distro_name, 4072s release_codename, 4072s origins, 4072s arch, 4072s ): # pylint: disable=too-many-arguments 4072s """Build apt sandbox and return apt.Cache(rootdir=) (initialized 4072s lazily). 4072s 4072s Clear the package selection on subsequent calls. 4072s """ 4072s if not self._sandbox_apt_cache or arch != self._sandbox_apt_cache_arch: 4072s self._clear_apt_cache() 4072s self._build_apt_sandbox( 4072s aptroot, apt_dir, distro_name, release_codename, origins 4072s ) 4072s rootdir = os.path.abspath(aptroot) 4072s self._sandbox_apt_cache = apt.Cache(rootdir=rootdir) 4072s self._sandbox_apt_cache_arch = arch 4072s try: 4072s # We don't need to update this multiple times. 4072s > self._sandbox_apt_cache.update(fetchProgress) 4072s 4072s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:261: 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s 4072s self = 4072s fetch_progress = 4072s pulse_interval = 0, raise_on_error = True, sources_list = None 4072s 4072s def update( 4072s self, 4072s fetch_progress: AcquireProgress | None = None, 4072s pulse_interval: int = 0, 4072s raise_on_error: bool = True, 4072s sources_list: str | None = None, 4072s ) -> int: 4072s """Run the equivalent of apt-get update. 4072s 4072s You probably want to call open() afterwards, in order to utilise the 4072s new cache. Otherwise, the old cache will be used which can lead to 4072s strange bugs. 4072s 4072s The first parameter *fetch_progress* may be set to an instance of 4072s apt.progress.FetchProgress, the default is apt.progress.FetchProgress() 4072s . 4072s sources_list -- Update a alternative sources.list than the default. 4072s Note that the sources.list.d directory is ignored in this case 4072s """ 4072s with _WrappedLock(apt_pkg.config.find_dir("Dir::State::Lists")): 4072s if sources_list: 4072s old_sources_list = apt_pkg.config.find("Dir::Etc::sourcelist") 4072s old_sources_list_d = apt_pkg.config.find("Dir::Etc::sourceparts") 4072s old_cleanup = apt_pkg.config.find("APT::List-Cleanup") 4072s apt_pkg.config.set( 4072s "Dir::Etc::sourcelist", os.path.abspath(sources_list) 4072s ) 4072s apt_pkg.config.set("Dir::Etc::sourceparts", "xxx") 4072s apt_pkg.config.set("APT::List-Cleanup", "0") 4072s slist = apt_pkg.SourceList() 4072s slist.read_main_list() 4072s else: 4072s slist = self._list 4072s 4072s try: 4072s if fetch_progress is None: 4072s fetch_progress = apt.progress.base.AcquireProgress() 4072s try: 4072s res = self._cache.update(fetch_progress, slist, pulse_interval) 4072s except SystemError as e: 4072s > raise FetchFailedException(e) 4072s E apt.cache.FetchFailedException: W:Download is performed unsandboxed as root as file '/tmp/tmpr4emvh2n/cache/Foonux 22.04/apt/var/lib/apt/lists/partial/archive.ubuntu.com_ubuntu_dists_jammy_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied), W:GPG error: http://ppa.launchpad.net/apport-hackers/apport-autopkgtests/ubuntu jammy InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY AAD2CE78135EFFF5, E:The repository 'http://ppa.launchpad.net/apport-hackers/apport-autopkgtests/ubuntu jammy InRelease' is not signed. 4072s 4072s /usr/lib/python3/dist-packages/apt/cache.py:564: FetchFailedException 4072s 4072s The above exception was the direct cause of the following exception: 4072s 4072s configdir = '/tmp/tmpr4emvh2n/config', cachedir = '/tmp/tmpr4emvh2n/cache' 4072s rootdir = '/tmp/tmpr4emvh2n/root', apt_style = 'one-line' 4072s 4072s @pytest.mark.skipif(not has_internet(), reason="online test") 4072s def test_install_package_from_a_ppa(configdir, cachedir, rootdir, apt_style): 4072s """Install a package from a PPA.""" 4072s # Needs apport package in https://launchpad.net 4072s # /~apport-hackers/+archive/ubuntu/apport-autopkgtests 4072s ppa = "LP-PPA-apport-hackers-apport-autopkgtests" 4072s release = _setup_foonux_config(configdir, apt_style) 4072s wanted_package = "apport" 4072s wanted_version = "2.20.11-0ubuntu82.1~ppa2" 4072s > obsolete = impl.install_packages( 4072s rootdir, 4072s configdir, 4072s release, 4072s [(wanted_package, wanted_version)], 4072s False, 4072s cachedir, 4072s origins=[ppa], 4072s ) 4072s 4072s tests/system/test_packaging_apt_dpkg.py:904: 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:936: in install_packages 4072s apt_cache = self._sandbox_cache( 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s 4072s self = 4072s aptroot = '/tmp/tmpr4emvh2n/cache/Foonux 22.04/apt' 4072s apt_dir = '/tmp/tmpr4emvh2n/config/Foonux 22.04' 4072s fetchProgress = 4072s distro_name = 'ubuntu', release_codename = 'jammy' 4072s origins = ['LP-PPA-apport-hackers-apport-autopkgtests'], arch = 'amd64' 4072s 4072s def _sandbox_cache( 4072s self, 4072s aptroot, 4072s apt_dir, 4072s fetchProgress, 4072s distro_name, 4072s release_codename, 4072s origins, 4072s arch, 4072s ): # pylint: disable=too-many-arguments 4072s """Build apt sandbox and return apt.Cache(rootdir=) (initialized 4072s lazily). 4072s 4072s Clear the package selection on subsequent calls. 4072s """ 4072s if not self._sandbox_apt_cache or arch != self._sandbox_apt_cache_arch: 4072s self._clear_apt_cache() 4072s self._build_apt_sandbox( 4072s aptroot, apt_dir, distro_name, release_codename, origins 4072s ) 4072s rootdir = os.path.abspath(aptroot) 4072s self._sandbox_apt_cache = apt.Cache(rootdir=rootdir) 4072s self._sandbox_apt_cache_arch = arch 4072s try: 4072s # We don't need to update this multiple times. 4072s self._sandbox_apt_cache.update(fetchProgress) 4072s except apt.cache.FetchFailedException as error: 4072s > raise SystemError(str(error)) from error 4072s E SystemError: W:Download is performed unsandboxed as root as file '/tmp/tmpr4emvh2n/cache/Foonux 22.04/apt/var/lib/apt/lists/partial/archive.ubuntu.com_ubuntu_dists_jammy_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied), W:GPG error: http://ppa.launchpad.net/apport-hackers/apport-autopkgtests/ubuntu jammy InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY AAD2CE78135EFFF5, E:The repository 'http://ppa.launchpad.net/apport-hackers/apport-autopkgtests/ubuntu jammy InRelease' is not signed. 4072s 4072s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:263: SystemError 4072s ----------------------------- Captured stdout call ----------------------------- 4072s Executing: /tmp/apt-key-gpghome.MNnfrsth6N/gpg.1.sh --quiet --keyserver keyserver.ubuntu.com --recv-key F5038FF7E3E2B0346DF1A7A7AAD2CE78135EFFF5 4072s ----------------------------- Captured stderr call ----------------------------- 4072s Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)). 4072s gpg: keyserver receive failed: Connection timed out 4072s WARNING: Unable to import key for https://api.launchpad.net/devel/~apport-hackers/+archive/ubuntu/apport-autopkgtests 4072s ___________________ test_install_package_from_a_ppa[deb822] ____________________ 4072s 4072s self = 4072s fetch_progress = 4072s pulse_interval = 0, raise_on_error = True, sources_list = None 4072s 4072s def update( 4072s self, 4072s fetch_progress: AcquireProgress | None = None, 4072s pulse_interval: int = 0, 4072s raise_on_error: bool = True, 4072s sources_list: str | None = None, 4072s ) -> int: 4072s """Run the equivalent of apt-get update. 4072s 4072s You probably want to call open() afterwards, in order to utilise the 4072s new cache. Otherwise, the old cache will be used which can lead to 4072s strange bugs. 4072s 4072s The first parameter *fetch_progress* may be set to an instance of 4072s apt.progress.FetchProgress, the default is apt.progress.FetchProgress() 4072s . 4072s sources_list -- Update a alternative sources.list than the default. 4072s Note that the sources.list.d directory is ignored in this case 4072s """ 4072s with _WrappedLock(apt_pkg.config.find_dir("Dir::State::Lists")): 4072s if sources_list: 4072s old_sources_list = apt_pkg.config.find("Dir::Etc::sourcelist") 4072s old_sources_list_d = apt_pkg.config.find("Dir::Etc::sourceparts") 4072s old_cleanup = apt_pkg.config.find("APT::List-Cleanup") 4072s apt_pkg.config.set( 4072s "Dir::Etc::sourcelist", os.path.abspath(sources_list) 4072s ) 4072s apt_pkg.config.set("Dir::Etc::sourceparts", "xxx") 4072s apt_pkg.config.set("APT::List-Cleanup", "0") 4072s slist = apt_pkg.SourceList() 4072s slist.read_main_list() 4072s else: 4072s slist = self._list 4072s 4072s try: 4072s if fetch_progress is None: 4072s fetch_progress = apt.progress.base.AcquireProgress() 4072s try: 4072s > res = self._cache.update(fetch_progress, slist, pulse_interval) 4072s E apt_pkg.Error: W:Updating from such a repository can't be done securely, and is therefore disabled by default., W:See apt-secure(8) manpage for repository creation and user configuration details., W:Download is performed unsandboxed as root as file '/tmp/tmps6m0bwvy/cache/Foonux 22.04/apt/var/lib/apt/lists/partial/ppa.launchpad.net_apport-hackers_apport-autopkgtests_ubuntu_dists_jammy_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied), W:GPG error: http://ppa.launchpad.net/apport-hackers/apport-autopkgtests/ubuntu jammy InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY AAD2CE78135EFFF5, E:The repository 'http://ppa.launchpad.net/apport-hackers/apport-autopkgtests/ubuntu jammy InRelease' is not signed. 4072s 4072s /usr/lib/python3/dist-packages/apt/cache.py:562: Error 4072s 4072s During handling of the above exception, another exception occurred: 4072s 4072s self = 4072s aptroot = '/tmp/tmps6m0bwvy/cache/Foonux 22.04/apt' 4072s apt_dir = '/tmp/tmps6m0bwvy/config/Foonux 22.04' 4072s fetchProgress = 4072s distro_name = 'ubuntu', release_codename = 'jammy' 4072s origins = ['LP-PPA-apport-hackers-apport-autopkgtests'], arch = 'amd64' 4072s 4072s def _sandbox_cache( 4072s self, 4072s aptroot, 4072s apt_dir, 4072s fetchProgress, 4072s distro_name, 4072s release_codename, 4072s origins, 4072s arch, 4072s ): # pylint: disable=too-many-arguments 4072s """Build apt sandbox and return apt.Cache(rootdir=) (initialized 4072s lazily). 4072s 4072s Clear the package selection on subsequent calls. 4072s """ 4072s if not self._sandbox_apt_cache or arch != self._sandbox_apt_cache_arch: 4072s self._clear_apt_cache() 4072s self._build_apt_sandbox( 4072s aptroot, apt_dir, distro_name, release_codename, origins 4072s ) 4072s rootdir = os.path.abspath(aptroot) 4072s self._sandbox_apt_cache = apt.Cache(rootdir=rootdir) 4072s self._sandbox_apt_cache_arch = arch 4072s try: 4072s # We don't need to update this multiple times. 4072s > self._sandbox_apt_cache.update(fetchProgress) 4072s 4072s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:261: 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s 4072s self = 4072s fetch_progress = 4072s pulse_interval = 0, raise_on_error = True, sources_list = None 4072s 4072s def update( 4072s self, 4072s fetch_progress: AcquireProgress | None = None, 4072s pulse_interval: int = 0, 4072s raise_on_error: bool = True, 4072s sources_list: str | None = None, 4072s ) -> int: 4072s """Run the equivalent of apt-get update. 4072s 4072s You probably want to call open() afterwards, in order to utilise the 4072s new cache. Otherwise, the old cache will be used which can lead to 4072s strange bugs. 4072s 4072s The first parameter *fetch_progress* may be set to an instance of 4072s apt.progress.FetchProgress, the default is apt.progress.FetchProgress() 4072s . 4072s sources_list -- Update a alternative sources.list than the default. 4072s Note that the sources.list.d directory is ignored in this case 4072s """ 4072s with _WrappedLock(apt_pkg.config.find_dir("Dir::State::Lists")): 4072s if sources_list: 4072s old_sources_list = apt_pkg.config.find("Dir::Etc::sourcelist") 4072s old_sources_list_d = apt_pkg.config.find("Dir::Etc::sourceparts") 4072s old_cleanup = apt_pkg.config.find("APT::List-Cleanup") 4072s apt_pkg.config.set( 4072s "Dir::Etc::sourcelist", os.path.abspath(sources_list) 4072s ) 4072s apt_pkg.config.set("Dir::Etc::sourceparts", "xxx") 4072s apt_pkg.config.set("APT::List-Cleanup", "0") 4072s slist = apt_pkg.SourceList() 4072s slist.read_main_list() 4072s else: 4072s slist = self._list 4072s 4072s try: 4072s if fetch_progress is None: 4072s fetch_progress = apt.progress.base.AcquireProgress() 4072s try: 4072s res = self._cache.update(fetch_progress, slist, pulse_interval) 4072s except SystemError as e: 4072s > raise FetchFailedException(e) 4072s E apt.cache.FetchFailedException: W:Updating from such a repository can't be done securely, and is therefore disabled by default., W:See apt-secure(8) manpage for repository creation and user configuration details., W:Download is performed unsandboxed as root as file '/tmp/tmps6m0bwvy/cache/Foonux 22.04/apt/var/lib/apt/lists/partial/ppa.launchpad.net_apport-hackers_apport-autopkgtests_ubuntu_dists_jammy_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied), W:GPG error: http://ppa.launchpad.net/apport-hackers/apport-autopkgtests/ubuntu jammy InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY AAD2CE78135EFFF5, E:The repository 'http://ppa.launchpad.net/apport-hackers/apport-autopkgtests/ubuntu jammy InRelease' is not signed. 4072s 4072s /usr/lib/python3/dist-packages/apt/cache.py:564: FetchFailedException 4072s 4072s The above exception was the direct cause of the following exception: 4072s 4072s configdir = '/tmp/tmps6m0bwvy/config', cachedir = '/tmp/tmps6m0bwvy/cache' 4072s rootdir = '/tmp/tmps6m0bwvy/root', apt_style = 'deb822' 4072s 4072s @pytest.mark.skipif(not has_internet(), reason="online test") 4072s def test_install_package_from_a_ppa(configdir, cachedir, rootdir, apt_style): 4072s """Install a package from a PPA.""" 4072s # Needs apport package in https://launchpad.net 4072s # /~apport-hackers/+archive/ubuntu/apport-autopkgtests 4072s ppa = "LP-PPA-apport-hackers-apport-autopkgtests" 4072s release = _setup_foonux_config(configdir, apt_style) 4072s wanted_package = "apport" 4072s wanted_version = "2.20.11-0ubuntu82.1~ppa2" 4072s > obsolete = impl.install_packages( 4072s rootdir, 4072s configdir, 4072s release, 4072s [(wanted_package, wanted_version)], 4072s False, 4072s cachedir, 4072s origins=[ppa], 4072s ) 4072s 4072s tests/system/test_packaging_apt_dpkg.py:904: 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:936: in install_packages 4072s apt_cache = self._sandbox_cache( 4072s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4072s 4072s self = 4072s aptroot = '/tmp/tmps6m0bwvy/cache/Foonux 22.04/apt' 4072s apt_dir = '/tmp/tmps6m0bwvy/config/Foonux 22.04' 4072s fetchProgress = 4072s distro_name = 'ubuntu', release_codename = 'jammy' 4072s origins = ['LP-PPA-apport-hackers-apport-autopkgtests'], arch = 'amd64' 4072s 4072s def _sandbox_cache( 4072s self, 4072s aptroot, 4072s apt_dir, 4072s fetchProgress, 4072s distro_name, 4072s release_codename, 4072s origins, 4072s arch, 4072s ): # pylint: disable=too-many-arguments 4072s """Build apt sandbox and return apt.Cache(rootdir=) (initialized 4072s lazily). 4072s 4072s Clear the package selection on subsequent calls. 4072s """ 4072s if not self._sandbox_apt_cache or arch != self._sandbox_apt_cache_arch: 4072s self._clear_apt_cache() 4072s self._build_apt_sandbox( 4072s aptroot, apt_dir, distro_name, release_codename, origins 4072s ) 4072s rootdir = os.path.abspath(aptroot) 4072s self._sandbox_apt_cache = apt.Cache(rootdir=rootdir) 4072s self._sandbox_apt_cache_arch = arch 4072s try: 4072s # We don't need to update this multiple times. 4072s self._sandbox_apt_cache.update(fetchProgress) 4072s except apt.cache.FetchFailedException as error: 4072s > raise SystemError(str(error)) from error 4072s E SystemError: W:Updating from such a repository can't be done securely, and is therefore disabled by default., W:See apt-secure(8) manpage for repository creation and user configuration details., W:Download is performed unsandboxed as root as file '/tmp/tmps6m0bwvy/cache/Foonux 22.04/apt/var/lib/apt/lists/partial/ppa.launchpad.net_apport-hackers_apport-autopkgtests_ubuntu_dists_jammy_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied), W:GPG error: http://ppa.launchpad.net/apport-hackers/apport-autopkgtests/ubuntu jammy InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY AAD2CE78135EFFF5, E:The repository 'http://ppa.launchpad.net/apport-hackers/apport-autopkgtests/ubuntu jammy InRelease' is not signed. 4072s 4072s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:263: SystemError 4072s ----------------------------- Captured stdout call ----------------------------- 4072s Executing: /tmp/apt-key-gpghome.wJDY9Bb7Js/gpg.1.sh --quiet --keyserver keyserver.ubuntu.com --recv-key F5038FF7E3E2B0346DF1A7A7AAD2CE78135EFFF5 4072s ----------------------------- Captured stderr call ----------------------------- 4072s Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)). 4072s gpg: keyserver receive failed: Connection timed out 4072s WARNING: Unable to import key for https://api.launchpad.net/devel/~apport-hackers/+archive/ubuntu/apport-autopkgtests 4072s =============================== warnings summary =============================== 4072s tests/system/test_packaging_apt_dpkg.py::test_install_packages_versioned[one-line] 4072s tests/system/test_packaging_apt_dpkg.py::test_install_packages_versioned[one-line] 4072s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmp2lmnvnl6/cache/Foonux 22.04/apt/var/lib/apt/lists/partial/archive.ubuntu.com_ubuntu_dists_jammy_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 4072s res = self._cache.update(fetch_progress, slist, pulse_interval) 4072s 4072s tests/system/test_packaging_apt_dpkg.py: 30 warnings 4072s /usr/lib/python3/dist-packages/httplib2/__init__.py:147: DeprecationWarning: ssl.PROTOCOL_TLS is deprecated 4072s context = ssl.SSLContext(DEFAULT_TLS_VERSION) 4072s 4072s tests/system/test_packaging_apt_dpkg.py::test_install_packages_versioned[deb822] 4072s tests/system/test_packaging_apt_dpkg.py::test_install_packages_versioned[deb822] 4072s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmp5wpmwo6w/cache/Foonux 22.04/apt/var/lib/apt/lists/partial/archive.ubuntu.com_ubuntu_dists_jammy_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 4072s res = self._cache.update(fetch_progress, slist, pulse_interval) 4072s 4072s tests/system/test_packaging_apt_dpkg.py::test_install_packages_system[one-line] 4072s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmpdnrqbhrz/cache/system/apt/var/lib/apt/lists/partial/ftpmaster.internal_ubuntu_dists_noble-proposed_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 4072s res = self._cache.update(fetch_progress, slist, pulse_interval) 4072s 4072s tests/system/test_packaging_apt_dpkg.py::test_install_packages_system[deb822] 4072s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmph7wdp7d7/cache/system/apt/var/lib/apt/lists/partial/ftpmaster.internal_ubuntu_dists_noble-proposed_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 4072s res = self._cache.update(fetch_progress, slist, pulse_interval) 4072s 4072s tests/system/test_packaging_apt_dpkg.py::test_install_packages_permanent_sandbox[one-line] 4072s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Updating from such a repository can't be done securely, and is therefore disabled by default., W:See apt-secure(8) manpage for repository creation and user configuration details., W:Download is performed unsandboxed as root as file '/tmp/tmpo8pcm8w7/cache/Foonux 22.04/apt/var/lib/apt/lists/partial/archive.ubuntu.com_ubuntu_dists_jammy_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 4072s res = self._cache.update(fetch_progress, slist, pulse_interval) 4072s 4072s tests/system/test_packaging_apt_dpkg.py::test_install_packages_permanent_sandbox[deb822] 4072s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmpw3tg3992/cache/Foonux 22.04/apt/var/lib/apt/lists/partial/archive.ubuntu.com_ubuntu_dists_jammy_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 4072s res = self._cache.update(fetch_progress, slist, pulse_interval) 4072s 4072s tests/system/test_packaging_apt_dpkg.py::test_install_packages_permanent_sandbox_repack[one-line] 4072s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmpm1xijiyj/cache/Foonux 22.04/apt/var/lib/apt/lists/partial/archive.ubuntu.com_ubuntu_dists_jammy_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 4072s res = self._cache.update(fetch_progress, slist, pulse_interval) 4072s 4072s tests/system/test_packaging_apt_dpkg.py::test_install_packages_permanent_sandbox_repack[deb822] 4072s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmpl21webxp/cache/Foonux 22.04/apt/var/lib/apt/lists/partial/archive.ubuntu.com_ubuntu_dists_jammy_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 4072s res = self._cache.update(fetch_progress, slist, pulse_interval) 4072s 4072s tests/system/test_packaging_apt_dpkg.py::test_install_packages_armhf[one-line] 4072s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmpvogmriyg/cache/Foonux 22.04/armhf/apt/var/lib/apt/lists/partial/ports.ubuntu.com_ubuntu-ports_dists_jammy_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 4072s res = self._cache.update(fetch_progress, slist, pulse_interval) 4072s 4072s tests/system/test_packaging_apt_dpkg.py::test_install_packages_armhf[deb822] 4072s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmp_ps0wh7u/cache/Foonux 22.04/armhf/apt/var/lib/apt/lists/partial/ports.ubuntu.com_ubuntu-ports_dists_jammy_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 4072s res = self._cache.update(fetch_progress, slist, pulse_interval) 4072s 4072s tests/system/test_packaging_apt_dpkg.py::test_install_packages_from_launchpad[one-line] 4072s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmpi9uhkktf/cache/Foonux 20.04/apt/var/lib/apt/lists/partial/archive.ubuntu.com_ubuntu_dists_focal_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 4072s res = self._cache.update(fetch_progress, slist, pulse_interval) 4072s 4072s tests/system/test_packaging_apt_dpkg.py::test_install_packages_from_launchpad[deb822] 4072s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmp0sj6j3pc/cache/Foonux 20.04/apt/var/lib/apt/lists/partial/archive.ubuntu.com_ubuntu_dists_focal_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 4072s res = self._cache.update(fetch_progress, slist, pulse_interval) 4072s 4072s tests/system/test_packaging_apt_dpkg.py::test_install_old_packages[one-line] 4072s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmpcrw6zpcd/cache/Foonux 22.04/apt/var/lib/apt/lists/partial/archive.ubuntu.com_ubuntu_dists_jammy_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 4072s res = self._cache.update(fetch_progress, slist, pulse_interval) 4072s 4072s tests/system/test_packaging_apt_dpkg.py::test_install_old_packages[deb822] 4072s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmpl589y_lj/cache/Foonux 22.04/apt/var/lib/apt/lists/partial/archive.ubuntu.com_ubuntu_dists_jammy_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 4072s res = self._cache.update(fetch_progress, slist, pulse_interval) 4072s 4072s -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html 4072s =========================== short test summary info ============================ 4072s SKIPPED [1] tests/system/test_signal_crashes.py:221: Please remove all crash reports from /var/crash/ for this test suite: 4072s /var/crash/_usr_bin_apport-retrace.0.crash 4072s SKIPPED [1] tests/system/test_signal_crashes.py:314: Please remove all crash reports from /var/crash/ for this test suite: 4072s /var/crash/_usr_bin_apport-retrace.0.crash 4072s SKIPPED [1] tests/system/test_signal_crashes.py:305: Please remove all crash reports from /var/crash/ for this test suite: 4072s /var/crash/_usr_bin_apport-retrace.0.crash 4072s SKIPPED [1] tests/system/test_signal_crashes.py:149: Please remove all crash reports from /var/crash/ for this test suite: 4072s /var/crash/_usr_bin_apport-retrace.0.crash 4072s FAILED tests/system/test_apport_retrace.py::test_retrace_system_sandbox - sub... 4072s FAILED tests/system/test_apport_retrace.py::test_retrace_system_sandbox_gdb_sandbox 4072s FAILED tests/system/test_apport_retrace.py::test_retrace_jammy_sandbox - subp... 4072s FAILED tests/system/test_apport_retrace.py::test_retrace_jammy_sandbox_gdb_sandbox 4072s FAILED tests/system/test_apport_valgrind.py::TestApportValgrind::test_sandbox_cache_options 4072s FAILED tests/system/test_packaging_apt_dpkg.py::test_install_packages_system[one-line] 4072s FAILED tests/system/test_packaging_apt_dpkg.py::test_install_packages_system[deb822] 4072s FAILED tests/system/test_packaging_apt_dpkg.py::test_install_packages_from_launchpad[one-line] 4072s FAILED tests/system/test_packaging_apt_dpkg.py::test_install_packages_from_launchpad[deb822] 4072s FAILED tests/system/test_packaging_apt_dpkg.py::test_install_old_packages[one-line] 4072s FAILED tests/system/test_packaging_apt_dpkg.py::test_install_old_packages[deb822] 4072s FAILED tests/system/test_packaging_apt_dpkg.py::test_get_source_tree_lp_sandbox[one-line] 4072s FAILED tests/system/test_packaging_apt_dpkg.py::test_get_source_tree_lp_sandbox[deb822] 4072s FAILED tests/system/test_packaging_apt_dpkg.py::test_create_sources_for_a_named_ppa[one-line] 4072s FAILED tests/system/test_packaging_apt_dpkg.py::test_create_sources_for_a_named_ppa[deb822] 4072s FAILED tests/system/test_packaging_apt_dpkg.py::test_install_package_from_a_ppa[one-line] 4072s FAILED tests/system/test_packaging_apt_dpkg.py::test_install_package_from_a_ppa[deb822] 4072s ====== 17 failed, 81 passed, 4 skipped, 46 warnings in 3797.21s (1:03:17) ====== 4072s autopkgtest [00:07:58]: test system-tests: -----------------------] 4073s system-tests FAIL non-zero exit status 1 4073s autopkgtest [00:07:59]: test system-tests: - - - - - - - - - - results - - - - - - - - - - 4073s autopkgtest [00:07:59]: @@@@@@@@@@@@@@@@@@@@ summary 4073s unit-and-integration-tests PASS 4073s system-tests FAIL non-zero exit status 1