APT в ALT Linux/CreateRepository: различия между версиями

Материал из ALT Linux Wiki
Строка 3: Строка 3:
== Создание локального репозитория ==
== Создание локального репозитория ==
Для создания репозитория достаточно создать правильную структуру директорий, разместить в ней rpm-пакеты и создать метаинформацию для APT.
Для создания репозитория достаточно создать правильную структуру директорий, разместить в ней rpm-пакеты и создать метаинформацию для APT.
Ключевые слова: Локальный репозиторий.


=== Структура APT-RPM репозитория ===
=== Структура APT-RPM репозитория ===

Версия от 21:58, 15 октября 2008

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


Создание локального репозитория

Для создания репозитория достаточно создать правильную структуру директорий, разместить в ней rpm-пакеты и создать метаинформацию для APT. Ключевые слова: Локальный репозиторий.

Структура APT-RPM репозитория

APT-RPM репозиторий выглядит достаточно просто:

i586/
    base/ # метаинформация
        release
        pkglist.reponame.bz2
        ...
    RPMS.reponame/ # пакеты архитектуры i586
        foobar-1.2-5.i586.rpm
x86_64/
    base/ # метаинформация
        release
        pkglist.reponame.bz2
    RPMS.reponame/ # пакеты архитектуры x86_64
        foobar-1.2-5.x86_64.rpm
noarch/
    base/ # метаинформация
        release
        pkglist.reponame.bz2
    RPMS.reponame/ # архитектурно-независимые пакеты
        foobar-doc-1.2-5.noarch.rpm

Такая структура формирует три источника для APT (<base directory> - место, где располагается репозиторий):

rpm file:<base directory> i586 reponame
rpm file:<base directory> x86_64 reponame
rpm file:<base directory> noarch reponame

NB: указываем noarch и один из архитектурно-зависимых репозиториев, всё в кучу не надо!

Более изощрённую структуру директорий, когда в репозитории хранятся пакеты с иходным текстом (.src.rpm), общие для нескольких архитектур, а также когда в репозитории имеется несколько компонентов (в данном репозитории компонент один - reponame), можно посмотреть, к примеру, в репозитории ALT Linux Server. Обратите внимание, что в этом репозитории используется отдельная директория files для хранения всех пакетов, и директории RPMS.*/SRPMS.* являются символическими ссылками на поддиректории из files.

Размещение пакетов

Просто разложите пакеты по директориям {i586,i686,x86_64,noarch}/RPMS.reponame в зависимости от архитектуры пакета.

Создание/обновление метаинформации

Для создания/обновления метаинформации (файлов, хранящихся в директории base), используйте утилиту genbasedir из пакета apt-utils:

#!/bin/sh
REPO_DIR="$1"
REPO_NAME="$2"

for arch in i586 i686 x86_64 noarch; do
  genbasedir --progress --topdir=$REPO_DIR $arch $REPO_NAME
done

Полезные советы

Создание "скелета" репозитория

#!/bin/sh
REPO_DIR="$1"
REPO_NAME="$2"
for i in i586 i686 x86_64 noarch; do
  mkdir -p "$REPO_DIR/$i/base" "$REPO_DIR/$i/RPMS.$REPO_NAME"
done

Добавление произвольного набора пакетов в репозиторий

#!/bin/sh
REPO_DIR="$1"
REPO_NAME="$2"
PACKAGES_DIR="$1"

for file in $PACKAGES_DIR/*.rpm; do
  arch=`rpm -qp --queryformat %{ARCH} "$file"`
  rpm_name=`rpm -qp --queryformat %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm "$file"`
  cp -f "$file" "$REPO_DIR/$arch/RPMS.$REPO_NAME/$rpm_name"
done

После этой операции необходимо обновить метаинформацию. Побочным эффектом является приведение имён файлов с пакетами к "каноническому" виду.

Создание репозитория на основе содержимого кэша APT

Добавьте содержимое кэша APT в репозиторий (см. выше) и обновите метаинформацию (см. выше).

Автоматизация добавления пакетов в репозиторий

Воспользуйтесь скриптами из пакета sisyphus.

Запись репозитория на CD/DVD

См. Создание образов CD/DVD из репозитория.