0s autopkgtest [17:20:11]: starting date and time: 2024-11-12 17:20:11+0000 0s autopkgtest [17:20:11]: git checkout: 6f3be7a8 Fix armhf LXD image generation for plucky 0s autopkgtest [17:20:11]: host juju-7f2275-prod-proposed-migration-environment-15; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.n14jlfly/out --timeout-copy=6000 -a i386 --setup-commands /home/ubuntu/autopkgtest-cloud/worker-config-production/setup-canonical.sh --apt-pocket=proposed=src:xorg-server --apt-upgrade apport --timeout-short=300 --timeout-copy=20000 --timeout-build=20000 --env=ADT_TEST_TRIGGERS=xorg-server/2:21.1.14-2ubuntu1 -- ssh -s /home/ubuntu/autopkgtest/ssh-setup/nova -- --flavor builder-cpu2-ram4-disk20 --security-groups autopkgtest-juju-7f2275-prod-proposed-migration-environment-15@bos03-31.secgroup --name adt-plucky-i386-apport-20241112-172010-juju-7f2275-prod-proposed-migration-environment-15-231ba15e-0758-4fdf-9cb5-197e03e5972b --image adt/ubuntu-plucky-amd64-server --keyname testbed-juju-7f2275-prod-proposed-migration-environment-15 --net-id=net_prod-proposed-migration-amd64 -e TERM=linux -e ''"'"'http_proxy=http://squid.internal:3128'"'"'' -e ''"'"'https_proxy=http://squid.internal:3128'"'"'' -e ''"'"'no_proxy=127.0.0.1,127.0.1.1,login.ubuntu.com,localhost,localdomain,novalocal,internal,archive.ubuntu.com,ports.ubuntu.com,security.ubuntu.com,ddebs.ubuntu.com,changelogs.ubuntu.com,keyserver.ubuntu.com,launchpadlibrarian.net,launchpadcontent.net,launchpad.net,10.24.0.0/24,keystone.ps5.canonical.com,objectstorage.prodstack5.canonical.com'"'"'' --mirror=http://ftpmaster.internal/ubuntu/ 50s autopkgtest [17:21:01]: testbed dpkg architecture: amd64 50s autopkgtest [17:21:01]: testbed apt version: 2.9.8 50s autopkgtest [17:21:01]: test architecture: i386 50s autopkgtest [17:21:01]: @@@@@@@@@@@@@@@@@@@@ test bed setup 51s Get:1 http://ftpmaster.internal/ubuntu plucky-proposed InRelease [73.9 kB] 51s Get:2 http://ftpmaster.internal/ubuntu plucky-proposed/universe Sources [859 kB] 52s Get:3 http://ftpmaster.internal/ubuntu plucky-proposed/multiverse Sources [15.3 kB] 52s Get:4 http://ftpmaster.internal/ubuntu plucky-proposed/restricted Sources [7016 B] 52s Get:5 http://ftpmaster.internal/ubuntu plucky-proposed/main Sources [89.0 kB] 52s Get:6 http://ftpmaster.internal/ubuntu plucky-proposed/main i386 Packages [77.5 kB] 52s Get:7 http://ftpmaster.internal/ubuntu plucky-proposed/main amd64 Packages [128 kB] 52s Get:8 http://ftpmaster.internal/ubuntu plucky-proposed/restricted amd64 Packages [32.6 kB] 52s Get:9 http://ftpmaster.internal/ubuntu plucky-proposed/universe amd64 Packages [659 kB] 52s Get:10 http://ftpmaster.internal/ubuntu plucky-proposed/universe i386 Packages [273 kB] 52s Get:11 http://ftpmaster.internal/ubuntu plucky-proposed/multiverse i386 Packages [13.0 kB] 52s Get:12 http://ftpmaster.internal/ubuntu plucky-proposed/multiverse amd64 Packages [37.7 kB] 52s Fetched 2266 kB in 2s (1472 kB/s) 53s Reading package lists... 55s Reading package lists... 55s Building dependency tree... 55s Reading state information... 55s Calculating upgrade... 55s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 55s Reading package lists... 56s Building dependency tree... 56s Reading state information... 56s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 56s Hit:1 http://ftpmaster.internal/ubuntu plucky-proposed InRelease 56s Hit:2 http://ftpmaster.internal/ubuntu plucky InRelease 56s Hit:3 http://ftpmaster.internal/ubuntu plucky-updates InRelease 56s Hit:4 http://ftpmaster.internal/ubuntu plucky-security InRelease 57s Reading package lists... 57s Reading package lists... 57s Building dependency tree... 57s Reading state information... 57s Calculating upgrade... 58s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 58s Reading package lists... 58s Building dependency tree... 58s Reading state information... 58s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 61s autopkgtest [17:21:12]: testbed running kernel: Linux 6.11.0-8-generic #8-Ubuntu SMP PREEMPT_DYNAMIC Mon Sep 16 13:41:20 UTC 2024 61s autopkgtest [17:21:12]: @@@@@@@@@@@@@@@@@@@@ apt-source apport 69s Get:1 http://ftpmaster.internal/ubuntu plucky/main apport 2.30.0-0ubuntu4 (dsc) [3346 B] 69s Get:2 http://ftpmaster.internal/ubuntu plucky/main apport 2.30.0-0ubuntu4 (tar) [674 kB] 69s Get:3 http://ftpmaster.internal/ubuntu plucky/main apport 2.30.0-0ubuntu4 (diff) [152 kB] 69s gpgv: Signature made Thu Oct 3 14:41:21 2024 UTC 69s gpgv: using RSA key 6C9D10484A9AE4CC385F7C71823E967606C34B96 69s gpgv: issuer "utkarsh@ubuntu.com" 69s gpgv: Can't check signature: No public key 69s dpkg-source: warning: cannot verify inline signature for ./apport_2.30.0-0ubuntu4.dsc: no acceptable signature found 69s autopkgtest [17:21:20]: testing package apport version 2.30.0-0ubuntu4 70s autopkgtest [17:21:21]: build not needed 70s autopkgtest [17:21:21]: test unit-and-integration-tests: preparing testbed 73s Note, using file '/tmp/autopkgtest.BBDYUq/1-autopkgtest-satdep.dsc' to get the build dependencies 73s Reading package lists... 73s Building dependency tree... 73s Reading state information... 73s Starting pkgProblemResolver with broken count: 0 73s Starting 2 pkgProblemResolver with broken count: 0 73s Done 74s The following NEW packages will be installed: 74s apport-retrace apport-valgrind build-essential ca-certificates-java cpp 74s cpp-14 cpp-14-x86-64-linux-gnu cpp-x86-64-linux-gnu default-jdk-headless 74s default-jre-headless dictionaries-common emacsen-common g++ g++-14 74s g++-14-x86-64-linux-gnu g++-x86-64-linux-gnu gcc gcc-14 74s gcc-14-x86-64-linux-gnu gcc-x86-64-linux-gnu gdb java-common libasan8 74s libbabeltrace1 libc6-dbg libcc1-0 libdebuginfod-common libdebuginfod1t64 74s libgcc-14-dev libgomp1 libhwasan0 libipt2 libisl23 libitm1 libjpeg-turbo8 74s libjpeg8 liblcms2-2 liblsan0 libmpc3 libpcsclite1 libquadmath0 74s libsource-highlight-common libsource-highlight4t64 libstdc++-14-dev libtsan2 74s libubsan1 openjdk-21-jdk-headless openjdk-21-jre-headless python3-iniconfig 74s python3-packaging python3-pluggy python3-psutil python3-pytest 74s python3-zstandard valgrind 74s 0 upgraded, 55 newly installed, 0 to remove and 0 not upgraded. 74s Need to get 223 MB of archives. 74s After this operation, 631 MB of additional disk space will be used. 74s Get:1 http://ftpmaster.internal/ubuntu plucky/main amd64 libdebuginfod-common all 0.192-4 [15.4 kB] 74s Get:2 http://ftpmaster.internal/ubuntu plucky/main amd64 libbabeltrace1 amd64 1.5.11-4 [164 kB] 74s Get:3 http://ftpmaster.internal/ubuntu plucky/main amd64 libdebuginfod1t64 amd64 0.192-4 [21.0 kB] 74s Get:4 http://ftpmaster.internal/ubuntu plucky/main amd64 libipt2 amd64 2.1.1-1 [58.9 kB] 74s Get:5 http://ftpmaster.internal/ubuntu plucky/main amd64 libsource-highlight-common all 3.1.9-4.3build1 [64.2 kB] 74s Get:6 http://ftpmaster.internal/ubuntu plucky/main amd64 libsource-highlight4t64 amd64 3.1.9-4.3build1 [258 kB] 75s Get:7 http://ftpmaster.internal/ubuntu plucky/main amd64 gdb amd64 15.1-1ubuntu2 [4119 kB] 80s Get:8 http://ftpmaster.internal/ubuntu plucky/main amd64 libc6-dbg amd64 2.40-1ubuntu3 [7627 kB] 89s Get:9 http://ftpmaster.internal/ubuntu plucky/main amd64 apport-retrace all 2.30.0-0ubuntu4 [14.6 kB] 89s Get:10 http://ftpmaster.internal/ubuntu plucky/main amd64 valgrind amd64 1:3.23.0-0ubuntu2 [14.7 MB] 106s Get:11 http://ftpmaster.internal/ubuntu plucky/universe amd64 apport-valgrind all 2.30.0-0ubuntu4 [5226 B] 106s Get:12 http://ftpmaster.internal/ubuntu plucky/main amd64 libisl23 amd64 0.27-1 [685 kB] 107s Get:13 http://ftpmaster.internal/ubuntu plucky/main amd64 libmpc3 amd64 1.3.1-1build2 [55.3 kB] 107s Get:14 http://ftpmaster.internal/ubuntu plucky/main amd64 cpp-14-x86-64-linux-gnu amd64 14.2.0-7ubuntu1 [11.9 MB] 117s Get:15 http://ftpmaster.internal/ubuntu plucky/main amd64 cpp-14 amd64 14.2.0-7ubuntu1 [1026 B] 118s Get:16 http://ftpmaster.internal/ubuntu plucky/main amd64 cpp-x86-64-linux-gnu amd64 4:14.1.0-2ubuntu1 [5452 B] 118s Get:17 http://ftpmaster.internal/ubuntu plucky/main amd64 cpp amd64 4:14.1.0-2ubuntu1 [22.4 kB] 118s Get:18 http://ftpmaster.internal/ubuntu plucky/main amd64 libcc1-0 amd64 14.2.0-7ubuntu1 [47.6 kB] 118s Get:19 http://ftpmaster.internal/ubuntu plucky/main amd64 libgomp1 amd64 14.2.0-7ubuntu1 [148 kB] 118s Get:20 http://ftpmaster.internal/ubuntu plucky/main amd64 libitm1 amd64 14.2.0-7ubuntu1 [29.1 kB] 118s Get:21 http://ftpmaster.internal/ubuntu plucky/main amd64 libasan8 amd64 14.2.0-7ubuntu1 [2998 kB] 121s Get:22 http://ftpmaster.internal/ubuntu plucky/main amd64 liblsan0 amd64 14.2.0-7ubuntu1 [1316 kB] 123s Get:23 http://ftpmaster.internal/ubuntu plucky/main amd64 libtsan2 amd64 14.2.0-7ubuntu1 [2733 kB] 125s Get:24 http://ftpmaster.internal/ubuntu plucky/main amd64 libubsan1 amd64 14.2.0-7ubuntu1 [1177 kB] 126s Get:25 http://ftpmaster.internal/ubuntu plucky/main amd64 libhwasan0 amd64 14.2.0-7ubuntu1 [1634 kB] 128s Get:26 http://ftpmaster.internal/ubuntu plucky/main amd64 libquadmath0 amd64 14.2.0-7ubuntu1 [153 kB] 128s Get:27 http://ftpmaster.internal/ubuntu plucky/main amd64 libgcc-14-dev amd64 14.2.0-7ubuntu1 [2814 kB] 131s Get:28 http://ftpmaster.internal/ubuntu plucky/main amd64 gcc-14-x86-64-linux-gnu amd64 14.2.0-7ubuntu1 [23.4 MB] 161s Get:29 http://ftpmaster.internal/ubuntu plucky/main amd64 gcc-14 amd64 14.2.0-7ubuntu1 [526 kB] 161s Get:30 http://ftpmaster.internal/ubuntu plucky/main amd64 gcc-x86-64-linux-gnu amd64 4:14.1.0-2ubuntu1 [1214 B] 161s Get:31 http://ftpmaster.internal/ubuntu plucky/main amd64 gcc amd64 4:14.1.0-2ubuntu1 [5000 B] 161s Get:32 http://ftpmaster.internal/ubuntu plucky/main amd64 libstdc++-14-dev amd64 14.2.0-7ubuntu1 [2503 kB] 164s Get:33 http://ftpmaster.internal/ubuntu plucky/main amd64 g++-14-x86-64-linux-gnu amd64 14.2.0-7ubuntu1 [13.4 MB] 177s Get:34 http://ftpmaster.internal/ubuntu plucky/main amd64 g++-14 amd64 14.2.0-7ubuntu1 [19.8 kB] 178s Get:35 http://ftpmaster.internal/ubuntu plucky/main amd64 g++-x86-64-linux-gnu amd64 4:14.1.0-2ubuntu1 [966 B] 178s Get:36 http://ftpmaster.internal/ubuntu plucky/main amd64 g++ amd64 4:14.1.0-2ubuntu1 [1100 B] 178s Get:37 http://ftpmaster.internal/ubuntu plucky/main amd64 build-essential amd64 12.10ubuntu1 [4928 B] 178s Get:38 http://ftpmaster.internal/ubuntu plucky/main amd64 ca-certificates-java all 20240118 [11.6 kB] 178s Get:39 http://ftpmaster.internal/ubuntu plucky/main amd64 java-common all 0.76 [6852 B] 178s Get:40 http://ftpmaster.internal/ubuntu plucky/main amd64 liblcms2-2 amd64 2.16-2 [212 kB] 178s Get:41 http://ftpmaster.internal/ubuntu plucky/main amd64 libjpeg-turbo8 amd64 2.1.5-2ubuntu2 [150 kB] 178s Get:42 http://ftpmaster.internal/ubuntu plucky/main amd64 libjpeg8 amd64 8c-2ubuntu11 [2148 B] 179s Get:43 http://ftpmaster.internal/ubuntu plucky/main amd64 libpcsclite1 amd64 2.3.0-1 [23.9 kB] 179s Get:44 http://ftpmaster.internal/ubuntu plucky/main amd64 openjdk-21-jre-headless amd64 21.0.5+11-1 [46.4 MB] 204s Get:45 http://ftpmaster.internal/ubuntu plucky/main amd64 default-jre-headless amd64 2:1.21-76 [3178 B] 204s Get:46 http://ftpmaster.internal/ubuntu plucky/main amd64 openjdk-21-jdk-headless amd64 21.0.5+11-1 [82.8 MB] 209s Get:47 http://ftpmaster.internal/ubuntu plucky/main amd64 default-jdk-headless amd64 2:1.21-76 [966 B] 209s Get:48 http://ftpmaster.internal/ubuntu plucky/main amd64 emacsen-common all 3.0.5 [12.1 kB] 209s Get:49 http://ftpmaster.internal/ubuntu plucky/main amd64 dictionaries-common all 1.29.7 [188 kB] 209s Get:50 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-iniconfig all 1.1.1-2 [6024 B] 209s Get:51 http://ftpmaster.internal/ubuntu plucky/main amd64 python3-packaging all 24.1-1 [41.4 kB] 209s Get:52 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-pluggy all 1.5.0-1 [21.0 kB] 209s Get:53 http://ftpmaster.internal/ubuntu plucky/main amd64 python3-psutil amd64 5.9.8-2build2 [195 kB] 209s Get:54 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-pytest all 8.3.3-1 [251 kB] 209s Get:55 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-zstandard amd64 0.23.0-2 [362 kB] 210s Preconfiguring packages ... 210s Fetched 223 MB in 2min 16s (1646 kB/s) 210s Selecting previously unselected package libdebuginfod-common. 210s (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 ... 75553 files and directories currently installed.) 210s Preparing to unpack .../00-libdebuginfod-common_0.192-4_all.deb ... 210s Unpacking libdebuginfod-common (0.192-4) ... 210s Selecting previously unselected package libbabeltrace1:amd64. 210s Preparing to unpack .../01-libbabeltrace1_1.5.11-4_amd64.deb ... 210s Unpacking libbabeltrace1:amd64 (1.5.11-4) ... 210s Selecting previously unselected package libdebuginfod1t64:amd64. 210s Preparing to unpack .../02-libdebuginfod1t64_0.192-4_amd64.deb ... 210s Unpacking libdebuginfod1t64:amd64 (0.192-4) ... 210s Selecting previously unselected package libipt2. 210s Preparing to unpack .../03-libipt2_2.1.1-1_amd64.deb ... 210s Unpacking libipt2 (2.1.1-1) ... 210s Selecting previously unselected package libsource-highlight-common. 210s Preparing to unpack .../04-libsource-highlight-common_3.1.9-4.3build1_all.deb ... 210s Unpacking libsource-highlight-common (3.1.9-4.3build1) ... 210s Selecting previously unselected package libsource-highlight4t64:amd64. 210s Preparing to unpack .../05-libsource-highlight4t64_3.1.9-4.3build1_amd64.deb ... 210s Unpacking libsource-highlight4t64:amd64 (3.1.9-4.3build1) ... 210s Selecting previously unselected package gdb. 210s Preparing to unpack .../06-gdb_15.1-1ubuntu2_amd64.deb ... 210s Unpacking gdb (15.1-1ubuntu2) ... 210s Selecting previously unselected package libc6-dbg:amd64. 210s Preparing to unpack .../07-libc6-dbg_2.40-1ubuntu3_amd64.deb ... 210s Unpacking libc6-dbg:amd64 (2.40-1ubuntu3) ... 210s Selecting previously unselected package apport-retrace. 210s Preparing to unpack .../08-apport-retrace_2.30.0-0ubuntu4_all.deb ... 210s Unpacking apport-retrace (2.30.0-0ubuntu4) ... 210s Selecting previously unselected package valgrind. 210s Preparing to unpack .../09-valgrind_1%3a3.23.0-0ubuntu2_amd64.deb ... 210s Unpacking valgrind (1:3.23.0-0ubuntu2) ... 211s Selecting previously unselected package apport-valgrind. 211s Preparing to unpack .../10-apport-valgrind_2.30.0-0ubuntu4_all.deb ... 211s Unpacking apport-valgrind (2.30.0-0ubuntu4) ... 211s Selecting previously unselected package libisl23:amd64. 211s Preparing to unpack .../11-libisl23_0.27-1_amd64.deb ... 211s Unpacking libisl23:amd64 (0.27-1) ... 211s Selecting previously unselected package libmpc3:amd64. 211s Preparing to unpack .../12-libmpc3_1.3.1-1build2_amd64.deb ... 211s Unpacking libmpc3:amd64 (1.3.1-1build2) ... 211s Selecting previously unselected package cpp-14-x86-64-linux-gnu. 211s Preparing to unpack .../13-cpp-14-x86-64-linux-gnu_14.2.0-7ubuntu1_amd64.deb ... 211s Unpacking cpp-14-x86-64-linux-gnu (14.2.0-7ubuntu1) ... 211s Selecting previously unselected package cpp-14. 211s Preparing to unpack .../14-cpp-14_14.2.0-7ubuntu1_amd64.deb ... 211s Unpacking cpp-14 (14.2.0-7ubuntu1) ... 211s Selecting previously unselected package cpp-x86-64-linux-gnu. 211s Preparing to unpack .../15-cpp-x86-64-linux-gnu_4%3a14.1.0-2ubuntu1_amd64.deb ... 211s Unpacking cpp-x86-64-linux-gnu (4:14.1.0-2ubuntu1) ... 211s Selecting previously unselected package cpp. 211s Preparing to unpack .../16-cpp_4%3a14.1.0-2ubuntu1_amd64.deb ... 211s Unpacking cpp (4:14.1.0-2ubuntu1) ... 211s Selecting previously unselected package libcc1-0:amd64. 211s Preparing to unpack .../17-libcc1-0_14.2.0-7ubuntu1_amd64.deb ... 211s Unpacking libcc1-0:amd64 (14.2.0-7ubuntu1) ... 211s Selecting previously unselected package libgomp1:amd64. 211s Preparing to unpack .../18-libgomp1_14.2.0-7ubuntu1_amd64.deb ... 211s Unpacking libgomp1:amd64 (14.2.0-7ubuntu1) ... 211s Selecting previously unselected package libitm1:amd64. 211s Preparing to unpack .../19-libitm1_14.2.0-7ubuntu1_amd64.deb ... 211s Unpacking libitm1:amd64 (14.2.0-7ubuntu1) ... 211s Selecting previously unselected package libasan8:amd64. 211s Preparing to unpack .../20-libasan8_14.2.0-7ubuntu1_amd64.deb ... 211s Unpacking libasan8:amd64 (14.2.0-7ubuntu1) ... 211s Selecting previously unselected package liblsan0:amd64. 211s Preparing to unpack .../21-liblsan0_14.2.0-7ubuntu1_amd64.deb ... 211s Unpacking liblsan0:amd64 (14.2.0-7ubuntu1) ... 211s Selecting previously unselected package libtsan2:amd64. 211s Preparing to unpack .../22-libtsan2_14.2.0-7ubuntu1_amd64.deb ... 211s Unpacking libtsan2:amd64 (14.2.0-7ubuntu1) ... 211s Selecting previously unselected package libubsan1:amd64. 211s Preparing to unpack .../23-libubsan1_14.2.0-7ubuntu1_amd64.deb ... 211s Unpacking libubsan1:amd64 (14.2.0-7ubuntu1) ... 211s Selecting previously unselected package libhwasan0:amd64. 211s Preparing to unpack .../24-libhwasan0_14.2.0-7ubuntu1_amd64.deb ... 211s Unpacking libhwasan0:amd64 (14.2.0-7ubuntu1) ... 211s Selecting previously unselected package libquadmath0:amd64. 211s Preparing to unpack .../25-libquadmath0_14.2.0-7ubuntu1_amd64.deb ... 211s Unpacking libquadmath0:amd64 (14.2.0-7ubuntu1) ... 211s Selecting previously unselected package libgcc-14-dev:amd64. 211s Preparing to unpack .../26-libgcc-14-dev_14.2.0-7ubuntu1_amd64.deb ... 211s Unpacking libgcc-14-dev:amd64 (14.2.0-7ubuntu1) ... 211s Selecting previously unselected package gcc-14-x86-64-linux-gnu. 211s Preparing to unpack .../27-gcc-14-x86-64-linux-gnu_14.2.0-7ubuntu1_amd64.deb ... 211s Unpacking gcc-14-x86-64-linux-gnu (14.2.0-7ubuntu1) ... 212s Selecting previously unselected package gcc-14. 212s Preparing to unpack .../28-gcc-14_14.2.0-7ubuntu1_amd64.deb ... 212s Unpacking gcc-14 (14.2.0-7ubuntu1) ... 212s Selecting previously unselected package gcc-x86-64-linux-gnu. 212s Preparing to unpack .../29-gcc-x86-64-linux-gnu_4%3a14.1.0-2ubuntu1_amd64.deb ... 212s Unpacking gcc-x86-64-linux-gnu (4:14.1.0-2ubuntu1) ... 212s Selecting previously unselected package gcc. 212s Preparing to unpack .../30-gcc_4%3a14.1.0-2ubuntu1_amd64.deb ... 212s Unpacking gcc (4:14.1.0-2ubuntu1) ... 212s Selecting previously unselected package libstdc++-14-dev:amd64. 212s Preparing to unpack .../31-libstdc++-14-dev_14.2.0-7ubuntu1_amd64.deb ... 212s Unpacking libstdc++-14-dev:amd64 (14.2.0-7ubuntu1) ... 212s Selecting previously unselected package g++-14-x86-64-linux-gnu. 212s Preparing to unpack .../32-g++-14-x86-64-linux-gnu_14.2.0-7ubuntu1_amd64.deb ... 212s Unpacking g++-14-x86-64-linux-gnu (14.2.0-7ubuntu1) ... 212s Selecting previously unselected package g++-14. 212s Preparing to unpack .../33-g++-14_14.2.0-7ubuntu1_amd64.deb ... 212s Unpacking g++-14 (14.2.0-7ubuntu1) ... 212s Selecting previously unselected package g++-x86-64-linux-gnu. 212s Preparing to unpack .../34-g++-x86-64-linux-gnu_4%3a14.1.0-2ubuntu1_amd64.deb ... 212s Unpacking g++-x86-64-linux-gnu (4:14.1.0-2ubuntu1) ... 212s Selecting previously unselected package g++. 212s Preparing to unpack .../35-g++_4%3a14.1.0-2ubuntu1_amd64.deb ... 212s Unpacking g++ (4:14.1.0-2ubuntu1) ... 212s Selecting previously unselected package build-essential. 212s Preparing to unpack .../36-build-essential_12.10ubuntu1_amd64.deb ... 212s Unpacking build-essential (12.10ubuntu1) ... 212s Selecting previously unselected package ca-certificates-java. 212s Preparing to unpack .../37-ca-certificates-java_20240118_all.deb ... 212s Unpacking ca-certificates-java (20240118) ... 212s Selecting previously unselected package java-common. 212s Preparing to unpack .../38-java-common_0.76_all.deb ... 212s Unpacking java-common (0.76) ... 212s Selecting previously unselected package liblcms2-2:amd64. 212s Preparing to unpack .../39-liblcms2-2_2.16-2_amd64.deb ... 212s Unpacking liblcms2-2:amd64 (2.16-2) ... 212s Selecting previously unselected package libjpeg-turbo8:amd64. 212s Preparing to unpack .../40-libjpeg-turbo8_2.1.5-2ubuntu2_amd64.deb ... 212s Unpacking libjpeg-turbo8:amd64 (2.1.5-2ubuntu2) ... 212s Selecting previously unselected package libjpeg8:amd64. 212s Preparing to unpack .../41-libjpeg8_8c-2ubuntu11_amd64.deb ... 212s Unpacking libjpeg8:amd64 (8c-2ubuntu11) ... 212s Selecting previously unselected package libpcsclite1:amd64. 212s Preparing to unpack .../42-libpcsclite1_2.3.0-1_amd64.deb ... 212s Unpacking libpcsclite1:amd64 (2.3.0-1) ... 212s Selecting previously unselected package openjdk-21-jre-headless:amd64. 212s Preparing to unpack .../43-openjdk-21-jre-headless_21.0.5+11-1_amd64.deb ... 212s Unpacking openjdk-21-jre-headless:amd64 (21.0.5+11-1) ... 213s Selecting previously unselected package default-jre-headless. 213s Preparing to unpack .../44-default-jre-headless_2%3a1.21-76_amd64.deb ... 213s Unpacking default-jre-headless (2:1.21-76) ... 213s Selecting previously unselected package openjdk-21-jdk-headless:amd64. 213s Preparing to unpack .../45-openjdk-21-jdk-headless_21.0.5+11-1_amd64.deb ... 213s Unpacking openjdk-21-jdk-headless:amd64 (21.0.5+11-1) ... 214s Selecting previously unselected package default-jdk-headless. 214s Preparing to unpack .../46-default-jdk-headless_2%3a1.21-76_amd64.deb ... 214s Unpacking default-jdk-headless (2:1.21-76) ... 214s Selecting previously unselected package emacsen-common. 214s Preparing to unpack .../47-emacsen-common_3.0.5_all.deb ... 214s Unpacking emacsen-common (3.0.5) ... 214s Selecting previously unselected package dictionaries-common. 214s Preparing to unpack .../48-dictionaries-common_1.29.7_all.deb ... 214s Adding 'diversion of /usr/share/dict/words to /usr/share/dict/words.pre-dictionaries-common by dictionaries-common' 214s Unpacking dictionaries-common (1.29.7) ... 214s Selecting previously unselected package python3-iniconfig. 214s Preparing to unpack .../49-python3-iniconfig_1.1.1-2_all.deb ... 214s Unpacking python3-iniconfig (1.1.1-2) ... 214s Selecting previously unselected package python3-packaging. 214s Preparing to unpack .../50-python3-packaging_24.1-1_all.deb ... 214s Unpacking python3-packaging (24.1-1) ... 214s Selecting previously unselected package python3-pluggy. 214s Preparing to unpack .../51-python3-pluggy_1.5.0-1_all.deb ... 214s Unpacking python3-pluggy (1.5.0-1) ... 214s Selecting previously unselected package python3-psutil. 214s Preparing to unpack .../52-python3-psutil_5.9.8-2build2_amd64.deb ... 214s Unpacking python3-psutil (5.9.8-2build2) ... 214s Selecting previously unselected package python3-pytest. 214s Preparing to unpack .../53-python3-pytest_8.3.3-1_all.deb ... 214s Unpacking python3-pytest (8.3.3-1) ... 214s Selecting previously unselected package python3-zstandard. 214s Preparing to unpack .../54-python3-zstandard_0.23.0-2_amd64.deb ... 214s Unpacking python3-zstandard (0.23.0-2) ... 214s Setting up liblcms2-2:amd64 (2.16-2) ... 214s Setting up python3-iniconfig (1.1.1-2) ... 214s Setting up java-common (0.76) ... 214s Setting up libdebuginfod-common (0.192-4) ... 214s Setting up libgomp1:amd64 (14.2.0-7ubuntu1) ... 214s Setting up python3-psutil (5.9.8-2build2) ... 214s Setting up libsource-highlight-common (3.1.9-4.3build1) ... 214s Setting up libc6-dbg:amd64 (2.40-1ubuntu3) ... 214s Setting up python3-zstandard (0.23.0-2) ... 214s Setting up python3-packaging (24.1-1) ... 214s Setting up emacsen-common (3.0.5) ... 215s Setting up libquadmath0:amd64 (14.2.0-7ubuntu1) ... 215s Setting up libmpc3:amd64 (1.3.1-1build2) ... 215s Setting up libipt2 (2.1.1-1) ... 215s Setting up libpcsclite1:amd64 (2.3.0-1) ... 215s Setting up libjpeg-turbo8:amd64 (2.1.5-2ubuntu2) ... 215s Setting up libbabeltrace1:amd64 (1.5.11-4) ... 215s Setting up python3-pluggy (1.5.0-1) ... 215s Setting up libubsan1:amd64 (14.2.0-7ubuntu1) ... 215s Setting up libhwasan0:amd64 (14.2.0-7ubuntu1) ... 215s Setting up libasan8:amd64 (14.2.0-7ubuntu1) ... 215s Setting up libtsan2:amd64 (14.2.0-7ubuntu1) ... 215s Setting up ca-certificates-java (20240118) ... 215s No JRE found. Skipping Java certificates setup. 215s Setting up libisl23:amd64 (0.27-1) ... 215s Setting up valgrind (1:3.23.0-0ubuntu2) ... 215s Setting up libcc1-0:amd64 (14.2.0-7ubuntu1) ... 215s Setting up liblsan0:amd64 (14.2.0-7ubuntu1) ... 215s Setting up libitm1:amd64 (14.2.0-7ubuntu1) ... 215s Setting up libjpeg8:amd64 (8c-2ubuntu11) ... 215s Setting up libdebuginfod1t64:amd64 (0.192-4) ... 215s Setting up openjdk-21-jre-headless:amd64 (21.0.5+11-1) ... 215s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/java to provide /usr/bin/java (java) in auto mode 215s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jpackage to provide /usr/bin/jpackage (jpackage) in auto mode 215s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode 215s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode 215s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode 215s Setting up dictionaries-common (1.29.7) ... 215s Setting up python3-pytest (8.3.3-1) ... 215s Setting up apport-valgrind (2.30.0-0ubuntu4) ... 215s Setting up libsource-highlight4t64:amd64 (3.1.9-4.3build1) ... 215s Setting up gdb (15.1-1ubuntu2) ... 215s Setting up cpp-14-x86-64-linux-gnu (14.2.0-7ubuntu1) ... 215s Setting up cpp-14 (14.2.0-7ubuntu1) ... 215s Setting up libgcc-14-dev:amd64 (14.2.0-7ubuntu1) ... 215s Setting up libstdc++-14-dev:amd64 (14.2.0-7ubuntu1) ... 215s Setting up cpp-x86-64-linux-gnu (4:14.1.0-2ubuntu1) ... 215s Setting up apport-retrace (2.30.0-0ubuntu4) ... 215s Setting up cpp (4:14.1.0-2ubuntu1) ... 215s Setting up gcc-14-x86-64-linux-gnu (14.2.0-7ubuntu1) ... 215s Setting up gcc-x86-64-linux-gnu (4:14.1.0-2ubuntu1) ... 215s Setting up gcc-14 (14.2.0-7ubuntu1) ... 215s Setting up g++-14-x86-64-linux-gnu (14.2.0-7ubuntu1) ... 215s Setting up g++-x86-64-linux-gnu (4:14.1.0-2ubuntu1) ... 215s Setting up g++-14 (14.2.0-7ubuntu1) ... 215s Setting up gcc (4:14.1.0-2ubuntu1) ... 215s Setting up g++ (4:14.1.0-2ubuntu1) ... 215s update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mode 215s Setting up build-essential (12.10ubuntu1) ... 215s Processing triggers for libc-bin (2.40-1ubuntu3) ... 215s Processing triggers for man-db (2.12.1-3) ... 217s Processing triggers for ca-certificates-java (20240118) ... 217s Adding debian:ACCVRAIZ1.pem 217s Adding debian:AC_RAIZ_FNMT-RCM.pem 217s Adding debian:AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.pem 217s Adding debian:ANF_Secure_Server_Root_CA.pem 217s Adding debian:Actalis_Authentication_Root_CA.pem 217s Adding debian:AffirmTrust_Commercial.pem 217s Adding debian:AffirmTrust_Networking.pem 217s Adding debian:AffirmTrust_Premium.pem 217s Adding debian:AffirmTrust_Premium_ECC.pem 217s Adding debian:Amazon_Root_CA_1.pem 217s Adding debian:Amazon_Root_CA_2.pem 217s Adding debian:Amazon_Root_CA_3.pem 217s Adding debian:Amazon_Root_CA_4.pem 217s Adding debian:Atos_TrustedRoot_2011.pem 217s Adding debian:Atos_TrustedRoot_Root_CA_ECC_TLS_2021.pem 217s Adding debian:Atos_TrustedRoot_Root_CA_RSA_TLS_2021.pem 217s Adding debian:Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.pem 217s Adding debian:BJCA_Global_Root_CA1.pem 217s Adding debian:BJCA_Global_Root_CA2.pem 217s Adding debian:Baltimore_CyberTrust_Root.pem 217s Adding debian:Buypass_Class_2_Root_CA.pem 217s Adding debian:Buypass_Class_3_Root_CA.pem 217s Adding debian:CA_Disig_Root_R2.pem 217s Adding debian:CFCA_EV_ROOT.pem 217s Adding debian:COMODO_Certification_Authority.pem 217s Adding debian:COMODO_ECC_Certification_Authority.pem 217s Adding debian:COMODO_RSA_Certification_Authority.pem 217s Adding debian:Certainly_Root_E1.pem 217s Adding debian:Certainly_Root_R1.pem 217s Adding debian:Certigna.pem 217s Adding debian:Certigna_Root_CA.pem 217s Adding debian:Certum_EC-384_CA.pem 217s Adding debian:Certum_Trusted_Network_CA.pem 217s Adding debian:Certum_Trusted_Network_CA_2.pem 217s Adding debian:Certum_Trusted_Root_CA.pem 217s Adding debian:CommScope_Public_Trust_ECC_Root-01.pem 217s Adding debian:CommScope_Public_Trust_ECC_Root-02.pem 217s Adding debian:CommScope_Public_Trust_RSA_Root-01.pem 217s Adding debian:CommScope_Public_Trust_RSA_Root-02.pem 217s Adding debian:Comodo_AAA_Services_root.pem 217s Adding debian:D-TRUST_BR_Root_CA_1_2020.pem 217s Adding debian:D-TRUST_EV_Root_CA_1_2020.pem 217s Adding debian:D-TRUST_Root_Class_3_CA_2_2009.pem 217s Adding debian:D-TRUST_Root_Class_3_CA_2_EV_2009.pem 217s Adding debian:DigiCert_Assured_ID_Root_CA.pem 217s Adding debian:DigiCert_Assured_ID_Root_G2.pem 217s Adding debian:DigiCert_Assured_ID_Root_G3.pem 217s Adding debian:DigiCert_Global_Root_CA.pem 217s Adding debian:DigiCert_Global_Root_G2.pem 217s Adding debian:DigiCert_Global_Root_G3.pem 217s Adding debian:DigiCert_High_Assurance_EV_Root_CA.pem 217s Adding debian:DigiCert_TLS_ECC_P384_Root_G5.pem 217s Adding debian:DigiCert_TLS_RSA4096_Root_G5.pem 217s Adding debian:DigiCert_Trusted_Root_G4.pem 217s Adding debian:Entrust.net_Premium_2048_Secure_Server_CA.pem 217s Adding debian:Entrust_Root_Certification_Authority.pem 217s Adding debian:Entrust_Root_Certification_Authority_-_EC1.pem 217s Adding debian:Entrust_Root_Certification_Authority_-_G2.pem 217s Adding debian:Entrust_Root_Certification_Authority_-_G4.pem 217s Adding debian:GDCA_TrustAUTH_R5_ROOT.pem 217s Adding debian:GLOBALTRUST_2020.pem 217s Adding debian:GTS_Root_R1.pem 217s Adding debian:GTS_Root_R2.pem 217s Adding debian:GTS_Root_R3.pem 217s Adding debian:GTS_Root_R4.pem 217s Adding debian:GlobalSign_ECC_Root_CA_-_R4.pem 217s Adding debian:GlobalSign_ECC_Root_CA_-_R5.pem 217s Adding debian:GlobalSign_Root_CA.pem 217s Adding debian:GlobalSign_Root_CA_-_R3.pem 217s Adding debian:GlobalSign_Root_CA_-_R6.pem 217s Adding debian:GlobalSign_Root_E46.pem 217s Adding debian:GlobalSign_Root_R46.pem 217s Adding debian:Go_Daddy_Class_2_CA.pem 217s Adding debian:Go_Daddy_Root_Certificate_Authority_-_G2.pem 217s Adding debian:HARICA_TLS_ECC_Root_CA_2021.pem 217s Adding debian:HARICA_TLS_RSA_Root_CA_2021.pem 217s Adding debian:Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.pem 217s Adding debian:Hellenic_Academic_and_Research_Institutions_RootCA_2015.pem 217s Adding debian:HiPKI_Root_CA_-_G1.pem 217s Adding debian:Hongkong_Post_Root_CA_3.pem 217s Adding debian:ISRG_Root_X1.pem 217s Adding debian:ISRG_Root_X2.pem 217s Adding debian:IdenTrust_Commercial_Root_CA_1.pem 217s Adding debian:IdenTrust_Public_Sector_Root_CA_1.pem 217s Adding debian:Izenpe.com.pem 217s Adding debian:Microsec_e-Szigno_Root_CA_2009.pem 217s Adding debian:Microsoft_ECC_Root_Certificate_Authority_2017.pem 217s Adding debian:Microsoft_RSA_Root_Certificate_Authority_2017.pem 217s Adding debian:NAVER_Global_Root_Certification_Authority.pem 217s Adding debian:NetLock_Arany_=Class_Gold=_Főtanúsítvány.pem 217s Adding debian:OISTE_WISeKey_Global_Root_GB_CA.pem 217s Adding debian:OISTE_WISeKey_Global_Root_GC_CA.pem 217s Adding debian:QuoVadis_Root_CA_1_G3.pem 217s Adding debian:QuoVadis_Root_CA_2.pem 217s Adding debian:QuoVadis_Root_CA_2_G3.pem 217s Adding debian:QuoVadis_Root_CA_3.pem 217s Adding debian:QuoVadis_Root_CA_3_G3.pem 217s Adding debian:SSL.com_EV_Root_Certification_Authority_ECC.pem 217s Adding debian:SSL.com_EV_Root_Certification_Authority_RSA_R2.pem 217s Adding debian:SSL.com_Root_Certification_Authority_ECC.pem 217s Adding debian:SSL.com_Root_Certification_Authority_RSA.pem 217s Adding debian:SSL.com_TLS_ECC_Root_CA_2022.pem 217s Adding debian:SSL.com_TLS_RSA_Root_CA_2022.pem 217s Adding debian:SZAFIR_ROOT_CA2.pem 217s Adding debian:Sectigo_Public_Server_Authentication_Root_E46.pem 217s Adding debian:Sectigo_Public_Server_Authentication_Root_R46.pem 217s Adding debian:SecureSign_RootCA11.pem 217s Adding debian:SecureTrust_CA.pem 217s Adding debian:Secure_Global_CA.pem 217s Adding debian:Security_Communication_ECC_RootCA1.pem 217s Adding debian:Security_Communication_RootCA2.pem 217s Adding debian:Security_Communication_RootCA3.pem 217s Adding debian:Security_Communication_Root_CA.pem 217s Adding debian:Starfield_Class_2_CA.pem 217s Adding debian:Starfield_Root_Certificate_Authority_-_G2.pem 217s Adding debian:Starfield_Services_Root_Certificate_Authority_-_G2.pem 217s Adding debian:SwissSign_Gold_CA_-_G2.pem 217s Adding debian:SwissSign_Silver_CA_-_G2.pem 217s Adding debian:T-TeleSec_GlobalRoot_Class_2.pem 217s Adding debian:T-TeleSec_GlobalRoot_Class_3.pem 217s Adding debian:TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.pem 217s Adding debian:TWCA_Global_Root_CA.pem 217s Adding debian:TWCA_Root_Certification_Authority.pem 217s Adding debian:TeliaSonera_Root_CA_v1.pem 217s Adding debian:Telia_Root_CA_v2.pem 217s Adding debian:TrustAsia_Global_Root_CA_G3.pem 217s Adding debian:TrustAsia_Global_Root_CA_G4.pem 217s Adding debian:Trustwave_Global_Certification_Authority.pem 217s Adding debian:Trustwave_Global_ECC_P256_Certification_Authority.pem 217s Adding debian:Trustwave_Global_ECC_P384_Certification_Authority.pem 217s Adding debian:TunTrust_Root_CA.pem 217s Adding debian:UCA_Extended_Validation_Root.pem 217s Adding debian:UCA_Global_G2_Root.pem 217s Adding debian:USERTrust_ECC_Certification_Authority.pem 217s Adding debian:USERTrust_RSA_Certification_Authority.pem 217s Adding debian:XRamp_Global_CA_Root.pem 217s Adding debian:certSIGN_ROOT_CA.pem 217s Adding debian:certSIGN_Root_CA_G2.pem 217s Adding debian:e-Szigno_Root_CA_2017.pem 217s Adding debian:ePKI_Root_Certification_Authority.pem 217s Adding debian:emSign_ECC_Root_CA_-_C3.pem 217s Adding debian:emSign_ECC_Root_CA_-_G3.pem 217s Adding debian:emSign_Root_CA_-_C1.pem 217s Adding debian:emSign_Root_CA_-_G1.pem 217s Adding debian:vTrus_ECC_Root_CA.pem 217s Adding debian:vTrus_Root_CA.pem 217s done. 217s Setting up openjdk-21-jdk-headless:amd64 (21.0.5+11-1) ... 217s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jar to provide /usr/bin/jar (jar) in auto mode 217s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jarsigner to provide /usr/bin/jarsigner (jarsigner) in auto mode 217s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/javac to provide /usr/bin/javac (javac) in auto mode 217s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/javadoc to provide /usr/bin/javadoc (javadoc) in auto mode 217s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/javap to provide /usr/bin/javap (javap) in auto mode 217s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jcmd to provide /usr/bin/jcmd (jcmd) in auto mode 217s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jdb to provide /usr/bin/jdb (jdb) in auto mode 217s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jdeprscan to provide /usr/bin/jdeprscan (jdeprscan) in auto mode 217s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jdeps to provide /usr/bin/jdeps (jdeps) in auto mode 217s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jfr to provide /usr/bin/jfr (jfr) in auto mode 217s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jimage to provide /usr/bin/jimage (jimage) in auto mode 217s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jinfo to provide /usr/bin/jinfo (jinfo) in auto mode 217s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jlink to provide /usr/bin/jlink (jlink) in auto mode 217s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jmap to provide /usr/bin/jmap (jmap) in auto mode 217s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jmod to provide /usr/bin/jmod (jmod) in auto mode 217s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jps to provide /usr/bin/jps (jps) in auto mode 217s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jrunscript to provide /usr/bin/jrunscript (jrunscript) in auto mode 217s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jshell to provide /usr/bin/jshell (jshell) in auto mode 217s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jstack to provide /usr/bin/jstack (jstack) in auto mode 217s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jstat to provide /usr/bin/jstat (jstat) in auto mode 217s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jstatd to provide /usr/bin/jstatd (jstatd) in auto mode 217s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jwebserver to provide /usr/bin/jwebserver (jwebserver) in auto mode 217s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/serialver to provide /usr/bin/serialver (serialver) in auto mode 217s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jhsdb to provide /usr/bin/jhsdb (jhsdb) in auto mode 217s Setting up default-jre-headless (2:1.21-76) ... 217s Setting up default-jdk-headless (2:1.21-76) ... 217s Processing triggers for dictionaries-common (1.29.7) ... 231s Reading package lists... 232s Building dependency tree... 232s Reading state information... 232s Starting pkgProblemResolver with broken count: 0 232s Starting 2 pkgProblemResolver with broken count: 0 232s Done 232s The following NEW packages will be installed: 232s autopkgtest-satdep 232s 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. 232s Need to get 0 B/696 B of archives. 232s After this operation, 0 B of additional disk space will be used. 232s Get:1 /tmp/autopkgtest.BBDYUq/2-autopkgtest-satdep.deb autopkgtest-satdep amd64 0 [696 B] 233s Selecting previously unselected package autopkgtest-satdep. 233s (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 ... 78852 files and directories currently installed.) 233s Preparing to unpack .../2-autopkgtest-satdep.deb ... 233s Unpacking autopkgtest-satdep (0) ... 233s Setting up autopkgtest-satdep (0) ... 233s autopkgtest: WARNING: package apport:i386 is not installed though it should be 234s autopkgtest: WARNING: package apport-retrace:i386 is not installed though it should be 234s autopkgtest: WARNING: package apport-valgrind:i386 is not installed though it should be 235s (Reading database ... 78852 files and directories currently installed.) 235s Removing autopkgtest-satdep (0) ... 236s autopkgtest [17:24:07]: test unit-and-integration-tests: cp -r tests "$AUTOPKGTEST_TMP" && cd "$AUTOPKGTEST_TMP" && python3 -m pytest -ra -v tests/unit/ tests/integration/ 236s autopkgtest [17:24:07]: test unit-and-integration-tests: [----------------------- 237s ============================= test session starts ============================== 237s platform linux -- Python 3.12.7, pytest-8.3.3, pluggy-1.5.0 -- /usr/bin/python3 237s cachedir: .pytest_cache 237s rootdir: /tmp/autopkgtest.BBDYUq/autopkgtest_tmp 237s plugins: typeguard-4.4.1 237s collecting ... collected 532 items 237s 237s tests/unit/test_apport_retrace.py::test_malformed_crash_report PASSED [ 0%] 237s tests/unit/test_apport_retrace.py::test_malformed_kernel_crash_report PASSED [ 0%] 237s tests/unit/test_crashdb.py::T::test_accepts_default PASSED [ 0%] 237s tests/unit/test_crashdb.py::T::test_accepts_problem_types PASSED [ 0%] 237s tests/unit/test_crashdb.py::T::test_change_master_id PASSED [ 0%] 237s tests/unit/test_crashdb.py::T::test_check_duplicate PASSED [ 1%] 237s tests/unit/test_crashdb.py::T::test_check_duplicate_custom_signature PASSED [ 1%] 237s tests/unit/test_crashdb.py::T::test_check_duplicate_multiple_masters PASSED [ 1%] 237s tests/unit/test_crashdb.py::T::test_check_duplicate_multiple_regressions PASSED [ 1%] 237s tests/unit/test_crashdb.py::T::test_check_duplicate_reopen PASSED [ 1%] 237s tests/unit/test_crashdb.py::T::test_check_duplicate_report_arg PASSED [ 2%] 237s tests/unit/test_crashdb.py::T::test_check_duplicate_utf8 PASSED [ 2%] 237s tests/unit/test_crashdb.py::T::test_db_corruption PASSED [ 2%] 237s tests/unit/test_crashdb.py::T::test_duplicate_db_fixed PASSED [ 2%] 237s tests/unit/test_crashdb.py::T::test_duplicate_db_publish_long_sigs PASSED [ 2%] 237s tests/unit/test_crashdb.py::T::test_duplicate_db_remove PASSED [ 3%] 237s tests/unit/test_crashdb.py::T::test_dynamic_crashdb_conf PASSED [ 3%] 237s tests/unit/test_crashdb.py::T::test_get_affected_packages PASSED [ 3%] 237s tests/unit/test_crashdb.py::T::test_get_distro_release PASSED [ 3%] 237s tests/unit/test_crashdb.py::T::test_known_address_sig PASSED [ 3%] 237s tests/unit/test_crashdb.py::T::test_mark_regression PASSED [ 3%] 237s tests/unit/test_crashdb.py::T::test_no_sample_data PASSED [ 4%] 237s tests/unit/test_crashdb.py::T::test_retrace_markers PASSED [ 4%] 237s tests/unit/test_crashdb.py::T::test_status PASSED [ 4%] 237s tests/unit/test_crashdb.py::T::test_submit PASSED [ 4%] 237s tests/unit/test_crashdb.py::T::test_update PASSED [ 4%] 237s tests/unit/test_crashdb.py::T::test_update_filter PASSED [ 5%] 237s tests/unit/test_crashdb.py::T::test_update_traces PASSED [ 5%] 237s tests/unit/test_crashdb_launchpad.py::test_python_crash_headers PASSED [ 5%] 237s tests/unit/test_crashdb_launchpad.py::test_native_crash_headers PASSED [ 5%] 237s tests/unit/test_crashdb_launchpad.py::test_private_bug_headers PASSED [ 5%] 237s tests/unit/test_deprecation.py::TestDeprecation::test_unicode_gettext PASSED [ 6%] 237s tests/unit/test_fileutils.py::T::test_find_package_desktopfile_deleted PASSED [ 6%] 237s tests/unit/test_fileutils.py::T::test_get_dbus_socket PASSED [ 6%] 237s tests/unit/test_fileutils.py::T::test_get_login_defs PASSED [ 6%] 237s tests/unit/test_fileutils.py::T::test_get_login_defs_missing PASSED [ 6%] 237s tests/unit/test_fileutils.py::T::test_get_process_environ PASSED [ 6%] 237s tests/unit/test_fileutils.py::T::test_get_process_environ_empty PASSED [ 7%] 237s tests/unit/test_fileutils.py::T::test_get_process_environ_malformed PASSED [ 7%] 237s tests/unit/test_fileutils.py::T::test_get_recent_crashes PASSED [ 7%] 237s tests/unit/test_fileutils.py::T::test_get_starttime PASSED [ 7%] 237s tests/unit/test_fileutils.py::T::test_get_sys_gid_max PASSED [ 7%] 237s tests/unit/test_fileutils.py::T::test_get_sys_gid_max_default PASSED [ 8%] 237s tests/unit/test_fileutils.py::T::test_get_sys_uid_max PASSED [ 8%] 237s tests/unit/test_fileutils.py::T::test_get_sys_uid_max_default PASSED [ 8%] 237s tests/unit/test_fileutils.py::T::test_get_uid_and_gid PASSED [ 8%] 237s tests/unit/test_fileutils.py::T::test_likely_packaged PASSED [ 8%] 237s tests/unit/test_helper.py::TestTestHelper::test_get_init_systemd PASSED [ 9%] 237s tests/unit/test_helper.py::TestTestHelper::test_wait_for_process_to_appear PASSED [ 9%] 237s tests/unit/test_helper.py::TestTestHelper::test_wait_for_process_to_appear_multiple PASSED [ 9%] 237s tests/unit/test_helper.py::TestTestHelper::test_wait_for_process_to_appear_timeout PASSED [ 9%] 237s tests/unit/test_helper.py::TestTestHelper::test_wait_for_sleeping_state PASSED [ 9%] 237s tests/unit/test_helper.py::TestTestHelper::test_wait_for_sleeping_state_timeout PASSED [ 9%] 237s tests/unit/test_helper.py::TestTestHelper::test_wrap_object_with_statement PASSED [ 10%] 237s tests/unit/test_hooks_image.py::TestGeneralHookImage::test_add_info PASSED [ 10%] 237s tests/unit/test_hooks_image.py::TestGeneralHookImage::test_add_info_empty_build_info PASSED [ 10%] 237s tests/unit/test_hooks_image.py::TestGeneralHookImage::test_add_info_unknown_field PASSED [ 10%] 237s tests/unit/test_hooks_image.py::TestGeneralHookImage::test_no_cloud_build_info PASSED [ 10%] 237s tests/unit/test_hooks_wayland_session.py::TestGeneralHookWaylandSession::test_is_no_wayland_session PASSED [ 11%] 237s tests/unit/test_hooks_wayland_session.py::TestGeneralHookWaylandSession::test_is_wayland_session PASSED [ 11%] 237s tests/unit/test_hookutils.py::TestHookutils::test_attach_dmesg PASSED [ 11%] 237s tests/unit/test_hookutils.py::TestHookutils::test_attach_dmi PASSED [ 11%] 237s tests/unit/test_hookutils.py::TestHookutils::test_attach_journal_errors_with_date PASSED [ 11%] 237s tests/unit/test_hookutils.py::TestHookutils::test_attach_journal_errors_without_date PASSED [ 12%] 237s tests/unit/test_hookutils.py::TestHookutils::test_deprecated_upstart_functions PASSED [ 12%] 237s tests/unit/test_hookutils.py::TestHookutils::test_dmesg_overwrite PASSED [ 12%] 237s tests/unit/test_hookutils.py::TestHookutils::test_path_to_key PASSED [ 12%] 237s tests/unit/test_hookutils.py::TestHookutils::test_recent_syslog_journald_cmd PASSED [ 12%] 237s tests/unit/test_hookutils.py::TestHookutils::test_recent_syslog_long_process PASSED [ 12%] 237s tests/unit/test_hookutils.py::TestHookutils::test_recent_syslog_race_condition PASSED [ 13%] 237s tests/unit/test_packaging_apt_dpkg.py::TestPackagingAptDpkg::test_contents_parse_path_with_spaces PASSED [ 13%] 237s tests/unit/test_packaging_apt_dpkg.py::TestPackagingAptDpkg::test_contents_path_filering PASSED [ 13%] 237s tests/unit/test_packaging_apt_dpkg.py::TestPackagingAptDpkg::test_contents_skip_xenial_header PASSED [ 13%] 237s tests/unit/test_packaging_apt_dpkg.py::TestPackagingAptDpkg::test_get_file_package_uninstalled_usrmerge PASSED [ 13%] 237s tests/unit/test_packaging_apt_dpkg.py::TestPackagingAptDpkg::test_is_distro_package_no_candidate PASSED [ 14%] 237s tests/unit/test_packaging_apt_dpkg.py::TestPackagingAptDpkg::test_is_distro_package_no_installed_version PASSED [ 14%] 237s tests/unit/test_packaging_apt_dpkg.py::TestPackagingAptDpkg::test_is_distro_package_ppa PASSED [ 14%] 237s tests/unit/test_packaging_apt_dpkg.py::TestPackagingAptDpkg::test_is_distro_package_system_image PASSED [ 14%] 237s tests/unit/test_packaging_apt_dpkg.py::TestPackagingAptDpkg::test_map_mirror_to_arch_ports_to_primary PASSED [ 14%] 237s tests/unit/test_packaging_apt_dpkg.py::TestPackagingAptDpkg::test_map_mirror_to_arch_ports_unchanged PASSED [ 15%] 237s tests/unit/test_packaging_apt_dpkg.py::TestPackagingAptDpkg::test_map_mirror_to_arch_primary_to_ports PASSED [ 15%] 237s tests/unit/test_packaging_apt_dpkg.py::TestPackagingAptDpkg::test_map_mirror_to_arch_primary_unchanged PASSED [ 15%] 237s tests/unit/test_packaging_apt_dpkg.py::TestPackagingAptDpkg::test_parse_deb822_sources_extra_lines PASSED [ 15%] 237s tests/unit/test_packaging_apt_dpkg.py::TestPackagingAptDpkg::test_read_mirror_file PASSED [ 15%] 237s tests/unit/test_packaging_impl.py::TestPackagingImpl::test_determine_debian_unstable PASSED [ 15%] 237s tests/unit/test_packaging_impl.py::TestPackagingImpl::test_determine_ubuntu PASSED [ 16%] 237s tests/unit/test_parse_segv.py::TestHookParseSegv::test_add_info_without_segv_reason PASSED [ 16%] 237s tests/unit/test_parse_segv.py::TestHookParseSegv::test_debug PASSED [ 16%] 237s tests/unit/test_parse_segv.py::TestHookParseSegv::test_invalid_00_registers PASSED [ 16%] 237s tests/unit/test_parse_segv.py::TestHookParseSegv::test_invalid_01_disassembly PASSED [ 16%] 237s tests/unit/test_parse_segv.py::TestHookParseSegv::test_invalid_02_maps PASSED [ 17%] 237s tests/unit/test_parse_segv.py::TestHookParseSegv::test_ioport_operation PASSED [ 17%] 237s tests/unit/test_parse_segv.py::TestHookParseSegv::test_register_values PASSED [ 17%] 237s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_crackful_disasm PASSED [ 17%] 237s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_dest_missing PASSED [ 17%] 237s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_dest_not_writable PASSED [ 18%] 237s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_dest_null PASSED [ 18%] 237s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_pc_missing PASSED [ 18%] 237s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_pc_null PASSED [ 18%] 237s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_pc_nx_unwritable PASSED [ 18%] 237s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_pc_nx_writable PASSED [ 18%] 237s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_src_missing PASSED [ 19%] 237s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_src_not_readable PASSED [ 19%] 237s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_src_null PASSED [ 19%] 237s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_stack_failure PASSED [ 19%] 237s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_stack_kernel_segfault PASSED [ 19%] 237s tests/unit/test_parse_segv.py::TestHookParseSegv::test_segv_unknown PASSED [ 20%] 237s tests/unit/test_problem_report.py::T::test_add_tag_drop_duplicates PASSED [ 20%] 237s tests/unit/test_problem_report.py::T::test_add_tags PASSED [ 20%] 237s tests/unit/test_problem_report.py::T::test_basic_operations PASSED [ 20%] 237s tests/unit/test_problem_report.py::T::test_consistency_checks PASSED [ 20%] 237s tests/unit/test_problem_report.py::T::test_ctor_arguments PASSED [ 21%] 237s tests/unit/test_problem_report.py::T::test_get_on_disk_size PASSED [ 21%] 237s tests/unit/test_problem_report.py::T::test_get_timestamp PASSED [ 21%] 237s tests/unit/test_problem_report.py::T::test_get_timestamp_locale_german SKIPPED [ 21%] 237s tests/unit/test_problem_report.py::T::test_get_timestamp_returns_none PASSED [ 21%] 237s tests/unit/test_problem_report.py::T::test_import_dict PASSED [ 21%] 237s tests/unit/test_problem_report.py::T::test_iter PASSED [ 22%] 237s tests/unit/test_problem_report.py::T::test_load PASSED [ 22%] 237s tests/unit/test_problem_report.py::T::test_load_binary_blob PASSED [ 22%] 237s tests/unit/test_problem_report.py::T::test_load_incorrect_padding PASSED [ 22%] 237s tests/unit/test_problem_report.py::T::test_load_invalid_utf8 PASSED [ 22%] 237s tests/unit/test_problem_report.py::T::test_load_key_filter PASSED [ 23%] 237s tests/unit/test_problem_report.py::T::test_load_missing_colon PASSED [ 23%] 237s tests/unit/test_problem_report.py::T::test_load_zstd_compressed_data PASSED [ 23%] 237s tests/unit/test_problem_report.py::T::test_modify PASSED [ 23%] 237s tests/unit/test_problem_report.py::T::test_read_file PASSED [ 23%] 237s tests/unit/test_problem_report.py::T::test_read_file_legacy PASSED [ 24%] 237s tests/unit/test_problem_report.py::T::test_reading_zstd_compressed_value PASSED [ 24%] 237s tests/unit/test_problem_report.py::T::test_sorted_items PASSED [ 24%] 237s tests/unit/test_problem_report.py::T::test_updating PASSED [ 24%] 237s tests/unit/test_problem_report.py::T::test_write PASSED [ 24%] 237s tests/unit/test_problem_report.py::T::test_write_empty_fileobj PASSED [ 25%] 237s tests/unit/test_problem_report.py::T::test_write_fileobj PASSED [ 25%] 237s tests/unit/test_problem_report.py::T::test_write_mime_extra_headers PASSED [ 25%] 237s tests/unit/test_problem_report.py::T::test_write_mime_order PASSED [ 25%] 237s tests/unit/test_problem_report.py::T::test_write_mime_text PASSED [ 25%] 237s tests/unit/test_problem_report.py::T::test_writing_zstd_compressed_value PASSED [ 25%] 237s tests/unit/test_problem_report.py::T::test_zstandard_missing PASSED [ 26%] 237s tests/unit/test_problem_report.py::T::test_zstd_compressed_value_length PASSED [ 26%] 237s tests/unit/test_problem_report.py::TestEntryParser::test_parse PASSED [ 26%] 237s tests/unit/test_problem_report.py::TestEntryParser::test_skip_entries PASSED [ 26%] 237s tests/unit/test_problem_report.py::TestEntryParser::test_skip_last_entry PASSED [ 26%] 237s tests/unit/test_problem_report.py::TestEntryParser::test_skip_partial_entries PASSED [ 27%] 237s tests/unit/test_report.py::T::test_add_hooks_info_invalid_source PASSED [ 27%] 237s tests/unit/test_report.py::T::test_add_kernel_crash_info PASSED [ 27%] 237s tests/unit/test_report.py::T::test_add_kernel_crash_info_fail PASSED [ 27%] 237s tests/unit/test_report.py::T::test_add_kernel_crash_info_no_vmcore PASSED [ 27%] 237s tests/unit/test_report.py::T::test_add_snap_contact_info_github PASSED [ 28%] 237s tests/unit/test_report.py::T::test_add_snap_contact_info_launchpad PASSED [ 28%] 237s tests/unit/test_report.py::T::test_add_snap_contact_launchpad_distro PASSED [ 28%] 237s tests/unit/test_report.py::T::test_address_to_offset PASSED [ 28%] 237s tests/unit/test_report.py::T::test_address_to_offset_arm PASSED [ 28%] 237s tests/unit/test_report.py::T::test_crash_signature PASSED [ 28%] 237s tests/unit/test_report.py::T::test_crash_signature_addresses PASSED [ 29%] 237s tests/unit/test_report.py::T::test_gdb_add_info_no_gdb PASSED [ 29%] 237s tests/unit/test_report.py::T::test_gen_stacktrace_top PASSED [ 29%] 237s tests/unit/test_report.py::T::test_has_useful_stacktrace PASSED [ 29%] 237s tests/unit/test_report.py::T::test_missing_uid PASSED [ 29%] 237s tests/unit/test_report.py::T::test_nonascii_data PASSED [ 30%] 237s tests/unit/test_report.py::T::test_report_from_systemd_coredump_default PASSED [ 30%] 237s tests/unit/test_report.py::T::test_report_from_systemd_coredump_missing_crash PASSED [ 30%] 237s tests/unit/test_report.py::T::test_report_from_systemd_coredump_storage_journal PASSED [ 30%] 237s tests/unit/test_report.py::T::test_report_from_systemd_coredump_storage_none PASSED [ 30%] 237s tests/unit/test_report.py::T::test_standard_title PASSED [ 31%] 237s tests/unit/test_report.py::T::test_suspend_resume PASSED [ 31%] 237s tests/unit/test_rethread.py::T::test_exc_raise PASSED [ 31%] 237s tests/unit/test_rethread.py::T::test_exc_raise_complex PASSED [ 31%] 237s tests/unit/test_rethread.py::T::test_exception PASSED [ 31%] 238s tests/unit/test_rethread.py::T::test_no_return_value PASSED [ 31%] 238s tests/unit/test_rethread.py::T::test_return_value PASSED [ 32%] 238s tests/unit/test_sandboxutils.py::TestSandboxutils::test_make_sandbox PASSED [ 32%] 238s tests/unit/test_sandboxutils.py::TestSandboxutils::test_make_sandbox_install_packages_failure PASSED [ 32%] 238s tests/unit/test_sandboxutils.py::TestSandboxutils::test_make_sandbox_with_sandbox_dir PASSED [ 32%] 238s tests/unit/test_sandboxutils.py::TestSandboxutils::test_move_base_files_first_existing PASSED [ 32%] 238s tests/unit/test_sandboxutils.py::TestSandboxutils::test_move_base_files_first_missing PASSED [ 33%] 238s tests/unit/test_signal_crashes.py::TestApport::test_check_kernel_crash PASSED [ 33%] 238s tests/unit/test_signal_crashes.py::TestApport::test_check_lock_not_writable PASSED [ 33%] 238s tests/unit/test_signal_crashes.py::TestApport::test_check_lock_taken PASSED [ 33%] 238s tests/unit/test_signal_crashes.py::TestApport::test_consistency_checks_mismatching_uid PASSED [ 33%] 238s tests/unit/test_signal_crashes.py::TestApport::test_consistency_checks_replaced_process PASSED [ 34%] 238s tests/unit/test_signal_crashes.py::TestApport::test_init_error_log_is_tty PASSED [ 34%] 238s tests/unit/test_signal_crashes.py::TestApport::test_is_closing_session PASSED [ 34%] 238s tests/unit/test_signal_crashes.py::TestApport::test_is_closing_session_gdbus_failure PASSED [ 34%] 238s tests/unit/test_signal_crashes.py::TestApport::test_is_closing_session_no_determine_socket PASSED [ 34%] 238s tests/unit/test_signal_crashes.py::TestApport::test_is_closing_session_no_environ PASSED [ 34%] 238s tests/unit/test_signal_crashes.py::TestApport::test_is_closing_session_socket_not_exists PASSED [ 35%] 238s tests/unit/test_signal_crashes.py::TestApport::test_main_forward_crash_to_container PASSED [ 35%] 238s tests/unit/test_signal_crashes.py::TestApport::test_main_ignore_watchdog_restart PASSED [ 35%] 238s tests/unit/test_signal_crashes.py::TestApport::test_main_start PASSED [ 35%] 238s tests/unit/test_signal_crashes.py::TestApport::test_main_stop PASSED [ 35%] 238s tests/unit/test_signal_crashes.py::TestApport::test_missing_proc_pid PASSED [ 36%] 238s tests/unit/test_signal_crashes.py::TestApport::test_non_existing_systemd_coredump PASSED [ 36%] 238s tests/unit/test_signal_crashes.py::TestApport::test_process_crash_from_systemd_coredump_container PASSED [ 36%] 238s tests/unit/test_signal_crashes.py::TestApport::test_reading_core_from_journal_log PASSED [ 36%] 238s tests/unit/test_signal_crashes.py::TestApport::test_receive_arguments_via_socket_import_error PASSED [ 36%] 238s tests/unit/test_signal_crashes.py::TestApport::test_receive_arguments_via_socket_invalid_socket PASSED [ 37%] 238s tests/unit/test_signal_crashes.py::TestApport::test_refine_core_ulimit_huge PASSED [ 37%] 238s tests/unit/test_signal_crashes.py::TestApport::test_start PASSED [ 37%] 238s tests/unit/test_signal_crashes.py::TestApport::test_stop PASSED [ 37%] 238s tests/unit/test_signal_crashes.py::TestApport::test_systemd_journal_import_error PASSED [ 37%] 238s tests/unit/test_ui.py::TestUI::test_open_url PASSED [ 37%] 238s tests/unit/test_ui.py::TestUI::test_open_url_webbrowser_fails PASSED [ 38%] 238s tests/unit/test_ui.py::TestUI::test_open_url_webbrowser_fallback PASSED [ 38%] 238s tests/unit/test_user_group.py::TestUserGroup::test_get_process_user_and_group_is_not_root PASSED [ 38%] 238s tests/unit/test_user_group.py::TestUserGroup::test_get_process_user_and_group_is_root PASSED [ 38%] 238s tests/integration/test_apport_checkreports.py::TestApportCheckreports::test_has_no_system_report PASSED [ 38%] 238s tests/integration/test_apport_checkreports.py::TestApportCheckreports::test_has_system_report PASSED [ 39%] 238s tests/integration/test_apport_checkreports.py::TestApportCheckreports::test_has_user_report PASSED [ 39%] 238s tests/integration/test_apport_checkreports.py::TestApportCheckreports::test_no_report PASSED [ 39%] 238s tests/integration/test_apport_unpack.py::TestApportUnpack::test_broken_core_dump PASSED [ 39%] 238s tests/integration/test_apport_unpack.py::TestApportUnpack::test_broken_report PASSED [ 39%] 239s tests/integration/test_apport_unpack.py::TestApportUnpack::test_error PASSED [ 40%] 239s tests/integration/test_apport_unpack.py::TestApportUnpack::test_help PASSED [ 40%] 239s tests/integration/test_apport_unpack.py::TestApportUnpack::test_unpack PASSED [ 40%] 239s tests/integration/test_apport_unpack.py::TestApportUnpack::test_unpack_stdin PASSED [ 40%] 239s tests/integration/test_apport_valgrind.py::TestApportValgrind::test_help_display PASSED [ 40%] 240s tests/integration/test_apport_valgrind.py::TestApportValgrind::test_intentional_mem_leak_detection PASSED [ 40%] 240s tests/integration/test_apport_valgrind.py::TestApportValgrind::test_invalid_args PASSED [ 41%] 241s tests/integration/test_apport_valgrind.py::TestApportValgrind::test_unpackaged_exe PASSED [ 41%] 241s tests/integration/test_apport_valgrind.py::TestApportValgrind::test_valgrind_min_installed PASSED [ 41%] 242s tests/integration/test_apport_valgrind.py::TestApportValgrind::test_vlog_created PASSED [ 41%] 242s tests/integration/test_crash_digger.py::T::test_alternate_crashdb PASSED [ 41%] 242s tests/integration/test_crash_digger.py::T::test_crash_gdb_sandbox PASSED [ 42%] 242s tests/integration/test_crash_digger.py::T::test_crashes PASSED [ 42%] 243s tests/integration/test_crash_digger.py::T::test_crashes_error PASSED [ 42%] 243s tests/integration/test_crash_digger.py::T::test_crashes_transient_error PASSED [ 42%] 243s tests/integration/test_crash_digger.py::T::test_dupcheck PASSED [ 42%] 243s tests/integration/test_crash_digger.py::T::test_publish_db PASSED [ 43%] 243s tests/integration/test_crash_digger.py::T::test_stderr_redirection PASSED [ 43%] 243s tests/integration/test_crashdb_launchpad.py::T::test_1_download SKIPPED [ 43%] 243s tests/integration/test_crashdb_launchpad.py::T::test_2_update_traces SKIPPED [ 43%] 243s tests/integration/test_crashdb_launchpad.py::T::test_can_update SKIPPED [ 43%] 243s tests/integration/test_crashdb_launchpad.py::T::test_download_robustness SKIPPED [ 43%] 243s tests/integration/test_crashdb_launchpad.py::T::test_duplicates SKIPPED [ 44%] 243s tests/integration/test_crashdb_launchpad.py::T::test_escalation SKIPPED [ 44%] 243s tests/integration/test_crashdb_launchpad.py::T::test_get_affected_packages SKIPPED [ 44%] 243s tests/integration/test_crashdb_launchpad.py::T::test_get_comment_url SKIPPED [ 44%] 243s tests/integration/test_crashdb_launchpad.py::T::test_get_distro_release SKIPPED [ 44%] 243s tests/integration/test_crashdb_launchpad.py::T::test_get_fixed_version SKIPPED [ 45%] 243s tests/integration/test_crashdb_launchpad.py::T::test_is_reporter SKIPPED [ 45%] 243s tests/integration/test_crashdb_launchpad.py::T::test_marking_foreign_arch SKIPPED [ 45%] 243s tests/integration/test_crashdb_launchpad.py::T::test_marking_project SKIPPED [ 45%] 243s tests/integration/test_crashdb_launchpad.py::T::test_marking_python SKIPPED [ 45%] 243s tests/integration/test_crashdb_launchpad.py::T::test_marking_python_task_mangle SKIPPED [ 46%] 243s tests/integration/test_crashdb_launchpad.py::T::test_marking_segv SKIPPED [ 46%] 243s tests/integration/test_crashdb_launchpad.py::T::test_project SKIPPED [ 46%] 243s tests/integration/test_crashdb_launchpad.py::T::test_update_comment SKIPPED [ 46%] 243s tests/integration/test_crashdb_launchpad.py::T::test_update_description SKIPPED [ 46%] 243s tests/integration/test_crashdb_launchpad.py::T::test_update_filter SKIPPED [ 46%] 243s tests/integration/test_crashdb_launchpad.py::T::test_update_traces_invalid SKIPPED [ 47%] 243s tests/integration/test_dupdb_admin.py::TestDupdbAdmin::test_changeid PASSED [ 47%] 244s tests/integration/test_dupdb_admin.py::TestDupdbAdmin::test_changeid_missing_argument PASSED [ 47%] 244s tests/integration/test_dupdb_admin.py::TestDupdbAdmin::test_dump_database PASSED [ 47%] 244s tests/integration/test_dupdb_admin.py::TestDupdbAdmin::test_dump_empty_database PASSED [ 47%] 244s tests/integration/test_dupdb_admin.py::TestDupdbAdmin::test_missing_db_file PASSED [ 48%] 244s tests/integration/test_dupdb_admin.py::TestDupdbAdmin::test_no_command PASSED [ 48%] 244s tests/integration/test_dupdb_admin.py::TestDupdbAdmin::test_publish PASSED [ 48%] 244s tests/integration/test_dupdb_admin.py::TestDupdbAdmin::test_publish_missing_argument PASSED [ 48%] 244s tests/integration/test_dupdb_admin.py::TestDupdbAdmin::test_removeid PASSED [ 48%] 245s tests/integration/test_dupdb_admin.py::TestDupdbAdmin::test_removeid_missing_argument PASSED [ 49%] 245s tests/integration/test_dupdb_admin.py::TestDupdbAdmin::test_unknown_command PASSED [ 49%] 245s tests/integration/test_fileutils.py::T::test_check_files_md5 PASSED [ 49%] 254s tests/integration/test_fileutils.py::T::test_clean_core_directory PASSED [ 49%] 254s tests/integration/test_fileutils.py::T::test_delete_report PASSED [ 49%] 254s tests/integration/test_fileutils.py::T::test_find_file_package PASSED [ 50%] 254s tests/integration/test_fileutils.py::T::test_find_package_desktopfile PASSED [ 50%] 254s tests/integration/test_fileutils.py::T::test_get_all_reports PASSED [ 50%] 254s tests/integration/test_fileutils.py::T::test_get_config PASSED [ 50%] 254s tests/integration/test_fileutils.py::T::test_get_core_path PASSED [ 50%] 254s tests/integration/test_fileutils.py::T::test_get_system_reports PASSED [ 50%] 254s tests/integration/test_fileutils.py::T::test_get_system_reports_guest PASSED [ 51%] 254s tests/integration/test_fileutils.py::T::test_links_with_shared_library PASSED [ 51%] 254s tests/integration/test_fileutils.py::T::test_make_report_file PASSED [ 51%] 256s tests/integration/test_fileutils.py::T::test_mark_2nd_report_upload PASSED [ 51%] 257s tests/integration/test_fileutils.py::T::test_mark_hanging_process PASSED [ 51%] 257s tests/integration/test_fileutils.py::T::test_mark_report_upload PASSED [ 52%] 257s tests/integration/test_fileutils.py::T::test_seen PASSED [ 52%] 257s tests/integration/test_fileutils.py::T::test_shared_libraries PASSED [ 52%] 257s tests/integration/test_fileutils.py::T::test_unwritable_report PASSED [ 52%] 257s tests/integration/test_github.py::TestGitHub::test__format_report PASSED [ 52%] 257s tests/integration/test_github.py::TestGitHub::test_authentication_complete PASSED [ 53%] 257s tests/integration/test_github.py::TestGitHub::test_not_implemented_methods PASSED [ 53%] 257s tests/integration/test_github.py::TestGitHub::test_upload PASSED [ 53%] 257s tests/integration/test_helper.py::TestHelper::test_pids_of_non_existing_program PASSED [ 53%] 257s tests/integration/test_helper.py::TestHelper::test_pids_of_running_python PASSED [ 53%] 257s tests/integration/test_helper.py::TestHelper::test_read_shebang_binary PASSED [ 53%] 257s tests/integration/test_helper.py::TestHelper::test_read_shebang_shell_script PASSED [ 54%] 257s tests/integration/test_hooks.py::T::test_gcc_ide_hook_file PASSED [ 54%] 257s tests/integration/test_hooks.py::T::test_gcc_ide_hook_file_binary PASSED [ 54%] 257s tests/integration/test_hooks.py::T::test_gcc_ide_hook_pipe PASSED [ 54%] 257s tests/integration/test_hooks.py::T::test_general_hook_generic PASSED [ 54%] 258s tests/integration/test_hooks.py::T::test_kernel_crashdump_kdump PASSED [ 55%] 258s tests/integration/test_hooks.py::T::test_kernel_crashdump_kdump_log_dir_symlink PASSED [ 55%] 259s tests/integration/test_hooks.py::T::test_kernel_crashdump_kdump_log_symlink PASSED [ 55%] 259s tests/integration/test_hooks.py::T::test_kernel_crashdump_kexec PASSED [ 55%] 260s tests/integration/test_hooks.py::T::test_kernel_crashdump_log_symlink PASSED [ 55%] 260s tests/integration/test_hooks.py::T::test_kernel_oops_hook PASSED [ 56%] 260s tests/integration/test_hooks.py::T::test_package_hook_logs PASSED [ 56%] 261s tests/integration/test_hooks.py::T::test_package_hook_nologs PASSED [ 56%] 261s tests/integration/test_hooks.py::T::test_package_hook_non_existing_package PASSED [ 56%] 262s tests/integration/test_hooks.py::T::test_package_hook_tags PASSED [ 56%] 262s tests/integration/test_hooks.py::T::test_package_hook_uninstalled PASSED [ 56%] 262s tests/integration/test_hookutils.py::T::test_attach_file PASSED [ 57%] 262s tests/integration/test_hookutils.py::T::test_attach_file_binary PASSED [ 57%] 262s tests/integration/test_hookutils.py::T::test_attach_file_if_exists PASSED [ 57%] 262s tests/integration/test_hookutils.py::T::test_attach_mac_events PASSED [ 57%] 262s tests/integration/test_hookutils.py::T::test_command_output PASSED [ 57%] 262s tests/integration/test_hookutils.py::T::test_in_session_of_problem SKIPPED [ 58%] 262s tests/integration/test_hookutils.py::T::test_module_license_evaluation PASSED [ 58%] 263s tests/integration/test_hookutils.py::T::test_no_crashes PASSED [ 58%] 263s tests/integration/test_hookutils.py::T::test_real_module_license_evaluation PASSED [ 58%] 263s tests/integration/test_hookutils.py::T::test_recent_syslog PASSED [ 58%] 263s tests/integration/test_hookutils.py::T::test_recent_syslog_overflow PASSED [ 59%] 263s tests/integration/test_hookutils.py::T::test_xsession_errors PASSED [ 59%] 263s tests/integration/test_java_crashes.py::TestJavaCrashes::test_crash_class PASSED [ 59%] 263s tests/integration/test_java_crashes.py::TestJavaCrashes::test_crash_jar PASSED [ 59%] 263s tests/integration/test_packaging.py::T::test_get_os_version PASSED [ 59%] 263s tests/integration/test_packaging.py::T::test_get_uninstalled_package PASSED [ 59%] 264s tests/integration/test_packaging_apt_dpkg.py::T::test_check_files_md5 PASSED [ 60%] 264s tests/integration/test_packaging_apt_dpkg.py::T::test_compare_versions PASSED [ 60%] 264s tests/integration/test_packaging_apt_dpkg.py::T::test_enabled PASSED [ 60%] 264s tests/integration/test_packaging_apt_dpkg.py::T::test_get_architecture PASSED [ 60%] 264s tests/integration/test_packaging_apt_dpkg.py::T::test_get_available_version PASSED [ 60%] 265s tests/integration/test_packaging_apt_dpkg.py::T::test_get_dependencies_depends_and_pre_depends PASSED [ 61%] 265s tests/integration/test_packaging_apt_dpkg.py::T::test_get_dependencies_depends_only PASSED [ 61%] 265s tests/integration/test_packaging_apt_dpkg.py::T::test_get_dependencies_pre_depends_only PASSED [ 61%] 265s tests/integration/test_packaging_apt_dpkg.py::T::test_get_file_package PASSED [ 61%] 265s tests/integration/test_packaging_apt_dpkg.py::T::test_get_file_package_diversion PASSED [ 61%] 265s tests/integration/test_packaging_apt_dpkg.py::T::test_get_file_package_libc_so PASSED [ 62%] 265s tests/integration/test_packaging_apt_dpkg.py::T::test_get_file_package_uninstalled PASSED [ 62%] 265s tests/integration/test_packaging_apt_dpkg.py::T::test_get_file_package_uninstalled_multiarch PASSED [ 62%] 265s tests/integration/test_packaging_apt_dpkg.py::T::test_get_files PASSED [ 62%] 265s tests/integration/test_packaging_apt_dpkg.py::T::test_get_kernel_package PASSED [ 62%] 265s tests/integration/test_packaging_apt_dpkg.py::T::test_get_library_paths PASSED [ 62%] 265s tests/integration/test_packaging_apt_dpkg.py::T::test_get_modified_conffiles PASSED [ 63%] 266s tests/integration/test_packaging_apt_dpkg.py::T::test_get_package_origin PASSED [ 63%] 266s tests/integration/test_packaging_apt_dpkg.py::T::test_get_source PASSED [ 63%] 266s tests/integration/test_packaging_apt_dpkg.py::T::test_get_system_architecture PASSED [ 63%] 267s tests/integration/test_packaging_apt_dpkg.py::T::test_get_version PASSED [ 63%] 267s tests/integration/test_packaging_apt_dpkg.py::T::test_is_distro_package PASSED [ 64%] 267s tests/integration/test_packaging_apt_dpkg.py::T::test_mirror_from_apt_sources PASSED [ 64%] 267s tests/integration/test_packaging_apt_dpkg.py::T::test_mirror_from_apt_sources_with_options PASSED [ 64%] 267s tests/integration/test_packaging_apt_dpkg.py::T::test_mirror_from_deb822_apt_sources PASSED [ 64%] 267s tests/integration/test_packaging_apt_dpkg.py::T::test_package_name_glob PASSED [ 64%] 267s tests/integration/test_packaging_rpm.py::TestPackagingRpm::test_get_dependencies SKIPPED [ 65%] 267s tests/integration/test_packaging_rpm.py::TestPackagingRpm::test_get_header SKIPPED [ 65%] 267s tests/integration/test_packaging_rpm.py::TestPackagingRpm::test_get_headers_by_tag SKIPPED [ 65%] 267s tests/integration/test_packaging_rpm.py::TestPackagingRpm::test_get_system_architecture SKIPPED [ 65%] 267s tests/integration/test_packaging_rpm.py::TestPackagingRpm::test_get_version SKIPPED [ 65%] 269s tests/integration/test_problem_report.py::T::test_add_to_existing PASSED [ 65%] 269s tests/integration/test_problem_report.py::T::test_big_file PASSED [ 66%] 270s tests/integration/test_problem_report.py::T::test_compressed_values PASSED [ 66%] 270s tests/integration/test_problem_report.py::T::test_extract_keys PASSED [ 66%] 270s tests/integration/test_problem_report.py::T::test_size_limit PASSED [ 66%] 270s tests/integration/test_problem_report.py::T::test_write_append PASSED [ 66%] 271s tests/integration/test_problem_report.py::T::test_write_delayed_fileobj PASSED [ 67%] 271s tests/integration/test_problem_report.py::T::test_write_file PASSED [ 67%] 271s tests/integration/test_problem_report.py::T::test_write_mime_binary PASSED [ 67%] 271s tests/integration/test_problem_report.py::T::test_write_mime_filter PASSED [ 67%] 271s tests/integration/test_python_crashes.py::T::test_deleted_working_directory PASSED [ 67%] 271s tests/integration/test_python_crashes.py::T::test_existing PASSED [ 68%] 271s tests/integration/test_python_crashes.py::T::test_general PASSED [ 68%] 271s tests/integration/test_python_crashes.py::T::test_generic_os_error PASSED [ 68%] 271s tests/integration/test_python_crashes.py::T::test_generic_os_error_no_errno PASSED [ 68%] 272s tests/integration/test_python_crashes.py::T::test_getcwd_error PASSED [ 68%] 272s tests/integration/test_python_crashes.py::T::test_ignoring PASSED [ 68%] 272s tests/integration/test_python_crashes.py::T::test_interactive PASSED [ 69%] 272s tests/integration/test_python_crashes.py::T::test_no_argv PASSED [ 69%] 273s tests/integration/test_python_crashes.py::T::test_no_flooding PASSED [ 69%] 273s tests/integration/test_python_crashes.py::T::test_python_env PASSED [ 69%] 273s tests/integration/test_python_crashes.py::T::test_subclassed_os_error PASSED [ 69%] 273s tests/integration/test_python_crashes.py::T::test_symlink PASSED [ 70%] 274s tests/integration/test_recoverable_problem.py::TestRecoverableProblem::test_invalid_data PASSED [ 70%] 274s tests/integration/test_recoverable_problem.py::TestRecoverableProblem::test_recoverable_problem PASSED [ 70%] 274s tests/integration/test_recoverable_problem.py::TestRecoverableProblem::test_recoverable_problem_dupe_sig PASSED [ 70%] 274s tests/integration/test_recoverable_problem.py::TestRecoverableProblem::test_wait_for_report_timeout PASSED [ 70%] 275s tests/integration/test_report.py::T::test_add_gdb_info PASSED [ 71%] 276s tests/integration/test_report.py::T::test_add_gdb_info_abort PASSED [ 71%] 276s tests/integration/test_report.py::T::test_add_gdb_info_damaged PASSED [ 71%] 277s tests/integration/test_report.py::T::test_add_gdb_info_damaged_gz_core PASSED [ 71%] 277s tests/integration/test_report.py::T::test_add_gdb_info_exe_missing PASSED [ 71%] 278s tests/integration/test_report.py::T::test_add_gdb_info_load PASSED [ 71%] 278s tests/integration/test_report.py::T::test_add_gdb_info_script PASSED [ 72%] 279s tests/integration/test_report.py::T::test_add_gdb_info_short_core_file PASSED [ 72%] 279s tests/integration/test_report.py::T::test_add_hooks_info PASSED [ 72%] 279s tests/integration/test_report.py::T::test_add_hooks_info_errors PASSED [ 72%] 279s tests/integration/test_report.py::T::test_add_hooks_info_opt PASSED [ 72%] 279s tests/integration/test_report.py::T::test_add_os_info PASSED [ 73%] 279s tests/integration/test_report.py::T::test_add_package_info PASSED [ 73%] 279s tests/integration/test_report.py::T::test_add_path_classification PASSED [ 73%] 279s tests/integration/test_report.py::T::test_add_proc_info PASSED [ 73%] 279s tests/integration/test_report.py::T::test_add_proc_info_current_desktop PASSED [ 73%] 280s tests/integration/test_report.py::T::test_add_proc_info_nonascii PASSED [ 74%] 280s tests/integration/test_report.py::T::test_add_user_info PASSED [ 74%] 280s tests/integration/test_report.py::T::test_add_user_info_missing_user PASSED [ 74%] 281s tests/integration/test_report.py::T::test_add_zz_parse_segv_details PASSED [ 74%] 281s tests/integration/test_report.py::T::test_address_to_offset_live PASSED [ 74%] 281s tests/integration/test_report.py::T::test_allowlisting PASSED [ 75%] 281s tests/integration/test_report.py::T::test_check_interpreted PASSED [ 75%] 281s tests/integration/test_report.py::T::test_check_interpreted_no_exec PASSED [ 75%] 281s tests/integration/test_report.py::T::test_check_interpreted_twistd SKIPPED [ 75%] 281s tests/integration/test_report.py::T::test_command_output PASSED [ 75%] 281s tests/integration/test_report.py::T::test_command_output_passes_env PASSED [ 75%] 281s tests/integration/test_report.py::T::test_command_output_raises_error PASSED [ 76%] 281s tests/integration/test_report.py::T::test_command_output_timeout PASSED [ 76%] 281s tests/integration/test_report.py::T::test_command_output_timeout_no_output PASSED [ 76%] 281s tests/integration/test_report.py::T::test_denylisting PASSED [ 76%] 281s tests/integration/test_report.py::T::test_extrapath_preferred PASSED [ 76%] 282s tests/integration/test_report.py::T::test_ignoring PASSED [ 77%] 282s tests/integration/test_report.py::T::test_obsolete_packages PASSED [ 77%] 283s tests/integration/test_report.py::T::test_search_bug_patterns PASSED [ 77%] 283s tests/integration/test_report.py::T::test_wait_for_proc_cmdline_failure PASSED [ 77%] 292s tests/integration/test_signal_crashes.py::T::test_core_dump_packaged PASSED [ 77%] 293s tests/integration/test_signal_crashes.py::T::test_core_dump_packaged_sigquit PASSED [ 78%] 294s tests/integration/test_signal_crashes.py::T::test_core_dump_packaged_sigquit_via_socket PASSED [ 78%] 299s tests/integration/test_signal_crashes.py::T::test_core_dump_unpackaged PASSED [ 78%] 300s tests/integration/test_signal_crashes.py::T::test_core_file_injection PASSED [ 78%] 301s tests/integration/test_signal_crashes.py::T::test_coredump_from_socket PASSED [ 78%] 303s tests/integration/test_signal_crashes.py::T::test_crash_apport PASSED [ 78%] 303s tests/integration/test_signal_crashes.py::T::test_crash_apport_from_systemd_coredump PASSED [ 79%] 304s tests/integration/test_signal_crashes.py::T::test_crash_setuid_drop PASSED [ 79%] 305s tests/integration/test_signal_crashes.py::T::test_crash_setuid_drop_via_socket PASSED [ 79%] 306s tests/integration/test_signal_crashes.py::T::test_crash_setuid_keep PASSED [ 79%] 307s tests/integration/test_signal_crashes.py::T::test_crash_setuid_unpackaged PASSED [ 79%] 308s tests/integration/test_signal_crashes.py::T::test_crash_suid_dumpable_debug PASSED [ 80%] 308s tests/integration/test_signal_crashes.py::T::test_create_test_non_sleep_process PASSED [ 80%] 308s tests/integration/test_signal_crashes.py::T::test_create_test_sleep_process PASSED [ 80%] 308s tests/integration/test_signal_crashes.py::T::test_empty_core_dump PASSED [ 80%] 311s tests/integration/test_signal_crashes.py::T::test_flood_limit PASSED [ 80%] 312s tests/integration/test_signal_crashes.py::T::test_ignore PASSED [ 81%] 312s tests/integration/test_signal_crashes.py::T::test_ignore_sigquit PASSED [ 81%] 313s tests/integration/test_signal_crashes.py::T::test_ignore_sigxcpu PASSED [ 81%] 313s tests/integration/test_signal_crashes.py::T::test_is_not_same_ns PASSED [ 81%] 315s tests/integration/test_signal_crashes.py::T::test_leak_inaccessible_files PASSED [ 81%] 315s tests/integration/test_signal_crashes.py::T::test_logging_file PASSED [ 81%] 315s tests/integration/test_signal_crashes.py::T::test_logging_stderr PASSED [ 82%] 317s tests/integration/test_signal_crashes.py::T::test_modify_after_start PASSED [ 82%] 318s tests/integration/test_signal_crashes.py::T::test_nonreadable_exe PASSED [ 82%] 318s tests/integration/test_signal_crashes.py::T::test_parallel_crash SKIPPED [ 82%] 318s tests/integration/test_signal_crashes.py::T::test_unpackaged_binary PASSED [ 82%] 319s tests/integration/test_signal_crashes.py::T::test_unpackaged_script PASSED [ 83%] 319s tests/integration/test_signal_crashes.py::T::test_unsupported_arguments_no_stderr PASSED [ 83%] 319s tests/integration/test_signal_crashes.py::T::test_wait_for_core_file_core_not_created PASSED [ 83%] 319s tests/integration/test_signal_crashes.py::T::test_wait_for_core_file_timeout PASSED [ 83%] 319s tests/integration/test_signal_crashes.py::T::test_wait_for_gdb_sleeping_child_process PASSED [ 83%] 319s tests/integration/test_signal_crashes.py::T::test_wait_for_gdb_sleeping_child_process_timeout PASSED [ 84%] 320s tests/integration/test_ui.py::T::test_can_examine_locally_crash PASSED [ 84%] 320s tests/integration/test_ui.py::T::test_can_examine_locally_nocrash PASSED [ 84%] 321s tests/integration/test_ui.py::T::test_collect_info_crashdb_errors PASSED [ 84%] 321s tests/integration/test_ui.py::T::test_collect_info_crashdb_name PASSED [ 84%] 321s tests/integration/test_ui.py::T::test_collect_info_crashdb_spec PASSED [ 84%] 321s tests/integration/test_ui.py::T::test_collect_info_distro PASSED [ 85%] 322s tests/integration/test_ui.py::T::test_collect_info_exepath PASSED [ 85%] 322s tests/integration/test_ui.py::T::test_collect_info_package PASSED [ 85%] 322s tests/integration/test_ui.py::T::test_collect_info_permissions PASSED [ 85%] 323s tests/integration/test_ui.py::T::test_db_no_accept PASSED [ 85%] 323s tests/integration/test_ui.py::T::test_file_report_http_error PASSED [ 86%] 323s tests/integration/test_ui.py::T::test_file_report_nodelay PASSED [ 86%] 323s tests/integration/test_ui.py::T::test_file_report_upload_delay PASSED [ 86%] 323s tests/integration/test_ui.py::T::test_file_report_upload_message PASSED [ 86%] 323s tests/integration/test_ui.py::T::test_format_filesize PASSED [ 86%] 323s tests/integration/test_ui.py::T::test_get_desktop_entry PASSED [ 87%] 323s tests/integration/test_ui.py::T::test_get_desktop_entry_broken PASSED [ 87%] 323s tests/integration/test_ui.py::T::test_get_size_constructed PASSED [ 87%] 323s tests/integration/test_ui.py::T::test_get_size_loaded PASSED [ 87%] 323s tests/integration/test_ui.py::T::test_handle_duplicate PASSED [ 87%] 323s tests/integration/test_ui.py::T::test_hooks_choices_db_no_accept PASSED [ 87%] 324s tests/integration/test_ui.py::T::test_interactive_hooks_cancel PASSED [ 88%] 324s tests/integration/test_ui.py::T::test_interactive_hooks_choices PASSED [ 88%] 325s tests/integration/test_ui.py::T::test_interactive_hooks_file PASSED [ 88%] 326s tests/integration/test_ui.py::T::test_interactive_hooks_information PASSED [ 88%] 327s tests/integration/test_ui.py::T::test_interactive_hooks_yesno PASSED [ 88%] 327s tests/integration/test_ui.py::T::test_load_report PASSED [ 89%] 327s tests/integration/test_ui.py::T::test_parse_argv_apport_bug PASSED [ 89%] 327s tests/integration/test_ui.py::T::test_parse_argv_single_arg PASSED [ 89%] 329s tests/integration/test_ui.py::T::test_restart PASSED [ 89%] 329s tests/integration/test_ui.py::T::test_run_as_real_user PASSED [ 89%] 329s tests/integration/test_ui.py::T::test_run_as_real_user_no_gvfsd PASSED [ 90%] 329s tests/integration/test_ui.py::T::test_run_as_real_user_no_sudo PASSED [ 90%] 329s tests/integration/test_ui.py::T::test_run_as_real_user_non_root PASSED [ 90%] 330s tests/integration/test_ui.py::T::test_run_crash PASSED [ 90%] 330s tests/integration/test_ui.py::T::test_run_crash_abort PASSED [ 90%] 331s tests/integration/test_ui.py::T::test_run_crash_anonymity PASSED [ 90%] 332s tests/integration/test_ui.py::T::test_run_crash_anonymity_escaping PASSED [ 91%] 332s tests/integration/test_ui.py::T::test_run_crash_anonymity_order PASSED [ 91%] 333s tests/integration/test_ui.py::T::test_run_crash_anonymity_substring PASSED [ 91%] 334s tests/integration/test_ui.py::T::test_run_crash_argv_file PASSED [ 91%] 334s tests/integration/test_ui.py::T::test_run_crash_broken PASSED [ 91%] 334s tests/integration/test_ui.py::T::test_run_crash_errors PASSED [ 92%] 334s tests/integration/test_ui.py::T::test_run_crash_ignore PASSED [ 92%] 335s tests/integration/test_ui.py::T::test_run_crash_kernel PASSED [ 92%] 336s tests/integration/test_ui.py::T::test_run_crash_known PASSED [ 92%] 337s tests/integration/test_ui.py::T::test_run_crash_malicious_crashdb PASSED [ 92%] 337s tests/integration/test_ui.py::T::test_run_crash_malicious_exec_path PASSED [ 93%] 337s tests/integration/test_ui.py::T::test_run_crash_malicious_package PASSED [ 93%] 337s tests/integration/test_ui.py::T::test_run_crash_nocore PASSED [ 93%] 337s tests/integration/test_ui.py::T::test_run_crash_package PASSED [ 93%] 338s tests/integration/test_ui.py::T::test_run_crash_precollected PASSED [ 93%] 339s tests/integration/test_ui.py::T::test_run_crash_preretraced PASSED [ 93%] 339s tests/integration/test_ui.py::T::test_run_crash_private_keys PASSED [ 94%] 340s tests/integration/test_ui.py::T::test_run_crash_uninstalled PASSED [ 94%] 340s tests/integration/test_ui.py::T::test_run_crash_unreportable PASSED [ 94%] 340s tests/integration/test_ui.py::T::test_run_crash_updated_binary PASSED [ 94%] 340s tests/integration/test_ui.py::T::test_run_nopending PASSED [ 94%] 340s tests/integration/test_ui.py::T::test_run_report_bug_file PASSED [ 95%] 340s tests/integration/test_ui.py::T::test_run_report_bug_kernel_thread PASSED [ 95%] 341s tests/integration/test_ui.py::T::test_run_report_bug_list_symptoms PASSED [ 95%] 341s tests/integration/test_ui.py::T::test_run_report_bug_noargs PASSED [ 95%] 341s tests/integration/test_ui.py::T::test_run_report_bug_noperm_pid PASSED [ 95%] 341s tests/integration/test_ui.py::T::test_run_report_bug_package PASSED [ 96%] 342s tests/integration/test_ui.py::T::test_run_report_bug_pid_tags PASSED [ 96%] 342s tests/integration/test_ui.py::T::test_run_report_bug_unpackaged_pid PASSED [ 96%] 342s tests/integration/test_ui.py::T::test_run_report_bug_wrong_pid PASSED [ 96%] 342s tests/integration/test_ui.py::T::test_run_report_hanging PASSED [ 96%] 342s tests/integration/test_ui.py::T::test_run_restart PASSED [ 96%] 344s tests/integration/test_ui.py::T::test_run_symptom PASSED [ 97%] 346s tests/integration/test_ui.py::T::test_run_update_report_different_binary_source PASSED [ 97%] 346s tests/integration/test_ui.py::T::test_run_update_report_existing_package_cli_cmdname PASSED [ 97%] 346s tests/integration/test_ui.py::T::test_run_update_report_existing_package_cli_tags PASSED [ 97%] 346s tests/integration/test_ui.py::T::test_run_update_report_existing_package_from_bug PASSED [ 97%] 346s tests/integration/test_ui.py::T::test_run_update_report_nonexisting_package_cli PASSED [ 98%] 346s tests/integration/test_ui.py::T::test_run_update_report_nonexisting_package_from_bug PASSED [ 98%] 346s tests/integration/test_ui.py::T::test_run_update_report_noninstalled_but_hook PASSED [ 98%] 346s tests/integration/test_ui.py::T::test_run_version PASSED [ 98%] 346s tests/integration/test_ui.py::T::test_wait_for_pid PASSED [ 98%] 346s tests/integration/test_ui_cli.py::TestApportCli::test_save_report_in_temp_directory PASSED [ 99%] 346s tests/integration/test_ui_cli.py::TestApportCli::test_ui_update_view PASSED [ 99%] 346s tests/integration/test_unkillable_shutdown.py::TestUnkillableShutdown::test_omit_all_processes PASSED [ 99%] 346s tests/integration/test_unkillable_shutdown.py::TestUnkillableShutdown::test_omit_all_processes_except_one PASSED [ 99%] 346s tests/integration/test_unkillable_shutdown.py::TestUnkillableShutdown::test_write_reports PASSED [ 99%] 346s tests/integration/test_whoopsie_upload_all.py::TestWhoopsieUploadAll::test_process_report_malformed_report PASSED [100%] 346s 346s =========================== short test summary info ============================ 346s SKIPPED [1] tests/unit/test_problem_report.py:90: Missing German locale support 346s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:198: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 346s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:248: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 346s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:496: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 346s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:889: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 346s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:501: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 346s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:897: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 346s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:484: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 346s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:342: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 346s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:477: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 346s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:695: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 346s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:491: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 346s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:626: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 346s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:590: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 346s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:659: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 346s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:936: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 346s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:552: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 346s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:832: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 346s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:403: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 346s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:370: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 346s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:439: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 346s SKIPPED [1] tests/integration/test_crashdb_launchpad.py:672: Need Launchpad access with bug control permission. Set TEST_LAUNCHPAD to run. 346s SKIPPED [1] tests/integration/test_hookutils.py:376: no logind session 346s SKIPPED [1] tests/integration/test_packaging_rpm.py:20: rpm module not available 346s SKIPPED [1] tests/integration/test_packaging_rpm.py:25: rpm module not available 346s SKIPPED [1] tests/integration/test_packaging_rpm.py:31: rpm module not available 346s SKIPPED [1] tests/integration/test_packaging_rpm.py:38: rpm module not available 346s SKIPPED [1] tests/integration/test_packaging_rpm.py:45: rpm module not available 346s SKIPPED [1] tests/integration/test_report.py:566: twistd not installed 346s SKIPPED [1] tests/integration/test_signal_crashes.py:242: fix test as multiple instances can be started within 30s 346s ================= 502 passed, 30 skipped in 109.62s (0:01:49) ================== 347s autopkgtest [17:25:58]: test unit-and-integration-tests: -----------------------] 347s autopkgtest [17:25:58]: test unit-and-integration-tests: - - - - - - - - - - results - - - - - - - - - - 347s unit-and-integration-tests PASS 348s autopkgtest [17:25:59]: test system-tests: preparing testbed 469s autopkgtest [17:28:00]: testbed dpkg architecture: amd64 470s autopkgtest [17:28:01]: testbed apt version: 2.9.8 470s autopkgtest [17:28:01]: test architecture: i386 470s autopkgtest [17:28:01]: @@@@@@@@@@@@@@@@@@@@ test bed setup 471s Get:1 http://ftpmaster.internal/ubuntu plucky-proposed InRelease [73.9 kB] 472s Get:2 http://ftpmaster.internal/ubuntu plucky-proposed/universe Sources [859 kB] 473s Get:3 http://ftpmaster.internal/ubuntu plucky-proposed/multiverse Sources [15.3 kB] 473s Get:4 http://ftpmaster.internal/ubuntu plucky-proposed/restricted Sources [7016 B] 473s Get:5 http://ftpmaster.internal/ubuntu plucky-proposed/main Sources [89.0 kB] 473s Get:6 http://ftpmaster.internal/ubuntu plucky-proposed/main i386 Packages [77.5 kB] 474s Get:7 http://ftpmaster.internal/ubuntu plucky-proposed/main amd64 Packages [128 kB] 474s Get:8 http://ftpmaster.internal/ubuntu plucky-proposed/restricted amd64 Packages [32.6 kB] 474s Get:9 http://ftpmaster.internal/ubuntu plucky-proposed/universe amd64 Packages [659 kB] 475s Get:10 http://ftpmaster.internal/ubuntu plucky-proposed/universe i386 Packages [273 kB] 475s Get:11 http://ftpmaster.internal/ubuntu plucky-proposed/multiverse amd64 Packages [37.7 kB] 475s Get:12 http://ftpmaster.internal/ubuntu plucky-proposed/multiverse i386 Packages [13.0 kB] 475s Fetched 2266 kB in 4s (516 kB/s) 475s Reading package lists... 477s Reading package lists... 477s Building dependency tree... 477s Reading state information... 478s Calculating upgrade... 478s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 478s Reading package lists... 478s Building dependency tree... 478s Reading state information... 478s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 479s Hit:1 http://ftpmaster.internal/ubuntu plucky-proposed InRelease 479s Hit:2 http://ftpmaster.internal/ubuntu plucky InRelease 479s Hit:3 http://ftpmaster.internal/ubuntu plucky-updates InRelease 479s Hit:4 http://ftpmaster.internal/ubuntu plucky-security InRelease 480s Reading package lists... 480s Reading package lists... 480s Building dependency tree... 480s Reading state information... 480s Calculating upgrade... 480s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 480s Reading package lists... 480s Building dependency tree... 480s Reading state information... 480s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 486s Note, using file '/tmp/autopkgtest.BBDYUq/3-autopkgtest-satdep.dsc' to get the build dependencies 486s Reading package lists... 486s Building dependency tree... 486s Reading state information... 486s Starting pkgProblemResolver with broken count: 0 486s Starting 2 pkgProblemResolver with broken count: 0 486s Done 487s The following NEW packages will be installed: 487s adwaita-icon-theme apport-gtk apport-kde apport-retrace apport-valgrind 487s at-spi2-common build-essential chaos-marmosets cpp cpp-14 487s cpp-14-x86-64-linux-gnu cpp-x86-64-linux-gnu dbus-x11 487s dconf-gsettings-backend dconf-service desktop-file-utils fontconfig 487s fontconfig-config fonts-dejavu-core fonts-dejavu-mono g++ g++-14 487s g++-14-x86-64-linux-gnu g++-x86-64-linux-gnu gcc gcc-14 487s gcc-14-x86-64-linux-gnu gcc-x86-64-linux-gnu gdb gdb-multiarch 487s gir1.2-atk-1.0 gir1.2-freedesktop gir1.2-gdkpixbuf-2.0 gir1.2-gtk-3.0 487s gir1.2-harfbuzz-0.0 gir1.2-pango-1.0 gir1.2-wnck-3.0 gnome-icon-theme 487s gnome-terminal gnome-terminal-data gsettings-desktop-schemas 487s gtk-update-icon-cache gvfs-common gvfs-daemons gvfs-libs hicolor-icon-theme 487s humanity-icon-theme libasan8 libatk-bridge2.0-0t64 libatk1.0-0t64 487s libatspi2.0-0t64 libavahi-client3 libavahi-common-data libavahi-common3 487s libbabeltrace1 libc6-dbg libcairo-gobject2 libcairo2 libcc1-0 libcolord2 487s libcups2t64 libdatrie1 libdconf1 libdebuginfod-common libdebuginfod1t64 487s libdeflate0 libdouble-conversion3 libdrm-amdgpu1 libdrm-intel1 487s libdrm-radeon1 libegl-mesa0 libegl1 libepoxy0 libfontconfig1 libfontenc1 487s libgbm1 libgcc-14-dev libgck-2-2 libgcr-4-4 libgdk-pixbuf-2.0-0 487s libgdk-pixbuf2.0-common libgl1 libgl1-mesa-dri libglapi-mesa libglvnd0 487s libglx-mesa0 libglx0 libgomp1 libgraphite2-3 libgtk-3-0t64 libgtk-3-common 487s libhandy-1-0 libharfbuzz-gobject0 libharfbuzz0b libhwasan0 libice6 487s libinput-bin libinput10 libipt2 libisl23 libitm1 libjbig0 libjpeg-turbo8 487s libjpeg8 liblcms2-2 liblerc4 liblsan0 libmd4c0 libmpc3 libmtdev1t64 487s libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libpangoxft-1.0-0 487s libpciaccess0 libpcre2-16-0 libpixman-1-0 libqt5core5t64 libqt5dbus5t64 487s libqt5designer5 libqt5gui5t64 libqt5help5 libqt5network5t64 487s libqt5printsupport5t64 libqt5sql5t64 libqt5test5t64 libqt5widgets5t64 487s libqt5xml5t64 libquadmath0 librsvg2-2 librsvg2-common libsecret-1-0 487s libsecret-common libsharpyuv0 libsm6 libsource-highlight-common 487s libsource-highlight4t64 libstartup-notification0 libstdc++-14-dev 487s libthai-data libthai0 libtiff6 libtsan2 libubsan1 libvte-2.91-0 487s libvte-2.91-common libvulkan1 libwacom-common libwacom9 libwayland-client0 487s libwayland-cursor0 libwayland-egl1 libwayland-server0 libwebp7 487s libwhoopsie-preferences0 libwhoopsie0 libwnck-3-0 libwnck-3-common 487s libx11-xcb1 libxaw7 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-icccm4 487s libxcb-image0 libxcb-keysyms1 libxcb-present0 libxcb-randr0 487s libxcb-render-util0 libxcb-render0 libxcb-shape0 libxcb-shm0 libxcb-sync1 487s libxcb-util1 libxcb-xfixes0 libxcb-xinerama0 libxcb-xinput0 libxcb-xkb1 487s libxcomposite1 libxcursor1 libxdamage1 libxfixes3 libxfont2 libxft2 libxi6 487s libxinerama1 libxkbcommon-x11-0 libxkbfile1 libxmu6 libxpm4 libxrandr2 487s libxrender1 libxres1 libxshmfence1 libxt6t64 libxxf86vm1 mesa-libgallium 487s python3-iniconfig python3-packaging python3-pluggy python3-psutil 487s python3-pyqt5 python3-pyqt5.sip python3-pytest ubuntu-dbgsym-keyring 487s ubuntu-mono valgrind whoopsie-preferences x11-common x11-xkb-utils 487s xserver-common xvfb 487s 0 upgraded, 212 newly installed, 0 to remove and 0 not upgraded. 487s Need to get 153 MB of archives. 487s After this operation, 559 MB of additional disk space will be used. 487s Get:1 http://ftpmaster.internal/ubuntu plucky/main amd64 libdebuginfod-common all 0.192-4 [15.4 kB] 487s Get:2 http://ftpmaster.internal/ubuntu plucky/main amd64 libgdk-pixbuf2.0-common all 2.42.12+dfsg-1 [7888 B] 487s Get:3 http://ftpmaster.internal/ubuntu plucky/main amd64 libjpeg-turbo8 amd64 2.1.5-2ubuntu2 [150 kB] 487s Get:4 http://ftpmaster.internal/ubuntu plucky/main amd64 libjpeg8 amd64 8c-2ubuntu11 [2148 B] 487s Get:5 http://ftpmaster.internal/ubuntu plucky/main amd64 libdeflate0 amd64 1.22-1 [64.5 kB] 487s Get:6 http://ftpmaster.internal/ubuntu plucky/main amd64 libjbig0 amd64 2.1-6.1ubuntu2 [29.7 kB] 487s Get:7 http://ftpmaster.internal/ubuntu plucky/main amd64 liblerc4 amd64 4.0.0+ds-4ubuntu2 [179 kB] 488s Get:8 http://ftpmaster.internal/ubuntu plucky/main amd64 libsharpyuv0 amd64 1.4.0-0.1 [17.5 kB] 488s Get:9 http://ftpmaster.internal/ubuntu plucky/main amd64 libwebp7 amd64 1.4.0-0.1 [231 kB] 488s Get:10 http://ftpmaster.internal/ubuntu plucky/main amd64 libtiff6 amd64 4.5.1+git230720-4ubuntu4 [200 kB] 488s Get:11 http://ftpmaster.internal/ubuntu plucky/main amd64 libgdk-pixbuf-2.0-0 amd64 2.42.12+dfsg-1 [147 kB] 488s Get:12 http://ftpmaster.internal/ubuntu plucky/main amd64 gtk-update-icon-cache amd64 4.16.5+ds-1 [52.4 kB] 488s Get:13 http://ftpmaster.internal/ubuntu plucky/main amd64 hicolor-icon-theme all 0.18-1 [13.5 kB] 488s Get:14 http://ftpmaster.internal/ubuntu plucky/main amd64 humanity-icon-theme all 0.6.16 [1282 kB] 490s Get:15 http://ftpmaster.internal/ubuntu plucky/main amd64 ubuntu-mono all 24.04-0ubuntu1 [151 kB] 490s Get:16 http://ftpmaster.internal/ubuntu plucky/main amd64 adwaita-icon-theme all 47.0-2 [525 kB] 491s Get:17 http://ftpmaster.internal/ubuntu plucky/main amd64 at-spi2-common all 2.54.0-1 [8774 B] 491s Get:18 http://ftpmaster.internal/ubuntu plucky/main amd64 libatk1.0-0t64 amd64 2.54.0-1 [55.1 kB] 491s Get:19 http://ftpmaster.internal/ubuntu plucky/main amd64 gir1.2-atk-1.0 amd64 2.54.0-1 [23.0 kB] 491s Get:20 http://ftpmaster.internal/ubuntu plucky/main amd64 fonts-dejavu-mono all 2.37-8 [502 kB] 492s Get:21 http://ftpmaster.internal/ubuntu plucky/main amd64 fonts-dejavu-core all 2.37-8 [835 kB] 495s Get:22 http://ftpmaster.internal/ubuntu plucky/main amd64 fontconfig-config amd64 2.15.0-1.1ubuntu2 [37.3 kB] 495s Get:23 http://ftpmaster.internal/ubuntu plucky/main amd64 libfontconfig1 amd64 2.15.0-1.1ubuntu2 [139 kB] 495s Get:24 http://ftpmaster.internal/ubuntu plucky/main amd64 libpixman-1-0 amd64 0.44.0-3 [427 kB] 495s Get:25 http://ftpmaster.internal/ubuntu plucky/main amd64 libxcb-render0 amd64 1.17.0-2 [16.2 kB] 495s Get:26 http://ftpmaster.internal/ubuntu plucky/main amd64 libxcb-shm0 amd64 1.17.0-2 [5758 B] 495s Get:27 http://ftpmaster.internal/ubuntu plucky/main amd64 libxrender1 amd64 1:0.9.10-1.1build1 [19.0 kB] 495s Get:28 http://ftpmaster.internal/ubuntu plucky/main amd64 libcairo2 amd64 1.18.2-2 [569 kB] 495s Get:29 http://ftpmaster.internal/ubuntu plucky/main amd64 libcairo-gobject2 amd64 1.18.2-2 [127 kB] 495s Get:30 http://ftpmaster.internal/ubuntu plucky/main amd64 gir1.2-freedesktop amd64 1.80.1-4 [50.2 kB] 495s Get:31 http://ftpmaster.internal/ubuntu plucky/main amd64 gir1.2-gdkpixbuf-2.0 amd64 2.42.12+dfsg-1 [9438 B] 495s Get:32 http://ftpmaster.internal/ubuntu plucky/main amd64 libgraphite2-3 amd64 1.3.14-2ubuntu1 [73.1 kB] 495s Get:33 http://ftpmaster.internal/ubuntu plucky/main amd64 libharfbuzz0b amd64 10.0.1-1 [540 kB] 496s Get:34 http://ftpmaster.internal/ubuntu plucky/main amd64 libharfbuzz-gobject0 amd64 10.0.1-1 [34.6 kB] 496s Get:35 http://ftpmaster.internal/ubuntu plucky/main amd64 gir1.2-harfbuzz-0.0 amd64 10.0.1-1 [45.3 kB] 496s Get:36 http://ftpmaster.internal/ubuntu plucky/main amd64 fontconfig amd64 2.15.0-1.1ubuntu2 [180 kB] 496s Get:37 http://ftpmaster.internal/ubuntu plucky/main amd64 libthai-data all 0.1.29-2build1 [158 kB] 497s Get:38 http://ftpmaster.internal/ubuntu plucky/main amd64 libdatrie1 amd64 0.2.13-3build1 [19.0 kB] 497s Get:39 http://ftpmaster.internal/ubuntu plucky/main amd64 libthai0 amd64 0.1.29-2build1 [18.9 kB] 497s Get:40 http://ftpmaster.internal/ubuntu plucky/main amd64 libpango-1.0-0 amd64 1.54.0+ds-3 [252 kB] 497s Get:41 http://ftpmaster.internal/ubuntu plucky/main amd64 libpangoft2-1.0-0 amd64 1.54.0+ds-3 [51.6 kB] 497s Get:42 http://ftpmaster.internal/ubuntu plucky/main amd64 libpangocairo-1.0-0 amd64 1.54.0+ds-3 [29.1 kB] 497s Get:43 http://ftpmaster.internal/ubuntu plucky/main amd64 libxft2 amd64 2.3.6-1build1 [45.3 kB] 497s Get:44 http://ftpmaster.internal/ubuntu plucky/main amd64 libpangoxft-1.0-0 amd64 1.54.0+ds-3 [21.1 kB] 497s Get:45 http://ftpmaster.internal/ubuntu plucky/main amd64 gir1.2-pango-1.0 amd64 1.54.0+ds-3 [34.5 kB] 497s Get:46 http://ftpmaster.internal/ubuntu plucky/main amd64 libxi6 amd64 2:1.8.2-1 [32.4 kB] 497s Get:47 http://ftpmaster.internal/ubuntu plucky/main amd64 libatspi2.0-0t64 amd64 2.54.0-1 [79.6 kB] 497s Get:48 http://ftpmaster.internal/ubuntu plucky/main amd64 libatk-bridge2.0-0t64 amd64 2.54.0-1 [66.3 kB] 497s Get:49 http://ftpmaster.internal/ubuntu plucky/main amd64 liblcms2-2 amd64 2.16-2 [212 kB] 498s Get:50 http://ftpmaster.internal/ubuntu plucky/main amd64 libcolord2 amd64 1.4.7-1build2 [149 kB] 498s Get:51 http://ftpmaster.internal/ubuntu plucky/main amd64 libavahi-common-data amd64 0.8-13ubuntu6 [29.7 kB] 498s Get:52 http://ftpmaster.internal/ubuntu plucky/main amd64 libavahi-common3 amd64 0.8-13ubuntu6 [23.3 kB] 498s Get:53 http://ftpmaster.internal/ubuntu plucky/main amd64 libavahi-client3 amd64 0.8-13ubuntu6 [26.8 kB] 498s Get:54 http://ftpmaster.internal/ubuntu plucky/main amd64 libcups2t64 amd64 2.4.10-1ubuntu2 [271 kB] 499s Get:55 http://ftpmaster.internal/ubuntu plucky/main amd64 libepoxy0 amd64 1.5.10-2 [218 kB] 499s Get:56 http://ftpmaster.internal/ubuntu plucky/main amd64 libwayland-client0 amd64 1.23.0-1 [27.1 kB] 499s Get:57 http://ftpmaster.internal/ubuntu plucky/main amd64 libwayland-cursor0 amd64 1.23.0-1 [10.8 kB] 499s Get:58 http://ftpmaster.internal/ubuntu plucky/main amd64 libwayland-egl1 amd64 1.23.0-1 [5662 B] 499s Get:59 http://ftpmaster.internal/ubuntu plucky/main amd64 libxcomposite1 amd64 1:0.4.6-1 [6642 B] 499s Get:60 http://ftpmaster.internal/ubuntu plucky/main amd64 libxfixes3 amd64 1:6.0.0-2build1 [10.8 kB] 499s Get:61 http://ftpmaster.internal/ubuntu plucky/main amd64 libxcursor1 amd64 1:1.2.2-1 [20.9 kB] 499s Get:62 http://ftpmaster.internal/ubuntu plucky/main amd64 libxdamage1 amd64 1:1.1.6-1build1 [6150 B] 499s Get:63 http://ftpmaster.internal/ubuntu plucky/main amd64 libxinerama1 amd64 2:1.1.4-3build1 [6396 B] 499s Get:64 http://ftpmaster.internal/ubuntu plucky/main amd64 libxrandr2 amd64 2:1.5.4-1 [19.6 kB] 499s Get:65 http://ftpmaster.internal/ubuntu plucky/main amd64 dbus-x11 amd64 1.14.10-4ubuntu5 [23.4 kB] 499s Get:66 http://ftpmaster.internal/ubuntu plucky/main amd64 libdconf1 amd64 0.40.0-4build2 [39.4 kB] 499s Get:67 http://ftpmaster.internal/ubuntu plucky/main amd64 dconf-service amd64 0.40.0-4build2 [27.5 kB] 499s Get:68 http://ftpmaster.internal/ubuntu plucky/main amd64 dconf-gsettings-backend amd64 0.40.0-4build2 [22.1 kB] 499s Get:69 http://ftpmaster.internal/ubuntu plucky/main amd64 libgtk-3-common all 3.24.43-3ubuntu2 [1202 kB] 500s Get:70 http://ftpmaster.internal/ubuntu plucky/main amd64 libgtk-3-0t64 amd64 3.24.43-3ubuntu2 [2927 kB] 505s Get:71 http://ftpmaster.internal/ubuntu plucky/main amd64 gir1.2-gtk-3.0 amd64 3.24.43-3ubuntu2 [241 kB] 505s Get:72 http://ftpmaster.internal/ubuntu plucky/main amd64 libx11-xcb1 amd64 2:1.8.10-2 [7944 B] 505s Get:73 http://ftpmaster.internal/ubuntu plucky/main amd64 libxcb-util1 amd64 0.4.0-1build3 [10.7 kB] 505s Get:74 http://ftpmaster.internal/ubuntu plucky/main amd64 libstartup-notification0 amd64 0.12-7ubuntu1 [18.8 kB] 505s Get:75 http://ftpmaster.internal/ubuntu plucky/main amd64 libxres1 amd64 2:1.2.1-1build1 [6778 B] 505s Get:76 http://ftpmaster.internal/ubuntu plucky/main amd64 libwnck-3-common all 43.1-1 [19.8 kB] 505s Get:77 http://ftpmaster.internal/ubuntu plucky/main amd64 libwnck-3-0 amd64 43.1-1 [120 kB] 505s Get:78 http://ftpmaster.internal/ubuntu plucky/main amd64 gir1.2-wnck-3.0 amd64 43.1-1 [10.3 kB] 505s Get:79 http://ftpmaster.internal/ubuntu plucky/main amd64 gnome-terminal-data all 3.54.0-1ubuntu1 [38.7 kB] 505s Get:80 http://ftpmaster.internal/ubuntu plucky/main amd64 gsettings-desktop-schemas all 47.1-1ubuntu1 [36.9 kB] 505s Get:81 http://ftpmaster.internal/ubuntu plucky/main amd64 libhandy-1-0 amd64 1.8.3-1build2 [232 kB] 506s Get:82 http://ftpmaster.internal/ubuntu plucky/main amd64 libvte-2.91-common amd64 0.78.1-1 [14.4 kB] 506s Get:83 http://ftpmaster.internal/ubuntu plucky/main amd64 libvte-2.91-0 amd64 0.78.1-1 [306 kB] 506s Get:84 http://ftpmaster.internal/ubuntu plucky/main amd64 gnome-terminal amd64 3.54.0-1ubuntu1 [218 kB] 506s Get:85 http://ftpmaster.internal/ubuntu plucky/main amd64 libwhoopsie-preferences0 amd64 23build3 [14.4 kB] 506s Get:86 http://ftpmaster.internal/ubuntu plucky/main amd64 libwhoopsie0 amd64 0.2.78 [11.1 kB] 506s Get:87 http://ftpmaster.internal/ubuntu plucky/main amd64 whoopsie-preferences amd64 23build3 [8850 B] 506s Get:88 http://ftpmaster.internal/ubuntu plucky/main amd64 apport-gtk all 2.30.0-0ubuntu4 [9846 B] 506s Get:89 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-pyqt5.sip amd64 12.15.0-1 [60.6 kB] 507s Get:90 http://ftpmaster.internal/ubuntu plucky/universe amd64 libdouble-conversion3 amd64 3.3.0-1build1 [40.3 kB] 507s Get:91 http://ftpmaster.internal/ubuntu plucky/main amd64 libpcre2-16-0 amd64 10.42-4ubuntu3 [214 kB] 507s Get:92 http://ftpmaster.internal/ubuntu plucky/universe amd64 libqt5core5t64 amd64 5.15.15+dfsg-1ubuntu1 [2036 kB] 509s Get:93 http://ftpmaster.internal/ubuntu plucky/universe amd64 libqt5dbus5t64 amd64 5.15.15+dfsg-1ubuntu1 [221 kB] 510s Get:94 http://ftpmaster.internal/ubuntu plucky/main amd64 libglvnd0 amd64 1.7.0-1build1 [69.6 kB] 510s Get:95 http://ftpmaster.internal/ubuntu plucky/main amd64 libwayland-server0 amd64 1.23.0-1 [35.1 kB] 510s Get:96 http://ftpmaster.internal/ubuntu plucky/main amd64 libxcb-randr0 amd64 1.17.0-2 [17.9 kB] 510s Get:97 http://ftpmaster.internal/ubuntu plucky/main amd64 libdrm-amdgpu1 amd64 2.4.123-1 [21.7 kB] 510s Get:98 http://ftpmaster.internal/ubuntu plucky/main amd64 libpciaccess0 amd64 0.17-3build1 [18.6 kB] 510s Get:99 http://ftpmaster.internal/ubuntu plucky/main amd64 libdrm-intel1 amd64 2.4.123-1 [68.8 kB] 510s Get:100 http://ftpmaster.internal/ubuntu plucky/main amd64 libdrm-radeon1 amd64 2.4.123-1 [25.3 kB] 510s Get:101 http://ftpmaster.internal/ubuntu plucky/main amd64 libglapi-mesa amd64 24.2.3-1ubuntu1 [42.4 kB] 510s Get:102 http://ftpmaster.internal/ubuntu plucky/main amd64 libxcb-dri2-0 amd64 1.17.0-2 [7222 B] 510s Get:103 http://ftpmaster.internal/ubuntu plucky/main amd64 libxcb-dri3-0 amd64 1.17.0-2 [7508 B] 510s Get:104 http://ftpmaster.internal/ubuntu plucky/main amd64 libxcb-present0 amd64 1.17.0-2 [6064 B] 510s Get:105 http://ftpmaster.internal/ubuntu plucky/main amd64 libxcb-sync1 amd64 1.17.0-2 [9312 B] 511s Get:106 http://ftpmaster.internal/ubuntu plucky/main amd64 libxcb-xfixes0 amd64 1.17.0-2 [10.2 kB] 511s Get:107 http://ftpmaster.internal/ubuntu plucky/main amd64 libxshmfence1 amd64 1.3-1build5 [4764 B] 511s Get:108 http://ftpmaster.internal/ubuntu plucky/main amd64 mesa-libgallium amd64 24.2.3-1ubuntu1 [9904 kB] 529s Get:109 http://ftpmaster.internal/ubuntu plucky/main amd64 libgbm1 amd64 24.2.3-1ubuntu1 [32.0 kB] 529s Get:110 http://ftpmaster.internal/ubuntu plucky/main amd64 libegl-mesa0 amd64 24.2.3-1ubuntu1 [129 kB] 529s Get:111 http://ftpmaster.internal/ubuntu plucky/main amd64 libegl1 amd64 1.7.0-1build1 [28.7 kB] 529s Get:112 http://ftpmaster.internal/ubuntu plucky/main amd64 libxcb-glx0 amd64 1.17.0-2 [24.8 kB] 529s Get:113 http://ftpmaster.internal/ubuntu plucky/main amd64 libxxf86vm1 amd64 1:1.1.4-1build4 [9282 B] 529s Get:114 http://ftpmaster.internal/ubuntu plucky/main amd64 libvulkan1 amd64 1.3.296.0-1 [143 kB] 529s Get:115 http://ftpmaster.internal/ubuntu plucky/main amd64 libgl1-mesa-dri amd64 24.2.3-1ubuntu1 [34.4 kB] 529s Get:116 http://ftpmaster.internal/ubuntu plucky/main amd64 libglx-mesa0 amd64 24.2.3-1ubuntu1 [153 kB] 529s Get:117 http://ftpmaster.internal/ubuntu plucky/main amd64 libglx0 amd64 1.7.0-1build1 [38.6 kB] 529s Get:118 http://ftpmaster.internal/ubuntu plucky/main amd64 libgl1 amd64 1.7.0-1build1 [102 kB] 530s Get:119 http://ftpmaster.internal/ubuntu plucky/main amd64 x11-common all 1:7.7+23ubuntu3 [21.7 kB] 530s Get:120 http://ftpmaster.internal/ubuntu plucky/main amd64 libice6 amd64 2:1.1.1-1 [44.1 kB] 530s Get:121 http://ftpmaster.internal/ubuntu plucky/main amd64 libmtdev1t64 amd64 1.1.6-1.2 [14.4 kB] 530s Get:122 http://ftpmaster.internal/ubuntu plucky/main amd64 libwacom-common all 2.13.0-1 [98.6 kB] 530s Get:123 http://ftpmaster.internal/ubuntu plucky/main amd64 libwacom9 amd64 2.13.0-1 [25.1 kB] 530s Get:124 http://ftpmaster.internal/ubuntu plucky/main amd64 libinput-bin amd64 1.26.2-1 [22.8 kB] 530s Get:125 http://ftpmaster.internal/ubuntu plucky/main amd64 libinput10 amd64 1.26.2-1 [137 kB] 530s Get:126 http://ftpmaster.internal/ubuntu plucky/universe amd64 libmd4c0 amd64 0.5.2-2 [50.1 kB] 530s Get:127 http://ftpmaster.internal/ubuntu plucky/universe amd64 libqt5network5t64 amd64 5.15.15+dfsg-1ubuntu1 [724 kB] 531s Get:128 http://ftpmaster.internal/ubuntu plucky/main amd64 libsm6 amd64 2:1.2.4-1 [17.4 kB] 531s Get:129 http://ftpmaster.internal/ubuntu plucky/main amd64 libxcb-icccm4 amd64 0.4.2-1 [11.1 kB] 531s Get:130 http://ftpmaster.internal/ubuntu plucky/main amd64 libxcb-image0 amd64 0.4.0-2build1 [10.8 kB] 531s Get:131 http://ftpmaster.internal/ubuntu plucky/main amd64 libxcb-keysyms1 amd64 0.4.0-1build4 [7956 B] 531s Get:132 http://ftpmaster.internal/ubuntu plucky/main amd64 libxcb-render-util0 amd64 0.3.9-1build4 [9608 B] 531s Get:133 http://ftpmaster.internal/ubuntu plucky/main amd64 libxcb-shape0 amd64 1.17.0-2 [6092 B] 531s Get:134 http://ftpmaster.internal/ubuntu plucky/main amd64 libxcb-xinerama0 amd64 1.17.0-2 [5412 B] 531s Get:135 http://ftpmaster.internal/ubuntu plucky/main amd64 libxcb-xinput0 amd64 1.17.0-2 [33.2 kB] 531s Get:136 http://ftpmaster.internal/ubuntu plucky/main amd64 libxcb-xkb1 amd64 1.17.0-2 [32.3 kB] 531s Get:137 http://ftpmaster.internal/ubuntu plucky/main amd64 libxkbcommon-x11-0 amd64 1.6.0-1build1 [14.5 kB] 531s Get:138 http://ftpmaster.internal/ubuntu plucky/universe amd64 libqt5gui5t64 amd64 5.15.15+dfsg-1ubuntu1 [3791 kB] 537s Get:139 http://ftpmaster.internal/ubuntu plucky/universe amd64 libqt5widgets5t64 amd64 5.15.15+dfsg-1ubuntu1 [2561 kB] 540s Get:140 http://ftpmaster.internal/ubuntu plucky/universe amd64 libqt5xml5t64 amd64 5.15.15+dfsg-1ubuntu1 [124 kB] 540s Get:141 http://ftpmaster.internal/ubuntu plucky/universe amd64 libqt5designer5 amd64 5.15.15-2 [2827 kB] 544s Get:142 http://ftpmaster.internal/ubuntu plucky/universe amd64 libqt5sql5t64 amd64 5.15.15+dfsg-1ubuntu1 [122 kB] 544s Get:143 http://ftpmaster.internal/ubuntu plucky/universe amd64 libqt5help5 amd64 5.15.15-2 [161 kB] 544s Get:144 http://ftpmaster.internal/ubuntu plucky/universe amd64 libqt5printsupport5t64 amd64 5.15.15+dfsg-1ubuntu1 [208 kB] 544s Get:145 http://ftpmaster.internal/ubuntu plucky/universe amd64 libqt5test5t64 amd64 5.15.15+dfsg-1ubuntu1 [149 kB] 545s Get:146 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-pyqt5 amd64 5.15.11+dfsg-1build1 [2726 kB] 548s Get:147 http://ftpmaster.internal/ubuntu plucky/universe amd64 apport-kde all 2.30.0-0ubuntu4 [18.8 kB] 548s Get:148 http://ftpmaster.internal/ubuntu plucky/main amd64 libbabeltrace1 amd64 1.5.11-4 [164 kB] 548s Get:149 http://ftpmaster.internal/ubuntu plucky/main amd64 libdebuginfod1t64 amd64 0.192-4 [21.0 kB] 548s Get:150 http://ftpmaster.internal/ubuntu plucky/main amd64 libipt2 amd64 2.1.1-1 [58.9 kB] 548s Get:151 http://ftpmaster.internal/ubuntu plucky/main amd64 libsource-highlight-common all 3.1.9-4.3build1 [64.2 kB] 548s Get:152 http://ftpmaster.internal/ubuntu plucky/main amd64 libsource-highlight4t64 amd64 3.1.9-4.3build1 [258 kB] 549s Get:153 http://ftpmaster.internal/ubuntu plucky/main amd64 gdb amd64 15.1-1ubuntu2 [4119 kB] 554s Get:154 http://ftpmaster.internal/ubuntu plucky/main amd64 libc6-dbg amd64 2.40-1ubuntu3 [7627 kB] 563s Get:155 http://ftpmaster.internal/ubuntu plucky/main amd64 apport-retrace all 2.30.0-0ubuntu4 [14.6 kB] 563s Get:156 http://ftpmaster.internal/ubuntu plucky/main amd64 valgrind amd64 1:3.23.0-0ubuntu2 [14.7 MB] 581s Get:157 http://ftpmaster.internal/ubuntu plucky/universe amd64 apport-valgrind all 2.30.0-0ubuntu4 [5226 B] 581s Get:158 http://ftpmaster.internal/ubuntu plucky/main amd64 libisl23 amd64 0.27-1 [685 kB] 582s Get:159 http://ftpmaster.internal/ubuntu plucky/main amd64 libmpc3 amd64 1.3.1-1build2 [55.3 kB] 582s Get:160 http://ftpmaster.internal/ubuntu plucky/main amd64 cpp-14-x86-64-linux-gnu amd64 14.2.0-7ubuntu1 [11.9 MB] 597s Get:161 http://ftpmaster.internal/ubuntu plucky/main amd64 cpp-14 amd64 14.2.0-7ubuntu1 [1026 B] 597s Get:162 http://ftpmaster.internal/ubuntu plucky/main amd64 cpp-x86-64-linux-gnu amd64 4:14.1.0-2ubuntu1 [5452 B] 597s Get:163 http://ftpmaster.internal/ubuntu plucky/main amd64 cpp amd64 4:14.1.0-2ubuntu1 [22.4 kB] 597s Get:164 http://ftpmaster.internal/ubuntu plucky/main amd64 libcc1-0 amd64 14.2.0-7ubuntu1 [47.6 kB] 597s Get:165 http://ftpmaster.internal/ubuntu plucky/main amd64 libgomp1 amd64 14.2.0-7ubuntu1 [148 kB] 597s Get:166 http://ftpmaster.internal/ubuntu plucky/main amd64 libitm1 amd64 14.2.0-7ubuntu1 [29.1 kB] 597s Get:167 http://ftpmaster.internal/ubuntu plucky/main amd64 libasan8 amd64 14.2.0-7ubuntu1 [2998 kB] 600s Get:168 http://ftpmaster.internal/ubuntu plucky/main amd64 liblsan0 amd64 14.2.0-7ubuntu1 [1316 kB] 602s Get:169 http://ftpmaster.internal/ubuntu plucky/main amd64 libtsan2 amd64 14.2.0-7ubuntu1 [2733 kB] 606s Get:170 http://ftpmaster.internal/ubuntu plucky/main amd64 libubsan1 amd64 14.2.0-7ubuntu1 [1177 kB] 607s Get:171 http://ftpmaster.internal/ubuntu plucky/main amd64 libhwasan0 amd64 14.2.0-7ubuntu1 [1634 kB] 609s Get:172 http://ftpmaster.internal/ubuntu plucky/main amd64 libquadmath0 amd64 14.2.0-7ubuntu1 [153 kB] 609s Get:173 http://ftpmaster.internal/ubuntu plucky/main amd64 libgcc-14-dev amd64 14.2.0-7ubuntu1 [2814 kB] 613s Get:174 http://ftpmaster.internal/ubuntu plucky/main amd64 gcc-14-x86-64-linux-gnu amd64 14.2.0-7ubuntu1 [23.4 MB] 640s Get:175 http://ftpmaster.internal/ubuntu plucky/main amd64 gcc-14 amd64 14.2.0-7ubuntu1 [526 kB] 641s Get:176 http://ftpmaster.internal/ubuntu plucky/main amd64 gcc-x86-64-linux-gnu amd64 4:14.1.0-2ubuntu1 [1214 B] 641s Get:177 http://ftpmaster.internal/ubuntu plucky/main amd64 gcc amd64 4:14.1.0-2ubuntu1 [5000 B] 641s Get:178 http://ftpmaster.internal/ubuntu plucky/main amd64 libstdc++-14-dev amd64 14.2.0-7ubuntu1 [2503 kB] 644s Get:179 http://ftpmaster.internal/ubuntu plucky/main amd64 g++-14-x86-64-linux-gnu amd64 14.2.0-7ubuntu1 [13.4 MB] 661s Get:180 http://ftpmaster.internal/ubuntu plucky/main amd64 g++-14 amd64 14.2.0-7ubuntu1 [19.8 kB] 661s Get:181 http://ftpmaster.internal/ubuntu plucky/main amd64 g++-x86-64-linux-gnu amd64 4:14.1.0-2ubuntu1 [966 B] 661s Get:182 http://ftpmaster.internal/ubuntu plucky/main amd64 g++ amd64 4:14.1.0-2ubuntu1 [1100 B] 661s Get:183 http://ftpmaster.internal/ubuntu plucky/main amd64 build-essential amd64 12.10ubuntu1 [4928 B] 661s Get:184 http://ftpmaster.internal/ubuntu plucky/universe amd64 chaos-marmosets amd64 0.2.0-1 [9714 B] 661s Get:185 http://ftpmaster.internal/ubuntu plucky/main amd64 desktop-file-utils amd64 0.27-2build1 [53.8 kB] 662s Get:186 http://ftpmaster.internal/ubuntu plucky/universe amd64 gdb-multiarch amd64 15.1-1ubuntu2 [4599 kB] 667s Get:187 http://ftpmaster.internal/ubuntu plucky/main amd64 librsvg2-2 amd64 2.59.1+dfsg-1 [1814 kB] 670s Get:188 http://ftpmaster.internal/ubuntu plucky/main amd64 librsvg2-common amd64 2.59.1+dfsg-1 [153 kB] 670s Get:189 http://ftpmaster.internal/ubuntu plucky/universe amd64 gnome-icon-theme all 3.12.0-5 [9619 kB] 684s Get:190 http://ftpmaster.internal/ubuntu plucky/main amd64 gvfs-common all 1.56.1-1 [13.6 kB] 684s Get:191 http://ftpmaster.internal/ubuntu plucky/main amd64 libgck-2-2 amd64 4.3.0-1 [77.4 kB] 684s Get:192 http://ftpmaster.internal/ubuntu plucky/main amd64 libgcr-4-4 amd64 4.3.0-1 [194 kB] 685s Get:193 http://ftpmaster.internal/ubuntu plucky/main amd64 libsecret-common all 0.21.4-3 [4966 B] 685s Get:194 http://ftpmaster.internal/ubuntu plucky/main amd64 libsecret-1-0 amd64 0.21.4-3 [116 kB] 685s Get:195 http://ftpmaster.internal/ubuntu plucky/main amd64 gvfs-libs amd64 1.56.1-1 [109 kB] 685s Get:196 http://ftpmaster.internal/ubuntu plucky/main amd64 gvfs-daemons amd64 1.56.1-1 [118 kB] 686s Get:197 http://ftpmaster.internal/ubuntu plucky/main amd64 libfontenc1 amd64 1:1.1.8-1build1 [14.0 kB] 686s Get:198 http://ftpmaster.internal/ubuntu plucky/main amd64 libxt6t64 amd64 1:1.2.1-1.2build1 [171 kB] 686s Get:199 http://ftpmaster.internal/ubuntu plucky/main amd64 libxmu6 amd64 2:1.1.3-3build2 [47.6 kB] 686s Get:200 http://ftpmaster.internal/ubuntu plucky/main amd64 libxpm4 amd64 1:3.5.17-1build2 [36.5 kB] 686s Get:201 http://ftpmaster.internal/ubuntu plucky/main amd64 libxaw7 amd64 2:1.0.16-1 [207 kB] 687s Get:202 http://ftpmaster.internal/ubuntu plucky/main amd64 libxfont2 amd64 1:2.0.6-1build1 [93.0 kB] 687s Get:203 http://ftpmaster.internal/ubuntu plucky/main amd64 libxkbfile1 amd64 1:1.1.0-1build4 [70.0 kB] 687s Get:204 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-iniconfig all 1.1.1-2 [6024 B] 687s Get:205 http://ftpmaster.internal/ubuntu plucky/main amd64 python3-packaging all 24.1-1 [41.4 kB] 687s Get:206 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-pluggy all 1.5.0-1 [21.0 kB] 687s Get:207 http://ftpmaster.internal/ubuntu plucky/main amd64 python3-psutil amd64 5.9.8-2build2 [195 kB] 688s Get:208 http://ftpmaster.internal/ubuntu plucky/universe amd64 python3-pytest all 8.3.3-1 [251 kB] 688s Get:209 http://ftpmaster.internal/ubuntu plucky/main amd64 ubuntu-dbgsym-keyring all 2023.11.28.1 [4528 B] 688s Get:210 http://ftpmaster.internal/ubuntu plucky/main amd64 x11-xkb-utils amd64 7.7+9 [169 kB] 689s Get:211 http://ftpmaster.internal/ubuntu plucky-proposed/main amd64 xserver-common all 2:21.1.14-2ubuntu1 [33.7 kB] 689s Get:212 http://ftpmaster.internal/ubuntu plucky-proposed/universe amd64 xvfb amd64 2:21.1.14-2ubuntu1 [965 kB] 691s Preconfiguring packages ... 691s Fetched 153 MB in 3min 24s (753 kB/s) 691s Selecting previously unselected package libdebuginfod-common. 691s (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 ... 75553 files and directories currently installed.) 691s Preparing to unpack .../000-libdebuginfod-common_0.192-4_all.deb ... 691s Unpacking libdebuginfod-common (0.192-4) ... 691s Selecting previously unselected package libgdk-pixbuf2.0-common. 691s Preparing to unpack .../001-libgdk-pixbuf2.0-common_2.42.12+dfsg-1_all.deb ... 691s Unpacking libgdk-pixbuf2.0-common (2.42.12+dfsg-1) ... 691s Selecting previously unselected package libjpeg-turbo8:amd64. 691s Preparing to unpack .../002-libjpeg-turbo8_2.1.5-2ubuntu2_amd64.deb ... 691s Unpacking libjpeg-turbo8:amd64 (2.1.5-2ubuntu2) ... 691s Selecting previously unselected package libjpeg8:amd64. 691s Preparing to unpack .../003-libjpeg8_8c-2ubuntu11_amd64.deb ... 691s Unpacking libjpeg8:amd64 (8c-2ubuntu11) ... 691s Selecting previously unselected package libdeflate0:amd64. 691s Preparing to unpack .../004-libdeflate0_1.22-1_amd64.deb ... 691s Unpacking libdeflate0:amd64 (1.22-1) ... 691s Selecting previously unselected package libjbig0:amd64. 691s Preparing to unpack .../005-libjbig0_2.1-6.1ubuntu2_amd64.deb ... 691s Unpacking libjbig0:amd64 (2.1-6.1ubuntu2) ... 691s Selecting previously unselected package liblerc4:amd64. 691s Preparing to unpack .../006-liblerc4_4.0.0+ds-4ubuntu2_amd64.deb ... 691s Unpacking liblerc4:amd64 (4.0.0+ds-4ubuntu2) ... 691s Selecting previously unselected package libsharpyuv0:amd64. 691s Preparing to unpack .../007-libsharpyuv0_1.4.0-0.1_amd64.deb ... 691s Unpacking libsharpyuv0:amd64 (1.4.0-0.1) ... 691s Selecting previously unselected package libwebp7:amd64. 691s Preparing to unpack .../008-libwebp7_1.4.0-0.1_amd64.deb ... 691s Unpacking libwebp7:amd64 (1.4.0-0.1) ... 691s Selecting previously unselected package libtiff6:amd64. 691s Preparing to unpack .../009-libtiff6_4.5.1+git230720-4ubuntu4_amd64.deb ... 691s Unpacking libtiff6:amd64 (4.5.1+git230720-4ubuntu4) ... 691s Selecting previously unselected package libgdk-pixbuf-2.0-0:amd64. 691s Preparing to unpack .../010-libgdk-pixbuf-2.0-0_2.42.12+dfsg-1_amd64.deb ... 691s Unpacking libgdk-pixbuf-2.0-0:amd64 (2.42.12+dfsg-1) ... 691s Selecting previously unselected package gtk-update-icon-cache. 691s Preparing to unpack .../011-gtk-update-icon-cache_4.16.5+ds-1_amd64.deb ... 691s No diversion 'diversion of /usr/sbin/update-icon-caches to /usr/sbin/update-icon-caches.gtk2 by libgtk-3-bin', none removed. 691s No diversion 'diversion of /usr/share/man/man8/update-icon-caches.8.gz to /usr/share/man/man8/update-icon-caches.gtk2.8.gz by libgtk-3-bin', none removed. 691s Unpacking gtk-update-icon-cache (4.16.5+ds-1) ... 691s Selecting previously unselected package hicolor-icon-theme. 691s Preparing to unpack .../012-hicolor-icon-theme_0.18-1_all.deb ... 691s Unpacking hicolor-icon-theme (0.18-1) ... 691s Selecting previously unselected package humanity-icon-theme. 691s Preparing to unpack .../013-humanity-icon-theme_0.6.16_all.deb ... 691s Unpacking humanity-icon-theme (0.6.16) ... 692s Selecting previously unselected package ubuntu-mono. 692s Preparing to unpack .../014-ubuntu-mono_24.04-0ubuntu1_all.deb ... 692s Unpacking ubuntu-mono (24.04-0ubuntu1) ... 693s Selecting previously unselected package adwaita-icon-theme. 693s Preparing to unpack .../015-adwaita-icon-theme_47.0-2_all.deb ... 693s Unpacking adwaita-icon-theme (47.0-2) ... 693s Selecting previously unselected package at-spi2-common. 693s Preparing to unpack .../016-at-spi2-common_2.54.0-1_all.deb ... 693s Unpacking at-spi2-common (2.54.0-1) ... 693s Selecting previously unselected package libatk1.0-0t64:amd64. 693s Preparing to unpack .../017-libatk1.0-0t64_2.54.0-1_amd64.deb ... 693s Unpacking libatk1.0-0t64:amd64 (2.54.0-1) ... 693s Selecting previously unselected package gir1.2-atk-1.0:amd64. 693s Preparing to unpack .../018-gir1.2-atk-1.0_2.54.0-1_amd64.deb ... 693s Unpacking gir1.2-atk-1.0:amd64 (2.54.0-1) ... 693s Selecting previously unselected package fonts-dejavu-mono. 693s Preparing to unpack .../019-fonts-dejavu-mono_2.37-8_all.deb ... 693s Unpacking fonts-dejavu-mono (2.37-8) ... 693s Selecting previously unselected package fonts-dejavu-core. 693s Preparing to unpack .../020-fonts-dejavu-core_2.37-8_all.deb ... 693s Unpacking fonts-dejavu-core (2.37-8) ... 693s Selecting previously unselected package fontconfig-config. 693s Preparing to unpack .../021-fontconfig-config_2.15.0-1.1ubuntu2_amd64.deb ... 693s Unpacking fontconfig-config (2.15.0-1.1ubuntu2) ... 693s Selecting previously unselected package libfontconfig1:amd64. 693s Preparing to unpack .../022-libfontconfig1_2.15.0-1.1ubuntu2_amd64.deb ... 693s Unpacking libfontconfig1:amd64 (2.15.0-1.1ubuntu2) ... 693s Selecting previously unselected package libpixman-1-0:amd64. 693s Preparing to unpack .../023-libpixman-1-0_0.44.0-3_amd64.deb ... 693s Unpacking libpixman-1-0:amd64 (0.44.0-3) ... 693s Selecting previously unselected package libxcb-render0:amd64. 693s Preparing to unpack .../024-libxcb-render0_1.17.0-2_amd64.deb ... 693s Unpacking libxcb-render0:amd64 (1.17.0-2) ... 693s Selecting previously unselected package libxcb-shm0:amd64. 693s Preparing to unpack .../025-libxcb-shm0_1.17.0-2_amd64.deb ... 693s Unpacking libxcb-shm0:amd64 (1.17.0-2) ... 693s Selecting previously unselected package libxrender1:amd64. 693s Preparing to unpack .../026-libxrender1_1%3a0.9.10-1.1build1_amd64.deb ... 693s Unpacking libxrender1:amd64 (1:0.9.10-1.1build1) ... 693s Selecting previously unselected package libcairo2:amd64. 693s Preparing to unpack .../027-libcairo2_1.18.2-2_amd64.deb ... 693s Unpacking libcairo2:amd64 (1.18.2-2) ... 693s Selecting previously unselected package libcairo-gobject2:amd64. 693s Preparing to unpack .../028-libcairo-gobject2_1.18.2-2_amd64.deb ... 693s Unpacking libcairo-gobject2:amd64 (1.18.2-2) ... 693s Selecting previously unselected package gir1.2-freedesktop:amd64. 693s Preparing to unpack .../029-gir1.2-freedesktop_1.80.1-4_amd64.deb ... 693s Unpacking gir1.2-freedesktop:amd64 (1.80.1-4) ... 693s Selecting previously unselected package gir1.2-gdkpixbuf-2.0:amd64. 693s Preparing to unpack .../030-gir1.2-gdkpixbuf-2.0_2.42.12+dfsg-1_amd64.deb ... 693s Unpacking gir1.2-gdkpixbuf-2.0:amd64 (2.42.12+dfsg-1) ... 693s Selecting previously unselected package libgraphite2-3:amd64. 693s Preparing to unpack .../031-libgraphite2-3_1.3.14-2ubuntu1_amd64.deb ... 693s Unpacking libgraphite2-3:amd64 (1.3.14-2ubuntu1) ... 693s Selecting previously unselected package libharfbuzz0b:amd64. 693s Preparing to unpack .../032-libharfbuzz0b_10.0.1-1_amd64.deb ... 693s Unpacking libharfbuzz0b:amd64 (10.0.1-1) ... 693s Selecting previously unselected package libharfbuzz-gobject0:amd64. 693s Preparing to unpack .../033-libharfbuzz-gobject0_10.0.1-1_amd64.deb ... 693s Unpacking libharfbuzz-gobject0:amd64 (10.0.1-1) ... 694s Selecting previously unselected package gir1.2-harfbuzz-0.0:amd64. 694s Preparing to unpack .../034-gir1.2-harfbuzz-0.0_10.0.1-1_amd64.deb ... 694s Unpacking gir1.2-harfbuzz-0.0:amd64 (10.0.1-1) ... 694s Selecting previously unselected package fontconfig. 694s Preparing to unpack .../035-fontconfig_2.15.0-1.1ubuntu2_amd64.deb ... 694s Unpacking fontconfig (2.15.0-1.1ubuntu2) ... 694s Selecting previously unselected package libthai-data. 694s Preparing to unpack .../036-libthai-data_0.1.29-2build1_all.deb ... 694s Unpacking libthai-data (0.1.29-2build1) ... 694s Selecting previously unselected package libdatrie1:amd64. 694s Preparing to unpack .../037-libdatrie1_0.2.13-3build1_amd64.deb ... 694s Unpacking libdatrie1:amd64 (0.2.13-3build1) ... 694s Selecting previously unselected package libthai0:amd64. 694s Preparing to unpack .../038-libthai0_0.1.29-2build1_amd64.deb ... 694s Unpacking libthai0:amd64 (0.1.29-2build1) ... 694s Selecting previously unselected package libpango-1.0-0:amd64. 694s Preparing to unpack .../039-libpango-1.0-0_1.54.0+ds-3_amd64.deb ... 694s Unpacking libpango-1.0-0:amd64 (1.54.0+ds-3) ... 694s Selecting previously unselected package libpangoft2-1.0-0:amd64. 694s Preparing to unpack .../040-libpangoft2-1.0-0_1.54.0+ds-3_amd64.deb ... 694s Unpacking libpangoft2-1.0-0:amd64 (1.54.0+ds-3) ... 694s Selecting previously unselected package libpangocairo-1.0-0:amd64. 694s Preparing to unpack .../041-libpangocairo-1.0-0_1.54.0+ds-3_amd64.deb ... 694s Unpacking libpangocairo-1.0-0:amd64 (1.54.0+ds-3) ... 694s Selecting previously unselected package libxft2:amd64. 694s Preparing to unpack .../042-libxft2_2.3.6-1build1_amd64.deb ... 694s Unpacking libxft2:amd64 (2.3.6-1build1) ... 694s Selecting previously unselected package libpangoxft-1.0-0:amd64. 694s Preparing to unpack .../043-libpangoxft-1.0-0_1.54.0+ds-3_amd64.deb ... 694s Unpacking libpangoxft-1.0-0:amd64 (1.54.0+ds-3) ... 694s Selecting previously unselected package gir1.2-pango-1.0:amd64. 694s Preparing to unpack .../044-gir1.2-pango-1.0_1.54.0+ds-3_amd64.deb ... 694s Unpacking gir1.2-pango-1.0:amd64 (1.54.0+ds-3) ... 694s Selecting previously unselected package libxi6:amd64. 694s Preparing to unpack .../045-libxi6_2%3a1.8.2-1_amd64.deb ... 694s Unpacking libxi6:amd64 (2:1.8.2-1) ... 694s Selecting previously unselected package libatspi2.0-0t64:amd64. 694s Preparing to unpack .../046-libatspi2.0-0t64_2.54.0-1_amd64.deb ... 694s Unpacking libatspi2.0-0t64:amd64 (2.54.0-1) ... 694s Selecting previously unselected package libatk-bridge2.0-0t64:amd64. 694s Preparing to unpack .../047-libatk-bridge2.0-0t64_2.54.0-1_amd64.deb ... 694s Unpacking libatk-bridge2.0-0t64:amd64 (2.54.0-1) ... 694s Selecting previously unselected package liblcms2-2:amd64. 694s Preparing to unpack .../048-liblcms2-2_2.16-2_amd64.deb ... 694s Unpacking liblcms2-2:amd64 (2.16-2) ... 694s Selecting previously unselected package libcolord2:amd64. 694s Preparing to unpack .../049-libcolord2_1.4.7-1build2_amd64.deb ... 694s Unpacking libcolord2:amd64 (1.4.7-1build2) ... 694s Selecting previously unselected package libavahi-common-data:amd64. 694s Preparing to unpack .../050-libavahi-common-data_0.8-13ubuntu6_amd64.deb ... 694s Unpacking libavahi-common-data:amd64 (0.8-13ubuntu6) ... 694s Selecting previously unselected package libavahi-common3:amd64. 694s Preparing to unpack .../051-libavahi-common3_0.8-13ubuntu6_amd64.deb ... 694s Unpacking libavahi-common3:amd64 (0.8-13ubuntu6) ... 694s Selecting previously unselected package libavahi-client3:amd64. 694s Preparing to unpack .../052-libavahi-client3_0.8-13ubuntu6_amd64.deb ... 694s Unpacking libavahi-client3:amd64 (0.8-13ubuntu6) ... 694s Selecting previously unselected package libcups2t64:amd64. 694s Preparing to unpack .../053-libcups2t64_2.4.10-1ubuntu2_amd64.deb ... 694s Unpacking libcups2t64:amd64 (2.4.10-1ubuntu2) ... 694s Selecting previously unselected package libepoxy0:amd64. 694s Preparing to unpack .../054-libepoxy0_1.5.10-2_amd64.deb ... 694s Unpacking libepoxy0:amd64 (1.5.10-2) ... 694s Selecting previously unselected package libwayland-client0:amd64. 694s Preparing to unpack .../055-libwayland-client0_1.23.0-1_amd64.deb ... 694s Unpacking libwayland-client0:amd64 (1.23.0-1) ... 694s Selecting previously unselected package libwayland-cursor0:amd64. 694s Preparing to unpack .../056-libwayland-cursor0_1.23.0-1_amd64.deb ... 694s Unpacking libwayland-cursor0:amd64 (1.23.0-1) ... 694s Selecting previously unselected package libwayland-egl1:amd64. 694s Preparing to unpack .../057-libwayland-egl1_1.23.0-1_amd64.deb ... 694s Unpacking libwayland-egl1:amd64 (1.23.0-1) ... 694s Selecting previously unselected package libxcomposite1:amd64. 694s Preparing to unpack .../058-libxcomposite1_1%3a0.4.6-1_amd64.deb ... 694s Unpacking libxcomposite1:amd64 (1:0.4.6-1) ... 694s Selecting previously unselected package libxfixes3:amd64. 694s Preparing to unpack .../059-libxfixes3_1%3a6.0.0-2build1_amd64.deb ... 694s Unpacking libxfixes3:amd64 (1:6.0.0-2build1) ... 694s Selecting previously unselected package libxcursor1:amd64. 694s Preparing to unpack .../060-libxcursor1_1%3a1.2.2-1_amd64.deb ... 694s Unpacking libxcursor1:amd64 (1:1.2.2-1) ... 694s Selecting previously unselected package libxdamage1:amd64. 694s Preparing to unpack .../061-libxdamage1_1%3a1.1.6-1build1_amd64.deb ... 694s Unpacking libxdamage1:amd64 (1:1.1.6-1build1) ... 694s Selecting previously unselected package libxinerama1:amd64. 694s Preparing to unpack .../062-libxinerama1_2%3a1.1.4-3build1_amd64.deb ... 694s Unpacking libxinerama1:amd64 (2:1.1.4-3build1) ... 694s Selecting previously unselected package libxrandr2:amd64. 694s Preparing to unpack .../063-libxrandr2_2%3a1.5.4-1_amd64.deb ... 694s Unpacking libxrandr2:amd64 (2:1.5.4-1) ... 694s Selecting previously unselected package dbus-x11. 694s Preparing to unpack .../064-dbus-x11_1.14.10-4ubuntu5_amd64.deb ... 694s Unpacking dbus-x11 (1.14.10-4ubuntu5) ... 694s Selecting previously unselected package libdconf1:amd64. 694s Preparing to unpack .../065-libdconf1_0.40.0-4build2_amd64.deb ... 694s Unpacking libdconf1:amd64 (0.40.0-4build2) ... 694s Selecting previously unselected package dconf-service. 694s Preparing to unpack .../066-dconf-service_0.40.0-4build2_amd64.deb ... 694s Unpacking dconf-service (0.40.0-4build2) ... 694s Selecting previously unselected package dconf-gsettings-backend:amd64. 694s Preparing to unpack .../067-dconf-gsettings-backend_0.40.0-4build2_amd64.deb ... 694s Unpacking dconf-gsettings-backend:amd64 (0.40.0-4build2) ... 694s Selecting previously unselected package libgtk-3-common. 694s Preparing to unpack .../068-libgtk-3-common_3.24.43-3ubuntu2_all.deb ... 694s Unpacking libgtk-3-common (3.24.43-3ubuntu2) ... 694s Selecting previously unselected package libgtk-3-0t64:amd64. 694s Preparing to unpack .../069-libgtk-3-0t64_3.24.43-3ubuntu2_amd64.deb ... 694s Unpacking libgtk-3-0t64:amd64 (3.24.43-3ubuntu2) ... 694s Selecting previously unselected package gir1.2-gtk-3.0:amd64. 694s Preparing to unpack .../070-gir1.2-gtk-3.0_3.24.43-3ubuntu2_amd64.deb ... 694s Unpacking gir1.2-gtk-3.0:amd64 (3.24.43-3ubuntu2) ... 695s Selecting previously unselected package libx11-xcb1:amd64. 695s Preparing to unpack .../071-libx11-xcb1_2%3a1.8.10-2_amd64.deb ... 695s Unpacking libx11-xcb1:amd64 (2:1.8.10-2) ... 695s Selecting previously unselected package libxcb-util1:amd64. 695s Preparing to unpack .../072-libxcb-util1_0.4.0-1build3_amd64.deb ... 695s Unpacking libxcb-util1:amd64 (0.4.0-1build3) ... 695s Selecting previously unselected package libstartup-notification0:amd64. 695s Preparing to unpack .../073-libstartup-notification0_0.12-7ubuntu1_amd64.deb ... 695s Unpacking libstartup-notification0:amd64 (0.12-7ubuntu1) ... 695s Selecting previously unselected package libxres1:amd64. 695s Preparing to unpack .../074-libxres1_2%3a1.2.1-1build1_amd64.deb ... 695s Unpacking libxres1:amd64 (2:1.2.1-1build1) ... 695s Selecting previously unselected package libwnck-3-common. 695s Preparing to unpack .../075-libwnck-3-common_43.1-1_all.deb ... 695s Unpacking libwnck-3-common (43.1-1) ... 695s Selecting previously unselected package libwnck-3-0:amd64. 695s Preparing to unpack .../076-libwnck-3-0_43.1-1_amd64.deb ... 695s Unpacking libwnck-3-0:amd64 (43.1-1) ... 695s Selecting previously unselected package gir1.2-wnck-3.0:amd64. 695s Preparing to unpack .../077-gir1.2-wnck-3.0_43.1-1_amd64.deb ... 695s Unpacking gir1.2-wnck-3.0:amd64 (43.1-1) ... 695s Selecting previously unselected package gnome-terminal-data. 695s Preparing to unpack .../078-gnome-terminal-data_3.54.0-1ubuntu1_all.deb ... 695s Unpacking gnome-terminal-data (3.54.0-1ubuntu1) ... 695s Selecting previously unselected package gsettings-desktop-schemas. 695s Preparing to unpack .../079-gsettings-desktop-schemas_47.1-1ubuntu1_all.deb ... 695s Unpacking gsettings-desktop-schemas (47.1-1ubuntu1) ... 695s Selecting previously unselected package libhandy-1-0:amd64. 695s Preparing to unpack .../080-libhandy-1-0_1.8.3-1build2_amd64.deb ... 695s Unpacking libhandy-1-0:amd64 (1.8.3-1build2) ... 695s Selecting previously unselected package libvte-2.91-common. 695s Preparing to unpack .../081-libvte-2.91-common_0.78.1-1_amd64.deb ... 695s Unpacking libvte-2.91-common (0.78.1-1) ... 695s Selecting previously unselected package libvte-2.91-0:amd64. 695s Preparing to unpack .../082-libvte-2.91-0_0.78.1-1_amd64.deb ... 695s Unpacking libvte-2.91-0:amd64 (0.78.1-1) ... 695s Selecting previously unselected package gnome-terminal. 695s Preparing to unpack .../083-gnome-terminal_3.54.0-1ubuntu1_amd64.deb ... 695s Unpacking gnome-terminal (3.54.0-1ubuntu1) ... 695s Selecting previously unselected package libwhoopsie-preferences0. 695s Preparing to unpack .../084-libwhoopsie-preferences0_23build3_amd64.deb ... 695s Unpacking libwhoopsie-preferences0 (23build3) ... 695s Selecting previously unselected package libwhoopsie0:amd64. 695s Preparing to unpack .../085-libwhoopsie0_0.2.78_amd64.deb ... 695s Unpacking libwhoopsie0:amd64 (0.2.78) ... 695s Selecting previously unselected package whoopsie-preferences. 695s Preparing to unpack .../086-whoopsie-preferences_23build3_amd64.deb ... 695s Unpacking whoopsie-preferences (23build3) ... 695s Selecting previously unselected package apport-gtk. 695s Preparing to unpack .../087-apport-gtk_2.30.0-0ubuntu4_all.deb ... 695s Unpacking apport-gtk (2.30.0-0ubuntu4) ... 695s Selecting previously unselected package python3-pyqt5.sip. 695s Preparing to unpack .../088-python3-pyqt5.sip_12.15.0-1_amd64.deb ... 695s Unpacking python3-pyqt5.sip (12.15.0-1) ... 695s Selecting previously unselected package libdouble-conversion3:amd64. 695s Preparing to unpack .../089-libdouble-conversion3_3.3.0-1build1_amd64.deb ... 695s Unpacking libdouble-conversion3:amd64 (3.3.0-1build1) ... 695s Selecting previously unselected package libpcre2-16-0:amd64. 695s Preparing to unpack .../090-libpcre2-16-0_10.42-4ubuntu3_amd64.deb ... 695s Unpacking libpcre2-16-0:amd64 (10.42-4ubuntu3) ... 695s Selecting previously unselected package libqt5core5t64:amd64. 695s Preparing to unpack .../091-libqt5core5t64_5.15.15+dfsg-1ubuntu1_amd64.deb ... 695s Unpacking libqt5core5t64:amd64 (5.15.15+dfsg-1ubuntu1) ... 695s Selecting previously unselected package libqt5dbus5t64:amd64. 695s Preparing to unpack .../092-libqt5dbus5t64_5.15.15+dfsg-1ubuntu1_amd64.deb ... 695s Unpacking libqt5dbus5t64:amd64 (5.15.15+dfsg-1ubuntu1) ... 695s Selecting previously unselected package libglvnd0:amd64. 695s Preparing to unpack .../093-libglvnd0_1.7.0-1build1_amd64.deb ... 695s Unpacking libglvnd0:amd64 (1.7.0-1build1) ... 695s Selecting previously unselected package libwayland-server0:amd64. 695s Preparing to unpack .../094-libwayland-server0_1.23.0-1_amd64.deb ... 695s Unpacking libwayland-server0:amd64 (1.23.0-1) ... 695s Selecting previously unselected package libxcb-randr0:amd64. 695s Preparing to unpack .../095-libxcb-randr0_1.17.0-2_amd64.deb ... 695s Unpacking libxcb-randr0:amd64 (1.17.0-2) ... 695s Selecting previously unselected package libdrm-amdgpu1:amd64. 695s Preparing to unpack .../096-libdrm-amdgpu1_2.4.123-1_amd64.deb ... 695s Unpacking libdrm-amdgpu1:amd64 (2.4.123-1) ... 695s Selecting previously unselected package libpciaccess0:amd64. 695s Preparing to unpack .../097-libpciaccess0_0.17-3build1_amd64.deb ... 695s Unpacking libpciaccess0:amd64 (0.17-3build1) ... 695s Selecting previously unselected package libdrm-intel1:amd64. 695s Preparing to unpack .../098-libdrm-intel1_2.4.123-1_amd64.deb ... 695s Unpacking libdrm-intel1:amd64 (2.4.123-1) ... 695s Selecting previously unselected package libdrm-radeon1:amd64. 695s Preparing to unpack .../099-libdrm-radeon1_2.4.123-1_amd64.deb ... 695s Unpacking libdrm-radeon1:amd64 (2.4.123-1) ... 695s Selecting previously unselected package libglapi-mesa:amd64. 695s Preparing to unpack .../100-libglapi-mesa_24.2.3-1ubuntu1_amd64.deb ... 695s Unpacking libglapi-mesa:amd64 (24.2.3-1ubuntu1) ... 695s Selecting previously unselected package libxcb-dri2-0:amd64. 695s Preparing to unpack .../101-libxcb-dri2-0_1.17.0-2_amd64.deb ... 695s Unpacking libxcb-dri2-0:amd64 (1.17.0-2) ... 695s Selecting previously unselected package libxcb-dri3-0:amd64. 695s Preparing to unpack .../102-libxcb-dri3-0_1.17.0-2_amd64.deb ... 695s Unpacking libxcb-dri3-0:amd64 (1.17.0-2) ... 695s Selecting previously unselected package libxcb-present0:amd64. 695s Preparing to unpack .../103-libxcb-present0_1.17.0-2_amd64.deb ... 695s Unpacking libxcb-present0:amd64 (1.17.0-2) ... 695s Selecting previously unselected package libxcb-sync1:amd64. 695s Preparing to unpack .../104-libxcb-sync1_1.17.0-2_amd64.deb ... 695s Unpacking libxcb-sync1:amd64 (1.17.0-2) ... 695s Selecting previously unselected package libxcb-xfixes0:amd64. 695s Preparing to unpack .../105-libxcb-xfixes0_1.17.0-2_amd64.deb ... 695s Unpacking libxcb-xfixes0:amd64 (1.17.0-2) ... 695s Selecting previously unselected package libxshmfence1:amd64. 695s Preparing to unpack .../106-libxshmfence1_1.3-1build5_amd64.deb ... 695s Unpacking libxshmfence1:amd64 (1.3-1build5) ... 695s Selecting previously unselected package mesa-libgallium:amd64. 695s Preparing to unpack .../107-mesa-libgallium_24.2.3-1ubuntu1_amd64.deb ... 695s Unpacking mesa-libgallium:amd64 (24.2.3-1ubuntu1) ... 696s Selecting previously unselected package libgbm1:amd64. 696s Preparing to unpack .../108-libgbm1_24.2.3-1ubuntu1_amd64.deb ... 696s Unpacking libgbm1:amd64 (24.2.3-1ubuntu1) ... 696s Selecting previously unselected package libegl-mesa0:amd64. 696s Preparing to unpack .../109-libegl-mesa0_24.2.3-1ubuntu1_amd64.deb ... 696s Unpacking libegl-mesa0:amd64 (24.2.3-1ubuntu1) ... 696s Selecting previously unselected package libegl1:amd64. 696s Preparing to unpack .../110-libegl1_1.7.0-1build1_amd64.deb ... 696s Unpacking libegl1:amd64 (1.7.0-1build1) ... 696s Selecting previously unselected package libxcb-glx0:amd64. 696s Preparing to unpack .../111-libxcb-glx0_1.17.0-2_amd64.deb ... 696s Unpacking libxcb-glx0:amd64 (1.17.0-2) ... 696s Selecting previously unselected package libxxf86vm1:amd64. 696s Preparing to unpack .../112-libxxf86vm1_1%3a1.1.4-1build4_amd64.deb ... 696s Unpacking libxxf86vm1:amd64 (1:1.1.4-1build4) ... 696s Selecting previously unselected package libvulkan1:amd64. 696s Preparing to unpack .../113-libvulkan1_1.3.296.0-1_amd64.deb ... 696s Unpacking libvulkan1:amd64 (1.3.296.0-1) ... 696s Selecting previously unselected package libgl1-mesa-dri:amd64. 696s Preparing to unpack .../114-libgl1-mesa-dri_24.2.3-1ubuntu1_amd64.deb ... 696s Unpacking libgl1-mesa-dri:amd64 (24.2.3-1ubuntu1) ... 696s Selecting previously unselected package libglx-mesa0:amd64. 696s Preparing to unpack .../115-libglx-mesa0_24.2.3-1ubuntu1_amd64.deb ... 696s Unpacking libglx-mesa0:amd64 (24.2.3-1ubuntu1) ... 696s Selecting previously unselected package libglx0:amd64. 696s Preparing to unpack .../116-libglx0_1.7.0-1build1_amd64.deb ... 696s Unpacking libglx0:amd64 (1.7.0-1build1) ... 696s Selecting previously unselected package libgl1:amd64. 696s Preparing to unpack .../117-libgl1_1.7.0-1build1_amd64.deb ... 696s Unpacking libgl1:amd64 (1.7.0-1build1) ... 696s Selecting previously unselected package x11-common. 696s Preparing to unpack .../118-x11-common_1%3a7.7+23ubuntu3_all.deb ... 696s Unpacking x11-common (1:7.7+23ubuntu3) ... 696s Selecting previously unselected package libice6:amd64. 696s Preparing to unpack .../119-libice6_2%3a1.1.1-1_amd64.deb ... 696s Unpacking libice6:amd64 (2:1.1.1-1) ... 696s Selecting previously unselected package libmtdev1t64:amd64. 696s Preparing to unpack .../120-libmtdev1t64_1.1.6-1.2_amd64.deb ... 696s Unpacking libmtdev1t64:amd64 (1.1.6-1.2) ... 696s Selecting previously unselected package libwacom-common. 696s Preparing to unpack .../121-libwacom-common_2.13.0-1_all.deb ... 696s Unpacking libwacom-common (2.13.0-1) ... 696s Selecting previously unselected package libwacom9:amd64. 696s Preparing to unpack .../122-libwacom9_2.13.0-1_amd64.deb ... 696s Unpacking libwacom9:amd64 (2.13.0-1) ... 696s Selecting previously unselected package libinput-bin. 696s Preparing to unpack .../123-libinput-bin_1.26.2-1_amd64.deb ... 696s Unpacking libinput-bin (1.26.2-1) ... 696s Selecting previously unselected package libinput10:amd64. 696s Preparing to unpack .../124-libinput10_1.26.2-1_amd64.deb ... 696s Unpacking libinput10:amd64 (1.26.2-1) ... 696s Selecting previously unselected package libmd4c0:amd64. 696s Preparing to unpack .../125-libmd4c0_0.5.2-2_amd64.deb ... 696s Unpacking libmd4c0:amd64 (0.5.2-2) ... 696s Selecting previously unselected package libqt5network5t64:amd64. 696s Preparing to unpack .../126-libqt5network5t64_5.15.15+dfsg-1ubuntu1_amd64.deb ... 696s Unpacking libqt5network5t64:amd64 (5.15.15+dfsg-1ubuntu1) ... 696s Selecting previously unselected package libsm6:amd64. 696s Preparing to unpack .../127-libsm6_2%3a1.2.4-1_amd64.deb ... 696s Unpacking libsm6:amd64 (2:1.2.4-1) ... 696s Selecting previously unselected package libxcb-icccm4:amd64. 696s Preparing to unpack .../128-libxcb-icccm4_0.4.2-1_amd64.deb ... 696s Unpacking libxcb-icccm4:amd64 (0.4.2-1) ... 696s Selecting previously unselected package libxcb-image0:amd64. 696s Preparing to unpack .../129-libxcb-image0_0.4.0-2build1_amd64.deb ... 696s Unpacking libxcb-image0:amd64 (0.4.0-2build1) ... 696s Selecting previously unselected package libxcb-keysyms1:amd64. 696s Preparing to unpack .../130-libxcb-keysyms1_0.4.0-1build4_amd64.deb ... 696s Unpacking libxcb-keysyms1:amd64 (0.4.0-1build4) ... 696s Selecting previously unselected package libxcb-render-util0:amd64. 696s Preparing to unpack .../131-libxcb-render-util0_0.3.9-1build4_amd64.deb ... 696s Unpacking libxcb-render-util0:amd64 (0.3.9-1build4) ... 696s Selecting previously unselected package libxcb-shape0:amd64. 696s Preparing to unpack .../132-libxcb-shape0_1.17.0-2_amd64.deb ... 696s Unpacking libxcb-shape0:amd64 (1.17.0-2) ... 696s Selecting previously unselected package libxcb-xinerama0:amd64. 696s Preparing to unpack .../133-libxcb-xinerama0_1.17.0-2_amd64.deb ... 696s Unpacking libxcb-xinerama0:amd64 (1.17.0-2) ... 696s Selecting previously unselected package libxcb-xinput0:amd64. 696s Preparing to unpack .../134-libxcb-xinput0_1.17.0-2_amd64.deb ... 696s Unpacking libxcb-xinput0:amd64 (1.17.0-2) ... 696s Selecting previously unselected package libxcb-xkb1:amd64. 696s Preparing to unpack .../135-libxcb-xkb1_1.17.0-2_amd64.deb ... 696s Unpacking libxcb-xkb1:amd64 (1.17.0-2) ... 696s Selecting previously unselected package libxkbcommon-x11-0:amd64. 696s Preparing to unpack .../136-libxkbcommon-x11-0_1.6.0-1build1_amd64.deb ... 696s Unpacking libxkbcommon-x11-0:amd64 (1.6.0-1build1) ... 696s Selecting previously unselected package libqt5gui5t64:amd64. 696s Preparing to unpack .../137-libqt5gui5t64_5.15.15+dfsg-1ubuntu1_amd64.deb ... 696s Unpacking libqt5gui5t64:amd64 (5.15.15+dfsg-1ubuntu1) ... 696s Selecting previously unselected package libqt5widgets5t64:amd64. 696s Preparing to unpack .../138-libqt5widgets5t64_5.15.15+dfsg-1ubuntu1_amd64.deb ... 696s Unpacking libqt5widgets5t64:amd64 (5.15.15+dfsg-1ubuntu1) ... 696s Selecting previously unselected package libqt5xml5t64:amd64. 696s Preparing to unpack .../139-libqt5xml5t64_5.15.15+dfsg-1ubuntu1_amd64.deb ... 696s Unpacking libqt5xml5t64:amd64 (5.15.15+dfsg-1ubuntu1) ... 696s Selecting previously unselected package libqt5designer5:amd64. 696s Preparing to unpack .../140-libqt5designer5_5.15.15-2_amd64.deb ... 696s Unpacking libqt5designer5:amd64 (5.15.15-2) ... 696s Selecting previously unselected package libqt5sql5t64:amd64. 697s Preparing to unpack .../141-libqt5sql5t64_5.15.15+dfsg-1ubuntu1_amd64.deb ... 697s Unpacking libqt5sql5t64:amd64 (5.15.15+dfsg-1ubuntu1) ... 697s Selecting previously unselected package libqt5help5:amd64. 697s Preparing to unpack .../142-libqt5help5_5.15.15-2_amd64.deb ... 697s Unpacking libqt5help5:amd64 (5.15.15-2) ... 697s Selecting previously unselected package libqt5printsupport5t64:amd64. 697s Preparing to unpack .../143-libqt5printsupport5t64_5.15.15+dfsg-1ubuntu1_amd64.deb ... 697s Unpacking libqt5printsupport5t64:amd64 (5.15.15+dfsg-1ubuntu1) ... 697s Selecting previously unselected package libqt5test5t64:amd64. 697s Preparing to unpack .../144-libqt5test5t64_5.15.15+dfsg-1ubuntu1_amd64.deb ... 697s Unpacking libqt5test5t64:amd64 (5.15.15+dfsg-1ubuntu1) ... 697s Selecting previously unselected package python3-pyqt5. 697s Preparing to unpack .../145-python3-pyqt5_5.15.11+dfsg-1build1_amd64.deb ... 697s Unpacking python3-pyqt5 (5.15.11+dfsg-1build1) ... 697s Selecting previously unselected package apport-kde. 697s Preparing to unpack .../146-apport-kde_2.30.0-0ubuntu4_all.deb ... 697s Unpacking apport-kde (2.30.0-0ubuntu4) ... 697s Selecting previously unselected package libbabeltrace1:amd64. 697s Preparing to unpack .../147-libbabeltrace1_1.5.11-4_amd64.deb ... 697s Unpacking libbabeltrace1:amd64 (1.5.11-4) ... 697s Selecting previously unselected package libdebuginfod1t64:amd64. 697s Preparing to unpack .../148-libdebuginfod1t64_0.192-4_amd64.deb ... 697s Unpacking libdebuginfod1t64:amd64 (0.192-4) ... 697s Selecting previously unselected package libipt2. 697s Preparing to unpack .../149-libipt2_2.1.1-1_amd64.deb ... 697s Unpacking libipt2 (2.1.1-1) ... 697s Selecting previously unselected package libsource-highlight-common. 697s Preparing to unpack .../150-libsource-highlight-common_3.1.9-4.3build1_all.deb ... 697s Unpacking libsource-highlight-common (3.1.9-4.3build1) ... 697s Selecting previously unselected package libsource-highlight4t64:amd64. 697s Preparing to unpack .../151-libsource-highlight4t64_3.1.9-4.3build1_amd64.deb ... 697s Unpacking libsource-highlight4t64:amd64 (3.1.9-4.3build1) ... 697s Selecting previously unselected package gdb. 697s Preparing to unpack .../152-gdb_15.1-1ubuntu2_amd64.deb ... 697s Unpacking gdb (15.1-1ubuntu2) ... 697s Selecting previously unselected package libc6-dbg:amd64. 697s Preparing to unpack .../153-libc6-dbg_2.40-1ubuntu3_amd64.deb ... 697s Unpacking libc6-dbg:amd64 (2.40-1ubuntu3) ... 697s Selecting previously unselected package apport-retrace. 697s Preparing to unpack .../154-apport-retrace_2.30.0-0ubuntu4_all.deb ... 697s Unpacking apport-retrace (2.30.0-0ubuntu4) ... 697s Selecting previously unselected package valgrind. 697s Preparing to unpack .../155-valgrind_1%3a3.23.0-0ubuntu2_amd64.deb ... 697s Unpacking valgrind (1:3.23.0-0ubuntu2) ... 697s Selecting previously unselected package apport-valgrind. 697s Preparing to unpack .../156-apport-valgrind_2.30.0-0ubuntu4_all.deb ... 697s Unpacking apport-valgrind (2.30.0-0ubuntu4) ... 697s Selecting previously unselected package libisl23:amd64. 697s Preparing to unpack .../157-libisl23_0.27-1_amd64.deb ... 697s Unpacking libisl23:amd64 (0.27-1) ... 697s Selecting previously unselected package libmpc3:amd64. 697s Preparing to unpack .../158-libmpc3_1.3.1-1build2_amd64.deb ... 697s Unpacking libmpc3:amd64 (1.3.1-1build2) ... 697s Selecting previously unselected package cpp-14-x86-64-linux-gnu. 697s Preparing to unpack .../159-cpp-14-x86-64-linux-gnu_14.2.0-7ubuntu1_amd64.deb ... 697s Unpacking cpp-14-x86-64-linux-gnu (14.2.0-7ubuntu1) ... 698s Selecting previously unselected package cpp-14. 698s Preparing to unpack .../160-cpp-14_14.2.0-7ubuntu1_amd64.deb ... 698s Unpacking cpp-14 (14.2.0-7ubuntu1) ... 698s Selecting previously unselected package cpp-x86-64-linux-gnu. 698s Preparing to unpack .../161-cpp-x86-64-linux-gnu_4%3a14.1.0-2ubuntu1_amd64.deb ... 698s Unpacking cpp-x86-64-linux-gnu (4:14.1.0-2ubuntu1) ... 698s Selecting previously unselected package cpp. 698s Preparing to unpack .../162-cpp_4%3a14.1.0-2ubuntu1_amd64.deb ... 698s Unpacking cpp (4:14.1.0-2ubuntu1) ... 698s Selecting previously unselected package libcc1-0:amd64. 698s Preparing to unpack .../163-libcc1-0_14.2.0-7ubuntu1_amd64.deb ... 698s Unpacking libcc1-0:amd64 (14.2.0-7ubuntu1) ... 698s Selecting previously unselected package libgomp1:amd64. 698s Preparing to unpack .../164-libgomp1_14.2.0-7ubuntu1_amd64.deb ... 698s Unpacking libgomp1:amd64 (14.2.0-7ubuntu1) ... 698s Selecting previously unselected package libitm1:amd64. 698s Preparing to unpack .../165-libitm1_14.2.0-7ubuntu1_amd64.deb ... 698s Unpacking libitm1:amd64 (14.2.0-7ubuntu1) ... 698s Selecting previously unselected package libasan8:amd64. 698s Preparing to unpack .../166-libasan8_14.2.0-7ubuntu1_amd64.deb ... 698s Unpacking libasan8:amd64 (14.2.0-7ubuntu1) ... 698s Selecting previously unselected package liblsan0:amd64. 698s Preparing to unpack .../167-liblsan0_14.2.0-7ubuntu1_amd64.deb ... 698s Unpacking liblsan0:amd64 (14.2.0-7ubuntu1) ... 698s Selecting previously unselected package libtsan2:amd64. 698s Preparing to unpack .../168-libtsan2_14.2.0-7ubuntu1_amd64.deb ... 698s Unpacking libtsan2:amd64 (14.2.0-7ubuntu1) ... 698s Selecting previously unselected package libubsan1:amd64. 698s Preparing to unpack .../169-libubsan1_14.2.0-7ubuntu1_amd64.deb ... 698s Unpacking libubsan1:amd64 (14.2.0-7ubuntu1) ... 698s Selecting previously unselected package libhwasan0:amd64. 698s Preparing to unpack .../170-libhwasan0_14.2.0-7ubuntu1_amd64.deb ... 698s Unpacking libhwasan0:amd64 (14.2.0-7ubuntu1) ... 698s Selecting previously unselected package libquadmath0:amd64. 698s Preparing to unpack .../171-libquadmath0_14.2.0-7ubuntu1_amd64.deb ... 698s Unpacking libquadmath0:amd64 (14.2.0-7ubuntu1) ... 698s Selecting previously unselected package libgcc-14-dev:amd64. 698s Preparing to unpack .../172-libgcc-14-dev_14.2.0-7ubuntu1_amd64.deb ... 698s Unpacking libgcc-14-dev:amd64 (14.2.0-7ubuntu1) ... 698s Selecting previously unselected package gcc-14-x86-64-linux-gnu. 698s Preparing to unpack .../173-gcc-14-x86-64-linux-gnu_14.2.0-7ubuntu1_amd64.deb ... 698s Unpacking gcc-14-x86-64-linux-gnu (14.2.0-7ubuntu1) ... 698s Selecting previously unselected package gcc-14. 698s Preparing to unpack .../174-gcc-14_14.2.0-7ubuntu1_amd64.deb ... 698s Unpacking gcc-14 (14.2.0-7ubuntu1) ... 699s Selecting previously unselected package gcc-x86-64-linux-gnu. 699s Preparing to unpack .../175-gcc-x86-64-linux-gnu_4%3a14.1.0-2ubuntu1_amd64.deb ... 699s Unpacking gcc-x86-64-linux-gnu (4:14.1.0-2ubuntu1) ... 699s Selecting previously unselected package gcc. 699s Preparing to unpack .../176-gcc_4%3a14.1.0-2ubuntu1_amd64.deb ... 699s Unpacking gcc (4:14.1.0-2ubuntu1) ... 699s Selecting previously unselected package libstdc++-14-dev:amd64. 699s Preparing to unpack .../177-libstdc++-14-dev_14.2.0-7ubuntu1_amd64.deb ... 699s Unpacking libstdc++-14-dev:amd64 (14.2.0-7ubuntu1) ... 699s Selecting previously unselected package g++-14-x86-64-linux-gnu. 699s Preparing to unpack .../178-g++-14-x86-64-linux-gnu_14.2.0-7ubuntu1_amd64.deb ... 699s Unpacking g++-14-x86-64-linux-gnu (14.2.0-7ubuntu1) ... 699s Selecting previously unselected package g++-14. 699s Preparing to unpack .../179-g++-14_14.2.0-7ubuntu1_amd64.deb ... 699s Unpacking g++-14 (14.2.0-7ubuntu1) ... 699s Selecting previously unselected package g++-x86-64-linux-gnu. 699s Preparing to unpack .../180-g++-x86-64-linux-gnu_4%3a14.1.0-2ubuntu1_amd64.deb ... 699s Unpacking g++-x86-64-linux-gnu (4:14.1.0-2ubuntu1) ... 699s Selecting previously unselected package g++. 699s Preparing to unpack .../181-g++_4%3a14.1.0-2ubuntu1_amd64.deb ... 699s Unpacking g++ (4:14.1.0-2ubuntu1) ... 699s Selecting previously unselected package build-essential. 699s Preparing to unpack .../182-build-essential_12.10ubuntu1_amd64.deb ... 699s Unpacking build-essential (12.10ubuntu1) ... 699s Selecting previously unselected package chaos-marmosets. 699s Preparing to unpack .../183-chaos-marmosets_0.2.0-1_amd64.deb ... 699s Unpacking chaos-marmosets (0.2.0-1) ... 699s Selecting previously unselected package desktop-file-utils. 699s Preparing to unpack .../184-desktop-file-utils_0.27-2build1_amd64.deb ... 699s Unpacking desktop-file-utils (0.27-2build1) ... 699s Selecting previously unselected package gdb-multiarch. 699s Preparing to unpack .../185-gdb-multiarch_15.1-1ubuntu2_amd64.deb ... 699s Unpacking gdb-multiarch (15.1-1ubuntu2) ... 699s Selecting previously unselected package librsvg2-2:amd64. 699s Preparing to unpack .../186-librsvg2-2_2.59.1+dfsg-1_amd64.deb ... 699s Unpacking librsvg2-2:amd64 (2.59.1+dfsg-1) ... 699s Selecting previously unselected package librsvg2-common:amd64. 699s Preparing to unpack .../187-librsvg2-common_2.59.1+dfsg-1_amd64.deb ... 699s Unpacking librsvg2-common:amd64 (2.59.1+dfsg-1) ... 699s Selecting previously unselected package gnome-icon-theme. 699s Preparing to unpack .../188-gnome-icon-theme_3.12.0-5_all.deb ... 699s Unpacking gnome-icon-theme (3.12.0-5) ... 700s Selecting previously unselected package gvfs-common. 700s Preparing to unpack .../189-gvfs-common_1.56.1-1_all.deb ... 700s Unpacking gvfs-common (1.56.1-1) ... 700s Selecting previously unselected package libgck-2-2:amd64. 700s Preparing to unpack .../190-libgck-2-2_4.3.0-1_amd64.deb ... 700s Unpacking libgck-2-2:amd64 (4.3.0-1) ... 700s Selecting previously unselected package libgcr-4-4:amd64. 700s Preparing to unpack .../191-libgcr-4-4_4.3.0-1_amd64.deb ... 700s Unpacking libgcr-4-4:amd64 (4.3.0-1) ... 700s Selecting previously unselected package libsecret-common. 700s Preparing to unpack .../192-libsecret-common_0.21.4-3_all.deb ... 700s Unpacking libsecret-common (0.21.4-3) ... 700s Selecting previously unselected package libsecret-1-0:amd64. 700s Preparing to unpack .../193-libsecret-1-0_0.21.4-3_amd64.deb ... 700s Unpacking libsecret-1-0:amd64 (0.21.4-3) ... 700s Selecting previously unselected package gvfs-libs:amd64. 700s Preparing to unpack .../194-gvfs-libs_1.56.1-1_amd64.deb ... 700s Unpacking gvfs-libs:amd64 (1.56.1-1) ... 700s Selecting previously unselected package gvfs-daemons. 700s Preparing to unpack .../195-gvfs-daemons_1.56.1-1_amd64.deb ... 700s Unpacking gvfs-daemons (1.56.1-1) ... 700s Selecting previously unselected package libfontenc1:amd64. 700s Preparing to unpack .../196-libfontenc1_1%3a1.1.8-1build1_amd64.deb ... 700s Unpacking libfontenc1:amd64 (1:1.1.8-1build1) ... 700s Selecting previously unselected package libxt6t64:amd64. 700s Preparing to unpack .../197-libxt6t64_1%3a1.2.1-1.2build1_amd64.deb ... 700s Unpacking libxt6t64:amd64 (1:1.2.1-1.2build1) ... 700s Selecting previously unselected package libxmu6:amd64. 700s Preparing to unpack .../198-libxmu6_2%3a1.1.3-3build2_amd64.deb ... 700s Unpacking libxmu6:amd64 (2:1.1.3-3build2) ... 700s Selecting previously unselected package libxpm4:amd64. 700s Preparing to unpack .../199-libxpm4_1%3a3.5.17-1build2_amd64.deb ... 700s Unpacking libxpm4:amd64 (1:3.5.17-1build2) ... 700s Selecting previously unselected package libxaw7:amd64. 700s Preparing to unpack .../200-libxaw7_2%3a1.0.16-1_amd64.deb ... 700s Unpacking libxaw7:amd64 (2:1.0.16-1) ... 700s Selecting previously unselected package libxfont2:amd64. 700s Preparing to unpack .../201-libxfont2_1%3a2.0.6-1build1_amd64.deb ... 700s Unpacking libxfont2:amd64 (1:2.0.6-1build1) ... 700s Selecting previously unselected package libxkbfile1:amd64. 700s Preparing to unpack .../202-libxkbfile1_1%3a1.1.0-1build4_amd64.deb ... 700s Unpacking libxkbfile1:amd64 (1:1.1.0-1build4) ... 700s Selecting previously unselected package python3-iniconfig. 700s Preparing to unpack .../203-python3-iniconfig_1.1.1-2_all.deb ... 700s Unpacking python3-iniconfig (1.1.1-2) ... 700s Selecting previously unselected package python3-packaging. 700s Preparing to unpack .../204-python3-packaging_24.1-1_all.deb ... 700s Unpacking python3-packaging (24.1-1) ... 700s Selecting previously unselected package python3-pluggy. 700s Preparing to unpack .../205-python3-pluggy_1.5.0-1_all.deb ... 700s Unpacking python3-pluggy (1.5.0-1) ... 700s Selecting previously unselected package python3-psutil. 700s Preparing to unpack .../206-python3-psutil_5.9.8-2build2_amd64.deb ... 700s Unpacking python3-psutil (5.9.8-2build2) ... 700s Selecting previously unselected package python3-pytest. 700s Preparing to unpack .../207-python3-pytest_8.3.3-1_all.deb ... 700s Unpacking python3-pytest (8.3.3-1) ... 700s Selecting previously unselected package ubuntu-dbgsym-keyring. 700s Preparing to unpack .../208-ubuntu-dbgsym-keyring_2023.11.28.1_all.deb ... 700s Unpacking ubuntu-dbgsym-keyring (2023.11.28.1) ... 700s Selecting previously unselected package x11-xkb-utils. 700s Preparing to unpack .../209-x11-xkb-utils_7.7+9_amd64.deb ... 700s Unpacking x11-xkb-utils (7.7+9) ... 700s Selecting previously unselected package xserver-common. 700s Preparing to unpack .../210-xserver-common_2%3a21.1.14-2ubuntu1_all.deb ... 700s Unpacking xserver-common (2:21.1.14-2ubuntu1) ... 700s Selecting previously unselected package xvfb. 700s Preparing to unpack .../211-xvfb_2%3a21.1.14-2ubuntu1_amd64.deb ... 700s Unpacking xvfb (2:21.1.14-2ubuntu1) ... 700s Setting up libgraphite2-3:amd64 (1.3.14-2ubuntu1) ... 700s Setting up libxcb-dri3-0:amd64 (1.17.0-2) ... 700s Setting up liblcms2-2:amd64 (2.16-2) ... 700s Setting up python3-iniconfig (1.1.1-2) ... 700s Setting up libpixman-1-0:amd64 (0.44.0-3) ... 700s Setting up libsharpyuv0:amd64 (1.4.0-0.1) ... 700s Setting up libwayland-server0:amd64 (1.23.0-1) ... 700s Setting up libx11-xcb1:amd64 (2:1.8.10-2) ... 700s Setting up libwhoopsie-preferences0 (23build3) ... 700s Setting up libpciaccess0:amd64 (0.17-3build1) ... 700s Setting up libdouble-conversion3:amd64 (3.3.0-1build1) ... 700s Setting up libgck-2-2:amd64 (4.3.0-1) ... 700s Setting up libxdamage1:amd64 (1:1.1.6-1build1) ... 700s Setting up libxcb-xfixes0:amd64 (1.17.0-2) ... 700s Setting up desktop-file-utils (0.27-2build1) ... 700s Setting up liblerc4:amd64 (4.0.0+ds-4ubuntu2) ... 700s Setting up libxpm4:amd64 (1:3.5.17-1build2) ... 700s Setting up libgcr-4-4:amd64 (4.3.0-1) ... 700s Setting up hicolor-icon-theme (0.18-1) ... 701s Setting up libxi6:amd64 (2:1.8.2-1) ... 701s Setting up libxcb-xinput0:amd64 (1.17.0-2) ... 701s Setting up libxrender1:amd64 (1:0.9.10-1.1build1) ... 701s Setting up libvte-2.91-common (0.78.1-1) ... 701s Setting up libdatrie1:amd64 (0.2.13-3build1) ... 701s Setting up libdebuginfod-common (0.192-4) ... 701s Setting up libxcb-render0:amd64 (1.17.0-2) ... 701s Setting up libdrm-radeon1:amd64 (2.4.123-1) ... 701s Setting up libglvnd0:amd64 (1.7.0-1build1) ... 701s Setting up libwnck-3-common (43.1-1) ... 701s Setting up libxcb-glx0:amd64 (1.17.0-2) ... 701s Setting up ubuntu-dbgsym-keyring (2023.11.28.1) ... 701s Setting up libdrm-intel1:amd64 (2.4.123-1) ... 701s Setting up libgdk-pixbuf2.0-common (2.42.12+dfsg-1) ... 701s Setting up libxcb-keysyms1:amd64 (0.4.0-1build4) ... 701s Setting up libxcb-shape0:amd64 (1.17.0-2) ... 701s Setting up x11-common (1:7.7+23ubuntu3) ... 701s Setting up libdeflate0:amd64 (1.22-1) ... 701s Setting up libxcb-render-util0:amd64 (0.3.9-1build4) ... 701s Setting up libxcb-shm0:amd64 (1.17.0-2) ... 701s Setting up libxcb-icccm4:amd64 (0.4.2-1) ... 701s Setting up libwhoopsie0:amd64 (0.2.78) ... 701s Setting up libgomp1:amd64 (14.2.0-7ubuntu1) ... 701s Setting up libjbig0:amd64 (2.1-6.1ubuntu2) ... 701s Setting up libpcre2-16-0:amd64 (10.42-4ubuntu3) ... 701s Setting up libcolord2:amd64 (1.4.7-1build2) ... 701s Setting up python3-psutil (5.9.8-2build2) ... 701s Setting up gnome-terminal-data (3.54.0-1ubuntu1) ... 701s Setting up libsource-highlight-common (3.1.9-4.3build1) ... 701s Setting up libxcb-util1:amd64 (0.4.0-1build3) ... 701s Setting up libxxf86vm1:amd64 (1:1.1.4-1build4) ... 701s Setting up libc6-dbg:amd64 (2.40-1ubuntu3) ... 701s Setting up libxcb-xkb1:amd64 (1.17.0-2) ... 701s Setting up libxcb-image0:amd64 (0.4.0-2build1) ... 701s Setting up libxcb-present0:amd64 (1.17.0-2) ... 701s Setting up libdconf1:amd64 (0.40.0-4build2) ... 701s Setting up libqt5core5t64:amd64 (5.15.15+dfsg-1ubuntu1) ... 701s Setting up libfontenc1:amd64 (1:1.1.8-1build1) ... 701s Setting up python3-packaging (24.1-1) ... 701s Setting up libxcb-xinerama0:amd64 (1.17.0-2) ... 701s Setting up libepoxy0:amd64 (1.5.10-2) ... 701s Setting up libxfixes3:amd64 (1:6.0.0-2build1) ... 701s Setting up libxcb-sync1:amd64 (1.17.0-2) ... 701s Setting up libavahi-common-data:amd64 (0.8-13ubuntu6) ... 701s Setting up libatspi2.0-0t64:amd64 (2.54.0-1) ... 701s Setting up libquadmath0:amd64 (14.2.0-7ubuntu1) ... 701s Setting up chaos-marmosets (0.2.0-1) ... 701s Setting up libxinerama1:amd64 (2:1.1.4-3build1) ... 701s Setting up libxkbcommon-x11-0:amd64 (1.6.0-1build1) ... 701s Setting up fonts-dejavu-mono (2.37-8) ... 701s Setting up libmpc3:amd64 (1.3.1-1build2) ... 701s Setting up libxrandr2:amd64 (2:1.5.4-1) ... 701s Setting up libipt2 (2.1.1-1) ... 701s Setting up fonts-dejavu-core (2.37-8) ... 701s Setting up libjpeg-turbo8:amd64 (2.1.5-2ubuntu2) ... 701s Setting up libbabeltrace1:amd64 (1.5.11-4) ... 701s Setting up libglapi-mesa:amd64 (24.2.3-1ubuntu1) ... 701s Setting up libvulkan1:amd64 (1.3.296.0-1) ... 701s Setting up python3-pluggy (1.5.0-1) ... 701s Setting up libwebp7:amd64 (1.4.0-0.1) ... 701s Setting up libubsan1:amd64 (14.2.0-7ubuntu1) ... 701s Setting up libxcb-dri2-0:amd64 (1.17.0-2) ... 701s Setting up python3-pyqt5.sip (12.15.0-1) ... 701s Setting up libmtdev1t64:amd64 (1.1.6-1.2) ... 701s Setting up libxshmfence1:amd64 (1.3-1build5) ... 701s Setting up libhwasan0:amd64 (14.2.0-7ubuntu1) ... 701s Setting up at-spi2-common (2.54.0-1) ... 701s Setting up dbus-x11 (1.14.10-4ubuntu5) ... 701s Setting up libxcb-randr0:amd64 (1.17.0-2) ... 701s Setting up libasan8:amd64 (14.2.0-7ubuntu1) ... 701s Setting up libqt5sql5t64:amd64 (5.15.15+dfsg-1ubuntu1) ... 701s Setting up libmd4c0:amd64 (0.5.2-2) ... 701s Setting up libharfbuzz0b:amd64 (10.0.1-1) ... 701s Setting up libthai-data (0.1.29-2build1) ... 701s Setting up libwayland-egl1:amd64 (1.23.0-1) ... 701s Setting up libxkbfile1:amd64 (1:1.1.0-1build4) ... 701s Setting up libtsan2:amd64 (14.2.0-7ubuntu1) ... 701s Setting up libisl23:amd64 (0.27-1) ... 701s Setting up valgrind (1:3.23.0-0ubuntu2) ... 701s Setting up gvfs-common (1.56.1-1) ... 701s Setting up libxcomposite1:amd64 (1:0.4.6-1) ... 701s Setting up libxfont2:amd64 (1:2.0.6-1build1) ... 701s Setting up libcc1-0:amd64 (14.2.0-7ubuntu1) ... 701s Setting up libsecret-common (0.21.4-3) ... 701s Setting up liblsan0:amd64 (14.2.0-7ubuntu1) ... 701s Setting up libitm1:amd64 (14.2.0-7ubuntu1) ... 701s Setting up libxres1:amd64 (2:1.2.1-1build1) ... 701s Setting up libdrm-amdgpu1:amd64 (2.4.123-1) ... 701s Setting up libwacom-common (2.13.0-1) ... 701s Setting up libstartup-notification0:amd64 (0.12-7ubuntu1) ... 701s Setting up libwayland-client0:amd64 (1.23.0-1) ... 701s Setting up libjpeg8:amd64 (8c-2ubuntu11) ... 701s Setting up libdebuginfod1t64:amd64 (0.192-4) ... 701s Setting up libice6:amd64 (2:1.1.1-1) ... 701s Setting up mesa-libgallium:amd64 (24.2.3-1ubuntu1) ... 701s Setting up libqt5dbus5t64:amd64 (5.15.15+dfsg-1ubuntu1) ... 701s Setting up libatk1.0-0t64:amd64 (2.54.0-1) ... 701s Setting up libgbm1:amd64 (24.2.3-1ubuntu1) ... 701s Setting up gir1.2-atk-1.0:amd64 (2.54.0-1) ... 701s Setting up libwacom9:amd64 (2.13.0-1) ... 701s Setting up fontconfig-config (2.15.0-1.1ubuntu2) ... 702s Setting up python3-pytest (8.3.3-1) ... 702s Setting up libxcursor1:amd64 (1:1.2.2-1) ... 702s Setting up libgl1-mesa-dri:amd64 (24.2.3-1ubuntu1) ... 702s Setting up libqt5network5t64:amd64 (5.15.15+dfsg-1ubuntu1) ... 702s Setting up libavahi-common3:amd64 (0.8-13ubuntu6) ... 702s Setting up apport-valgrind (2.30.0-0ubuntu4) ... 702s Setting up libqt5xml5t64:amd64 (5.15.15+dfsg-1ubuntu1) ... 702s Setting up dconf-service (0.40.0-4build2) ... 702s Setting up libsource-highlight4t64:amd64 (3.1.9-4.3build1) ... 702s Setting up whoopsie-preferences (23build3) ... 702s Setting up libharfbuzz-gobject0:amd64 (10.0.1-1) ... 702s Setting up libqt5test5t64:amd64 (5.15.15+dfsg-1ubuntu1) ... 702s Setting up libinput-bin (1.26.2-1) ... 702s Setting up libthai0:amd64 (0.1.29-2build1) ... 702s Setting up libsecret-1-0:amd64 (0.21.4-3) ... 702s Setting up libegl-mesa0:amd64 (24.2.3-1ubuntu1) ... 702s Setting up gdb (15.1-1ubuntu2) ... 702s Setting up gdb-multiarch (15.1-1ubuntu2) ... 702s Setting up cpp-14-x86-64-linux-gnu (14.2.0-7ubuntu1) ... 702s Setting up cpp-14 (14.2.0-7ubuntu1) ... 702s Setting up libtiff6:amd64 (4.5.1+git230720-4ubuntu4) ... 702s Setting up libwayland-cursor0:amd64 (1.23.0-1) ... 702s Setting up libegl1:amd64 (1.7.0-1build1) ... 702s Setting up libgdk-pixbuf-2.0-0:amd64 (2.42.12+dfsg-1) ... 702s Setting up libfontconfig1:amd64 (2.15.0-1.1ubuntu2) ... 702s Setting up libgcc-14-dev:amd64 (14.2.0-7ubuntu1) ... 702s Setting up libstdc++-14-dev:amd64 (14.2.0-7ubuntu1) ... 702s Setting up libsm6:amd64 (2:1.2.4-1) ... 702s Setting up libavahi-client3:amd64 (0.8-13ubuntu6) ... 702s Setting up cpp-x86-64-linux-gnu (4:14.1.0-2ubuntu1) ... 702s Setting up libatk-bridge2.0-0t64:amd64 (2.54.0-1) ... 702s Setting up libinput10:amd64 (1.26.2-1) ... 702s Setting up gtk-update-icon-cache (4.16.5+ds-1) ... 702s Setting up fontconfig (2.15.0-1.1ubuntu2) ... 704s Regenerating fonts cache... done. 704s Setting up libxft2:amd64 (2.3.6-1build1) ... 704s Setting up libglx-mesa0:amd64 (24.2.3-1ubuntu1) ... 704s Setting up libglx0:amd64 (1.7.0-1build1) ... 704s Setting up dconf-gsettings-backend:amd64 (0.40.0-4build2) ... 704s Setting up gir1.2-gdkpixbuf-2.0:amd64 (2.42.12+dfsg-1) ... 704s Setting up libpango-1.0-0:amd64 (1.54.0+ds-3) ... 704s Setting up apport-retrace (2.30.0-0ubuntu4) ... 704s Setting up libcairo2:amd64 (1.18.2-2) ... 704s Setting up libgl1:amd64 (1.7.0-1build1) ... 704s Setting up libxt6t64:amd64 (1:1.2.1-1.2build1) ... 704s Setting up cpp (4:14.1.0-2ubuntu1) ... 704s Setting up libcairo-gobject2:amd64 (1.18.2-2) ... 704s Setting up gcc-14-x86-64-linux-gnu (14.2.0-7ubuntu1) ... 704s Setting up libpangoft2-1.0-0:amd64 (1.54.0+ds-3) ... 704s Setting up libcups2t64:amd64 (2.4.10-1ubuntu2) ... 704s Setting up libgtk-3-common (3.24.43-3ubuntu2) ... 704s Setting up libpangocairo-1.0-0:amd64 (1.54.0+ds-3) ... 704s Setting up gsettings-desktop-schemas (47.1-1ubuntu1) ... 704s Setting up libxmu6:amd64 (2:1.1.3-3build2) ... 704s Setting up gir1.2-freedesktop:amd64 (1.80.1-4) ... 704s Setting up libpangoxft-1.0-0:amd64 (1.54.0+ds-3) ... 704s Setting up gcc-x86-64-linux-gnu (4:14.1.0-2ubuntu1) ... 704s Setting up libxaw7:amd64 (2:1.0.16-1) ... 704s Setting up gir1.2-harfbuzz-0.0:amd64 (10.0.1-1) ... 704s Setting up gcc-14 (14.2.0-7ubuntu1) ... 704s Setting up librsvg2-2:amd64 (2.59.1+dfsg-1) ... 704s Setting up gir1.2-pango-1.0:amd64 (1.54.0+ds-3) ... 704s Setting up libqt5gui5t64:amd64 (5.15.15+dfsg-1ubuntu1) ... 704s Setting up librsvg2-common:amd64 (2.59.1+dfsg-1) ... 704s Setting up g++-14-x86-64-linux-gnu (14.2.0-7ubuntu1) ... 704s Setting up g++-x86-64-linux-gnu (4:14.1.0-2ubuntu1) ... 704s Setting up g++-14 (14.2.0-7ubuntu1) ... 704s Setting up libqt5widgets5t64:amd64 (5.15.15+dfsg-1ubuntu1) ... 704s Setting up x11-xkb-utils (7.7+9) ... 704s Setting up libqt5help5:amd64 (5.15.15-2) ... 704s Setting up gnome-icon-theme (3.12.0-5) ... 704s 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 704s Setting up gcc (4:14.1.0-2ubuntu1) ... 704s Setting up g++ (4:14.1.0-2ubuntu1) ... 704s update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mode 704s Setting up build-essential (12.10ubuntu1) ... 704s Setting up xserver-common (2:21.1.14-2ubuntu1) ... 704s Setting up libqt5printsupport5t64:amd64 (5.15.15+dfsg-1ubuntu1) ... 704s Setting up libqt5designer5:amd64 (5.15.15-2) ... 704s Setting up xvfb (2:21.1.14-2ubuntu1) ... 704s Setting up python3-pyqt5 (5.15.11+dfsg-1build1) ... 704s Setting up adwaita-icon-theme (47.0-2) ... 704s update-alternatives: using /usr/share/icons/Adwaita/cursor.theme to provide /usr/share/icons/default/index.theme (x-cursor-theme) in auto mode 704s Setting up humanity-icon-theme (0.6.16) ... 704s Setting up ubuntu-mono (24.04-0ubuntu1) ... 704s Processing triggers for man-db (2.12.1-3) ... 705s Processing triggers for libglib2.0-0t64:amd64 (2.82.1-0ubuntu1) ... 706s Processing triggers for dbus (1.14.10-4ubuntu5) ... 706s Setting up libgtk-3-0t64:amd64 (3.24.43-3ubuntu2) ... 706s Processing triggers for udev (256.5-2ubuntu4) ... 706s Setting up gvfs-libs:amd64 (1.56.1-1) ... 706s Setting up libwnck-3-0:amd64 (43.1-1) ... 706s Setting up libhandy-1-0:amd64 (1.8.3-1build2) ... 706s Processing triggers for libc-bin (2.40-1ubuntu3) ... 706s Setting up gir1.2-gtk-3.0:amd64 (3.24.43-3ubuntu2) ... 706s Setting up libvte-2.91-0:amd64 (0.78.1-1) ... 706s Setting up gvfs-daemons (1.56.1-1) ... 706s Setting up gir1.2-wnck-3.0:amd64 (43.1-1) ... 706s Setting up gnome-terminal (3.54.0-1ubuntu1) ... 706s update-alternatives: using /usr/bin/gnome-terminal.wrapper to provide /usr/bin/x-terminal-emulator (x-terminal-emulator) in auto mode 706s Setting up apport-kde (2.30.0-0ubuntu4) ... 706s Setting up apport-gtk (2.30.0-0ubuntu4) ... 706s Processing triggers for libgdk-pixbuf-2.0-0:amd64 (2.42.12+dfsg-1) ... 706s Processing triggers for libc-bin (2.40-1ubuntu3) ... 707s Reading package lists... 707s Building dependency tree... 707s Reading state information... 707s Starting pkgProblemResolver with broken count: 0 707s Starting 2 pkgProblemResolver with broken count: 0 707s Done 708s The following NEW packages will be installed: 708s autopkgtest-satdep 708s 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. 708s Need to get 0 B/692 B of archives. 708s After this operation, 0 B of additional disk space will be used. 708s Get:1 /tmp/autopkgtest.BBDYUq/4-autopkgtest-satdep.deb autopkgtest-satdep amd64 0 [692 B] 708s Selecting previously unselected package autopkgtest-satdep. 708s (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 ... 100350 files and directories currently installed.) 708s Preparing to unpack .../4-autopkgtest-satdep.deb ... 708s Unpacking autopkgtest-satdep (0) ... 708s Setting up autopkgtest-satdep (0) ... 708s autopkgtest: WARNING: package apport:i386 is not installed though it should be 709s autopkgtest: WARNING: package apport-gtk:i386 is not installed though it should be 709s autopkgtest: WARNING: package apport-kde:i386 is not installed though it should be 710s autopkgtest: WARNING: package apport-retrace:i386 is not installed though it should be 710s autopkgtest: WARNING: package apport-valgrind:i386 is not installed though it should be 711s (Reading database ... 100350 files and directories currently installed.) 711s Removing autopkgtest-satdep (0) ... 713s autopkgtest [17:32:04]: test system-tests: [----------------------- 714s ============================= test session starts ============================== 714s platform linux -- Python 3.12.7, pytest-8.3.3, pluggy-1.5.0 -- /usr/bin/python3 714s cachedir: .pytest_cache 714s rootdir: /tmp/autopkgtest.BBDYUq/autopkgtest_tmp 714s plugins: typeguard-4.4.1 715s collecting ... collected 103 items 715s 764s tests/system/test_apport_retrace.py::test_retrace_system_sandbox FAILED [ 0%] 764s tests/system/test_apport_retrace.py::test_retrace_system_sandbox_gdb_sandbox_nonamd64 SKIPPED [ 1%] 765s tests/system/test_apport_retrace.py::test_retrace_system_sandbox_gdb_sandbox FAILED [ 2%] 906s tests/system/test_apport_retrace.py::test_retrace_jammy_sandbox FAILED [ 3%] 918s tests/system/test_apport_retrace.py::test_retrace_jammy_sandbox_gdb_sandbox FAILED [ 4%] 929s tests/system/test_apport_valgrind.py::TestApportValgrind::test_sandbox_cache_options FAILED [ 5%] 929s tests/system/test_github_query.py::TestGitHubQuery::test_api_authentication FAILED [ 6%] 934s tests/system/test_packaging_apt_dpkg.py::test_install_packages_versioned[one-line] FAILED [ 7%] 940s tests/system/test_packaging_apt_dpkg.py::test_install_packages_versioned[deb822] FAILED [ 8%] 942s tests/system/test_packaging_apt_dpkg.py::test_install_packages_unversioned[one-line] PASSED [ 9%] 944s tests/system/test_packaging_apt_dpkg.py::test_install_packages_unversioned[deb822] PASSED [ 10%] 946s tests/system/test_packaging_apt_dpkg.py::test_install_packages_dependencies[one-line] FAILED [ 11%] 948s tests/system/test_packaging_apt_dpkg.py::test_install_packages_dependencies[deb822] FAILED [ 12%] 953s tests/system/test_packaging_apt_dpkg.py::test_install_packages_system[one-line] FAILED [ 13%] 960s tests/system/test_packaging_apt_dpkg.py::test_install_packages_system[deb822] FAILED [ 14%] 961s tests/system/test_packaging_apt_dpkg.py::test_install_packages_error[one-line] PASSED [ 15%] 963s tests/system/test_packaging_apt_dpkg.py::test_install_packages_error[deb822] PASSED [ 16%] 1328s tests/system/test_packaging_apt_dpkg.py::test_install_packages_permanent_sandbox[one-line] PASSED [ 17%] 1694s tests/system/test_packaging_apt_dpkg.py::test_install_packages_permanent_sandbox[deb822] PASSED [ 18%] 1696s tests/system/test_packaging_apt_dpkg.py::test_install_packages_permanent_sandbox_repack[one-line] PASSED [ 19%] 1700s tests/system/test_packaging_apt_dpkg.py::test_install_packages_permanent_sandbox_repack[deb822] PASSED [ 20%] 1702s tests/system/test_packaging_apt_dpkg.py::test_install_packages_armhf[one-line] FAILED [ 21%] 1705s tests/system/test_packaging_apt_dpkg.py::test_install_packages_armhf[deb822] FAILED [ 22%] 1707s tests/system/test_packaging_apt_dpkg.py::test_install_packages_from_launchpad[one-line] FAILED [ 23%] 1709s tests/system/test_packaging_apt_dpkg.py::test_install_packages_from_launchpad[deb822] FAILED [ 24%] 1712s tests/system/test_packaging_apt_dpkg.py::test_install_old_packages[one-line] FAILED [ 25%] 1715s tests/system/test_packaging_apt_dpkg.py::test_install_old_packages[deb822] FAILED [ 26%] 1716s tests/system/test_packaging_apt_dpkg.py::test_get_source_tree_sandbox[one-line] PASSED [ 27%] 1717s tests/system/test_packaging_apt_dpkg.py::test_get_source_tree_sandbox[deb822] PASSED [ 28%] 1719s tests/system/test_packaging_apt_dpkg.py::test_get_source_tree_lp_sandbox[one-line] FAILED [ 29%] 1720s tests/system/test_packaging_apt_dpkg.py::test_get_source_tree_lp_sandbox[deb822] FAILED [ 30%] 1721s tests/system/test_packaging_apt_dpkg.py::test_create_sources_for_a_named_ppa[one-line] PASSED [ 31%] 1723s tests/system/test_packaging_apt_dpkg.py::test_create_sources_for_a_named_ppa[deb822] PASSED [ 32%] 1724s tests/system/test_packaging_apt_dpkg.py::test_create_sources_for_an_unnamed_ppa[one-line] PASSED [ 33%] 1725s tests/system/test_packaging_apt_dpkg.py::test_create_sources_for_an_unnamed_ppa[deb822] PASSED [ 33%] 1726s tests/system/test_packaging_apt_dpkg.py::test_use_sources_for_a_ppa[one-line] PASSED [ 34%] 1727s tests/system/test_packaging_apt_dpkg.py::test_use_sources_for_a_ppa[deb822] PASSED [ 35%] 1732s tests/system/test_packaging_apt_dpkg.py::test_install_package_from_a_ppa[one-line] PASSED [ 36%] 1737s tests/system/test_packaging_apt_dpkg.py::test_install_package_from_a_ppa[deb822] PASSED [ 37%] 1737s tests/system/test_python_crashes.py::T::test_dbus_service_other_error PASSED [ 38%] 1763s tests/system/test_python_crashes.py::T::test_dbus_service_timeout_running PASSED [ 39%] 1763s tests/system/test_python_crashes.py::T::test_dbus_service_unknown_invalid PASSED [ 40%] 1763s tests/system/test_python_crashes.py::T::test_dbus_service_unknown_wrongbus_notrunning PASSED [ 41%] 1764s tests/system/test_python_crashes.py::T::test_dbus_service_unknown_wrongbus_running PASSED [ 42%] 1764s tests/system/test_signal_crashes.py::T::test_crash_system_slice SKIPPED [ 43%] 1764s tests/system/test_signal_crashes.py::T::test_create_test_non_sleep_process SKIPPED [ 44%] 1764s tests/system/test_signal_crashes.py::T::test_create_test_sleep_process SKIPPED [ 45%] 1764s tests/system/test_signal_crashes.py::T::test_limit_size SKIPPED (Ple...) [ 46%] 1764s tests/system/test_ui_gtk.py::T::test_administrator_disabled_reporting PASSED [ 47%] 1764s tests/system/test_ui_gtk.py::T::test_apport_bug_package_layout PASSED [ 48%] 1764s tests/system/test_ui_gtk.py::T::test_apport_bug_package_layout_load_file PASSED [ 49%] 1764s tests/system/test_ui_gtk.py::T::test_broken_crash_details PASSED [ 50%] 1764s tests/system/test_ui_gtk.py::T::test_bug_report_installed_package PASSED [ 51%] 1765s tests/system/test_ui_gtk.py::T::test_bug_report_uninstalled_package PASSED [ 52%] 1765s tests/system/test_ui_gtk.py::T::test_close_button PASSED [ 53%] 1765s tests/system/test_ui_gtk.py::T::test_close_during_collect PASSED [ 54%] 1765s tests/system/test_ui_gtk.py::T::test_crash_details PASSED [ 55%] 1765s tests/system/test_ui_gtk.py::T::test_crash_noaccept PASSED [ 56%] 1765s tests/system/test_ui_gtk.py::T::test_crash_nodetails PASSED [ 57%] 1765s tests/system/test_ui_gtk.py::T::test_dialog_nonascii PASSED [ 58%] 1765s tests/system/test_ui_gtk.py::T::test_examine_button PASSED [ 59%] 1765s tests/system/test_ui_gtk.py::T::test_hang_layout PASSED [ 60%] 1765s tests/system/test_ui_gtk.py::T::test_immediate_close PASSED [ 61%] 1765s tests/system/test_ui_gtk.py::T::test_kernel_crash_layout PASSED [ 62%] 1767s tests/system/test_ui_gtk.py::T::test_kerneloops_nodetails PASSED [ 63%] 1767s tests/system/test_ui_gtk.py::T::test_missing_icon PASSED [ 64%] 1767s tests/system/test_ui_gtk.py::T::test_package_crash_layout PASSED [ 65%] 1767s tests/system/test_ui_gtk.py::T::test_recoverable_crash_layout PASSED [ 66%] 1767s tests/system/test_ui_gtk.py::T::test_regular_crash_layout PASSED [ 66%] 1767s tests/system/test_ui_gtk.py::T::test_regular_crash_layout_norestart PASSED [ 67%] 1767s tests/system/test_ui_gtk.py::T::test_regular_crash_layout_restart PASSED [ 68%] 1767s tests/system/test_ui_gtk.py::T::test_regular_crash_thread_layout PASSED [ 69%] 1768s tests/system/test_ui_gtk.py::T::test_resizing PASSED [ 70%] 1768s tests/system/test_ui_gtk.py::T::test_system_crash_from_console_layout PASSED [ 71%] 1768s tests/system/test_ui_gtk.py::T::test_system_crash_layout PASSED [ 72%] 1768s tests/system/test_ui_gtk.py::T::test_text_to_markup PASSED [ 73%] 1768s tests/system/test_ui_gtk.py::T::test_text_to_markup_url_followed_by_dot PASSED [ 74%] 1768s tests/system/test_ui_gtk.py::T::test_ui_run_terminal PASSED [ 75%] 1768s tests/system/test_ui_gtk.py::T::test_ui_update_view_destroyed PASSED [ 76%] 1768s tests/system/test_ui_gtk.py::T::test_update_report PASSED [ 77%] 1768s tests/system/test_ui_gtk.py::T::test_update_report_different_binary_source PASSED [ 78%] 1770s tests/system/test_ui_kde.py::T::test_1_crash_details PASSED [ 79%] 1771s tests/system/test_ui_kde.py::T::test_1_crash_noaccept PASSED [ 80%] 1772s tests/system/test_ui_kde.py::T::test_1_crash_nodetails PASSED [ 81%] 1772s tests/system/test_ui_kde.py::T::test_1_update_report PASSED [ 82%] 1772s tests/system/test_ui_kde.py::T::test_1_update_report_different_binary_source PASSED [ 83%] 1772s tests/system/test_ui_kde.py::T::test_administrator_disabled_reporting PASSED [ 84%] 1772s tests/system/test_ui_kde.py::T::test_apport_bug_package_layout PASSED [ 85%] 1773s tests/system/test_ui_kde.py::T::test_bug_report_installed_package PASSED [ 86%] 1775s tests/system/test_ui_kde.py::T::test_bug_report_uninstalled_package PASSED [ 87%] 1775s tests/system/test_ui_kde.py::T::test_close_button PASSED [ 88%] 1775s tests/system/test_ui_kde.py::T::test_kernel_crash_layout PASSED [ 89%] 1775s tests/system/test_ui_kde.py::T::test_package_crash_layout PASSED [ 90%] 1775s tests/system/test_ui_kde.py::T::test_recoverable_crash_layout PASSED [ 91%] 1775s tests/system/test_ui_kde.py::T::test_regular_crash_layout PASSED [ 92%] 1775s tests/system/test_ui_kde.py::T::test_regular_crash_layout_norestart PASSED [ 93%] 1775s tests/system/test_ui_kde.py::T::test_regular_crash_layout_restart PASSED [ 94%] 1775s tests/system/test_ui_kde.py::T::test_regular_crash_thread_layout PASSED [ 95%] 1775s tests/system/test_ui_kde.py::T::test_system_crash_layout PASSED [ 96%] 1775s tests/system/test_ui_kde.py::T::test_ui_question_choice_hide_dialog PASSED [ 97%] 1775s tests/system/test_ui_kde.py::T::test_ui_question_file_close PASSED [ 98%] 1775s tests/system/test_ui_kde.py::T::test_ui_run_terminal PASSED [ 99%] 1775s tests/system/test_ui_kde.py::T::test_ui_set_upload_progress PASSED [100%] 1775s 1775s =================================== FAILURES =================================== 1775s _________________________ test_retrace_system_sandbox __________________________ 1775s 1775s workdir = PosixPath('/var/tmp/apport_retrace_system_test_bsliio9h') 1775s module_cachedir = PosixPath('/var/tmp/apport_retrace_system_tests_btu1v_mq/cache') 1775s divide_by_zero_crash = '/var/tmp/apport_retrace_system_tests_btu1v_mq/divide-by-zero.crash' 1775s 1775s @pytest.mark.skipif(not has_internet(), reason="online test") 1775s @pytest.mark.skipif( 1775s impl.get_system_architecture() == "s390x", 1775s reason="GDB has issues with divide-by-zero on s390x (LP: #2075204)", 1775s ) 1775s def test_retrace_system_sandbox( 1775s workdir: pathlib.Path, module_cachedir: pathlib.Path, divide_by_zero_crash: str 1775s ) -> None: 1775s """Retrace a divide-by-zero crash in a system sandbox.""" 1775s retraced_report_filename = workdir / "retraced.crash" 1775s env = os.environ | local_test_environment() 1775s cmd = [ 1775s "apport-retrace", 1775s "-v", 1775s "-o", 1775s str(retraced_report_filename), 1775s "--sandbox", 1775s "system", 1775s "--cache", 1775s str(module_cachedir), 1775s divide_by_zero_crash, 1775s ] 1775s > subprocess.run(cmd, check=True, env=env) 1775s 1775s tests/system/test_apport_retrace.py:224: 1775s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1775s 1775s input = None, capture_output = False, timeout = None, check = True 1775s popenargs = (['apport-retrace', '-v', '-o', '/var/tmp/apport_retrace_system_test_bsliio9h/retraced.crash', '--sandbox', 'system', ...],) 1775s kwargs = {'env': {'ADTTMP': '/tmp/autopkgtest.BBDYUq/autopkgtest_tmp', 'ADT_ARTIFACTS': '/tmp/autopkgtest.BBDYUq/system-tests-artifacts', 'ADT_NORMAL_USER': 'ubuntu', 'ADT_TEST_TRIGGERS': 'xorg-server/2:21.1.14-2ubuntu1', ...}} 1775s process = 1775s stdout = None, stderr = None, retcode = 1 1775s 1775s def run(*popenargs, 1775s input=None, capture_output=False, timeout=None, check=False, **kwargs): 1775s """Run command with arguments and return a CompletedProcess instance. 1775s 1775s The returned instance will have attributes args, returncode, stdout and 1775s stderr. By default, stdout and stderr are not captured, and those attributes 1775s will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them, 1775s or pass capture_output=True to capture both. 1775s 1775s If check is True and the exit code was non-zero, it raises a 1775s CalledProcessError. The CalledProcessError object will have the return code 1775s in the returncode attribute, and output & stderr attributes if those streams 1775s were captured. 1775s 1775s If timeout is given, and the process takes too long, a TimeoutExpired 1775s exception will be raised. 1775s 1775s There is an optional argument "input", allowing you to 1775s pass bytes or a string to the subprocess's stdin. If you use this argument 1775s you may not also use the Popen constructor's "stdin" argument, as 1775s it will be used internally. 1775s 1775s By default, all communication is in bytes, and therefore any "input" should 1775s be bytes, and the stdout and stderr will be bytes. If in text mode, any 1775s "input" should be a string, and stdout and stderr will be strings decoded 1775s according to locale encoding, or by "encoding" if set. Text mode is 1775s triggered by setting any of text, encoding, errors or universal_newlines. 1775s 1775s The other arguments are the same as for the Popen constructor. 1775s """ 1775s if input is not None: 1775s if kwargs.get('stdin') is not None: 1775s raise ValueError('stdin and input arguments may not both be used.') 1775s kwargs['stdin'] = PIPE 1775s 1775s if capture_output: 1775s if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None: 1775s raise ValueError('stdout and stderr arguments may not be used ' 1775s 'with capture_output.') 1775s kwargs['stdout'] = PIPE 1775s kwargs['stderr'] = PIPE 1775s 1775s with Popen(*popenargs, **kwargs) as process: 1775s try: 1775s stdout, stderr = process.communicate(input, timeout=timeout) 1775s except TimeoutExpired as exc: 1775s process.kill() 1775s if _mswindows: 1775s # Windows accumulates the output in a single blocking 1775s # read() call run on child threads, with the timeout 1775s # being done in a join() on those threads. communicate() 1775s # _after_ kill() is required to collect that and add it 1775s # to the exception. 1775s exc.stdout, exc.stderr = process.communicate() 1775s else: 1775s # POSIX _communicate already populated the output so 1775s # far into the TimeoutExpired exception. 1775s process.wait() 1775s raise 1775s except: # Including KeyboardInterrupt, communicate handled that. 1775s process.kill() 1775s # We don't call process.wait() as .__exit__ does that for us. 1775s raise 1775s retcode = process.poll() 1775s if check and retcode: 1775s > raise CalledProcessError(retcode, process.args, 1775s output=stdout, stderr=stderr) 1775s E subprocess.CalledProcessError: Command '['apport-retrace', '-v', '-o', '/var/tmp/apport_retrace_system_test_bsliio9h/retraced.crash', '--sandbox', 'system', '--cache', '/var/tmp/apport_retrace_system_tests_btu1v_mq/cache', '/var/tmp/apport_retrace_system_tests_btu1v_mq/divide-by-zero.crash']' returned non-zero exit status 1. 1775s 1775s /usr/lib/python3.12/subprocess.py:571: CalledProcessError 1775s ---------------------------- Captured stderr setup ----------------------------- 1775s warning: Memory read failed for corefile section, 4096 bytes at 0xffffffffff600000. 1775s ----------------------------- Captured stdout call ----------------------------- 1775s Get:1 http://ftpmaster.internal/ubuntu plucky-proposed InRelease [73.9 kB] 1775s Get:2 http://ftpmaster.internal/ubuntu plucky InRelease [213 kB] 1775s Get:3 http://ftpmaster.internal/ubuntu plucky-updates InRelease [73.9 kB] 1775s Get:4 http://ftpmaster.internal/ubuntu plucky-security InRelease [73.9 kB] 1775s Get:5 http://ftpmaster.internal/ubuntu plucky-proposed/main Sources [89.0 kB] 1775s Get:6 http://ftpmaster.internal/ubuntu plucky-proposed/restricted Sources [7016 B] 1775s Get:7 http://ftpmaster.internal/ubuntu plucky-proposed/multiverse Sources [15.3 kB] 1775s Get:8 http://ftpmaster.internal/ubuntu plucky-proposed/universe Sources [859 kB] 1775s Get:9 http://ftpmaster.internal/ubuntu plucky-proposed/main amd64 Packages [128 kB] 1775s Get:10 http://ftpmaster.internal/ubuntu plucky-proposed/restricted amd64 Packages [32.6 kB] 1775s Get:11 http://ftpmaster.internal/ubuntu plucky-proposed/universe amd64 Packages [659 kB] 1775s Get:12 http://ftpmaster.internal/ubuntu plucky-proposed/multiverse amd64 Packages [37.7 kB] 1775s Get:13 http://ftpmaster.internal/ubuntu plucky/multiverse Sources [298 kB] 1775s Get:14 http://ftpmaster.internal/ubuntu plucky/restricted Sources [14.6 kB] 1775s Get:15 http://ftpmaster.internal/ubuntu plucky/universe Sources [20.7 MB] 1775s Get:16 http://ftpmaster.internal/ubuntu plucky/main Sources [1372 kB] 1775s Get:17 http://ftpmaster.internal/ubuntu plucky/main amd64 Packages [1429 kB] 1775s Get:18 http://ftpmaster.internal/ubuntu plucky/restricted amd64 Packages [53.6 kB] 1775s Get:19 http://ftpmaster.internal/ubuntu plucky/universe amd64 Packages [15.8 MB] 1775s Get:20 http://ftpmaster.internal/ubuntu plucky/multiverse amd64 Packages [252 kB] 1775s Fetched 42.2 MB in 6s (1191 kB/s) 1775s ----------------------------- Captured stderr call ----------------------------- 1775s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/var/tmp/apport_retrace_system_tests_btu1v_mq/cache/system/apt/var/lib/apt/lists/partial/ftpmaster.internal_ubuntu_dists_plucky-proposed_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 1775s res = self._cache.update(fetch_progress, slist, pulse_interval) 1775s Traceback (most recent call last): 1775s File "/usr/lib/python3/dist-packages/apt/cache.py", line 277, in __getitem__ 1775s rawpkg = self._cache[key] 1775s ~~~~~~~~~~~^^^^^ 1775s KeyError: 'chaos-marmosets-dbg' 1775s 1775s During handling of the above exception, another exception occurred: 1775s 1775s Traceback (most recent call last): 1775s File "/usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py", line 1193, in install_packages 1775s dbg = apt_cache[dbg_pkg] 1775s ~~~~~~~~~^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/apt/cache.py", line 279, in __getitem__ 1775s raise KeyError("The cache has no package named %r" % key) 1775s KeyError: "The cache has no package named 'chaos-marmosets-dbg'" 1775s 1775s During handling of the above exception, another exception occurred: 1775s 1775s Traceback (most recent call last): 1775s File "/usr/lib/python3/dist-packages/apt/cache.py", line 277, in __getitem__ 1775s rawpkg = self._cache[key] 1775s ~~~~~~~~~~~^^^^^ 1775s KeyError: 'chaos-marmosets-dbgsym' 1775s 1775s During handling of the above exception, another exception occurred: 1775s 1775s Traceback (most recent call last): 1775s File "/usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py", line 1296, in install_packages 1775s dbgsym = apt_cache[dbgsym_pkg] 1775s ~~~~~~~~~^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/apt/cache.py", line 279, in __getitem__ 1775s raise KeyError("The cache has no package named %r" % key) 1775s KeyError: "The cache has no package named 'chaos-marmosets-dbgsym'" 1775s 1775s During handling of the above exception, another exception occurred: 1775s 1775s Traceback (most recent call last): 1775s File "/usr/bin/apport-retrace", line 701, in 1775s sys.exit(main(sys.argv[1:])) 1775s ^^^^^^^^^^^^^^^^^^ 1775s File "/usr/bin/apport-retrace", line 470, in main 1775s sandbox, cache, outdated_msg = apport.sandboxutils.make_sandbox( 1775s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/apport/sandboxutils.py", line 239, in make_sandbox 1775s outdated_msg = packaging.install_packages( 1775s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py", line 1334, in install_packages 1775s (lp_url, sha1sum) = self.get_lp_binary_package( 1775s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py", line 423, in get_lp_binary_package 1775s launchpad = Launchpad.login_anonymously( 1775s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/launchpadlib/launchpad.py", line 487, in login_anonymously 1775s return cls( 1775s ^^^^ 1775s File "/usr/lib/python3/dist-packages/launchpadlib/launchpad.py", line 223, in __init__ 1775s super().__init__( 1775s File "/usr/lib/python3/dist-packages/lazr/restfulclient/resource.py", line 511, in __init__ 1775s self._wadl = self._browser.get_wadl_application(self._root_uri) 1775s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py", line 502, in get_wadl_application 1775s response, content = self._request(url, media_type=wadl_type) 1775s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py", line 441, in _request 1775s response, content = self._request_and_retry( 1775s ^^^^^^^^^^^^^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py", line 400, in _request_and_retry 1775s response, content = self._connection.request( 1775s ^^^^^^^^^^^^^^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1724, in request 1775s (response, content) = self._request( 1775s ^^^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/launchpadlib/launchpad.py", line 139, in _request 1775s response, content = super()._request(*args) 1775s ^^^^^^^^^^^^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py", line 204, in _request 1775s return super(RestfulHttp, self)._request( 1775s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1444, in _request 1775s (response, content) = self._conn_request(conn, request_uri, method, body, headers) 1775s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1366, in _conn_request 1775s conn.connect() 1775s File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1156, in connect 1775s sock.connect((self.host, self.port)) 1775s File "/usr/lib/python3/dist-packages/httplib2/socks.py", line 504, in connect 1775s self.__negotiatehttp(destpair[0], destpair[1]) 1775s File "/usr/lib/python3/dist-packages/httplib2/socks.py", line 465, in __negotiatehttp 1775s raise HTTPError((statuscode, statusline[2])) 1775s httplib2.socks.HTTPError: (403, b'Forbidden') 1775s ___________________ test_retrace_system_sandbox_gdb_sandbox ____________________ 1775s 1775s workdir = PosixPath('/var/tmp/apport_retrace_system_test_1bzx4zfv') 1775s module_cachedir = PosixPath('/var/tmp/apport_retrace_system_tests_btu1v_mq/cache') 1775s divide_by_zero_crash = '/var/tmp/apport_retrace_system_tests_btu1v_mq/divide-by-zero.crash' 1775s 1775s @pytest.mark.skipif(not has_internet(), reason="online test") 1775s @pytest.mark.skipif( 1775s impl.get_system_architecture() != "amd64", 1775s reason="Testing the GDB sandbox erroring out on non-AMD64", 1775s ) 1775s def test_retrace_system_sandbox_gdb_sandbox( 1775s workdir: pathlib.Path, module_cachedir: pathlib.Path, divide_by_zero_crash: str 1775s ) -> None: 1775s """Retrace a divide-by-zero crash in a system sandbox with a GDB sandbox.""" 1775s retraced_report_filename = workdir / "retraced.crash" 1775s env = os.environ | local_test_environment() 1775s cmd = [ 1775s "apport-retrace", 1775s "-v", 1775s "-o", 1775s str(retraced_report_filename), 1775s "--sandbox", 1775s "system", 1775s "--gdb-sandbox", 1775s "--cache", 1775s str(module_cachedir), 1775s divide_by_zero_crash, 1775s ] 1775s > subprocess.run(cmd, check=True, env=env) 1775s 1775s tests/system/test_apport_retrace.py:282: 1775s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1775s 1775s input = None, capture_output = False, timeout = None, check = True 1775s popenargs = (['apport-retrace', '-v', '-o', '/var/tmp/apport_retrace_system_test_1bzx4zfv/retraced.crash', '--sandbox', 'system', ...],) 1775s kwargs = {'env': {'ADTTMP': '/tmp/autopkgtest.BBDYUq/autopkgtest_tmp', 'ADT_ARTIFACTS': '/tmp/autopkgtest.BBDYUq/system-tests-artifacts', 'ADT_NORMAL_USER': 'ubuntu', 'ADT_TEST_TRIGGERS': 'xorg-server/2:21.1.14-2ubuntu1', ...}} 1775s process = 1775s stdout = None, stderr = None, retcode = 1 1775s 1775s def run(*popenargs, 1775s input=None, capture_output=False, timeout=None, check=False, **kwargs): 1775s """Run command with arguments and return a CompletedProcess instance. 1775s 1775s The returned instance will have attributes args, returncode, stdout and 1775s stderr. By default, stdout and stderr are not captured, and those attributes 1775s will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them, 1775s or pass capture_output=True to capture both. 1775s 1775s If check is True and the exit code was non-zero, it raises a 1775s CalledProcessError. The CalledProcessError object will have the return code 1775s in the returncode attribute, and output & stderr attributes if those streams 1775s were captured. 1775s 1775s If timeout is given, and the process takes too long, a TimeoutExpired 1775s exception will be raised. 1775s 1775s There is an optional argument "input", allowing you to 1775s pass bytes or a string to the subprocess's stdin. If you use this argument 1775s you may not also use the Popen constructor's "stdin" argument, as 1775s it will be used internally. 1775s 1775s By default, all communication is in bytes, and therefore any "input" should 1775s be bytes, and the stdout and stderr will be bytes. If in text mode, any 1775s "input" should be a string, and stdout and stderr will be strings decoded 1775s according to locale encoding, or by "encoding" if set. Text mode is 1775s triggered by setting any of text, encoding, errors or universal_newlines. 1775s 1775s The other arguments are the same as for the Popen constructor. 1775s """ 1775s if input is not None: 1775s if kwargs.get('stdin') is not None: 1775s raise ValueError('stdin and input arguments may not both be used.') 1775s kwargs['stdin'] = PIPE 1775s 1775s if capture_output: 1775s if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None: 1775s raise ValueError('stdout and stderr arguments may not be used ' 1775s 'with capture_output.') 1775s kwargs['stdout'] = PIPE 1775s kwargs['stderr'] = PIPE 1775s 1775s with Popen(*popenargs, **kwargs) as process: 1775s try: 1775s stdout, stderr = process.communicate(input, timeout=timeout) 1775s except TimeoutExpired as exc: 1775s process.kill() 1775s if _mswindows: 1775s # Windows accumulates the output in a single blocking 1775s # read() call run on child threads, with the timeout 1775s # being done in a join() on those threads. communicate() 1775s # _after_ kill() is required to collect that and add it 1775s # to the exception. 1775s exc.stdout, exc.stderr = process.communicate() 1775s else: 1775s # POSIX _communicate already populated the output so 1775s # far into the TimeoutExpired exception. 1775s process.wait() 1775s raise 1775s except: # Including KeyboardInterrupt, communicate handled that. 1775s process.kill() 1775s # We don't call process.wait() as .__exit__ does that for us. 1775s raise 1775s retcode = process.poll() 1775s if check and retcode: 1775s > raise CalledProcessError(retcode, process.args, 1775s output=stdout, stderr=stderr) 1775s E subprocess.CalledProcessError: Command '['apport-retrace', '-v', '-o', '/var/tmp/apport_retrace_system_test_1bzx4zfv/retraced.crash', '--sandbox', 'system', '--gdb-sandbox', '--cache', '/var/tmp/apport_retrace_system_tests_btu1v_mq/cache', '/var/tmp/apport_retrace_system_tests_btu1v_mq/divide-by-zero.crash']' returned non-zero exit status 1. 1775s 1775s /usr/lib/python3.12/subprocess.py:571: CalledProcessError 1775s ----------------------------- Captured stdout call ----------------------------- 1775s Hit http://ftpmaster.internal/ubuntu plucky-proposed InRelease 1775s Hit http://ftpmaster.internal/ubuntu plucky InRelease 1775s Hit http://ftpmaster.internal/ubuntu plucky-updates InRelease 1775s Hit http://ftpmaster.internal/ubuntu plucky-security InRelease 1775s Fetched 0 B in 0s (0 B/s) 1775s ----------------------------- Captured stderr call ----------------------------- 1775s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/var/tmp/apport_retrace_system_tests_btu1v_mq/cache/system/apt/var/lib/apt/lists/partial/ftpmaster.internal_ubuntu_dists_plucky-proposed_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 1775s res = self._cache.update(fetch_progress, slist, pulse_interval) 1775s Traceback (most recent call last): 1775s File "/usr/lib/python3/dist-packages/apt/cache.py", line 277, in __getitem__ 1775s rawpkg = self._cache[key] 1775s ~~~~~~~~~~~^^^^^ 1775s KeyError: 'chaos-marmosets-dbg' 1775s 1775s During handling of the above exception, another exception occurred: 1775s 1775s Traceback (most recent call last): 1775s File "/usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py", line 1193, in install_packages 1775s dbg = apt_cache[dbg_pkg] 1775s ~~~~~~~~~^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/apt/cache.py", line 279, in __getitem__ 1775s raise KeyError("The cache has no package named %r" % key) 1775s KeyError: "The cache has no package named 'chaos-marmosets-dbg'" 1775s 1775s During handling of the above exception, another exception occurred: 1775s 1775s Traceback (most recent call last): 1775s File "/usr/lib/python3/dist-packages/apt/cache.py", line 277, in __getitem__ 1775s rawpkg = self._cache[key] 1775s ~~~~~~~~~~~^^^^^ 1775s KeyError: 'chaos-marmosets-dbgsym' 1775s 1775s During handling of the above exception, another exception occurred: 1775s 1775s Traceback (most recent call last): 1775s File "/usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py", line 1296, in install_packages 1775s dbgsym = apt_cache[dbgsym_pkg] 1775s ~~~~~~~~~^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/apt/cache.py", line 279, in __getitem__ 1775s raise KeyError("The cache has no package named %r" % key) 1775s KeyError: "The cache has no package named 'chaos-marmosets-dbgsym'" 1775s 1775s During handling of the above exception, another exception occurred: 1775s 1775s Traceback (most recent call last): 1775s File "/usr/bin/apport-retrace", line 701, in 1775s sys.exit(main(sys.argv[1:])) 1775s ^^^^^^^^^^^^^^^^^^ 1775s File "/usr/bin/apport-retrace", line 470, in main 1775s sandbox, cache, outdated_msg = apport.sandboxutils.make_sandbox( 1775s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/apport/sandboxutils.py", line 239, in make_sandbox 1775s outdated_msg = packaging.install_packages( 1775s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py", line 1334, in install_packages 1775s (lp_url, sha1sum) = self.get_lp_binary_package( 1775s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py", line 423, in get_lp_binary_package 1775s launchpad = Launchpad.login_anonymously( 1775s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/launchpadlib/launchpad.py", line 487, in login_anonymously 1775s return cls( 1775s ^^^^ 1775s File "/usr/lib/python3/dist-packages/launchpadlib/launchpad.py", line 223, in __init__ 1775s super().__init__( 1775s File "/usr/lib/python3/dist-packages/lazr/restfulclient/resource.py", line 511, in __init__ 1775s self._wadl = self._browser.get_wadl_application(self._root_uri) 1775s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py", line 502, in get_wadl_application 1775s response, content = self._request(url, media_type=wadl_type) 1775s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py", line 441, in _request 1775s response, content = self._request_and_retry( 1775s ^^^^^^^^^^^^^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py", line 400, in _request_and_retry 1775s response, content = self._connection.request( 1775s ^^^^^^^^^^^^^^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1724, in request 1775s (response, content) = self._request( 1775s ^^^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/launchpadlib/launchpad.py", line 139, in _request 1775s response, content = super()._request(*args) 1775s ^^^^^^^^^^^^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py", line 204, in _request 1775s return super(RestfulHttp, self)._request( 1775s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1444, in _request 1775s (response, content) = self._conn_request(conn, request_uri, method, body, headers) 1775s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1775s File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1366, in _conn_request 1775s conn.connect() 1775s File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1156, in connect 1775s sock.connect((self.host, self.port)) 1775s File "/usr/lib/python3/dist-packages/httplib2/socks.py", line 504, in connect 1775s self.__negotiatehttp(destpair[0], destpair[1]) 1775s File "/usr/lib/python3/dist-packages/httplib2/socks.py", line 465, in __negotiatehttp 1775s raise HTTPError((statuscode, statusline[2])) 1775s httplib2.socks.HTTPError: (403, b'Forbidden') 1775s __________________________ test_retrace_jammy_sandbox __________________________ 1775s 1775s workdir = PosixPath('/var/tmp/apport_retrace_system_test_k7ofxeo9') 1775s module_cachedir = PosixPath('/var/tmp/apport_retrace_system_tests_btu1v_mq/cache') 1775s sandbox_config = '/var/tmp/apport_retrace_system_test_k7ofxeo9/config' 1775s 1775s @pytest.mark.skipif(not has_internet(), reason="online test") 1775s @pytest.mark.skipif( 1775s impl.get_system_architecture() != "amd64" and shutil.which("gdb-multiarch") is None, 1775s reason="gdb-multiarch is needed for proper retracing on foreign architectures", 1775s ) 1775s def test_retrace_jammy_sandbox( 1775s workdir: pathlib.Path, module_cachedir: pathlib.Path, sandbox_config: pathlib.Path 1775s ) -> None: 1775s """Retrace a sleep crash from jammy in a sandbox.""" 1775s crash = get_test_data_directory() / "jammy_usr_bin_sleep.1000.crash" 1775s retraced_report_filename = workdir / "retraced.crash" 1775s env = os.environ | local_test_environment() 1775s cmd = [ 1775s "apport-retrace", 1775s "-v", 1775s "-o", 1775s str(retraced_report_filename), 1775s "--sandbox", 1775s str(sandbox_config), 1775s "--cache", 1775s str(module_cachedir), 1775s "--sandbox-dir", 1775s str(workdir / "apport_sandbox"), 1775s str(crash), 1775s ] 1775s > subprocess.run(cmd, check=True, env=env) 1775s 1775s tests/system/test_apport_retrace.py:314: 1775s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1775s 1775s input = None, capture_output = False, timeout = None, check = True 1775s popenargs = (['apport-retrace', '-v', '-o', '/var/tmp/apport_retrace_system_test_k7ofxeo9/retraced.crash', '--sandbox', '/var/tmp/apport_retrace_system_test_k7ofxeo9/config', ...],) 1775s kwargs = {'env': {'ADTTMP': '/tmp/autopkgtest.BBDYUq/autopkgtest_tmp', 'ADT_ARTIFACTS': '/tmp/autopkgtest.BBDYUq/system-tests-artifacts', 'ADT_NORMAL_USER': 'ubuntu', 'ADT_TEST_TRIGGERS': 'xorg-server/2:21.1.14-2ubuntu1', ...}} 1775s process = 1775s stdout = None, stderr = None, retcode = 1 1775s 1775s def run(*popenargs, 1775s input=None, capture_output=False, timeout=None, check=False, **kwargs): 1775s """Run command with arguments and return a CompletedProcess instance. 1775s 1775s The returned instance will have attributes args, returncode, stdout and 1775s stderr. By default, stdout and stderr are not captured, and those attributes 1775s will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them, 1775s or pass capture_output=True to capture both. 1775s 1775s If check is True and the exit code was non-zero, it raises a 1775s CalledProcessError. The CalledProcessError object will have the return code 1775s in the returncode attribute, and output & stderr attributes if those streams 1775s were captured. 1775s 1775s If timeout is given, and the process takes too long, a TimeoutExpired 1775s exception will be raised. 1775s 1775s There is an optional argument "input", allowing you to 1775s pass bytes or a string to the subprocess's stdin. If you use this argument 1775s you may not also use the Popen constructor's "stdin" argument, as 1775s it will be used internally. 1775s 1775s By default, all communication is in bytes, and therefore any "input" should 1775s be bytes, and the stdout and stderr will be bytes. If in text mode, any 1775s "input" should be a string, and stdout and stderr will be strings decoded 1775s according to locale encoding, or by "encoding" if set. Text mode is 1775s triggered by setting any of text, encoding, errors or universal_newlines. 1775s 1775s The other arguments are the same as for the Popen constructor. 1775s """ 1775s if input is not None: 1775s if kwargs.get('stdin') is not None: 1775s raise ValueError('stdin and input arguments may not both be used.') 1775s kwargs['stdin'] = PIPE 1775s 1775s if capture_output: 1775s if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None: 1775s raise ValueError('stdout and stderr arguments may not be used ' 1775s 'with capture_output.') 1775s kwargs['stdout'] = PIPE 1775s kwargs['stderr'] = PIPE 1775s 1775s with Popen(*popenargs, **kwargs) as process: 1775s try: 1775s stdout, stderr = process.communicate(input, timeout=timeout) 1775s except TimeoutExpired as exc: 1775s process.kill() 1775s if _mswindows: 1775s # Windows accumulates the output in a single blocking 1775s # read() call run on child threads, with the timeout 1776s # being done in a join() on those threads. communicate() 1776s # _after_ kill() is required to collect that and add it 1776s # to the exception. 1776s exc.stdout, exc.stderr = process.communicate() 1776s else: 1776s # POSIX _communicate already populated the output so 1776s # far into the TimeoutExpired exception. 1776s process.wait() 1776s raise 1776s except: # Including KeyboardInterrupt, communicate handled that. 1776s process.kill() 1776s # We don't call process.wait() as .__exit__ does that for us. 1776s raise 1776s retcode = process.poll() 1776s if check and retcode: 1776s > raise CalledProcessError(retcode, process.args, 1776s output=stdout, stderr=stderr) 1776s E subprocess.CalledProcessError: Command '['apport-retrace', '-v', '-o', '/var/tmp/apport_retrace_system_test_k7ofxeo9/retraced.crash', '--sandbox', '/var/tmp/apport_retrace_system_test_k7ofxeo9/config', '--cache', '/var/tmp/apport_retrace_system_tests_btu1v_mq/cache', '--sandbox-dir', '/var/tmp/apport_retrace_system_test_k7ofxeo9/apport_sandbox', '/tmp/autopkgtest.BBDYUq/autopkgtest_tmp/tests/data/jammy_usr_bin_sleep.1000.crash']' returned non-zero exit status 1. 1776s 1776s /usr/lib/python3.12/subprocess.py:571: CalledProcessError 1776s ----------------------------- Captured stdout call ----------------------------- 1776s Get:1 http://ftpmaster.internal/ubuntu jammy InRelease [270 kB] 1776s Get:2 http://ftpmaster.internal/ubuntu jammy/main Sources [1340 kB] 1776s Get:3 http://ftpmaster.internal/ubuntu jammy/main amd64 Packages [1395 kB] 1776s Get:4 http://ftpmaster.internal/ubuntu jammy/main amd64 c-n-f Metadata [30.3 kB] 1776s Fetched 3035 kB in 0s (0 B/s) 1776s Fetched 0 B in 0s (0 B/s) 1776s Extracting downloaded debs... 1776s dynamically loaded /usr/lib/x86_64-linux-gnu/libc.so.6 needs package libc6, queueing 1776s dynamically loaded /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 needs package libc6, queueing 1776s Installing extra package coreutils to get ExecutablePath 1776s ----------------------------- Captured stderr call ----------------------------- 1776s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/var/tmp/apport_retrace_system_tests_btu1v_mq/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) 1776s res = self._cache.update(fetch_progress, slist, pulse_interval) 1776s Traceback (most recent call last): 1776s File "/usr/lib/python3/dist-packages/apt/cache.py", line 277, in __getitem__ 1776s rawpkg = self._cache[key] 1776s ~~~~~~~~~~~^^^^^ 1776s KeyError: 'coreutils-dbg' 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s Traceback (most recent call last): 1776s File "/usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py", line 1193, in install_packages 1776s dbg = apt_cache[dbg_pkg] 1776s ~~~~~~~~~^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/apt/cache.py", line 279, in __getitem__ 1776s raise KeyError("The cache has no package named %r" % key) 1776s KeyError: "The cache has no package named 'coreutils-dbg'" 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s Traceback (most recent call last): 1776s File "/usr/lib/python3/dist-packages/apt/cache.py", line 277, in __getitem__ 1776s rawpkg = self._cache[key] 1776s ~~~~~~~~~~~^^^^^ 1776s KeyError: 'coreutils-dbgsym' 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s Traceback (most recent call last): 1776s File "/usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py", line 1296, in install_packages 1776s dbgsym = apt_cache[dbgsym_pkg] 1776s ~~~~~~~~~^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/apt/cache.py", line 279, in __getitem__ 1776s raise KeyError("The cache has no package named %r" % key) 1776s KeyError: "The cache has no package named 'coreutils-dbgsym'" 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s Traceback (most recent call last): 1776s File "/usr/bin/apport-retrace", line 701, in 1776s sys.exit(main(sys.argv[1:])) 1776s ^^^^^^^^^^^^^^^^^^ 1776s File "/usr/bin/apport-retrace", line 470, in main 1776s sandbox, cache, outdated_msg = apport.sandboxutils.make_sandbox( 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/apport/sandboxutils.py", line 307, in make_sandbox 1776s outdated_msg += packaging.install_packages( 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py", line 1334, in install_packages 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py", line 423, in get_lp_binary_package 1776s launchpad = Launchpad.login_anonymously( 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/launchpadlib/launchpad.py", line 487, in login_anonymously 1776s return cls( 1776s ^^^^ 1776s File "/usr/lib/python3/dist-packages/launchpadlib/launchpad.py", line 223, in __init__ 1776s super().__init__( 1776s File "/usr/lib/python3/dist-packages/lazr/restfulclient/resource.py", line 511, in __init__ 1776s self._wadl = self._browser.get_wadl_application(self._root_uri) 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py", line 502, in get_wadl_application 1776s response, content = self._request(url, media_type=wadl_type) 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py", line 441, in _request 1776s response, content = self._request_and_retry( 1776s ^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py", line 400, in _request_and_retry 1776s response, content = self._connection.request( 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1724, in request 1776s (response, content) = self._request( 1776s ^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/launchpadlib/launchpad.py", line 139, in _request 1776s response, content = super()._request(*args) 1776s ^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py", line 204, in _request 1776s return super(RestfulHttp, self)._request( 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1444, in _request 1776s (response, content) = self._conn_request(conn, request_uri, method, body, headers) 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1366, in _conn_request 1776s conn.connect() 1776s File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1156, in connect 1776s sock.connect((self.host, self.port)) 1776s File "/usr/lib/python3/dist-packages/httplib2/socks.py", line 504, in connect 1776s self.__negotiatehttp(destpair[0], destpair[1]) 1776s File "/usr/lib/python3/dist-packages/httplib2/socks.py", line 465, in __negotiatehttp 1776s raise HTTPError((statuscode, statusline[2])) 1776s httplib2.socks.HTTPError: (403, b'Forbidden') 1776s ____________________ test_retrace_jammy_sandbox_gdb_sandbox ____________________ 1776s 1776s workdir = PosixPath('/var/tmp/apport_retrace_system_test_2kj80s4x') 1776s module_cachedir = PosixPath('/var/tmp/apport_retrace_system_tests_btu1v_mq/cache') 1776s sandbox_config = '/var/tmp/apport_retrace_system_test_2kj80s4x/config' 1776s 1776s @pytest.mark.skipif(not has_internet(), reason="online test") 1776s @pytest.mark.skipif( 1776s impl.get_system_architecture() != "amd64", 1776s reason="GDB sandbox only available on amd64", 1776s ) 1776s def test_retrace_jammy_sandbox_gdb_sandbox( 1776s workdir: pathlib.Path, module_cachedir: pathlib.Path, sandbox_config: pathlib.Path 1776s ) -> None: 1776s """Retrace a sleep crash from jammy in a sandbox with a GDB sandbox.""" 1776s crash = get_test_data_directory() / "jammy_usr_bin_sleep.1000.crash" 1776s retraced_report_filename = workdir / "retraced.crash" 1776s env = os.environ | local_test_environment() 1776s cmd = [ 1776s "apport-retrace", 1776s "-v", 1776s "-o", 1776s str(retraced_report_filename), 1776s "--sandbox", 1776s str(sandbox_config), 1776s "--gdb-sandbox", 1776s "--cache", 1776s str(module_cachedir), 1776s "--sandbox-dir", 1776s str(workdir / "apport_sandbox"), 1776s str(crash), 1776s ] 1776s > subprocess.run(cmd, check=True, env=env) 1776s 1776s tests/system/test_apport_retrace.py:348: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s input = None, capture_output = False, timeout = None, check = True 1776s popenargs = (['apport-retrace', '-v', '-o', '/var/tmp/apport_retrace_system_test_2kj80s4x/retraced.crash', '--sandbox', '/var/tmp/apport_retrace_system_test_2kj80s4x/config', ...],) 1776s kwargs = {'env': {'ADTTMP': '/tmp/autopkgtest.BBDYUq/autopkgtest_tmp', 'ADT_ARTIFACTS': '/tmp/autopkgtest.BBDYUq/system-tests-artifacts', 'ADT_NORMAL_USER': 'ubuntu', 'ADT_TEST_TRIGGERS': 'xorg-server/2:21.1.14-2ubuntu1', ...}} 1776s process = 1776s stdout = None, stderr = None, retcode = 1 1776s 1776s def run(*popenargs, 1776s input=None, capture_output=False, timeout=None, check=False, **kwargs): 1776s """Run command with arguments and return a CompletedProcess instance. 1776s 1776s The returned instance will have attributes args, returncode, stdout and 1776s stderr. By default, stdout and stderr are not captured, and those attributes 1776s will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them, 1776s or pass capture_output=True to capture both. 1776s 1776s If check is True and the exit code was non-zero, it raises a 1776s CalledProcessError. The CalledProcessError object will have the return code 1776s in the returncode attribute, and output & stderr attributes if those streams 1776s were captured. 1776s 1776s If timeout is given, and the process takes too long, a TimeoutExpired 1776s exception will be raised. 1776s 1776s There is an optional argument "input", allowing you to 1776s pass bytes or a string to the subprocess's stdin. If you use this argument 1776s you may not also use the Popen constructor's "stdin" argument, as 1776s it will be used internally. 1776s 1776s By default, all communication is in bytes, and therefore any "input" should 1776s be bytes, and the stdout and stderr will be bytes. If in text mode, any 1776s "input" should be a string, and stdout and stderr will be strings decoded 1776s according to locale encoding, or by "encoding" if set. Text mode is 1776s triggered by setting any of text, encoding, errors or universal_newlines. 1776s 1776s The other arguments are the same as for the Popen constructor. 1776s """ 1776s if input is not None: 1776s if kwargs.get('stdin') is not None: 1776s raise ValueError('stdin and input arguments may not both be used.') 1776s kwargs['stdin'] = PIPE 1776s 1776s if capture_output: 1776s if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None: 1776s raise ValueError('stdout and stderr arguments may not be used ' 1776s 'with capture_output.') 1776s kwargs['stdout'] = PIPE 1776s kwargs['stderr'] = PIPE 1776s 1776s with Popen(*popenargs, **kwargs) as process: 1776s try: 1776s stdout, stderr = process.communicate(input, timeout=timeout) 1776s except TimeoutExpired as exc: 1776s process.kill() 1776s if _mswindows: 1776s # Windows accumulates the output in a single blocking 1776s # read() call run on child threads, with the timeout 1776s # being done in a join() on those threads. communicate() 1776s # _after_ kill() is required to collect that and add it 1776s # to the exception. 1776s exc.stdout, exc.stderr = process.communicate() 1776s else: 1776s # POSIX _communicate already populated the output so 1776s # far into the TimeoutExpired exception. 1776s process.wait() 1776s raise 1776s except: # Including KeyboardInterrupt, communicate handled that. 1776s process.kill() 1776s # We don't call process.wait() as .__exit__ does that for us. 1776s raise 1776s retcode = process.poll() 1776s if check and retcode: 1776s > raise CalledProcessError(retcode, process.args, 1776s output=stdout, stderr=stderr) 1776s E subprocess.CalledProcessError: Command '['apport-retrace', '-v', '-o', '/var/tmp/apport_retrace_system_test_2kj80s4x/retraced.crash', '--sandbox', '/var/tmp/apport_retrace_system_test_2kj80s4x/config', '--gdb-sandbox', '--cache', '/var/tmp/apport_retrace_system_tests_btu1v_mq/cache', '--sandbox-dir', '/var/tmp/apport_retrace_system_test_2kj80s4x/apport_sandbox', '/tmp/autopkgtest.BBDYUq/autopkgtest_tmp/tests/data/jammy_usr_bin_sleep.1000.crash']' returned non-zero exit status 1. 1776s 1776s /usr/lib/python3.12/subprocess.py:571: CalledProcessError 1776s ----------------------------- Captured stdout call ----------------------------- 1776s Hit http://ftpmaster.internal/ubuntu jammy InRelease 1776s Fetched 0 B in 0s (0 B/s) 1776s Fetched 0 B in 0s (0 B/s) 1776s Extracting downloaded debs... 1776s Get:1 http://ftpmaster.internal/ubuntu jammy/main amd64 gcc-12-base amd64 12-20220319-1ubuntu1 [18.9 kB] 1776s Get:2 http://ftpmaster.internal/ubuntu jammy/main amd64 libcrypt1 amd64 1:4.4.27-1 [82.0 kB] 1776s Get:3 http://ftpmaster.internal/ubuntu jammy/main amd64 libc6 amd64 2.35-0ubuntu3 [3235 kB] 1776s Get:4 http://ftpmaster.internal/ubuntu jammy/main amd64 libgcc-s1 amd64 12-20220319-1ubuntu1 [54.2 kB] 1776s Get:5 http://ftpmaster.internal/ubuntu jammy/main amd64 libacl1 amd64 2.3.1-1 [16.2 kB] 1776s Get:6 http://ftpmaster.internal/ubuntu jammy/main amd64 libattr1 amd64 1:2.5.1-1build1 [13.3 kB] 1776s Get:7 http://ftpmaster.internal/ubuntu jammy/main amd64 libgmp10 amd64 2:6.2.1+dfsg-3ubuntu1 [250 kB] 1776s Get:8 http://ftpmaster.internal/ubuntu jammy/main amd64 libpcre2-8-0 amd64 10.39-3build1 [220 kB] 1776s Get:9 http://ftpmaster.internal/ubuntu jammy/main amd64 libselinux1 amd64 3.3-1build2 [74.6 kB] 1776s Get:10 http://ftpmaster.internal/ubuntu jammy/main amd64 coreutils amd64 8.32-4.1ubuntu1 [1438 kB] 1776s Get:11 http://ftpmaster.internal/ubuntu jammy/main amd64 libbz2-1.0 amd64 1.0.8-5build1 [34.4 kB] 1776s Get:12 http://ftpmaster.internal/ubuntu jammy/main amd64 liblzma5 amd64 5.2.5-2ubuntu1 [99.5 kB] 1776s Get:13 http://ftpmaster.internal/ubuntu jammy/main amd64 libzstd1 amd64 1.4.8+dfsg-3build1 [324 kB] 1776s Get:14 http://ftpmaster.internal/ubuntu jammy/main amd64 zlib1g amd64 1:1.2.11.dfsg-2ubuntu9 [58.2 kB] 1776s Get:15 http://ftpmaster.internal/ubuntu jammy/main amd64 tar amd64 1.34+dfsg-1build3 [295 kB] 1776s Get:16 http://ftpmaster.internal/ubuntu jammy/main amd64 dpkg amd64 1.21.1ubuntu2 [1240 kB] 1776s Get:17 http://ftpmaster.internal/ubuntu jammy/main amd64 perl-base amd64 5.34.0-3ubuntu1 [1762 kB] 1776s Get:18 http://ftpmaster.internal/ubuntu jammy/main amd64 debconf all 1.5.79ubuntu1 [126 kB] 1776s Get:19 http://ftpmaster.internal/ubuntu jammy/main amd64 sensible-utils all 0.0.17 [20.1 kB] 1776s Get:20 http://ftpmaster.internal/ubuntu jammy/main amd64 ucf all 3.0043 [56.1 kB] 1776s Get:21 http://ftpmaster.internal/ubuntu jammy/main amd64 libdebuginfod-common all 0.186-1build1 [7878 B] 1776s Get:22 http://ftpmaster.internal/ubuntu jammy/main amd64 libblkid1 amd64 2.37.2-4ubuntu3 [104 kB] 1776s Get:23 http://ftpmaster.internal/ubuntu jammy/main amd64 libcom-err2 amd64 1.46.5-2ubuntu1 [9846 B] 1776s Get:24 http://ftpmaster.internal/ubuntu jammy/main amd64 libdb5.3 amd64 5.3.28+dfsg1-0.8ubuntu3 [722 kB] 1776s Get:25 http://ftpmaster.internal/ubuntu jammy/main amd64 libkrb5support0 amd64 1.19.2-2 [32.4 kB] 1776s Get:26 http://ftpmaster.internal/ubuntu jammy/main amd64 libk5crypto3 amd64 1.19.2-2 [86.4 kB] 1776s Get:27 http://ftpmaster.internal/ubuntu jammy/main amd64 libkeyutils1 amd64 1.6.1-2ubuntu3 [10.4 kB] 1776s Get:28 http://ftpmaster.internal/ubuntu jammy/main amd64 libssl3 amd64 3.0.2-0ubuntu1 [1899 kB] 1776s Get:29 http://ftpmaster.internal/ubuntu jammy/main amd64 libkrb5-3 amd64 1.19.2-2 [356 kB] 1776s Get:30 http://ftpmaster.internal/ubuntu jammy/main amd64 libgssapi-krb5-2 amd64 1.19.2-2 [144 kB] 1776s Get:31 http://ftpmaster.internal/ubuntu jammy/main amd64 libmount1 amd64 2.37.2-4ubuntu3 [122 kB] 1776s Get:32 http://ftpmaster.internal/ubuntu jammy/main amd64 libtinfo6 amd64 6.3-2 [104 kB] 1776s Get:33 http://ftpmaster.internal/ubuntu jammy/main amd64 libncursesw6 amd64 6.3-2 [149 kB] 1776s Get:34 http://ftpmaster.internal/ubuntu jammy/main amd64 libtirpc-common all 1.3.2-2build1 [7616 B] 1776s Get:35 http://ftpmaster.internal/ubuntu jammy/main amd64 libtirpc3 amd64 1.3.2-2build1 [81.1 kB] 1776s Get:36 http://ftpmaster.internal/ubuntu jammy/main amd64 libnsl2 amd64 1.3.0-2build2 [42.3 kB] 1776s Get:37 http://ftpmaster.internal/ubuntu jammy/main amd64 libpcre3 amd64 2:8.39-13build5 [245 kB] 1776s Get:38 http://ftpmaster.internal/ubuntu jammy/main amd64 libuuid1 amd64 2.37.2-4ubuntu3 [24.2 kB] 1776s Get:39 http://ftpmaster.internal/ubuntu jammy/main amd64 libelf1 amd64 0.186-1build1 [51.0 kB] 1776s Get:40 http://ftpmaster.internal/ubuntu jammy/main amd64 libexpat1 amd64 2.4.7-1 [90.7 kB] 1776s Get:41 http://ftpmaster.internal/ubuntu jammy/main amd64 libffi8 amd64 3.4.2-4 [22.3 kB] 1776s Get:42 http://ftpmaster.internal/ubuntu jammy/main amd64 libglib2.0-0 amd64 2.72.1-1 [1460 kB] 1776s Get:43 http://ftpmaster.internal/ubuntu jammy/main amd64 libnettle8 amd64 3.7.3-1build2 [159 kB] 1776s Get:44 http://ftpmaster.internal/ubuntu jammy/main amd64 libhogweed6 amd64 3.7.3-1build2 [199 kB] 1776s Get:45 http://ftpmaster.internal/ubuntu jammy/main amd64 libunistring2 amd64 1.0-1 [554 kB] 1776s Get:46 http://ftpmaster.internal/ubuntu jammy/main amd64 libidn2-0 amd64 2.3.2-2build1 [66.4 kB] 1776s Get:47 http://ftpmaster.internal/ubuntu jammy/main amd64 libp11-kit0 amd64 0.24.0-6build1 [252 kB] 1776s Get:48 http://ftpmaster.internal/ubuntu jammy/main amd64 libtasn1-6 amd64 4.18.0-4build1 [42.9 kB] 1776s Get:49 http://ftpmaster.internal/ubuntu jammy/main amd64 libgnutls30 amd64 3.7.3-4ubuntu1 [968 kB] 1776s Get:50 http://ftpmaster.internal/ubuntu jammy/main amd64 libstdc++6 amd64 12-20220319-1ubuntu1 [699 kB] 1776s Get:51 http://ftpmaster.internal/ubuntu jammy/main amd64 libicu70 amd64 70.1-2 [10.6 MB] 1776s Get:52 http://ftpmaster.internal/ubuntu jammy/main amd64 libmpdec3 amd64 2.5.1-2build2 [86.8 kB] 1776s Get:53 http://ftpmaster.internal/ubuntu jammy/main amd64 libpython3.10-minimal amd64 3.10.4-3 [809 kB] 1776s Get:54 http://ftpmaster.internal/ubuntu jammy/main amd64 media-types all 7.0.0 [25.5 kB] 1776s Get:55 http://ftpmaster.internal/ubuntu jammy/main amd64 readline-common all 8.1.2-1 [53.5 kB] 1776s Get:56 http://ftpmaster.internal/ubuntu jammy/main amd64 libreadline8 amd64 8.1.2-1 [153 kB] 1776s Get:57 http://ftpmaster.internal/ubuntu jammy/main amd64 libsqlite3-0 amd64 3.37.2-2 [643 kB] 1776s Get:58 http://ftpmaster.internal/ubuntu jammy/main amd64 libpython3.10-stdlib amd64 3.10.4-3 [1830 kB] 1776s Get:59 http://ftpmaster.internal/ubuntu jammy/main amd64 libxxhash0 amd64 0.8.1-1 [27.3 kB] 1776s Get:60 http://ftpmaster.internal/ubuntu jammy/main amd64 libnghttp2-14 amd64 1.43.0-1build3 [76.3 kB] 1776s Get:61 http://ftpmaster.internal/ubuntu jammy/main amd64 libpsl5 amd64 0.21.0-1.2build2 [58.4 kB] 1776s Get:62 http://ftpmaster.internal/ubuntu jammy/main amd64 libdw1 amd64 0.186-1build1 [250 kB] 1776s Get:63 http://ftpmaster.internal/ubuntu jammy/main amd64 libbabeltrace1 amd64 1.5.8-2build1 [160 kB] 1776s Get:64 http://ftpmaster.internal/ubuntu jammy/main amd64 libbrotli1 amd64 1.0.9-2build6 [315 kB] 1776s Get:65 http://ftpmaster.internal/ubuntu jammy/main amd64 libsasl2-modules-db amd64 2.1.27+dfsg2-3ubuntu1 [20.8 kB] 1776s Get:66 http://ftpmaster.internal/ubuntu jammy/main amd64 libsasl2-2 amd64 2.1.27+dfsg2-3ubuntu1 [53.9 kB] 1776s Get:67 http://ftpmaster.internal/ubuntu jammy/main amd64 libldap-2.5-0 amd64 2.5.11+dfsg-1~exp1ubuntu3 [184 kB] 1776s Get:68 http://ftpmaster.internal/ubuntu jammy/main amd64 librtmp1 amd64 2.4+20151223.gitfa8646d.1-2build4 [58.2 kB] 1776s Get:69 http://ftpmaster.internal/ubuntu jammy/main amd64 libssh-4 amd64 0.9.6-2build1 [184 kB] 1776s Get:70 http://ftpmaster.internal/ubuntu jammy/main amd64 libcurl3-gnutls amd64 7.81.0-1 [282 kB] 1776s Get:71 http://ftpmaster.internal/ubuntu jammy/main amd64 libdebuginfod1 amd64 0.186-1build1 [12.7 kB] 1776s Get:72 http://ftpmaster.internal/ubuntu jammy/main amd64 libipt2 amd64 2.0.5-1 [46.4 kB] 1776s Get:73 http://ftpmaster.internal/ubuntu jammy/main amd64 libmpfr6 amd64 4.1.0-3build3 [1425 kB] 1776s Get:74 http://ftpmaster.internal/ubuntu jammy/main amd64 libpython3.10 amd64 3.10.4-3 [1951 kB] 1776s Get:75 http://ftpmaster.internal/ubuntu jammy/main amd64 libsource-highlight-common all 3.1.9-4.1build2 [64.5 kB] 1776s Get:76 http://ftpmaster.internal/ubuntu jammy/main amd64 libboost-regex1.74.0 amd64 1.74.0-14ubuntu3 [511 kB] 1776s Get:77 http://ftpmaster.internal/ubuntu jammy/main amd64 libsource-highlight4v5 amd64 3.1.9-4.1build2 [207 kB] 1776s Get:78 http://ftpmaster.internal/ubuntu jammy/main amd64 gdb amd64 12.0.90-0ubuntu1 [3930 kB] 1776s Fetched 42.1 MB in 0s (0 B/s) 1776s Extracting downloaded debs... 1776s dynamically loaded /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 needs package libc6, queueing 1776s dynamically loaded /usr/lib/x86_64-linux-gnu/libc.so.6 needs package libc6, queueing 1776s Installing extra package coreutils to get ExecutablePath 1776s ----------------------------- Captured stderr call ----------------------------- 1776s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/var/tmp/apport_retrace_system_tests_btu1v_mq/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) 1776s res = self._cache.update(fetch_progress, slist, pulse_interval) 1776s Traceback (most recent call last): 1776s File "/usr/lib/python3/dist-packages/apt/cache.py", line 277, in __getitem__ 1776s rawpkg = self._cache[key] 1776s ~~~~~~~~~~~^^^^^ 1776s KeyError: 'coreutils-dbg' 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s Traceback (most recent call last): 1776s File "/usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py", line 1193, in install_packages 1776s dbg = apt_cache[dbg_pkg] 1776s ~~~~~~~~~^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/apt/cache.py", line 279, in __getitem__ 1776s raise KeyError("The cache has no package named %r" % key) 1776s KeyError: "The cache has no package named 'coreutils-dbg'" 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s Traceback (most recent call last): 1776s File "/usr/lib/python3/dist-packages/apt/cache.py", line 277, in __getitem__ 1776s rawpkg = self._cache[key] 1776s ~~~~~~~~~~~^^^^^ 1776s KeyError: 'coreutils-dbgsym' 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s Traceback (most recent call last): 1776s File "/usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py", line 1296, in install_packages 1776s dbgsym = apt_cache[dbgsym_pkg] 1776s ~~~~~~~~~^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/apt/cache.py", line 279, in __getitem__ 1776s raise KeyError("The cache has no package named %r" % key) 1776s KeyError: "The cache has no package named 'coreutils-dbgsym'" 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s Traceback (most recent call last): 1776s File "/usr/bin/apport-retrace", line 701, in 1776s sys.exit(main(sys.argv[1:])) 1776s ^^^^^^^^^^^^^^^^^^ 1776s File "/usr/bin/apport-retrace", line 470, in main 1776s sandbox, cache, outdated_msg = apport.sandboxutils.make_sandbox( 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/apport/sandboxutils.py", line 307, in make_sandbox 1776s outdated_msg += packaging.install_packages( 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py", line 1334, in install_packages 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py", line 423, in get_lp_binary_package 1776s launchpad = Launchpad.login_anonymously( 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/launchpadlib/launchpad.py", line 487, in login_anonymously 1776s return cls( 1776s ^^^^ 1776s File "/usr/lib/python3/dist-packages/launchpadlib/launchpad.py", line 223, in __init__ 1776s super().__init__( 1776s File "/usr/lib/python3/dist-packages/lazr/restfulclient/resource.py", line 511, in __init__ 1776s self._wadl = self._browser.get_wadl_application(self._root_uri) 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py", line 502, in get_wadl_application 1776s response, content = self._request(url, media_type=wadl_type) 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py", line 441, in _request 1776s response, content = self._request_and_retry( 1776s ^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py", line 400, in _request_and_retry 1776s response, content = self._connection.request( 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1724, in request 1776s (response, content) = self._request( 1776s ^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/launchpadlib/launchpad.py", line 139, in _request 1776s response, content = super()._request(*args) 1776s ^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py", line 204, in _request 1776s return super(RestfulHttp, self)._request( 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1444, in _request 1776s (response, content) = self._conn_request(conn, request_uri, method, body, headers) 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1366, in _conn_request 1776s conn.connect() 1776s File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1156, in connect 1776s sock.connect((self.host, self.port)) 1776s File "/usr/lib/python3/dist-packages/httplib2/socks.py", line 504, in connect 1776s self.__negotiatehttp(destpair[0], destpair[1]) 1776s File "/usr/lib/python3/dist-packages/httplib2/socks.py", line 465, in __negotiatehttp 1776s raise HTTPError((statuscode, statusline[2])) 1776s httplib2.socks.HTTPError: (403, b'Forbidden') 1776s ________________ TestApportValgrind.test_sandbox_cache_options _________________ 1776s 1776s self = 1776s 1776s @unittest.skipIf(MEM_TOTAL_MiB < 2000, f"{MEM_TOTAL_MiB} MiB is not enough memory") 1776s def test_sandbox_cache_options(self) -> None: 1776s """apport-valgrind creates a user specified sandbox and cache""" 1776s sandbox = os.path.join(self.workdir, "test-sandbox") 1776s cache = os.path.join(self.workdir, "test-cache") 1776s 1776s cmd = [ 1776s "apport-valgrind", 1776s "--sandbox-dir", 1776s sandbox, 1776s "--cache", 1776s cache, 1776s "/usr/bin/true", 1776s ] 1776s > subprocess.check_call(cmd, env=self.env) 1776s 1776s tests/system/test_apport_valgrind.py:60: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s popenargs = (['apport-valgrind', '--sandbox-dir', '/tmp/tmpacx2mjgj/test-sandbox', '--cache', '/tmp/tmpacx2mjgj/test-cache', '/usr/bin/true'],) 1776s kwargs = {'env': {'ADTTMP': '/tmp/autopkgtest.BBDYUq/autopkgtest_tmp', 'ADT_ARTIFACTS': '/tmp/autopkgtest.BBDYUq/system-tests-artifacts', 'ADT_NORMAL_USER': 'ubuntu', 'ADT_TEST_TRIGGERS': 'xorg-server/2:21.1.14-2ubuntu1', ...}} 1776s retcode = 1 1776s cmd = ['apport-valgrind', '--sandbox-dir', '/tmp/tmpacx2mjgj/test-sandbox', '--cache', '/tmp/tmpacx2mjgj/test-cache', '/usr/bin/true'] 1776s 1776s def check_call(*popenargs, **kwargs): 1776s """Run command with arguments. Wait for command to complete. If 1776s the exit code was zero then return, otherwise raise 1776s CalledProcessError. The CalledProcessError object will have the 1776s return code in the returncode attribute. 1776s 1776s The arguments are the same as for the call function. Example: 1776s 1776s check_call(["ls", "-l"]) 1776s """ 1776s retcode = call(*popenargs, **kwargs) 1776s if retcode: 1776s cmd = kwargs.get("args") 1776s if cmd is None: 1776s cmd = popenargs[0] 1776s > raise CalledProcessError(retcode, cmd) 1776s E subprocess.CalledProcessError: Command '['apport-valgrind', '--sandbox-dir', '/tmp/tmpacx2mjgj/test-sandbox', '--cache', '/tmp/tmpacx2mjgj/test-cache', '/usr/bin/true']' returned non-zero exit status 1. 1776s 1776s /usr/lib/python3.12/subprocess.py:413: CalledProcessError 1776s ----------------------------- Captured stderr call ----------------------------- 1776s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmpacx2mjgj/test-cache/system/apt/var/lib/apt/lists/partial/ftpmaster.internal_ubuntu_dists_plucky-proposed_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 1776s res = self._cache.update(fetch_progress, slist, pulse_interval) 1776s Traceback (most recent call last): 1776s File "/usr/lib/python3/dist-packages/apt/cache.py", line 277, in __getitem__ 1776s rawpkg = self._cache[key] 1776s ~~~~~~~~~~~^^^^^ 1776s KeyError: 'coreutils-dbg' 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s Traceback (most recent call last): 1776s File "/usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py", line 1193, in install_packages 1776s dbg = apt_cache[dbg_pkg] 1776s ~~~~~~~~~^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/apt/cache.py", line 279, in __getitem__ 1776s raise KeyError("The cache has no package named %r" % key) 1776s KeyError: "The cache has no package named 'coreutils-dbg'" 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s Traceback (most recent call last): 1776s File "/usr/lib/python3/dist-packages/apt/cache.py", line 277, in __getitem__ 1776s rawpkg = self._cache[key] 1776s ~~~~~~~~~~~^^^^^ 1776s KeyError: 'coreutils-dbgsym' 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s Traceback (most recent call last): 1776s File "/usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py", line 1296, in install_packages 1776s dbgsym = apt_cache[dbgsym_pkg] 1776s ~~~~~~~~~^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/apt/cache.py", line 279, in __getitem__ 1776s raise KeyError("The cache has no package named %r" % key) 1776s KeyError: "The cache has no package named 'coreutils-dbgsym'" 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s Traceback (most recent call last): 1776s File "/usr/bin/apport-valgrind", line 159, in 1776s sandbox, cache, outdated_msg = apport.sandboxutils.make_sandbox( 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/apport/sandboxutils.py", line 239, in make_sandbox 1776s outdated_msg = packaging.install_packages( 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py", line 1334, in install_packages 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py", line 423, in get_lp_binary_package 1776s launchpad = Launchpad.login_anonymously( 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/launchpadlib/launchpad.py", line 487, in login_anonymously 1776s return cls( 1776s ^^^^ 1776s File "/usr/lib/python3/dist-packages/launchpadlib/launchpad.py", line 223, in __init__ 1776s super().__init__( 1776s File "/usr/lib/python3/dist-packages/lazr/restfulclient/resource.py", line 511, in __init__ 1776s self._wadl = self._browser.get_wadl_application(self._root_uri) 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py", line 502, in get_wadl_application 1776s response, content = self._request(url, media_type=wadl_type) 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py", line 441, in _request 1776s response, content = self._request_and_retry( 1776s ^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py", line 400, in _request_and_retry 1776s response, content = self._connection.request( 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1724, in request 1776s (response, content) = self._request( 1776s ^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/launchpadlib/launchpad.py", line 139, in _request 1776s response, content = super()._request(*args) 1776s ^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py", line 204, in _request 1776s return super(RestfulHttp, self)._request( 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1444, in _request 1776s (response, content) = self._conn_request(conn, request_uri, method, body, headers) 1776s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1776s File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1366, in _conn_request 1776s conn.connect() 1776s File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line 1156, in connect 1776s sock.connect((self.host, self.port)) 1776s File "/usr/lib/python3/dist-packages/httplib2/socks.py", line 504, in connect 1776s self.__negotiatehttp(destpair[0], destpair[1]) 1776s File "/usr/lib/python3/dist-packages/httplib2/socks.py", line 465, in __negotiatehttp 1776s raise HTTPError((statuscode, statusline[2])) 1776s httplib2.socks.HTTPError: (403, b'Forbidden') 1776s ___________________ TestGitHubQuery.test_api_authentication ____________________ 1776s 1776s self = 1776s http_class = 1776s req = 1776s http_conn_args = {'context': } 1776s host = 'squid.internal:3128' 1776s h = 1776s headers = {'Accept': 'application/vnd.github.v3+json', 'Connection': 'close', 'Content-Length': '48', 'Content-Type': 'application/x-www-form-urlencoded', ...} 1776s 1776s def do_open(self, http_class, req, **http_conn_args): 1776s """Return an HTTPResponse object for the request, using http_class. 1776s 1776s http_class must implement the HTTPConnection API from http.client. 1776s """ 1776s host = req.host 1776s if not host: 1776s raise URLError('no host given') 1776s 1776s # will parse host:port 1776s h = http_class(host, timeout=req.timeout, **http_conn_args) 1776s h.set_debuglevel(self._debuglevel) 1776s 1776s headers = dict(req.unredirected_hdrs) 1776s headers.update({k: v for k, v in req.headers.items() 1776s if k not in headers}) 1776s 1776s # TODO(jhylton): Should this be redesigned to handle 1776s # persistent connections? 1776s 1776s # We want to make an HTTP/1.1 request, but the addinfourl 1776s # class isn't prepared to deal with a persistent connection. 1776s # It will try to read all remaining data from the socket, 1776s # which will block while the server waits for the next request. 1776s # So make sure the connection gets closed after the (only) 1776s # request. 1776s headers["Connection"] = "close" 1776s headers = {name.title(): val for name, val in headers.items()} 1776s 1776s if req._tunnel_host: 1776s tunnel_headers = {} 1776s proxy_auth_hdr = "Proxy-Authorization" 1776s if proxy_auth_hdr in headers: 1776s tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] 1776s # Proxy-Authorization should not be sent to origin 1776s # server. 1776s del headers[proxy_auth_hdr] 1776s h.set_tunnel(req._tunnel_host, headers=tunnel_headers) 1776s 1776s try: 1776s try: 1776s > h.request(req.get_method(), req.selector, req.data, headers, 1776s encode_chunked=req.has_header('Transfer-encoding')) 1776s 1776s /usr/lib/python3.12/urllib/request.py:1344: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s /usr/lib/python3.12/http/client.py:1336: in request 1776s self._send_request(method, url, body, headers, encode_chunked) 1776s /usr/lib/python3.12/http/client.py:1382: in _send_request 1776s self.endheaders(body, encode_chunked=encode_chunked) 1776s /usr/lib/python3.12/http/client.py:1331: in endheaders 1776s self._send_output(message_body, encode_chunked=encode_chunked) 1776s /usr/lib/python3.12/http/client.py:1091: in _send_output 1776s self.send(msg) 1776s /usr/lib/python3.12/http/client.py:1035: in send 1776s self.connect() 1776s /usr/lib/python3.12/http/client.py:1470: in connect 1776s super().connect() 1776s /usr/lib/python3.12/http/client.py:1011: in connect 1776s self._tunnel() 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = 1776s 1776s def _tunnel(self): 1776s connect = b"CONNECT %s:%d %s\r\n" % ( 1776s self._wrap_ipv6(self._tunnel_host.encode("idna")), 1776s self._tunnel_port, 1776s self._http_vsn_str.encode("ascii")) 1776s headers = [connect] 1776s for header, value in self._tunnel_headers.items(): 1776s headers.append(f"{header}: {value}\r\n".encode("latin-1")) 1776s headers.append(b"\r\n") 1776s # Making a single send() call instead of one per line encourages 1776s # the host OS to use a more optimal packet size instead of 1776s # potentially emitting a series of small packets. 1776s self.send(b"".join(headers)) 1776s del headers 1776s 1776s response = self.response_class(self.sock, method=self._method) 1776s try: 1776s (version, code, message) = response._read_status() 1776s 1776s self._raw_proxy_headers = _read_headers(response.fp) 1776s 1776s if self.debuglevel > 0: 1776s for header in self._raw_proxy_headers: 1776s print('header:', header.decode()) 1776s 1776s if code != http.HTTPStatus.OK: 1776s self.close() 1776s > raise OSError(f"Tunnel connection failed: {code} {message.strip()}") 1776s E OSError: Tunnel connection failed: 403 Forbidden 1776s 1776s /usr/lib/python3.12/http/client.py:979: OSError 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s self = 1776s 1776s def test_api_authentication(self) -> None: 1776s """Test if we can contact Github authentication service.""" 1776s > with self.github as github: 1776s 1776s tests/system/test_github_query.py:23: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s /usr/lib/python3/dist-packages/apport/crashdb_impl/github.py:72: in __enter__ 1776s response = self.api_authentication(url, data) 1776s /usr/lib/python3/dist-packages/apport/crashdb_impl/github.py:61: in api_authentication 1776s return self._post(url, urllib.parse.urlencode(data)) 1776s /usr/lib/python3/dist-packages/apport/crashdb_impl/github.py:55: in _post 1776s raise err 1776s /usr/lib/python3/dist-packages/apport/crashdb_impl/github.py:47: in _post 1776s with urllib.request.urlopen(request, timeout=5.0) as response: 1776s /usr/lib/python3.12/urllib/request.py:215: in urlopen 1776s return opener.open(url, data, timeout) 1776s /usr/lib/python3.12/urllib/request.py:515: in open 1776s response = self._open(req, data) 1776s /usr/lib/python3.12/urllib/request.py:532: in _open 1776s result = self._call_chain(self.handle_open, protocol, protocol + 1776s /usr/lib/python3.12/urllib/request.py:492: in _call_chain 1776s result = func(*args) 1776s /usr/lib/python3.12/urllib/request.py:1392: in https_open 1776s return self.do_open(http.client.HTTPSConnection, req, 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = 1776s http_class = 1776s req = 1776s http_conn_args = {'context': } 1776s host = 'squid.internal:3128' 1776s h = 1776s headers = {'Accept': 'application/vnd.github.v3+json', 'Connection': 'close', 'Content-Length': '48', 'Content-Type': 'application/x-www-form-urlencoded', ...} 1776s 1776s def do_open(self, http_class, req, **http_conn_args): 1776s """Return an HTTPResponse object for the request, using http_class. 1776s 1776s http_class must implement the HTTPConnection API from http.client. 1776s """ 1776s host = req.host 1776s if not host: 1776s raise URLError('no host given') 1776s 1776s # will parse host:port 1776s h = http_class(host, timeout=req.timeout, **http_conn_args) 1776s h.set_debuglevel(self._debuglevel) 1776s 1776s headers = dict(req.unredirected_hdrs) 1776s headers.update({k: v for k, v in req.headers.items() 1776s if k not in headers}) 1776s 1776s # TODO(jhylton): Should this be redesigned to handle 1776s # persistent connections? 1776s 1776s # We want to make an HTTP/1.1 request, but the addinfourl 1776s # class isn't prepared to deal with a persistent connection. 1776s # It will try to read all remaining data from the socket, 1776s # which will block while the server waits for the next request. 1776s # So make sure the connection gets closed after the (only) 1776s # request. 1776s headers["Connection"] = "close" 1776s headers = {name.title(): val for name, val in headers.items()} 1776s 1776s if req._tunnel_host: 1776s tunnel_headers = {} 1776s proxy_auth_hdr = "Proxy-Authorization" 1776s if proxy_auth_hdr in headers: 1776s tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] 1776s # Proxy-Authorization should not be sent to origin 1776s # server. 1776s del headers[proxy_auth_hdr] 1776s h.set_tunnel(req._tunnel_host, headers=tunnel_headers) 1776s 1776s try: 1776s try: 1776s h.request(req.get_method(), req.selector, req.data, headers, 1776s encode_chunked=req.has_header('Transfer-encoding')) 1776s except OSError as err: # timeout error 1776s > raise URLError(err) 1776s E urllib.error.URLError: 1776s 1776s /usr/lib/python3.12/urllib/request.py:1347: URLError 1776s __________________ test_install_packages_versioned[one-line] ___________________ 1776s 1776s self = 1776s rootdir = '/tmp/tmpqjlm557w/root', configdir = '/tmp/tmpqjlm557w/config' 1776s release = 'Foonux 22.04', packages = [('aspell-doc', '1.1')], verbose = False 1776s cache_dir = None, permanent_rootdir = False, architecture = 'amd64' 1776s origins = None, install_dbg = True, install_deps = False 1776s 1776s def install_packages( 1776s self, 1776s rootdir: str, 1776s configdir: str | None, 1776s release: str, 1776s packages: list[tuple[str, str | None]], 1776s verbose: bool = False, 1776s cache_dir: str | None = None, 1776s permanent_rootdir: bool = False, 1776s architecture: str | None = None, 1776s origins: Iterable[str] | None = None, 1776s install_dbg: bool = True, 1776s install_deps: bool = False, 1776s ) -> str: 1776s # TODO: Split into smaller functions/methods 1776s # pylint: disable=too-many-branches,too-many-locals 1776s # pylint: disable=too-many-nested-blocks,too-many-statements 1776s """Install packages into a sandbox (for apport-retrace). 1776s 1776s In order to work without any special permissions and without touching 1776s the running system, this should only download and unpack packages into 1776s the given root directory, not install them into the system. 1776s 1776s configdir points to a directory with by-release configuration files for 1776s the packaging system; this is completely dependent on the backend 1776s implementation, the only assumption is that this looks into 1776s configdir/release/, so that you can use retracing for multiple 1776s DistroReleases. As a special case, if configdir is None, it uses the 1776s current system configuration, and "release" is ignored. 1776s 1776s release is the value of the report's 'DistroRelease' field. 1776s 1776s packages is a list of ('packagename', 'version') tuples. If the version 1776s is None, it should install the most current available version. 1776s 1776s If cache_dir is given, then the downloaded packages will be stored 1776s there, to speed up subsequent retraces. 1776s 1776s If permanent_rootdir is True, then the sandbox created from the 1776s downloaded packages will be reused, to speed up subsequent retraces. 1776s 1776s If architecture is given, the sandbox will be created with packages of 1776s the given architecture (as specified in a report's "Architecture" 1776s field). If not given it defaults to the host system's architecture. 1776s 1776s If origins is given, the sandbox will be created with apt data sources 1776s for foreign origins. 1776s 1776s If install_deps is True, then the dependencies of packages will also 1776s be installed. 1776s 1776s Return a string with outdated packages, or an empty string if all 1776s packages were installed. 1776s 1776s If something is wrong with the environment (invalid configuration, 1776s package servers down, etc.), this should raise a SystemError with a 1776s meaningful error message. 1776s """ 1776s if not architecture: 1776s architecture = self.get_system_architecture() 1776s if not configdir: 1776s apt_dir = "/etc/apt" 1776s self._current_release_codename = self.get_distro_codename() 1776s else: 1776s # support architecture specific config, fall back to global config 1776s apt_dir = os.path.join(configdir, release) 1776s if architecture != self.get_system_architecture(): 1776s arch_apt_dir = os.path.join(configdir, release, architecture) 1776s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 1776s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 1776s if os.path.exists(arch_old_sources) or ( 1776s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 1776s ): 1776s apt_dir = arch_apt_dir 1776s 1776s # set mirror for get_file_package() 1776s try: 1776s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 1776s except SystemError as error: 1776s apport.logging.warning("cannot determine mirror: %s", str(error)) 1776s 1776s # set current release code name for _distro_release_to_codename 1776s with open( 1776s os.path.join(configdir, release, "codename"), encoding="utf-8" 1776s ) as f: 1776s self._current_release_codename = f.read().strip() 1776s 1776s # create apt sandbox 1776s if cache_dir: 1776s tmp_aptroot = False 1776s aptroot = self._apt_cache_root_dir( 1776s architecture, cache_dir, release if configdir else "system" 1776s ) 1776s if not os.path.isdir(aptroot): 1776s os.makedirs(aptroot) 1776s else: 1776s tmp_aptroot = True 1776s aptroot = tempfile.mkdtemp() 1776s 1776s apt.apt_pkg.config.set("APT::Architecture", architecture) 1776s apt.apt_pkg.config.set("Acquire::Languages", "none") 1776s # directly connect to Launchpad when downloading deb files 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 1776s 1776s if not verbose: 1776s fetchProgress = apt.progress.base.AcquireProgress() 1776s else: 1776s fetchProgress = apt.progress.text.AcquireProgress() 1776s if not tmp_aptroot: 1776s apt_cache = self._sandbox_cache( 1776s aptroot, 1776s apt_dir, 1776s fetchProgress, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s architecture, 1776s ) 1776s else: 1776s self._build_apt_sandbox( 1776s aptroot, 1776s apt_dir, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s ) 1776s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 1776s try: 1776s apt_cache.update(fetchProgress) 1776s except apt.cache.FetchFailedException as error: 1776s raise SystemError(str(error)) from error 1776s apt_cache.open() 1776s 1776s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 1776s 1776s obsolete = "" 1776s 1776s src_records = apt.apt_pkg.SourceRecords() 1776s 1776s # read original package list 1776s pkg_list = os.path.join(rootdir, "packages.txt") 1776s pkg_versions = {} 1776s if os.path.exists(pkg_list): 1776s with open(pkg_list, encoding="utf-8") as f: 1776s for line in f: 1776s line = line.strip() 1776s if not line: 1776s continue 1776s (p, v) = line.split() 1776s pkg_versions[p] = v 1776s 1776s # mark packages for installation 1776s real_pkgs = set() 1776s lp_cache = {} 1776s fetcher = apt.apt_pkg.Acquire(fetchProgress) 1776s # need to keep AcquireFile references 1776s acquire_queue = [] 1776s # add any dependencies to the packages list 1776s if install_deps: 1776s deps = [] 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s for dep in cache_pkg.candidate.dependencies: 1776s # the dependency may be satisfied by a different package 1776s if dep[0].name not in apt_cache: 1776s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 1776s # the version in dep is the one from pkg's dependencies, 1776s # so use the version from the cache 1776s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 1776s # if the dependency is in the list of packages we don't 1776s # need to look up its dependencies again 1776s if dep[0].name in [pkg[0] for pkg in packages]: 1776s continue 1776s # if the package is already extracted in the sandbox 1776s # because the report needs that package we don't want to 1776s # install a newer version which may cause a CRC mismatch 1776s # with the installed dbg symbols 1776s if dep[0].name in pkg_versions: 1776s inst_version = pkg_versions[dep[0].name] 1776s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 1776s deps.append((dep[0].name, inst_version)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s if dep[0].name not in [pkg[0] for pkg in packages]: 1776s packages.append((dep[0].name, None)) 1776s packages.extend(deps) 1776s 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s 1776s # try to select matching version 1776s try: 1776s if ver: 1776s > cache_pkg.candidate = cache_pkg.versions[ver] 1776s 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1163: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = , item = '1.1' 1776s 1776s def __getitem__(self, item: int | slice | str) -> Any: 1776s # FIXME: Should not be returning Any, should have overloads; but 1776s # pyflakes complains 1776s if isinstance(item, slice): 1776s return self.__class__(self._package, item) 1776s try: 1776s # Sequence interface, item is an integer 1776s return Version(self._package, self._versions[item]) # type: ignore 1776s except TypeError: 1776s # Dictionary interface item is a string. 1776s for ver in self._versions: 1776s if ver.ver_str == item: 1776s return Version(self._package, ver) 1776s > raise KeyError("Version: %r not found." % (item)) 1776s E KeyError: "Version: '1.1' not found." 1776s 1776s /usr/lib/python3/dist-packages/apt/package.py:956: KeyError 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s configdir = '/tmp/tmpqjlm557w/config', cachedir = '/tmp/tmpqjlm557w/cache' 1776s rootdir = '/tmp/tmpqjlm557w/root', apt_style = 'one-line' 1776s 1776s @pytest.mark.skipif(not has_internet(), reason="online test") 1776s def test_install_packages_versioned( 1776s configdir: str, cachedir: str, rootdir: str, apt_style: AptStyle 1776s ) -> None: 1776s # TODO: Split into smaller functions/methods 1776s # pylint: disable=too-many-locals,too-many-statements 1776s """install_packages() with versions and with cache""" 1776s release = _setup_foonux_config(configdir, apt_style, updates=True) 1776s wanted = { 1776s "coreutils": "8.32-4.1ubuntu1", 1776s "libc6": "2.35-0ubuntu3", 1776s "libcurl4": "7.81.0-1", # should not come from -updates 1776s "tzdata": None, # should come from -updates, > 2022a 1776s } 1776s obsolete = impl.install_packages( 1776s rootdir, configdir, release, list(wanted.items()), False, cachedir 1776s ) 1776s 1776s def sandbox_ver(pkg: str) -> str: 1776s with gzip.open( 1776s os.path.join(rootdir, "usr/share/doc", pkg, "changelog.Debian.gz") 1776s ) as f: 1776s return f.readline().decode().split()[1][1:-1] 1776s 1776s assert obsolete == "" 1776s 1776s # packages get installed 1776s assert os.path.exists(os.path.join(rootdir, "usr/bin/stat")) 1776s assert_elf_arch( 1776s os.path.join(rootdir, "usr/bin/stat"), impl.get_system_architecture() 1776s ) 1776s assert os.path.exists(os.path.join(rootdir, "usr/lib/debug/.build-id")) 1776s assert os.path.exists(os.path.join(rootdir, "usr/share/zoneinfo/zone.tab")) 1776s for library in ("libc6", "libcurl4"): 1776s copyright_filename = f"usr/share/doc/{library}/copyright" 1776s assert os.path.exists(os.path.join(rootdir, copyright_filename)) 1776s 1776s # their versions are as expected 1776s assert sandbox_ver("coreutils") == wanted["coreutils"] 1776s assert sandbox_ver("libc6") == wanted["libc6"] 1776s assert sandbox_ver("libc6-dbg") == wanted["libc6"] 1776s assert sandbox_ver("libcurl4") == wanted["libcurl4"] 1776s assert sandbox_ver("tzdata") > "2022a" 1776s 1776s with open(os.path.join(rootdir, "packages.txt"), encoding="utf-8") as f: 1776s pkglist = f.read().splitlines() 1776s assert f"coreutils {wanted['coreutils']}" in pkglist 1776s assert f"coreutils-dbgsym {wanted['coreutils']}" in pkglist 1776s assert f"libc6 {wanted['libc6']}" in pkglist 1776s assert f"libc6-dbg {wanted['libc6']}" in pkglist 1776s assert f"libcurl4 {wanted['libcurl4']}" in pkglist 1776s assert f"libcurl4-dbgsym {wanted['libcurl4']}" in pkglist 1776s assert f"tzdata {sandbox_ver('tzdata')}" in pkglist 1776s assert len(pkglist) == 7 1776s 1776s # does not clobber config dir 1776s assert os.listdir(configdir) == [release] 1776s 1776s expected_content = {"sources.list.d", "trusted.gpg.d"} 1776s # old-style apt sources have the old file present 1776s if apt_style == "one-line": 1776s expected_content.add("sources.list") 1776s 1776s assert set(os.listdir(os.path.join(configdir, release))) == ( 1776s expected_content | {"armhf", "codename"} 1776s ) 1776s assert ( 1776s set(os.listdir(os.path.join(configdir, release, "armhf"))) == expected_content 1776s ) 1776s 1776s # caches packages, and their versions are as expected 1776s cache = os.listdir( 1776s os.path.join(cachedir, release, "apt", "var", "cache", "apt", "archives") 1776s ) 1776s cache_versions = {} 1776s for p in cache: 1776s try: 1776s (name, ver) = p.split("_")[:2] 1776s cache_versions[name] = ver 1776s except ValueError: 1776s pass # not a .deb, ignore 1776s assert cache_versions["coreutils"] == wanted["coreutils"] 1776s assert cache_versions["coreutils-dbgsym"] == wanted["coreutils"] 1776s assert cache_versions["libc6"] == wanted["libc6"] 1776s assert cache_versions["libc6-dbg"] == wanted["libc6"] 1776s assert cache_versions["libcurl4"] == wanted["libcurl4"] 1776s assert "tzdata" in cache_versions 1776s 1776s # installs cached packages 1776s os.unlink(os.path.join(rootdir, "usr/bin/stat")) 1776s os.unlink(os.path.join(rootdir, "packages.txt")) 1776s obsolete = impl.install_packages( 1776s rootdir, 1776s configdir, 1776s release, 1776s [("coreutils", wanted["coreutils"])], 1776s False, 1776s cachedir, 1776s ) 1776s assert obsolete == "" 1776s assert os.path.exists(os.path.join(rootdir, "usr/bin/stat")) 1776s 1776s # complains about obsolete packages 1776s > result = impl.install_packages(rootdir, configdir, release, [("aspell-doc", "1.1")]) 1776s 1776s tests/system/test_packaging_apt_dpkg.py:196: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1165: in install_packages 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:423: in get_lp_binary_package 1776s launchpad = Launchpad.login_anonymously( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:487: in login_anonymously 1776s return cls( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:223: in __init__ 1776s super().__init__( 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/resource.py:511: in __init__ 1776s self._wadl = self._browser.get_wadl_application(self._root_uri) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:502: in get_wadl_application 1776s response, content = self._request(url, media_type=wadl_type) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:441: in _request 1776s response, content = self._request_and_retry( 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:400: in _request_and_retry 1776s response, content = self._connection.request( 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1724: in request 1776s (response, content) = self._request( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:139: in _request 1776s response, content = super()._request(*args) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:204: in _request 1776s return super(RestfulHttp, self)._request( 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1444: in _request 1776s (response, content) = self._conn_request(conn, request_uri, method, body, headers) 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1366: in _conn_request 1776s conn.connect() 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1156: in connect 1776s sock.connect((self.host, self.port)) 1776s /usr/lib/python3/dist-packages/httplib2/socks.py:504: in connect 1776s self.__negotiatehttp(destpair[0], destpair[1]) 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = 1776s destaddr = 'api.launchpad.net', destport = 443 1776s 1776s def __negotiatehttp(self, destaddr, destport): 1776s """__negotiatehttp(self,destaddr,destport) 1776s Negotiates a connection through an HTTP server. 1776s """ 1776s # If we need to resolve locally, we do this now 1776s if not self.__proxy[3]: 1776s addr = socket.gethostbyname(destaddr) 1776s else: 1776s addr = destaddr 1776s headers = ["CONNECT ", addr, ":", str(destport), " HTTP/1.1\r\n"] 1776s wrote_host_header = False 1776s wrote_auth_header = False 1776s if self.__proxy[6] != None: 1776s for key, val in self.__proxy[6].iteritems(): 1776s headers += [key, ": ", val, "\r\n"] 1776s wrote_host_header = key.lower() == "host" 1776s wrote_auth_header = key.lower() == "proxy-authorization" 1776s if not wrote_host_header: 1776s headers += ["Host: ", destaddr, "\r\n"] 1776s if not wrote_auth_header: 1776s if self.__proxy[4] != None and self.__proxy[5] != None: 1776s headers += [self.__getauthheader(), "\r\n"] 1776s headers.append("\r\n") 1776s self.sendall("".join(headers).encode()) 1776s # We read the response until we get the string "\r\n\r\n" 1776s resp = self.recv(1) 1776s while resp.find("\r\n\r\n".encode()) == -1: 1776s resp = resp + self.recv(1) 1776s # We just need the first line to check if the connection 1776s # was successful 1776s statusline = resp.splitlines()[0].split(" ".encode(), 2) 1776s if statusline[0] not in ("HTTP/1.0".encode(), "HTTP/1.1".encode()): 1776s self.close() 1776s raise GeneralProxyError((1, _generalerrors[1])) 1776s try: 1776s statuscode = int(statusline[1]) 1776s except ValueError: 1776s self.close() 1776s raise GeneralProxyError((1, _generalerrors[1])) 1776s if statuscode != 200: 1776s self.close() 1776s > raise HTTPError((statuscode, statusline[2])) 1776s E httplib2.socks.HTTPError: (403, b'Forbidden') 1776s 1776s /usr/lib/python3/dist-packages/httplib2/socks.py:465: HTTPError 1776s ___________________ test_install_packages_versioned[deb822] ____________________ 1776s 1776s self = 1776s rootdir = '/tmp/tmpz24noel7/root', configdir = '/tmp/tmpz24noel7/config' 1776s release = 'Foonux 22.04', packages = [('aspell-doc', '1.1')], verbose = False 1776s cache_dir = None, permanent_rootdir = False, architecture = 'amd64' 1776s origins = None, install_dbg = True, install_deps = False 1776s 1776s def install_packages( 1776s self, 1776s rootdir: str, 1776s configdir: str | None, 1776s release: str, 1776s packages: list[tuple[str, str | None]], 1776s verbose: bool = False, 1776s cache_dir: str | None = None, 1776s permanent_rootdir: bool = False, 1776s architecture: str | None = None, 1776s origins: Iterable[str] | None = None, 1776s install_dbg: bool = True, 1776s install_deps: bool = False, 1776s ) -> str: 1776s # TODO: Split into smaller functions/methods 1776s # pylint: disable=too-many-branches,too-many-locals 1776s # pylint: disable=too-many-nested-blocks,too-many-statements 1776s """Install packages into a sandbox (for apport-retrace). 1776s 1776s In order to work without any special permissions and without touching 1776s the running system, this should only download and unpack packages into 1776s the given root directory, not install them into the system. 1776s 1776s configdir points to a directory with by-release configuration files for 1776s the packaging system; this is completely dependent on the backend 1776s implementation, the only assumption is that this looks into 1776s configdir/release/, so that you can use retracing for multiple 1776s DistroReleases. As a special case, if configdir is None, it uses the 1776s current system configuration, and "release" is ignored. 1776s 1776s release is the value of the report's 'DistroRelease' field. 1776s 1776s packages is a list of ('packagename', 'version') tuples. If the version 1776s is None, it should install the most current available version. 1776s 1776s If cache_dir is given, then the downloaded packages will be stored 1776s there, to speed up subsequent retraces. 1776s 1776s If permanent_rootdir is True, then the sandbox created from the 1776s downloaded packages will be reused, to speed up subsequent retraces. 1776s 1776s If architecture is given, the sandbox will be created with packages of 1776s the given architecture (as specified in a report's "Architecture" 1776s field). If not given it defaults to the host system's architecture. 1776s 1776s If origins is given, the sandbox will be created with apt data sources 1776s for foreign origins. 1776s 1776s If install_deps is True, then the dependencies of packages will also 1776s be installed. 1776s 1776s Return a string with outdated packages, or an empty string if all 1776s packages were installed. 1776s 1776s If something is wrong with the environment (invalid configuration, 1776s package servers down, etc.), this should raise a SystemError with a 1776s meaningful error message. 1776s """ 1776s if not architecture: 1776s architecture = self.get_system_architecture() 1776s if not configdir: 1776s apt_dir = "/etc/apt" 1776s self._current_release_codename = self.get_distro_codename() 1776s else: 1776s # support architecture specific config, fall back to global config 1776s apt_dir = os.path.join(configdir, release) 1776s if architecture != self.get_system_architecture(): 1776s arch_apt_dir = os.path.join(configdir, release, architecture) 1776s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 1776s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 1776s if os.path.exists(arch_old_sources) or ( 1776s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 1776s ): 1776s apt_dir = arch_apt_dir 1776s 1776s # set mirror for get_file_package() 1776s try: 1776s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 1776s except SystemError as error: 1776s apport.logging.warning("cannot determine mirror: %s", str(error)) 1776s 1776s # set current release code name for _distro_release_to_codename 1776s with open( 1776s os.path.join(configdir, release, "codename"), encoding="utf-8" 1776s ) as f: 1776s self._current_release_codename = f.read().strip() 1776s 1776s # create apt sandbox 1776s if cache_dir: 1776s tmp_aptroot = False 1776s aptroot = self._apt_cache_root_dir( 1776s architecture, cache_dir, release if configdir else "system" 1776s ) 1776s if not os.path.isdir(aptroot): 1776s os.makedirs(aptroot) 1776s else: 1776s tmp_aptroot = True 1776s aptroot = tempfile.mkdtemp() 1776s 1776s apt.apt_pkg.config.set("APT::Architecture", architecture) 1776s apt.apt_pkg.config.set("Acquire::Languages", "none") 1776s # directly connect to Launchpad when downloading deb files 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 1776s 1776s if not verbose: 1776s fetchProgress = apt.progress.base.AcquireProgress() 1776s else: 1776s fetchProgress = apt.progress.text.AcquireProgress() 1776s if not tmp_aptroot: 1776s apt_cache = self._sandbox_cache( 1776s aptroot, 1776s apt_dir, 1776s fetchProgress, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s architecture, 1776s ) 1776s else: 1776s self._build_apt_sandbox( 1776s aptroot, 1776s apt_dir, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s ) 1776s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 1776s try: 1776s apt_cache.update(fetchProgress) 1776s except apt.cache.FetchFailedException as error: 1776s raise SystemError(str(error)) from error 1776s apt_cache.open() 1776s 1776s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 1776s 1776s obsolete = "" 1776s 1776s src_records = apt.apt_pkg.SourceRecords() 1776s 1776s # read original package list 1776s pkg_list = os.path.join(rootdir, "packages.txt") 1776s pkg_versions = {} 1776s if os.path.exists(pkg_list): 1776s with open(pkg_list, encoding="utf-8") as f: 1776s for line in f: 1776s line = line.strip() 1776s if not line: 1776s continue 1776s (p, v) = line.split() 1776s pkg_versions[p] = v 1776s 1776s # mark packages for installation 1776s real_pkgs = set() 1776s lp_cache = {} 1776s fetcher = apt.apt_pkg.Acquire(fetchProgress) 1776s # need to keep AcquireFile references 1776s acquire_queue = [] 1776s # add any dependencies to the packages list 1776s if install_deps: 1776s deps = [] 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s for dep in cache_pkg.candidate.dependencies: 1776s # the dependency may be satisfied by a different package 1776s if dep[0].name not in apt_cache: 1776s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 1776s # the version in dep is the one from pkg's dependencies, 1776s # so use the version from the cache 1776s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 1776s # if the dependency is in the list of packages we don't 1776s # need to look up its dependencies again 1776s if dep[0].name in [pkg[0] for pkg in packages]: 1776s continue 1776s # if the package is already extracted in the sandbox 1776s # because the report needs that package we don't want to 1776s # install a newer version which may cause a CRC mismatch 1776s # with the installed dbg symbols 1776s if dep[0].name in pkg_versions: 1776s inst_version = pkg_versions[dep[0].name] 1776s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 1776s deps.append((dep[0].name, inst_version)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s if dep[0].name not in [pkg[0] for pkg in packages]: 1776s packages.append((dep[0].name, None)) 1776s packages.extend(deps) 1776s 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s 1776s # try to select matching version 1776s try: 1776s if ver: 1776s > cache_pkg.candidate = cache_pkg.versions[ver] 1776s 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1163: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = , item = '1.1' 1776s 1776s def __getitem__(self, item: int | slice | str) -> Any: 1776s # FIXME: Should not be returning Any, should have overloads; but 1776s # pyflakes complains 1776s if isinstance(item, slice): 1776s return self.__class__(self._package, item) 1776s try: 1776s # Sequence interface, item is an integer 1776s return Version(self._package, self._versions[item]) # type: ignore 1776s except TypeError: 1776s # Dictionary interface item is a string. 1776s for ver in self._versions: 1776s if ver.ver_str == item: 1776s return Version(self._package, ver) 1776s > raise KeyError("Version: %r not found." % (item)) 1776s E KeyError: "Version: '1.1' not found." 1776s 1776s /usr/lib/python3/dist-packages/apt/package.py:956: KeyError 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s configdir = '/tmp/tmpz24noel7/config', cachedir = '/tmp/tmpz24noel7/cache' 1776s rootdir = '/tmp/tmpz24noel7/root', apt_style = 'deb822' 1776s 1776s @pytest.mark.skipif(not has_internet(), reason="online test") 1776s def test_install_packages_versioned( 1776s configdir: str, cachedir: str, rootdir: str, apt_style: AptStyle 1776s ) -> None: 1776s # TODO: Split into smaller functions/methods 1776s # pylint: disable=too-many-locals,too-many-statements 1776s """install_packages() with versions and with cache""" 1776s release = _setup_foonux_config(configdir, apt_style, updates=True) 1776s wanted = { 1776s "coreutils": "8.32-4.1ubuntu1", 1776s "libc6": "2.35-0ubuntu3", 1776s "libcurl4": "7.81.0-1", # should not come from -updates 1776s "tzdata": None, # should come from -updates, > 2022a 1776s } 1776s obsolete = impl.install_packages( 1776s rootdir, configdir, release, list(wanted.items()), False, cachedir 1776s ) 1776s 1776s def sandbox_ver(pkg: str) -> str: 1776s with gzip.open( 1776s os.path.join(rootdir, "usr/share/doc", pkg, "changelog.Debian.gz") 1776s ) as f: 1776s return f.readline().decode().split()[1][1:-1] 1776s 1776s assert obsolete == "" 1776s 1776s # packages get installed 1776s assert os.path.exists(os.path.join(rootdir, "usr/bin/stat")) 1776s assert_elf_arch( 1776s os.path.join(rootdir, "usr/bin/stat"), impl.get_system_architecture() 1776s ) 1776s assert os.path.exists(os.path.join(rootdir, "usr/lib/debug/.build-id")) 1776s assert os.path.exists(os.path.join(rootdir, "usr/share/zoneinfo/zone.tab")) 1776s for library in ("libc6", "libcurl4"): 1776s copyright_filename = f"usr/share/doc/{library}/copyright" 1776s assert os.path.exists(os.path.join(rootdir, copyright_filename)) 1776s 1776s # their versions are as expected 1776s assert sandbox_ver("coreutils") == wanted["coreutils"] 1776s assert sandbox_ver("libc6") == wanted["libc6"] 1776s assert sandbox_ver("libc6-dbg") == wanted["libc6"] 1776s assert sandbox_ver("libcurl4") == wanted["libcurl4"] 1776s assert sandbox_ver("tzdata") > "2022a" 1776s 1776s with open(os.path.join(rootdir, "packages.txt"), encoding="utf-8") as f: 1776s pkglist = f.read().splitlines() 1776s assert f"coreutils {wanted['coreutils']}" in pkglist 1776s assert f"coreutils-dbgsym {wanted['coreutils']}" in pkglist 1776s assert f"libc6 {wanted['libc6']}" in pkglist 1776s assert f"libc6-dbg {wanted['libc6']}" in pkglist 1776s assert f"libcurl4 {wanted['libcurl4']}" in pkglist 1776s assert f"libcurl4-dbgsym {wanted['libcurl4']}" in pkglist 1776s assert f"tzdata {sandbox_ver('tzdata')}" in pkglist 1776s assert len(pkglist) == 7 1776s 1776s # does not clobber config dir 1776s assert os.listdir(configdir) == [release] 1776s 1776s expected_content = {"sources.list.d", "trusted.gpg.d"} 1776s # old-style apt sources have the old file present 1776s if apt_style == "one-line": 1776s expected_content.add("sources.list") 1776s 1776s assert set(os.listdir(os.path.join(configdir, release))) == ( 1776s expected_content | {"armhf", "codename"} 1776s ) 1776s assert ( 1776s set(os.listdir(os.path.join(configdir, release, "armhf"))) == expected_content 1776s ) 1776s 1776s # caches packages, and their versions are as expected 1776s cache = os.listdir( 1776s os.path.join(cachedir, release, "apt", "var", "cache", "apt", "archives") 1776s ) 1776s cache_versions = {} 1776s for p in cache: 1776s try: 1776s (name, ver) = p.split("_")[:2] 1776s cache_versions[name] = ver 1776s except ValueError: 1776s pass # not a .deb, ignore 1776s assert cache_versions["coreutils"] == wanted["coreutils"] 1776s assert cache_versions["coreutils-dbgsym"] == wanted["coreutils"] 1776s assert cache_versions["libc6"] == wanted["libc6"] 1776s assert cache_versions["libc6-dbg"] == wanted["libc6"] 1776s assert cache_versions["libcurl4"] == wanted["libcurl4"] 1776s assert "tzdata" in cache_versions 1776s 1776s # installs cached packages 1776s os.unlink(os.path.join(rootdir, "usr/bin/stat")) 1776s os.unlink(os.path.join(rootdir, "packages.txt")) 1776s obsolete = impl.install_packages( 1776s rootdir, 1776s configdir, 1776s release, 1776s [("coreutils", wanted["coreutils"])], 1776s False, 1776s cachedir, 1776s ) 1776s assert obsolete == "" 1776s assert os.path.exists(os.path.join(rootdir, "usr/bin/stat")) 1776s 1776s # complains about obsolete packages 1776s > result = impl.install_packages(rootdir, configdir, release, [("aspell-doc", "1.1")]) 1776s 1776s tests/system/test_packaging_apt_dpkg.py:196: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1165: in install_packages 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:423: in get_lp_binary_package 1776s launchpad = Launchpad.login_anonymously( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:487: in login_anonymously 1776s return cls( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:223: in __init__ 1776s super().__init__( 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/resource.py:511: in __init__ 1776s self._wadl = self._browser.get_wadl_application(self._root_uri) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:502: in get_wadl_application 1776s response, content = self._request(url, media_type=wadl_type) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:441: in _request 1776s response, content = self._request_and_retry( 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:400: in _request_and_retry 1776s response, content = self._connection.request( 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1724: in request 1776s (response, content) = self._request( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:139: in _request 1776s response, content = super()._request(*args) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:204: in _request 1776s return super(RestfulHttp, self)._request( 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1444: in _request 1776s (response, content) = self._conn_request(conn, request_uri, method, body, headers) 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1366: in _conn_request 1776s conn.connect() 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1156: in connect 1776s sock.connect((self.host, self.port)) 1776s /usr/lib/python3/dist-packages/httplib2/socks.py:504: in connect 1776s self.__negotiatehttp(destpair[0], destpair[1]) 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = 1776s destaddr = 'api.launchpad.net', destport = 443 1776s 1776s def __negotiatehttp(self, destaddr, destport): 1776s """__negotiatehttp(self,destaddr,destport) 1776s Negotiates a connection through an HTTP server. 1776s """ 1776s # If we need to resolve locally, we do this now 1776s if not self.__proxy[3]: 1776s addr = socket.gethostbyname(destaddr) 1776s else: 1776s addr = destaddr 1776s headers = ["CONNECT ", addr, ":", str(destport), " HTTP/1.1\r\n"] 1776s wrote_host_header = False 1776s wrote_auth_header = False 1776s if self.__proxy[6] != None: 1776s for key, val in self.__proxy[6].iteritems(): 1776s headers += [key, ": ", val, "\r\n"] 1776s wrote_host_header = key.lower() == "host" 1776s wrote_auth_header = key.lower() == "proxy-authorization" 1776s if not wrote_host_header: 1776s headers += ["Host: ", destaddr, "\r\n"] 1776s if not wrote_auth_header: 1776s if self.__proxy[4] != None and self.__proxy[5] != None: 1776s headers += [self.__getauthheader(), "\r\n"] 1776s headers.append("\r\n") 1776s self.sendall("".join(headers).encode()) 1776s # We read the response until we get the string "\r\n\r\n" 1776s resp = self.recv(1) 1776s while resp.find("\r\n\r\n".encode()) == -1: 1776s resp = resp + self.recv(1) 1776s # We just need the first line to check if the connection 1776s # was successful 1776s statusline = resp.splitlines()[0].split(" ".encode(), 2) 1776s if statusline[0] not in ("HTTP/1.0".encode(), "HTTP/1.1".encode()): 1776s self.close() 1776s raise GeneralProxyError((1, _generalerrors[1])) 1776s try: 1776s statuscode = int(statusline[1]) 1776s except ValueError: 1776s self.close() 1776s raise GeneralProxyError((1, _generalerrors[1])) 1776s if statuscode != 200: 1776s self.close() 1776s > raise HTTPError((statuscode, statusline[2])) 1776s E httplib2.socks.HTTPError: (403, b'Forbidden') 1776s 1776s /usr/lib/python3/dist-packages/httplib2/socks.py:465: HTTPError 1776s _________________ test_install_packages_dependencies[one-line] _________________ 1776s 1776s self = , key = 'gcc-12-base-dbg' 1776s 1776s def __getitem__(self, key: object) -> Package: 1776s """look like a dictionary (get key)""" 1776s try: 1776s key = str(key) 1776s > rawpkg = self._cache[key] 1776s E KeyError: 'gcc-12-base-dbg' 1776s 1776s /usr/lib/python3/dist-packages/apt/cache.py:277: KeyError 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s self = 1776s rootdir = '/tmp/tmpndo7n9ps/root', configdir = '/tmp/tmpndo7n9ps/config' 1776s release = 'Foonux 22.04' 1776s packages = [('coreutils', None), ('libacl1', None), ('libattr1', None), ('libc6', None), ('libgmp10', None), ('libselinux1', None), ...] 1776s verbose = False, cache_dir = None, permanent_rootdir = False 1776s architecture = 'amd64', origins = None, install_dbg = True, install_deps = True 1776s 1776s def install_packages( 1776s self, 1776s rootdir: str, 1776s configdir: str | None, 1776s release: str, 1776s packages: list[tuple[str, str | None]], 1776s verbose: bool = False, 1776s cache_dir: str | None = None, 1776s permanent_rootdir: bool = False, 1776s architecture: str | None = None, 1776s origins: Iterable[str] | None = None, 1776s install_dbg: bool = True, 1776s install_deps: bool = False, 1776s ) -> str: 1776s # TODO: Split into smaller functions/methods 1776s # pylint: disable=too-many-branches,too-many-locals 1776s # pylint: disable=too-many-nested-blocks,too-many-statements 1776s """Install packages into a sandbox (for apport-retrace). 1776s 1776s In order to work without any special permissions and without touching 1776s the running system, this should only download and unpack packages into 1776s the given root directory, not install them into the system. 1776s 1776s configdir points to a directory with by-release configuration files for 1776s the packaging system; this is completely dependent on the backend 1776s implementation, the only assumption is that this looks into 1776s configdir/release/, so that you can use retracing for multiple 1776s DistroReleases. As a special case, if configdir is None, it uses the 1776s current system configuration, and "release" is ignored. 1776s 1776s release is the value of the report's 'DistroRelease' field. 1776s 1776s packages is a list of ('packagename', 'version') tuples. If the version 1776s is None, it should install the most current available version. 1776s 1776s If cache_dir is given, then the downloaded packages will be stored 1776s there, to speed up subsequent retraces. 1776s 1776s If permanent_rootdir is True, then the sandbox created from the 1776s downloaded packages will be reused, to speed up subsequent retraces. 1776s 1776s If architecture is given, the sandbox will be created with packages of 1776s the given architecture (as specified in a report's "Architecture" 1776s field). If not given it defaults to the host system's architecture. 1776s 1776s If origins is given, the sandbox will be created with apt data sources 1776s for foreign origins. 1776s 1776s If install_deps is True, then the dependencies of packages will also 1776s be installed. 1776s 1776s Return a string with outdated packages, or an empty string if all 1776s packages were installed. 1776s 1776s If something is wrong with the environment (invalid configuration, 1776s package servers down, etc.), this should raise a SystemError with a 1776s meaningful error message. 1776s """ 1776s if not architecture: 1776s architecture = self.get_system_architecture() 1776s if not configdir: 1776s apt_dir = "/etc/apt" 1776s self._current_release_codename = self.get_distro_codename() 1776s else: 1776s # support architecture specific config, fall back to global config 1776s apt_dir = os.path.join(configdir, release) 1776s if architecture != self.get_system_architecture(): 1776s arch_apt_dir = os.path.join(configdir, release, architecture) 1776s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 1776s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 1776s if os.path.exists(arch_old_sources) or ( 1776s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 1776s ): 1776s apt_dir = arch_apt_dir 1776s 1776s # set mirror for get_file_package() 1776s try: 1776s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 1776s except SystemError as error: 1776s apport.logging.warning("cannot determine mirror: %s", str(error)) 1776s 1776s # set current release code name for _distro_release_to_codename 1776s with open( 1776s os.path.join(configdir, release, "codename"), encoding="utf-8" 1776s ) as f: 1776s self._current_release_codename = f.read().strip() 1776s 1776s # create apt sandbox 1776s if cache_dir: 1776s tmp_aptroot = False 1776s aptroot = self._apt_cache_root_dir( 1776s architecture, cache_dir, release if configdir else "system" 1776s ) 1776s if not os.path.isdir(aptroot): 1776s os.makedirs(aptroot) 1776s else: 1776s tmp_aptroot = True 1776s aptroot = tempfile.mkdtemp() 1776s 1776s apt.apt_pkg.config.set("APT::Architecture", architecture) 1776s apt.apt_pkg.config.set("Acquire::Languages", "none") 1776s # directly connect to Launchpad when downloading deb files 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 1776s 1776s if not verbose: 1776s fetchProgress = apt.progress.base.AcquireProgress() 1776s else: 1776s fetchProgress = apt.progress.text.AcquireProgress() 1776s if not tmp_aptroot: 1776s apt_cache = self._sandbox_cache( 1776s aptroot, 1776s apt_dir, 1776s fetchProgress, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s architecture, 1776s ) 1776s else: 1776s self._build_apt_sandbox( 1776s aptroot, 1776s apt_dir, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s ) 1776s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 1776s try: 1776s apt_cache.update(fetchProgress) 1776s except apt.cache.FetchFailedException as error: 1776s raise SystemError(str(error)) from error 1776s apt_cache.open() 1776s 1776s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 1776s 1776s obsolete = "" 1776s 1776s src_records = apt.apt_pkg.SourceRecords() 1776s 1776s # read original package list 1776s pkg_list = os.path.join(rootdir, "packages.txt") 1776s pkg_versions = {} 1776s if os.path.exists(pkg_list): 1776s with open(pkg_list, encoding="utf-8") as f: 1776s for line in f: 1776s line = line.strip() 1776s if not line: 1776s continue 1776s (p, v) = line.split() 1776s pkg_versions[p] = v 1776s 1776s # mark packages for installation 1776s real_pkgs = set() 1776s lp_cache = {} 1776s fetcher = apt.apt_pkg.Acquire(fetchProgress) 1776s # need to keep AcquireFile references 1776s acquire_queue = [] 1776s # add any dependencies to the packages list 1776s if install_deps: 1776s deps = [] 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s for dep in cache_pkg.candidate.dependencies: 1776s # the dependency may be satisfied by a different package 1776s if dep[0].name not in apt_cache: 1776s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 1776s # the version in dep is the one from pkg's dependencies, 1776s # so use the version from the cache 1776s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 1776s # if the dependency is in the list of packages we don't 1776s # need to look up its dependencies again 1776s if dep[0].name in [pkg[0] for pkg in packages]: 1776s continue 1776s # if the package is already extracted in the sandbox 1776s # because the report needs that package we don't want to 1776s # install a newer version which may cause a CRC mismatch 1776s # with the installed dbg symbols 1776s if dep[0].name in pkg_versions: 1776s inst_version = pkg_versions[dep[0].name] 1776s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 1776s deps.append((dep[0].name, inst_version)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s if dep[0].name not in [pkg[0] for pkg in packages]: 1776s packages.append((dep[0].name, None)) 1776s packages.extend(deps) 1776s 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s 1776s # try to select matching version 1776s try: 1776s if ver: 1776s cache_pkg.candidate = cache_pkg.versions[ver] 1776s except KeyError: 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s release, pkg, ver, architecture 1776s ) 1776s if lp_url: 1776s acquire_queue.append( 1776s apt.apt_pkg.AcquireFile( 1776s fetcher, lp_url, hash=f"sha1:{sha1sum}", destdir=archivedir 1776s ) 1776s ) 1776s lp_cache[pkg] = ver 1776s else: 1776s obsolete += ( 1776s f"{pkg} version {ver} required," 1776s f" but {cache_pkg.candidate.version} is available\n" 1776s ) 1776s ver = cache_pkg.candidate.version 1776s 1776s candidate = cache_pkg.candidate 1776s real_pkgs.add(pkg) 1776s 1776s if permanent_rootdir: 1776s self._remove_conflicting_packages( 1776s pkg, aptroot, apt_cache, candidate, archivedir, pkg_versions 1776s ) 1776s 1776s if candidate.architecture != "all" and install_dbg: 1776s try: 1776s dbg_pkg = f"{pkg}-dbg" 1776s > dbg = apt_cache[dbg_pkg] 1776s 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1193: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = , key = 'gcc-12-base-dbg' 1776s 1776s def __getitem__(self, key: object) -> Package: 1776s """look like a dictionary (get key)""" 1776s try: 1776s key = str(key) 1776s rawpkg = self._cache[key] 1776s except KeyError: 1776s > raise KeyError("The cache has no package named %r" % key) 1776s E KeyError: "The cache has no package named 'gcc-12-base-dbg'" 1776s 1776s /usr/lib/python3/dist-packages/apt/cache.py:279: KeyError 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s self = , key = 'gcc-12-base-dbgsym' 1776s 1776s def __getitem__(self, key: object) -> Package: 1776s """look like a dictionary (get key)""" 1776s try: 1776s key = str(key) 1776s > rawpkg = self._cache[key] 1776s E KeyError: 'gcc-12-base-dbgsym' 1776s 1776s /usr/lib/python3/dist-packages/apt/cache.py:277: KeyError 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s self = 1776s rootdir = '/tmp/tmpndo7n9ps/root', configdir = '/tmp/tmpndo7n9ps/config' 1776s release = 'Foonux 22.04' 1776s packages = [('coreutils', None), ('libacl1', None), ('libattr1', None), ('libc6', None), ('libgmp10', None), ('libselinux1', None), ...] 1776s verbose = False, cache_dir = None, permanent_rootdir = False 1776s architecture = 'amd64', origins = None, install_dbg = True, install_deps = True 1776s 1776s def install_packages( 1776s self, 1776s rootdir: str, 1776s configdir: str | None, 1776s release: str, 1776s packages: list[tuple[str, str | None]], 1776s verbose: bool = False, 1776s cache_dir: str | None = None, 1776s permanent_rootdir: bool = False, 1776s architecture: str | None = None, 1776s origins: Iterable[str] | None = None, 1776s install_dbg: bool = True, 1776s install_deps: bool = False, 1776s ) -> str: 1776s # TODO: Split into smaller functions/methods 1776s # pylint: disable=too-many-branches,too-many-locals 1776s # pylint: disable=too-many-nested-blocks,too-many-statements 1776s """Install packages into a sandbox (for apport-retrace). 1776s 1776s In order to work without any special permissions and without touching 1776s the running system, this should only download and unpack packages into 1776s the given root directory, not install them into the system. 1776s 1776s configdir points to a directory with by-release configuration files for 1776s the packaging system; this is completely dependent on the backend 1776s implementation, the only assumption is that this looks into 1776s configdir/release/, so that you can use retracing for multiple 1776s DistroReleases. As a special case, if configdir is None, it uses the 1776s current system configuration, and "release" is ignored. 1776s 1776s release is the value of the report's 'DistroRelease' field. 1776s 1776s packages is a list of ('packagename', 'version') tuples. If the version 1776s is None, it should install the most current available version. 1776s 1776s If cache_dir is given, then the downloaded packages will be stored 1776s there, to speed up subsequent retraces. 1776s 1776s If permanent_rootdir is True, then the sandbox created from the 1776s downloaded packages will be reused, to speed up subsequent retraces. 1776s 1776s If architecture is given, the sandbox will be created with packages of 1776s the given architecture (as specified in a report's "Architecture" 1776s field). If not given it defaults to the host system's architecture. 1776s 1776s If origins is given, the sandbox will be created with apt data sources 1776s for foreign origins. 1776s 1776s If install_deps is True, then the dependencies of packages will also 1776s be installed. 1776s 1776s Return a string with outdated packages, or an empty string if all 1776s packages were installed. 1776s 1776s If something is wrong with the environment (invalid configuration, 1776s package servers down, etc.), this should raise a SystemError with a 1776s meaningful error message. 1776s """ 1776s if not architecture: 1776s architecture = self.get_system_architecture() 1776s if not configdir: 1776s apt_dir = "/etc/apt" 1776s self._current_release_codename = self.get_distro_codename() 1776s else: 1776s # support architecture specific config, fall back to global config 1776s apt_dir = os.path.join(configdir, release) 1776s if architecture != self.get_system_architecture(): 1776s arch_apt_dir = os.path.join(configdir, release, architecture) 1776s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 1776s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 1776s if os.path.exists(arch_old_sources) or ( 1776s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 1776s ): 1776s apt_dir = arch_apt_dir 1776s 1776s # set mirror for get_file_package() 1776s try: 1776s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 1776s except SystemError as error: 1776s apport.logging.warning("cannot determine mirror: %s", str(error)) 1776s 1776s # set current release code name for _distro_release_to_codename 1776s with open( 1776s os.path.join(configdir, release, "codename"), encoding="utf-8" 1776s ) as f: 1776s self._current_release_codename = f.read().strip() 1776s 1776s # create apt sandbox 1776s if cache_dir: 1776s tmp_aptroot = False 1776s aptroot = self._apt_cache_root_dir( 1776s architecture, cache_dir, release if configdir else "system" 1776s ) 1776s if not os.path.isdir(aptroot): 1776s os.makedirs(aptroot) 1776s else: 1776s tmp_aptroot = True 1776s aptroot = tempfile.mkdtemp() 1776s 1776s apt.apt_pkg.config.set("APT::Architecture", architecture) 1776s apt.apt_pkg.config.set("Acquire::Languages", "none") 1776s # directly connect to Launchpad when downloading deb files 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 1776s 1776s if not verbose: 1776s fetchProgress = apt.progress.base.AcquireProgress() 1776s else: 1776s fetchProgress = apt.progress.text.AcquireProgress() 1776s if not tmp_aptroot: 1776s apt_cache = self._sandbox_cache( 1776s aptroot, 1776s apt_dir, 1776s fetchProgress, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s architecture, 1776s ) 1776s else: 1776s self._build_apt_sandbox( 1776s aptroot, 1776s apt_dir, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s ) 1776s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 1776s try: 1776s apt_cache.update(fetchProgress) 1776s except apt.cache.FetchFailedException as error: 1776s raise SystemError(str(error)) from error 1776s apt_cache.open() 1776s 1776s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 1776s 1776s obsolete = "" 1776s 1776s src_records = apt.apt_pkg.SourceRecords() 1776s 1776s # read original package list 1776s pkg_list = os.path.join(rootdir, "packages.txt") 1776s pkg_versions = {} 1776s if os.path.exists(pkg_list): 1776s with open(pkg_list, encoding="utf-8") as f: 1776s for line in f: 1776s line = line.strip() 1776s if not line: 1776s continue 1776s (p, v) = line.split() 1776s pkg_versions[p] = v 1776s 1776s # mark packages for installation 1776s real_pkgs = set() 1776s lp_cache = {} 1776s fetcher = apt.apt_pkg.Acquire(fetchProgress) 1776s # need to keep AcquireFile references 1776s acquire_queue = [] 1776s # add any dependencies to the packages list 1776s if install_deps: 1776s deps = [] 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s for dep in cache_pkg.candidate.dependencies: 1776s # the dependency may be satisfied by a different package 1776s if dep[0].name not in apt_cache: 1776s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 1776s # the version in dep is the one from pkg's dependencies, 1776s # so use the version from the cache 1776s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 1776s # if the dependency is in the list of packages we don't 1776s # need to look up its dependencies again 1776s if dep[0].name in [pkg[0] for pkg in packages]: 1776s continue 1776s # if the package is already extracted in the sandbox 1776s # because the report needs that package we don't want to 1776s # install a newer version which may cause a CRC mismatch 1776s # with the installed dbg symbols 1776s if dep[0].name in pkg_versions: 1776s inst_version = pkg_versions[dep[0].name] 1776s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 1776s deps.append((dep[0].name, inst_version)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s if dep[0].name not in [pkg[0] for pkg in packages]: 1776s packages.append((dep[0].name, None)) 1776s packages.extend(deps) 1776s 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s 1776s # try to select matching version 1776s try: 1776s if ver: 1776s cache_pkg.candidate = cache_pkg.versions[ver] 1776s except KeyError: 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s release, pkg, ver, architecture 1776s ) 1776s if lp_url: 1776s acquire_queue.append( 1776s apt.apt_pkg.AcquireFile( 1776s fetcher, lp_url, hash=f"sha1:{sha1sum}", destdir=archivedir 1776s ) 1776s ) 1776s lp_cache[pkg] = ver 1776s else: 1776s obsolete += ( 1776s f"{pkg} version {ver} required," 1776s f" but {cache_pkg.candidate.version} is available\n" 1776s ) 1776s ver = cache_pkg.candidate.version 1776s 1776s candidate = cache_pkg.candidate 1776s real_pkgs.add(pkg) 1776s 1776s if permanent_rootdir: 1776s self._remove_conflicting_packages( 1776s pkg, aptroot, apt_cache, candidate, archivedir, pkg_versions 1776s ) 1776s 1776s if candidate.architecture != "all" and install_dbg: 1776s try: 1776s dbg_pkg = f"{pkg}-dbg" 1776s dbg = apt_cache[dbg_pkg] 1776s pkg_found = False 1776s # try to get the same version as pkg 1776s if ver: 1776s try: 1776s dbg.candidate = dbg.versions[ver] 1776s pkg_found = True 1776s except KeyError: 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s release, dbg_pkg, ver, architecture 1776s ) 1776s if lp_url: 1776s acquire_queue.append( 1776s apt.apt_pkg.AcquireFile( 1776s fetcher, 1776s lp_url, 1776s hash=f"sha1:{sha1sum}", 1776s destdir=archivedir, 1776s ) 1776s ) 1776s lp_cache[dbg_pkg] = ver 1776s pkg_found = True 1776s # if it can't be found in Launchpad failover to a 1776s # code path that'll use -dbgsym packages 1776s else: 1776s raise 1776s if not pkg_found: 1776s try: 1776s dbg.candidate = dbg.versions[candidate.version] 1776s except KeyError: 1776s obsolete += ( 1776s f"outdated -dbg package for {pkg}:" 1776s f" package version {ver}" 1776s f" -dbg version {dbg.candidate.version}\n" 1776s ) 1776s real_pkgs.add(dbg_pkg) 1776s except KeyError: 1776s # install all -dbg from the source package; lookup() just 1776s # works from the current list pointer, we always need to 1776s # start from the beginning 1776s src_records.restart() 1776s if src_records.lookup(candidate.source_name): 1776s # ignore transitional packages 1776s # False positive, see 1776s # https://github.com/PyCQA/pylint/issues/7122 1776s # pylint: disable=not-an-iterable 1776s dbgs = [ 1776s p 1776s for p in src_records.binaries 1776s if p.endswith("-dbg") 1776s and p in apt_cache 1776s and "transitional" not in apt_cache[p].candidate.description 1776s ] 1776s # if a specific version of a package was requested 1776s # only install dbg pkgs whose version matches 1776s if ver: 1776s for dbg in dbgs: 1776s if apt_cache[dbg].candidate.version != ver: 1776s dbgs.remove(dbg) 1776s else: 1776s dbgs = [] 1776s if dbgs: 1776s for p in dbgs: 1776s # if the package has already been added to 1776s # real_pkgs don't search for it again 1776s if p in real_pkgs: 1776s continue 1776s pkg_found = False 1776s # prefer the version requested 1776s if ver: 1776s try: 1776s apt_cache[p].candidate = apt_cache[p].versions[ver] 1776s pkg_found = True 1776s except KeyError: 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s release, p, ver, architecture 1776s ) 1776s if lp_url: 1776s acquire_queue.append( 1776s apt.apt_pkg.AcquireFile( 1776s fetcher, 1776s lp_url, 1776s hash=f"sha1:{sha1sum}", 1776s destdir=archivedir, 1776s ) 1776s ) 1776s lp_cache[p] = ver 1776s pkg_found = True 1776s if not pkg_found: 1776s try: 1776s apt_cache[p].candidate = apt_cache[p].versions[ 1776s candidate.version 1776s ] 1776s except KeyError: 1776s # we don't really expect that, but it's 1776s # possible that other binaries have a 1776s # different version 1776s pass 1776s real_pkgs.add(p) 1776s else: 1776s pkg_found = False 1776s dbgsym_pkg = f"{pkg}-dbgsym" 1776s try: 1776s > dbgsym = apt_cache[dbgsym_pkg] 1776s 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1296: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = , key = 'gcc-12-base-dbgsym' 1776s 1776s def __getitem__(self, key: object) -> Package: 1776s """look like a dictionary (get key)""" 1776s try: 1776s key = str(key) 1776s rawpkg = self._cache[key] 1776s except KeyError: 1776s > raise KeyError("The cache has no package named %r" % key) 1776s E KeyError: "The cache has no package named 'gcc-12-base-dbgsym'" 1776s 1776s /usr/lib/python3/dist-packages/apt/cache.py:279: KeyError 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s configdir = '/tmp/tmpndo7n9ps/config', rootdir = '/tmp/tmpndo7n9ps/root' 1776s apt_style = 'one-line' 1776s 1776s @pytest.mark.skipif(not has_internet(), reason="online test") 1776s def test_install_packages_dependencies( 1776s configdir: str, rootdir: str, apt_style: AptStyle 1776s ) -> None: 1776s """Test install packages's dependencies.""" 1776s release = _setup_foonux_config(configdir, apt_style) 1776s # coreutils should always depend on libc6 1776s > result = impl.install_packages( 1776s rootdir, 1776s configdir, 1776s release, 1776s [("coreutils", None)], 1776s False, 1776s None, 1776s install_deps=True, 1776s ) 1776s 1776s tests/system/test_packaging_apt_dpkg.py:292: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1334: in install_packages 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:423: in get_lp_binary_package 1776s launchpad = Launchpad.login_anonymously( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:487: in login_anonymously 1776s return cls( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:223: in __init__ 1776s super().__init__( 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/resource.py:511: in __init__ 1776s self._wadl = self._browser.get_wadl_application(self._root_uri) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:502: in get_wadl_application 1776s response, content = self._request(url, media_type=wadl_type) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:441: in _request 1776s response, content = self._request_and_retry( 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:400: in _request_and_retry 1776s response, content = self._connection.request( 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1724: in request 1776s (response, content) = self._request( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:139: in _request 1776s response, content = super()._request(*args) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:204: in _request 1776s return super(RestfulHttp, self)._request( 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1444: in _request 1776s (response, content) = self._conn_request(conn, request_uri, method, body, headers) 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1366: in _conn_request 1776s conn.connect() 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1156: in connect 1776s sock.connect((self.host, self.port)) 1776s /usr/lib/python3/dist-packages/httplib2/socks.py:504: in connect 1776s self.__negotiatehttp(destpair[0], destpair[1]) 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = 1776s destaddr = 'api.launchpad.net', destport = 443 1776s 1776s def __negotiatehttp(self, destaddr, destport): 1776s """__negotiatehttp(self,destaddr,destport) 1776s Negotiates a connection through an HTTP server. 1776s """ 1776s # If we need to resolve locally, we do this now 1776s if not self.__proxy[3]: 1776s addr = socket.gethostbyname(destaddr) 1776s else: 1776s addr = destaddr 1776s headers = ["CONNECT ", addr, ":", str(destport), " HTTP/1.1\r\n"] 1776s wrote_host_header = False 1776s wrote_auth_header = False 1776s if self.__proxy[6] != None: 1776s for key, val in self.__proxy[6].iteritems(): 1776s headers += [key, ": ", val, "\r\n"] 1776s wrote_host_header = key.lower() == "host" 1776s wrote_auth_header = key.lower() == "proxy-authorization" 1776s if not wrote_host_header: 1776s headers += ["Host: ", destaddr, "\r\n"] 1776s if not wrote_auth_header: 1776s if self.__proxy[4] != None and self.__proxy[5] != None: 1776s headers += [self.__getauthheader(), "\r\n"] 1776s headers.append("\r\n") 1776s self.sendall("".join(headers).encode()) 1776s # We read the response until we get the string "\r\n\r\n" 1776s resp = self.recv(1) 1776s while resp.find("\r\n\r\n".encode()) == -1: 1776s resp = resp + self.recv(1) 1776s # We just need the first line to check if the connection 1776s # was successful 1776s statusline = resp.splitlines()[0].split(" ".encode(), 2) 1776s if statusline[0] not in ("HTTP/1.0".encode(), "HTTP/1.1".encode()): 1776s self.close() 1776s raise GeneralProxyError((1, _generalerrors[1])) 1776s try: 1776s statuscode = int(statusline[1]) 1776s except ValueError: 1776s self.close() 1776s raise GeneralProxyError((1, _generalerrors[1])) 1776s if statuscode != 200: 1776s self.close() 1776s > raise HTTPError((statuscode, statusline[2])) 1776s E httplib2.socks.HTTPError: (403, b'Forbidden') 1776s 1776s /usr/lib/python3/dist-packages/httplib2/socks.py:465: HTTPError 1776s __________________ test_install_packages_dependencies[deb822] __________________ 1776s 1776s self = , key = 'gcc-12-base-dbg' 1776s 1776s def __getitem__(self, key: object) -> Package: 1776s """look like a dictionary (get key)""" 1776s try: 1776s key = str(key) 1776s > rawpkg = self._cache[key] 1776s E KeyError: 'gcc-12-base-dbg' 1776s 1776s /usr/lib/python3/dist-packages/apt/cache.py:277: KeyError 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s self = 1776s rootdir = '/tmp/tmpjqed7xuj/root', configdir = '/tmp/tmpjqed7xuj/config' 1776s release = 'Foonux 22.04' 1776s packages = [('coreutils', None), ('libacl1', None), ('libattr1', None), ('libc6', None), ('libgmp10', None), ('libselinux1', None), ...] 1776s verbose = False, cache_dir = None, permanent_rootdir = False 1776s architecture = 'amd64', origins = None, install_dbg = True, install_deps = True 1776s 1776s def install_packages( 1776s self, 1776s rootdir: str, 1776s configdir: str | None, 1776s release: str, 1776s packages: list[tuple[str, str | None]], 1776s verbose: bool = False, 1776s cache_dir: str | None = None, 1776s permanent_rootdir: bool = False, 1776s architecture: str | None = None, 1776s origins: Iterable[str] | None = None, 1776s install_dbg: bool = True, 1776s install_deps: bool = False, 1776s ) -> str: 1776s # TODO: Split into smaller functions/methods 1776s # pylint: disable=too-many-branches,too-many-locals 1776s # pylint: disable=too-many-nested-blocks,too-many-statements 1776s """Install packages into a sandbox (for apport-retrace). 1776s 1776s In order to work without any special permissions and without touching 1776s the running system, this should only download and unpack packages into 1776s the given root directory, not install them into the system. 1776s 1776s configdir points to a directory with by-release configuration files for 1776s the packaging system; this is completely dependent on the backend 1776s implementation, the only assumption is that this looks into 1776s configdir/release/, so that you can use retracing for multiple 1776s DistroReleases. As a special case, if configdir is None, it uses the 1776s current system configuration, and "release" is ignored. 1776s 1776s release is the value of the report's 'DistroRelease' field. 1776s 1776s packages is a list of ('packagename', 'version') tuples. If the version 1776s is None, it should install the most current available version. 1776s 1776s If cache_dir is given, then the downloaded packages will be stored 1776s there, to speed up subsequent retraces. 1776s 1776s If permanent_rootdir is True, then the sandbox created from the 1776s downloaded packages will be reused, to speed up subsequent retraces. 1776s 1776s If architecture is given, the sandbox will be created with packages of 1776s the given architecture (as specified in a report's "Architecture" 1776s field). If not given it defaults to the host system's architecture. 1776s 1776s If origins is given, the sandbox will be created with apt data sources 1776s for foreign origins. 1776s 1776s If install_deps is True, then the dependencies of packages will also 1776s be installed. 1776s 1776s Return a string with outdated packages, or an empty string if all 1776s packages were installed. 1776s 1776s If something is wrong with the environment (invalid configuration, 1776s package servers down, etc.), this should raise a SystemError with a 1776s meaningful error message. 1776s """ 1776s if not architecture: 1776s architecture = self.get_system_architecture() 1776s if not configdir: 1776s apt_dir = "/etc/apt" 1776s self._current_release_codename = self.get_distro_codename() 1776s else: 1776s # support architecture specific config, fall back to global config 1776s apt_dir = os.path.join(configdir, release) 1776s if architecture != self.get_system_architecture(): 1776s arch_apt_dir = os.path.join(configdir, release, architecture) 1776s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 1776s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 1776s if os.path.exists(arch_old_sources) or ( 1776s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 1776s ): 1776s apt_dir = arch_apt_dir 1776s 1776s # set mirror for get_file_package() 1776s try: 1776s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 1776s except SystemError as error: 1776s apport.logging.warning("cannot determine mirror: %s", str(error)) 1776s 1776s # set current release code name for _distro_release_to_codename 1776s with open( 1776s os.path.join(configdir, release, "codename"), encoding="utf-8" 1776s ) as f: 1776s self._current_release_codename = f.read().strip() 1776s 1776s # create apt sandbox 1776s if cache_dir: 1776s tmp_aptroot = False 1776s aptroot = self._apt_cache_root_dir( 1776s architecture, cache_dir, release if configdir else "system" 1776s ) 1776s if not os.path.isdir(aptroot): 1776s os.makedirs(aptroot) 1776s else: 1776s tmp_aptroot = True 1776s aptroot = tempfile.mkdtemp() 1776s 1776s apt.apt_pkg.config.set("APT::Architecture", architecture) 1776s apt.apt_pkg.config.set("Acquire::Languages", "none") 1776s # directly connect to Launchpad when downloading deb files 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 1776s 1776s if not verbose: 1776s fetchProgress = apt.progress.base.AcquireProgress() 1776s else: 1776s fetchProgress = apt.progress.text.AcquireProgress() 1776s if not tmp_aptroot: 1776s apt_cache = self._sandbox_cache( 1776s aptroot, 1776s apt_dir, 1776s fetchProgress, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s architecture, 1776s ) 1776s else: 1776s self._build_apt_sandbox( 1776s aptroot, 1776s apt_dir, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s ) 1776s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 1776s try: 1776s apt_cache.update(fetchProgress) 1776s except apt.cache.FetchFailedException as error: 1776s raise SystemError(str(error)) from error 1776s apt_cache.open() 1776s 1776s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 1776s 1776s obsolete = "" 1776s 1776s src_records = apt.apt_pkg.SourceRecords() 1776s 1776s # read original package list 1776s pkg_list = os.path.join(rootdir, "packages.txt") 1776s pkg_versions = {} 1776s if os.path.exists(pkg_list): 1776s with open(pkg_list, encoding="utf-8") as f: 1776s for line in f: 1776s line = line.strip() 1776s if not line: 1776s continue 1776s (p, v) = line.split() 1776s pkg_versions[p] = v 1776s 1776s # mark packages for installation 1776s real_pkgs = set() 1776s lp_cache = {} 1776s fetcher = apt.apt_pkg.Acquire(fetchProgress) 1776s # need to keep AcquireFile references 1776s acquire_queue = [] 1776s # add any dependencies to the packages list 1776s if install_deps: 1776s deps = [] 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s for dep in cache_pkg.candidate.dependencies: 1776s # the dependency may be satisfied by a different package 1776s if dep[0].name not in apt_cache: 1776s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 1776s # the version in dep is the one from pkg's dependencies, 1776s # so use the version from the cache 1776s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 1776s # if the dependency is in the list of packages we don't 1776s # need to look up its dependencies again 1776s if dep[0].name in [pkg[0] for pkg in packages]: 1776s continue 1776s # if the package is already extracted in the sandbox 1776s # because the report needs that package we don't want to 1776s # install a newer version which may cause a CRC mismatch 1776s # with the installed dbg symbols 1776s if dep[0].name in pkg_versions: 1776s inst_version = pkg_versions[dep[0].name] 1776s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 1776s deps.append((dep[0].name, inst_version)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s if dep[0].name not in [pkg[0] for pkg in packages]: 1776s packages.append((dep[0].name, None)) 1776s packages.extend(deps) 1776s 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s 1776s # try to select matching version 1776s try: 1776s if ver: 1776s cache_pkg.candidate = cache_pkg.versions[ver] 1776s except KeyError: 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s release, pkg, ver, architecture 1776s ) 1776s if lp_url: 1776s acquire_queue.append( 1776s apt.apt_pkg.AcquireFile( 1776s fetcher, lp_url, hash=f"sha1:{sha1sum}", destdir=archivedir 1776s ) 1776s ) 1776s lp_cache[pkg] = ver 1776s else: 1776s obsolete += ( 1776s f"{pkg} version {ver} required," 1776s f" but {cache_pkg.candidate.version} is available\n" 1776s ) 1776s ver = cache_pkg.candidate.version 1776s 1776s candidate = cache_pkg.candidate 1776s real_pkgs.add(pkg) 1776s 1776s if permanent_rootdir: 1776s self._remove_conflicting_packages( 1776s pkg, aptroot, apt_cache, candidate, archivedir, pkg_versions 1776s ) 1776s 1776s if candidate.architecture != "all" and install_dbg: 1776s try: 1776s dbg_pkg = f"{pkg}-dbg" 1776s > dbg = apt_cache[dbg_pkg] 1776s 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1193: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = , key = 'gcc-12-base-dbg' 1776s 1776s def __getitem__(self, key: object) -> Package: 1776s """look like a dictionary (get key)""" 1776s try: 1776s key = str(key) 1776s rawpkg = self._cache[key] 1776s except KeyError: 1776s > raise KeyError("The cache has no package named %r" % key) 1776s E KeyError: "The cache has no package named 'gcc-12-base-dbg'" 1776s 1776s /usr/lib/python3/dist-packages/apt/cache.py:279: KeyError 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s self = , key = 'gcc-12-base-dbgsym' 1776s 1776s def __getitem__(self, key: object) -> Package: 1776s """look like a dictionary (get key)""" 1776s try: 1776s key = str(key) 1776s > rawpkg = self._cache[key] 1776s E KeyError: 'gcc-12-base-dbgsym' 1776s 1776s /usr/lib/python3/dist-packages/apt/cache.py:277: KeyError 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s self = 1776s rootdir = '/tmp/tmpjqed7xuj/root', configdir = '/tmp/tmpjqed7xuj/config' 1776s release = 'Foonux 22.04' 1776s packages = [('coreutils', None), ('libacl1', None), ('libattr1', None), ('libc6', None), ('libgmp10', None), ('libselinux1', None), ...] 1776s verbose = False, cache_dir = None, permanent_rootdir = False 1776s architecture = 'amd64', origins = None, install_dbg = True, install_deps = True 1776s 1776s def install_packages( 1776s self, 1776s rootdir: str, 1776s configdir: str | None, 1776s release: str, 1776s packages: list[tuple[str, str | None]], 1776s verbose: bool = False, 1776s cache_dir: str | None = None, 1776s permanent_rootdir: bool = False, 1776s architecture: str | None = None, 1776s origins: Iterable[str] | None = None, 1776s install_dbg: bool = True, 1776s install_deps: bool = False, 1776s ) -> str: 1776s # TODO: Split into smaller functions/methods 1776s # pylint: disable=too-many-branches,too-many-locals 1776s # pylint: disable=too-many-nested-blocks,too-many-statements 1776s """Install packages into a sandbox (for apport-retrace). 1776s 1776s In order to work without any special permissions and without touching 1776s the running system, this should only download and unpack packages into 1776s the given root directory, not install them into the system. 1776s 1776s configdir points to a directory with by-release configuration files for 1776s the packaging system; this is completely dependent on the backend 1776s implementation, the only assumption is that this looks into 1776s configdir/release/, so that you can use retracing for multiple 1776s DistroReleases. As a special case, if configdir is None, it uses the 1776s current system configuration, and "release" is ignored. 1776s 1776s release is the value of the report's 'DistroRelease' field. 1776s 1776s packages is a list of ('packagename', 'version') tuples. If the version 1776s is None, it should install the most current available version. 1776s 1776s If cache_dir is given, then the downloaded packages will be stored 1776s there, to speed up subsequent retraces. 1776s 1776s If permanent_rootdir is True, then the sandbox created from the 1776s downloaded packages will be reused, to speed up subsequent retraces. 1776s 1776s If architecture is given, the sandbox will be created with packages of 1776s the given architecture (as specified in a report's "Architecture" 1776s field). If not given it defaults to the host system's architecture. 1776s 1776s If origins is given, the sandbox will be created with apt data sources 1776s for foreign origins. 1776s 1776s If install_deps is True, then the dependencies of packages will also 1776s be installed. 1776s 1776s Return a string with outdated packages, or an empty string if all 1776s packages were installed. 1776s 1776s If something is wrong with the environment (invalid configuration, 1776s package servers down, etc.), this should raise a SystemError with a 1776s meaningful error message. 1776s """ 1776s if not architecture: 1776s architecture = self.get_system_architecture() 1776s if not configdir: 1776s apt_dir = "/etc/apt" 1776s self._current_release_codename = self.get_distro_codename() 1776s else: 1776s # support architecture specific config, fall back to global config 1776s apt_dir = os.path.join(configdir, release) 1776s if architecture != self.get_system_architecture(): 1776s arch_apt_dir = os.path.join(configdir, release, architecture) 1776s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 1776s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 1776s if os.path.exists(arch_old_sources) or ( 1776s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 1776s ): 1776s apt_dir = arch_apt_dir 1776s 1776s # set mirror for get_file_package() 1776s try: 1776s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 1776s except SystemError as error: 1776s apport.logging.warning("cannot determine mirror: %s", str(error)) 1776s 1776s # set current release code name for _distro_release_to_codename 1776s with open( 1776s os.path.join(configdir, release, "codename"), encoding="utf-8" 1776s ) as f: 1776s self._current_release_codename = f.read().strip() 1776s 1776s # create apt sandbox 1776s if cache_dir: 1776s tmp_aptroot = False 1776s aptroot = self._apt_cache_root_dir( 1776s architecture, cache_dir, release if configdir else "system" 1776s ) 1776s if not os.path.isdir(aptroot): 1776s os.makedirs(aptroot) 1776s else: 1776s tmp_aptroot = True 1776s aptroot = tempfile.mkdtemp() 1776s 1776s apt.apt_pkg.config.set("APT::Architecture", architecture) 1776s apt.apt_pkg.config.set("Acquire::Languages", "none") 1776s # directly connect to Launchpad when downloading deb files 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 1776s 1776s if not verbose: 1776s fetchProgress = apt.progress.base.AcquireProgress() 1776s else: 1776s fetchProgress = apt.progress.text.AcquireProgress() 1776s if not tmp_aptroot: 1776s apt_cache = self._sandbox_cache( 1776s aptroot, 1776s apt_dir, 1776s fetchProgress, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s architecture, 1776s ) 1776s else: 1776s self._build_apt_sandbox( 1776s aptroot, 1776s apt_dir, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s ) 1776s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 1776s try: 1776s apt_cache.update(fetchProgress) 1776s except apt.cache.FetchFailedException as error: 1776s raise SystemError(str(error)) from error 1776s apt_cache.open() 1776s 1776s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 1776s 1776s obsolete = "" 1776s 1776s src_records = apt.apt_pkg.SourceRecords() 1776s 1776s # read original package list 1776s pkg_list = os.path.join(rootdir, "packages.txt") 1776s pkg_versions = {} 1776s if os.path.exists(pkg_list): 1776s with open(pkg_list, encoding="utf-8") as f: 1776s for line in f: 1776s line = line.strip() 1776s if not line: 1776s continue 1776s (p, v) = line.split() 1776s pkg_versions[p] = v 1776s 1776s # mark packages for installation 1776s real_pkgs = set() 1776s lp_cache = {} 1776s fetcher = apt.apt_pkg.Acquire(fetchProgress) 1776s # need to keep AcquireFile references 1776s acquire_queue = [] 1776s # add any dependencies to the packages list 1776s if install_deps: 1776s deps = [] 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s for dep in cache_pkg.candidate.dependencies: 1776s # the dependency may be satisfied by a different package 1776s if dep[0].name not in apt_cache: 1776s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 1776s # the version in dep is the one from pkg's dependencies, 1776s # so use the version from the cache 1776s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 1776s # if the dependency is in the list of packages we don't 1776s # need to look up its dependencies again 1776s if dep[0].name in [pkg[0] for pkg in packages]: 1776s continue 1776s # if the package is already extracted in the sandbox 1776s # because the report needs that package we don't want to 1776s # install a newer version which may cause a CRC mismatch 1776s # with the installed dbg symbols 1776s if dep[0].name in pkg_versions: 1776s inst_version = pkg_versions[dep[0].name] 1776s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 1776s deps.append((dep[0].name, inst_version)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s if dep[0].name not in [pkg[0] for pkg in packages]: 1776s packages.append((dep[0].name, None)) 1776s packages.extend(deps) 1776s 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s 1776s # try to select matching version 1776s try: 1776s if ver: 1776s cache_pkg.candidate = cache_pkg.versions[ver] 1776s except KeyError: 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s release, pkg, ver, architecture 1776s ) 1776s if lp_url: 1776s acquire_queue.append( 1776s apt.apt_pkg.AcquireFile( 1776s fetcher, lp_url, hash=f"sha1:{sha1sum}", destdir=archivedir 1776s ) 1776s ) 1776s lp_cache[pkg] = ver 1776s else: 1776s obsolete += ( 1776s f"{pkg} version {ver} required," 1776s f" but {cache_pkg.candidate.version} is available\n" 1776s ) 1776s ver = cache_pkg.candidate.version 1776s 1776s candidate = cache_pkg.candidate 1776s real_pkgs.add(pkg) 1776s 1776s if permanent_rootdir: 1776s self._remove_conflicting_packages( 1776s pkg, aptroot, apt_cache, candidate, archivedir, pkg_versions 1776s ) 1776s 1776s if candidate.architecture != "all" and install_dbg: 1776s try: 1776s dbg_pkg = f"{pkg}-dbg" 1776s dbg = apt_cache[dbg_pkg] 1776s pkg_found = False 1776s # try to get the same version as pkg 1776s if ver: 1776s try: 1776s dbg.candidate = dbg.versions[ver] 1776s pkg_found = True 1776s except KeyError: 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s release, dbg_pkg, ver, architecture 1776s ) 1776s if lp_url: 1776s acquire_queue.append( 1776s apt.apt_pkg.AcquireFile( 1776s fetcher, 1776s lp_url, 1776s hash=f"sha1:{sha1sum}", 1776s destdir=archivedir, 1776s ) 1776s ) 1776s lp_cache[dbg_pkg] = ver 1776s pkg_found = True 1776s # if it can't be found in Launchpad failover to a 1776s # code path that'll use -dbgsym packages 1776s else: 1776s raise 1776s if not pkg_found: 1776s try: 1776s dbg.candidate = dbg.versions[candidate.version] 1776s except KeyError: 1776s obsolete += ( 1776s f"outdated -dbg package for {pkg}:" 1776s f" package version {ver}" 1776s f" -dbg version {dbg.candidate.version}\n" 1776s ) 1776s real_pkgs.add(dbg_pkg) 1776s except KeyError: 1776s # install all -dbg from the source package; lookup() just 1776s # works from the current list pointer, we always need to 1776s # start from the beginning 1776s src_records.restart() 1776s if src_records.lookup(candidate.source_name): 1776s # ignore transitional packages 1776s # False positive, see 1776s # https://github.com/PyCQA/pylint/issues/7122 1776s # pylint: disable=not-an-iterable 1776s dbgs = [ 1776s p 1776s for p in src_records.binaries 1776s if p.endswith("-dbg") 1776s and p in apt_cache 1776s and "transitional" not in apt_cache[p].candidate.description 1776s ] 1776s # if a specific version of a package was requested 1776s # only install dbg pkgs whose version matches 1776s if ver: 1776s for dbg in dbgs: 1776s if apt_cache[dbg].candidate.version != ver: 1776s dbgs.remove(dbg) 1776s else: 1776s dbgs = [] 1776s if dbgs: 1776s for p in dbgs: 1776s # if the package has already been added to 1776s # real_pkgs don't search for it again 1776s if p in real_pkgs: 1776s continue 1776s pkg_found = False 1776s # prefer the version requested 1776s if ver: 1776s try: 1776s apt_cache[p].candidate = apt_cache[p].versions[ver] 1776s pkg_found = True 1776s except KeyError: 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s release, p, ver, architecture 1776s ) 1776s if lp_url: 1776s acquire_queue.append( 1776s apt.apt_pkg.AcquireFile( 1776s fetcher, 1776s lp_url, 1776s hash=f"sha1:{sha1sum}", 1776s destdir=archivedir, 1776s ) 1776s ) 1776s lp_cache[p] = ver 1776s pkg_found = True 1776s if not pkg_found: 1776s try: 1776s apt_cache[p].candidate = apt_cache[p].versions[ 1776s candidate.version 1776s ] 1776s except KeyError: 1776s # we don't really expect that, but it's 1776s # possible that other binaries have a 1776s # different version 1776s pass 1776s real_pkgs.add(p) 1776s else: 1776s pkg_found = False 1776s dbgsym_pkg = f"{pkg}-dbgsym" 1776s try: 1776s > dbgsym = apt_cache[dbgsym_pkg] 1776s 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1296: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = , key = 'gcc-12-base-dbgsym' 1776s 1776s def __getitem__(self, key: object) -> Package: 1776s """look like a dictionary (get key)""" 1776s try: 1776s key = str(key) 1776s rawpkg = self._cache[key] 1776s except KeyError: 1776s > raise KeyError("The cache has no package named %r" % key) 1776s E KeyError: "The cache has no package named 'gcc-12-base-dbgsym'" 1776s 1776s /usr/lib/python3/dist-packages/apt/cache.py:279: KeyError 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s configdir = '/tmp/tmpjqed7xuj/config', rootdir = '/tmp/tmpjqed7xuj/root' 1776s apt_style = 'deb822' 1776s 1776s @pytest.mark.skipif(not has_internet(), reason="online test") 1776s def test_install_packages_dependencies( 1776s configdir: str, rootdir: str, apt_style: AptStyle 1776s ) -> None: 1776s """Test install packages's dependencies.""" 1776s release = _setup_foonux_config(configdir, apt_style) 1776s # coreutils should always depend on libc6 1776s > result = impl.install_packages( 1776s rootdir, 1776s configdir, 1776s release, 1776s [("coreutils", None)], 1776s False, 1776s None, 1776s install_deps=True, 1776s ) 1776s 1776s tests/system/test_packaging_apt_dpkg.py:292: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1334: in install_packages 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:423: in get_lp_binary_package 1776s launchpad = Launchpad.login_anonymously( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:487: in login_anonymously 1776s return cls( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:223: in __init__ 1776s super().__init__( 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/resource.py:511: in __init__ 1776s self._wadl = self._browser.get_wadl_application(self._root_uri) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:502: in get_wadl_application 1776s response, content = self._request(url, media_type=wadl_type) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:441: in _request 1776s response, content = self._request_and_retry( 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:400: in _request_and_retry 1776s response, content = self._connection.request( 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1724: in request 1776s (response, content) = self._request( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:139: in _request 1776s response, content = super()._request(*args) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:204: in _request 1776s return super(RestfulHttp, self)._request( 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1444: in _request 1776s (response, content) = self._conn_request(conn, request_uri, method, body, headers) 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1366: in _conn_request 1776s conn.connect() 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1156: in connect 1776s sock.connect((self.host, self.port)) 1776s /usr/lib/python3/dist-packages/httplib2/socks.py:504: in connect 1776s self.__negotiatehttp(destpair[0], destpair[1]) 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = 1776s destaddr = 'api.launchpad.net', destport = 443 1776s 1776s def __negotiatehttp(self, destaddr, destport): 1776s """__negotiatehttp(self,destaddr,destport) 1776s Negotiates a connection through an HTTP server. 1776s """ 1776s # If we need to resolve locally, we do this now 1776s if not self.__proxy[3]: 1776s addr = socket.gethostbyname(destaddr) 1776s else: 1776s addr = destaddr 1776s headers = ["CONNECT ", addr, ":", str(destport), " HTTP/1.1\r\n"] 1776s wrote_host_header = False 1776s wrote_auth_header = False 1776s if self.__proxy[6] != None: 1776s for key, val in self.__proxy[6].iteritems(): 1776s headers += [key, ": ", val, "\r\n"] 1776s wrote_host_header = key.lower() == "host" 1776s wrote_auth_header = key.lower() == "proxy-authorization" 1776s if not wrote_host_header: 1776s headers += ["Host: ", destaddr, "\r\n"] 1776s if not wrote_auth_header: 1776s if self.__proxy[4] != None and self.__proxy[5] != None: 1776s headers += [self.__getauthheader(), "\r\n"] 1776s headers.append("\r\n") 1776s self.sendall("".join(headers).encode()) 1776s # We read the response until we get the string "\r\n\r\n" 1776s resp = self.recv(1) 1776s while resp.find("\r\n\r\n".encode()) == -1: 1776s resp = resp + self.recv(1) 1776s # We just need the first line to check if the connection 1776s # was successful 1776s statusline = resp.splitlines()[0].split(" ".encode(), 2) 1776s if statusline[0] not in ("HTTP/1.0".encode(), "HTTP/1.1".encode()): 1776s self.close() 1776s raise GeneralProxyError((1, _generalerrors[1])) 1776s try: 1776s statuscode = int(statusline[1]) 1776s except ValueError: 1776s self.close() 1776s raise GeneralProxyError((1, _generalerrors[1])) 1776s if statuscode != 200: 1776s self.close() 1776s > raise HTTPError((statuscode, statusline[2])) 1776s E httplib2.socks.HTTPError: (403, b'Forbidden') 1776s 1776s /usr/lib/python3/dist-packages/httplib2/socks.py:465: HTTPError 1776s ____________________ test_install_packages_system[one-line] ____________________ 1776s 1776s self = , key = 'coreutils-dbg' 1776s 1776s def __getitem__(self, key: object) -> Package: 1776s """look like a dictionary (get key)""" 1776s try: 1776s key = str(key) 1776s > rawpkg = self._cache[key] 1776s E KeyError: 'coreutils-dbg' 1776s 1776s /usr/lib/python3/dist-packages/apt/cache.py:277: KeyError 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s self = 1776s rootdir = '/tmp/tmpcat23gcv/root', configdir = None, release = 'Ubuntu 25.04' 1776s packages = [('coreutils', '9.4-3.1ubuntu1'), ('tzdata', '1.1')], verbose = False 1776s cache_dir = '/tmp/tmpcat23gcv/cache', permanent_rootdir = False 1776s architecture = 'amd64', origins = None, install_dbg = True, install_deps = False 1776s 1776s def install_packages( 1776s self, 1776s rootdir: str, 1776s configdir: str | None, 1776s release: str, 1776s packages: list[tuple[str, str | None]], 1776s verbose: bool = False, 1776s cache_dir: str | None = None, 1776s permanent_rootdir: bool = False, 1776s architecture: str | None = None, 1776s origins: Iterable[str] | None = None, 1776s install_dbg: bool = True, 1776s install_deps: bool = False, 1776s ) -> str: 1776s # TODO: Split into smaller functions/methods 1776s # pylint: disable=too-many-branches,too-many-locals 1776s # pylint: disable=too-many-nested-blocks,too-many-statements 1776s """Install packages into a sandbox (for apport-retrace). 1776s 1776s In order to work without any special permissions and without touching 1776s the running system, this should only download and unpack packages into 1776s the given root directory, not install them into the system. 1776s 1776s configdir points to a directory with by-release configuration files for 1776s the packaging system; this is completely dependent on the backend 1776s implementation, the only assumption is that this looks into 1776s configdir/release/, so that you can use retracing for multiple 1776s DistroReleases. As a special case, if configdir is None, it uses the 1776s current system configuration, and "release" is ignored. 1776s 1776s release is the value of the report's 'DistroRelease' field. 1776s 1776s packages is a list of ('packagename', 'version') tuples. If the version 1776s is None, it should install the most current available version. 1776s 1776s If cache_dir is given, then the downloaded packages will be stored 1776s there, to speed up subsequent retraces. 1776s 1776s If permanent_rootdir is True, then the sandbox created from the 1776s downloaded packages will be reused, to speed up subsequent retraces. 1776s 1776s If architecture is given, the sandbox will be created with packages of 1776s the given architecture (as specified in a report's "Architecture" 1776s field). If not given it defaults to the host system's architecture. 1776s 1776s If origins is given, the sandbox will be created with apt data sources 1776s for foreign origins. 1776s 1776s If install_deps is True, then the dependencies of packages will also 1776s be installed. 1776s 1776s Return a string with outdated packages, or an empty string if all 1776s packages were installed. 1776s 1776s If something is wrong with the environment (invalid configuration, 1776s package servers down, etc.), this should raise a SystemError with a 1776s meaningful error message. 1776s """ 1776s if not architecture: 1776s architecture = self.get_system_architecture() 1776s if not configdir: 1776s apt_dir = "/etc/apt" 1776s self._current_release_codename = self.get_distro_codename() 1776s else: 1776s # support architecture specific config, fall back to global config 1776s apt_dir = os.path.join(configdir, release) 1776s if architecture != self.get_system_architecture(): 1776s arch_apt_dir = os.path.join(configdir, release, architecture) 1776s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 1776s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 1776s if os.path.exists(arch_old_sources) or ( 1776s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 1776s ): 1776s apt_dir = arch_apt_dir 1776s 1776s # set mirror for get_file_package() 1776s try: 1776s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 1776s except SystemError as error: 1776s apport.logging.warning("cannot determine mirror: %s", str(error)) 1776s 1776s # set current release code name for _distro_release_to_codename 1776s with open( 1776s os.path.join(configdir, release, "codename"), encoding="utf-8" 1776s ) as f: 1776s self._current_release_codename = f.read().strip() 1776s 1776s # create apt sandbox 1776s if cache_dir: 1776s tmp_aptroot = False 1776s aptroot = self._apt_cache_root_dir( 1776s architecture, cache_dir, release if configdir else "system" 1776s ) 1776s if not os.path.isdir(aptroot): 1776s os.makedirs(aptroot) 1776s else: 1776s tmp_aptroot = True 1776s aptroot = tempfile.mkdtemp() 1776s 1776s apt.apt_pkg.config.set("APT::Architecture", architecture) 1776s apt.apt_pkg.config.set("Acquire::Languages", "none") 1776s # directly connect to Launchpad when downloading deb files 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 1776s 1776s if not verbose: 1776s fetchProgress = apt.progress.base.AcquireProgress() 1776s else: 1776s fetchProgress = apt.progress.text.AcquireProgress() 1776s if not tmp_aptroot: 1776s apt_cache = self._sandbox_cache( 1776s aptroot, 1776s apt_dir, 1776s fetchProgress, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s architecture, 1776s ) 1776s else: 1776s self._build_apt_sandbox( 1776s aptroot, 1776s apt_dir, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s ) 1776s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 1776s try: 1776s apt_cache.update(fetchProgress) 1776s except apt.cache.FetchFailedException as error: 1776s raise SystemError(str(error)) from error 1776s apt_cache.open() 1776s 1776s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 1776s 1776s obsolete = "" 1776s 1776s src_records = apt.apt_pkg.SourceRecords() 1776s 1776s # read original package list 1776s pkg_list = os.path.join(rootdir, "packages.txt") 1776s pkg_versions = {} 1776s if os.path.exists(pkg_list): 1776s with open(pkg_list, encoding="utf-8") as f: 1776s for line in f: 1776s line = line.strip() 1776s if not line: 1776s continue 1776s (p, v) = line.split() 1776s pkg_versions[p] = v 1776s 1776s # mark packages for installation 1776s real_pkgs = set() 1776s lp_cache = {} 1776s fetcher = apt.apt_pkg.Acquire(fetchProgress) 1776s # need to keep AcquireFile references 1776s acquire_queue = [] 1776s # add any dependencies to the packages list 1776s if install_deps: 1776s deps = [] 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s for dep in cache_pkg.candidate.dependencies: 1776s # the dependency may be satisfied by a different package 1776s if dep[0].name not in apt_cache: 1776s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 1776s # the version in dep is the one from pkg's dependencies, 1776s # so use the version from the cache 1776s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 1776s # if the dependency is in the list of packages we don't 1776s # need to look up its dependencies again 1776s if dep[0].name in [pkg[0] for pkg in packages]: 1776s continue 1776s # if the package is already extracted in the sandbox 1776s # because the report needs that package we don't want to 1776s # install a newer version which may cause a CRC mismatch 1776s # with the installed dbg symbols 1776s if dep[0].name in pkg_versions: 1776s inst_version = pkg_versions[dep[0].name] 1776s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 1776s deps.append((dep[0].name, inst_version)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s if dep[0].name not in [pkg[0] for pkg in packages]: 1776s packages.append((dep[0].name, None)) 1776s packages.extend(deps) 1776s 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s 1776s # try to select matching version 1776s try: 1776s if ver: 1776s cache_pkg.candidate = cache_pkg.versions[ver] 1776s except KeyError: 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s release, pkg, ver, architecture 1776s ) 1776s if lp_url: 1776s acquire_queue.append( 1776s apt.apt_pkg.AcquireFile( 1776s fetcher, lp_url, hash=f"sha1:{sha1sum}", destdir=archivedir 1776s ) 1776s ) 1776s lp_cache[pkg] = ver 1776s else: 1776s obsolete += ( 1776s f"{pkg} version {ver} required," 1776s f" but {cache_pkg.candidate.version} is available\n" 1776s ) 1776s ver = cache_pkg.candidate.version 1776s 1776s candidate = cache_pkg.candidate 1776s real_pkgs.add(pkg) 1776s 1776s if permanent_rootdir: 1776s self._remove_conflicting_packages( 1776s pkg, aptroot, apt_cache, candidate, archivedir, pkg_versions 1776s ) 1776s 1776s if candidate.architecture != "all" and install_dbg: 1776s try: 1776s dbg_pkg = f"{pkg}-dbg" 1776s > dbg = apt_cache[dbg_pkg] 1776s 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1193: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = , key = 'coreutils-dbg' 1776s 1776s def __getitem__(self, key: object) -> Package: 1776s """look like a dictionary (get key)""" 1776s try: 1776s key = str(key) 1776s rawpkg = self._cache[key] 1776s except KeyError: 1776s > raise KeyError("The cache has no package named %r" % key) 1776s E KeyError: "The cache has no package named 'coreutils-dbg'" 1776s 1776s /usr/lib/python3/dist-packages/apt/cache.py:279: KeyError 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s self = , key = 'coreutils-dbgsym' 1776s 1776s def __getitem__(self, key: object) -> Package: 1776s """look like a dictionary (get key)""" 1776s try: 1776s key = str(key) 1776s > rawpkg = self._cache[key] 1776s E KeyError: 'coreutils-dbgsym' 1776s 1776s /usr/lib/python3/dist-packages/apt/cache.py:277: KeyError 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s self = 1776s rootdir = '/tmp/tmpcat23gcv/root', configdir = None, release = 'Ubuntu 25.04' 1776s packages = [('coreutils', '9.4-3.1ubuntu1'), ('tzdata', '1.1')], verbose = False 1776s cache_dir = '/tmp/tmpcat23gcv/cache', permanent_rootdir = False 1776s architecture = 'amd64', origins = None, install_dbg = True, install_deps = False 1776s 1776s def install_packages( 1776s self, 1776s rootdir: str, 1776s configdir: str | None, 1776s release: str, 1776s packages: list[tuple[str, str | None]], 1776s verbose: bool = False, 1776s cache_dir: str | None = None, 1776s permanent_rootdir: bool = False, 1776s architecture: str | None = None, 1776s origins: Iterable[str] | None = None, 1776s install_dbg: bool = True, 1776s install_deps: bool = False, 1776s ) -> str: 1776s # TODO: Split into smaller functions/methods 1776s # pylint: disable=too-many-branches,too-many-locals 1776s # pylint: disable=too-many-nested-blocks,too-many-statements 1776s """Install packages into a sandbox (for apport-retrace). 1776s 1776s In order to work without any special permissions and without touching 1776s the running system, this should only download and unpack packages into 1776s the given root directory, not install them into the system. 1776s 1776s configdir points to a directory with by-release configuration files for 1776s the packaging system; this is completely dependent on the backend 1776s implementation, the only assumption is that this looks into 1776s configdir/release/, so that you can use retracing for multiple 1776s DistroReleases. As a special case, if configdir is None, it uses the 1776s current system configuration, and "release" is ignored. 1776s 1776s release is the value of the report's 'DistroRelease' field. 1776s 1776s packages is a list of ('packagename', 'version') tuples. If the version 1776s is None, it should install the most current available version. 1776s 1776s If cache_dir is given, then the downloaded packages will be stored 1776s there, to speed up subsequent retraces. 1776s 1776s If permanent_rootdir is True, then the sandbox created from the 1776s downloaded packages will be reused, to speed up subsequent retraces. 1776s 1776s If architecture is given, the sandbox will be created with packages of 1776s the given architecture (as specified in a report's "Architecture" 1776s field). If not given it defaults to the host system's architecture. 1776s 1776s If origins is given, the sandbox will be created with apt data sources 1776s for foreign origins. 1776s 1776s If install_deps is True, then the dependencies of packages will also 1776s be installed. 1776s 1776s Return a string with outdated packages, or an empty string if all 1776s packages were installed. 1776s 1776s If something is wrong with the environment (invalid configuration, 1776s package servers down, etc.), this should raise a SystemError with a 1776s meaningful error message. 1776s """ 1776s if not architecture: 1776s architecture = self.get_system_architecture() 1776s if not configdir: 1776s apt_dir = "/etc/apt" 1776s self._current_release_codename = self.get_distro_codename() 1776s else: 1776s # support architecture specific config, fall back to global config 1776s apt_dir = os.path.join(configdir, release) 1776s if architecture != self.get_system_architecture(): 1776s arch_apt_dir = os.path.join(configdir, release, architecture) 1776s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 1776s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 1776s if os.path.exists(arch_old_sources) or ( 1776s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 1776s ): 1776s apt_dir = arch_apt_dir 1776s 1776s # set mirror for get_file_package() 1776s try: 1776s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 1776s except SystemError as error: 1776s apport.logging.warning("cannot determine mirror: %s", str(error)) 1776s 1776s # set current release code name for _distro_release_to_codename 1776s with open( 1776s os.path.join(configdir, release, "codename"), encoding="utf-8" 1776s ) as f: 1776s self._current_release_codename = f.read().strip() 1776s 1776s # create apt sandbox 1776s if cache_dir: 1776s tmp_aptroot = False 1776s aptroot = self._apt_cache_root_dir( 1776s architecture, cache_dir, release if configdir else "system" 1776s ) 1776s if not os.path.isdir(aptroot): 1776s os.makedirs(aptroot) 1776s else: 1776s tmp_aptroot = True 1776s aptroot = tempfile.mkdtemp() 1776s 1776s apt.apt_pkg.config.set("APT::Architecture", architecture) 1776s apt.apt_pkg.config.set("Acquire::Languages", "none") 1776s # directly connect to Launchpad when downloading deb files 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 1776s 1776s if not verbose: 1776s fetchProgress = apt.progress.base.AcquireProgress() 1776s else: 1776s fetchProgress = apt.progress.text.AcquireProgress() 1776s if not tmp_aptroot: 1776s apt_cache = self._sandbox_cache( 1776s aptroot, 1776s apt_dir, 1776s fetchProgress, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s architecture, 1776s ) 1776s else: 1776s self._build_apt_sandbox( 1776s aptroot, 1776s apt_dir, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s ) 1776s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 1776s try: 1776s apt_cache.update(fetchProgress) 1776s except apt.cache.FetchFailedException as error: 1776s raise SystemError(str(error)) from error 1776s apt_cache.open() 1776s 1776s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 1776s 1776s obsolete = "" 1776s 1776s src_records = apt.apt_pkg.SourceRecords() 1776s 1776s # read original package list 1776s pkg_list = os.path.join(rootdir, "packages.txt") 1776s pkg_versions = {} 1776s if os.path.exists(pkg_list): 1776s with open(pkg_list, encoding="utf-8") as f: 1776s for line in f: 1776s line = line.strip() 1776s if not line: 1776s continue 1776s (p, v) = line.split() 1776s pkg_versions[p] = v 1776s 1776s # mark packages for installation 1776s real_pkgs = set() 1776s lp_cache = {} 1776s fetcher = apt.apt_pkg.Acquire(fetchProgress) 1776s # need to keep AcquireFile references 1776s acquire_queue = [] 1776s # add any dependencies to the packages list 1776s if install_deps: 1776s deps = [] 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s for dep in cache_pkg.candidate.dependencies: 1776s # the dependency may be satisfied by a different package 1776s if dep[0].name not in apt_cache: 1776s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 1776s # the version in dep is the one from pkg's dependencies, 1776s # so use the version from the cache 1776s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 1776s # if the dependency is in the list of packages we don't 1776s # need to look up its dependencies again 1776s if dep[0].name in [pkg[0] for pkg in packages]: 1776s continue 1776s # if the package is already extracted in the sandbox 1776s # because the report needs that package we don't want to 1776s # install a newer version which may cause a CRC mismatch 1776s # with the installed dbg symbols 1776s if dep[0].name in pkg_versions: 1776s inst_version = pkg_versions[dep[0].name] 1776s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 1776s deps.append((dep[0].name, inst_version)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s if dep[0].name not in [pkg[0] for pkg in packages]: 1776s packages.append((dep[0].name, None)) 1776s packages.extend(deps) 1776s 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s 1776s # try to select matching version 1776s try: 1776s if ver: 1776s cache_pkg.candidate = cache_pkg.versions[ver] 1776s except KeyError: 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s release, pkg, ver, architecture 1776s ) 1776s if lp_url: 1776s acquire_queue.append( 1776s apt.apt_pkg.AcquireFile( 1776s fetcher, lp_url, hash=f"sha1:{sha1sum}", destdir=archivedir 1776s ) 1776s ) 1776s lp_cache[pkg] = ver 1776s else: 1776s obsolete += ( 1776s f"{pkg} version {ver} required," 1776s f" but {cache_pkg.candidate.version} is available\n" 1776s ) 1776s ver = cache_pkg.candidate.version 1776s 1776s candidate = cache_pkg.candidate 1776s real_pkgs.add(pkg) 1776s 1776s if permanent_rootdir: 1776s self._remove_conflicting_packages( 1776s pkg, aptroot, apt_cache, candidate, archivedir, pkg_versions 1776s ) 1776s 1776s if candidate.architecture != "all" and install_dbg: 1776s try: 1776s dbg_pkg = f"{pkg}-dbg" 1776s dbg = apt_cache[dbg_pkg] 1776s pkg_found = False 1776s # try to get the same version as pkg 1776s if ver: 1776s try: 1776s dbg.candidate = dbg.versions[ver] 1776s pkg_found = True 1776s except KeyError: 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s release, dbg_pkg, ver, architecture 1776s ) 1776s if lp_url: 1776s acquire_queue.append( 1776s apt.apt_pkg.AcquireFile( 1776s fetcher, 1776s lp_url, 1776s hash=f"sha1:{sha1sum}", 1776s destdir=archivedir, 1776s ) 1776s ) 1776s lp_cache[dbg_pkg] = ver 1776s pkg_found = True 1776s # if it can't be found in Launchpad failover to a 1776s # code path that'll use -dbgsym packages 1776s else: 1776s raise 1776s if not pkg_found: 1776s try: 1776s dbg.candidate = dbg.versions[candidate.version] 1776s except KeyError: 1776s obsolete += ( 1776s f"outdated -dbg package for {pkg}:" 1776s f" package version {ver}" 1776s f" -dbg version {dbg.candidate.version}\n" 1776s ) 1776s real_pkgs.add(dbg_pkg) 1776s except KeyError: 1776s # install all -dbg from the source package; lookup() just 1776s # works from the current list pointer, we always need to 1776s # start from the beginning 1776s src_records.restart() 1776s if src_records.lookup(candidate.source_name): 1776s # ignore transitional packages 1776s # False positive, see 1776s # https://github.com/PyCQA/pylint/issues/7122 1776s # pylint: disable=not-an-iterable 1776s dbgs = [ 1776s p 1776s for p in src_records.binaries 1776s if p.endswith("-dbg") 1776s and p in apt_cache 1776s and "transitional" not in apt_cache[p].candidate.description 1776s ] 1776s # if a specific version of a package was requested 1776s # only install dbg pkgs whose version matches 1776s if ver: 1776s for dbg in dbgs: 1776s if apt_cache[dbg].candidate.version != ver: 1776s dbgs.remove(dbg) 1776s else: 1776s dbgs = [] 1776s if dbgs: 1776s for p in dbgs: 1776s # if the package has already been added to 1776s # real_pkgs don't search for it again 1776s if p in real_pkgs: 1776s continue 1776s pkg_found = False 1776s # prefer the version requested 1776s if ver: 1776s try: 1776s apt_cache[p].candidate = apt_cache[p].versions[ver] 1776s pkg_found = True 1776s except KeyError: 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s release, p, ver, architecture 1776s ) 1776s if lp_url: 1776s acquire_queue.append( 1776s apt.apt_pkg.AcquireFile( 1776s fetcher, 1776s lp_url, 1776s hash=f"sha1:{sha1sum}", 1776s destdir=archivedir, 1776s ) 1776s ) 1776s lp_cache[p] = ver 1776s pkg_found = True 1776s if not pkg_found: 1776s try: 1776s apt_cache[p].candidate = apt_cache[p].versions[ 1776s candidate.version 1776s ] 1776s except KeyError: 1776s # we don't really expect that, but it's 1776s # possible that other binaries have a 1776s # different version 1776s pass 1776s real_pkgs.add(p) 1776s else: 1776s pkg_found = False 1776s dbgsym_pkg = f"{pkg}-dbgsym" 1776s try: 1776s > dbgsym = apt_cache[dbgsym_pkg] 1776s 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1296: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = , key = 'coreutils-dbgsym' 1776s 1776s def __getitem__(self, key: object) -> Package: 1776s """look like a dictionary (get key)""" 1776s try: 1776s key = str(key) 1776s rawpkg = self._cache[key] 1776s except KeyError: 1776s > raise KeyError("The cache has no package named %r" % key) 1776s E KeyError: "The cache has no package named 'coreutils-dbgsym'" 1776s 1776s /usr/lib/python3/dist-packages/apt/cache.py:279: KeyError 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s cachedir = '/tmp/tmpcat23gcv/cache', workdir = '/tmp/tmpcat23gcv' 1776s rootdir = '/tmp/tmpcat23gcv/root', apt_style = 'one-line' 1776s 1776s @pytest.mark.skipif(not has_internet(), reason="online test") 1776s def test_install_packages_system( 1776s cachedir: str, workdir: str, rootdir: str, apt_style: AptStyle 1776s ) -> None: 1776s # pylint: disable=unused-argument 1776s """install_packages() with system configuration""" 1776s # trigger an unrelated package query here to get the cache set up, 1776s # reproducing an install failure when the internal caches are not 1776s # reset properly 1776s impl.get_version("dash") 1776s 1776s release = " ".join(impl.get_os_version()) 1776s cachedir = os.path.join(workdir, "cache") 1776s rootdir = os.path.join(workdir, "root") 1776s 1776s > result = impl.install_packages( 1776s rootdir, 1776s None, 1776s release, 1776s [("coreutils", impl.get_version("coreutils")), ("tzdata", "1.1")], 1776s False, 1776s cachedir, 1776s ) 1776s 1776s tests/system/test_packaging_apt_dpkg.py:327: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1334: in install_packages 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:423: in get_lp_binary_package 1776s launchpad = Launchpad.login_anonymously( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:487: in login_anonymously 1776s return cls( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:223: in __init__ 1776s super().__init__( 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/resource.py:511: in __init__ 1776s self._wadl = self._browser.get_wadl_application(self._root_uri) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:502: in get_wadl_application 1776s response, content = self._request(url, media_type=wadl_type) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:441: in _request 1776s response, content = self._request_and_retry( 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:400: in _request_and_retry 1776s response, content = self._connection.request( 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1724: in request 1776s (response, content) = self._request( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:139: in _request 1776s response, content = super()._request(*args) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:204: in _request 1776s return super(RestfulHttp, self)._request( 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1444: in _request 1776s (response, content) = self._conn_request(conn, request_uri, method, body, headers) 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1366: in _conn_request 1776s conn.connect() 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1156: in connect 1776s sock.connect((self.host, self.port)) 1776s /usr/lib/python3/dist-packages/httplib2/socks.py:504: in connect 1776s self.__negotiatehttp(destpair[0], destpair[1]) 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = 1776s destaddr = 'api.launchpad.net', destport = 443 1776s 1776s def __negotiatehttp(self, destaddr, destport): 1776s """__negotiatehttp(self,destaddr,destport) 1776s Negotiates a connection through an HTTP server. 1776s """ 1776s # If we need to resolve locally, we do this now 1776s if not self.__proxy[3]: 1776s addr = socket.gethostbyname(destaddr) 1776s else: 1776s addr = destaddr 1776s headers = ["CONNECT ", addr, ":", str(destport), " HTTP/1.1\r\n"] 1776s wrote_host_header = False 1776s wrote_auth_header = False 1776s if self.__proxy[6] != None: 1776s for key, val in self.__proxy[6].iteritems(): 1776s headers += [key, ": ", val, "\r\n"] 1776s wrote_host_header = key.lower() == "host" 1776s wrote_auth_header = key.lower() == "proxy-authorization" 1776s if not wrote_host_header: 1776s headers += ["Host: ", destaddr, "\r\n"] 1776s if not wrote_auth_header: 1776s if self.__proxy[4] != None and self.__proxy[5] != None: 1776s headers += [self.__getauthheader(), "\r\n"] 1776s headers.append("\r\n") 1776s self.sendall("".join(headers).encode()) 1776s # We read the response until we get the string "\r\n\r\n" 1776s resp = self.recv(1) 1776s while resp.find("\r\n\r\n".encode()) == -1: 1776s resp = resp + self.recv(1) 1776s # We just need the first line to check if the connection 1776s # was successful 1776s statusline = resp.splitlines()[0].split(" ".encode(), 2) 1776s if statusline[0] not in ("HTTP/1.0".encode(), "HTTP/1.1".encode()): 1776s self.close() 1776s raise GeneralProxyError((1, _generalerrors[1])) 1776s try: 1776s statuscode = int(statusline[1]) 1776s except ValueError: 1776s self.close() 1776s raise GeneralProxyError((1, _generalerrors[1])) 1776s if statuscode != 200: 1776s self.close() 1776s > raise HTTPError((statuscode, statusline[2])) 1776s E httplib2.socks.HTTPError: (403, b'Forbidden') 1776s 1776s /usr/lib/python3/dist-packages/httplib2/socks.py:465: HTTPError 1776s _____________________ test_install_packages_system[deb822] _____________________ 1776s 1776s self = , key = 'coreutils-dbg' 1776s 1776s def __getitem__(self, key: object) -> Package: 1776s """look like a dictionary (get key)""" 1776s try: 1776s key = str(key) 1776s > rawpkg = self._cache[key] 1776s E KeyError: 'coreutils-dbg' 1776s 1776s /usr/lib/python3/dist-packages/apt/cache.py:277: KeyError 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s self = 1776s rootdir = '/tmp/tmpmooowab2/root', configdir = None, release = 'Ubuntu 25.04' 1776s packages = [('coreutils', '9.4-3.1ubuntu1'), ('tzdata', '1.1')], verbose = False 1776s cache_dir = '/tmp/tmpmooowab2/cache', permanent_rootdir = False 1776s architecture = 'amd64', origins = None, install_dbg = True, install_deps = False 1776s 1776s def install_packages( 1776s self, 1776s rootdir: str, 1776s configdir: str | None, 1776s release: str, 1776s packages: list[tuple[str, str | None]], 1776s verbose: bool = False, 1776s cache_dir: str | None = None, 1776s permanent_rootdir: bool = False, 1776s architecture: str | None = None, 1776s origins: Iterable[str] | None = None, 1776s install_dbg: bool = True, 1776s install_deps: bool = False, 1776s ) -> str: 1776s # TODO: Split into smaller functions/methods 1776s # pylint: disable=too-many-branches,too-many-locals 1776s # pylint: disable=too-many-nested-blocks,too-many-statements 1776s """Install packages into a sandbox (for apport-retrace). 1776s 1776s In order to work without any special permissions and without touching 1776s the running system, this should only download and unpack packages into 1776s the given root directory, not install them into the system. 1776s 1776s configdir points to a directory with by-release configuration files for 1776s the packaging system; this is completely dependent on the backend 1776s implementation, the only assumption is that this looks into 1776s configdir/release/, so that you can use retracing for multiple 1776s DistroReleases. As a special case, if configdir is None, it uses the 1776s current system configuration, and "release" is ignored. 1776s 1776s release is the value of the report's 'DistroRelease' field. 1776s 1776s packages is a list of ('packagename', 'version') tuples. If the version 1776s is None, it should install the most current available version. 1776s 1776s If cache_dir is given, then the downloaded packages will be stored 1776s there, to speed up subsequent retraces. 1776s 1776s If permanent_rootdir is True, then the sandbox created from the 1776s downloaded packages will be reused, to speed up subsequent retraces. 1776s 1776s If architecture is given, the sandbox will be created with packages of 1776s the given architecture (as specified in a report's "Architecture" 1776s field). If not given it defaults to the host system's architecture. 1776s 1776s If origins is given, the sandbox will be created with apt data sources 1776s for foreign origins. 1776s 1776s If install_deps is True, then the dependencies of packages will also 1776s be installed. 1776s 1776s Return a string with outdated packages, or an empty string if all 1776s packages were installed. 1776s 1776s If something is wrong with the environment (invalid configuration, 1776s package servers down, etc.), this should raise a SystemError with a 1776s meaningful error message. 1776s """ 1776s if not architecture: 1776s architecture = self.get_system_architecture() 1776s if not configdir: 1776s apt_dir = "/etc/apt" 1776s self._current_release_codename = self.get_distro_codename() 1776s else: 1776s # support architecture specific config, fall back to global config 1776s apt_dir = os.path.join(configdir, release) 1776s if architecture != self.get_system_architecture(): 1776s arch_apt_dir = os.path.join(configdir, release, architecture) 1776s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 1776s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 1776s if os.path.exists(arch_old_sources) or ( 1776s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 1776s ): 1776s apt_dir = arch_apt_dir 1776s 1776s # set mirror for get_file_package() 1776s try: 1776s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 1776s except SystemError as error: 1776s apport.logging.warning("cannot determine mirror: %s", str(error)) 1776s 1776s # set current release code name for _distro_release_to_codename 1776s with open( 1776s os.path.join(configdir, release, "codename"), encoding="utf-8" 1776s ) as f: 1776s self._current_release_codename = f.read().strip() 1776s 1776s # create apt sandbox 1776s if cache_dir: 1776s tmp_aptroot = False 1776s aptroot = self._apt_cache_root_dir( 1776s architecture, cache_dir, release if configdir else "system" 1776s ) 1776s if not os.path.isdir(aptroot): 1776s os.makedirs(aptroot) 1776s else: 1776s tmp_aptroot = True 1776s aptroot = tempfile.mkdtemp() 1776s 1776s apt.apt_pkg.config.set("APT::Architecture", architecture) 1776s apt.apt_pkg.config.set("Acquire::Languages", "none") 1776s # directly connect to Launchpad when downloading deb files 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 1776s 1776s if not verbose: 1776s fetchProgress = apt.progress.base.AcquireProgress() 1776s else: 1776s fetchProgress = apt.progress.text.AcquireProgress() 1776s if not tmp_aptroot: 1776s apt_cache = self._sandbox_cache( 1776s aptroot, 1776s apt_dir, 1776s fetchProgress, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s architecture, 1776s ) 1776s else: 1776s self._build_apt_sandbox( 1776s aptroot, 1776s apt_dir, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s ) 1776s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 1776s try: 1776s apt_cache.update(fetchProgress) 1776s except apt.cache.FetchFailedException as error: 1776s raise SystemError(str(error)) from error 1776s apt_cache.open() 1776s 1776s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 1776s 1776s obsolete = "" 1776s 1776s src_records = apt.apt_pkg.SourceRecords() 1776s 1776s # read original package list 1776s pkg_list = os.path.join(rootdir, "packages.txt") 1776s pkg_versions = {} 1776s if os.path.exists(pkg_list): 1776s with open(pkg_list, encoding="utf-8") as f: 1776s for line in f: 1776s line = line.strip() 1776s if not line: 1776s continue 1776s (p, v) = line.split() 1776s pkg_versions[p] = v 1776s 1776s # mark packages for installation 1776s real_pkgs = set() 1776s lp_cache = {} 1776s fetcher = apt.apt_pkg.Acquire(fetchProgress) 1776s # need to keep AcquireFile references 1776s acquire_queue = [] 1776s # add any dependencies to the packages list 1776s if install_deps: 1776s deps = [] 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s for dep in cache_pkg.candidate.dependencies: 1776s # the dependency may be satisfied by a different package 1776s if dep[0].name not in apt_cache: 1776s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 1776s # the version in dep is the one from pkg's dependencies, 1776s # so use the version from the cache 1776s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 1776s # if the dependency is in the list of packages we don't 1776s # need to look up its dependencies again 1776s if dep[0].name in [pkg[0] for pkg in packages]: 1776s continue 1776s # if the package is already extracted in the sandbox 1776s # because the report needs that package we don't want to 1776s # install a newer version which may cause a CRC mismatch 1776s # with the installed dbg symbols 1776s if dep[0].name in pkg_versions: 1776s inst_version = pkg_versions[dep[0].name] 1776s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 1776s deps.append((dep[0].name, inst_version)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s if dep[0].name not in [pkg[0] for pkg in packages]: 1776s packages.append((dep[0].name, None)) 1776s packages.extend(deps) 1776s 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s 1776s # try to select matching version 1776s try: 1776s if ver: 1776s cache_pkg.candidate = cache_pkg.versions[ver] 1776s except KeyError: 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s release, pkg, ver, architecture 1776s ) 1776s if lp_url: 1776s acquire_queue.append( 1776s apt.apt_pkg.AcquireFile( 1776s fetcher, lp_url, hash=f"sha1:{sha1sum}", destdir=archivedir 1776s ) 1776s ) 1776s lp_cache[pkg] = ver 1776s else: 1776s obsolete += ( 1776s f"{pkg} version {ver} required," 1776s f" but {cache_pkg.candidate.version} is available\n" 1776s ) 1776s ver = cache_pkg.candidate.version 1776s 1776s candidate = cache_pkg.candidate 1776s real_pkgs.add(pkg) 1776s 1776s if permanent_rootdir: 1776s self._remove_conflicting_packages( 1776s pkg, aptroot, apt_cache, candidate, archivedir, pkg_versions 1776s ) 1776s 1776s if candidate.architecture != "all" and install_dbg: 1776s try: 1776s dbg_pkg = f"{pkg}-dbg" 1776s > dbg = apt_cache[dbg_pkg] 1776s 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1193: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = , key = 'coreutils-dbg' 1776s 1776s def __getitem__(self, key: object) -> Package: 1776s """look like a dictionary (get key)""" 1776s try: 1776s key = str(key) 1776s rawpkg = self._cache[key] 1776s except KeyError: 1776s > raise KeyError("The cache has no package named %r" % key) 1776s E KeyError: "The cache has no package named 'coreutils-dbg'" 1776s 1776s /usr/lib/python3/dist-packages/apt/cache.py:279: KeyError 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s self = , key = 'coreutils-dbgsym' 1776s 1776s def __getitem__(self, key: object) -> Package: 1776s """look like a dictionary (get key)""" 1776s try: 1776s key = str(key) 1776s > rawpkg = self._cache[key] 1776s E KeyError: 'coreutils-dbgsym' 1776s 1776s /usr/lib/python3/dist-packages/apt/cache.py:277: KeyError 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s self = 1776s rootdir = '/tmp/tmpmooowab2/root', configdir = None, release = 'Ubuntu 25.04' 1776s packages = [('coreutils', '9.4-3.1ubuntu1'), ('tzdata', '1.1')], verbose = False 1776s cache_dir = '/tmp/tmpmooowab2/cache', permanent_rootdir = False 1776s architecture = 'amd64', origins = None, install_dbg = True, install_deps = False 1776s 1776s def install_packages( 1776s self, 1776s rootdir: str, 1776s configdir: str | None, 1776s release: str, 1776s packages: list[tuple[str, str | None]], 1776s verbose: bool = False, 1776s cache_dir: str | None = None, 1776s permanent_rootdir: bool = False, 1776s architecture: str | None = None, 1776s origins: Iterable[str] | None = None, 1776s install_dbg: bool = True, 1776s install_deps: bool = False, 1776s ) -> str: 1776s # TODO: Split into smaller functions/methods 1776s # pylint: disable=too-many-branches,too-many-locals 1776s # pylint: disable=too-many-nested-blocks,too-many-statements 1776s """Install packages into a sandbox (for apport-retrace). 1776s 1776s In order to work without any special permissions and without touching 1776s the running system, this should only download and unpack packages into 1776s the given root directory, not install them into the system. 1776s 1776s configdir points to a directory with by-release configuration files for 1776s the packaging system; this is completely dependent on the backend 1776s implementation, the only assumption is that this looks into 1776s configdir/release/, so that you can use retracing for multiple 1776s DistroReleases. As a special case, if configdir is None, it uses the 1776s current system configuration, and "release" is ignored. 1776s 1776s release is the value of the report's 'DistroRelease' field. 1776s 1776s packages is a list of ('packagename', 'version') tuples. If the version 1776s is None, it should install the most current available version. 1776s 1776s If cache_dir is given, then the downloaded packages will be stored 1776s there, to speed up subsequent retraces. 1776s 1776s If permanent_rootdir is True, then the sandbox created from the 1776s downloaded packages will be reused, to speed up subsequent retraces. 1776s 1776s If architecture is given, the sandbox will be created with packages of 1776s the given architecture (as specified in a report's "Architecture" 1776s field). If not given it defaults to the host system's architecture. 1776s 1776s If origins is given, the sandbox will be created with apt data sources 1776s for foreign origins. 1776s 1776s If install_deps is True, then the dependencies of packages will also 1776s be installed. 1776s 1776s Return a string with outdated packages, or an empty string if all 1776s packages were installed. 1776s 1776s If something is wrong with the environment (invalid configuration, 1776s package servers down, etc.), this should raise a SystemError with a 1776s meaningful error message. 1776s """ 1776s if not architecture: 1776s architecture = self.get_system_architecture() 1776s if not configdir: 1776s apt_dir = "/etc/apt" 1776s self._current_release_codename = self.get_distro_codename() 1776s else: 1776s # support architecture specific config, fall back to global config 1776s apt_dir = os.path.join(configdir, release) 1776s if architecture != self.get_system_architecture(): 1776s arch_apt_dir = os.path.join(configdir, release, architecture) 1776s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 1776s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 1776s if os.path.exists(arch_old_sources) or ( 1776s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 1776s ): 1776s apt_dir = arch_apt_dir 1776s 1776s # set mirror for get_file_package() 1776s try: 1776s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 1776s except SystemError as error: 1776s apport.logging.warning("cannot determine mirror: %s", str(error)) 1776s 1776s # set current release code name for _distro_release_to_codename 1776s with open( 1776s os.path.join(configdir, release, "codename"), encoding="utf-8" 1776s ) as f: 1776s self._current_release_codename = f.read().strip() 1776s 1776s # create apt sandbox 1776s if cache_dir: 1776s tmp_aptroot = False 1776s aptroot = self._apt_cache_root_dir( 1776s architecture, cache_dir, release if configdir else "system" 1776s ) 1776s if not os.path.isdir(aptroot): 1776s os.makedirs(aptroot) 1776s else: 1776s tmp_aptroot = True 1776s aptroot = tempfile.mkdtemp() 1776s 1776s apt.apt_pkg.config.set("APT::Architecture", architecture) 1776s apt.apt_pkg.config.set("Acquire::Languages", "none") 1776s # directly connect to Launchpad when downloading deb files 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 1776s 1776s if not verbose: 1776s fetchProgress = apt.progress.base.AcquireProgress() 1776s else: 1776s fetchProgress = apt.progress.text.AcquireProgress() 1776s if not tmp_aptroot: 1776s apt_cache = self._sandbox_cache( 1776s aptroot, 1776s apt_dir, 1776s fetchProgress, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s architecture, 1776s ) 1776s else: 1776s self._build_apt_sandbox( 1776s aptroot, 1776s apt_dir, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s ) 1776s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 1776s try: 1776s apt_cache.update(fetchProgress) 1776s except apt.cache.FetchFailedException as error: 1776s raise SystemError(str(error)) from error 1776s apt_cache.open() 1776s 1776s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 1776s 1776s obsolete = "" 1776s 1776s src_records = apt.apt_pkg.SourceRecords() 1776s 1776s # read original package list 1776s pkg_list = os.path.join(rootdir, "packages.txt") 1776s pkg_versions = {} 1776s if os.path.exists(pkg_list): 1776s with open(pkg_list, encoding="utf-8") as f: 1776s for line in f: 1776s line = line.strip() 1776s if not line: 1776s continue 1776s (p, v) = line.split() 1776s pkg_versions[p] = v 1776s 1776s # mark packages for installation 1776s real_pkgs = set() 1776s lp_cache = {} 1776s fetcher = apt.apt_pkg.Acquire(fetchProgress) 1776s # need to keep AcquireFile references 1776s acquire_queue = [] 1776s # add any dependencies to the packages list 1776s if install_deps: 1776s deps = [] 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s for dep in cache_pkg.candidate.dependencies: 1776s # the dependency may be satisfied by a different package 1776s if dep[0].name not in apt_cache: 1776s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 1776s # the version in dep is the one from pkg's dependencies, 1776s # so use the version from the cache 1776s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 1776s # if the dependency is in the list of packages we don't 1776s # need to look up its dependencies again 1776s if dep[0].name in [pkg[0] for pkg in packages]: 1776s continue 1776s # if the package is already extracted in the sandbox 1776s # because the report needs that package we don't want to 1776s # install a newer version which may cause a CRC mismatch 1776s # with the installed dbg symbols 1776s if dep[0].name in pkg_versions: 1776s inst_version = pkg_versions[dep[0].name] 1776s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 1776s deps.append((dep[0].name, inst_version)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s if dep[0].name not in [pkg[0] for pkg in packages]: 1776s packages.append((dep[0].name, None)) 1776s packages.extend(deps) 1776s 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s 1776s # try to select matching version 1776s try: 1776s if ver: 1776s cache_pkg.candidate = cache_pkg.versions[ver] 1776s except KeyError: 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s release, pkg, ver, architecture 1776s ) 1776s if lp_url: 1776s acquire_queue.append( 1776s apt.apt_pkg.AcquireFile( 1776s fetcher, lp_url, hash=f"sha1:{sha1sum}", destdir=archivedir 1776s ) 1776s ) 1776s lp_cache[pkg] = ver 1776s else: 1776s obsolete += ( 1776s f"{pkg} version {ver} required," 1776s f" but {cache_pkg.candidate.version} is available\n" 1776s ) 1776s ver = cache_pkg.candidate.version 1776s 1776s candidate = cache_pkg.candidate 1776s real_pkgs.add(pkg) 1776s 1776s if permanent_rootdir: 1776s self._remove_conflicting_packages( 1776s pkg, aptroot, apt_cache, candidate, archivedir, pkg_versions 1776s ) 1776s 1776s if candidate.architecture != "all" and install_dbg: 1776s try: 1776s dbg_pkg = f"{pkg}-dbg" 1776s dbg = apt_cache[dbg_pkg] 1776s pkg_found = False 1776s # try to get the same version as pkg 1776s if ver: 1776s try: 1776s dbg.candidate = dbg.versions[ver] 1776s pkg_found = True 1776s except KeyError: 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s release, dbg_pkg, ver, architecture 1776s ) 1776s if lp_url: 1776s acquire_queue.append( 1776s apt.apt_pkg.AcquireFile( 1776s fetcher, 1776s lp_url, 1776s hash=f"sha1:{sha1sum}", 1776s destdir=archivedir, 1776s ) 1776s ) 1776s lp_cache[dbg_pkg] = ver 1776s pkg_found = True 1776s # if it can't be found in Launchpad failover to a 1776s # code path that'll use -dbgsym packages 1776s else: 1776s raise 1776s if not pkg_found: 1776s try: 1776s dbg.candidate = dbg.versions[candidate.version] 1776s except KeyError: 1776s obsolete += ( 1776s f"outdated -dbg package for {pkg}:" 1776s f" package version {ver}" 1776s f" -dbg version {dbg.candidate.version}\n" 1776s ) 1776s real_pkgs.add(dbg_pkg) 1776s except KeyError: 1776s # install all -dbg from the source package; lookup() just 1776s # works from the current list pointer, we always need to 1776s # start from the beginning 1776s src_records.restart() 1776s if src_records.lookup(candidate.source_name): 1776s # ignore transitional packages 1776s # False positive, see 1776s # https://github.com/PyCQA/pylint/issues/7122 1776s # pylint: disable=not-an-iterable 1776s dbgs = [ 1776s p 1776s for p in src_records.binaries 1776s if p.endswith("-dbg") 1776s and p in apt_cache 1776s and "transitional" not in apt_cache[p].candidate.description 1776s ] 1776s # if a specific version of a package was requested 1776s # only install dbg pkgs whose version matches 1776s if ver: 1776s for dbg in dbgs: 1776s if apt_cache[dbg].candidate.version != ver: 1776s dbgs.remove(dbg) 1776s else: 1776s dbgs = [] 1776s if dbgs: 1776s for p in dbgs: 1776s # if the package has already been added to 1776s # real_pkgs don't search for it again 1776s if p in real_pkgs: 1776s continue 1776s pkg_found = False 1776s # prefer the version requested 1776s if ver: 1776s try: 1776s apt_cache[p].candidate = apt_cache[p].versions[ver] 1776s pkg_found = True 1776s except KeyError: 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s release, p, ver, architecture 1776s ) 1776s if lp_url: 1776s acquire_queue.append( 1776s apt.apt_pkg.AcquireFile( 1776s fetcher, 1776s lp_url, 1776s hash=f"sha1:{sha1sum}", 1776s destdir=archivedir, 1776s ) 1776s ) 1776s lp_cache[p] = ver 1776s pkg_found = True 1776s if not pkg_found: 1776s try: 1776s apt_cache[p].candidate = apt_cache[p].versions[ 1776s candidate.version 1776s ] 1776s except KeyError: 1776s # we don't really expect that, but it's 1776s # possible that other binaries have a 1776s # different version 1776s pass 1776s real_pkgs.add(p) 1776s else: 1776s pkg_found = False 1776s dbgsym_pkg = f"{pkg}-dbgsym" 1776s try: 1776s > dbgsym = apt_cache[dbgsym_pkg] 1776s 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1296: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = , key = 'coreutils-dbgsym' 1776s 1776s def __getitem__(self, key: object) -> Package: 1776s """look like a dictionary (get key)""" 1776s try: 1776s key = str(key) 1776s rawpkg = self._cache[key] 1776s except KeyError: 1776s > raise KeyError("The cache has no package named %r" % key) 1776s E KeyError: "The cache has no package named 'coreutils-dbgsym'" 1776s 1776s /usr/lib/python3/dist-packages/apt/cache.py:279: KeyError 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s cachedir = '/tmp/tmpmooowab2/cache', workdir = '/tmp/tmpmooowab2' 1776s rootdir = '/tmp/tmpmooowab2/root', apt_style = 'deb822' 1776s 1776s @pytest.mark.skipif(not has_internet(), reason="online test") 1776s def test_install_packages_system( 1776s cachedir: str, workdir: str, rootdir: str, apt_style: AptStyle 1776s ) -> None: 1776s # pylint: disable=unused-argument 1776s """install_packages() with system configuration""" 1776s # trigger an unrelated package query here to get the cache set up, 1776s # reproducing an install failure when the internal caches are not 1776s # reset properly 1776s impl.get_version("dash") 1776s 1776s release = " ".join(impl.get_os_version()) 1776s cachedir = os.path.join(workdir, "cache") 1776s rootdir = os.path.join(workdir, "root") 1776s 1776s > result = impl.install_packages( 1776s rootdir, 1776s None, 1776s release, 1776s [("coreutils", impl.get_version("coreutils")), ("tzdata", "1.1")], 1776s False, 1776s cachedir, 1776s ) 1776s 1776s tests/system/test_packaging_apt_dpkg.py:327: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1334: in install_packages 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:423: in get_lp_binary_package 1776s launchpad = Launchpad.login_anonymously( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:487: in login_anonymously 1776s return cls( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:223: in __init__ 1776s super().__init__( 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/resource.py:511: in __init__ 1776s self._wadl = self._browser.get_wadl_application(self._root_uri) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:502: in get_wadl_application 1776s response, content = self._request(url, media_type=wadl_type) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:441: in _request 1776s response, content = self._request_and_retry( 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:400: in _request_and_retry 1776s response, content = self._connection.request( 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1724: in request 1776s (response, content) = self._request( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:139: in _request 1776s response, content = super()._request(*args) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:204: in _request 1776s return super(RestfulHttp, self)._request( 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1444: in _request 1776s (response, content) = self._conn_request(conn, request_uri, method, body, headers) 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1366: in _conn_request 1776s conn.connect() 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1156: in connect 1776s sock.connect((self.host, self.port)) 1776s /usr/lib/python3/dist-packages/httplib2/socks.py:504: in connect 1776s self.__negotiatehttp(destpair[0], destpair[1]) 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = 1776s destaddr = 'api.launchpad.net', destport = 443 1776s 1776s def __negotiatehttp(self, destaddr, destport): 1776s """__negotiatehttp(self,destaddr,destport) 1776s Negotiates a connection through an HTTP server. 1776s """ 1776s # If we need to resolve locally, we do this now 1776s if not self.__proxy[3]: 1776s addr = socket.gethostbyname(destaddr) 1776s else: 1776s addr = destaddr 1776s headers = ["CONNECT ", addr, ":", str(destport), " HTTP/1.1\r\n"] 1776s wrote_host_header = False 1776s wrote_auth_header = False 1776s if self.__proxy[6] != None: 1776s for key, val in self.__proxy[6].iteritems(): 1776s headers += [key, ": ", val, "\r\n"] 1776s wrote_host_header = key.lower() == "host" 1776s wrote_auth_header = key.lower() == "proxy-authorization" 1776s if not wrote_host_header: 1776s headers += ["Host: ", destaddr, "\r\n"] 1776s if not wrote_auth_header: 1776s if self.__proxy[4] != None and self.__proxy[5] != None: 1776s headers += [self.__getauthheader(), "\r\n"] 1776s headers.append("\r\n") 1776s self.sendall("".join(headers).encode()) 1776s # We read the response until we get the string "\r\n\r\n" 1776s resp = self.recv(1) 1776s while resp.find("\r\n\r\n".encode()) == -1: 1776s resp = resp + self.recv(1) 1776s # We just need the first line to check if the connection 1776s # was successful 1776s statusline = resp.splitlines()[0].split(" ".encode(), 2) 1776s if statusline[0] not in ("HTTP/1.0".encode(), "HTTP/1.1".encode()): 1776s self.close() 1776s raise GeneralProxyError((1, _generalerrors[1])) 1776s try: 1776s statuscode = int(statusline[1]) 1776s except ValueError: 1776s self.close() 1776s raise GeneralProxyError((1, _generalerrors[1])) 1776s if statuscode != 200: 1776s self.close() 1776s > raise HTTPError((statuscode, statusline[2])) 1776s E httplib2.socks.HTTPError: (403, b'Forbidden') 1776s 1776s /usr/lib/python3/dist-packages/httplib2/socks.py:465: HTTPError 1776s ____________________ test_install_packages_armhf[one-line] _____________________ 1776s 1776s self = 1776s rootdir = '/tmp/tmpcul3anaa/root', configdir = '/tmp/tmpcul3anaa/config' 1776s release = 'Foonux 22.04' 1776s packages = [('coreutils', None), ('libc6', '2.35-0ubuntu0')], verbose = False 1776s cache_dir = '/tmp/tmpcul3anaa/cache', permanent_rootdir = False 1776s architecture = 'armhf', origins = None, install_dbg = True, install_deps = False 1776s 1776s def install_packages( 1776s self, 1776s rootdir: str, 1776s configdir: str | None, 1776s release: str, 1776s packages: list[tuple[str, str | None]], 1776s verbose: bool = False, 1776s cache_dir: str | None = None, 1776s permanent_rootdir: bool = False, 1776s architecture: str | None = None, 1776s origins: Iterable[str] | None = None, 1776s install_dbg: bool = True, 1776s install_deps: bool = False, 1776s ) -> str: 1776s # TODO: Split into smaller functions/methods 1776s # pylint: disable=too-many-branches,too-many-locals 1776s # pylint: disable=too-many-nested-blocks,too-many-statements 1776s """Install packages into a sandbox (for apport-retrace). 1776s 1776s In order to work without any special permissions and without touching 1776s the running system, this should only download and unpack packages into 1776s the given root directory, not install them into the system. 1776s 1776s configdir points to a directory with by-release configuration files for 1776s the packaging system; this is completely dependent on the backend 1776s implementation, the only assumption is that this looks into 1776s configdir/release/, so that you can use retracing for multiple 1776s DistroReleases. As a special case, if configdir is None, it uses the 1776s current system configuration, and "release" is ignored. 1776s 1776s release is the value of the report's 'DistroRelease' field. 1776s 1776s packages is a list of ('packagename', 'version') tuples. If the version 1776s is None, it should install the most current available version. 1776s 1776s If cache_dir is given, then the downloaded packages will be stored 1776s there, to speed up subsequent retraces. 1776s 1776s If permanent_rootdir is True, then the sandbox created from the 1776s downloaded packages will be reused, to speed up subsequent retraces. 1776s 1776s If architecture is given, the sandbox will be created with packages of 1776s the given architecture (as specified in a report's "Architecture" 1776s field). If not given it defaults to the host system's architecture. 1776s 1776s If origins is given, the sandbox will be created with apt data sources 1776s for foreign origins. 1776s 1776s If install_deps is True, then the dependencies of packages will also 1776s be installed. 1776s 1776s Return a string with outdated packages, or an empty string if all 1776s packages were installed. 1776s 1776s If something is wrong with the environment (invalid configuration, 1776s package servers down, etc.), this should raise a SystemError with a 1776s meaningful error message. 1776s """ 1776s if not architecture: 1776s architecture = self.get_system_architecture() 1776s if not configdir: 1776s apt_dir = "/etc/apt" 1776s self._current_release_codename = self.get_distro_codename() 1776s else: 1776s # support architecture specific config, fall back to global config 1776s apt_dir = os.path.join(configdir, release) 1776s if architecture != self.get_system_architecture(): 1776s arch_apt_dir = os.path.join(configdir, release, architecture) 1776s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 1776s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 1776s if os.path.exists(arch_old_sources) or ( 1776s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 1776s ): 1776s apt_dir = arch_apt_dir 1776s 1776s # set mirror for get_file_package() 1776s try: 1776s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 1776s except SystemError as error: 1776s apport.logging.warning("cannot determine mirror: %s", str(error)) 1776s 1776s # set current release code name for _distro_release_to_codename 1776s with open( 1776s os.path.join(configdir, release, "codename"), encoding="utf-8" 1776s ) as f: 1776s self._current_release_codename = f.read().strip() 1776s 1776s # create apt sandbox 1776s if cache_dir: 1776s tmp_aptroot = False 1776s aptroot = self._apt_cache_root_dir( 1776s architecture, cache_dir, release if configdir else "system" 1776s ) 1776s if not os.path.isdir(aptroot): 1776s os.makedirs(aptroot) 1776s else: 1776s tmp_aptroot = True 1776s aptroot = tempfile.mkdtemp() 1776s 1776s apt.apt_pkg.config.set("APT::Architecture", architecture) 1776s apt.apt_pkg.config.set("Acquire::Languages", "none") 1776s # directly connect to Launchpad when downloading deb files 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 1776s 1776s if not verbose: 1776s fetchProgress = apt.progress.base.AcquireProgress() 1776s else: 1776s fetchProgress = apt.progress.text.AcquireProgress() 1776s if not tmp_aptroot: 1776s apt_cache = self._sandbox_cache( 1776s aptroot, 1776s apt_dir, 1776s fetchProgress, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s architecture, 1776s ) 1776s else: 1776s self._build_apt_sandbox( 1776s aptroot, 1776s apt_dir, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s ) 1776s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 1776s try: 1776s apt_cache.update(fetchProgress) 1776s except apt.cache.FetchFailedException as error: 1776s raise SystemError(str(error)) from error 1776s apt_cache.open() 1776s 1776s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 1776s 1776s obsolete = "" 1776s 1776s src_records = apt.apt_pkg.SourceRecords() 1776s 1776s # read original package list 1776s pkg_list = os.path.join(rootdir, "packages.txt") 1776s pkg_versions = {} 1776s if os.path.exists(pkg_list): 1776s with open(pkg_list, encoding="utf-8") as f: 1776s for line in f: 1776s line = line.strip() 1776s if not line: 1776s continue 1776s (p, v) = line.split() 1776s pkg_versions[p] = v 1776s 1776s # mark packages for installation 1776s real_pkgs = set() 1776s lp_cache = {} 1776s fetcher = apt.apt_pkg.Acquire(fetchProgress) 1776s # need to keep AcquireFile references 1776s acquire_queue = [] 1776s # add any dependencies to the packages list 1776s if install_deps: 1776s deps = [] 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s for dep in cache_pkg.candidate.dependencies: 1776s # the dependency may be satisfied by a different package 1776s if dep[0].name not in apt_cache: 1776s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 1776s # the version in dep is the one from pkg's dependencies, 1776s # so use the version from the cache 1776s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 1776s # if the dependency is in the list of packages we don't 1776s # need to look up its dependencies again 1776s if dep[0].name in [pkg[0] for pkg in packages]: 1776s continue 1776s # if the package is already extracted in the sandbox 1776s # because the report needs that package we don't want to 1776s # install a newer version which may cause a CRC mismatch 1776s # with the installed dbg symbols 1776s if dep[0].name in pkg_versions: 1776s inst_version = pkg_versions[dep[0].name] 1776s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 1776s deps.append((dep[0].name, inst_version)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s if dep[0].name not in [pkg[0] for pkg in packages]: 1776s packages.append((dep[0].name, None)) 1776s packages.extend(deps) 1776s 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s 1776s # try to select matching version 1776s try: 1776s if ver: 1776s > cache_pkg.candidate = cache_pkg.versions[ver] 1776s 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1163: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = , item = '2.35-0ubuntu0' 1776s 1776s def __getitem__(self, item: int | slice | str) -> Any: 1776s # FIXME: Should not be returning Any, should have overloads; but 1776s # pyflakes complains 1776s if isinstance(item, slice): 1776s return self.__class__(self._package, item) 1776s try: 1776s # Sequence interface, item is an integer 1776s return Version(self._package, self._versions[item]) # type: ignore 1776s except TypeError: 1776s # Dictionary interface item is a string. 1776s for ver in self._versions: 1776s if ver.ver_str == item: 1776s return Version(self._package, ver) 1776s > raise KeyError("Version: %r not found." % (item)) 1776s E KeyError: "Version: '2.35-0ubuntu0' not found." 1776s 1776s /usr/lib/python3/dist-packages/apt/package.py:956: KeyError 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s configdir = '/tmp/tmpcul3anaa/config', cachedir = '/tmp/tmpcul3anaa/cache' 1776s rootdir = '/tmp/tmpcul3anaa/root', apt_style = 'one-line' 1776s 1776s @pytest.mark.skipif(not has_internet(), reason="online test") 1776s @pytest.mark.skipif( 1776s impl.get_system_architecture() == "armhf", reason="native armhf architecture" 1776s ) 1776s def test_install_packages_armhf( 1776s configdir: str, cachedir: str, rootdir: str, apt_style: AptStyle 1776s ) -> None: 1776s """install_packages() for foreign architecture armhf""" 1776s release = _setup_foonux_config(configdir, apt_style) 1776s wanted_version = "2.35-0ubuntu0" 1776s got_version = "2.35-0ubuntu3" 1776s > obsolete = impl.install_packages( 1776s rootdir, 1776s configdir, 1776s release, 1776s [("coreutils", None), ("libc6", wanted_version)], 1776s False, 1776s cachedir, 1776s architecture="armhf", 1776s ) 1776s 1776s tests/system/test_packaging_apt_dpkg.py:563: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1165: in install_packages 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:423: in get_lp_binary_package 1776s launchpad = Launchpad.login_anonymously( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:487: in login_anonymously 1776s return cls( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:223: in __init__ 1776s super().__init__( 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/resource.py:511: in __init__ 1776s self._wadl = self._browser.get_wadl_application(self._root_uri) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:502: in get_wadl_application 1776s response, content = self._request(url, media_type=wadl_type) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:441: in _request 1776s response, content = self._request_and_retry( 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:400: in _request_and_retry 1776s response, content = self._connection.request( 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1724: in request 1776s (response, content) = self._request( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:139: in _request 1776s response, content = super()._request(*args) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:204: in _request 1776s return super(RestfulHttp, self)._request( 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1444: in _request 1776s (response, content) = self._conn_request(conn, request_uri, method, body, headers) 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1366: in _conn_request 1776s conn.connect() 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1156: in connect 1776s sock.connect((self.host, self.port)) 1776s /usr/lib/python3/dist-packages/httplib2/socks.py:504: in connect 1776s self.__negotiatehttp(destpair[0], destpair[1]) 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = 1776s destaddr = 'api.launchpad.net', destport = 443 1776s 1776s def __negotiatehttp(self, destaddr, destport): 1776s """__negotiatehttp(self,destaddr,destport) 1776s Negotiates a connection through an HTTP server. 1776s """ 1776s # If we need to resolve locally, we do this now 1776s if not self.__proxy[3]: 1776s addr = socket.gethostbyname(destaddr) 1776s else: 1776s addr = destaddr 1776s headers = ["CONNECT ", addr, ":", str(destport), " HTTP/1.1\r\n"] 1776s wrote_host_header = False 1776s wrote_auth_header = False 1776s if self.__proxy[6] != None: 1776s for key, val in self.__proxy[6].iteritems(): 1776s headers += [key, ": ", val, "\r\n"] 1776s wrote_host_header = key.lower() == "host" 1776s wrote_auth_header = key.lower() == "proxy-authorization" 1776s if not wrote_host_header: 1776s headers += ["Host: ", destaddr, "\r\n"] 1776s if not wrote_auth_header: 1776s if self.__proxy[4] != None and self.__proxy[5] != None: 1776s headers += [self.__getauthheader(), "\r\n"] 1776s headers.append("\r\n") 1776s self.sendall("".join(headers).encode()) 1776s # We read the response until we get the string "\r\n\r\n" 1776s resp = self.recv(1) 1776s while resp.find("\r\n\r\n".encode()) == -1: 1776s resp = resp + self.recv(1) 1776s # We just need the first line to check if the connection 1776s # was successful 1776s statusline = resp.splitlines()[0].split(" ".encode(), 2) 1776s if statusline[0] not in ("HTTP/1.0".encode(), "HTTP/1.1".encode()): 1776s self.close() 1776s raise GeneralProxyError((1, _generalerrors[1])) 1776s try: 1776s statuscode = int(statusline[1]) 1776s except ValueError: 1776s self.close() 1776s raise GeneralProxyError((1, _generalerrors[1])) 1776s if statuscode != 200: 1776s self.close() 1776s > raise HTTPError((statuscode, statusline[2])) 1776s E httplib2.socks.HTTPError: (403, b'Forbidden') 1776s 1776s /usr/lib/python3/dist-packages/httplib2/socks.py:465: HTTPError 1776s _____________________ test_install_packages_armhf[deb822] ______________________ 1776s 1776s self = 1776s rootdir = '/tmp/tmpdv2dtk6y/root', configdir = '/tmp/tmpdv2dtk6y/config' 1776s release = 'Foonux 22.04' 1776s packages = [('coreutils', None), ('libc6', '2.35-0ubuntu0')], verbose = False 1776s cache_dir = '/tmp/tmpdv2dtk6y/cache', permanent_rootdir = False 1776s architecture = 'armhf', origins = None, install_dbg = True, install_deps = False 1776s 1776s def install_packages( 1776s self, 1776s rootdir: str, 1776s configdir: str | None, 1776s release: str, 1776s packages: list[tuple[str, str | None]], 1776s verbose: bool = False, 1776s cache_dir: str | None = None, 1776s permanent_rootdir: bool = False, 1776s architecture: str | None = None, 1776s origins: Iterable[str] | None = None, 1776s install_dbg: bool = True, 1776s install_deps: bool = False, 1776s ) -> str: 1776s # TODO: Split into smaller functions/methods 1776s # pylint: disable=too-many-branches,too-many-locals 1776s # pylint: disable=too-many-nested-blocks,too-many-statements 1776s """Install packages into a sandbox (for apport-retrace). 1776s 1776s In order to work without any special permissions and without touching 1776s the running system, this should only download and unpack packages into 1776s the given root directory, not install them into the system. 1776s 1776s configdir points to a directory with by-release configuration files for 1776s the packaging system; this is completely dependent on the backend 1776s implementation, the only assumption is that this looks into 1776s configdir/release/, so that you can use retracing for multiple 1776s DistroReleases. As a special case, if configdir is None, it uses the 1776s current system configuration, and "release" is ignored. 1776s 1776s release is the value of the report's 'DistroRelease' field. 1776s 1776s packages is a list of ('packagename', 'version') tuples. If the version 1776s is None, it should install the most current available version. 1776s 1776s If cache_dir is given, then the downloaded packages will be stored 1776s there, to speed up subsequent retraces. 1776s 1776s If permanent_rootdir is True, then the sandbox created from the 1776s downloaded packages will be reused, to speed up subsequent retraces. 1776s 1776s If architecture is given, the sandbox will be created with packages of 1776s the given architecture (as specified in a report's "Architecture" 1776s field). If not given it defaults to the host system's architecture. 1776s 1776s If origins is given, the sandbox will be created with apt data sources 1776s for foreign origins. 1776s 1776s If install_deps is True, then the dependencies of packages will also 1776s be installed. 1776s 1776s Return a string with outdated packages, or an empty string if all 1776s packages were installed. 1776s 1776s If something is wrong with the environment (invalid configuration, 1776s package servers down, etc.), this should raise a SystemError with a 1776s meaningful error message. 1776s """ 1776s if not architecture: 1776s architecture = self.get_system_architecture() 1776s if not configdir: 1776s apt_dir = "/etc/apt" 1776s self._current_release_codename = self.get_distro_codename() 1776s else: 1776s # support architecture specific config, fall back to global config 1776s apt_dir = os.path.join(configdir, release) 1776s if architecture != self.get_system_architecture(): 1776s arch_apt_dir = os.path.join(configdir, release, architecture) 1776s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 1776s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 1776s if os.path.exists(arch_old_sources) or ( 1776s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 1776s ): 1776s apt_dir = arch_apt_dir 1776s 1776s # set mirror for get_file_package() 1776s try: 1776s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 1776s except SystemError as error: 1776s apport.logging.warning("cannot determine mirror: %s", str(error)) 1776s 1776s # set current release code name for _distro_release_to_codename 1776s with open( 1776s os.path.join(configdir, release, "codename"), encoding="utf-8" 1776s ) as f: 1776s self._current_release_codename = f.read().strip() 1776s 1776s # create apt sandbox 1776s if cache_dir: 1776s tmp_aptroot = False 1776s aptroot = self._apt_cache_root_dir( 1776s architecture, cache_dir, release if configdir else "system" 1776s ) 1776s if not os.path.isdir(aptroot): 1776s os.makedirs(aptroot) 1776s else: 1776s tmp_aptroot = True 1776s aptroot = tempfile.mkdtemp() 1776s 1776s apt.apt_pkg.config.set("APT::Architecture", architecture) 1776s apt.apt_pkg.config.set("Acquire::Languages", "none") 1776s # directly connect to Launchpad when downloading deb files 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 1776s 1776s if not verbose: 1776s fetchProgress = apt.progress.base.AcquireProgress() 1776s else: 1776s fetchProgress = apt.progress.text.AcquireProgress() 1776s if not tmp_aptroot: 1776s apt_cache = self._sandbox_cache( 1776s aptroot, 1776s apt_dir, 1776s fetchProgress, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s architecture, 1776s ) 1776s else: 1776s self._build_apt_sandbox( 1776s aptroot, 1776s apt_dir, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s ) 1776s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 1776s try: 1776s apt_cache.update(fetchProgress) 1776s except apt.cache.FetchFailedException as error: 1776s raise SystemError(str(error)) from error 1776s apt_cache.open() 1776s 1776s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 1776s 1776s obsolete = "" 1776s 1776s src_records = apt.apt_pkg.SourceRecords() 1776s 1776s # read original package list 1776s pkg_list = os.path.join(rootdir, "packages.txt") 1776s pkg_versions = {} 1776s if os.path.exists(pkg_list): 1776s with open(pkg_list, encoding="utf-8") as f: 1776s for line in f: 1776s line = line.strip() 1776s if not line: 1776s continue 1776s (p, v) = line.split() 1776s pkg_versions[p] = v 1776s 1776s # mark packages for installation 1776s real_pkgs = set() 1776s lp_cache = {} 1776s fetcher = apt.apt_pkg.Acquire(fetchProgress) 1776s # need to keep AcquireFile references 1776s acquire_queue = [] 1776s # add any dependencies to the packages list 1776s if install_deps: 1776s deps = [] 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s for dep in cache_pkg.candidate.dependencies: 1776s # the dependency may be satisfied by a different package 1776s if dep[0].name not in apt_cache: 1776s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 1776s # the version in dep is the one from pkg's dependencies, 1776s # so use the version from the cache 1776s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 1776s # if the dependency is in the list of packages we don't 1776s # need to look up its dependencies again 1776s if dep[0].name in [pkg[0] for pkg in packages]: 1776s continue 1776s # if the package is already extracted in the sandbox 1776s # because the report needs that package we don't want to 1776s # install a newer version which may cause a CRC mismatch 1776s # with the installed dbg symbols 1776s if dep[0].name in pkg_versions: 1776s inst_version = pkg_versions[dep[0].name] 1776s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 1776s deps.append((dep[0].name, inst_version)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s if dep[0].name not in [pkg[0] for pkg in packages]: 1776s packages.append((dep[0].name, None)) 1776s packages.extend(deps) 1776s 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s 1776s # try to select matching version 1776s try: 1776s if ver: 1776s > cache_pkg.candidate = cache_pkg.versions[ver] 1776s 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1163: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = , item = '2.35-0ubuntu0' 1776s 1776s def __getitem__(self, item: int | slice | str) -> Any: 1776s # FIXME: Should not be returning Any, should have overloads; but 1776s # pyflakes complains 1776s if isinstance(item, slice): 1776s return self.__class__(self._package, item) 1776s try: 1776s # Sequence interface, item is an integer 1776s return Version(self._package, self._versions[item]) # type: ignore 1776s except TypeError: 1776s # Dictionary interface item is a string. 1776s for ver in self._versions: 1776s if ver.ver_str == item: 1776s return Version(self._package, ver) 1776s > raise KeyError("Version: %r not found." % (item)) 1776s E KeyError: "Version: '2.35-0ubuntu0' not found." 1776s 1776s /usr/lib/python3/dist-packages/apt/package.py:956: KeyError 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s configdir = '/tmp/tmpdv2dtk6y/config', cachedir = '/tmp/tmpdv2dtk6y/cache' 1776s rootdir = '/tmp/tmpdv2dtk6y/root', apt_style = 'deb822' 1776s 1776s @pytest.mark.skipif(not has_internet(), reason="online test") 1776s @pytest.mark.skipif( 1776s impl.get_system_architecture() == "armhf", reason="native armhf architecture" 1776s ) 1776s def test_install_packages_armhf( 1776s configdir: str, cachedir: str, rootdir: str, apt_style: AptStyle 1776s ) -> None: 1776s """install_packages() for foreign architecture armhf""" 1776s release = _setup_foonux_config(configdir, apt_style) 1776s wanted_version = "2.35-0ubuntu0" 1776s got_version = "2.35-0ubuntu3" 1776s > obsolete = impl.install_packages( 1776s rootdir, 1776s configdir, 1776s release, 1776s [("coreutils", None), ("libc6", wanted_version)], 1776s False, 1776s cachedir, 1776s architecture="armhf", 1776s ) 1776s 1776s tests/system/test_packaging_apt_dpkg.py:563: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1165: in install_packages 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:423: in get_lp_binary_package 1776s launchpad = Launchpad.login_anonymously( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:487: in login_anonymously 1776s return cls( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:223: in __init__ 1776s super().__init__( 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/resource.py:511: in __init__ 1776s self._wadl = self._browser.get_wadl_application(self._root_uri) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:502: in get_wadl_application 1776s response, content = self._request(url, media_type=wadl_type) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:441: in _request 1776s response, content = self._request_and_retry( 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:400: in _request_and_retry 1776s response, content = self._connection.request( 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1724: in request 1776s (response, content) = self._request( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:139: in _request 1776s response, content = super()._request(*args) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:204: in _request 1776s return super(RestfulHttp, self)._request( 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1444: in _request 1776s (response, content) = self._conn_request(conn, request_uri, method, body, headers) 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1366: in _conn_request 1776s conn.connect() 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1156: in connect 1776s sock.connect((self.host, self.port)) 1776s /usr/lib/python3/dist-packages/httplib2/socks.py:504: in connect 1776s self.__negotiatehttp(destpair[0], destpair[1]) 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = 1776s destaddr = 'api.launchpad.net', destport = 443 1776s 1776s def __negotiatehttp(self, destaddr, destport): 1776s """__negotiatehttp(self,destaddr,destport) 1776s Negotiates a connection through an HTTP server. 1776s """ 1776s # If we need to resolve locally, we do this now 1776s if not self.__proxy[3]: 1776s addr = socket.gethostbyname(destaddr) 1776s else: 1776s addr = destaddr 1776s headers = ["CONNECT ", addr, ":", str(destport), " HTTP/1.1\r\n"] 1776s wrote_host_header = False 1776s wrote_auth_header = False 1776s if self.__proxy[6] != None: 1776s for key, val in self.__proxy[6].iteritems(): 1776s headers += [key, ": ", val, "\r\n"] 1776s wrote_host_header = key.lower() == "host" 1776s wrote_auth_header = key.lower() == "proxy-authorization" 1776s if not wrote_host_header: 1776s headers += ["Host: ", destaddr, "\r\n"] 1776s if not wrote_auth_header: 1776s if self.__proxy[4] != None and self.__proxy[5] != None: 1776s headers += [self.__getauthheader(), "\r\n"] 1776s headers.append("\r\n") 1776s self.sendall("".join(headers).encode()) 1776s # We read the response until we get the string "\r\n\r\n" 1776s resp = self.recv(1) 1776s while resp.find("\r\n\r\n".encode()) == -1: 1776s resp = resp + self.recv(1) 1776s # We just need the first line to check if the connection 1776s # was successful 1776s statusline = resp.splitlines()[0].split(" ".encode(), 2) 1776s if statusline[0] not in ("HTTP/1.0".encode(), "HTTP/1.1".encode()): 1776s self.close() 1776s raise GeneralProxyError((1, _generalerrors[1])) 1776s try: 1776s statuscode = int(statusline[1]) 1776s except ValueError: 1776s self.close() 1776s raise GeneralProxyError((1, _generalerrors[1])) 1776s if statuscode != 200: 1776s self.close() 1776s > raise HTTPError((statuscode, statusline[2])) 1776s E httplib2.socks.HTTPError: (403, b'Forbidden') 1776s 1776s /usr/lib/python3/dist-packages/httplib2/socks.py:465: HTTPError 1776s ________________ test_install_packages_from_launchpad[one-line] ________________ 1776s 1776s self = 1776s rootdir = '/tmp/tmp68li7f1i/root', configdir = '/tmp/tmp68li7f1i/config' 1776s release = 'Foonux 20.04' 1776s packages = [('distro-info-data', '0.43ubuntu1.9'), ('libc6', '2.31-0ubuntu9.4'), ('qemu-utils', '1:4.2-3ubuntu6.1')] 1776s verbose = False, cache_dir = '/tmp/tmp68li7f1i/cache', permanent_rootdir = False 1776s architecture = 'amd64', origins = None, install_dbg = True, install_deps = False 1776s 1776s def install_packages( 1776s self, 1776s rootdir: str, 1776s configdir: str | None, 1776s release: str, 1776s packages: list[tuple[str, str | None]], 1776s verbose: bool = False, 1776s cache_dir: str | None = None, 1776s permanent_rootdir: bool = False, 1776s architecture: str | None = None, 1776s origins: Iterable[str] | None = None, 1776s install_dbg: bool = True, 1776s install_deps: bool = False, 1776s ) -> str: 1776s # TODO: Split into smaller functions/methods 1776s # pylint: disable=too-many-branches,too-many-locals 1776s # pylint: disable=too-many-nested-blocks,too-many-statements 1776s """Install packages into a sandbox (for apport-retrace). 1776s 1776s In order to work without any special permissions and without touching 1776s the running system, this should only download and unpack packages into 1776s the given root directory, not install them into the system. 1776s 1776s configdir points to a directory with by-release configuration files for 1776s the packaging system; this is completely dependent on the backend 1776s implementation, the only assumption is that this looks into 1776s configdir/release/, so that you can use retracing for multiple 1776s DistroReleases. As a special case, if configdir is None, it uses the 1776s current system configuration, and "release" is ignored. 1776s 1776s release is the value of the report's 'DistroRelease' field. 1776s 1776s packages is a list of ('packagename', 'version') tuples. If the version 1776s is None, it should install the most current available version. 1776s 1776s If cache_dir is given, then the downloaded packages will be stored 1776s there, to speed up subsequent retraces. 1776s 1776s If permanent_rootdir is True, then the sandbox created from the 1776s downloaded packages will be reused, to speed up subsequent retraces. 1776s 1776s If architecture is given, the sandbox will be created with packages of 1776s the given architecture (as specified in a report's "Architecture" 1776s field). If not given it defaults to the host system's architecture. 1776s 1776s If origins is given, the sandbox will be created with apt data sources 1776s for foreign origins. 1776s 1776s If install_deps is True, then the dependencies of packages will also 1776s be installed. 1776s 1776s Return a string with outdated packages, or an empty string if all 1776s packages were installed. 1776s 1776s If something is wrong with the environment (invalid configuration, 1776s package servers down, etc.), this should raise a SystemError with a 1776s meaningful error message. 1776s """ 1776s if not architecture: 1776s architecture = self.get_system_architecture() 1776s if not configdir: 1776s apt_dir = "/etc/apt" 1776s self._current_release_codename = self.get_distro_codename() 1776s else: 1776s # support architecture specific config, fall back to global config 1776s apt_dir = os.path.join(configdir, release) 1776s if architecture != self.get_system_architecture(): 1776s arch_apt_dir = os.path.join(configdir, release, architecture) 1776s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 1776s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 1776s if os.path.exists(arch_old_sources) or ( 1776s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 1776s ): 1776s apt_dir = arch_apt_dir 1776s 1776s # set mirror for get_file_package() 1776s try: 1776s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 1776s except SystemError as error: 1776s apport.logging.warning("cannot determine mirror: %s", str(error)) 1776s 1776s # set current release code name for _distro_release_to_codename 1776s with open( 1776s os.path.join(configdir, release, "codename"), encoding="utf-8" 1776s ) as f: 1776s self._current_release_codename = f.read().strip() 1776s 1776s # create apt sandbox 1776s if cache_dir: 1776s tmp_aptroot = False 1776s aptroot = self._apt_cache_root_dir( 1776s architecture, cache_dir, release if configdir else "system" 1776s ) 1776s if not os.path.isdir(aptroot): 1776s os.makedirs(aptroot) 1776s else: 1776s tmp_aptroot = True 1776s aptroot = tempfile.mkdtemp() 1776s 1776s apt.apt_pkg.config.set("APT::Architecture", architecture) 1776s apt.apt_pkg.config.set("Acquire::Languages", "none") 1776s # directly connect to Launchpad when downloading deb files 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 1776s 1776s if not verbose: 1776s fetchProgress = apt.progress.base.AcquireProgress() 1776s else: 1776s fetchProgress = apt.progress.text.AcquireProgress() 1776s if not tmp_aptroot: 1776s apt_cache = self._sandbox_cache( 1776s aptroot, 1776s apt_dir, 1776s fetchProgress, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s architecture, 1776s ) 1776s else: 1776s self._build_apt_sandbox( 1776s aptroot, 1776s apt_dir, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s ) 1776s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 1776s try: 1776s apt_cache.update(fetchProgress) 1776s except apt.cache.FetchFailedException as error: 1776s raise SystemError(str(error)) from error 1776s apt_cache.open() 1776s 1776s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 1776s 1776s obsolete = "" 1776s 1776s src_records = apt.apt_pkg.SourceRecords() 1776s 1776s # read original package list 1776s pkg_list = os.path.join(rootdir, "packages.txt") 1776s pkg_versions = {} 1776s if os.path.exists(pkg_list): 1776s with open(pkg_list, encoding="utf-8") as f: 1776s for line in f: 1776s line = line.strip() 1776s if not line: 1776s continue 1776s (p, v) = line.split() 1776s pkg_versions[p] = v 1776s 1776s # mark packages for installation 1776s real_pkgs = set() 1776s lp_cache = {} 1776s fetcher = apt.apt_pkg.Acquire(fetchProgress) 1776s # need to keep AcquireFile references 1776s acquire_queue = [] 1776s # add any dependencies to the packages list 1776s if install_deps: 1776s deps = [] 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s for dep in cache_pkg.candidate.dependencies: 1776s # the dependency may be satisfied by a different package 1776s if dep[0].name not in apt_cache: 1776s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 1776s # the version in dep is the one from pkg's dependencies, 1776s # so use the version from the cache 1776s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 1776s # if the dependency is in the list of packages we don't 1776s # need to look up its dependencies again 1776s if dep[0].name in [pkg[0] for pkg in packages]: 1776s continue 1776s # if the package is already extracted in the sandbox 1776s # because the report needs that package we don't want to 1776s # install a newer version which may cause a CRC mismatch 1776s # with the installed dbg symbols 1776s if dep[0].name in pkg_versions: 1776s inst_version = pkg_versions[dep[0].name] 1776s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 1776s deps.append((dep[0].name, inst_version)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s if dep[0].name not in [pkg[0] for pkg in packages]: 1776s packages.append((dep[0].name, None)) 1776s packages.extend(deps) 1776s 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s 1776s # try to select matching version 1776s try: 1776s if ver: 1776s > cache_pkg.candidate = cache_pkg.versions[ver] 1776s 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1163: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = , item = '0.43ubuntu1.9' 1776s 1776s def __getitem__(self, item: int | slice | str) -> Any: 1776s # FIXME: Should not be returning Any, should have overloads; but 1776s # pyflakes complains 1776s if isinstance(item, slice): 1776s return self.__class__(self._package, item) 1776s try: 1776s # Sequence interface, item is an integer 1776s return Version(self._package, self._versions[item]) # type: ignore 1776s except TypeError: 1776s # Dictionary interface item is a string. 1776s for ver in self._versions: 1776s if ver.ver_str == item: 1776s return Version(self._package, ver) 1776s > raise KeyError("Version: %r not found." % (item)) 1776s E KeyError: "Version: '0.43ubuntu1.9' not found." 1776s 1776s /usr/lib/python3/dist-packages/apt/package.py:956: KeyError 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s configdir = '/tmp/tmp68li7f1i/config', cachedir = '/tmp/tmp68li7f1i/cache' 1776s rootdir = '/tmp/tmp68li7f1i/root', apt_style = 'one-line' 1776s 1776s @pytest.mark.skipif(not has_internet(), reason="online test") 1776s def test_install_packages_from_launchpad( 1776s configdir: str, cachedir: str, rootdir: str, apt_style: AptStyle 1776s ) -> None: 1776s """install_packages() using packages only available on Launchpad""" 1776s release = _setup_foonux_config(configdir, apt_style, release="focal") 1776s # Wanted are superseded versions from -updates or -security. 1776s wanted = { 1776s "distro-info-data": "0.43ubuntu1.9", # arch all 1776s "libc6": "2.31-0ubuntu9.4", # -dbg, arch specific 1776s "qemu-utils": "1:4.2-3ubuntu6.1", # -dbgsym, arch specific 1776s } 1776s > obsolete = impl.install_packages( 1776s rootdir, configdir, release, list(wanted.items()), False, cachedir 1776s ) 1776s 1776s tests/system/test_packaging_apt_dpkg.py:602: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1165: in install_packages 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:423: in get_lp_binary_package 1776s launchpad = Launchpad.login_anonymously( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:487: in login_anonymously 1776s return cls( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:223: in __init__ 1776s super().__init__( 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/resource.py:511: in __init__ 1776s self._wadl = self._browser.get_wadl_application(self._root_uri) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:502: in get_wadl_application 1776s response, content = self._request(url, media_type=wadl_type) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:441: in _request 1776s response, content = self._request_and_retry( 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:400: in _request_and_retry 1776s response, content = self._connection.request( 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1724: in request 1776s (response, content) = self._request( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:139: in _request 1776s response, content = super()._request(*args) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:204: in _request 1776s return super(RestfulHttp, self)._request( 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1444: in _request 1776s (response, content) = self._conn_request(conn, request_uri, method, body, headers) 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1366: in _conn_request 1776s conn.connect() 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1156: in connect 1776s sock.connect((self.host, self.port)) 1776s /usr/lib/python3/dist-packages/httplib2/socks.py:504: in connect 1776s self.__negotiatehttp(destpair[0], destpair[1]) 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = 1776s destaddr = 'api.launchpad.net', destport = 443 1776s 1776s def __negotiatehttp(self, destaddr, destport): 1776s """__negotiatehttp(self,destaddr,destport) 1776s Negotiates a connection through an HTTP server. 1776s """ 1776s # If we need to resolve locally, we do this now 1776s if not self.__proxy[3]: 1776s addr = socket.gethostbyname(destaddr) 1776s else: 1776s addr = destaddr 1776s headers = ["CONNECT ", addr, ":", str(destport), " HTTP/1.1\r\n"] 1776s wrote_host_header = False 1776s wrote_auth_header = False 1776s if self.__proxy[6] != None: 1776s for key, val in self.__proxy[6].iteritems(): 1776s headers += [key, ": ", val, "\r\n"] 1776s wrote_host_header = key.lower() == "host" 1776s wrote_auth_header = key.lower() == "proxy-authorization" 1776s if not wrote_host_header: 1776s headers += ["Host: ", destaddr, "\r\n"] 1776s if not wrote_auth_header: 1776s if self.__proxy[4] != None and self.__proxy[5] != None: 1776s headers += [self.__getauthheader(), "\r\n"] 1776s headers.append("\r\n") 1776s self.sendall("".join(headers).encode()) 1776s # We read the response until we get the string "\r\n\r\n" 1776s resp = self.recv(1) 1776s while resp.find("\r\n\r\n".encode()) == -1: 1776s resp = resp + self.recv(1) 1776s # We just need the first line to check if the connection 1776s # was successful 1776s statusline = resp.splitlines()[0].split(" ".encode(), 2) 1776s if statusline[0] not in ("HTTP/1.0".encode(), "HTTP/1.1".encode()): 1776s self.close() 1776s raise GeneralProxyError((1, _generalerrors[1])) 1776s try: 1776s statuscode = int(statusline[1]) 1776s except ValueError: 1776s self.close() 1776s raise GeneralProxyError((1, _generalerrors[1])) 1776s if statuscode != 200: 1776s self.close() 1776s > raise HTTPError((statuscode, statusline[2])) 1776s E httplib2.socks.HTTPError: (403, b'Forbidden') 1776s 1776s /usr/lib/python3/dist-packages/httplib2/socks.py:465: HTTPError 1776s _________________ test_install_packages_from_launchpad[deb822] _________________ 1776s 1776s self = 1776s rootdir = '/tmp/tmpkxxy6vdd/root', configdir = '/tmp/tmpkxxy6vdd/config' 1776s release = 'Foonux 20.04' 1776s packages = [('distro-info-data', '0.43ubuntu1.9'), ('libc6', '2.31-0ubuntu9.4'), ('qemu-utils', '1:4.2-3ubuntu6.1')] 1776s verbose = False, cache_dir = '/tmp/tmpkxxy6vdd/cache', permanent_rootdir = False 1776s architecture = 'amd64', origins = None, install_dbg = True, install_deps = False 1776s 1776s def install_packages( 1776s self, 1776s rootdir: str, 1776s configdir: str | None, 1776s release: str, 1776s packages: list[tuple[str, str | None]], 1776s verbose: bool = False, 1776s cache_dir: str | None = None, 1776s permanent_rootdir: bool = False, 1776s architecture: str | None = None, 1776s origins: Iterable[str] | None = None, 1776s install_dbg: bool = True, 1776s install_deps: bool = False, 1776s ) -> str: 1776s # TODO: Split into smaller functions/methods 1776s # pylint: disable=too-many-branches,too-many-locals 1776s # pylint: disable=too-many-nested-blocks,too-many-statements 1776s """Install packages into a sandbox (for apport-retrace). 1776s 1776s In order to work without any special permissions and without touching 1776s the running system, this should only download and unpack packages into 1776s the given root directory, not install them into the system. 1776s 1776s configdir points to a directory with by-release configuration files for 1776s the packaging system; this is completely dependent on the backend 1776s implementation, the only assumption is that this looks into 1776s configdir/release/, so that you can use retracing for multiple 1776s DistroReleases. As a special case, if configdir is None, it uses the 1776s current system configuration, and "release" is ignored. 1776s 1776s release is the value of the report's 'DistroRelease' field. 1776s 1776s packages is a list of ('packagename', 'version') tuples. If the version 1776s is None, it should install the most current available version. 1776s 1776s If cache_dir is given, then the downloaded packages will be stored 1776s there, to speed up subsequent retraces. 1776s 1776s If permanent_rootdir is True, then the sandbox created from the 1776s downloaded packages will be reused, to speed up subsequent retraces. 1776s 1776s If architecture is given, the sandbox will be created with packages of 1776s the given architecture (as specified in a report's "Architecture" 1776s field). If not given it defaults to the host system's architecture. 1776s 1776s If origins is given, the sandbox will be created with apt data sources 1776s for foreign origins. 1776s 1776s If install_deps is True, then the dependencies of packages will also 1776s be installed. 1776s 1776s Return a string with outdated packages, or an empty string if all 1776s packages were installed. 1776s 1776s If something is wrong with the environment (invalid configuration, 1776s package servers down, etc.), this should raise a SystemError with a 1776s meaningful error message. 1776s """ 1776s if not architecture: 1776s architecture = self.get_system_architecture() 1776s if not configdir: 1776s apt_dir = "/etc/apt" 1776s self._current_release_codename = self.get_distro_codename() 1776s else: 1776s # support architecture specific config, fall back to global config 1776s apt_dir = os.path.join(configdir, release) 1776s if architecture != self.get_system_architecture(): 1776s arch_apt_dir = os.path.join(configdir, release, architecture) 1776s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 1776s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 1776s if os.path.exists(arch_old_sources) or ( 1776s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 1776s ): 1776s apt_dir = arch_apt_dir 1776s 1776s # set mirror for get_file_package() 1776s try: 1776s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 1776s except SystemError as error: 1776s apport.logging.warning("cannot determine mirror: %s", str(error)) 1776s 1776s # set current release code name for _distro_release_to_codename 1776s with open( 1776s os.path.join(configdir, release, "codename"), encoding="utf-8" 1776s ) as f: 1776s self._current_release_codename = f.read().strip() 1776s 1776s # create apt sandbox 1776s if cache_dir: 1776s tmp_aptroot = False 1776s aptroot = self._apt_cache_root_dir( 1776s architecture, cache_dir, release if configdir else "system" 1776s ) 1776s if not os.path.isdir(aptroot): 1776s os.makedirs(aptroot) 1776s else: 1776s tmp_aptroot = True 1776s aptroot = tempfile.mkdtemp() 1776s 1776s apt.apt_pkg.config.set("APT::Architecture", architecture) 1776s apt.apt_pkg.config.set("Acquire::Languages", "none") 1776s # directly connect to Launchpad when downloading deb files 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 1776s 1776s if not verbose: 1776s fetchProgress = apt.progress.base.AcquireProgress() 1776s else: 1776s fetchProgress = apt.progress.text.AcquireProgress() 1776s if not tmp_aptroot: 1776s apt_cache = self._sandbox_cache( 1776s aptroot, 1776s apt_dir, 1776s fetchProgress, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s architecture, 1776s ) 1776s else: 1776s self._build_apt_sandbox( 1776s aptroot, 1776s apt_dir, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s ) 1776s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 1776s try: 1776s apt_cache.update(fetchProgress) 1776s except apt.cache.FetchFailedException as error: 1776s raise SystemError(str(error)) from error 1776s apt_cache.open() 1776s 1776s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 1776s 1776s obsolete = "" 1776s 1776s src_records = apt.apt_pkg.SourceRecords() 1776s 1776s # read original package list 1776s pkg_list = os.path.join(rootdir, "packages.txt") 1776s pkg_versions = {} 1776s if os.path.exists(pkg_list): 1776s with open(pkg_list, encoding="utf-8") as f: 1776s for line in f: 1776s line = line.strip() 1776s if not line: 1776s continue 1776s (p, v) = line.split() 1776s pkg_versions[p] = v 1776s 1776s # mark packages for installation 1776s real_pkgs = set() 1776s lp_cache = {} 1776s fetcher = apt.apt_pkg.Acquire(fetchProgress) 1776s # need to keep AcquireFile references 1776s acquire_queue = [] 1776s # add any dependencies to the packages list 1776s if install_deps: 1776s deps = [] 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s for dep in cache_pkg.candidate.dependencies: 1776s # the dependency may be satisfied by a different package 1776s if dep[0].name not in apt_cache: 1776s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 1776s # the version in dep is the one from pkg's dependencies, 1776s # so use the version from the cache 1776s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 1776s # if the dependency is in the list of packages we don't 1776s # need to look up its dependencies again 1776s if dep[0].name in [pkg[0] for pkg in packages]: 1776s continue 1776s # if the package is already extracted in the sandbox 1776s # because the report needs that package we don't want to 1776s # install a newer version which may cause a CRC mismatch 1776s # with the installed dbg symbols 1776s if dep[0].name in pkg_versions: 1776s inst_version = pkg_versions[dep[0].name] 1776s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 1776s deps.append((dep[0].name, inst_version)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s if dep[0].name not in [pkg[0] for pkg in packages]: 1776s packages.append((dep[0].name, None)) 1776s packages.extend(deps) 1776s 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s 1776s # try to select matching version 1776s try: 1776s if ver: 1776s > cache_pkg.candidate = cache_pkg.versions[ver] 1776s 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1163: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = , item = '0.43ubuntu1.9' 1776s 1776s def __getitem__(self, item: int | slice | str) -> Any: 1776s # FIXME: Should not be returning Any, should have overloads; but 1776s # pyflakes complains 1776s if isinstance(item, slice): 1776s return self.__class__(self._package, item) 1776s try: 1776s # Sequence interface, item is an integer 1776s return Version(self._package, self._versions[item]) # type: ignore 1776s except TypeError: 1776s # Dictionary interface item is a string. 1776s for ver in self._versions: 1776s if ver.ver_str == item: 1776s return Version(self._package, ver) 1776s > raise KeyError("Version: %r not found." % (item)) 1776s E KeyError: "Version: '0.43ubuntu1.9' not found." 1776s 1776s /usr/lib/python3/dist-packages/apt/package.py:956: KeyError 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s configdir = '/tmp/tmpkxxy6vdd/config', cachedir = '/tmp/tmpkxxy6vdd/cache' 1776s rootdir = '/tmp/tmpkxxy6vdd/root', apt_style = 'deb822' 1776s 1776s @pytest.mark.skipif(not has_internet(), reason="online test") 1776s def test_install_packages_from_launchpad( 1776s configdir: str, cachedir: str, rootdir: str, apt_style: AptStyle 1776s ) -> None: 1776s """install_packages() using packages only available on Launchpad""" 1776s release = _setup_foonux_config(configdir, apt_style, release="focal") 1776s # Wanted are superseded versions from -updates or -security. 1776s wanted = { 1776s "distro-info-data": "0.43ubuntu1.9", # arch all 1776s "libc6": "2.31-0ubuntu9.4", # -dbg, arch specific 1776s "qemu-utils": "1:4.2-3ubuntu6.1", # -dbgsym, arch specific 1776s } 1776s > obsolete = impl.install_packages( 1776s rootdir, configdir, release, list(wanted.items()), False, cachedir 1776s ) 1776s 1776s tests/system/test_packaging_apt_dpkg.py:602: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1165: in install_packages 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:423: in get_lp_binary_package 1776s launchpad = Launchpad.login_anonymously( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:487: in login_anonymously 1776s return cls( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:223: in __init__ 1776s super().__init__( 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/resource.py:511: in __init__ 1776s self._wadl = self._browser.get_wadl_application(self._root_uri) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:502: in get_wadl_application 1776s response, content = self._request(url, media_type=wadl_type) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:441: in _request 1776s response, content = self._request_and_retry( 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:400: in _request_and_retry 1776s response, content = self._connection.request( 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1724: in request 1776s (response, content) = self._request( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:139: in _request 1776s response, content = super()._request(*args) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:204: in _request 1776s return super(RestfulHttp, self)._request( 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1444: in _request 1776s (response, content) = self._conn_request(conn, request_uri, method, body, headers) 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1366: in _conn_request 1776s conn.connect() 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1156: in connect 1776s sock.connect((self.host, self.port)) 1776s /usr/lib/python3/dist-packages/httplib2/socks.py:504: in connect 1776s self.__negotiatehttp(destpair[0], destpair[1]) 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = 1776s destaddr = 'api.launchpad.net', destport = 443 1776s 1776s def __negotiatehttp(self, destaddr, destport): 1776s """__negotiatehttp(self,destaddr,destport) 1776s Negotiates a connection through an HTTP server. 1776s """ 1776s # If we need to resolve locally, we do this now 1776s if not self.__proxy[3]: 1776s addr = socket.gethostbyname(destaddr) 1776s else: 1776s addr = destaddr 1776s headers = ["CONNECT ", addr, ":", str(destport), " HTTP/1.1\r\n"] 1776s wrote_host_header = False 1776s wrote_auth_header = False 1776s if self.__proxy[6] != None: 1776s for key, val in self.__proxy[6].iteritems(): 1776s headers += [key, ": ", val, "\r\n"] 1776s wrote_host_header = key.lower() == "host" 1776s wrote_auth_header = key.lower() == "proxy-authorization" 1776s if not wrote_host_header: 1776s headers += ["Host: ", destaddr, "\r\n"] 1776s if not wrote_auth_header: 1776s if self.__proxy[4] != None and self.__proxy[5] != None: 1776s headers += [self.__getauthheader(), "\r\n"] 1776s headers.append("\r\n") 1776s self.sendall("".join(headers).encode()) 1776s # We read the response until we get the string "\r\n\r\n" 1776s resp = self.recv(1) 1776s while resp.find("\r\n\r\n".encode()) == -1: 1776s resp = resp + self.recv(1) 1776s # We just need the first line to check if the connection 1776s # was successful 1776s statusline = resp.splitlines()[0].split(" ".encode(), 2) 1776s if statusline[0] not in ("HTTP/1.0".encode(), "HTTP/1.1".encode()): 1776s self.close() 1776s raise GeneralProxyError((1, _generalerrors[1])) 1776s try: 1776s statuscode = int(statusline[1]) 1776s except ValueError: 1776s self.close() 1776s raise GeneralProxyError((1, _generalerrors[1])) 1776s if statuscode != 200: 1776s self.close() 1776s > raise HTTPError((statuscode, statusline[2])) 1776s E httplib2.socks.HTTPError: (403, b'Forbidden') 1776s 1776s /usr/lib/python3/dist-packages/httplib2/socks.py:465: HTTPError 1776s _____________________ test_install_old_packages[one-line] ______________________ 1776s 1776s self = 1776s rootdir = '/tmp/tmp3isgvsbv/root', configdir = '/tmp/tmp3isgvsbv/config' 1776s release = 'Foonux 22.04', packages = [('libcurl4', '7.74.0-1.3ubuntu3')] 1776s verbose = False, cache_dir = '/tmp/tmp3isgvsbv/cache', permanent_rootdir = False 1776s architecture = 'amd64', origins = None, install_dbg = True, install_deps = False 1776s 1776s def install_packages( 1776s self, 1776s rootdir: str, 1776s configdir: str | None, 1776s release: str, 1776s packages: list[tuple[str, str | None]], 1776s verbose: bool = False, 1776s cache_dir: str | None = None, 1776s permanent_rootdir: bool = False, 1776s architecture: str | None = None, 1776s origins: Iterable[str] | None = None, 1776s install_dbg: bool = True, 1776s install_deps: bool = False, 1776s ) -> str: 1776s # TODO: Split into smaller functions/methods 1776s # pylint: disable=too-many-branches,too-many-locals 1776s # pylint: disable=too-many-nested-blocks,too-many-statements 1776s """Install packages into a sandbox (for apport-retrace). 1776s 1776s In order to work without any special permissions and without touching 1776s the running system, this should only download and unpack packages into 1776s the given root directory, not install them into the system. 1776s 1776s configdir points to a directory with by-release configuration files for 1776s the packaging system; this is completely dependent on the backend 1776s implementation, the only assumption is that this looks into 1776s configdir/release/, so that you can use retracing for multiple 1776s DistroReleases. As a special case, if configdir is None, it uses the 1776s current system configuration, and "release" is ignored. 1776s 1776s release is the value of the report's 'DistroRelease' field. 1776s 1776s packages is a list of ('packagename', 'version') tuples. If the version 1776s is None, it should install the most current available version. 1776s 1776s If cache_dir is given, then the downloaded packages will be stored 1776s there, to speed up subsequent retraces. 1776s 1776s If permanent_rootdir is True, then the sandbox created from the 1776s downloaded packages will be reused, to speed up subsequent retraces. 1776s 1776s If architecture is given, the sandbox will be created with packages of 1776s the given architecture (as specified in a report's "Architecture" 1776s field). If not given it defaults to the host system's architecture. 1776s 1776s If origins is given, the sandbox will be created with apt data sources 1776s for foreign origins. 1776s 1776s If install_deps is True, then the dependencies of packages will also 1776s be installed. 1776s 1776s Return a string with outdated packages, or an empty string if all 1776s packages were installed. 1776s 1776s If something is wrong with the environment (invalid configuration, 1776s package servers down, etc.), this should raise a SystemError with a 1776s meaningful error message. 1776s """ 1776s if not architecture: 1776s architecture = self.get_system_architecture() 1776s if not configdir: 1776s apt_dir = "/etc/apt" 1776s self._current_release_codename = self.get_distro_codename() 1776s else: 1776s # support architecture specific config, fall back to global config 1776s apt_dir = os.path.join(configdir, release) 1776s if architecture != self.get_system_architecture(): 1776s arch_apt_dir = os.path.join(configdir, release, architecture) 1776s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 1776s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 1776s if os.path.exists(arch_old_sources) or ( 1776s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 1776s ): 1776s apt_dir = arch_apt_dir 1776s 1776s # set mirror for get_file_package() 1776s try: 1776s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 1776s except SystemError as error: 1776s apport.logging.warning("cannot determine mirror: %s", str(error)) 1776s 1776s # set current release code name for _distro_release_to_codename 1776s with open( 1776s os.path.join(configdir, release, "codename"), encoding="utf-8" 1776s ) as f: 1776s self._current_release_codename = f.read().strip() 1776s 1776s # create apt sandbox 1776s if cache_dir: 1776s tmp_aptroot = False 1776s aptroot = self._apt_cache_root_dir( 1776s architecture, cache_dir, release if configdir else "system" 1776s ) 1776s if not os.path.isdir(aptroot): 1776s os.makedirs(aptroot) 1776s else: 1776s tmp_aptroot = True 1776s aptroot = tempfile.mkdtemp() 1776s 1776s apt.apt_pkg.config.set("APT::Architecture", architecture) 1776s apt.apt_pkg.config.set("Acquire::Languages", "none") 1776s # directly connect to Launchpad when downloading deb files 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 1776s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 1776s 1776s if not verbose: 1776s fetchProgress = apt.progress.base.AcquireProgress() 1776s else: 1776s fetchProgress = apt.progress.text.AcquireProgress() 1776s if not tmp_aptroot: 1776s apt_cache = self._sandbox_cache( 1776s aptroot, 1776s apt_dir, 1776s fetchProgress, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s architecture, 1776s ) 1776s else: 1776s self._build_apt_sandbox( 1776s aptroot, 1776s apt_dir, 1776s self.get_distro_name(), 1776s self._current_release_codename, 1776s origins, 1776s ) 1776s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 1776s try: 1776s apt_cache.update(fetchProgress) 1776s except apt.cache.FetchFailedException as error: 1776s raise SystemError(str(error)) from error 1776s apt_cache.open() 1776s 1776s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 1776s 1776s obsolete = "" 1776s 1776s src_records = apt.apt_pkg.SourceRecords() 1776s 1776s # read original package list 1776s pkg_list = os.path.join(rootdir, "packages.txt") 1776s pkg_versions = {} 1776s if os.path.exists(pkg_list): 1776s with open(pkg_list, encoding="utf-8") as f: 1776s for line in f: 1776s line = line.strip() 1776s if not line: 1776s continue 1776s (p, v) = line.split() 1776s pkg_versions[p] = v 1776s 1776s # mark packages for installation 1776s real_pkgs = set() 1776s lp_cache = {} 1776s fetcher = apt.apt_pkg.Acquire(fetchProgress) 1776s # need to keep AcquireFile references 1776s acquire_queue = [] 1776s # add any dependencies to the packages list 1776s if install_deps: 1776s deps = [] 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s for dep in cache_pkg.candidate.dependencies: 1776s # the dependency may be satisfied by a different package 1776s if dep[0].name not in apt_cache: 1776s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 1776s # the version in dep is the one from pkg's dependencies, 1776s # so use the version from the cache 1776s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 1776s # if the dependency is in the list of packages we don't 1776s # need to look up its dependencies again 1776s if dep[0].name in [pkg[0] for pkg in packages]: 1776s continue 1776s # if the package is already extracted in the sandbox 1776s # because the report needs that package we don't want to 1776s # install a newer version which may cause a CRC mismatch 1776s # with the installed dbg symbols 1776s if dep[0].name in pkg_versions: 1776s inst_version = pkg_versions[dep[0].name] 1776s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 1776s deps.append((dep[0].name, inst_version)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s else: 1776s deps.append((dep[0].name, dep_pkg_vers)) 1776s if dep[0].name not in [pkg[0] for pkg in packages]: 1776s packages.append((dep[0].name, None)) 1776s packages.extend(deps) 1776s 1776s for pkg, ver in packages: 1776s try: 1776s cache_pkg = apt_cache[pkg] 1776s except KeyError: 1776s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1776s obsolete += f"{m}\n" 1776s apport.logging.warning("%s", m) 1776s continue 1776s 1776s # try to select matching version 1776s try: 1776s if ver: 1776s > cache_pkg.candidate = cache_pkg.versions[ver] 1776s 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1163: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = , item = '7.74.0-1.3ubuntu3' 1776s 1776s def __getitem__(self, item: int | slice | str) -> Any: 1776s # FIXME: Should not be returning Any, should have overloads; but 1776s # pyflakes complains 1776s if isinstance(item, slice): 1776s return self.__class__(self._package, item) 1776s try: 1776s # Sequence interface, item is an integer 1776s return Version(self._package, self._versions[item]) # type: ignore 1776s except TypeError: 1776s # Dictionary interface item is a string. 1776s for ver in self._versions: 1776s if ver.ver_str == item: 1776s return Version(self._package, ver) 1776s > raise KeyError("Version: %r not found." % (item)) 1776s E KeyError: "Version: '7.74.0-1.3ubuntu3' not found." 1776s 1776s /usr/lib/python3/dist-packages/apt/package.py:956: KeyError 1776s 1776s During handling of the above exception, another exception occurred: 1776s 1776s configdir = '/tmp/tmp3isgvsbv/config', cachedir = '/tmp/tmp3isgvsbv/cache' 1776s rootdir = '/tmp/tmp3isgvsbv/root', apt_style = 'one-line' 1776s 1776s @pytest.mark.skipif(not has_internet(), reason="online test") 1776s def test_install_old_packages( 1776s configdir: str, cachedir: str, rootdir: str, apt_style: AptStyle 1776s ) -> None: 1776s """Sandbox will install older package versions from launchpad.""" 1776s release = _setup_foonux_config(configdir, apt_style) 1776s wanted_package = "libcurl4" 1776s wanted_version = "7.81.0-1" # pre-release version 1776s obsolete = impl.install_packages( 1776s rootdir, configdir, release, [(wanted_package, wanted_version)], False, cachedir 1776s ) 1776s 1776s assert obsolete == "" 1776s 1776s def sandbox_ver(pkg: str) -> str: 1776s with gzip.open( 1776s os.path.join(rootdir, "usr/share/doc", pkg, "changelog.Debian.gz") 1776s ) as f: 1776s return f.readline().decode().split()[1][1:-1] 1776s 1776s # the version is as expected 1776s assert sandbox_ver(wanted_package) == wanted_version 1776s 1776s # keeps track of package version 1776s with open(os.path.join(rootdir, "packages.txt"), encoding="utf-8") as f: 1776s pkglist = f.read().splitlines() 1776s assert f"{wanted_package} {wanted_version}" in pkglist 1776s 1776s wanted_version = "7.74.0-1.3ubuntu3" 1776s > obsolete = impl.install_packages( 1776s rootdir, configdir, release, [(wanted_package, wanted_version)], False, cachedir 1776s ) 1776s 1776s tests/system/test_packaging_apt_dpkg.py:683: 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1165: in install_packages 1776s (lp_url, sha1sum) = self.get_lp_binary_package( 1776s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:423: in get_lp_binary_package 1776s launchpad = Launchpad.login_anonymously( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:487: in login_anonymously 1776s return cls( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:223: in __init__ 1776s super().__init__( 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/resource.py:511: in __init__ 1776s self._wadl = self._browser.get_wadl_application(self._root_uri) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:502: in get_wadl_application 1776s response, content = self._request(url, media_type=wadl_type) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:441: in _request 1776s response, content = self._request_and_retry( 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:400: in _request_and_retry 1776s response, content = self._connection.request( 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1724: in request 1776s (response, content) = self._request( 1776s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:139: in _request 1776s response, content = super()._request(*args) 1776s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:204: in _request 1776s return super(RestfulHttp, self)._request( 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1444: in _request 1776s (response, content) = self._conn_request(conn, request_uri, method, body, headers) 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1366: in _conn_request 1776s conn.connect() 1776s /usr/lib/python3/dist-packages/httplib2/__init__.py:1156: in connect 1776s sock.connect((self.host, self.port)) 1776s /usr/lib/python3/dist-packages/httplib2/socks.py:504: in connect 1776s self.__negotiatehttp(destpair[0], destpair[1]) 1776s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1776s 1776s self = 1776s destaddr = 'api.launchpad.net', destport = 443 1776s 1776s def __negotiatehttp(self, destaddr, destport): 1777s """__negotiatehttp(self,destaddr,destport) 1777s Negotiates a connection through an HTTP server. 1777s """ 1777s # If we need to resolve locally, we do this now 1777s if not self.__proxy[3]: 1777s addr = socket.gethostbyname(destaddr) 1777s else: 1777s addr = destaddr 1777s headers = ["CONNECT ", addr, ":", str(destport), " HTTP/1.1\r\n"] 1777s wrote_host_header = False 1777s wrote_auth_header = False 1777s if self.__proxy[6] != None: 1777s for key, val in self.__proxy[6].iteritems(): 1777s headers += [key, ": ", val, "\r\n"] 1777s wrote_host_header = key.lower() == "host" 1777s wrote_auth_header = key.lower() == "proxy-authorization" 1777s if not wrote_host_header: 1777s headers += ["Host: ", destaddr, "\r\n"] 1777s if not wrote_auth_header: 1777s if self.__proxy[4] != None and self.__proxy[5] != None: 1777s headers += [self.__getauthheader(), "\r\n"] 1777s headers.append("\r\n") 1777s self.sendall("".join(headers).encode()) 1777s # We read the response until we get the string "\r\n\r\n" 1777s resp = self.recv(1) 1777s while resp.find("\r\n\r\n".encode()) == -1: 1777s resp = resp + self.recv(1) 1777s # We just need the first line to check if the connection 1777s # was successful 1777s statusline = resp.splitlines()[0].split(" ".encode(), 2) 1777s if statusline[0] not in ("HTTP/1.0".encode(), "HTTP/1.1".encode()): 1777s self.close() 1777s raise GeneralProxyError((1, _generalerrors[1])) 1777s try: 1777s statuscode = int(statusline[1]) 1777s except ValueError: 1777s self.close() 1777s raise GeneralProxyError((1, _generalerrors[1])) 1777s if statuscode != 200: 1777s self.close() 1777s > raise HTTPError((statuscode, statusline[2])) 1777s E httplib2.socks.HTTPError: (403, b'Forbidden') 1777s 1777s /usr/lib/python3/dist-packages/httplib2/socks.py:465: HTTPError 1777s ______________________ test_install_old_packages[deb822] _______________________ 1777s 1777s self = 1777s rootdir = '/tmp/tmpcep9sov5/root', configdir = '/tmp/tmpcep9sov5/config' 1777s release = 'Foonux 22.04', packages = [('libcurl4', '7.74.0-1.3ubuntu3')] 1777s verbose = False, cache_dir = '/tmp/tmpcep9sov5/cache', permanent_rootdir = False 1777s architecture = 'amd64', origins = None, install_dbg = True, install_deps = False 1777s 1777s def install_packages( 1777s self, 1777s rootdir: str, 1777s configdir: str | None, 1777s release: str, 1777s packages: list[tuple[str, str | None]], 1777s verbose: bool = False, 1777s cache_dir: str | None = None, 1777s permanent_rootdir: bool = False, 1777s architecture: str | None = None, 1777s origins: Iterable[str] | None = None, 1777s install_dbg: bool = True, 1777s install_deps: bool = False, 1777s ) -> str: 1777s # TODO: Split into smaller functions/methods 1777s # pylint: disable=too-many-branches,too-many-locals 1777s # pylint: disable=too-many-nested-blocks,too-many-statements 1777s """Install packages into a sandbox (for apport-retrace). 1777s 1777s In order to work without any special permissions and without touching 1777s the running system, this should only download and unpack packages into 1777s the given root directory, not install them into the system. 1777s 1777s configdir points to a directory with by-release configuration files for 1777s the packaging system; this is completely dependent on the backend 1777s implementation, the only assumption is that this looks into 1777s configdir/release/, so that you can use retracing for multiple 1777s DistroReleases. As a special case, if configdir is None, it uses the 1777s current system configuration, and "release" is ignored. 1777s 1777s release is the value of the report's 'DistroRelease' field. 1777s 1777s packages is a list of ('packagename', 'version') tuples. If the version 1777s is None, it should install the most current available version. 1777s 1777s If cache_dir is given, then the downloaded packages will be stored 1777s there, to speed up subsequent retraces. 1777s 1777s If permanent_rootdir is True, then the sandbox created from the 1777s downloaded packages will be reused, to speed up subsequent retraces. 1777s 1777s If architecture is given, the sandbox will be created with packages of 1777s the given architecture (as specified in a report's "Architecture" 1777s field). If not given it defaults to the host system's architecture. 1777s 1777s If origins is given, the sandbox will be created with apt data sources 1777s for foreign origins. 1777s 1777s If install_deps is True, then the dependencies of packages will also 1777s be installed. 1777s 1777s Return a string with outdated packages, or an empty string if all 1777s packages were installed. 1777s 1777s If something is wrong with the environment (invalid configuration, 1777s package servers down, etc.), this should raise a SystemError with a 1777s meaningful error message. 1777s """ 1777s if not architecture: 1777s architecture = self.get_system_architecture() 1777s if not configdir: 1777s apt_dir = "/etc/apt" 1777s self._current_release_codename = self.get_distro_codename() 1777s else: 1777s # support architecture specific config, fall back to global config 1777s apt_dir = os.path.join(configdir, release) 1777s if architecture != self.get_system_architecture(): 1777s arch_apt_dir = os.path.join(configdir, release, architecture) 1777s arch_old_sources = os.path.join(arch_apt_dir, "sources.list") 1777s arch_sources_dir = os.path.join(arch_apt_dir, "sources.list.d") 1777s if os.path.exists(arch_old_sources) or ( 1777s os.path.exists(arch_sources_dir) and os.listdir(arch_sources_dir) 1777s ): 1777s apt_dir = arch_apt_dir 1777s 1777s # set mirror for get_file_package() 1777s try: 1777s self.set_mirror(self._get_primary_mirror_from_apt_sources(apt_dir)) 1777s except SystemError as error: 1777s apport.logging.warning("cannot determine mirror: %s", str(error)) 1777s 1777s # set current release code name for _distro_release_to_codename 1777s with open( 1777s os.path.join(configdir, release, "codename"), encoding="utf-8" 1777s ) as f: 1777s self._current_release_codename = f.read().strip() 1777s 1777s # create apt sandbox 1777s if cache_dir: 1777s tmp_aptroot = False 1777s aptroot = self._apt_cache_root_dir( 1777s architecture, cache_dir, release if configdir else "system" 1777s ) 1777s if not os.path.isdir(aptroot): 1777s os.makedirs(aptroot) 1777s else: 1777s tmp_aptroot = True 1777s aptroot = tempfile.mkdtemp() 1777s 1777s apt.apt_pkg.config.set("APT::Architecture", architecture) 1777s apt.apt_pkg.config.set("Acquire::Languages", "none") 1777s # directly connect to Launchpad when downloading deb files 1777s apt.apt_pkg.config.set("Acquire::http::Proxy::api.launchpad.net", "DIRECT") 1777s apt.apt_pkg.config.set("Acquire::http::Proxy::launchpad.net", "DIRECT") 1777s 1777s if not verbose: 1777s fetchProgress = apt.progress.base.AcquireProgress() 1777s else: 1777s fetchProgress = apt.progress.text.AcquireProgress() 1777s if not tmp_aptroot: 1777s apt_cache = self._sandbox_cache( 1777s aptroot, 1777s apt_dir, 1777s fetchProgress, 1777s self.get_distro_name(), 1777s self._current_release_codename, 1777s origins, 1777s architecture, 1777s ) 1777s else: 1777s self._build_apt_sandbox( 1777s aptroot, 1777s apt_dir, 1777s self.get_distro_name(), 1777s self._current_release_codename, 1777s origins, 1777s ) 1777s apt_cache = apt.Cache(rootdir=os.path.abspath(aptroot)) 1777s try: 1777s apt_cache.update(fetchProgress) 1777s except apt.cache.FetchFailedException as error: 1777s raise SystemError(str(error)) from error 1777s apt_cache.open() 1777s 1777s archivedir = apt.apt_pkg.config.find_dir("Dir::Cache::archives") 1777s 1777s obsolete = "" 1777s 1777s src_records = apt.apt_pkg.SourceRecords() 1777s 1777s # read original package list 1777s pkg_list = os.path.join(rootdir, "packages.txt") 1777s pkg_versions = {} 1777s if os.path.exists(pkg_list): 1777s with open(pkg_list, encoding="utf-8") as f: 1777s for line in f: 1777s line = line.strip() 1777s if not line: 1777s continue 1777s (p, v) = line.split() 1777s pkg_versions[p] = v 1777s 1777s # mark packages for installation 1777s real_pkgs = set() 1777s lp_cache = {} 1777s fetcher = apt.apt_pkg.Acquire(fetchProgress) 1777s # need to keep AcquireFile references 1777s acquire_queue = [] 1777s # add any dependencies to the packages list 1777s if install_deps: 1777s deps = [] 1777s for pkg, ver in packages: 1777s try: 1777s cache_pkg = apt_cache[pkg] 1777s except KeyError: 1777s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1777s obsolete += f"{m}\n" 1777s apport.logging.warning("%s", m) 1777s continue 1777s for dep in cache_pkg.candidate.dependencies: 1777s # the dependency may be satisfied by a different package 1777s if dep[0].name not in apt_cache: 1777s dep[0] = apt_cache.get_providing_packages(dep[0].name)[0] 1777s # the version in dep is the one from pkg's dependencies, 1777s # so use the version from the cache 1777s dep_pkg_vers = apt_cache[dep[0].name].candidate.version 1777s # if the dependency is in the list of packages we don't 1777s # need to look up its dependencies again 1777s if dep[0].name in [pkg[0] for pkg in packages]: 1777s continue 1777s # if the package is already extracted in the sandbox 1777s # because the report needs that package we don't want to 1777s # install a newer version which may cause a CRC mismatch 1777s # with the installed dbg symbols 1777s if dep[0].name in pkg_versions: 1777s inst_version = pkg_versions[dep[0].name] 1777s if self.compare_versions(inst_version, dep_pkg_vers) > -1: 1777s deps.append((dep[0].name, inst_version)) 1777s else: 1777s deps.append((dep[0].name, dep_pkg_vers)) 1777s else: 1777s deps.append((dep[0].name, dep_pkg_vers)) 1777s if dep[0].name not in [pkg[0] for pkg in packages]: 1777s packages.append((dep[0].name, None)) 1777s packages.extend(deps) 1777s 1777s for pkg, ver in packages: 1777s try: 1777s cache_pkg = apt_cache[pkg] 1777s except KeyError: 1777s m = f"package {pkg.replace('%', '%%')} does not exist, ignoring" 1777s obsolete += f"{m}\n" 1777s apport.logging.warning("%s", m) 1777s continue 1777s 1777s # try to select matching version 1777s try: 1777s if ver: 1777s > cache_pkg.candidate = cache_pkg.versions[ver] 1777s 1777s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1163: 1777s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1777s 1777s self = , item = '7.74.0-1.3ubuntu3' 1777s 1777s def __getitem__(self, item: int | slice | str) -> Any: 1777s # FIXME: Should not be returning Any, should have overloads; but 1777s # pyflakes complains 1777s if isinstance(item, slice): 1777s return self.__class__(self._package, item) 1777s try: 1777s # Sequence interface, item is an integer 1777s return Version(self._package, self._versions[item]) # type: ignore 1777s except TypeError: 1777s # Dictionary interface item is a string. 1777s for ver in self._versions: 1777s if ver.ver_str == item: 1777s return Version(self._package, ver) 1777s > raise KeyError("Version: %r not found." % (item)) 1777s E KeyError: "Version: '7.74.0-1.3ubuntu3' not found." 1777s 1777s /usr/lib/python3/dist-packages/apt/package.py:956: KeyError 1777s 1777s During handling of the above exception, another exception occurred: 1777s 1777s configdir = '/tmp/tmpcep9sov5/config', cachedir = '/tmp/tmpcep9sov5/cache' 1777s rootdir = '/tmp/tmpcep9sov5/root', apt_style = 'deb822' 1777s 1777s @pytest.mark.skipif(not has_internet(), reason="online test") 1777s def test_install_old_packages( 1777s configdir: str, cachedir: str, rootdir: str, apt_style: AptStyle 1777s ) -> None: 1777s """Sandbox will install older package versions from launchpad.""" 1777s release = _setup_foonux_config(configdir, apt_style) 1777s wanted_package = "libcurl4" 1777s wanted_version = "7.81.0-1" # pre-release version 1777s obsolete = impl.install_packages( 1777s rootdir, configdir, release, [(wanted_package, wanted_version)], False, cachedir 1777s ) 1777s 1777s assert obsolete == "" 1777s 1777s def sandbox_ver(pkg: str) -> str: 1777s with gzip.open( 1777s os.path.join(rootdir, "usr/share/doc", pkg, "changelog.Debian.gz") 1777s ) as f: 1777s return f.readline().decode().split()[1][1:-1] 1777s 1777s # the version is as expected 1777s assert sandbox_ver(wanted_package) == wanted_version 1777s 1777s # keeps track of package version 1777s with open(os.path.join(rootdir, "packages.txt"), encoding="utf-8") as f: 1777s pkglist = f.read().splitlines() 1777s assert f"{wanted_package} {wanted_version}" in pkglist 1777s 1777s wanted_version = "7.74.0-1.3ubuntu3" 1777s > obsolete = impl.install_packages( 1777s rootdir, configdir, release, [(wanted_package, wanted_version)], False, cachedir 1777s ) 1777s 1777s tests/system/test_packaging_apt_dpkg.py:683: 1777s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1777s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:1165: in install_packages 1777s (lp_url, sha1sum) = self.get_lp_binary_package( 1777s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:423: in get_lp_binary_package 1777s launchpad = Launchpad.login_anonymously( 1777s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:487: in login_anonymously 1777s return cls( 1777s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:223: in __init__ 1777s super().__init__( 1777s /usr/lib/python3/dist-packages/lazr/restfulclient/resource.py:511: in __init__ 1777s self._wadl = self._browser.get_wadl_application(self._root_uri) 1777s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:502: in get_wadl_application 1777s response, content = self._request(url, media_type=wadl_type) 1777s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:441: in _request 1777s response, content = self._request_and_retry( 1777s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:400: in _request_and_retry 1777s response, content = self._connection.request( 1777s /usr/lib/python3/dist-packages/httplib2/__init__.py:1724: in request 1777s (response, content) = self._request( 1777s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:139: in _request 1777s response, content = super()._request(*args) 1777s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:204: in _request 1777s return super(RestfulHttp, self)._request( 1777s /usr/lib/python3/dist-packages/httplib2/__init__.py:1444: in _request 1777s (response, content) = self._conn_request(conn, request_uri, method, body, headers) 1777s /usr/lib/python3/dist-packages/httplib2/__init__.py:1366: in _conn_request 1777s conn.connect() 1777s /usr/lib/python3/dist-packages/httplib2/__init__.py:1156: in connect 1777s sock.connect((self.host, self.port)) 1777s /usr/lib/python3/dist-packages/httplib2/socks.py:504: in connect 1777s self.__negotiatehttp(destpair[0], destpair[1]) 1777s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1777s 1777s self = 1777s destaddr = 'api.launchpad.net', destport = 443 1777s 1777s def __negotiatehttp(self, destaddr, destport): 1777s """__negotiatehttp(self,destaddr,destport) 1777s Negotiates a connection through an HTTP server. 1777s """ 1777s # If we need to resolve locally, we do this now 1777s if not self.__proxy[3]: 1777s addr = socket.gethostbyname(destaddr) 1777s else: 1777s addr = destaddr 1777s headers = ["CONNECT ", addr, ":", str(destport), " HTTP/1.1\r\n"] 1777s wrote_host_header = False 1777s wrote_auth_header = False 1777s if self.__proxy[6] != None: 1777s for key, val in self.__proxy[6].iteritems(): 1777s headers += [key, ": ", val, "\r\n"] 1777s wrote_host_header = key.lower() == "host" 1777s wrote_auth_header = key.lower() == "proxy-authorization" 1777s if not wrote_host_header: 1777s headers += ["Host: ", destaddr, "\r\n"] 1777s if not wrote_auth_header: 1777s if self.__proxy[4] != None and self.__proxy[5] != None: 1777s headers += [self.__getauthheader(), "\r\n"] 1777s headers.append("\r\n") 1777s self.sendall("".join(headers).encode()) 1777s # We read the response until we get the string "\r\n\r\n" 1777s resp = self.recv(1) 1777s while resp.find("\r\n\r\n".encode()) == -1: 1777s resp = resp + self.recv(1) 1777s # We just need the first line to check if the connection 1777s # was successful 1777s statusline = resp.splitlines()[0].split(" ".encode(), 2) 1777s if statusline[0] not in ("HTTP/1.0".encode(), "HTTP/1.1".encode()): 1777s self.close() 1777s raise GeneralProxyError((1, _generalerrors[1])) 1777s try: 1777s statuscode = int(statusline[1]) 1777s except ValueError: 1777s self.close() 1777s raise GeneralProxyError((1, _generalerrors[1])) 1777s if statuscode != 200: 1777s self.close() 1777s > raise HTTPError((statuscode, statusline[2])) 1777s E httplib2.socks.HTTPError: (403, b'Forbidden') 1777s 1777s /usr/lib/python3/dist-packages/httplib2/socks.py:465: HTTPError 1777s __________________ test_get_source_tree_lp_sandbox[one-line] ___________________ 1777s 1777s configdir = '/tmp/tmp8tdkicy3/config', workdir = '/tmp/tmp8tdkicy3' 1777s rootdir = '/tmp/tmp8tdkicy3/root', apt_style = 'one-line' 1777s 1777s @pytest.mark.skipif(not has_internet(), reason="online test") 1777s def test_get_source_tree_lp_sandbox( 1777s configdir: str, workdir: str, rootdir: str, apt_style: AptStyle 1777s ) -> None: 1777s release = _setup_foonux_config(configdir, apt_style) 1777s wanted_package = "curl" 1777s wanted_version = "7.81.0-1ubuntu1.2" # superseded -security version 1777s out_dir = os.path.join(workdir, "out") 1777s os.mkdir(out_dir) 1777s # pylint: disable=protected-access 1777s impl._build_apt_sandbox( 1777s rootdir, os.path.join(configdir, release), "ubuntu", "jammy", origins=None 1777s ) 1777s > res = impl.get_source_tree( 1777s wanted_package, out_dir, version=wanted_version, sandbox=rootdir 1777s ) 1777s 1777s tests/system/test_packaging_apt_dpkg.py:729: 1777s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1777s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:811: in get_source_tree 1777s sf_urls = self.get_lp_source_package(srcpackage, version) 1777s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:488: in get_lp_source_package 1777s launchpad = Launchpad.login_anonymously( 1777s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:487: in login_anonymously 1777s return cls( 1777s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:223: in __init__ 1777s super().__init__( 1777s /usr/lib/python3/dist-packages/lazr/restfulclient/resource.py:511: in __init__ 1777s self._wadl = self._browser.get_wadl_application(self._root_uri) 1777s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:502: in get_wadl_application 1777s response, content = self._request(url, media_type=wadl_type) 1777s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:441: in _request 1777s response, content = self._request_and_retry( 1777s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:400: in _request_and_retry 1777s response, content = self._connection.request( 1777s /usr/lib/python3/dist-packages/httplib2/__init__.py:1724: in request 1777s (response, content) = self._request( 1777s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:139: in _request 1777s response, content = super()._request(*args) 1777s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:204: in _request 1777s return super(RestfulHttp, self)._request( 1777s /usr/lib/python3/dist-packages/httplib2/__init__.py:1444: in _request 1777s (response, content) = self._conn_request(conn, request_uri, method, body, headers) 1777s /usr/lib/python3/dist-packages/httplib2/__init__.py:1366: in _conn_request 1777s conn.connect() 1777s /usr/lib/python3/dist-packages/httplib2/__init__.py:1156: in connect 1777s sock.connect((self.host, self.port)) 1777s /usr/lib/python3/dist-packages/httplib2/socks.py:504: in connect 1777s self.__negotiatehttp(destpair[0], destpair[1]) 1777s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1777s 1777s self = 1777s destaddr = 'api.launchpad.net', destport = 443 1777s 1777s def __negotiatehttp(self, destaddr, destport): 1777s """__negotiatehttp(self,destaddr,destport) 1777s Negotiates a connection through an HTTP server. 1777s """ 1777s # If we need to resolve locally, we do this now 1777s if not self.__proxy[3]: 1777s addr = socket.gethostbyname(destaddr) 1777s else: 1777s addr = destaddr 1777s headers = ["CONNECT ", addr, ":", str(destport), " HTTP/1.1\r\n"] 1777s wrote_host_header = False 1777s wrote_auth_header = False 1777s if self.__proxy[6] != None: 1777s for key, val in self.__proxy[6].iteritems(): 1777s headers += [key, ": ", val, "\r\n"] 1777s wrote_host_header = key.lower() == "host" 1777s wrote_auth_header = key.lower() == "proxy-authorization" 1777s if not wrote_host_header: 1777s headers += ["Host: ", destaddr, "\r\n"] 1777s if not wrote_auth_header: 1777s if self.__proxy[4] != None and self.__proxy[5] != None: 1777s headers += [self.__getauthheader(), "\r\n"] 1777s headers.append("\r\n") 1777s self.sendall("".join(headers).encode()) 1777s # We read the response until we get the string "\r\n\r\n" 1777s resp = self.recv(1) 1777s while resp.find("\r\n\r\n".encode()) == -1: 1777s resp = resp + self.recv(1) 1777s # We just need the first line to check if the connection 1777s # was successful 1777s statusline = resp.splitlines()[0].split(" ".encode(), 2) 1777s if statusline[0] not in ("HTTP/1.0".encode(), "HTTP/1.1".encode()): 1777s self.close() 1777s raise GeneralProxyError((1, _generalerrors[1])) 1777s try: 1777s statuscode = int(statusline[1]) 1777s except ValueError: 1777s self.close() 1777s raise GeneralProxyError((1, _generalerrors[1])) 1777s if statuscode != 200: 1777s self.close() 1777s > raise HTTPError((statuscode, statusline[2])) 1777s E httplib2.socks.HTTPError: (403, b'Forbidden') 1777s 1777s /usr/lib/python3/dist-packages/httplib2/socks.py:465: HTTPError 1777s ----------------------------- Captured stderr call ----------------------------- 1777s W: Download is performed unsandboxed as root as file '/tmp/tmp8tdkicy3/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) 1777s E: Can not find version '7.81.0-1ubuntu1.2' of package 'curl' 1777s E: Unable to find a source package for curl 1777s ___________________ test_get_source_tree_lp_sandbox[deb822] ____________________ 1777s 1777s configdir = '/tmp/tmpa2tial7e/config', workdir = '/tmp/tmpa2tial7e' 1777s rootdir = '/tmp/tmpa2tial7e/root', apt_style = 'deb822' 1777s 1777s @pytest.mark.skipif(not has_internet(), reason="online test") 1777s def test_get_source_tree_lp_sandbox( 1777s configdir: str, workdir: str, rootdir: str, apt_style: AptStyle 1777s ) -> None: 1777s release = _setup_foonux_config(configdir, apt_style) 1777s wanted_package = "curl" 1777s wanted_version = "7.81.0-1ubuntu1.2" # superseded -security version 1777s out_dir = os.path.join(workdir, "out") 1777s os.mkdir(out_dir) 1777s # pylint: disable=protected-access 1777s impl._build_apt_sandbox( 1777s rootdir, os.path.join(configdir, release), "ubuntu", "jammy", origins=None 1777s ) 1777s > res = impl.get_source_tree( 1777s wanted_package, out_dir, version=wanted_version, sandbox=rootdir 1777s ) 1777s 1777s tests/system/test_packaging_apt_dpkg.py:729: 1777s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1777s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:811: in get_source_tree 1777s sf_urls = self.get_lp_source_package(srcpackage, version) 1777s /usr/lib/python3/dist-packages/apport/packaging_impl/apt_dpkg.py:488: in get_lp_source_package 1777s launchpad = Launchpad.login_anonymously( 1777s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:487: in login_anonymously 1777s return cls( 1777s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:223: in __init__ 1777s super().__init__( 1777s /usr/lib/python3/dist-packages/lazr/restfulclient/resource.py:511: in __init__ 1777s self._wadl = self._browser.get_wadl_application(self._root_uri) 1777s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:502: in get_wadl_application 1777s response, content = self._request(url, media_type=wadl_type) 1777s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:441: in _request 1777s response, content = self._request_and_retry( 1777s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:400: in _request_and_retry 1777s response, content = self._connection.request( 1777s /usr/lib/python3/dist-packages/httplib2/__init__.py:1724: in request 1777s (response, content) = self._request( 1777s /usr/lib/python3/dist-packages/launchpadlib/launchpad.py:139: in _request 1777s response, content = super()._request(*args) 1777s /usr/lib/python3/dist-packages/lazr/restfulclient/_browser.py:204: in _request 1777s return super(RestfulHttp, self)._request( 1777s /usr/lib/python3/dist-packages/httplib2/__init__.py:1444: in _request 1777s (response, content) = self._conn_request(conn, request_uri, method, body, headers) 1777s /usr/lib/python3/dist-packages/httplib2/__init__.py:1366: in _conn_request 1777s conn.connect() 1777s /usr/lib/python3/dist-packages/httplib2/__init__.py:1156: in connect 1777s sock.connect((self.host, self.port)) 1777s /usr/lib/python3/dist-packages/httplib2/socks.py:504: in connect 1777s self.__negotiatehttp(destpair[0], destpair[1]) 1777s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1777s 1777s self = 1777s destaddr = 'api.launchpad.net', destport = 443 1777s 1777s def __negotiatehttp(self, destaddr, destport): 1777s """__negotiatehttp(self,destaddr,destport) 1777s Negotiates a connection through an HTTP server. 1777s """ 1777s # If we need to resolve locally, we do this now 1777s if not self.__proxy[3]: 1777s addr = socket.gethostbyname(destaddr) 1777s else: 1777s addr = destaddr 1777s headers = ["CONNECT ", addr, ":", str(destport), " HTTP/1.1\r\n"] 1777s wrote_host_header = False 1777s wrote_auth_header = False 1777s if self.__proxy[6] != None: 1777s for key, val in self.__proxy[6].iteritems(): 1777s headers += [key, ": ", val, "\r\n"] 1777s wrote_host_header = key.lower() == "host" 1777s wrote_auth_header = key.lower() == "proxy-authorization" 1777s if not wrote_host_header: 1777s headers += ["Host: ", destaddr, "\r\n"] 1777s if not wrote_auth_header: 1777s if self.__proxy[4] != None and self.__proxy[5] != None: 1777s headers += [self.__getauthheader(), "\r\n"] 1777s headers.append("\r\n") 1777s self.sendall("".join(headers).encode()) 1777s # We read the response until we get the string "\r\n\r\n" 1777s resp = self.recv(1) 1777s while resp.find("\r\n\r\n".encode()) == -1: 1777s resp = resp + self.recv(1) 1777s # We just need the first line to check if the connection 1777s # was successful 1777s statusline = resp.splitlines()[0].split(" ".encode(), 2) 1777s if statusline[0] not in ("HTTP/1.0".encode(), "HTTP/1.1".encode()): 1777s self.close() 1777s raise GeneralProxyError((1, _generalerrors[1])) 1777s try: 1777s statuscode = int(statusline[1]) 1777s except ValueError: 1777s self.close() 1777s raise GeneralProxyError((1, _generalerrors[1])) 1777s if statuscode != 200: 1777s self.close() 1777s > raise HTTPError((statuscode, statusline[2])) 1777s E httplib2.socks.HTTPError: (403, b'Forbidden') 1777s 1777s /usr/lib/python3/dist-packages/httplib2/socks.py:465: HTTPError 1777s ----------------------------- Captured stderr call ----------------------------- 1777s W: Download is performed unsandboxed as root as file '/tmp/tmpa2tial7e/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) 1777s E: Can not find version '7.81.0-1ubuntu1.2' of package 'curl' 1777s E: Unable to find a source package for curl 1777s =============================== warnings summary =============================== 1777s tests/system/test_packaging_apt_dpkg.py::test_install_packages_versioned[one-line] 1777s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmpqjlm557w/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) 1777s res = self._cache.update(fetch_progress, slist, pulse_interval) 1777s 1777s tests/system/test_packaging_apt_dpkg.py::test_install_packages_versioned[deb822] 1777s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmpz24noel7/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) 1777s res = self._cache.update(fetch_progress, slist, pulse_interval) 1777s 1777s tests/system/test_packaging_apt_dpkg.py::test_install_packages_system[one-line] 1777s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmpcat23gcv/cache/system/apt/var/lib/apt/lists/partial/ftpmaster.internal_ubuntu_dists_plucky-proposed_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 1777s res = self._cache.update(fetch_progress, slist, pulse_interval) 1777s 1777s tests/system/test_packaging_apt_dpkg.py::test_install_packages_system[deb822] 1777s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmpmooowab2/cache/system/apt/var/lib/apt/lists/partial/ftpmaster.internal_ubuntu_dists_plucky-proposed_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) 1777s res = self._cache.update(fetch_progress, slist, pulse_interval) 1777s 1777s tests/system/test_packaging_apt_dpkg.py::test_install_packages_permanent_sandbox[one-line] 1777s /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/tmpsswk8gz6/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) 1777s res = self._cache.update(fetch_progress, slist, pulse_interval) 1777s 1777s tests/system/test_packaging_apt_dpkg.py::test_install_packages_permanent_sandbox[deb822] 1777s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmpnkmysfey/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) 1777s res = self._cache.update(fetch_progress, slist, pulse_interval) 1777s 1777s tests/system/test_packaging_apt_dpkg.py::test_install_packages_permanent_sandbox_repack[one-line] 1777s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmpr_iozhn6/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) 1777s res = self._cache.update(fetch_progress, slist, pulse_interval) 1777s 1777s tests/system/test_packaging_apt_dpkg.py::test_install_packages_permanent_sandbox_repack[deb822] 1777s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmps25v15qh/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) 1777s res = self._cache.update(fetch_progress, slist, pulse_interval) 1777s 1777s tests/system/test_packaging_apt_dpkg.py::test_install_packages_armhf[one-line] 1777s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmpcul3anaa/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) 1777s res = self._cache.update(fetch_progress, slist, pulse_interval) 1777s 1777s tests/system/test_packaging_apt_dpkg.py::test_install_packages_armhf[deb822] 1777s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmpdv2dtk6y/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) 1777s res = self._cache.update(fetch_progress, slist, pulse_interval) 1777s 1777s tests/system/test_packaging_apt_dpkg.py::test_install_packages_from_launchpad[one-line] 1777s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmp68li7f1i/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) 1777s res = self._cache.update(fetch_progress, slist, pulse_interval) 1777s 1777s tests/system/test_packaging_apt_dpkg.py::test_install_packages_from_launchpad[deb822] 1777s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmpkxxy6vdd/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) 1777s res = self._cache.update(fetch_progress, slist, pulse_interval) 1777s 1777s tests/system/test_packaging_apt_dpkg.py::test_install_old_packages[one-line] 1777s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmp3isgvsbv/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) 1777s res = self._cache.update(fetch_progress, slist, pulse_interval) 1777s 1777s tests/system/test_packaging_apt_dpkg.py::test_install_old_packages[deb822] 1777s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmpcep9sov5/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) 1777s res = self._cache.update(fetch_progress, slist, pulse_interval) 1777s 1777s tests/system/test_packaging_apt_dpkg.py::test_install_package_from_a_ppa[one-line] 1777s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmpmz__rk95/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) 1777s res = self._cache.update(fetch_progress, slist, pulse_interval) 1777s 1777s tests/system/test_packaging_apt_dpkg.py::test_install_package_from_a_ppa[deb822] 1777s /usr/lib/python3/dist-packages/apt/cache.py:562: Warning: W:Download is performed unsandboxed as root as file '/tmp/tmpje2erw_l/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) 1777s res = self._cache.update(fetch_progress, slist, pulse_interval) 1777s 1777s -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html 1777s =========================== short test summary info ============================ 1777s SKIPPED [1] tests/system/test_apport_retrace.py:231: GDB sandbox is only available on amd64 1777s SKIPPED [1] tests/system/test_signal_crashes.py:232: Please remove all crash reports from /var/crash/ for this test suite: 1777s /var/crash/_usr_bin_apport-retrace.0.crash 1777s /var/crash/_usr_bin_apport-valgrind.0.crash 1777s SKIPPED [1] tests/system/test_signal_crashes.py:330: Please remove all crash reports from /var/crash/ for this test suite: 1777s /var/crash/_usr_bin_apport-retrace.0.crash 1777s /var/crash/_usr_bin_apport-valgrind.0.crash 1777s SKIPPED [1] tests/system/test_signal_crashes.py:321: Please remove all crash reports from /var/crash/ for this test suite: 1777s /var/crash/_usr_bin_apport-retrace.0.crash 1777s /var/crash/_usr_bin_apport-valgrind.0.crash 1777s SKIPPED [1] tests/system/test_signal_crashes.py:158: Please remove all crash reports from /var/crash/ for this test suite: 1777s /var/crash/_usr_bin_apport-retrace.0.crash 1777s /var/crash/_usr_bin_apport-valgrind.0.crash 1777s FAILED tests/system/test_apport_retrace.py::test_retrace_system_sandbox - sub... 1777s FAILED tests/system/test_apport_retrace.py::test_retrace_system_sandbox_gdb_sandbox 1777s FAILED tests/system/test_apport_retrace.py::test_retrace_jammy_sandbox - subp... 1777s FAILED tests/system/test_apport_retrace.py::test_retrace_jammy_sandbox_gdb_sandbox 1777s FAILED tests/system/test_apport_valgrind.py::TestApportValgrind::test_sandbox_cache_options 1777s FAILED tests/system/test_github_query.py::TestGitHubQuery::test_api_authentication 1777s FAILED tests/system/test_packaging_apt_dpkg.py::test_install_packages_versioned[one-line] 1777s FAILED tests/system/test_packaging_apt_dpkg.py::test_install_packages_versioned[deb822] 1777s FAILED tests/system/test_packaging_apt_dpkg.py::test_install_packages_dependencies[one-line] 1777s FAILED tests/system/test_packaging_apt_dpkg.py::test_install_packages_dependencies[deb822] 1777s FAILED tests/system/test_packaging_apt_dpkg.py::test_install_packages_system[one-line] 1777s FAILED tests/system/test_packaging_apt_dpkg.py::test_install_packages_system[deb822] 1777s FAILED tests/system/test_packaging_apt_dpkg.py::test_install_packages_armhf[one-line] 1777s FAILED tests/system/test_packaging_apt_dpkg.py::test_install_packages_armhf[deb822] 1777s FAILED tests/system/test_packaging_apt_dpkg.py::test_install_packages_from_launchpad[one-line] 1777s FAILED tests/system/test_packaging_apt_dpkg.py::test_install_packages_from_launchpad[deb822] 1777s FAILED tests/system/test_packaging_apt_dpkg.py::test_install_old_packages[one-line] 1777s FAILED tests/system/test_packaging_apt_dpkg.py::test_install_old_packages[deb822] 1777s FAILED tests/system/test_packaging_apt_dpkg.py::test_get_source_tree_lp_sandbox[one-line] 1777s FAILED tests/system/test_packaging_apt_dpkg.py::test_get_source_tree_lp_sandbox[deb822] 1777s ====== 20 failed, 78 passed, 5 skipped, 16 warnings in 1061.51s (0:17:41) ====== 1777s autopkgtest [17:49:48]: test system-tests: -----------------------] 1778s autopkgtest [17:49:49]: test system-tests: - - - - - - - - - - results - - - - - - - - - - 1778s system-tests FAIL non-zero exit status 1 1778s autopkgtest [17:49:49]: @@@@@@@@@@@@@@@@@@@@ summary 1778s unit-and-integration-tests PASS 1778s system-tests FAIL non-zero exit status 1 1798s nova [W] Skipping flock for amd64 1798s Creating nova instance adt-plucky-i386-apport-20241112-172010-juju-7f2275-prod-proposed-migration-environment-15-231ba15e-0758-4fdf-9cb5-197e03e5972b from image adt/ubuntu-plucky-amd64-server-20241112.img (UUID ffe5c62a-46f4-4ffb-a07e-3a95d5bf45c0)... 1798s nova [W] Skipping flock for amd64 1798s Creating nova instance adt-plucky-i386-apport-20241112-172010-juju-7f2275-prod-proposed-migration-environment-15-231ba15e-0758-4fdf-9cb5-197e03e5972b from image adt/ubuntu-plucky-amd64-server-20241112.img (UUID ffe5c62a-46f4-4ffb-a07e-3a95d5bf45c0)...