После выполнения apt-cdrom add при выполнении команды apt-get update возникает ошибка: "E: The package lists or status file could not be parsed or opened." Это появилось в версии alt70 пакета apt, а в alt69 работает. Образ для тестирования apt-cdrom add взят из: https://lists.altlinux.org/pipermail/sisyphus/2019-November/368245.html APT::Cache-Start и APT::Cache-Limit не влияют на результат (ошибку): # rpm --rebuilddb && apt-get -o APT::Cache-Start=$(( (1024 + 512 + 256 + 128 +64 +32 +16 +8 +4 +2 +1) * 1024 * 1024 )) update Get:1 http://git.altlinux.org tasks/archive/done/_231/236755/build/repo/x86_64 release [1189B] Fetched 1189B in 0s (13.6kB/s) Hit http://git.altlinux.org tasks/archive/done/_231/236755/build/repo/x86_64/task pkglist Hit http://git.altlinux.org tasks/archive/done/_231/236755/build/repo/x86_64/task release Reading Package Lists... Done E: The package lists or status file could not be parsed or opened. # apt-get -o APT::Cache-Limit=$(( 2 * 1024 * 1024 * 1024 )) update Get:1 http://git.altlinux.org tasks/archive/done/_231/236755/build/repo/x86_64 release [1189B] Fetched 1189B in 0s (13.0kB/s) Hit http://git.altlinux.org tasks/archive/done/_231/236755/build/repo/x86_64/task pkglist Hit http://git.altlinux.org APT::Cache-Starttasks/archive/done/_231/236755/build/repo/x86_64/task release Reading Package Lists... Done E: The package lists or status file could not be parsed or opened.
(In reply to comment #0) > После выполнения apt-cdrom add при выполнении команды apt-get update возникает > ошибка: > "E: The package lists or status file could not be parsed or opened." > > Это появилось в версии alt70 пакета apt, а в alt69 работает. > > Образ для тестирования apt-cdrom add взят из: > https://lists.altlinux.org/pipermail/sisyphus/2019-November/368245.html > > APT::Cache-Start и APT::Cache-Limit не влияют на результат (ошибку): > > # rpm --rebuilddb && apt-get -o APT::Cache-Start=$(( (1024 + 512 + 256 + 128 > +64 +32 +16 +8 +4 +2 +1) * 1024 * 1024 )) update > Get:1 http://git.altlinux.org tasks/archive/done/_231/236755/build/repo/x86_64 > release [1189B] > Fetched 1189B in 0s (13.6kB/s) > Hit http://git.altlinux.org > tasks/archive/done/_231/236755/build/repo/x86_64/task pkglist > Hit http://git.altlinux.org > tasks/archive/done/_231/236755/build/repo/x86_64/task release > Reading Package Lists... Done > E: The package lists or status file could not be parsed or opened. > > # apt-get -o APT::Cache-Limit=$(( 2 * 1024 * 1024 * 1024 )) update > Get:1 http://git.altlinux.org tasks/archive/done/_231/236755/build/repo/x86_64 > release [1189B] > Fetched 1189B in 0s (13.0kB/s) > Hit http://git.altlinux.org > tasks/archive/done/_231/236755/build/repo/x86_64/task pkglist > Hit http://git.altlinux.org > APT::Cache-Starttasks/archive/done/_231/236755/build/repo/x86_64/task release > Reading Package Lists... Done > E: The package lists or status file could not be parsed or opened. Тут что-то не то вставилось во втором примере. Насколько я помню, разница между двумя примерами была в том, что в одном случае случается ошибка E: The package lists or status file could not be parsed or opened. а в другом -- segfault (когда слишком много для твоей виртуалки памяти запрашивается). Но segfault не видно в процитированном. (там ещё база данных rpm портилась, после чего приходилось делать rpm --rebuilddb). Я заинтересовался отдельно случаем segfault при запросе большого количества памяти, но не смог у себя воспроизвести. Как у тебя это происходит в точности? Вот, например, что я могу наблюдать: [root@prodesk /]# sh -c 'ulimit -v $(( 512 * 1024 )); rpm --rebuilddb && rm -fv /var/cache/apt/*.bin && apt-get -o APT::Cache-Start=$(( 2 * 1024 * 1024 * 1024 )) -o Debug::DynamicMMap::Grow=yes update' removed '/var/cache/apt/pkgcache.bin' removed '/var/cache/apt/srcpkgcache.bin' Reading Package Lists... Error! E: Unable to seek to 18446744071562067968 W: Unable to munmap E: The package lists or status file could not be parsed or opened. [root@prodesk /]# sh -c 'ulimit -v $(( 512 * 1024 )); rpm --rebuilddb && rm -fv /var/cache/apt/*.bin && apt-get -o APT::Cache-Start=$(( 1 * 1024 * 1024 * 1024 )) -o Debug::DynamicMMap::Grow=yes update' removed '/var/cache/apt/pkgcache.bin' Reading Package Lists... Error! E: Couldn't make mmap of 1073741825 bytes - mmap (12 Cannot allocate memory) E: The package lists or status file could not be parsed or opened. [root@prodesk /]# df /var/ Filesystem Size Used Avail Use% Mounted on /dev/mapper/lx8-var 20G 12G 6,8G 63% /var [root@prodesk /]# sh -c 'rpm --rebuilddb && rm -fv /var/cache/apt/*.bin && apt-get -o APT::Cache-Start=$(( 2 * 1024 * 1024 * 1024 )) -o Debug::DynamicMMap::Grow=yes update' removed '/var/cache/apt/pkgcache.bin' removed '/var/cache/apt/srcpkgcache.bin' Reading Package Lists... Error! E: Unable to seek to 18446744071562067968 W: Unable to munmap E: The package lists or status file could not be parsed or opened. [root@prodesk /]# sh -c 'rpm --rebuilddb && rm -fv /var/cache/apt/*.bin && apt-get -o APT::Cache-Start=$(( 1 * 1024 * 1024 * 1024 )) -o Debug::DynamicMMap::Grow=yes update' removed '/var/cache/apt/pkgcache.bin' Reading Package Lists... Done Building Dependency Tree... Done [root@prodesk /]# rpm -q apt apt-0.5.15lorg2-alt71.x86_64 [root@prodesk /]#
По сути этой ошибки -- я могу у себя на другой системе вопроизвести, например, с образом server: [root@prodesk /]# tail -1 /etc/fstab /altspace/iso/9/alt-server-9.0-x86_64.iso /media/ALTLinux auto defaults [root@prodesk /]# apt-cdrom add Using Media mount point /media/ALTLinux/ Unmounting Media Please insert a Media and press enter Mounting Media Identifying.. [96cd86323c5d47f02528857ebba119b8-2] Scanning Media for index files.. Found 1 package indexes and 0 source indexes. Found label 'ALT Server 9.0 x86_64 build 2019-10-23' This Media is called: 'ALT Server 9.0 x86_64 build 2019-10-23' Reading Indexes... Done Writing new source list Source List entries for this Media are: rpm cdrom:[ALT Server 9.0 x86_64 build 2019-10-23]/ ALTLinux main Repeat this process for the rest of the Media in your set. [root@prodesk /]# apt-get update Reading Package Lists... Done E: The package lists or status file could not be parsed or opened. [root@prodesk /]#
У меня segfault больше не воспроизводится.
Проблема воспроизвелась тоже. Прогнал git bisect, вот результат: 667677a7d268aaf0f84ce3bc0567c5350db20ec6 is the first bad commit commit 667677a7d268aaf0f84ce3bc0567c5350db20ec6 Author: Aleksei Nikiforov <darktemplar@altlinux.org> Date: Thu Jun 13 12:35:49 2019 +0300 Use special type to return allocation failure since 0 is a valid offset value apt.spec | 2 +- apt/apt-pkg/contrib/mmap.cc | 33 ++++++------ apt/apt-pkg/contrib/mmap.h | 9 ++-- apt/apt-pkg/pkgcachegen.cc | 111 ++++++++++++++++++++++----------------- apt/apt-pkg/pkgcachegen.h | 23 ++++---- apt/apt-pkg/rpm/rpmindexfile.cc | 4 +- apt/apt-pkg/rpm/rpmlistparser.cc | 78 ++++++++++++++++++++++----- apt/apt-pkg/rpm/rpmlistparser.h | 3 +- 8 files changed, 168 insertions(+), 95 deletions(-) В данном коммите была улучшена обработка ошибок, что привело к выявлению ранее игнорируемой проблемы. Было обнаружено что apt-cdrom не копирует файлы release и release.$component, т.е. эти файлы фактически тихо игнорируются. Вот файлы в примонтированном образе: $ ls -la /media/ALTLinux/ALTLinux/base/* -r--r--r-- 1 root root 3232236 окт 22 15:28 /media/ALTLinux/ALTLinux/base/pkglist.main.bz2 -r--r--r-- 1 root root 2943976 окт 22 15:28 /media/ALTLinux/ALTLinux/base/pkglist.main.xz -r--r--r-- 1 root root 421 окт 22 15:28 /media/ALTLinux/ALTLinux/base/release -r--r--r-- 1 root root 123 окт 22 15:28 /media/ALTLinux/ALTLinux/base/release.main А вот файлы, скопированные через apt-cdrom: $ ls -la /var/lib/apt/lists/*_ALTLinux_base_* -rw-r--r-- 1 root root 7659681 дек 2 18:11 /var/lib/apt/lists/ALT%20Workstation%209.0%20x86%5f64%20build%202019-10-22_ALTLinux_base_pkglist.main -rw-r--r-- 1 root root 0 дек 2 18:11 /var/lib/apt/lists/ALT%20Workstation%209.0%20x86%5f64%20build%202019-10-22_ALTLinux_base_release -rw-r--r-- 1 root root 0 дек 2 18:11 /var/lib/apt/lists/ALT%20Workstation%209.0%20x86%5f64%20build%202019-10-22_ALTLinux_base_release.main Можно заметить, что скопированные release и release.main пусты, хотя pkglist.main успешно распакован, а на образе эти файлы не пустые. Фикс готов, сделал новый релиз с ним. После установки фикса необходимо будет заново запустить apt-cdrom add для всех дисков. http://git.altlinux.org/people/darktemplar/packages/?p=apt.git;a=commitdiff;h=0112422491945ac78e58105b8bf3126ef3ddd38a Ждите аппрува от мейнтейнеров пакета.
apt-0.5.15lorg2-alt71.3 -> sisyphus: Mon Sep 21 2020 Ivan Zakharyaschev <imz@altlinux> 0.5.15lorg2-alt71.3 - Fixed copying release information from cdrom (thx Aleksei Nikiforov). (Closes: #37531)