APT в ALT Linux/CreateRepository

Материал из ALT Linux Wiki

< APT в ALT Linux(Различия между версиями)
Перейти к: навигация, поиск
(Создание локального репозитория)
(Запись репозитория на CD/DVD)
 
(11 промежуточных версий не показаны.)
Строка 1: Строка 1:
-
{{MovedFromFreesourceInfo|AltLinux/Apt/CreateRepository}}
 
-
 
== Создание локального репозитория ==
== Создание локального репозитория ==
Для создания репозитория достаточно создать правильную структуру директорий, разместить в ней rpm-пакеты и создать метаинформацию для APT.
Для создания репозитория достаточно создать правильную структуру директорий, разместить в ней rpm-пакеты и создать метаинформацию для APT.
-
Ключевые слова: Локальный репозиторий.
 
=== Структура APT-RPM репозитория ===
=== Структура APT-RPM репозитория ===
APT-RPM репозиторий выглядит достаточно просто:
APT-RPM репозиторий выглядит достаточно просто:
-
<pre>i586/
+
i586/
-
    base/ # метаинформация
+
    base/ # метаинформация
-
        release
+
        release
-
        pkglist.reponame.bz2
+
        pkglist.reponame.bz2
-
        ...
+
        ...
-
    RPMS.reponame/ # пакеты архитектуры i586
+
    RPMS.reponame/ # пакеты архитектуры i586
-
        foobar-1.2-5.i586.rpm
+
        foobar-1.2-5.i586.rpm
-
x86_64/
+
x86_64/
-
    base/ # метаинформация
+
    base/ # метаинформация
-
        release
+
        release
-
        pkglist.reponame.bz2
+
        pkglist.reponame.bz2
-
    RPMS.reponame/ # пакеты архитектуры x86_64
+
    RPMS.reponame/ # пакеты архитектуры x86_64
-
        foobar-1.2-5.x86_64.rpm
+
        foobar-1.2-5.x86_64.rpm
-
noarch/
+
noarch/
-
    base/ # метаинформация
+
    base/ # метаинформация
-
        release
+
        release
-
        pkglist.reponame.bz2
+
        pkglist.reponame.bz2
-
    RPMS.reponame/ # архитектурно-независимые пакеты
+
    RPMS.reponame/ # архитектурно-независимые пакеты
-
        foobar-doc-1.2-5.noarch.rpm</pre>
+
        foobar-doc-1.2-5.noarch.rpm</pre>
Такая структура формирует три источника для APT (<base directory> - место, где располагается репозиторий):
Такая структура формирует три источника для APT (<base directory> - место, где располагается репозиторий):
-
<pre>rpm file:<base directory> i586 reponame
+
rpm file:<base directory> i586 reponame
-
rpm file:<base directory> x86_64 reponame
+
rpm file:<base directory> x86_64 reponame
-
rpm file:<base directory> noarch reponame</pre>
+
rpm file:<base directory> noarch reponame
'''NB:''' указываем noarch и ''один'' из архитектурно-зависимых репозиториев, всё в кучу не надо!
'''NB:''' указываем noarch и ''один'' из архитектурно-зависимых репозиториев, всё в кучу не надо!
Строка 42: Строка 39:
== Создание/обновление метаинформации ==
== Создание/обновление метаинформации ==
-
Для создания/обновления метаинформации (файлов, хранящихся в директории <tt>base</tt>), используйте утилиту <tt>genbasedir</tt> из пакета <tt>apt-utils</tt>:
+
Для создания/обновления метаинформации (файлов, хранящихся в директории <tt>base</tt>), используйте утилиту <tt>genbasedir</tt> из пакета <tt>apt-repo-tools</tt> (до 5.0/branch включительно -- <tt>apt-utils</tt>):
-
<pre>#!/bin/sh
+
<source lang="bash">
 +
#!/bin/sh
REPO_DIR="$1"
REPO_DIR="$1"
REPO_NAME="$2"
REPO_NAME="$2"
for arch in i586 i686 x86_64 noarch; do
for arch in i586 i686 x86_64 noarch; do
-
   genbasedir --progress --topdir=$REPO_DIR $arch $REPO_NAME
+
   genbasedir --bloat --progress --topdir=$REPO_DIR $arch $REPO_NAME
-
done</pre>
+
done
 +
</source>
 +
(подробнее про [http://lists.altlinux.org/pipermail/sisyphus/2009-July/340789.html --bloat])
== Полезные советы ==
== Полезные советы ==
-
=== Создание "скелета" репозитория ===
+
=== Создание «скелета» репозитория ===
-
<pre>#!/bin/sh
+
<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</pre>
+
done
 +
</source>
=== Добавление произвольного набора пакетов в репозиторий ===
=== Добавление произвольного набора пакетов в репозиторий ===
-
<pre>#!/bin/sh
+
Перед запуском этого скрипта, возможно нужно будет установить недостающие пакеты:
-
REPO_DIR="$1"
+
<source lang="bash">
-
REPO_NAME="$2"
+
apt-get install /usr/bin/packages
-
PACKAGES_DIR="$1"
+
</source>
-
for file in $PACKAGES_DIR/*.rpm; do
+
Вот скрипт для добавления пакетов:
-
  arch=`rpm -qp --queryformat %{ARCH} "$file"`
+
[[Файл:Addpackages.sh‎]]
-
  rpm_name=`rpm -qp --queryformat %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm "$file"`
+
-
  cp -f "$file" "$REPO_DIR/$arch/RPMS.$REPO_NAME/$rpm_name"
+
-
done</pre>
+
-
После этой операции необходимо обновить метаинформацию. Побочным эффектом является приведение имён файлов с пакетами к "каноническому" виду.
+
 
 +
После этой операции необходимо обновить метаинформацию. Побочным эффектом является приведение имён файлов с пакетами к «каноническому» виду.
=== Создание репозитория на основе содержимого кэша APT ===
=== Создание репозитория на основе содержимого кэша APT ===
Строка 89: Строка 89:
См. [[Apt/IsoFromRepository|Создание образов CD/DVD из репозитория]].
См. [[Apt/IsoFromRepository|Создание образов CD/DVD из репозитория]].
 +
 +
 +
== rpm-dir ==
 +
 +
Можно создать репозиторий в виде одного каталога без всяких индексов.
 +
 +
1. Создайте два вложенных каталога:
 +
 +
mkdir -p x86-64/RPMS.dir
 +
 +
{{Note|Обратите внимание на наименование архитектуры (x86_64) и компонент dir (после RPMS.). Можете выбрать любые слова.}}
 +
 +
2. Скопируйте все файлы (например, все файлы *.rpm из {{path|/var/cache/apt/archives/}}, которые устанавливались вручную или через обновления системы). Делать это нужно под root!
 +
 +
3. На машине, где нужны эти обновления, пропишите репозторий:
 +
 +
apt-repo add 'rpm-dir file:/<путь-к-репозиторию> x86_64 dir'
 +
 +
 +
{{Category navigation|title=APT|category=APT|sortkey={{SUBPAGENAME}}}}

Текущая версия на 10:17, 9 марта 2017

Содержание

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

Для создания репозитория достаточно создать правильную структуру директорий, разместить в ней 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</pre>

Такая структура формирует три источника для 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-repo-tools (до 5.0/branch включительно -- apt-utils):

#!/bin/sh
REPO_DIR="$1"
REPO_NAME="$2"
 
for arch in i586 i686 x86_64 noarch; do
  genbasedir --bloat --progress --topdir=$REPO_DIR $arch $REPO_NAME
done

(подробнее про --bloat)

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

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

#!/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

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

Перед запуском этого скрипта, возможно нужно будет установить недостающие пакеты:

apt-get install /usr/bin/packages

Вот скрипт для добавления пакетов: Файл:Addpackages.sh


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

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

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

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

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

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

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


rpm-dir

Можно создать репозиторий в виде одного каталога без всяких индексов.

1. Создайте два вложенных каталога:

mkdir -p x86-64/RPMS.dir
Примечание: Обратите внимание на наименование архитектуры (x86_64) и компонент dir (после RPMS.). Можете выбрать любые слова.


2. Скопируйте все файлы (например, все файлы *.rpm из /var/cache/apt/archives/, которые устанавливались вручную или через обновления системы). Делать это нужно под root!

3. На машине, где нужны эти обновления, пропишите репозторий:

apt-repo add 'rpm-dir file:/<путь-к-репозиторию> x86_64 dir'


 
Личные инструменты