--- category: ru type: paper layout: paper tags: archlinux, настройка, linux title: Создание собственного репозитория short: creating-custom-repo description: Небольшая статья, посвященная созданию собственного репозитория для Archlinux. ---
Для начала находим сервер и желание с ним заниматься сексом. Для простоты, лучше, чтобы там стоял Archlinux, хотя, это и не совсем обязательно (можно создать отдельный корень под Arch). Из пакетов, пожалуй, нам понадобится только два, devtools
и сам pacman
:
devtools - набор скриптов, предназначенный для автоматизации сборки пакетов в чистом чруте. Думаю, большинство мейнтейнеров Arch'а пользуются им.
Создадим рабочие директории:
{% highlight bash %} mkdir -p ~/arch/repo/{i686,x86_64} mkdir -p ~/arch/{prepare,root,staging} {% endhighlight %}Директории ~/arch/repo/{i686,x86_64}
для самого репозитория, ~/arch/prepare
- директория, где будут лежать собранные пакеты, ~/arch/root
- директория, где будет создан чистый чрут для сборки, ~/arch/staging
- директория, откуда будут собираться пакеты.
Создаем директорию, расшариваем ее (например, по ftp). В ней две субдиректории - i686
и x86_64
, для каждого типа архитектур соответственно. И наполняем их набором пакетов по Вашему усмотрению.
Процесс обновления репозитория можно разбить на следующие части:
Теперь по шагам.
Скачаем исходники для всех нужных пакетов из AUR'а:
{% highlight bash %} cd ~/arch/staging yaourt -G package-name {% endhighlight %}Автоматически соберем каждый пакет:
{% highlight bash %} func_build() { PREPARE="$1" ROOT="$2" if grep "arch=('any')" PKGBUILD -q; then /usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" else /usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" /usr/bin/sudo /usr/bin/staging-x86_64-build -r "${ROOT}" fi /usr/bin/cp *.pkg.tar.xz "${PREPARE}" } # building /usr/bin/cd "${STAGINGDIR}" /usr/bin/find -name PKGBUILD -type f -execdir func_build "${PREPAREDIR}" "${ROOTDIR}" \; {% endhighlight %}Для удобства рекомендую добавить в файл /etc/sudoers
следующие строки:
Для удобства рекомендую настроить gpg-agent.
Функция для удаления пакетов из базы данных и из репозитория:
{% highlight bash %} func_remove() { DBPATH="$1" PKGNAME="$2" /usr/bin/repo-remove ${DBNAME}.db.tar.gz ${PKGNAME} /usr/bin/repo-remove ${DBNAME}.files.tar.gz ${PKGNAME} /usr/bin/rm -f ${PKGNAME}* } {% endhighlight %}Обновление репозитория i686
:
Обновление репозитория x86_64
:
Скрипт целиком. Скачиваем исходники для пакетов, запускаем скрипт (при необходимости, редактируем переменные) и радуемся жизни.
Просто добавляем в файл /etc/pacman.conf
следующие строки: