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