Gentoo бинарное обновление серверов

Материал из Belgorod Linux User Group - Белгород

Перейти к: навигация, поиск

Gentoo Portage Binary Host (PORTAGE_BINHOST)

Обновление серверов gentoo бинарными пакетами.

Содержание

Идея

Имея ряд сходных систем (к примеру виртуальные машины) логично при обновлении не собирать один и тот же пакет на каждой машине, а производить сборку один раз, используя ее на всех остальных машинах.

Для реализации такой идеи служит локальный хостинг бинарных пакетов. Смысл его в том, что он предоставляет по одному из протоколов (http,ftp, etc.) готовые бинарные пакеты, а сервера при обновлении проверяют наличие нужного им пакета.

В теории хостинг бинарных пакетов может служить и сборщиком пакетов, но мы пойдем дальше - и каждый из клиентов будет сам собирать пакеты себе и другим, размещая их на хостинге. Таким образом достаточно обновить одну площадку из исходников (используя distcc это будет не так долго). Вторая площадка с теми же настройками будет использовать для своего обновления уже имеющиеся в наличии на хостинге бинарные пакеты, а недостающие - соберет сама, также выложив их на хостинг.

Хостинг

Сервером хостинга будет машина, синхронизирующая ежедневно дерево портов. При обновлении большого количества серверов желательно замораживать эту синхронизацию, чтобы обновлять все площадки одними и теми же версиями пакетов.

crontab -l
0 0 * * * emerge --sync

Она же их раздает по nfs клиентам:

cat /etc/exports
/usr/portage    172.32.0.0/16(async,no_root_squash,rw,no_subtree_check)

Ну и собственно по http хостит бинарные пакеты (в случаи если не используется nfs).

cat /etc/nginx/sites/portage.gentoo.my.lan.conf 
server {
       listen       80;
       server_name  portage.gentoo.my.lan;
       location / {
               autoindex on;
               alias /usr/portage/;
       }
}

Сделаем директории для пакетов:

mkdir -p /usr/portage/packages/i686-pc-linux-gnu/
mkdir -p /usr/portage/packages/x86_64-pc-linux-gnu/


  • ВНИМАНИЕ! Используйте разные репозитарии для разных архитектур!

Все. На этом роль хостинга заканчивается.

Клиенты, сборщики

Клиенты этого хостинга, они же будут сборщиками для него пакетов.

В /etc/fstab прописываем nfs с деревом портом (и за одно с пакетами):

portage.gentoo.my.lan:/usr/portage     /usr/portage    nfs     rw              0 0

В /etc/make.conf прописываем:

FEATURES="${FEATURES} getbinpkg"                               # скачивать уже собранные
PORTAGE_BINHOST="http://portage.gentoo.my.lan/packages/${CHOST}/" # хостинг (от куда скачивать)
FEATURES="${FEATURES} buildpkg"                                # собирать недостающие пакеты
PKGDIR="${PORTDIR}/packages/${CHOST}/"                             # диретория, куда собирать (nfs)

Первые две строки - клиент бинарных пакетов, вторые - сборщик.

  • Заметка: При таком использовании переменную PORTAGE_BINHOST можно не выставлять, оно возьмет из PKGDIR

Проверка

Собираем какой-либо пакет на одной машине. Он должен проверить наличие готового пакета, но не найти его, что-то типа:

emerge -vuN nginx
Fetching bininfo from http://portage.gentoo.my.lan/packages/i686-pc-linux-gny/
cache miss: '0' --- cache hit: '0'

Далее начать собирать из исходников, положив собранные пакеты в /usr/portage/packages/i686-pc-linux-gnu/

На второй машине, с теми же настройками make.conf смотрим обновления того же пакета:

emerge -pv nginx
These are the packages that would be merged, in order:
Calculating dependencies... done!
[binary  N    ] dev-libs/geoip-1.4.6  USE="-perl-geoipupdate" 
[binary  N    ] app-vim/nginx-syntax-0.3.1 
[binary     U ] www-servers/nginx-0.8.38-r1 [0.8.17]

Как видим - он их будет ставить бинарно.

Ссылки

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