Local incoming

Материал из ALT Linux Wiki
48px-Mail-mark-junk red.svg.png
Эта статья протухла.
Её нужно существенно доработать или удалить


Freesource-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была перемещена с freesource.info.
Эта страница наверняка требует чистки и улучшения — смело правьте разметку и ссылки.
Просьба по окончанию убрать этот шаблон со страницы.


Сам Себе 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) можно использовать совместно с первым скриптом.