В процессе работы над специфичными для 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). Да, я могу, например обновить ядро, и при этом сделать ему релиз покороче. Но даже в этом случае мы оказываемся опасно близко к лимиту. Поэтому предлагаю подумать, насколько оправдано дважды повторять версию, релиз, дисттаг и время сборки в имени файла.
Они два раза повторяются для пакетов, подпадающих под Allow-Duplicates. Уникальная версия становится частью имени для таких пакетов (это можно увидеть дополняя аргумент команды install в apt-shell и т.п.), а дальше версия по общей схеме. Получается, можно подумать о том, чтобы при скачивании пакетов из Allow-Duplicates, не повторять эту информацию в имени файла. (И теоретически для сокращения имени файла можно в качестве него использовать какой-нибудь хэш, но тогда оно будет непонятно людям. Правда, это внутреннее дело скорее, не для людей, но иногда их там люди находят и ставят rpm -U. Можно хэш и потом имя сколько влезет.)
(In reply to Ivan Zakharyaschev from comment #1) > Получается, можно подумать о том, чтобы при скачивании пакетов из > Allow-Duplicates, не повторять эту информацию в имени файла. (И теоретически > для сокращения имени файла можно в качестве него использовать какой-нибудь > хэш, но тогда оно будет непонятно людям. Правда, это внутреннее дело скорее, > не для людей, но иногда их там люди находят и ставят rpm -U. Можно хэш и > потом имя сколько влезет.) Можно оставить полностью дисттаг, время сборки, версию, а имя пакета в начале имени файла при необходимости сокращать. Тогда по большей части имя файла будет совпадать со старым, но иногда имя пакета будет обрезано.
(In reply to Ivan Zakharyaschev from comment #1) > Они два раза повторяются для пакетов, подпадающих под Allow-Duplicates. > Уникальная версия становится частью имени для таких пакетов (это можно > увидеть дополняя аргумент команды 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) > Можно оставить полностью дисттаг, время сборки, версию, а имя пакета в > начале имени файла при необходимости сокращать. Это хорошая мысль. Как я понимаю, окончательно имя файла формируется здесь: 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) я бы не заморачивался), то первый компонент можно сделать короче ровно на столько, чтобы влезло.