Обновление портежей на клиентских машинах

Задача в общем-то понятна. Когда сеть насчитывает десятки или сотни машин, доступ в интернет для которых закрыт, возникает проблема, каким образом следует выполнять обновления портежей и оверлея Calculate.

Здесь я опишу решение, которое по всей видимости мы включим в Calculate Linux 11.

В примерах будет использоваться сетевое имя сервера ‘CDS’. Замените его на IP сервера, либо на реальное сетевое имя.

Настроим Calculate Directory Server

Для синхронизации, воспользуемся RSYNC сервером для передачи данных. Для этого настроим и поднимем RSYNC сервер на CDS:

Отредактируем файл /etc/rsyncd.conf:

pid file = /var/run/rsyncd.pid
use chroot = yes
read only = yes

hosts allow = 192.168.0.0/24
hosts deny  = *

[gentoo-portage]
        path = /usr/portage
        comment = Gentoo Portage tree
        exclude = /distfiles /packages

[calculate-overlay]
        path = /var/lib/layman/calculate
        comment = Calculate Overlay
 #       exclude = /.git

[calculate]
        path = /var/calculate/server-data/ftp/pub/calculate
        comment = Calculate mirror

Примечание:

* ‘hosts allow’ должна указывать вашу сеть, можно через пробел добавить несколько сетей.

* ‘exclude = /.git’ закомментирован, если комментарий убрать, трафик снизится. Но для возвращения прежних настроек понадобится пересоздать оверлей выполнив:

layman -d calculate; layman -a calculate
  • в примере есть ещё зеркало calculate, на случай если вы захотите в будущем его поддерживать. В противном случае закомментируйте или удалите последние три строчки.

Запустим rsync-сервер и добавим его в автозагрузку:

/etc/init.d/rsyncd
rc-update add rsync default

Выполним настройки Calculate Linux Desktop

В файле /etc/make.conf укажем наш локальный сервер синхронизации, дописав строчку:

SYNC="rsync://CDS/gentoo-portage"

Примечание:

  • Вместо CDS впишите IP либо хост (если поднят DNS) вашего сервера.

Проверим как синхронизируются портежи, выполнив:

emerge --sync

Изменим настройки оверлея, отредактировав файл /var/lib/layman/overlays.xml:
вместо:

<source type="git">git://git.calculate.ru/dev/overlay.git</source>

запишите:

<source type="rsync">rsync://CDS/calculate-overlay</source>

Проверим, выполнив:

 # layman -S
* Running command "/usr/bin/rsync -rlptDvz --progress --delete --delete-after --timeout=180 --exclude="distfiles/*" --exclude="local/*" --exclude="packages/*" "rsync://CDS/calculate-overlay/" "/var/lib/layman/calculate""...
receiving file list ... 
5401 files to consider

sent 85 bytes  received 229211 bytes  458592.00 bytes/sec
total size is 9284417  speedup is 40.49
* 
* Success:
* ------
* 
* Successfully synchronized overlay "calculate".
* 
* Warnings:
* ------
* 
* The source of the overlay "calculate" seems to have changed.
* You currently sync from
* 
*   rsync://CDS/calculate-overlay
* 
* while the remote lists report
* 
*   git://git.calculate.ru/dev/overlay.git
* 
* as correct location.
* Please consider removing and re-adding the overlay.
*

Оверлей успешно обновился. Предупреждение напоминает вам, что настройки оверлея были изменены.

Обновление портежей

Что же, подытожим, выполнив:

eix-sync

Именно такой командой следует выполнять обновления.

Шаблоны настройки

Разумеется, любое описание лучше заканчивать шаблонами настройки. Приведу настройки для CLD, т.к. CDS 10.4 пока настраивается при помощи старых шаблонов и не хотелось бы на них уже делать акцент. Настройки клиента же более актуальны, т.к. в ручную выполнять обновление на десятке или сотне машин не очень-то интересное занятие.

Calculate Overlay

Начнем с оверлея. Ввод и вывод из домена осуществляется пакетом calculate-client. Найдем шаблоны calculate-client:

 # ls -A /usr/share/calculate/templates/client/
.calculate_directory  domain  undomain

Как и положено, шаблон директории client, описанный файлом ‘.calculate_directory’ объявляет, что эти шаблоны может обрабатывать только пакет calculate-client:

 # cat /usr/share/calculate/templates/client/.calculate_directory
 # Calculate append=skip cl_name==calculate-client

Посмотрим, как выглядят шаблоны директорий ‘domain’ и ‘undomain’:

 # cat /usr/share/calculate/templates/client/domain/.calculate_directory 
 # Calculate append=skip cl_client_domain_action==up&&os_remote_auth!=

 # cat /usr/share/calculate/templates/client/undomain/.calculate_directory 
 # Calculate append=skip cl_client_domain_action==down

В общем-то ничего лишнего. Создадим такую же структуру на сервере. Обратите внимание, вы можете создавать директории непосредственно в клиенте, если у вас компьютер введен в домен и если есть права на доступ к директории /var/calculate/remote/templates у пользователя ‘client’. Итак:

 # mkdir -p /var/calculate/remote/templates/client/domain/
 # mkdir -p /var/calculate/remote/templates/client/undomain/
 # cp /usr/share/calculate/templates/client/.calculate_directory /var/calculate/remote/templates/client
 # cp /usr/share/calculate/templates/client/domain/.calculate_directory /var/calculate/remote/templates/client/domain
 # cp /usr/share/calculate/templates/client/undomain/.calculate_directory /var/calculate/remote/templates/client/undomain

По этим путям находятся шаблоны для настройки системы для входа в домен и выхода из него. Шаблоны разбиты по директориям, в зависимости от настраиваемого пакета. К слову, какой пакет вы настраиваете можно получить командой ‘equery b файл’, если конечно он не был создан впоследствии программой. Например:

equery b /var/lib/layman
[ Searching for file(s) /var/lib/layman in *... ]
app-portage/layman-1.3.3 (/var/lib/layman)

Тоже, но быстрее:

qfile /var/lib/layman/
app-portage/layman (/var/lib/layman)

Поскольку настраиваем мы layman, создадим директории для него:

mkdir /var/calculate/remote/templates/client/domain/layman
mkdir /var/calculate/remote/templates/client/undomain/layman

Создадим для них шаблон .calculate_directory по аналогии с другими подобными шаблонами в директориях ‘domain’ и ‘undomain’ со следующим содержимым:

 # Calculate belong()!=&&pkg(app-portage/layman)!= append=skip

Примечание. Функция belong() позволяет накладывать шаблон во время выполнения наложения всех шаблонов, либо при установке заданного пакета. Если имя пакета отсутствует, его имя будет взято из названия директории. Функция pkg() проверяет на то что пакет установлен в системе. Параметр ‘append’ пропускает директорию из путей, т.е. шаблоны будут накладываться не в ‘/layman’ а в ‘/’ (корень файловой системы).

Всё готово, осталось создать по два шаблона для модификации ‘overlays.xml’ и ‘layman.cfg’. Оба файла имею сложный формат. Первый в формате XML, который на данный момент не поддерживается утилитами. Второй формат также не поддерживается из-за сложного описания значений, как это выглядит в примере с опцией ‘overlays’. Поэтому воспользуемся форматом ‘patch’. Создадим шаблоны в директории /var/calculate/remote/templates/client/domain/layman со следующим содержимым:

Шаблон overlays.xml:

 # Calculate format=patch path=/var/lib/layman
<reg><source type="git">git://git.calculate.ru/dev/overlay.git</source></reg>
<text><source type="rsync">rsync://CDS/calculate-overlay</source></text>

Шаблон layman.cfg:

 # Calculate format=patch path=/etc/layman comment=#
<reg>overlays\s+:\s+http://www.gentoo.org/proj/en/overlays/repositories.xml</reg>
<text>overlays : file:///var/lib/layman/overlays.xml</text>

Перейдем в директорию /var/calculate/remote/templates/client/undomain/layman и создадим шаблоны настройки выхода из домена:

Шаблон overlays.xml:

 # Calculate format=patch path=/var/lib/layman
<reg><source type="rsync">rsync://CDS/calculate-overlay</source></reg>
<text><source type="git">git://git.calculate.ru/dev/overlay.git</source></text>

Шаблон layman.cfg:

 # Calculate format=patch path=/etc/layman comment=#
<reg>overlays\s+:\s+file:///var/lib/layman/overlays.xml</reg>
<text>overlays  : http://www.gentoo.org/proj/en/overlays/repositories.xml</text>

Обратите внимание, мы изменили путь к оверлеям файла layman на файл ‘overlays.xml’ для того, чтобы при обновлении оверлея, layman не пытался обновить свой кэш оверлеев. Настройки прокси wget не спасут ситуацию, если компьютер не имеет прямого выхода в интернет. С другой стороны это лишнее.

Portage

Осталось совсем немного - добавить в /etc/make.conf строчку:

SYNC="rsync://CDS/gentoo-portage"

Сделаем это так же шаблоном. Наш файл уже модифицируется при установке CLD 10.9 шаблоном /usr/share/calculate/templates/install/merge/portage/make.conf. То что он находится в ‘merge’ - неправильно, т.к. формат у этого файла не поддерживается утилитами и он будет целиком переписываться при каждом обновлении пакета portage. Благо переменная ‘cl_autoupdate_set’ по умолчанию находится в положении ‘off’ в файле /etc/calculate/calculate2.env и автообновления не произойдёт. В утилитах 2.2.1 путь к шаблону исправлен на /usr/share/calculate/templates/install/system/portage. Таким образом файл настроится только раз во время установки системы.

Создадим структуру в шаблонах на сервере по аналогии с шаблонами пакета calculate-templates версии 2.2.0.0:

mkdir -p /var/calculate/remote/templates/install/merge/portage
cp /usr/share/calculate/templates/install/merge/.calculate_directory /var/calculate/remote/templates/install/merge
cp /usr/share/calculate/templates/install/merge/portage/.calculate_directory /var/calculate/remote/templates/install/merge/portage

Перейдем в директорию /var/calculate/remote/templates/install/merge/portage и создадим шаблон для make.conf:

Шаблон make.conf:

 # Calculate comment=#
LINGUAS="en ru"
ACCEPT_LICENSE="*"
source /var/lib/layman/make.conf
MAKEOPTS="-j5"
EMERGE_DEFAULT_OPTS="--jobs=4"
SYNC="rsync://CDS/gentoo-portage"

Обратите внимание, я полностью скопировал make.conf в шаблон.

Наложим шаблоны и проверим содержимое файла /etc/make.conf:

cl-template -l all
cat /etc/make.conf

Проверим настройки.
Выведем компьютер из домена и выполним eix-sync:

cl-client -r
eix-sync

Введем компьютер в домен и также выполним eix-sync:

cl-client CDS
eix-sync

Создание шаблона для make.conf позволит нам переносить настройки при обновлении системы из ISO образа, в случае если у вас на диске есть свободный раздел под обновление.

Полезные ссылки

В закладки надо бы добавить…