Local incoming
Сам Себе Incoming или Как Построить Свой ftp.a.o/p/d/A/Sisyphus
Многие изобретают свои велосипеды для хранения самосборных пакетов. Один из велосипедов изобретён для поддержания самого проекта Sisyphus, в этой заметке рассказано как им пользоваться.
Подготовка
Первым делом надо поставить пакет sisyphus используя, например, apt-get. В пакете есть один корфигурационный файл /etc/sisyphus/config с настройкапи по умолчанию, правим его под себя:
#!/bin/sh unset \ LANG \ LANGUAGE \ LINGUAS \ LC_CTYPE \ LC_NUMERIC \ LC_TIME \ LC_COLLATE \ LC_MONETARY \ LC_MESSAGES \ LC_PAPER \ LC_NAME \ LC_ADDRESS \ LC_TELEPHONE \ LC_MEASUREMENT \ LC_IDENTIFICATION \ LC_ALL \ ||: #Sisyphus root PREFIX="/raid/ALT/Sisyphus" #Architectures ARCHITECTURES="i586 i686 i386 x86_64 noarch" #Distribution name : ${DISTRIBUTION:=i586} ARCHIVE="$(date +%s)" ORIGIN='ALT Linux Team' LABEL='Sisyphus' CODENAME='ALT' SUITE='ALT Linux' DESCRIPTION='Sisyphus' VERSION=unstable GENBASEDIR_OPT_ARGS='--bz2only --mapi --no-oldhashfile' : ${GENBASEDIR_SIGNING_ARGS:='-s --default-key=security@altlinux.ru'} #Components LINKONLY_COMPONENTS='classic' MIXED_COMPONENTS= ALL_COMPONENTS="$LINKONLY_COMPONENTS" #new files location NEW_FILE_PREFIX=files LIST_PREFIX=list #Obsolete variables NEW_SRC_REPOSITORIES="$NEW_FILE_PREFIX/SRPMS" #permissions PERM_GROUP=sisyphus PERM_MODE='g+w,a+rX' #outgoing incoming : ${START_DIR:=/raid/OUT/Sisyphus}
- PREFIX - это корень нашего "Сизифёнка". Я использую /var/ftp/pub/distributions/local .
- ARCHITECTURES - все архитектуры, которые мы поддерживаем. У меня это "i686 i586 noarch", your mileage may vary.
- От DISTRIBUTION до VERSION - текстовые метаданные для base/release. Редактируются по своему усмотрению, см.такж. genbasedir --help .
- GENBASEDIR_OPT_ARGS - дополнительные опции для genbasedir. Я для наглядности добавил --progress .
- GENBASEDIR_SIGNING_ARGS - опции создания gpg подписи для genbasedir, измените аргумент --default-key под себя.
- PERM_* - опции для chgrp/chmod, которые будут применяться к репозитарию.
- START_DIR - каталог, откуда sisyphus_add_new будет забирать пакеты.
Настройка окружения
Надо создать структуру каталогов в $PREFIX:
$ find local -type d local local/noarch local/noarch/RPMS.classic local/noarch/SRPMS.classic local/noarch/base local/files local/files/SRPMS local/files/noarch local/files/noarch/RPMS local/files/i586 local/files/i586/RPMS local/files/i686 local/files/i686/RPMS local/files/list local/i586 local/i586/RPMS.classic local/i586/SRPMS.classic local/i586/base local/i686 local/i686/RPMS.classic local/i686/SRPMS.classic local/i686/base
Примерный shell-pattern для mkdir -p может выглядеть как "PREFIX/{files/{ARCHITECTURES/{RPMS},SRPMS,list},ARCHITECTURES/Unknown action "S,}RPMS.classic,base"", где ARCHITECTURES равно "{список архитектур разделённый запятыми}". Довольно страшная конструкция ;-)
В каталоге $START_DIR надо создать каталоги SRPMS и RPMS.
Добавляем пакеты
Перед тем как добавлять новые пакеты в "Сизифёнка", надо добавить их имена в списки files/list/list.src.classic и files/list/list.АРХИТЕКТУРА.classic. Несмотря на то, что в "Старшем Сизифе" списки имеют не плоскую структуру, пакет sisyphus работает с простыми списками, где пакеты пересичлены по одному на строку без всяких связей.
Собраные пакеты надо поместить в соответствующие подкаталоги $START_DIR, запустить sisyphus_add_new, если всё прошло гладко, запускаем sisyphys_relink и sisyphus_genhash.
Теперь можно прописать нашего "Сизифёнка" в sources.list с компонентой classic. Не забывайте, что архитектур несколько!
Цепляем hasher
Достать пакеты из hasher и положить их в $START_DIR можно примерно следующим скриптом (untested):
#!/bin/sh -efu . /etc/sisyphus/config prefix="$1" && shift target="$1" $$ shift find "$prefix/repo/$target/$RPMS.hasher" -mindepth 1 -maxdepth 1 -type f -name '*.rpm' -print0 | xargs -r0 mv -f -v --target-directory="$rpms_out" -- find "$prefix/repo/SRPMS.hasher" -mindepth 1 -maxdepth 1 -type f -name '*.rpm' -print0 | xargs -r0 mv -f -v --target-directory="$srpms_out" --
Если используется gear, то можно воспользоваться скриптом gear-hsh-build с примерно следующей обвязкой:
#!/bin/sh -efu trap '' SIGPIPE . /etc/sisyphus/config gear-hsh-build --prefix="ПРЕФИКС_ДЛЯ_СБОРКИ" --export="$START_DIR" --sisyphus --cleanup-repo "$@" find "$START_DIR/SRPMS" "$START_DIR/RPMS" -mindepth 1 -maxdepth 1 -type f -name '*.rpm' -print0 | xargs -r0 rpm --addsign -- find "$START_DIR/SRPMS" -mindepth 1 -maxdepth 1 -type f -name '*.rpm' -print0 | xargs -r0 cp -f -v --target-directory="ПУТЬ_К_КАТАЛОГУ_ДЛЯ_ОТПРАВКИ_В_Incoming" -- sisyphus_add_new sisyphus_relink sisyphus_genhash
Этот же скрипт (точнее его часть после gear-hsh-build) можно использовать совместно с первым скриптом.