#bass 

Обновление distfiles в BASS

Всё продолжаю упарываться по теме distfiles в BASS проекте.
Сделал большущее изменение того как всё скачивается.

Раньше была директория distfiles, в которой в основном лежали .meta4
файлы, либо .do, которые клонировали репозитории и сами готовили tarball.
distfiles/default.do находил .meta4 и вызывал всякое скачивание с проверкой
контрольных сумм.

Теперь же метаинформация хранится в "metadir" "формате". Например, чтобы
скачать distfiles/dl/foo, надо создать директорию distfiles/meta/foo, где
будут лежать файлы:
* size, содержащий длину, ASCII десятичное число
* hashes, содержащий "blake3-256 49dc..."-like строчки
* urls, содержащий URL-ы, в том числе в "pri|loc|url" формате

В принципе, это вся та же самая информация что и почти во всех .meta4
файлах, но только легко обрабатываемая в shell. И легко можно без XML
библиотек сгенерировать .meta4 на основе подобной metadir.

Вся прелесть в том, что никто же не мешает urls генерировать redo!

    -- distfiles/meta/less-692.tar.gz/urls.do --
    echo "1|us|https://greenwoodsoftware.com/less/less-692.tar.gz"
    redo-ifchange ../utils/urls-for-gnu
    PRI=2 ../utils/urls-for-gnu less/less-692.tar.gz

    -- distfiles/meta/freetype-2.14.2.tar.xz/urls.do --
    redo-ifchange ../utils/urls-for-savannah ../utils/urls-for-sourceforge
    ../utils/urls-for-savannah freetype/freetype-2.14.2.tar.xz
    PRI=5 ../utils/urls-for-sourceforge freetype freetype2/2.14.2/freetype-2.14.2.tar.xz

где утилиты для генерирования ссылок выглядят как-то так:

    #!/bin/sh -e
    file=$1
    [ -n "$file" ]
    PRI=${PRI:-1}
    cat <<EOF
    $(( $PRI + 0 ))||http://download.savannah.nongnu.org/releases/$file
    $(( $PRI + 1 ))||https://download.savannah.nongnu.org/releases/$file
    $(( $PRI + 3 ))|se|https://mirror.accum.se/mirror/gnu.org/savannah/$file
    [...]
    EOF

При смене списка зеркал, достаточно поменять один файл. Если кроме
distcache.FreeBSD.org есть ещё какие-то кэши других проектов (ещё просто
не смотрел в эту сторону), то нужно по одной строчке будет добавить в
соответствующие urls.do.

Что делать с криптографическими подписями, которые присутствовали в
.meta4 файлах? А почему бы их просто не сохранить в виде полноценных
файлов, которые не преобразованы в enarmor формат, а остаются бинарями,
as-is скачанными? Не нужен инструмент для доставания их из .meta4.

В принципе, зависимость от моих meta4ra утилит на Go становится меньшей.
Список URL у нас уже есть -- можно в цикле пытаться скачать каким-нибудь
cURL, fetch, и т.д.. Проверять хэши тоже можно было бы уже просто в shell,
что ещё минус одна зависимость от Go программы:

    while read typ hsh ; do [...] ; done <hashes

distfiles/meta/utils/metadir-to-meta4 может воссоздать .meta4 файл. Это
продолжает использоваться если для скачивания захочется выбрать aria2c.

Что делать с meta4ra-url-sort утилитой
(423b87a3fae5ee7487eec4d08a9e16745cfa89ad)?
Переписать на Perl в distfiles/meta/utils/urls-sort!
Минус ещё одна зависимость от Go программы.

Совершенно забыл, но я использовал .meta4 и внутри skelpkg для проверки
целостности. Парой строчек в pkg-inst утилите добавляю возможность, не
теряя обратной совместимости, использовать .hashes файлы, не требующие
XML функционала.

    [оставить комментарий]