APT в ALT Linux/CreateRepository: различия между версиями
Ilis (обсуждение | вклад) |
Ilis (обсуждение | вклад) |
||
Строка 56: | Строка 56: | ||
== Полезные советы == | == Полезные советы == | ||
=== Создание | === Создание «скелета» репозитория === | ||
< | <source lang="bash"> | ||
#!/bin/sh | |||
REPO_DIR="$1" | REPO_DIR="$1" | ||
REPO_NAME="$2" | REPO_NAME="$2" | ||
for i in i586 i686 x86_64 noarch; do | for i in i586 i686 x86_64 noarch; do | ||
mkdir -p "$REPO_DIR/$i/base" "$REPO_DIR/$i/RPMS.$REPO_NAME" | mkdir -p "$REPO_DIR/$i/base" "$REPO_DIR/$i/RPMS.$REPO_NAME" | ||
done</ | done | ||
</source> | |||
=== Добавление произвольного набора пакетов в репозиторий === | === Добавление произвольного набора пакетов в репозиторий === | ||
< | <source lang="bash"> | ||
#!/bin/sh | |||
REPO_DIR="$1" | REPO_DIR="$1" | ||
REPO_NAME="$2" | REPO_NAME="$2" | ||
Строка 76: | Строка 79: | ||
rpm_name=`rpm -qp --queryformat %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm "$file"` | rpm_name=`rpm -qp --queryformat %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm "$file"` | ||
cp -f "$file" "$REPO_DIR/$arch/RPMS.$REPO_NAME/$rpm_name" | cp -f "$file" "$REPO_DIR/$arch/RPMS.$REPO_NAME/$rpm_name" | ||
done</ | done | ||
</source> | |||
После этой операции необходимо обновить метаинформацию. Побочным эффектом является приведение имён файлов с пакетами к | После этой операции необходимо обновить метаинформацию. Побочным эффектом является приведение имён файлов с пакетами к «каноническому» виду. | ||
=== Создание репозитория на основе содержимого кэша APT === | === Создание репозитория на основе содержимого кэша APT === |
Версия от 14:07, 27 октября 2008
Создание локального репозитория
Для создания репозитория достаточно создать правильную структуру директорий, разместить в ней 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.