Skip to content.

www.linux-os.ru

Sections
Personal tools
You are here: Home » Members » raorn's Home » combinedrepos

combinedrepos

Создание совмещённого репозитария для APT (Master + updates + локальные пакеты)

Данный "финт ушами" необходим, когда нужно объединить несколько базовых репозитариев в один, например при настройке sandman для сборки пакетов под Master 2.2.

Подобное объединение необходимо при возникновении следующих условий:

  1. Есть зеркала Master 2.2 и updates, содержимое которых изменять нельзя (все изменения будут утеряны после синхронизации)
  2. При сборке новых пакетов необходимо помимо пакетной базы дистрибутива использовать updates и локально собраные пакеты
  3. В конфиге sandman можно использовать только один репозитарий в качестве пакетной базы

Итак, зеркало Master 2.2 находится в /var/ftp/pub/distributions/ALTLinux/Master/2.2, компоненты addon, compat, hotfix, insecure, main; зеркало updates находится в /var/ftp/pub/distributions/ALTLinux/updates/Master/2.2, компонента updates; локально собраные пакеты будем держать в /var/ftp/pub/distributions/current, компонента local.

Согласно sources.list(5) и учитывая особенности sandman, описание репозитария выглядит следующим образом:

 rpm file:topdir distribution component [component...]

Из-за некоторых особенностей sandman (доступ к репозитарию при помощи mount --bind) можно использовать только относительные символические ссылки, которые должны быть видны из topdir, поэтому topdir будет располагаться в /var/ftp/pub/distributions/.

Создадим локальный репозитарий:

 $ mkdir -p /var/ftp/pub/distributions/current/SRPMS.local
 $ mkdir -p /var/ftp/pub/distributions/current/i586/RPMS.local
 $ mkdir -p /var/ftp/pub/distributions/current/i586/base

Создадим ссылки на зеркала Master 2.2 и updates относительно нашего topdir:

 $ cd /var/ftp/pub/distributions/current/i586
 $ ln -sf ../../ALTLinux/Master/2.2/ALTLinux/RPMS.addon RPMS.addon
 $ ln -sf ../../ALTLinux/Master/2.2/ALTLinux/RPMS.compat RPMS.compat
 $ ln -sf ../../ALTLinux/Master/2.2/ALTLinux/RPMS.hotfix RPMS.hotfix
 $ ln -sf ../../ALTLinux/Master/2.2/ALTLinux/RPMS.insecure RPMS.insecure
 $ ln -sf ../../ALTLinux/Master/2.2/ALTLinux/RPMS.main RPMS.main
 $ ln -sf ../../ALTLinux/updates/Master/2.2/i586/RPMS.updates RPMS.updates

Тут возникает один спорный момент - где должны находиться исходные пакеты. apt и genbasedir по умолчанию считают, что они должны быть в topdir/distribution/../SRPMS.<компонента>, sandman в свою очередь ищет их в topdir/SRPMS.<компонента>. Поэтому слинкуем исходники туда, где их будет искать apt:

 $ cd /var/ftp/pub/distributions/current
 $ ln -sf ../ALTLinux/Master/2.2/SRPMS.addon SRPMS.addon
 $ ln -sf ../ALTLinux/Master/2.2/SRPMS.compat SRPMS.compat
 $ ln -sf ../ALTLinux/Master/2.2/SRPMS.hotfix SRPMS.hotfix
 $ ln -sf ../ALTLinux/Master/2.2/SRPMS.insecure SRPMS.insecure
 $ ln -sf ../ALTLinux/Master/2.2/SRPMS.main SRPMS.main
 $ ln -sf ../ALTLinux/updates/Master/2.2/SRPMS.updates SRPMS.updates

... и создадим ссылки от topdir для совместимости с sandman:

 $ cd /var/ftp/pub/distributions
 $ ln -sf current/SRPMS.addon SRPMS.addon
 $ ln -sf current/SRPMS.compat SRPMS.compat
 $ ln -sf current/SRPMS.hotfix SRPMS.hotfix
 $ ln -sf current/SRPMS.insecure SRPMS.insecure
 $ ln -sf current/SRPMS.main SRPMS.main
 $ ln -sf current/SRPMS.updates SRPMS.updates
 $ ln -sf current/SRPMS.local SRPMS.local

Теперь надо сгенерировать индексы для apt:

 $ genbasedir --topdir=/var/ftp/pub/distributions --bz2only --progress --mapi current/i586 addon compat hotfix insecure main updates local

При желании можно подписать индексы своим pgp/gpg ключом (параметры --sign и --default-key для genbasedir).

После этого свежесозданый репозитарий можно использовать в sandman или прописать в sources.list:

 rpm file:/var/ftp/pub/distributions current/i586 local updates main

Остальные компоненты добавлять при неоходимости.

Далее при добавлении своих пакетов в local или после синхроницации updates необходимо переиндексировать изменённые компоненты, это делается при помощи параметра --partial для genbasedir:

 $ genbasedir --topdir=/var/ftp/pub/distributions --bz2only --partial --progress --mapi current/i586 updates

Вот, собственно, и всё. Аналогичную процедуру можно проделать с любой пакетной базой, например Sisyphus + локальные пакеты.

Created by raorn
Last modified 2 03:22
 

Новокузнецк автобусы и данные о поездах Новокузнецка.