Попробую собрать что имеем в кучу и что планируется. Может кто идей докинет. Итак.
pfsget - скрипт для установки модулей из репы.
Репа модулей для pfsget это сетевая папка rsync + все что умеет wget + webdav (в планах), внутри папки может быть любая иерархия каталогов с модулями и два специальных файла _REPOLIST (или _REPOLIST.gz) и _REPOLIST.sig. Первый содержит имена модулей с некоторыми данными по ним, второй это gpg подпись первого. Такая конфигурация позволяет переносить всю репу с одной сетевой папки на другую без пересборки реполистов.
Требуется пересборка реполистов при изменениях в репе. Делается тем же pfsget (над генерацией данных в реполист еще надо работать).
Таким образом при скачивании модуля pfsget скачивает реполисты и подписи со всех реп, проверяет подписи по публичным ключам находящимся в сборке, далее производит поиск в общем списке со всех реп, если что-то найдено предлагает к установке. В случае если найденное вас устраивает и вы соглашаетесь модуль скачивается, вычисляется его контрольная сумма и эта сумма сравнивается с суммой записанной в подписанном реполисте. Такая схема практически исключает установку "левого" модуля.
Если модуль имеет зависимости указанные в pfs.deps - они также будут загружены и проверены.
Ключи:
"-u" | "--update-media" обновить реполисты
"-f" | "--force" не задавать вопросы
"-i" | "--install" ) качать не в текущую папку, а в папку указанную для установки модулей (modules) и подключить
"-l" | "--load" ) подключить после скачивания
"-o" | "--outdir" ) куда качать
"-s" | "--search" ) только найти
"-g" | "--guimode" ) режим выхлопа удобный для парсинга внешней программой (например GUI для pfsget)
"-m" | "--mkrepolist" ) генерация реполиста для репы
Частично реализовано.
Нечеткий поиск. В случае если модуль не найден в списках поиск продолжается в специальном файле куда заносятся возможные варианты поиска в том числе на русском.
Например:
pfsget браузер
Предложит вам повторить поиск с firefox, opera, vivaldi, palemoon и так далее.
Более того при наличии в системе agrep поиск будет проведен с учетом того, что в запросе есть ошибки то есть
pfsget браВзер
Предложит вам тот же список.
Сама эта система работает, нужны списки соответствий.
В ближайших планах.
Режим обновления.
pfsget ./модуль.pfs
Ищет в репе более новый (или может не новейший, а отличный от текущего) модуль. Качает во временную папку, сверяет суммы, пытается отключить текущий модуль и заменить на новый. Если отключить не получается, то заменяет не отключая и предлагает перегрузить. В случае если репа rsync имеет смысл перед скачиванием "подсунуть" предыдущий модуль. Это уменьшит траффик (при небольших изменениях обычно раза в два).
Пока не ясно по алгоритму сравнения имен модулей (см. выше)