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 хостит бинарные пакеты:
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/ mkdir -p /usr/portage/packages/x86_64/
- ВНИМАНИЕ! Используйте разные репозитарии для разных архитектур!
Все. На этом роль хостинга заканчивается.
[править] Клиенты, сборщики
Клиенты этого хостинга, они же будут сборщиками для него пакетов.
В /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/i686/" # хостинг (от куда скачивать)
FEATURES="${FEATURES} buildpkg" # собирать недостающие пакеты
PKGDIR="${PORTDIR}/packages/i686/" # диретория, куда собирать (nfs)
Первые две строки - клиент бинарных пакетов, вторые - сборщик. Тут видно, что я указал директории пакетов для архитектуры i686. Для x86_64 будет так:
FEATURES="${FEATURES} getbinpkg"
PORTAGE_BINHOST="http://portage.gentoo.my.lan/packages/x86_64/"
FEATURES="${FEATURES} buildpkg"
PKGDIR="${PORTDIR}/packages/x86_64/"
[править] Проверка
Собираем какой-либо пакет на одной машине. Он должен проверить наличие готового пакета, но не найти его, что-то типа:
emerge -vuN nginx Fetching bininfo from http://portage.gentoo.my.lan/packages/i686/ cache miss: '0' --- cache hit: '0'
Далее начать собирать из исходников, положив собранные пакеты в /usr/portage/packages/i686/
На второй машине, с теми же настройками 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]
Как видим - он их будет ставить бинарно.

