Local incoming
Материал из ALT Linux Wiki
[править] Сам Себе 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) можно использовать совместно с первым скриптом.
