<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>37531</bug_id>
          
          <creation_ts>2019-11-22 20:54:11 +0300</creation_ts>
          <short_desc>Не работает apt-get update после выполнения apt-cdrom add</short_desc>
          <delta_ts>2020-09-21 17:57:07 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>apt</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="obirvalger@altlinux.org">obirvalger</reporter>
          <assigned_to name="Ivan Zakharyaschev">imz</assigned_to>
          <cc>boyarsh</cc>
    
    <cc>darktemplaralt</cc>
    
    <cc>glebfm</cc>
    
    <cc>imz</cc>
    
    <cc>ldv</cc>
    
    <cc>placeholder</cc>
    
    <cc>vt</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>185739</commentid>
    <comment_count>0</comment_count>
    <who name="obirvalger@altlinux.org">obirvalger</who>
    <bug_when>2019-11-22 20:54:11 +0300</bug_when>
    <thetext>После выполнения apt-cdrom add при выполнении команды apt-get update возникает ошибка:
&quot;E: The package lists or status file could not be parsed or opened.&quot;

Это появилось в версии alt70 пакета apt, а в alt69 работает.

Образ для тестирования apt-cdrom add взят из: https://lists.altlinux.org/pipermail/sisyphus/2019-November/368245.html

APT::Cache-Start и APT::Cache-Limit не влияют на результат (ошибку):

# rpm --rebuilddb &amp;&amp; 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.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185743</commentid>
    <comment_count>1</comment_count>
    <who name="Ivan Zakharyaschev">imz</who>
    <bug_when>2019-11-24 04:14:50 +0300</bug_when>
    <thetext>(In reply to comment #0)
&gt; После выполнения apt-cdrom add при выполнении команды apt-get update возникает
&gt; ошибка:
&gt; &quot;E: The package lists or status file could not be parsed or opened.&quot;
&gt; 
&gt; Это появилось в версии alt70 пакета apt, а в alt69 работает.
&gt; 
&gt; Образ для тестирования apt-cdrom add взят из:
&gt; https://lists.altlinux.org/pipermail/sisyphus/2019-November/368245.html
&gt; 
&gt; APT::Cache-Start и APT::Cache-Limit не влияют на результат (ошибку):
&gt; 
&gt; # rpm --rebuilddb &amp;&amp; apt-get -o APT::Cache-Start=$(( (1024 + 512 + 256 + 128
&gt; +64 +32 +16 +8 +4 +2 +1) * 1024 * 1024 )) update
&gt; Get:1 http://git.altlinux.org tasks/archive/done/_231/236755/build/repo/x86_64
&gt; release [1189B]
&gt; Fetched 1189B in 0s (13.6kB/s)
&gt; Hit http://git.altlinux.org
&gt; tasks/archive/done/_231/236755/build/repo/x86_64/task pkglist
&gt; Hit http://git.altlinux.org
&gt; tasks/archive/done/_231/236755/build/repo/x86_64/task release
&gt; Reading Package Lists... Done
&gt; E: The package lists or status file could not be parsed or opened.
&gt; 
&gt; # apt-get -o APT::Cache-Limit=$(( 2 * 1024 * 1024 * 1024 )) update              
&gt; Get:1 http://git.altlinux.org tasks/archive/done/_231/236755/build/repo/x86_64
&gt; release [1189B]                                                     
&gt; Fetched 1189B in 0s (13.0kB/s)                                                  
&gt; Hit http://git.altlinux.org
&gt; tasks/archive/done/_231/236755/build/repo/x86_64/task pkglist                   
&gt; Hit http://git.altlinux.org
&gt; APT::Cache-Starttasks/archive/done/_231/236755/build/repo/x86_64/task release   
&gt; Reading Package Lists... Done
&gt; 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 &apos;ulimit -v $(( 512 * 1024 )); rpm --rebuilddb &amp;&amp; rm -fv /var/cache/apt/*.bin &amp;&amp; apt-get -o APT::Cache-Start=$(( 2 * 1024 * 1024 * 1024 )) -o Debug::DynamicMMap::Grow=yes update&apos;
removed &apos;/var/cache/apt/pkgcache.bin&apos;
removed &apos;/var/cache/apt/srcpkgcache.bin&apos;
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 &apos;ulimit -v $(( 512 * 1024 )); rpm --rebuilddb &amp;&amp; rm -fv /var/cache/apt/*.bin &amp;&amp; apt-get -o APT::Cache-Start=$(( 1 * 1024 * 1024 * 1024 )) -o Debug::DynamicMMap::Grow=yes update&apos;
removed &apos;/var/cache/apt/pkgcache.bin&apos;
Reading Package Lists... Error!
E: Couldn&apos;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 &apos;rpm --rebuilddb &amp;&amp; rm -fv /var/cache/apt/*.bin &amp;&amp; apt-get -o APT::Cache-Start=$(( 2 * 1024 * 1024 * 1024 )) -o Debug::DynamicMMap::Grow=yes update&apos;
removed &apos;/var/cache/apt/pkgcache.bin&apos;
removed &apos;/var/cache/apt/srcpkgcache.bin&apos;
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 &apos;rpm --rebuilddb &amp;&amp; rm -fv /var/cache/apt/*.bin &amp;&amp; apt-get -o APT::Cache-Start=$(( 1 * 1024 * 1024 * 1024 )) -o Debug::DynamicMMap::Grow=yes update&apos;
removed &apos;/var/cache/apt/pkgcache.bin&apos;
Reading Package Lists... Done
Building Dependency Tree... Done
[root@prodesk /]# rpm -q apt
apt-0.5.15lorg2-alt71.x86_64
[root@prodesk /]#</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185744</commentid>
    <comment_count>2</comment_count>
    <who name="Ivan Zakharyaschev">imz</who>
    <bug_when>2019-11-24 05:54:11 +0300</bug_when>
    <thetext>По сути этой ошибки -- я могу у себя на другой системе вопроизвести, например, с образом 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 &apos;ALT Server 9.0 x86_64 build 2019-10-23&apos;
This Media is called:
 &apos;ALT Server 9.0 x86_64 build 2019-10-23&apos;
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 /]#</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185777</commentid>
    <comment_count>3</comment_count>
    <who name="obirvalger@altlinux.org">obirvalger</who>
    <bug_when>2019-11-25 17:25:45 +0300</bug_when>
    <thetext>У меня segfault больше не воспроизводится.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185959</commentid>
    <comment_count>4</comment_count>
    <who name="Aleksei Nikiforov">darktemplaralt</who>
    <bug_when>2019-12-03 11:52:35 +0300</bug_when>
    <thetext>Проблема воспроизвелась тоже.

Прогнал git bisect, вот результат:

667677a7d268aaf0f84ce3bc0567c5350db20ec6 is the first bad commit
commit 667677a7d268aaf0f84ce3bc0567c5350db20ec6
Author: Aleksei Nikiforov &lt;darktemplar@altlinux.org&gt;
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

Ждите аппрува от мейнтейнеров пакета.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192718</commentid>
    <comment_count>5</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2020-09-21 17:57:07 +0300</bug_when>
    <thetext>apt-0.5.15lorg2-alt71.3 -&gt; sisyphus:

 Mon Sep 21 2020 Ivan Zakharyaschev &lt;imz@altlinux&gt; 0.5.15lorg2-alt71.3
 - Fixed copying release information from cdrom (thx Aleksei Nikiforov).
   (Closes: #37531)</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>