Nov. 5th, 2021
Z нестандарт
Nov. 5th, 2021 08:34 pmЕсть такая библиотека для сжатия данных libzstd. В общем, неплохой алгоритм, и даже уже не новый, почти во всех дистрибутивах из коробки есть.
А есть формат пакета deb. Мне всегда в Debian нравилось то, что для того, чтобы распаковать deb-пакет, не нужна debian-подобная система. Будь у тебя хоть freebsd, хоть solaris, там обязательно есть ar, архиватор, которым делают статические библиотеки для C, и им можно разобрать deb на data.tar.xz и control.tar.xz (вернее. необязательно .xz, когда-то был .gz, а сейчас поддерживается еще штуки четыре варианта алгоритмов сжатия).
К сожалению как выясняется, поддерживаются эти алгоритмы в dpkg в C-шном коде. Поэтому когда Ubuntu решила добавить в этот список zstd, и не просто добавить, а сделать его алгоритмом по умолчанию, dpkg из Debian перестал понимать пакеты из свежей ubuntu. Причем в самой убунту поддержка zstd появилась уже года 4 как. А вот пропихнуть её обратно в Debian не пропихнули.
То есть dpkg из ubuntu 18.04 deb из 21.10 распаковывает, а dpkg из вышедшего несколько месяцев назад Debian bullseye - нет.
На самом деле в dpkg есть возможность поддержки алгоритма компрессии и посредством вызовов функций из библиотеки и посредством вызова внешней прошраммы декомпрессора (в данном случае zstd), благо с незапамятных времен (с прошлого века это точно) все программы компрессоры имеют совместимый интерфейс. Что bzip2, что lzma, что lz4 - все рассчитаны на то, что их будут использовать с теми же ключами, что и gzip.
Но вот дописать записть в массив, отображающий расширение файла на набор функций написать сами эти функции, вызвав уже имеющиеся функции вызова внешней программы с правильным именем программы - потребовалось. Ну нет бы это в какой-нибудь текстовый конфиг вынести.
Да, и reprepro тоже патчить пришлось. Вот приспичило авторам этой программы самим лезть внутрь deb-файла, не полагаясь на dpkg.