Скрипты, разработанные в разное время

Здесь я буду выкладывать скрипты, которые были разработаны мной в разное время. Некоторые из них упоминаются в статьях, некоторые слишком просты для отдельной статьи, но тме не менее для чего-то писались, некоторые вообще писались с целью тестирования чего-либо, или вообще не мной. Правда, таких мало. Основной язык - /bin/sh, то есть тот диалект, который был до прихода в этот мир bash-а. Bash не устанавливается в системе по умолчанию, да и tcsh мне ближе, хоть я и не пишу на нем скриптов больше. И потому что в нем процедур нет, и потом что это не системный язык.

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

Копирование файлов в автоматическом режиме через SSH

Имя файла: safecopy
Имя конфига: cphosts
Версия: 1.19
Скачать скрипт
Скачать конифг

Скрипт предназначен для копирования некоторого набора файлов с некоторого набора компьютеров из одного и того же места на локальный компьютер. Скрипт рассчитан на совместную работу со скриптом 130.backup-dirs, который создает иерархию каталогов год/месяц-год/день-месяц-год и в каждый такой каталог помещает по копии, созданной в этот день. Скрипт переписывает файлы, обнаруженные в каталоге текущего дня с удаленного компьютера на локальный по SFTP. Конфиг, который можно скачать - на самом деле вовсе не конфиг, а файл со списком узлов, которые нужно обойти.

Данный скирпт был описан в статье "Копирование файлов в автоматическом режиме с множества компьютеров через SSH", опубликованной в N 12 за 2004 г.


Автоматическое копирование удаленных баз данных AIDE

Имя файла: aidecontrol
Имя конфига: aidecontrol.conf
Версия: 1.12
Скачать скрипт
Скачать конифг

Скрипт предназначен для автоматического копирования с некторого списка удаленных компьютеров файлов базы данных AIDE (/var/db/aide.db по умолчанию). Скрипт выполняет копирование последнего поколения баз AIDE на USB Flash, а также копирование с автоархивацией (созданием поколения копий) на сменный перезаписываемый носитель (CD, DVD). Копирование выполняется с использованием того же механизма, что и в предыдущем скрипте.

Данный скрипт был описан в статье "Управляем удаленными базами AIDE", опубликованной в N 8 за 2005 г.


Управление удаленными базами AIDE

Имя файла: aidestart
Имя конфига: aidecontrol.conf
Версия: 1.10
Скачать скрипт
Скачать конифг

Скрипт предназначен для решения задачи, противоположной предыдущему - он использует накопленные данные скопированных баз AIDE для проверки состояния сервера, если такую проверку необходмо выполнить. Также скрипт позволяет выполнить операции обновления, сравнения и инициализации сохраненных баз. Все указанные операции доступны только для последнего поколения баз, для работы с архивом необходимо их вручную переименовать.

Данный скрипт был описан в статье "Управляем удаленными базами AIDE. Часть II - AIDEstart", опубликованной в N 9 за 2005 г.


Автоматическое монтирование USB Flash

Имя файла: mountflash
Версия: 1.8
Скачать скрипт

Данный скрипт очень широко использовался в то время, когда не было ни HAL, ни поддержки кодовых страниц в ядре. Он может запускаться как с командной строки, хотя разрабатывался для работы с usbd, для того, чтобы автоматически запускаться при установке USB Flash. Появление HAL сделало его ненужным, но все равно он представляет интерес с точки зрения программирования в шелле - скрипт парсит вывод команды camcontrol devlist для того, чтобы определить, куда установилась USB Flash, для чего повторно осканирует все шины SCSI, которые найдет. После того как устроство обнаружено, скрипт ждет, пока в /dev появится нужное утсройство и только потом его монтирует


Размонтирование USB Flash

Имя файла: umflash
Версия: 1.10
Скачать скрипт

Данный скрипт выполняет обратную задачу - размонтировывает USB Flash и выдает команду camcontrol eject. Размонтировать несложно, сложно найти потом устройство, которому нужно послать данную команду. Для этого скрипт запоминает имя устройства, которое было на задано точке монтирования. Точно также потерял актуальность после появления HAL, но с точки зрения программиста все еще представляет интерес.


Очистка почтовой очереди sendmail

Имя файла: cleanqueue
Версия: 1.2
Скачать скрипт

Этот скрипт был написан для того, чтобы автоматизировать следующую несложную задачу - в почтовой очереди висят письма, отправляемые явно на спамерский сайт (как правило это ответы от MAILER-DAEMON о том, что письмо не может быть доставлено). Также в очереди стоят нормальные письма. Нужно грохнуть нафиг все письма на конкретный спамерский ящик, не трогая нормальных писем. Скрипт ищет в командных файлах указанный адрес, предварительно остановив sendmail, каждый найденный файл удаляет. Потом запускает sendmail, ищет файлы данных, соответствующтх удаленным файлам команд (чтобы место не занимали) и тоже удаляет их.


Отсылка копий особо важный конфигурационных файлов по почте

Имя файла: genhdcopies
Версия: 1.3
Скачать скрипт

Этот довольно простой скрипт. Он предназначен для отправки на некоторый почтовый адрес копий некоторых особо важных конфигурационных файлов, а также отчетов fdisk и disklabel, причем имя диска, для которого необходимо сделать отчет берется из списка смонтированых разделов, ищется запись содержащая строку /dev/adNsMa, где N и М - числа


Создание списка обновившегося программного обеспечения из вывода pkg_version

Имя файла: genupdlist
Версия: 1.5
Скачать скрипт

Этот скрипт предназначен для составления списка обновившегося программного обеспечения из вывода pkg_version. При этом он не учитывает изменения в самом порту (revision и epoch), в список попадают только те порты, у которых изменился номер версии. В начале списка печатается заголовок, состоящий из hostname и даты. Вывод pkg_version помещается в переменную, отбираются строки с updating, откуда он читается построчно, отбрасываются revision и epoch, и сравниваются "старая" и "новая" версии. Если они не совпали - строка выводится, иначе нет


Поиск динамических связей с определенной библиотекой или файлом

Имя файла: getbrlink
Версия: 1.3
Скачать скрипт

Этот скрипт предназначен для поиска линков на разделяемые библиотеки, имена которых задаются в переменной brlib. Применяется он для поиска файлов, которые слинкованы с определенной библиотекой. Поиск выполняется в текущем каталоге. Проверяется тип файла, если он исполняемый бинарник (не скрипт) или разделяемая библиотека - вызывается ldd для получения списка его динамических связей. Если в этом списке находится заданная библиотека, он отмечается в протоколе и его имя выводится в формируемый в /tmp временный файл со списком найденных бинарников или разделяемых библиотек


Запуск нескольких Vtun-сессий в клиентском режиме

Имя файла: vtunclient
Версия: 1.3
Скачать скрипт

Скрипт используется для пакета vtund в том случае, когда компьютер является центром VPN-сети, в которой удаленные узлы работают в режиме сервера, а на центральном компьютере запускается в режиме клиента. Скрипт получает в качестве параметров перечень имен сессий, которые должны совпадать с именами удаленных компьютеров и имя домена. Полное имя компьютера, к которому будет производитться попытка подключения формируется из одного из имен сессий и имени домена. Например, если задано:

vtunclient_sessions="aaa bbb ccc"
vtunclient_domain="myserver.com"

то будет запущено три копии процесса vtun:

# vtund -p aaa aaa.myserver.com
# vtund -p bbb bbb.myserver.com
# vtund -p ccc ccc.myserver.com


Автоматическая блокировка доступа к некоторым сайтам в указанном интервале времени

Имя файла: stopgrant.sh
Имя конфига: grantlist
Версия: 1.4
Скачать скрипт
Скачать конифг

Этот скрипт был разработан в свое время для того, чтобы убедить одного сотрудника что в рабочее время необходимо работать, а не шариться по форумам. Блокирование на уровне прокси не применялось, чтобы свалить вину на "где-то в инете" :-D Скрипт достаточно простой - он читает список блокируемых узлов (по умолчанию /root/admin/grantlist) и для каждого узла:

Запускается скрипт из крона. Дважды - во время начала рабочего дня для установки блокировок и во время окончания для снятия их


Автоматическое обновление дерева портов (адаптировано для periodic)

Имя файла: 120.ports-sync
Имя конфига: ports-supfile
Версия: 1.4
Скачать скрипт
Скачать конифг

Это наиболее старые скрипты, разработанные мной. В них стоит отметка что они были написаны еще 1 августа 2002 года, но на самом деле они были написаны гораздо раньше, просто раньше они были написаны на tcsh, а этой датой отмечена их полная трансляция на /bin/sh. Этот и последующий скрипты выполняют задачу автоматического обновления дерева портов и исходных текстов системы (есть там еще и третий - обновление репозитория документации). Обновление происходит через программу cvsup, с сервера, который указан в sup-файле (как правило он выбирается довольно отфонарным способом). Достоинство этого скрипта состоит в том, что он сохраняет протокол своей работы в отдельном файле и по завершению обновления можно запустить например команду регенерации файла INDEX-6 (да, его можно и не закачивать, экономя трафик :-)) ) вот таким образом:

/usr/local/bin/cvsup -c cvsdata -g -L 2 $daily_ports_sync_supfile >> $cvsreport \
&& /usr/local/bin/cache-update -f cvsup-output -i $cvsreport 2> /dev/null \
&& /usr/local/bin/portindex -q -o /usr/ports/INDEX-6 2> /dev/null \
&& rc=0 || rc=3;;
Для работы скрипта необходимо внести в файл /etc/periodic.conf следующие строки:
daily_ports_sync_enable="YES"
daily_ports_sync_cvsdir="/usr/share/cvsinput"
daily_ports_sync_supfile="ports-supfile"
daily_ports_sync_cvsport="5999"

Здесь cvsdir - это каталог, в котором находится supfile и куда будет записан отчет о работе


Автоматическое обновление дерева исходных текстов системы (адаптировано для periodic)

Имя файла: 120.system-sync
Имя конфига: many-supfile
Версия: 1.3
Скачать скрипт
Скачать конифг

Это скрипт-напарник для скрипта синхронизации портов - скрипт синхронизации исходных текстов системы. Используя этот скрипт можно получать всегда последнюю версию системы. Он тоже был написан очень давно, еще наверное в пору FreeBSD 3.x. Обновление проихсодит точно так же, через программу cvsup, с сервера, указанного в sup-файле. Но для этого скрипта большое значение имеет параметр tag. Если его установить в значение RELENG_<цифра>, то обновление будет происходить до последней версии системы в данной ветке (то есть, например если установлено RELENG_6, то обновление пройдет с 6.2 на 6.3 и т.д.), но если его устанговить в значение RELENG_<цифра>_<цифра>, то обновление будет происходить только для заданной версии!

После окончания работы скрипт отсылает отчет о работе на указанный почтовый адрес

Для работы скрипта необходимо внести в файл /etc/periodic.conf следующие строки:

weekly_system_sync_enable="YES"
weekly_system_sync_cvsdir="/usr/share/cvsinput"
weekly_system_sync_supfile="ports-supfile"
weekly_system_sync_cvsport="5999"
weekly_syestem_sync_mailto="<адрес, куда отправлять отчет>

Здесь cvsdir - это каталог, в котором находится supfile и куда будет записан отчет о работе


Резервное копирование каталогов и баз данных MySQL (адаптировано для periodic)

Имя файла: 130.backup-dirs
Имя конфига: rmbackup.conf
Имя дополнительного конфига: dbconnect.conf
Версия: 1.19
Скачать скрипт дневного копирования
Скачать скрипт недельного копирования
Скачать скрипт месячного копирования
Скачать конифг
Скачать дополнительный конифг

Это один из самых старых скриптов, написанных мной когда-либо. Сейчас мне неохота лезть подымать архивы с целью выяснить, когда же они были написаны, но помню, что это было ну ооочень давно, году наверное в 2000. Задача этих скриптов крайне проста - взять указанный каталог, запаковать его в tar.bz2 и поместить в заранее оговоренное место. Поддерживаются каталоги на файловых системах UFS, MSDOS и сетевые ресурсы Windows, а также базы данных MySQL. Именем архива становится полный путь к каталогу, в котором все разделители пути заменены символом подчеркивания (от этого архивы сетевых ресурсов получают длиннющие имена). В случае же базы MySQL именем архива становится просто имя базы.

Пути к каталогам и типы файловых систем прописываются в основном каталоге rmbackup.conf. Если не использовать копирование баз данных, то файл dbconnect.conf вообще не нужен, он испольузется для подключения к базе по чтению. ВНИМАНИЕ! пароль указывается без какой-либо шифровки!

В начале конфигов приведены комментарии, в которых кратко описано как настраивать, хотя скрипты несложные, в них можно и самому разобраться. По количеству их три, но на самом деле отличаются они только используемыми именами переменных

Для работы скриптов необходмо внести в файл /etc/periodic.conf следующие строчки (приведен пример для скрипта дневного копирования, для всех прочих просто переменые daily меняются на weekly и monthly соответственно):

daily_backup_enable="YES"                               # Enable daily backup
daily_backup_dirs_cfg="/usr/local/etc/rmbackup.conf"    # File with backup lists
daily_backup_fileplace="/usr/local/share/rmbackup/backup"
daily_backup_owner="rmbackup"                           # Owner of backup files
daily_backup_group="rmbackup"                           # Group of owners
daily_backup_mode="0600"                                # Mode of backup files
daily_backup_dirmode="0700"                             # Mode of intermediate dirs
daily_backup_dbconnect_conf="/usr/local/etc/dbconnect.conf"
daily_backup_startup="/usr/local/etc/rc.d"
daily_backup_connect="username"

Здесь backup_dirs_cfg - путь к каталогу, где находится основной конфиг, backup_fileplace - соответственно имени, каталог, который будет корневым при создании подкаталогов для хранения копий backup_owner, group, mode и dirmode - соответственно владелец, группа владельцев, права на файлы и на каталоги, которые будут создаваться внутри корня, backup_dbconnect_conf - путь к каталогу с дополнительным конифгом, backup_startup - путь к каталогу стартовых скриптов. Используется в том случае, если для каталога задается скрипт, который перезапустит программу, использующую данный файл.backup_connect использется только если копируются данные с сетевых ресурсов Windows и задает имя пользователя, от имени которого выполняетс подколючение.


Работа с данными Active Directory из скриптов на языках Bourne Shell, Perl и PHP

Имя файла: ldaptest.tar.bz2
Имя файла: tstldap.tar.bz2
Имя файла: ldapshtst.tar.bz2
Скачать скрипт на языке PHP
Скачать скрипт на языке Perl
Скачать скрипт на языке Bourne Shell

Это примеры скриптов, постоянно упоминаемые в статьях, опубликованных в октябре и декабре 2008 года "Доступ к данным Active Directory из скриптов". В каждом архиве содержится файл самого скрипта, файл конфига и текст лицензионного соглашения. Все скрипты распространяются по лицензии BSD (это конечно можно было бы и не упоминать:-)). Все скрипты представляют из себя законченные программы, которые решают именно ту задачу, которая была описана в статье - они были написаны специально для публикации статьи, хотя в будущем будут пристроены к работе :-) Читайте внимательно комментарии в конфигурационных файлах - они все настроены на мою тестовую сетку!

Управляющие скрипты для racoon

Имя файла: racoon.tar.bz2
Скачать архив

Это набор полноценных, рабочих, используемых мной сейчас скриптов для работы с racoon. Архив содержит скрипты linkup.sh и linkdown.sh, собственно конфигурационный файл racoon.conf, версию linkup для работы через PAM - pam_linkup.sh, файлы extnodes, extnodes.conf и extnodes_leaf.conf, а также упрощенные версии скриптов (для сервера листа) - linkup_leaf.sh и linkdown_leaf.sh.



Еще увидимся...
Искренне Ваш,
Master UNIX administrator