- APT в ALT Linux/OwnRepo
- Добавляем свой компонент
- Наполнение компонента и создание индексов
- Создание ключей GPG
- Создание индексов и подписи
- Примеры пакетов
- Добавление репозитория
- APT в ALT Linux/CreateRepository
- Структура APT-RPM репозитория
- Размещение пакетов
- Создание/обновление метаинформации
- Полезные советы
- Создание «скелета» репозитория
- Добавление произвольного набора пакетов в репозиторий
- Создание репозитория на основе содержимого кэша APT
- Автоматизация добавления пакетов в репозиторий
- Запись репозитория на CD/DVD
- rpm-dir
- Git.alt/Путь пакета в сизиф
- Добавляем нужное содержимое и коммитим
- Отправляем содержимое локального git на gitery.altlinux.org
- Отправляем tag локального git на gitery.alt
- Запускаем сборку
- APT в ALT Linux/CreateRepository
- Структура APT-RPM репозитория
- Размещение пакетов
- Создание/обновление метаинформации
- Полезные советы
- Создание «скелета» репозитория
- Добавление произвольного набора пакетов в репозиторий
- Создание репозитория на основе содержимого кэша APT
- Автоматизация добавления пакетов в репозиторий
- Запись репозитория на CD/DVD
- rpm-dir
APT в ALT Linux/OwnRepo
Задача: создать собственный репозиторий со своими пакетами.
Добавляем свой компонент
Новый компонент будет называться extra.
Репозиторий будет находится в каталоге /var/www/repo/extra . Создадим необходимую структуру для нового компонента:
# mkdir -p /var/www/repo/extra/x86_64/RPMS.extra
Наполнение компонента и создание индексов
# apt-get install apt-repo-tools
Скопируем пакеты RPM в каталог /var/www/repo/extra/x86_64/RPMS.extra :
# cp -v *.rpm /var/www/repo/extra/x86_64/RPMS.extra
Создание ключей GPG
# gpg --gen-key Выберите тип ключа: (1) RSA и RSA (по умолчанию) (2) DSA и Elgamal (3) DSA (только для подписи) (4) RSA (только для подписи) Ваш выбор?
// Пишем 1. Так как нам необходим тип ключа RSA и RSA
длина ключей RSA может быть от 1024 до 4096 бит. Какой размер ключа Вам необходим? (2048)
// Пишем размер ключа 2048
Запрошенный размер ключа - 2048 бит Выберите срок действия ключа. 0 = без ограничения срока действия = срок действия - n дней w = срок действия - n недель m = срок действия - n месяцев y = срок действия - n лет Срок действия ключа? (0)
// Ставим 0 без ограничения срока действия.
Срок действия ключа не ограничен Все верно? (y/N)
Для идентификации Вашего ключа необходим ID пользователя. Программа создаст его из Вашего имени, комментария и адреса электронной почты в виде: "Baba Yaga (pensioner) " Ваше настоящее имя: (Пишем наше настоящее имя) Адрес электронной почты: (Пишем адрес электронной почты) Комментарий: Вы выбрали следующий ID пользователя: "Repo Signer " Сменить (N)Имя, (C)Комментарий, (E)адрес или (O)Принять/(Q)Выход?
Для защиты секретного ключа необходима фраза-пароль.
Далее, система предложит сгенерировать случайные числа. Для этого нужно следовать инструкции, которая будет написана в нашем терминале (движение мышкой, набор текста и т.д).
В конце, когда сформируется отпечаток ключа GPG, можно увидеть сформированный ID. Пример:
pub 2048R/AE3F8179 2022-04-20 Отпечаток ключа = 5C1D 67E3 F163 EC94 A1BC 202B 68E6 302C AE3F 8179
где, AE3F8179 — ID GPG ключа
Создание индексов и подписи
Теперь необходимо применить наш ID GPG ключа для создания и подписи индексов:
# genbasedir --create --bloat --progress --sign --default-key=AE3F8179 --topdir=/var/www/repo/extra x86_64 extra
Внимание! Обратите внимание, что в поле —default-key нужно использовать наш ID (в данном случае AE3F8179).
Далее, вводим фразу-пароль для доступа к секретному ключу пользователя.
Добавляем свой ключ, использованный для подписанного репозитория:
# nano /etc/apt/vendors.list.d/own.list
Импортируем публичный ключ в общую базу alt-gpgkeys:
# gpg --output ~/repo.gpg --export AE3F8179 # gpg --no-default-keyring --keyring /usr/lib/alt-gpgkeys/pubring.gpg --import ~/repo.gpg
Внимание! При обновлении пакета alt-gpgkeys ключ подписи репозитория будет удалён. Необходимо или поставить пакет alt-gpgkeys на Hold (https://www.altlinux.org/Hold) или написать filetrigger по добавлению ключа в эту базу при обновлении пакета. Пример опакечивания такого filetrigger см. ниже. Но следует иметь ввиду, что внесение изменений в связку ключей несёт риск утраты к ней доверия со стороны пользователей, а для сертифицированных ОС это ещё и нарушение КСЗ дистрибутива, не допускаемое формуляром.
Примеры пакетов
Ссылка на ваш репозиторий может быть опакечена в основной репозиторий любым маинтейнером.
Добавление репозитория
Добавляем свой репозиторий с ключом для проверки (должен быть установлен пакет apt-repo ):
# apt-repo add "rpm [own] file:/var/extra x86_64 extra"
APT в ALT Linux/CreateRepository
Для создания репозитория достаточно создать правильную структуру директорий, разместить в ней 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 ( — место, где располагается репозиторий):
rpm file: i586 reponame rpm file: x86_64 reponame rpm file: noarch reponame
NB: указываем noarch и один из архитектурно-зависимых репозиториев, всё в кучу не надо!
Более изощрённую структуру директорий, когда в репозитории хранятся пакеты с иходным текстом (.src.rpm), общие для нескольких архитектур, а также когда в репозитории имеется несколько компонентов (в данном репозитории компонент один — reponame), можно посмотреть, к примеру, в репозитории ALT Linux Server. Обратите внимание, что в этом репозитории используется отдельная директория files для хранения всех пакетов, и директории RPMS.*/SRPMS.* являются символическими ссылками на поддиректории из files.
Размещение пакетов
Просто разложите пакеты по директориям /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
Полезные советы
Создание «скелета» репозитория
#!/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
rpm-dir
Можно создать репозиторий в виде одного каталога без всяких индексов.
1. Создайте два вложенных каталога:
Примечание: Обратите внимание на наименование архитектуры (x86_64) и компонент dir (после RPMS.). Можете выбрать любые слова.
2. Скопируйте все файлы (например, все файлы *.rpm из /var/cache/apt/archives/ , которые устанавливались вручную или через обновления системы). Делать это нужно под root!
3. На машине, где нужны эти обновления, пропишите репозторий:
apt-repo add 'rpm-dir file:/ x86_64 dir'
Git.alt/Путь пакета в сизиф
Связываем локальный репозиторий с репозитарием на gitery.altlinux.org:
git remote add origin git.alt:packages/guake.git
Добавляем нужное содержимое и коммитим
Простейший вариант — есть чистые исходники.
Добавляем исходники в локальный репозиторий:
$ git commit -m "Upstream at `date +%F`"
$ git tag -s -m "0.4.0-alt0.2" 0.4.0-alt0.2
Тут есть тонкости с расположением файлов, .gear/rules и пр.
Другой вариант — когда уже собран SRPM.
$ gear-srpmimport quake-0.4.0-alt0.2.src.rpm
Если в gnupg по умолчанию стоит другой ключ, указываем нужный в опции «-u» (список своих ключей смотрим командой gpg -K ):
$ gear-create-tag -fu FAF2CACE
arc@arc-laptop ~/Documents/ALTLinux/devel/quake $ gear-create-tag -f Необходим пароль для доступа к секретному ключу пользователя: "Anton A. Vinogradov (for altlinux.org) " 1024-бит DSA ключ, ID FAF2CACE, создан 2009-12-27
Отправляем содержимое локального git на gitery.altlinux.org
Команда: git push origin master
arc@arc-netbook ALTLinux/devel/quake $ git push origin master Counting objects: 207, done. Delta compression using up to 2 threads. Compressing objects: 100% (109/109), done. Writing objects: 100% (115/115), 67.51 KiB, done. Total 115 (delta 84), reused 0 (delta 0) girar-sendmail: email notification about `refs/heads/master' update sent. Repacking repository. done Updating committer date cache. done To ssh://git.alt/people/arc/packages/quake.git 6e1f660..d90e600 master -> master
Отправляем tag локального git на gitery.alt
Команда: git push —tags или git push origin master —tags
arc@arc-netbook ALTLinux/devel/quake $ git push --tags Counting objects: 10, done. Delta compression using up to 2 threads. Compressing objects: 100% (6/6), done. Writing objects: 100% (6/6), 1.14 KiB, done. Total 6 (delta 2), reused 0 (delta 0) girar-sendmail: email notification about `refs/tags/0.4.0-alt0.2' update sent. Repacking repository. done Updating committer date cache. done To ssh://git.alt/people/arc/packages/quake.git * [new tag] 0.4.0-alt0.2 -> 0.4.0-alt0.2
Если где-то ошиблись и нужно «передвинуть» тэг:
git tag -f -s -m "Move 0.4.0-alt0.2" 0.4.0-alt0.2 git push -f --tags
Запускаем сборку
Команда: ssh girar build packages/имя-пакета.git версия
arc@arc-netbook ALTLinux/devel/quake $ ssh girar build packages/quake.git 0.4.0-alt0.2 new task #22846: owner=arc repo=sisyphus task #22846: added #1: build tag 0.4.0-alt0.2 from /people/arc/packages/quake.git task #22846: queued, result will be emailed to arc@altlinux.org
Результат смотрим в почте и на странице http://git.altlinux.org/tasks/22846
APT в ALT Linux/CreateRepository
Для создания репозитория достаточно создать правильную структуру директорий, разместить в ней 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/ # архитектурно-независимые пакеты
Такая структура формирует три источника для APT ( — место, где располагается репозиторий):
rpm file: i586 reponame rpm file: x86_64 reponame rpm file: noarch reponame
NB: указываем noarch и один из архитектурно-зависимых репозиториев, всё в кучу не надо!
Более изощрённую структуру директорий, когда в репозитории хранятся пакеты с иходным текстом (.src.rpm), общие для нескольких архитектур, а также когда в репозитории имеется несколько компонентов (в данном репозитории компонент один — reponame), можно посмотреть, к примеру, в репозитории ALT Linux Server. Обратите внимание, что в этом репозитории используется отдельная директория files для хранения всех пакетов, и директории RPMS.*/SRPMS.* являются символическими ссылками на поддиректории из files.
Размещение пакетов
Просто разложите пакеты по директориям /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
Полезные советы
Создание «скелета» репозитория
#!/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
rpm-dir
Можно создать репозиторий в виде одного каталога без всяких индексов.
1. Создайте два вложенных каталога:
Примечание: Обратите внимание на наименование архитектуры (x86_64) и компонент dir (после RPMS.). Можете выбрать любые слова.
2. Скопируйте все файлы (например, все файлы *.rpm из /var/cache/apt/archives/ , которые устанавливались вручную или через обновления системы). Делать это нужно под root!
3. На машине, где нужны эти обновления, пропишите репозиторий:
apt-repo add 'rpm-dir file:/ x86_64 dir'
rpm-dir используется в случае, когда в репозитории нет каталога base с индексом пакетов. Его удобно использовать, например, для подключения репозитория с несколькими свежесобранными пакетами. Так делает hasher в режиме по умолчанию (—with-stuff). Однако в этом случае apt-get update будет открывать каждый пакет в репозитории, для большого набора (в частности, для зеркала) такой способ не годится.