--- category: ru type: paper layout: paper tags: archlinux, настройка, linux title: Создание собственного репозитория short: creating-custom-repo description: Небольшая статья, посвященная созданию собственного репозитория для Archlinux. ---
Для начала находим сервер и желание с ним заниматься сексом. Для простоты, лучше, чтобы там стоял Archlinux, хотя, это и не совсем обязательно (можно создать отдельный корень под Arch). Из пакетов, пожалуй, нам понадобится только два, devtools
и сам pacman
:
devtools - набор скриптов, предназначенный для автоматизации сборки пакетов в чистом чруте. Думаю, большинство мейнтейнеров Arch'а пользуются им.
Создадим рабочие директории и установим цвета:
{% highlight bash %} # цвета if [ ${USECOLOR} == "yes" ]; then black='\e[0;30m' bblack='\e[1;30m' red='\e[0;31m' bred='\e[1;31m' green='\e[0;32m' bgreen='\e[1;32m' yellow='\e[0;33m' byellow='\e[1;33m' blue='\e[0;34m' bblue='\e[1;34m' purple='\e[0;35m' bpurple='\e[1;35m' cyan='\e[0;36m' bcyan='\e[1;36m' white='\e[0;37m' bwhite='\e[1;37m' cclose='\e[0m' fi export USECOLOR # директории if [ ! -d "${PREPAREDIR}" ]; then [ -e "${PREPAREDIR}" ] && error_mes "file" "${PREPAREDIR}" echo -e "${bwhite}[II] ${bblue}Creating directory ${bwhite}'${PREPAREDIR}'${cclose}" mkdir -p "${PREPAREDIR}" || error_mes "unknown" fi if [ ! -d "${REPODIR}" ]; then [ -e "${REPODIR}" ] && error_mes "file" "${REPODIR}" echo -e "${bwhite}[II] ${bblue}Creating directory ${bwhite}'${REPODIR}'${cclose}" mkdir -p "${REPODIR}/"{i686,x86_64} || error_mes "unknown" fi if [ ! -d "${REPODIR}/i686" ]; then [ -e "${REPODIR}/i686" ] && error_mes "file" "${REPODIR}/i686" echo -e "${bwhite}[II] ${bblue}Creating directory ${bwhite}'${REPODIR}/i686'${cclose}" mkdir -p "${REPODIR}/i686" || error_mes "unknown" fi if [ ! -d "${REPODIR}/x86_64" ]; then [ -e "${REPODIR}/x86_64" ] && error_mes "file" "${REPODIR}/x86_64" echo -e "${bwhite}[II] ${bblue}Creating directory ${bwhite}'${REPODIR}/x86_64'${cclose}" mkdir -p "${REPODIR}/x86_64" || error_mes "unknown" fi if [ ! -d "${STAGINGDIR}" ]; then [ -e "${STAGINGDIR}" ] && error_mes "file" "${STAGINGDIR}" echo -e "${bwhite}[II] ${bblue}Creating directory ${bwhite}'${STAGINGDIR}'${cclose}" mkdir -p "${STAGINGDIR}" || error_mes "unknown" fi {% endhighlight %}Директории ${REPODIR}/{i686,x86_64}
для самого репозитория, ${PREPAREDIR}
- директория, где будут лежать собранные пакеты, ${STAGINGDIR}
- директория, откуда будут собираться пакеты.
Создаем директорию, расшариваем ее (например, по ftp). В ней две субдиректории - i686
и x86_64
, для каждого типа архитектур соответственно. И наполняем их набором пакетов по Вашему усмотрению.
Процесс обновления репозитория можно разбить на следующие части:
Теперь по шагам.
Скачаем исходники для всех нужных пакетов из AUR'а:
{% highlight bash %} cd "${STAGINGDIR}" yaourt -G package-name {% endhighlight %}Автоматически соберем каждый пакет:
{% highlight bash %} func_build() { if [ ${USECOLOR} == "yes" ]; then bblue='\e[1;34m' bwhite='\e[1;37m' cclose='\e[0m' fi PREPARE="$1" ROOT="$2" eval $(/usr/bin/grep 'arch=' PKGBUILD) eval $(/usr/bin/grep 'pkgname=' PKGBUILD) echo -e "${bwhite}[II] ${bblue}=>${cclose} Building ${bwhite}${pkgname}${cclose}" if echo ${arch} | /usr/bin/grep 'any' -q; then LC_MESSAGES=C /usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" -c else eval $(/usr/bin/grep 'pkgname=' PKGBUILD) if echo ${pkgname} | /usr/bin/grep lib32 -q; then LC_MESSAGES=C /usr/bin/sudo /usr/bin/multilib-staging-build -r "${ROOT}" -c else if /usr/bin/grep 'lib32' PKGBUILD -q; then LC_MESSAGES=C /usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" -c LC_MESSAGES=C /usr/bin/sudo /usr/bin/multilib-staging-build -r "${ROOT}" -c else LC_MESSAGES=C /usr/bin/sudo /usr/bin/staging-i686-build -r "${ROOT}" -c LC_MESSAGES=C /usr/bin/sudo /usr/bin/staging-x86_64-build -r "${ROOT}" -c fi fi fi /usr/bin/cp *.pkg.tar.xz "${PREPARE}" } export -f func_build # building echo -e "${bwhite}[II]${cclose} Building packages" cd "${STAGINGDIR}" /usr/bin/find -name 'PKGBUILD' -type f -execdir /usr/bin/bash -c "func_build "${PREPAREDIR}" "${ROOTDIR}"" \; {% endhighlight %}Для удобства рекомендую добавить в файл /etc/sudoers
следующие строки:
Для удобства рекомендую настроить gpg-agent.
Функция для удаления пакетов из базы данных и из репозитория:
{% highlight bash %} func_remove() { PACKAGE="$1" REPODIR="$2" /usr/bin/rm -f "${REPODIR}/${PACKAGE}"{,.sig} } {% endhighlight %}Обновление репозитория i686
:
Обновление репозитория x86_64
:
Скрипты целиком. Скачиваем исходники для пакетов, запускаем скрипт (при необходимости, редактируем переменные) и радуемся жизни.
Просто добавляем в файл /etc/pacman.conf
следующие строки: