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. Если вы используете более раннюю версию, рекомендуется сначала обновиться.
Управление несколькими клетками с помощью Shell скриптов
Между ручным управлением каждой клеткой с помощью cbsd jlogin и настройкой систем централизованной оркестровки вроде Puppet или Ansible находится способ, основанный на базе скриптов на языке Shell.
Использование фреймворка cbsd и команд вида jset/jget/jconfig/jexec позволяет с помощью простых скриптов реализовать достаточно сложные сценарии конфигурирования и управления множеством клеток.
Ниже приводится примеры написания таких скриптов для решения всевозможных групповых задач внутри клеток.
Тестируем наличие в клетках уязвимого ПО
Простейший скрипт, запускающий в каждой клетке команду pkg audit -F - проверка наличия установленного ПО с известными проекту FreeBSD уязвимостями.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #!/bin/sh echo «Checking local SYSTEM» pkg audit -F echo "" echo «Checking DokuWiki JAIL» /usr/local/bin/cbsd jexec jname=dokuwiki pkg audit -F echo "" echo «Checking OwnCloud JAIL» /usr/local/bin/cbsd jexec jname=owncloud pkg audit -F echo "" echo «Checking FTP Backup JAIL» /usr/local/bin/cbsd jexec jname=ftpbackup pkg audit -F echo "" echo «Checking SAMBA JAIL» /usr/local/bin/cbsd jexec jname=samba pkg audit –F |
Пример вывода скрипта после отработки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Checking local SYSTEM vulnxml file up-to- date 0 problem(s) in the installed packages found. Checking DokuWiki JAIL vulnxml file up-to- date 0 problem(s) in the installed packages found. Checking OwnCloud JAIL vulnxml file up-to- date 0 problem(s) in the installed packages found. Checking FTP Backup JAIL vulnxml file up-to- date 0 problem(s) in the installed packages found. Checking SAMBA JAIL vulnxml file up-to- date 0 problem(s) in the installed packages found. |
Более компактный вариант скрипта, который использует цикл и проверку статуса Jail.
1 2 3 4 5 6 7 8 9 10 11 | #!/bin/sh for jail in $( /usr/local/bin/cbsd jorder); do jstatus1=` /usr/local/bin/cbsd jstatus ${jail}` if [ $jstatus1 - ne "0" ]; then /usr/local/bin/cbsd jexec jname=${jail} pkg audit -F fi done |
Обновление базы известных пакетов и вывод информации об наличие обновлений
Аналогичная предыдущей идеи - выполняем pkg upgrade с ключом -n внутри каждой клетки. Итог - обновляем список доступных для клетки пакетов pkg из репозиториев и выводим на экран доступные обновления.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #!/bin/sh echo «Checking local SYSTEM» pkg upgrade -n echo "" echo «Checking DokuWiki JAIL» /usr/local/bin/cbsd jexec jname=dokuwiki pkg upgrade -n echo "" echo «Checking OwnCloud JAIL» /usr/local/bin/cbsd jexec jname=owncloud pkg upgrade -n echo "" echo «Checking FTP Backup JAIL» /usr/local/bin/cbsd jexec jname=ftpbackup pkg upgrade -n echo "" echo «Checking SAMBA JAIL» /usr/local/bin/cbsd jexec jname=samba pkg upgrade –n |
Вариант с циклом работает аналогично.
Получение мгновенных значений потребления оперативной памяти клеток
Задача простая - хотим знать, сколько запущенные клетки используют оперативной памяти
1 2 3 | #!/bin/sh cbsd jrctl mode=show | egrep -i "\-\-\-|memoryuse" | grep - v "\=0" |
Полученный результат выполнения скрипта
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | --- dokuwiki --- memoryuse=31M vmemoryuse=645M --- owncloud --- memoryuse=46M vmemoryuse=1948M --- samba --- memoryuse=16M vmemoryuse=1680M --- ftpbackup --- memoryuse=1172K vmemoryuse=42M --- asterisk --- memoryuse=25M vmemoryuse=889M |
Запуск нескольких скриптов и отправка по почте
Итак - у нас есть несколько полезных скриптов, которые получают нужную нам информацию о клетках. Нужно решить задачу их периодического запуска и получения вывода на электронную почту
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #!/bin/sh sleep 1 echo "To: vershinin.e@gmail.com" > /root/Scripts/audit-pkg .mail echo "Subject: Audit PKG on MAIN and JAILed systems!!!" >> /root/Scripts/audit-pkg .mail echo "" >> /root/Scripts/audit-pkg .mail echo "" >> /root/Scripts/audit-pkg .mail sleep 1 ` /root/Scripts/pkg-audit-all-sys .sh >> /root/Scripts/audit-pkg .mail` sleep 1 ` /root/Scripts/pkg-upgrade-all-sys .sh >> /root/Scripts/audit-pkg .mail` sleep 1 ` /root/Scripts/memory-use-jails .sh >> /root/Scripts/audit-pkg .mail` sleep 1 ` cat /root/Scripts/audit-pkg .mail | /usr/local/bin/msmtp vershinin.e@gmail.com` sleep 1 |
Настройки почтового клиента msmtp в файле /root/.msmtprc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | account default host smtp.gmail.com maildomain gmail.com auto_from on port 587 from vershinin.asterisk@gmail.com tls on tls_certcheck off auth on user vershinin.asterisk password XXXXXXXXXXXX logfile /var/log/msmtp .log # Syslog logging with facility LOG_MAIL instead of the default LOG_USER. syslog LOG_MAIL |
Регулярное резервное копирование клеток
Скрипт для регулярной выгрузки клеток и их сохранение в определенном месте с определенным именем.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #!/bin/sh jailname=$1 CBSDPATH= /CBSD JAILBACKUPTARGET= /data/JAILS backupdate=` /bin/date "+%Y-%m-%d" ` jstatus=` /usr/local/bin/cbsd jstatus $jailname` if [ $jstatus - ne "0" ]; then /usr/local/bin/cbsd jstop $jailname sleep 15 fi jstatus2=` /usr/local/bin/cbsd jstatus $jailname` if [ $jstatus2 - eq "0" ]; then /usr/local/bin/cbsd jexport jname=$jailname compress=9 sleep 15 fi if [ -f $CBSDPATH /export/ $jailname.img ]; then cp $CBSDPATH /export/ $jailname.img $JAILBACKUPTARGET/$jailname-$backupdate.img sleep 5 fi jstatus3=` /usr/local/bin/cbsd jstatus $jailname` if [ $jstatus3 - eq "0" ]; then /usr/local/bin/cbsd jstart $jailname sleep 5 fi jstatus4=` /usr/local/bin/cbsd jstatus $jailname` if [ $jstatus4 - ne "0" ]; then echo "Backup JAIL Finish Successfull! Jail restarted!" fi |
Данный скрипт запускается через /etc/crontab для каждой клетки индивидуально по расписанию.
1 2 3 4 5 | # Backup JAILS monthly 1 4 1 * * root /root/Scripts/backup-jail .sh dokuwiki 1 4 2 * * root /root/Scripts/backup-jail .sh owncloud 1 4 3 * * root /root/Scripts/backup-jail .sh samba && /usr/local/bin/cbsd jexec jname=samba /usr/local/etc/rc .d /transmission stop 1 4 4 * * root /root/Scripts/backup-jail .sh ftpbackup |
Итог работы скрипта - в каталоге /data/JAILS/ каждый месяц в первых числах будут создаваться сжатые экспорты всех клеток со всеми настройками.
Полезные alias-ы для интерпретатора CSH
При частой работе с клетками некоторые большие команды удобно сократить с помощью создания alias в настройках интерпретатора - например .cshrc
Просмотр файловых систем - вариант первый.
1 | alias df 'df -m | grep -v "\/dev"' |
Просмотр файловых систем - вариант второй.
1 | alias df2 'df | grep -v "\/jails\/"' |
Список всех клеток со всех узлов.
1 | alias jall cbsd jls alljails=1 shownode=1 |
Список всех узлов и их статусов.
1 | alias cnodes cbsd node mode=list |
Команды запуска и остановки torrent клиента Transmission внутри клетки.
1 2 | alias tstop '/usr/local/bin/cbsd jexec jname=samba /usr/local/etc/rc.d/transmission stop' alias tstart '/usr/local/bin/cbsd jexec jname=samba /usr/local/etc/rc.d/transmission start' |