Bug 49730
| Summary: | Предоставлять /usr/bin/7z и p7zip, чтобы заменить устаревший p7zip | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | Vitaly Lipatov <lav> |
| Component: | 7-zip | Assignee: | Vitaly Lipatov <lav> |
| Status: | ASSIGNED --- | QA Contact: | Vitaly Lipatov <lav> |
| Severity: | normal | ||
| Priority: | P5 | CC: | george, lav, mike |
| Version: | unstable | ||
| Hardware: | x86_64 | ||
| OS: | Linux | ||
| Bug Depends on: | |||
| Bug Blocks: | 32096, 32097 | ||
Поскольку отказаться от использования в такой куче пакетов нереально, надо предоставить бесшовную замену, добавив в 7-zip предоставление p7zip. Некоторые нюансы: Некоторые пакеты зависят от /usr/bin/7z, потребуется симлинк Для зависящих от пакета p7zip (по имени) нужен Provides: p7zip p7zip-standalone (7za) — от него никто не зависит, можно безболезненно убрать. Что нужно в спеке 7-zip: Provides: p7zip = %version-%release Obsoletes: p7zip < 25 Provides: p7zip-standalone = %version-%release Obsoletes: p7zip-standalone < 25 И в %install: ln -s 7zz %buildroot%_bindir/7z ln -s 7zz %buildroot%_bindir/7za Форматы, которые остались только в p7zip (через плагин Rar.so): lz4, lz5, lizard, lzip — дополнительные компрессоры (патчи p7zip-project, не от Pavlov) 7-zip-26.00-alt2 -> sisyphus: Fri Feb 27 2026 Vitaly Lipatov <lav@altlinux.ru> 26.00-alt2 - Add /usr/bin/7z, /usr/bin/7za and provide p7zip (ALT bug 49730) Переоткрываем: замена p7zip через симлинки 7z/7za -> 7zz оказалась не полностью совместимой по CLI. В bug #60427 создание ZIP/7z в Engrampa на p10 сломалось из-за передачи -l. Исправление mate-file-archiver удалило этот ключ, но совместимость legacy-команд в 7-zip остаётся вопросом. Сравнил таблицы kSwitchForms в CPP/7zip/UI/Common/ArchiveCommandLine.cpp локальных исходников p7zip 17.05 и 7-zip 26.04: 52 и 65 имён ключей. Единственный отсутствующий в новой таблице старый ключ — -l. Остальные имена сохранены; это не проверка полной совместимости аргументов и поведения. В p7zip -l влияет на следование по символическим ссылкам: global_use_lstat = !parser[NKey::kUseLStat].ThereIs; архивируется содержимое цели ссылки. Официальный 7-Zip ключ не принимает: $ 7zz a -l /tmp/p7zip-compat-probe.7z /dev/null Command Line Error: Unknown switch: -l Код возврата 7 (проверено на установленном 7zz). Предлагается рассмотреть обвязки для /usr/bin/7z и /usr/bin/7za вместо прямых симлинков; /usr/bin/7zz оставить нативным интерфейсом. Конкретная реализация пока не выбрана. Простое отбрасывание -l не гарантирует сохранения семантики p7zip, требуется проверить корректный перевод параметра и поведение ссылок. Для проверки совместимости нужны обычные файлы, ссылки на файлы/каталоги, битые ссылки, ZIP/7z, пути с пробелами и -- (после него -l может быть именем файла). Различия методов сжатия/форматов из комментария #2 не решаются простой обвязкой. Подтверждаю на 7-zip-26.04-alt1 (Sisyphus): /usr/bin/7z и /usr/bin/7za - прямые симлинки на 7zz, и `7z a -l x.7z dir` завершается с "Unknown switch: -l" (код 7). Кроме того, различается поведение по умолчанию: p7zip без -l сохранял символические ссылки как ссылки (lstat), а 7zz по умолчанию идёт по ссылкам (сохраняет содержимое цели, на битых ссылках - предупреждения errno=2), как p7zip с -l; сохранять ссылки как ссылки 7zz умеет только с -snl. Сам p7zip из Sisyphus уже удалён, замена через Provides/Obsoletes работает. План (новая сборка 26.04-alt3): /usr/bin/7z, /usr/bin/7za (и 7zr) сделать небольшими обвязками совместимости с p7zip поверх 7zz: ключ -l (до --) убирается, это поведение 7zz по умолчанию; без -l добавляется -snl, чтобы ссылки сохранялись как ссылки, как в p7zip; явный -snl не дублируется; аргументы после -- не трогаются. /usr/bin/7zz остаётся нативным интерфейсом 7-Zip. Проверка в docker: обычные файлы, ссылки на файлы/каталоги, битые ссылки, ZIP и 7z, пути с пробелами, файл с именем -l после --. Дополнительные кодеки p7zip (lz4, lz5, lizard, lzip из комментария #2) обвязкой не решаются. |

Description
Vitaly Lipatov 2024-03-19 10:42:01 MSK