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

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

    <bug>
          <bug_id>50981</bug_id>
          
          <creation_ts>2024-07-24 18:44:39 +0300</creation_ts>
          <short_desc>Метод http пытается создавать файлы неоправданно длинными именами</short_desc>
          <delta_ts>2024-07-30 11:57:31 +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>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ivan A. Melnikov">iv</reporter>
          <assigned_to name="placeholder@altlinux.org">placeholder</assigned_to>
          <cc>boyarsh</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>249257</commentid>
    <comment_count>0</comment_count>
    <who name="Ivan A. Melnikov">iv</who>
    <bug_when>2024-07-24 18:44:39 +0300</bug_when>
    <thetext>В процессе работы над специфичными для loongarch64 модулями ядра поймал такую вот ошибку:

Err http://[...] 22662/build/repo/loongarch64/task kernel-modules-la_ow_syscall-loongarch#1:0.1.0-alt0.port.395520.0.4.0.g5aec712dc5f3.0.port:sisyphus_loongarch64+22662.200.1.1@1721832509 1:0.1.0-alt0.port.395520.0.4.0.g5aec712dc5f3.0.port:sisyphus_loongarch64+22662.200.1.1@1721832509
  Could not open file /var/cache/apt/archives/partial/kernel-modules-la%5fow%5fsyscall-loongarch#1%3a0.1.0-alt0.port.395520.0.4.0.g5aec712dc5f3.0.port%3asisyphus%5floongarch64+22662.200.1.1@1721832509_1%3a0.1.0-alt0.port.395520.0.4.0.g5aec712dc5f3.0.port%3asisyphus%5floongarch64+22662.200.1.1@1721832509_loongarch64.rpm - open (36 File name too long)
Failed to fetch http://[...]/loongarch64/tasks/22662/build/repo/loongarch64/RPMS.task/kernel-modules-la_ow_syscall-loongarch-0.1.0-alt0.port.395520.0.4.0.g5aec712dc5f3.0.port.loongarch64.rpm  Could not open file /var/cache/apt/archives/partial/kernel-modules-la%5fow%5fsyscall-loongarch#1%3a0.1.0-alt0.port.395520.0.4.0.g5aec712dc5f3.0.port%3asisyphus%5floongarch64+22662.200.1.1@1721832509_1%3a0.1.0-alt0.port.395520.0.4.0.g5aec712dc5f3.0.port%3asisyphus%5floongarch64+22662.200.1.1@1721832509_loongarch64.rpm - open (36 File name too long)

Действительно, у модуля для пре-релизного ядра получился релиз из 43 символов (это не я, это kernel-build-tools), поэтому имя файла полчилось длиной в 266 символов, что больше, чем ограничения ext4 (255).

Да, я могу, например обновить ядро, и при этом сделать ему релиз покороче. Но даже в этом случае мы оказываемся опасно близко к лимиту.

Поэтому предлагаю подумать, насколько оправдано дважды повторять версию, релиз, дисттаг и время сборки в имени файла.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249261</commentid>
    <comment_count>1</comment_count>
    <who name="Ivan Zakharyaschev">imz</who>
    <bug_when>2024-07-25 05:20:47 +0300</bug_when>
    <thetext>Они два раза повторяются для пакетов, подпадающих под Allow-Duplicates. Уникальная версия становится частью имени для таких пакетов (это можно увидеть дополняя аргумент команды install в apt-shell и т.п.), а дальше версия по общей схеме.

Получается, можно подумать о том, чтобы при скачивании пакетов из Allow-Duplicates, не повторять эту информацию в имени файла. (И теоретически для сокращения имени файла можно в качестве него использовать какой-нибудь хэш, но тогда оно будет непонятно людям. Правда, это внутреннее дело скорее, не для людей, но иногда их там люди находят и ставят rpm -U. Можно хэш и потом имя сколько влезет.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249262</commentid>
    <comment_count>2</comment_count>
    <who name="Ivan Zakharyaschev">imz</who>
    <bug_when>2024-07-25 05:24:57 +0300</bug_when>
    <thetext>(In reply to Ivan Zakharyaschev from comment #1)

&gt; Получается, можно подумать о том, чтобы при скачивании пакетов из
&gt; Allow-Duplicates, не повторять эту информацию в имени файла. (И теоретически
&gt; для сокращения имени файла можно в качестве него использовать какой-нибудь
&gt; хэш, но тогда оно будет непонятно людям. Правда, это внутреннее дело скорее,
&gt; не для людей, но иногда их там люди находят и ставят rpm -U. Можно хэш и
&gt; потом имя сколько влезет.)

Можно оставить полностью дисттаг, время сборки, версию, а имя пакета в начале имени файла при необходимости сокращать. Тогда по большей части имя файла будет совпадать со старым, но иногда имя пакета будет обрезано.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249446</commentid>
    <comment_count>3</comment_count>
    <who name="Ivan A. Melnikov">iv</who>
    <bug_when>2024-07-30 11:57:31 +0300</bug_when>
    <thetext>(In reply to Ivan Zakharyaschev from comment #1)
&gt; Они два раза повторяются для пакетов, подпадающих под Allow-Duplicates.
&gt; Уникальная версия становится частью имени для таких пакетов (это можно
&gt; увидеть дополняя аргумент команды install в apt-shell и т.п.)

Для истории: это здесь:

https://git.altlinux.org/gears/a/apt.git?a=blob;f=apt-pkg/rpm/rpmlistparser.cc;h=8355680ade350a54ac8fb9890fd6f1b99ea6400b#l127

(In reply to Ivan Zakharyaschev from comment #2)
&gt; Можно оставить полностью дисттаг, время сборки, версию, а имя пакета в
&gt; начале имени файла при необходимости сокращать.

Это хорошая мысль. Как я понимаю, окончательно имя файла формируется здесь:

https://git.altlinux.org/gears/a/apt.git?p=apt.git;a=blob;f=apt-pkg/acquire-item.cc;h=906eb287dba0e38654330fe7f335c474cb53e5c3#l717

Оно состоит из четырёх компонент:
- имя пакета (в терминах apt; для пакетов с Allow-Duplicated это name#evrdt);
- строка версии (в терминах apt; с точки зрения rpm это тот самый evrdt);
- архитектура
- точка и расширение из оригинального URI (.rpm).

Именно тут можно проверить, что имя файла оказалась больше 255 (например, NAME_MAX из limits.h; c pathconf(3) я бы не заморачивался), то первый компонент можно сделать короче ровно на столько, чтобы влезло.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>