FreeBSD virtual environment management and repository

2020-10 upd: we reached the first fundraising goal and rented a server in Hetzner for development! Thank you for donating !

Внимание! Данные страницы описывают CBSD версии 13.0.x. Если вы используете более раннюю версию, рекомендуется сначала обновиться.

Обновление клеток: etcupdate

Команда etcupdate

	% cbsd etcupdate
Описание:

Для решения проблемы синхронизации distribution-файлов (в основном это содержимое каталога /etc) при смене версий базовой системы, FreeBSD предлагает две утилиты: mergemaster(8) и etcupdate(8). CBSD содержит скрипт для работы с etcupdate под одноименным именем. По-умолчанию, CBSD создает иерархию каталогов для работы etcupdate в системном каталоге базы и каждого jail. Вы можете выключить это, переопределив значение параметра etcupdate_init на '0' (disabled) в профиле вашего контейнера или глобально через jail-freebsd-default.conf конфигурационный файл в каталоге ~cbsd/etc/

Что CBSD etcupdate НЕ делает:

  • CBSD НЕ производит автоматический запуск обновлений файлов, поскольку эти операции могут приводить к нарушению в работе сервисов или неожиданным для вас изменениям в файлах. Некоторые попытки автоматических операций слияния могут вызывать конфликт. В этих случаях, требуется вмешательство оператора.

Что CBSD etcupdate делает:

  • CBSD автоматически создает build/extract файлы для корректной работы etcupdate для каждой версии FreeBSD base. CBSD отслеживает версии ваших контейнеров и соответствие distribution файлов, делая проверку и выдавая при запуске контейнера соответствующее сообщение о необходимости синхронизации.

CBSD etcupdate враппер позволяет вам произходить следующие операции, повторяя ключи оригинальной etcupdate(8) утилиты:
* выполнить операцию etcupdate для контейнера XXXX, со старой версии контейнера XX на новую YY. Поскольку CBSD владеет информацией о том, какая версия была и какая версия сейчас, параметры from= и to= могут быть опущены:

  cbsd etcupdate mode=update jname=XXXX [from=XX to=YY]
* запустить extract инициализацию для базы FreeBSD версии XX.YY (см man etcupdate): (CBSD с версии 11.1.9 выполняет эту операцию автоматически при получении bases)
  cbsd etcupdate mode=extract ver=XX.YY [force=1]
* запустить build инициализацию для версии XX.YY (см man etcupdate): (CBSD с версии 11.1.9 выполняет эту операцию автоматически при получении bases)
  cbsd etcupdate mode=build ver=YY.YY [force=1]
* запустить ручное исправление конфликтов при их налиии для контейнера XXX. Используйте переменную значения EDITOR для использования своего любимого редактора (см man etcupdate):
  cbsd etcupdate mode=resolve jname=XXX
* очистить рабочий каталог jail от etcupdate файлов ( предшествует операциям mode=extract и mode=build ):
  cbsd etcupdate mode=purge

В дополнение к этому, CBSD создает резервную копию distribution файлов перед выполнением операции update, а также регулирует ротацию архивов в системном каталоге контейнера ( ~cbsd/jails-system/XXX/etcupdate ) Вы можете регулировать это поведение параметром etcupdate_create_backup= в конфигурационном файле etcupdate.conf.

FreeBSD-way config files best practices

Для того, чтобы минимизировать возможность конфликтных ситуаций и тем самым облегчить процедуры синхронизации конфигурационные файлов, старайтесь избегать редактирования базовых системных файлов, таких как /etc/inetd.conf, /etc/syslog.conf, /etc/ssh/sshd_config, /etc/newsyslog.conf и тд. и тп. Вместо этого, пользуйтесь системами конфигураций, такими как Chef, Salt, Puppet которые менеджерят необходимые конфигурации. Либо, используйте аргументы _flags в стандартном /etc/rc.conf файле для переопределения ваших конфигурационных файлов. Например, вместо редактирования /etc/sshd/sshd_config, вы можете переопределить sshd параметры в /etc/rc.conf следующим образом:

 sshd_flags="-oUseDNS=no -oPort=22222 -oPermitRootLogin=no -oUseBlacklist=yes"

Если флаги не позволяют вам провести необходимую настройку в полной мере, скопируйте конфигурационный файл сервиса в другое место и переопределите к нему путь через _flags. Например. Создадим каталог /root/etc, в котором будут расположены ваши конфигурационные файлы для inetd, blacklistd, syslogd, newsyslog:

 mkdir /root/etc
 cp -a /etc/inetd.conf /root/etc
 cp -a /etc/syslog.conf /root/etc
 cp -a /etc/blacklistd.conf /root/etc
 cp -a /etc/newsyslog.conf /root/etc

Переопределим пользуясь ключами, путь конфигураций для вышеупомянутых утилит:

 sysrc inetd_flags="-wW -C 60 /root/etc/inetd.conf"
 sysrc syslogd_flags="-ss -f /root/etc/syslog.conf"
 sysrc blacklistd_flags="-c /root/etc/blacklistd.conf"
 sysrc newsyslog_flags="-CN -f /root/etc/newsyslog.conf"
и тд. Ряд утилит также поддерживают вынос кастомных конфигураций в соответствующие app.d-каталоги. Пользуйтесь этими трюками и ваши операции по обновлению будут проходить очень легко.

Пример работы с etcupdate

Создадим jail с версией базы 11.3:

cbsd jcreate jname=jail4 ip4_addr=DHCP ver=11.3
Изменим версию базы контейнера, произведя тем самым переход на более старшую версию, например на 12.1:
 cbsd jset jname=jail4 ver=12.1
Используя команду jls, вы можете посмотреть текущую версию базы контейнера и версию distribtion ( etcver ):
 cbsd jls display=jname,ver,etcver
При старте контейнера, вы можете увидеть сообщение от CBSD о несоответствии файлов с актуальной базой и предложение воспользоваться командой для обновления. Запустим ее:
 cbsd etcupdate jname=jail4 mode=update
Команда обновит файлы, которые синхронизируются в автоматическом режиме и выведет сообщение о необходимости ручного разрешения конфликтов, если автоматический режим столкнулся с трудностями. Запустив resolve, мы можем исправить конфликты в ручном режиме, приведя файл к желаемому виду:
  cbsd etcupdate jname=jail4 mode=resolve






Держите ваши системы в обновленном состоянии!