[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