[devel] I: документация по утилитам обработки репозитория. v2.
Igor Vlasenko
vlasenko на imath.kiev.ua
Сб Июл 27 00:47:01 MSK 2013
Уважаемые коллеги,
переработал документацию по утилитам уровня репозитория,
к вашему вниманию.
Третий уровень - утилиты обработки репозитория.
От утилит второго уровня - утилит работы с пакетами -утилиты третьего уровня отличаются тем, что к ним подключены библиотеки работы с репозиториями (пакет perl-Source-Repository).
Библиотека Source::Repository::Mass.
Основной режим этой библиотеки отбор пакетов из исходного репозитория по некоторому критерию. Утилита, пользующаяся библиотекой, указывает ей 2 репозитория: Исходный репозиторий-источник (origin) и целевой (результирующий) репозиторий (destination). Далее на вход подаются имена исходных пакетов, библиотека ищет их в обеих репозиториях, есть критерий сравнения (например, пакет должен быть старше) и если критерий выполнен, то над исходным пакетом выполняется действие, определенное в клиенте этой библиотеки.
Сравнение имен пакетов осуществляется с помошью указания объекта интерфейса Source::Repository::Mass::Matcher. Например, в утилитах python3-copycat для преобразования пакетов модулей python2 в пакеты модулей для python3 для сравнения имен используется класс Source::Repository::Mass:: Matcher::Py3CopyCat, который имена python-module-foo и python3-module-foo считает равными, а в утилите fcimport используется класс Source::Repository:: Mass:: Matcher:: DistroMap, который для сравнения имен использует базу данных DistroMap.
Свои обьекты есть и для сравнения эпох, версий и релизов. Так, сравниватель релизов для бакпортирования релизы alt3 и alt2.M60T.1 считает равными (т. е. alt2.M60T.1 считается бакпортом для alt2.M60T.1).
В результате сравнения имя разрешается в пару имен пакетов (например, при импорте из CPAN имени архива A-Foo соответствует имя пакета perl-A-Foo. Поэтому на самом деле в обработчик передается объект Source::Package::Pair, содержаший пару имен. Если по этим именам найдены реальные пакеты, то соответствующие объекты Source::Package также создаются и передаются в обработчик через Source::Package::Pair.
В Source::Repository::Mass содержится более десятка разных критериев сравнения.
Критерий newer = (такого пакета еще нет, или он есть но меньше по версии-релизу) используется для генерации пакетов.
Критерий older используется в репозитории autoports для очистки репозитория от устаревших бакпортов.
Критерий both используется в репозитории autoimports для выявления в нем пересечений с сизифом.
Свои критерии есть для выявления пакетов, присутствующих в одном репозитории, но отсутствующих в другом и т. д.
Выбранные в результате применения критерия сравнения имена исходных пакетов как объект Source::Package::Pair передаются в абстрактный обработчик.
Обработчики могут быть самыми разными. В скрипте autorepo-purge обработчик удаляет выбранные критерием older пакеты. В скриптах croncopy обработчик просто передает полученное имя в incoming командой
Ssh git.alt build -b $branch copy $name.
Однако чаще всего используется обработчик Source::Repository::Mass:: Transform::Embedded, который обрабатывает выбранные пакеты как утилита 2-го уровня (утилита преобразования пакетов).
С помощью этого обработчика на базе библиотеки Source::Repository::Mass
можно создавать утилиты массового преобразования пакетов по списку имен.
Соответственно, если пакет дистрибутивный, то на практике гораздо удобнее пользоваться не утилитами 2-го уровня, а соответствующей специально настроенной под этот дистрибутив утилитой 3-го уровня.
Например, для импорта из mageia утилита 2-го уровня - srpmconvert-mga,
утилита 3-го уровня - mgamass;
для импорта из Fedora утилита 2-го уровня - srpmconvert-fc,
утилита 3-го уровня - fcmass.
Пример.
Соберем пакет fritzing для радиотехники.
$ fcmass fritzing
Записан: ./OUT/fritzing-0.7.5b-alt1_2.src.rpm
$ hshS ./OUT/fritzing-0.7.5b-alt1_2.src.rpm 2>&1 | tee hsh.log
[ . . . ]
E: Невозможно найти пакет quazip-devel
$ fcmass quazip
Записан: ./OUT/quazip-0.5-alt1_1.src.rpm
$ hshS ./OUT/quazip-0.5-alt1_1.src.rpm 2>&1 | tee hsh.log
[ . . . ]
Wrote: /usr/src/RPM/SRPMS/quazip-0.5-alt1_1.src.rpm
Wrote: /usr/src/RPM/RPMS/x86_64/quazip-0.5-alt1_1.x86_64.rpm
Wrote: /usr/src/RPM/RPMS/x86_64/quazip-devel-0.5-alt1_1.x86_64.rpm
Wrote: /usr/src/RPM/RPMS/x86_64/quazip-debuginfo-0.5-alt1_1.x86_64.rpm
8.43user 1.60system 0:17.16elapsed 58%CPU (0avgtext+0avgdata 232464maxresident)k0inputs+0outputs (0major+755716minor)pagefaults 0swaps
$ hshS ./OUT/fritzing-0.7.5b-alt1_2.src.rpm 2>&1 | tee hsh.log
[ . . . ]
Wrote: /usr/src/RPM/SRPMS/fritzing-0.7.5b-alt1_2.src.rpm
Wrote: /usr/src/RPM/RPMS/x86_64/fritzing-0.7.5b-alt1_2.x86_64.rpm
Wrote:/usr/src/RPM/RPMS/x86_64/fritzing-debuginfo-0.7.5b-alt1_2.x86_64.rpm
391.82user 25.10system 6:59.92elapsed 99%CPU (0avgtext+0avgdata 1826656maxresident)k0inputs+0outputs (0major+8215063minor)pagefaults 0swaps
Как видим, на этом уровне использование утилит автоматизации позволяет существенно ускорить подготовку исходных пакетов.
--
Dr. Igor Vlasenko
--------------------
Topology Department
Institute of Math
Kiev, Ukraine
--
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Подробная информация о списке рассылки Devel