Показаны сообщения с ярлыком Rhel. Показать все сообщения
Показаны сообщения с ярлыком Rhel. Показать все сообщения

суббота, 5 мая 2012 г.

Установка nodejs на RHEL6.2

Краткая заметка на память о сабже.

1. Скачать пакет с информацией о репозитории:
wget -c http://nodejs.tchol.org/repocfg/el/nodejs-stable-release.noarch.rpm

2. Установить скачанный на предыдущем шаге пакет
sudo rpm -ivh nodejs-stable-release.noarch.rpm
или
sudo yum localinstall nodejs-stable-release.noarch.rpm

3. Установить nodejs
sudo yum install nodejs

4. Создать тестовый js-файл для проверки работы сервера:
cat test.js
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(8888, "127.0.0.1");
console.log('Server running at http://127.0.0.1:8888/');


5. Запуск сервера nodejs
sudo nodejs test.js

четверг, 8 декабря 2011 г.

Проблема с запрещением LRO в RHEL6.2

Вообщем, сегодня столкнулся с проблемой после обновления RHEL 6.1 -> 6.2. RHEL - виртуалка, хост - ESXi.

Собственно, вот что вылезло в /var/log/messages

Dec  8 10:30:18 vTestFW kernel: ------------[ cut here ]------------
Dec  8 10:30:18 vTestFW kernel: WARNING: at net/core/dev.c:1234 dev_disable_lro+0x7b/0x80() (Not tainted)
Dec  8 10:30:18 vTestFW kernel: Hardware name: VMware Virtual Platform
Dec  8 10:30:18 vTestFW kernel: Modules linked in: ppdev parport_pc parport microcode vmware_balloon i2c_piix4 i2c_core sg shpchp ext4 mbcache jbd2 sd_mod crc_t10dif sr_mod cdrom vmxnet3 vmw_pvscsi pata_acpi ata_generic ata_piix dm_mirror dm_region_hash dm_log dm_mod [last unloaded: scsi_wait_scan]
Dec  8 10:30:18 vTestFW kernel: Pid: 799, comm: sysctl Not tainted 2.6.32-220.el6.x86_64 #1
Dec  8 10:30:18 vTestFW kernel: Call Trace:
Dec  8 10:30:18 vTestFW kernel: [<ffffffff81069b77>] ? warn_slowpath_common+0x87/0xc0
Dec  8 10:30:18 vTestFW kernel: [<ffffffff81069bca>] ? warn_slowpath_null+0x1a/0x20
Dec  8 10:30:18 vTestFW kernel: [<ffffffff8142a10b>] ? dev_disable_lro+0x7b/0x80
Dec  8 10:30:18 vTestFW kernel: [<ffffffff8149118d>] ? devinet_sysctl_forward+0x14d/0x190
Dec  8 10:30:18 vTestFW kernel: [<ffffffff811e4ca7>] ? proc_sys_call_handler+0x97/0xd0
Dec  8 10:30:18 vTestFW kernel: [<ffffffff811e4cf4>] ? proc_sys_write+0x14/0x20
Dec  8 10:30:18 vTestFW kernel: [<ffffffff811765d8>] ? vfs_write+0xb8/0x1a0
Dec  8 10:30:18 vTestFW kernel: [<ffffffff810d46e2>] ? audit_syscall_entry+0x272/0x2a0
Dec  8 10:30:18 vTestFW kernel: [<ffffffff81176fe1>] ? sys_write+0x51/0x90
Dec  8 10:30:18 vTestFW kernel: [<ffffffff8100b0f2>] ? system_call_fastpath+0x16/0x1b
Dec  8 10:30:18 vTestFW kernel: ---[ end trace 38ebf833f6a2bfcc ]---
Dec  8 10:30:18 vTestFW kernel: ------------[ cut here ]------------


Недолгое гугление приводит к советам VMware отключить LRO (Large Receive Offload) на сетевых интерфейсах (http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1027511).
Пробую:

# ethtool -K eth1 lro off
Cannot set large receive offload settings: Operation not supported


Мда, забавно. Ищем в базе знаний RedHat - может чего такого уже есть - и таки да, решение найдено.
1 - Временно использовать драйвер e1000 вместо vmxnet3
2 - Запретить LRO на уровне хоста ESXi.

Я попробовал оба способа - особой разницы не заметил - оба работают. Ошибки в логах пропали, особой потери производительности нет.

PS: Как запретить LRO на уровне ESXi:

Перейти настройках Software->Advanced Settings->Net setting.
Найти параметр Net.VMxnet3SwLRO и поставить 1 вместо 0.

Дальнейший разбор полетов в RedHat продолжается, ждем нормального решения.

Литература:
RedHat KB.

суббота, 3 декабря 2011 г.

Chroot php-fpm в rhel6.


Возникла необходимость поставить php-fpm в chroot для увеличения безопасности одного популярного движка сайта. Небольшой рассказ о проделанной работе и возникших проблемах. Итак, php-fpm обладает замечательной возможностью запускать скрипты в chroot-окружении. Немного wikipedia: chroot — операция изменения корневого каталога в Unix-подобных операционных системах. Программа, запущенная с изменённым корневым каталогом, будет иметь доступ только к файлам, содержащимся в данном каталоге. Поэтому, если нужно обеспечить программе доступ к другим каталогам или файловым системам (например, /proc), нужно заранее смонтировать в целевом каталоге необходимые каталоги или устройства.
Немного об используемом ПО. Все крутится под 64-битной RHEL6. Настроена связка php-fpm + nginx, о настройке которой, наверно, будет рассказано в другой заметке. Сайт лежит в /data/www/DOMAIN.COM. Используются популярные библиотеки/программы для работы с видео/графикой, т.е. ffmpeg и ImageMagick.

Установка php-fpm.
a) Установить репозиторий remi:
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
rpm -Uvh remi-release-6.rpm
b) Импорт GPG-ключа
rpmimport http://rpms.famillecollet.com/RPM-GPG-KEY-remi
c) yum -y install php-fpm

Настройка php-fpm.
Отмечу только те моменты, которые стоит изменить.

cat /etc/php-fpm.d/www.conf
; Название пула процессов
[www]
****
; Задаем пользователя, под которым будет работать php-fpm.
user = pf
; Тоже самое для группы.
group = pf
; При старте делать chroot в заданную директорию.
chroot = /data
chdir = /www/DOMAIN.COM
; Путь и параметры для отправки почты с помощью функции php mail()
php_admin_value[sendmail_path] = /usr/bin/mini_sendmail -t -fUSER@DOMAIN.COM -s192.168.0.x

****

Настройка nginx.

Параметры, которые будут передаваться FastCGI-серверу, т.е. Php-fpm. Обратите внимание, на закомментированные и рабочие строки. Nginx должен передать php-fpm параметры относительно корня chroot, т.е. НЕ /data/www/DOMAIN.COM, а /www/DOMAIN.COM.

cat /etc/nginx/fastcgi_params

fastcgi_param DOCUMENT_ROOT /www/DOMAIN.COM;
#fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SCRIPT_FILENAME /www/DOMAIN.COM$fastcgi_script_name;
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

Создание окружения для запуска скриптов (папки, файлы, библиотеки...)

Одна из самых интересных частей. Суть ее заключается в следующем: создаем необходимые папки в chroot-окружении, копируем необходимые библиотеки/файлы для работы сайта. Объем библиотек достаточно большой, надо внимательно скопировать нужные, в сети много скриптов, которые могут сделают за вас эту работу, но в первый раз рекомендую сделать вручную, чтобы понять что к чему.

# cd /data/
# mkdir -p /data/{bin,etc,var,lib64,tmp,usr}
# mkdir -p /data/usr/{share,bin,lib64}
# chmod 1777 tmp
для запуска ffmpeg и convert php требуется shell, придется копировать внутрь chroot bash или dash на ваш выбор.
# cp /bin/bash bin
# ln -s bash bin/sh
# cp /etc/{hosts,localtime,nsswitch.conf,resolv.conf} etc
# cp -R /usr/share/zoneinfo usr/share
# cp /usr/bin/{ffmpeg,convert} usr/bin
# cp /lib64/libnss_dns* lib64
# cp /lib64/libnss_files* lib64

Теперь важный момент — часто php-скриптам требуется определять днс-имена и временные зоны. Нужно скопировать в chroot-окружение библиотеки libnss. Для проверки определения имен я использую print_r(dns_get_record('google.com'));
Для каждого выполняемого файла в chroot-окружении необходимо скопировать нужные библиотеки (если только файл не скомпилирован статически, что бывает достаточно редко).
# ldd /usr/bin/ffmpeg
# ldd /usr/bin/convert
# ldd /bin/bash
На экран будет выведен список необходимых библиотек для указанных программ. Данные библиотеки вместе с символическими ссылками копируете в chroot-окружение (то, что лежит в /lib64 -> /data/lib64; то, что лежит в /usr/lib64 -> /data/usr/lib64).

Запуск и разбор возникающих ошибок

1. Функция php mail().
Для использования в php-скриптах функции mail() нужно либо копировать sendmail со всеми необходимыми библиотеками, либо статически слинковать mini_sendmail. Поскольку готового пакета mini_sendmail для rhel6 в репозиториях нет, придется качать и компилировать вручную.


# make
Если нижеследующей ошибки не возникает — можно пропустить.
gcc -O -s -static mini_sendmail.o -o mini_sendmail
/usr/bin/ld: cannot find -lc

Решение:
Нужно установить пакет glibc-static, который содержит все необходимые библиотеки для статической линковки программ.
# yum install glibc-static

Необязательный пункт, но все же.
Отредактируйте файл mini_sendmail.c, найдите строку:
username = getlogin();
заменить на:
username = "mini_sendmail";//getlogin();
Причем, на что вы измените имя юзера (username) роли не играет, просто это позволит избежать вызова функции getlogin() для определения вызывающего пользователя.
Для запуска необходим bash (sh) - нужно скопировать в chroot-директорию, а также скопировать нужные ему библиотеки.

2. Ошибка «php timezone database is corrupt»
Проверьте скопировали ли вы файлы /usr/share/zoneinfo в chroot.

3. Не пишутся логи ошибок php-fpm
проверьте есть ли директория /var/log/php-fpm/ внутри chroot и есть ли права у пользователя, под которым запускается php-fpm, на запись/создание файлов в данной папке.

4. Пляски вокруг ImageMagick
Появляются ошибки вида:

convert: UnableToOpenConfigureFile `delegates.xml' @ warning/configure.c/GetConfigureOptions/589.

Пришлось много гуглить, кто предлагает переустановить ImageMagick, кто скачать и перекомпилировать исходники, кто пользоваться библиотекой gd, вообщем рецептов много — выбирай на вкус. Оказалось все гораздо проще — надо скопировать необходимые конфигурационные файлы (*.xml) из папки /usr/lib64/ImageMagick-$version/ в /data/usr/lib64/ImageMagick-$version/

5. Сессии.

Почти внезапно перестали работать сессии. Связано с тем, что необходимого каталога нет в chroot-окружении. Выходов есть несколько: либо вести сессии в базе данных, либо создать необходимые папки с правами в chroot-окружении, либо изменить значение пути где хранятся сессии на /tmp.

Литература:

среда, 26 октября 2011 г.

Отключение TSO на интерфейсе при загрузке.

Встала небольшая задача - отключать TSO (TCP Segmentation offload) при загрузке хоста. Попытка установить переменную ETHTOOL_OPTS в конфигурационном файле /etc/sysconfig/network-scripts/ifcfg-ethX не привела к нужным результатам. Данная переменная (ETHTOOL_OPTS) позволяет управлять параметрами дуплекса (duplex), автосогласования скорости (autoneg), но не позволяет установить Offload-параметры. 
Как вариант, можно добавить команду "/sbin/ethtool -K eth1 tso off" в /etc/rc.d/rc.local.
Вторая возможность позволяет воспользоваться средствами Udev. Создаем свое правило или редактируем текущее, касающееся нужного интерфейса (в моем случае /etc/udev/rules.d/70-persistent-net.rules), и добавляем RUN+="/sbin/ethtool -K eth0 tso off"
# cat /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:50:56:8b:00:00", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0", RUN+="/sbin/ethtool -K eth0 tso off"

суббота, 22 октября 2011 г.

Небольшая заметка о настройке анализатора логов AWStats для web-сервера Nginx.


Во-первых, что такое AWStats?
AWStats является генератором отчетов веб-аналитики с открытым исходным кодом, пригодным для анализа данных интернет-сервисов, таких как веб, потокового мультимедиа, почта и FTP серверов. AWStats проводит разбор и анализ log файлов сервера, генерируя HTML отчеты. Данные визуально представлены в отчетах таблицами и гистограммами. Статические отчеты могут быть созданы через интерфейс командной строки, или через CGI-сценарии.
AWStats поддерживает большинство основных форматов Log-файлов веб-серверов, включая Apache (NCSA комбинированного / XLF / ELF log формат или обычный СLF log формат), WebStar, IIS (W3C log формат) и многих других распространенных log форматов веб-серверов.

Теперь об исходных данных. Настройка будет проходить на 64-битной OS RHEL6.1. Домен, для которого нужно создавать отчеты — DOMAIN.COM. Для просмотра статистики я создал дополнительный поддомен awstats.DOMAIN.COM с ограниченным доступом по IP и паролю.
Предполагается, что web-сервер nginx уже установлен и использует формат логов combined.
В конфигурации nginx всегда существует предопределённый формат "combined" (см. http://nginx.org/ru/docs/http/ngx_http_log_module.html):
log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';

Установка:
1. подключить репозиторий rpmforge
2. Установить пакеты awstats и perl-Geo-IPfree
yum -y install awstats perl-Geo-IPfree

Настройка Nginx:
Создаем отдельный виртуальный хост для awstats, в моем случае awstats.DOMAIN.COM
# cat /etc/nginx/conf.d/awstat.DOMAIN.COM.conf
server {
listen 80;
server_name awstats.DOMAIN.COM;
root /var/www/awstats/DOMAIN.COM;
index awstats.DOMAIN.COM.html;
access_log /var/log/nginx/awstats.DOMAIN.COM-access.log main;
error_log /var/log/nginx/awstats.DOMAIN.COM-error.log;

location = /favicon.ico {
access_log off;
log_not_found off;
}

location / {
auth_basic "Auth required";
auth_basic_user_file /etc/nginx/conf.d/htpasswd;

allow 192.168.0.0/16;
allow X.X.X.X;
allow Y.Y.Y.Y;
allow Z.Z.Z.Z;
deny all;
}

location /awstats/ {
alias /var/www/awstats/;
}

}

Пароли в файле /etc/nginx/conf.d/htpasswd должны быть зашифрованы функцией crypt(3). Для создания файла с паролями можно воспользоваться программой htpasswd из дистрибутива Apache. Например, htpasswd -c /etc/nginx/conf.d/htpasswd jack или если файл уже есть htpasswd /etc/nginx/conf.d/htpasswd jack.

Настройка awstats:
При установке создаются 2 файла в директории /etc/awstats
/etc/awstats/awstats.localhost.localdomain.conf
/etc/awstats/awstats.model.conf

Создаем новый профиль для нашего домена
cp /etc/awstats/awstats.localhost.localdomain.conf /etc/awstats/awstats.DOMAIN.COM.conf
Редактируем файл /etc/awstats/awstats.DOMAIN.COM.conf, он достаточно хорошо прокомментирован, я приведу лишь часть настроек, которые были изменены.

Рекомендую использовать для данной директивы только абсолютный путь к лог-файлу.
LogFile="/var/log/nginx/access.log"
Тип лог-файла, для web-сервера W, F — для ftp и т.п.:
LogType=W
Лог-файл в формате Apache combined, либо указать явно строку с форматом лога.
LogFormat=1
Информация в лог-файле разделена пробелами.
LogSeparator=" "
Указываем имя домена
SiteDomain="DOMAIN.COM"
Указываем все возможные псевдонимы домена
HostAliases="localhost 127.0.0.1 www.DOMAIN.COM"
В какой папке будут лежать БД awstats, на основе этих данных awstats сгенерирует отображаемую статистику.
DirData="/var/www/awstats/DOMAIN.COM"
Путь к папке с иконками
DirIcons="/awstats/icon/"

Подключаем плагины (если есть)
LoadPlugin="geoipfree"
LoadPlugin="geoip_city_maxmind GEOIP_STANDARD /var/www/awstats/GeoIPCity.dat"

Запуск Awstats
Заключается в запуске утилиты awstats.pl с необходимыми параметрами для сбора статистики. Для визуализации может использоваться awstats.pl, запущенная как CGI-скрипт, либо awstats_buildstaticpages.pl, создающая статические страницы на основе информации от awstats.pl.

cd /var/www/awstats
./awstats.pl -config=DOMAN.COM -update
Если вылазит ошибка
Error: Plugin load for plugin 'geoipfree' failed with return code: Error: Can't locate Geo/IPfree.pm in @INC

Решение: установить perl-Geo-IPfree (yum -y install perl-Geo-IPfree), либо закомментировать в конфигурации загрузку плагина geoipfree (#LoadPlugin="geoipfree")

Пример

/var/www/awstats/awstats.pl -config=DOMAIN.COM -update
Create/Update database for config "/etc/awstats/awstats.DOMAIN.COM.conf" by AWStats version 7.0 (build 1.971)
From data in log file "/var/log/nginx/access.log"...
Phase 1 : First bypass old records, searching new record...
Searching new records from beginning of log file...
Phase 2 : Now process new records (Flush history on disk after 20000 hosts)...
Jumped lines in file: 0
Parsed lines in file: 177287
Found 1130 dropped records,
Found 0 comments,
Found 0 blank records,
Found 380 corrupted records,
Found 0 old records,
Found 175777 new qualified records.

Dropped records — записи, отвергнутые по причине того, что они либо НЕ "user HTTP requests", либо отфильтрованы директивами SkipHosts, SkipUserAgents, SkipFiles, OnlyHosts, OnlyUserAgents и OnlyFiles.
Corrupted records - записи, не подходящие под формат лог-файла из директивы LogFormat
Old records - ранее обработанные записи
New records — новые записи

awstats_buildstaticpages.pl -config=DOMAIN.COM -update -lang=ru -awstatsprog=/var/www/awstats/awstats.pl -dir=/var/www/awstats/DOMAIN.COM/

Заходим браузером на http;//awstats.DOMAIN.COM и в случае успеха наблюдаем визуализированную статистику.

Добавляем в cron:
crontab -e
30 * * * * /var/www/awstats/awstats.pl -config=DOMAIN.COM -update >/dev/null
40 * * * * awstats_buildstaticpages.pl -config=DOMAIN.COM -update -lang=ru -awstatsprog=/var/www/awstats/awstats.pl -dir=/var/www/awstats/DOMAIN.COM/ >/dev/null

Не забываем перезапустить crond.
service crond restart

Добавляем в скрипт ротации логов Nginx
# cat /etc/logrotate.d/nginx
var/log/nginx/*log {
daily
rotate 10
missingok
notifempty
compress
sharedscripts
prerotate
/var/www/awstats/awstats.pl -update -config=DOMAIN.COM >/dev/null
endscript
postrotate
[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
endscript
}

Литература:

понедельник, 20 июня 2011 г.

EXT4-fs (dm-0): Unaligned AIO/DIO on inode 90177549 by oracle; performance will be poor

Собственно, вылезло такое сообщение в /var/log/messages на сервере под RHEL 6.1. Сообщение вылезает нечасто, примерно раз в день. с разными номерами инодов. Особых проблем с производительностью я не заметил, прогнал с помощью dd запись/чтение больших файлов - вроде все нормально. на всякий случай связался с поддержкой RedHat, где вежливо объяснили, что во-первых железо не сертифицировано под RHEL6, а во-вторых:
a. This error is safe, and It will not cause filesystem corruption. In fact, the message was added when the code was made "corruption-safe"
b. This warning is throttled to only appear once per day in your logs, even if you encounter the problem much more often.
c. The code has been made corruption-safe, but as a consequence there may be a performance degradation depending on your workload.
d. If your testing shows that the performance is unacceptable, we can ask engineering to review the code and look for performance improvements, or try switching back to ext3 or RAW devices with Oracle ASM or similar.

Суммируя:
Сообщение НЕ указывает на то, что данные будут повреждены. Если производительность устраивает - не стоит париться. Если, наоборот, есть проблемы, то нужно откатиться к использованию ext3 или использовать Oracle ASM.

Литература:
http://www.spinics.net/lists/linux-ext4/msg22690.html

среда, 8 июня 2011 г.

Установка RDAC на IBM xSeries 366.


Недавно встала передо мной задача подготовить сервер IBM xSeries 366 под Oracle. Под данные выделили LUN на DS4300.
В данной заметке я постараюсь описать свой опыт установки Linux RDAC под RHEL 6.1.
Первым делом, определимся что это? Драйвер RDAC позволяет объединить несколько маршрутов ввода-вывода между узлами серверов и дисковыми массивами в единое целое. Маршруты в этом случае представляют собой физические SAN-соединения, которые могут включать отдельные кабели, переключатели и контроллеры. При их агрегации будет создано новое устройство.
Точно такую же функцию выполняет DM-Multipath из пакета device-mapper-multipath, входящего в поставку RHEL6. IBM рекомендует устанавливать Linux RDAC драйвер для доступа к стойке.

Скачиваем последний архив с исходниками:
wget -c http://www.lsi.com/sep/Documents/rdac/rdac-LINUX-09.03.0C05.0454-source.tar.gz
 wget -c http://www.lsi.com/sep/Documents/rdac/ibm_sw_ds3k4k5krdac_09.03.0C05.0454_linux_anycpu.txt

Внимательно читаем README и узнаем, что в версии 09.03.0C05.0454 предлагается:

- Новая архитектура с поддержкой многопоточной обработки.
- Улучшение производительности по сравнению с предыдущими версиями.
- Поддержка RedHat 6.

Отлично, изменения более подробно описывать смысла нет, можно посмотреть в файле изменений самостоятельно.
Теперь об ограничениях/замечаниях текущей версии драйвера:

1. KDUMP не работает с установленным MPP-драйвером в RHEL 6.0. Проблема решена в RHEL 6.1

2. RDAC драйвер не может сосуществовать с Fibre Channel HBA-level multipath failover/failback driver.

3. SCSI-подсистема в Linux не поддерживает несмежные LUNы. Например, хосту презентованы LUN1 и LUN4, в данном случае ядро не будет сканировать оставшиеся LUNы.
Рекомендуется презентовать смежные LUNы или перед запуском приложений запускать скрипт, который обнаружит LUNы с помощью mppBusRescan, а затем примонтирует найденные разделы.

4. Разработчики рекомендуют использовать зонирование FC-коммутаторов.

5. RDAC драйвер немедленно рапортует о ошибках ввод/вывода при потере всех путей к стойке.

6. Стек RDAC драйверов (включает mppUpper; драйвера HBA, например, qla2xxx; mppVhba) не рекомендуется загружать/выгружать с помощью modprobe/insmod/rmmod, только с помощью перезагрузки в тоже или другое ядро.

Новая установка

Распаковать исходники:
tar -zxf rdac-LINUX-09.03.0C05.0454-source.tar.gz
Войти в папку:
cd linuxrdac-09.03.0C05.0454
Удалить старые объектные файлы
make clean
Скомпилировать
make
Установить
make install

После этого в каталоге /boot появится файл mpp-2.6.32-131.2.1.el6.x86_64.img
Его нужно добавить в меню grub:

title Red Hat Enterprise Linux Server (2.6.32-131.2.1.el6.x86_64) with MPP
root (hd0,0)
kernel /vmlinuz-2.6.32-131.2.1.el6.x86_64 ro root=UUID=4be0d*** rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet elevator=deadline
initrd /mpp-2.6.32-131.2.1.el6.x86_64.img


Перезагрузка
reboot

Проверка, что модули драйвера успешно загружены:
# lsmod | grep mpp
mppVhba 135909 1
mppUpper 153884 1 mppVhba


Для проверки. что драйвер нашел устройства:
# ls -lR /proc/mpp
либо
# /opt/mpp/lsvdev
Array Name Lun sd device
-------------------------------------
IBM4300-001 0 -> /dev/sdb


Конфигурация драйвера хранится в файле /etc/mpp.conf. Если вы делаете какие-либо изменения в нем, рекомендуется запустить mppUpdate (обновит RAM-диск в сообветствии с новой конфигурацией). Многие изменения в конфигурации требуют перезагрузки системы. Разработчики драйвера категорично рекомендуют делать именно перезагрузку, а не выгрузку/загрузку модулей.

Удаление RDAC драйвера
cd linuxrdac-09.03.0C05.0454
make uninstall
reboot


Переустановка/обновление RDAC драйвера
cd linuxrdac-09.03.0C05.0454
make uninstall
make clean
make
make install
reboot


Kernel Update
rpm -Uvh kernel-firmware-VERSION kernel-devel-VERSION -kernel-headers-VERSION
rpm -ivh new_kernel-VERSION
Отмонтировать разделы
Отмапить разделы со стойки
reboot


После успешной загрузки следовать пунктам в "Переустановка/обновление RDAC драйвера".

среда, 1 июня 2011 г.

Мониторинг температуры серверной с помощью digitemp.

В серверной имеется старенький датчик температуры DS9097U. Года полтора назад надо было настроить мониторинг температуры в серверной. Собственно, это небольшая заметка о проделанной ранее работе. В организации, где я работаю, активно используется Nagios для мониторинга серверов/стоек/активного оборудования и т.п. Далее я кратко опишу, как прикрутить digitemp к nagios. DigiTemp - это простая программа, используемая для чтения данных из датчиков температур, в моем случае подключенных к COM-порту сервера под RHEL 6 (ранее RHEL 5).

1. Скачать digitemp можно отсюда:
wget -c http://www.digitemp.com/software/linux/digitemp-3.6.0.tar.gz

2. Распаковать
tar xzf digitemp-3.6.0.tar.gz
cd digitemp-3.6.0


3. прочитать README
less README

4. Компилирование исходников
make ds9097u

5. Инициализация датчика (ищет доступные устройства, если не указать явно, и записывает их ROM-параметры в .digitemprc)
./digitemp_DS9097U -i -s /dev/ttyS0

6. Копирование файлов в нужные папки
cp digitemp_DS9097U /usr/local/bin
ln -s /usr/local/bin/digitemp_DS9097U /usr/local/bin/digitemp
mv .digitemprc /etc/nagios/digitemp.conf


7. Установить необходимые права на устройство, либо добавить пользователя nagios в группу, которой принадлежит файл /dev/ttyS0
chmod 666 /dev/ttyS0 (подключенное устройство)
Обязательно добавить в правила udev соответствующие разрешения.

8. Скачать плагин для nagios под названием check_digitemp.pl. Например, отсюда http://oss.teamix.org/projects/nagiosplug/repository/revisions/master/changes/contrib/check_digitemp.pl

Проверка
/usr/local/nagios/libexec/check_digitemp.pl -t 0 -f /etc/nagios/digitemp.conf -w 30 -c 35 -C
добавить в /etc/nagios/nrpe.conf на стороне сервера, к которому подключен датчик.
echo “command[check_temperature]=/usr/local/nagios/libexec/check_digitemp.pl -t 0 -f /etc/nagios/digitemp.conf -w 30 -c 35 -C” >> /etc/nagios/nrpe.conf

Описать сервис на хосте с Nagios
define service{
use linux-service
host_name dbtest01
service_description Current temperature
check_command check_nrpe!check_temperature
}


Объявить команду check_temperature в файле /etc/nagios/commands.cfg на хосте с Nagios
*****
#DigiTemp temperature check command
define command{
command_name check_temperature
command_line $USER1$/check_digitemp.pl -w $ARG1$ -c $ARG2$ -t $ARG3$ -f $ARG4$ -C
}

*****

среда, 25 мая 2011 г.

Установка exim в rhel 6 (Альтернативный способ)

В заметке http://jskyworker.blogspot.com/2011/02/exim-rhel-60.html я описал установку exim под RHEL 6 из исходников. Привожу еще один вариант, вроде немного полегче)).

Добавить репозиторий Atrpms:
1. импортировать gpg-ключ
rpm --import http://packages.atrpms.net/RPM-GPG-KEY.atrpms
или если не получилось
wget -c http://packages.atrpms.net/RPM-GPG-KEY.atrpms
rpm --import RPM-GPG-KEY.atrpms


2. добавить репозиторий
cat << EOF >> /etc/yum.repos.d/atrpms.repo
[atrpms]
name=RHEL $releasever - $basearch - ATrpms
baseurl=http://dl.atrpms.net/el$releasever-$basearch/atrpms/stable
enabled=1
gpgcheck=1

EOF

Установить пакеты

yum --enablerepo=atrpms -y install exim exim-mysql libspf2 libsrs_alt

Литература:
http://atrpms.net/documentation/install/

понедельник, 23 мая 2011 г.

Установка cacti в RHEL5.

Сразу предупреждаю - заметка будет короткой, только основные моменты. В конце заметки будет ссылка на более подробный материал. Решил перенести на сервер с nagios еще и cacti. Cacti — open-source веб-приложение, система позволяет строить графики при помощи RRDtool. Cacti собирает статистические данные за определённые временные интервалы и позволяет отобразить их в графическом виде.

Установка:
1. подключить репозиторий epel  (wget -c http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm && rpm -Uvh epel-release-5*.rpm)
2. yum install cacti

Настройка БД:
mysql -u root -p
> create database cacti;
 > grant all on cacti.* to cacti@'localhost' identified by 'SUPER_PASSWORD';
> flush privileges;
> quit
mysql -u root -p cacti < cacti.sql


Поменять параметры в /etc/cacti/db.php (логин/пароль/БД).

Зайти на web-интерфейс (admin/admin по умолчанию).
 
Дополнительные настройки (см. литературу)

Возможные проблемы:
 1. невозможно через web-интерфейс добавить определенные хосты для определенных пользователей.
Решение (workaround): воспользоваться cli-скриптом add_perms.php
cd /CACTI_DIR/cli
php -q add_perms.php


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

[root@odin cli]# php -q add_graphs.php --list-hosts
Known Hosts: (id, hostname, template, description)
2 172.xx.0.1 5 C2800-Nikolaev 
3 172.xx.0.1 5 C2800-Poltava
*** 

[root@odin cli]# php -q add_perms.php --list-users
Known Users:
id username full_name
1 admin Administrator
3 guest Guest Account
4 jack Jack Skyworker
5 support Technical Support

Собственно, сопоставляем id-хоста с id-пользователя:
*********************
[root@odin cli]# php -q add_perms.php --item-type=host --user-id=10 --item-id=7
[root@odin cli]# php -q add_perms.php --item-type=host --user-id=10 --item-id=19
[root@odin cli]# php -q add_perms.php --item-type=host --user-id=11 --item-id=8
[root@odin cli]# php -q add_perms.php --item-type=host --user-id=11 --item-id=17
[root@odin cli]# php -q add_perms.php --item-type=host --user-id=12 --item-id=9
*********************


Литература:
http://redhat-club.org/2011/настройка-cacti-в-centos-rhel-fedora
http://www.cacti.net/downloads/docs/html/
http://forums.cacti.net/about26451.html
http://forums.cacti.net/about7683.html

Авторизация пользователей squid в домене с доступом к ресурсам по группам

Возникла однажды интересная задача — организация прокси-сервера для филиала. С тех пор утекло много времени и пришла пора вспомнить как и что делалось. Для начала почитайте дополнительную небольшое введение о том зачем нужен прокси-сервер, как браузер обменивается информацией с прокси-сервером. Данная статья является скорее заметкой, нежели полноценной статьей, потому предоставляется AS IS (как есть) и вся ответственность за ее использование ложится на Ваши плечи (т.е. все нижеследующее не отменяет чтения вами документации и прочей полезной литературы). Данная заметка рассчитана на RHEL5.

Зачем нужен прокси-сервер?
Для того, чтоб не выпускать весь http/https/FTP/gopher трафик пользователей в Интернет, а, используя единую точку выхода, фильтровать какие запросы выпускать, а какие — нет. Для удобства управления предусмотрена возможность управления доступов в Интернет посредством нахождения пользователя в определённых группах Active Directory.
Как настроить клиенткое ПО для использования прокси-сервера?
Подавляющее большинство программ, требующих выхода в Интернет, имею в своих настройках возможность указать прокси-сервер, порт и, опционально, параметры авторизации.
Как это работает?
Рассмотрим пример. Пользователь открывает браузер и вводит в адресной строке domain.ru. Не буду рассказывать что происходит действие прежде, чем браузер отправит запрос http-серверу, это несущественно для примера. Итак, браузер сформировал запрос и отправил его http-серверу напрямую, если не указаны настройки прокси-сервера, но, поскольку, выход в Интернет скорее всего открыт только для прокси-сервера, то пользователь ожидаемую страничку так и не увидит. Указывая в настройках браузера параметры прокси-сервера, мы заставляем браузер отправлять весь http-трафик прокси-серверу.
Что происходит на стороне прокси-сервера?
Если squid получает запрос, который попадает под ACL proxy_auth (proxy_auth_regex, external с %LOGIN) в http_access, то squid ищет заголовок Authorization и извлекает из него имя и пароль (base64, открытым текстом); если заголовок не обнаружен, то браузеру возвращается сообщение об ошибке 407 (Proxy Authentication Required) со списком допустимых схем аутентификации, браузер запрашивает у пользователя имя и пароль для определённой области действия (realm); полученные от пользователя имя и пароль браузер передаёт в последующих запросах к squid в заголовке Authorization; для аутентификации используется внешняя программа, которая получает на стандартный ввод имя и пароль и должна ответить "OK" или "ERR".
Squid может предлагать клиенту несколько схем аутентификации (заголовок Proxy-Authenticate:), а браузер должен выбрать из них самую безопасную из понимаемых им; на практике, браузеры обычно выбирают самую первую.
Далее, откуда брать объект определяется так (в упрощенном виде): послать ICP/HTCP/multicast запросы ко всем подходящим соседям; подождать определенное время; загрузить с первого соседа, пославшего HIT; иначе загрузить с первого отца, ответившего MISS; иначе загрузить с первоисточника, а затем передать пользователю.

Итак, приступим. Нам понадобятся следующие пакеты: squid, ntp, samba-common, krb5-workstation, krb5-libs.
squid — собственно пакет с прокси-сервером
ntp — сервер времени, необходим для синхронизации времени с контроллером домена
samba-common — пакет с демоном winbind, собственно для авторизации пользователей в AD
krb5-* — библиотеки для работы с kerberos

Устанавливаем пакеты при помощи yum или rpm (что кому удобней, что у кого настроено)

1. Установить пакет ntp и добавить его в автозапуск
    1.yum -y install ntp
    2./sbin/chkconfig ntpd on
2. Настроить /etc/ntp.conf (ниже перечислены ключевые моменты)
    1.server IP_DOMAIN_CONTROLLER
    2.остальные директивы server закомментировать
3. Синхронизировать время с контроллером домена
    1./usr/sbin/ntpdate IP_DC
4. Запустить сервер ntp
    1./sbin/service ntpd restart
5. Установить пакет samba-common
    1.yum -y install samba-common
6.Настроить /etc/samba/smb.conf (ниже перечислены ключевые моменты)
   1.workgroup = BRANCH
   2.security = ADS
   3.password server = IP_DOMAIN_CONTROLLER
   4.realm = BRANCH.OFFICE.COM
   5.netbios name = GW-BRANCH
   6.idmap backend = rid:BRANCH=10000 – 20000
   7.winbind uid = 10000 – 20000
   8.winbind gid = 10000 – 20000
   9.winbind use default domain = yes
   10.winbind enum users = yes
   11.winbind enum groups = yes
   12.local master = no
   13.os level = 0
   14.preferred master = no
   15.wins support = no
   16.load printers = no
   17.где BRANCH – netbios имя вашего филиала, например, ODESSA, branch – то же самое, но с маленькой буквы
7. Установить пакеты krb5-libs и krb5-workstation
    1.yum -y install krb5-libs krb5-workstation

8. Настроить /etc/krb5.conf (ниже перечислены ключевые моменты)
   1.[libdefaults]
   2. default_realm = BRANCH.OFFICE.COM
   3.[realms]
   4. BRANCH.OFFICE.COM = {
   5. kdc = IP_DOMAIN_CONTROLLER:88
   6. admin_server = IP_DOMAIN_CONTROLLER:749
   7. default_domain = branch.office.com
   8.[domain_realm]
   9. .branch.office.com = BRANCH.OFFICE.COM
  10. branch.office.com = BRANCH.OFFICE.COM
9. Настроить /etc/hosts (добавить запись о нашем хосте)
   1.IP_THIS_SERVER gw-branch.office.com
10. Настроить /etc/resolv.conf (добавить записи)
   1.nameserver 127.0.0.1 (или IP_DOMAIN_CONTROLLER)
   2.search branch.office.com office.com
11. Добавить в ДНС-сервер на контроллере домена запись о нашем сервере
12. Завести в AD группы gl-Inet-extra, gl-Inet-power, gl-Inet-users и добавить в них соответствующих пользователей
13. Получить билет kerberos
   1.kinit Administrator или kinit root
14. Ввести компьютер в домен (в случае ошибок проверить ДНС-имена)
   1.net ads join -U Administrator
15. Запустить winbind и добавить его в автозапуск
   1.Проверить, чтоб пользователь от имени которого запускается squid имел права на чтение winbind-сокета в папке winbindd_privileged ls -l /var/cache/samba/ или /var/lib/samba
   2.chgrp squid /var/cache/samba/winbindd_privileged
   3./sbin/service winbind start
   4./sbin/chkconfig winbind on
16. Проверить вывод wbinfo -t (-p, -u, -g, --get-auth-user) на предмет ошибок
17. sudo wbinfo --set-auth-user=BRANCH\root%ПАРОЛЬ
18. Проверить вывод ntlm_auth –helper-protocol=squid-2.5-basic на предмет ошибок
19. Проверить вывод wbinfo_group.pl на предмет ошибок
   1.echo root gl-inet-extra | /usr/lib64/squid/wbinfo_group.pl
   2.правильные ответы — ERR, OK. Если выдает Couldn't convert sid to gid или подобное, то проблема в настройке samba.
20. Установить пакет squid    1.yum -y install squid
21. Настроить /etc/squid/squid.conf (ниже перечислены ключевые моменты)  
    1.auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
    2.auth_param ntlm children 30
    3.auth_param ntlm keep_alive off
    4.auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
    5.auth_param basic realm Squid proxy-caching web server
    6.auth_param basic children 5
    7.auth_param basic credentialsttl 2 hours
    8.external_acl_type ad_group %LOGIN путь_к_wbinfo_group.pl
    9.acl extra external ad_group gl-Inet-extra
    10.acl power external ad_group gl-Inet-power
    11.acl users external ad_group gl-Inet-users
    12.http_access allow MYDOMAIN allow_hosts
    13.http_access allow extra all
    14.http_access deny all
    15.pid_filename /var/run/squid/squid.pid. Описание смотреть ниже в комментариях к рабочему конфигу squid.conf, а здесь только команды.
         1.отредактировать /etc/init.d/squid
         2.mkdir -p /var/run/squid/
         3.chown squid:squid /var/run/squid/
         4.cd /etc/squid/ && rm -f errors
         5.cd /etc/squid/ && ln -s /usr/share/squid/errors/Russian-1251 errors
22. Перезапустить squid
    1./sbin/service squid restart (reload)
23. В домене настроить групповую политику для IE. (regsvr32.exe ieaksie.dll)
24. Проверить работу всей системы

Листинг /etc/squid/squid.conf с некоторыми комментариями, для Squid3. За более подробным описанием директив следует обратиться к файлу squid.conf.default. Полностью приводить конфиг не вижу смысла ибо он очень большой и большинство директив имеют значения по умолчанию.

# адрес, на котором слушать запросы клиентов
http_port 172.xx.1.254:3128

******

# по умолчанию, однажды захваченная, но ныне не используемая память не отдается обратно # в систему, off позволяет освобождать ее
memory_pools on
memory_pools_limit 256 MB

# Директория для кэша, числа - размер кэша в Mb, число директорий первого уровня, число директорий второго уровня в каждой директории первого.
cache_dir ufs /var/spool/squid 4500 32 256
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log

******

# где хранить pid-процесса. ОБЯЗАТЕЛЬНО должен совпадать с тем, что указано в /etc/init.d/squid потому как не сможете нормально стартовать/остановить squid. Если необходимо — внесите правки либо в squid.conf, либо создайте папку /var/run/squid и дайте пользователю, под которым запускается squid права на запись в данную папку.
pid_filename /var/run/squid/squid.pid

 ****

dns_nameservers 127.0.0.1

auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 35
auth_param ntlm keep_alive off

auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
# сколько процессов запускать
auth_param basic children 10
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off

******

# ----------------------------------------------------------------
# DEFAULT CONFIG
# ----------------------------------------------------------------

# закомментировать для Squid3, для второй версии раскомментировать
#acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl webserver src 172.xx.1.254/32
acl SSL_ports port 443 563
acl Safe_ports port 80 21 443 563 70 210 1025-65535
acl CONNECT method CONNECT

acl MYDOMAIN proxy_auth REQUIRED

# внешняя ACL для разруливания по группам
external_acl_type ad_group ttl=120 %LOGIN /usr/lib64/squid/wbinfo_group.pl

acl extra external ad_group gl-Inet-extra
acl power external ad_group gl-Inet-power
acl users external ad_group gl-Inet-users

# список хостов, доступных пользователям группы gl-inet-users
acl allow_tender dstdom_regex "/etc/squid/acl/allow_tender"
# список запрещенных хостов
acl deny_hosts dstdom_regex "/etc/squid/acl/deny_hosts"
# список хостов, доступных без регистрации
acl allow_hosts dstdom_regex "/etc/squid/acl/allow_hosts"
acl no_delay dst "/etc/squid/acl/no_delay_hosts"
acl worktime time MTWHFS 8:00-19:30

# Default configuration

# пропускаем sqstat
http_access allow manager webserver
http_access deny manager

# Закрываем доступ, кроме как к разрешенным портам
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

# Разрешаем всем доступные сайты, этим же правилом срубаются все неавторизованные
http_access allow MYDOMAIN allow_hosts
# разрешаем доступ группе gl-inet-extra на все сайты
http_access allow extra all
# разрешаем доступ группе gl-inet-power на все сайты, кроме deny_hosts
http_access allow power !deny_hosts
# разрешаем доступ группе gl-inet-users на все разрешенные сайты allow_tender
http_access allow users allow_tender
# запрещаем доступ всем, кто не попал по вышестоящие правила
http_access deny all

miss_access allow localhost
miss_access allow MYDOMAIN allow_hosts worktime
miss_access allow extra all
miss_access allow power !deny_hosts worktime
miss_access allow users allow_tender worktime
miss_access deny all

 *****


# для того, чтоб выводились сообщения на русском сделать в директории /etc/squid
# ln -s /usr/share/squid/errors/Russian-1251 errors
# предварительно, удалив неправильную ссылку errors
error_directory /etc/squid/errors

 *****

Листинг файла /etc/hosts:
127.0.0.1 gw.BRANCH.office.com gw localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
172.xx.1.254 gw-BRANCH.BRANCH.office.com

Листинг файла /etc/resolv.conf:
nameserver 127.0.0.1
nameserver 172.xx.1.2
search BRANCH.office.com office.com

Листинг файла /etc/krb5.conf
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
  default_realm = BRANCH.OFFICE.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
forwardable = yes

[realms]
  BRANCH.OFFICE.COM = {
  kdc = 172.xx.1.2:88
  admin_server = 172.xx.1.2:749
  default_domain = branch.office.com
}

[domain_realm]
  .branch.office.com = BRANCH.OFFICE.COM
  branch.office.com = BRANCH.OFFICE.COM

[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}

Листинг /etc/samba/smb.conf:
[global]
  workgroup = BRANCH
  server string = BRANCH GW-Server
  netbios name = GW-BRANCH
  hosts allow = 127. 172.xx.

log file = /var/log/samba/%m.log
max log size = 50
security = ADS
password server = 172.xx.1.2
realm = BRANCH.OFFICE.COM

winbind uid = 10000 — 20000
winbind gid = 10000 — 20000
idmap backend = rid:BRANCH=10000 – 20000
winbind use default domain = yes
winbind enum users = yes
winbind refresh tickets = yes
winbind enum groups = yes
domain master = no
domain logons = no
local master = no
os level = 0
preferred master = no
load printers = no

Tips

Как узнать есть ли пользователь в группе, которой разрешен доступ в Интернет?

1.Залогиниться на сервере, где работает Squid
2.echo USER_NAME gl-inet-GROUPNAME | ПУТЬ_К_wbinfo_group.pl
где,
USER_NAME — логин пользователя в Active Directory, например, vasya
GROUPNAME — имя группы, например, gl-inet-users
ПУТЬ_К_wbinfo_group.pl — полный путь к файлу wbinfo_group.pl, например, /usr/lib64/squid/wbinfo_group.pl
Как открыть/закрыть пользователям доступ к определенным сайтам? Получив служебную записку от руководства на предоставление/закрытие доступа пользователям к определенным сайтам, нужно отредактировать списки с сайтами, которые находятся в файлах allow_hosts (сайты доступные без авторизации), allow_tender (сайты доступные авторизовавшимся пользователям из группы gl-inet-users), deny_hosts (сайты запрещенные авторизовавшимся пользователям из группы gl-inet-power)


1.Залогиниться на сервере, где работает Squid
2.cd /etc/squid/acl
3.Отредактировать указанные выше файлы по ситуации
4.Заставить squid перечитать свой конфигурационный файл — sudo /sbin/service squid reload


Проблема с пользователями Windows 7
Если машина с Windows 7 одна
1.проверить на win7 в реестре данный параметр LmCompatibilityLevel=0 (REG_DWORD), если его нет - создать
2.Перезагрузить машину

Если машин с Windows 7 сотни/тысячи (данный совет не всегда срабатывает)
1.Запустить редактор групповой политики
2.Создать/редактировать определенную политику (например, SquidWin7Auth)
3.Computer config (Конфигурация компьютера)->windows setting (Конфигурация Windows)->local policies (Локальные политики)->security option (Параметры безопасности)->Network security: LAN Manager authentication level (Безопасность сети: уровень проверки подлинности LAN Manager)
4.Set LM & NTLM — Use NTLMv2 session if negotited (Отправлять LM & NTLM — использовать сеансовую безопасность)


Активация Win7 вылетает с ошибкой 0x8004FE33 или подобной

Решение: Поскольку доступ в Интернет имеют ТОЛЬКО авторизованные пользователи, а программа активации не содержит возможности ввода учетных данных, необходимо в конфигурационный файл squid.conf внести изменения для разрешения доступа к домену microsoft.com и его поддоменам без требования логина/пароля.

Список сайтов необходимых для активации Win7:

http://go.microsoft.com/*
https://sls.microsoft.com/*
https://sls.microsoft.com:443
http://crl.microsoft.com/pki/crl/products/MicrosoftRootAuthority.crl
http://crl.microsoft.com/pki/crl/products/MicrosoftProductSecureCommunications.crl
http://www.microsoft.com/pki/crl/products/MicrosoftProductSecureCommunications.crl
http://crl.microsoft.com/pki/crl/products/MicrosoftProductSecureServer.crl
http://www.microsoft.com/pki/crl/products/MicrosoftProductSecureServer.crl


1.Залогиниться на сервере, где работает Squid
2.cd /etc/squid/
3.Отредактировать squid.conf
4. Внести в список контроля доступа acl msoft dstdomain .microsoft.com
5. Внести строку http_access allow all msoft ДО http_access allow MYDOMAIN allow_hosts
6. Внести строку miss_access allow all msoft ДО miss_access allow MYDOMAIN allow_hosts
7. Сохранить изменения и выйти
8. Заставить squid перечитать свой конфигурационный файл — sudo /sbin/service squid reload


Список литературы:

http://www.lissyara.su/articles/freebsd/programms/squid+ad/
http://bog.pp.ru/work/squid.html
http://linuxnews.ru/docs/squid.html
http://www.opennet.ru/base/net/squid_inst.txt.html

пятница, 20 мая 2011 г.

Ошибка при старте системы: piix4_smbus 0000.00.07.0: SMBus base address uninitialized - upgrade bios or ...

Обновил RHEL, установленную в VirtualBox, с версии 6.0 до 6.1, при старте вылезла такая ошибка: "piix4_smbus 0000.00.07.0: SMBus base address uninitialized - upgrade bios or use force_addr=0xaddr"
Обновление сначала делаю на тестовых и виртуальных машинах, чтоб не удивиться каким-то мелким нестыковкам при обновлении production-систем.

Итак, после загрузки и логина в систему:
# lsmod | grep piix
i2c_piix4 11098 0

**** 
Что за модуль i2c_piix4 и для чего он читаем здесь
http://www.kernel.org/doc/Documentation/i2c/busses/i2c-piix4

# lspci -v | grep -i piix4

Чтобы система не подгружала данный драйвер, добавляем его в blacklist список
echo "blacklist i2c_piix4" >> /etc/modprobe.d/blacklist.conf
reboot

Литература:
man modprobe.conf 
http://www.kernel.org/doc/Documentation/i2c/busses/i2c-piix4 

четверг, 28 апреля 2011 г.

Развертывание RHEL6 на Dell R310, установка OMSA.

В прошлом посте я рассказывал как установить обновления для Dell R200 из операционной системы. С тех пор прошло много времени. Недавно фирма купила несколько серверов Dell R310 для замены текущих интернет-серверов на филиалах. Я решил заодно обновить свои знания о настройке серверов Dell PowerEdge.
Развертывать будет с помощью Lifecycle Controller. Это небольшая прошивка, упрощающая установку обновлений, развертывание OS, содержащая несколько утилит для диагностики платформы ПЕРЕД загрузкой OS с помощью:
• Unified Server Configurator (USC)
• Remote Services, WSMan (для удаленного доступа)


У меня при обновлении с помощью NFS на одном из серверов частично потерял функциональность Dell Lifecycle Controller. Т.е. часть функций работает, часть вылетает с ошибкой, сменился фон интерфейса на серый. В общем, нужно переставлять. Скачиваем Dell Lifecycle Controller Repair Package, который восстанавливает встроенный утилиты в случае отказа оборудования или повреждения flash-памяти при обновлении. Инструкция есть на сайте dell.com, но здесь приведу небольшую выдержку:
1. Скачать файл (.usc)
2. Зайти в iDRAC сервера с помощью web-интерфейса.
3. Перейти на вкладку "Remote Access".
4. Перейти на вкладку "Update", затем выбрать скачанный ранее образ.
5. Нажать "Next", и подождать пока файл скачается и обновится на flash-памяти.
6. Перезагрузить систему, нажать при старте F10 и войти в Unified Server Configurator.
7. Выбрать "Launch Platform Update" для завершения установки всех рекомендованных обновлений.

Итак, включили сервер, нажимаем F10 при загрузке, попадаем в USC. Нажимаем USC Settings, чтоб задать параметры сети. Затем выбираем Platform Update, чтоб обновить прошивки. После нескольких перезагрузок получаем (в идеале) систему с последними прошивками и можно приступать к развертыванию ОС. Для этого используем пункт OS Deployment, сначала предложат сконфигурировать RAID-массив. Создаем RAID1 из имеющихся в наличии дисков. Далее выбираем какую ОС нужно развернуть и на соот. Этапе подставляем в DVD нужный образ.

Итак, ОС установлена. Мне нужно получать информацию о состоянии сервера с помощью SNMP (всевозможные показания датчиков температур, состояние кулеров, источников питания и т.п.). Немного теории. На управляемой системе (сервере) находится SNMP-агент, состоящий из одного главного SNMP-агента и нескольких дополнительных. Дополнительные агенты нужны для расширения функционала, добавления новых MIB-модулей без перестройки всего SNMP-агента. Главный SNMP-агент получает ВСЕ SNMP-запросы от управляющих станций (компьютеры администраторов, сервера с nagios и т.п.) и полылает обратно SNMP-ответы. А вот взаимодействие между главным и дополнительными агентами происходит на языке запросов отличном от SNMP. Для поддерживаемых ОС главный SNMP-агент поставляется с ОС. Для RHEL 6 это пакет net-snmp.

Установка net-snmp
yum install -y net-snmp

Если SNMP-сервисы доступны, то можно переходить к установке OpenManage Server Administrator, который установит дополнительные агенты для SNMP.
wget -q -O - http://linux.dell.com/repo/hardware/latest/bootstrap.cgi | bash

Данная команда скачивает и выполняет скрипт bootstrap.cgi, который в зависимости от дистрибутива (CENTOS/SCIENTIFIC/FEDORA/REDHAT/ORACLE/SLES) устанавливает дополнительный источник пакетов из репозитория Dell, а также GPG-ключи.
Назначение репозитория Dell в предоставлении официального ПО от Dell, включающего:
• OpenManage Server Administrator
• драйвера для различных поддерживаемых дистрибутивов
• обновления для прошивок и BIOS


Возможна установка следующих групп пакетов:
srvadmin-all: Install all OMSA components
srvadmin-base: Install only base OMSA, no web server
srvadmin-webserver: Install Web Interface
srvadmin-storageservices: Install RAID Management
srvadmin-rac4: Install components to manage the Dell Remote Access Card 4
srvadmin-rac5: Install components to manage the Dell Remote Access Card 5


Установка srvadmin-base
yum -y install srvadmin-base

Объем установленных пакетов составляет
du -sh /opt/dell/
64M /opt/dell/


Лог-файл установки /opt/dell/srvadmin/var/lib/openmanage/log/install.log

Если Server Administrator увидит SNMP-конфигурацию по умолчанию при установке, то сделает следующие изменения в /etc/snmp/snmpd.conf
1. Добавит view на все поддерево MIB
view all included .1

2. Далее изменит доступ по умолчанию только на чтения для всего MIB поддерева к public community, а не только для systemview.
access notConfigGroup "" any noauth exact all none none

3. Server Administrator SNMP взаимодействует с SNMP-агентом используя SNMP Multiplexing (SMUX) протокол. Когда Server Administrator SNMP соединяется с SNMP-агентом, он посылает SNMP-агенту некий ID, который идентифицирует его как SMUX peer. Для указания этого ID, в конфигурационный файл /etc/snmp/snmpd.conf Server Administrator добавляет во время установки
smuxpeer .1.3.6.1.4.1.674.10892.1

Включить запуск при старте
chkconfig --list
***
dataeng 0:выкл 1:выкл 2:выкл 3:вкл 4:вкл 5:вкл 6:выкл
dsm_om_shrsvc 0:выкл 1:выкл 2:выкл 3:вкл 4:вкл 5:вкл 6:выкл
snmpd 0:выкл 1:выкл 2:выкл 3:вкл 4:вкл 5:вкл 6:выкл
***


Важные скрипты запуска 
# Server Administrator Control Script
/etc/init.d/dsm_om_shrsvc
# Systems Management Data Engine init script
/etc/init.d/dataeng


Запуск сервисов
service dsm_om_shrsvc start
service snmpd restart
/opt/dell/srvadmin/sbin/srvadmin-services.sh status
/opt/dell/srvadmin/sbin/srvadmin-services.sh start


Проверка запущены ли демоны
ps aux | grep snmp
root 5308 0.0 0.2 206708 4436 ? S 15:22 0:00 /usr/sbin/snmpd -LS0-6d -Lf /dev/null -p /var/run/snmpd.pid


ps aux |grep dsm
root 22743 0.0 0.2 435608 4088 ? Ssl 13:15 0:01 /opt/dell/srvadmin/sbin/dsm_sa_datamgrd
root 22826 0.0 0.1 270764 2436 ? Ssl 13:15 0:00 /opt/dell/srvadmin/sbin/dsm_sa_eventmgrd
root 22885 0.0 0.1 348616 3096 ? Ssl 13:15 0:00 /opt/dell/srvadmin/sbin/dsm_sa_snmpd
root 22956 0.0 0.3 557640 6144 ? Ssl 13:15 0:00 /opt/dell/srvadmin/sbin/dsm_om_shrsv


snmpwalk -v1 -c public 127.0.0.1 .1.3.6.1.4.1.674
SNMPv2-SMI::enterprises.674.10892.1.1.1.0 = INTEGER: 5
SNMPv2-SMI::enterprises.674.10892.1.1.2.0 = INTEGER: 9
SNMPv2-SMI::enterprises.674.10892.1.1.3.0 = INTEGER: 5
SNMPv2-SMI::enterprises.674.10892.1.100.1.0 = STRING: "Server Administrator"
SNMPv2-SMI::enterprises.674.10892.1.100.2.0 = STRING: "5.9.5"
***

Литература:
http://linux.dell.com/wiki/index.php/Repository/OMSA
http://support.dell.com/support/systemsinfo/documentation.aspx

четверг, 10 марта 2011 г.

Установка расширения ffmpeg-php на rhel 5.5.

Установка репозитариев:
cat /etc/yum.repos.d/local.repo
[Local]
name=local
baseurl=file:///mnt/Server
enabled=1
gpgcheck=0

cat /etc/yum.repos.d/dag.repo
[Dag]
name=dag
baseurl=http://apt.sw.be/redhat/el5/en/i386/dag
enabled=1
gpgcheck=0

Скачиваем дополнительные репозитории epel и remi:
wget -c http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
wget -c http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
rpm -Uvh remi-release-5*.rpm epel-release-5*.rpm

Установка необходимых пакетов:
yum -y --enablerepo=remi,epel install mysql-server php php-devel
yum -y --enablerepo=remi,epel install php-xml (модуль dom.so)
yum -y --enablerepo=remi,epel install php-mbstring php-mcrypt php-intl php-gd
yum -y install gcc httpd re2c
yum -y install ffmpeg ffmpeg-devel libvorbis-devel

Скачиваем сам пакет ffmpeg-php:
wget -c http://switch.dl.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2

tar xjf ffmpeg-php-0.6.0.tbz2

cd ffmpeg-php-0.6.0
phpize
./configure --enable-static --disable-debug
make
вылазит ошибка «error: PIX_FMT_RGBA32 undeclared»
в файле ffmpeg_frame.c меняем PIX_FMT_RGBA32 на PIX_FMT_RGB32

cp modules/ffmpeg.so /usr/lib/php/modules

echo "extension=ffmpeg.so" > /etc/php.d/ffmpeg.ini

Если в логах вылазит предупреждение «Persistent movies have been disabled in php.ini», то:
cat << EOF >> /etc/php.ini

[ffmpeg]
ffmpeg.allow_persistent=on
EOF

Также выставить date = Europe/Kiev или какой у вас часовой пояс.

service httpd restart
chkconfig httpd on

Проверка какие модули установлены и их параметры:
cat << EOF >> /var/www/html/index.php
<?php
phpinfo();
?>
EOF

Тестирование ffmpeg (естественно файл предварительно скопировать на сервер):

mkdir -p /var/www/html/tt
chown apache:apache /var/www/html/tt
cp test.avi /var/www/html/tt

cat /var/www/html/tt/test.php

<?php
$extension = "ffmpeg";
$extension_soname = $extension . "." . PHP_SHLIB_SUFFIX;
$extension_fullname = PHP_EXTENSION_DIR . "/" . $extension_soname;

if(!extension_loaded($extension)) {
dl($extension_soname) or die("Can't load extension $extension_fullname\n");
}

$fil='/var/www/html/tt/test.avi';
$frame = 6;
$time = time ();
$movie = new ffmpeg_movie($fil, 1);

$duration = $movie->getDuration();

if ( $duration > 6 ){
$minutes = floor($movie -> getDuration ()/ 60);
$seconds = $movie -> getDuration ()% 60 ;
}

echo 'File: <font color="red">' . $_SERVER [ 'DOCUMENT_ROOT' ] .'/tt/test.avi</font> longs ' . $duration . ' seconds<br />' ;

$img = $_SERVER [ 'DOCUMENT_ROOT' ]. '/tt/' . $time . '_' . $frame . '.jpg' ;

$ff_frame = $movie -> getFrame ( $frame );
if ( $ff_frame ){
$gd_image = $ff_frame -> toGDImage ();
if ( $gd_image ) {
imagepng ( $gd_image , $img );
imagedestroy ( $gd_image );
}
}

echo $minutes . ' min ' . $seconds . ' sec.<br />' ;

echo '<img src="' . $time . '_' . $frame . '.jpg" />' ;

$franecount = $movie->getFrameCount();
$framerate = $movie->getFrameRate();
$filename = $movie->getFilename();
$comment = $movie->getComment();

echo "<br /><br />number of frames in a movie or audio file.".$franecount."<br />";
echo "frame rate of a movie in fps".$framerate."<br />";
echo "path and name of the movie file or audio file.".$filename."<br />";
echo "comment field from the movie or audio file.".$comment."<br />";
?>
 


Заходим на http://YOUR_SERVER_IP/index.php и смотрим страницу с модулями, ищем ffmpeg, если есть смотрим http://YOUR_SERVER_IP/tt/test.php.
Если что-то не получилось посмотрите сначала в файл ошибок вашего web-сервера.

Литература:

http://linuxhostingsupport.net/blog/error-pix_fmt_rgba32-undeclared
http://itblog.su/php-ffmpeg-ustanovka-na-centos-5.html

пятница, 18 февраля 2011 г.

Backup конфигов интернет-сервера. Update 21.02.2011

Итак, приступим. Идея подсмотрена в /etc/init.d/named RHEL6. Конфигурационные файлы/директории монтируются в определенную папку с помощью mount --bind, затем делается архив с сохранением прав текущих владельцев. Скрипт хранится в /home/jack/scripts/backup.
Предварительный этап(ы):
1. Изменение пароля для пользователя root, либо добавление пользователя с правами экспорта нужных таблиц mysql (права LOCK, UNLOCK, SELECT и др.)
mysql> use mysql;
mysql> update user set password=password('PASSWORD') where user='root';
mysql> flush privileges;
mysql> quit

2. Сделать скрипт испоняемым
chmod +x backup.sh

3. Добавить пользователя на сервер
groupadd backups
useradd -g backups -s /bin/sh -d /var/backups backups

4. Сгенерировать rsa-ключ и добавить его на сервер, куда будут складываться бэкапы
ssh-keygen -q
scp -P 1919 /root/.ssh/id_rsa.pub backups@SERVER:/var/backups
На сервере SERVER
cat id_rsa.pub >> /var/backups/.ssh/authorized_hosts

Все, теперь на сервер SERVER можно заходить без ввода пароля.

Теперь сам скрипт. Ничего сложного. Переменные, функции. Я разделил скрипт на клиентскую и основную части. Краткий обзор (клиент):
1. Запускает скрипт по крону, подставляя свои переменные
2. Копирует основной скрипт с сервера в локальную папку
3. Подключает и выполняет основной скрипт
4. Удаляет из локальной папки скрипт

#!/bin/sh
# Script for backing up configs from server

##############################################
# Variables #
##############################################

PATH=$PATH:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin
export PATH

BRANCH=Donetsk
DOMAIN=domain.tld
PREFIX=MX
SSH_PORT=1919
SSH_DEST=backups@odin:/var/backups/$BRANCH
CORE_SCRIPT=bc.script
MAILTO=root
TEMP1=`pwd`

scp -P $SSH_PORT $SSH_DEST/$CORE_SCRIPT .
if [ $? -ne 0 ] ; then
echo "Can't copy $CORE_SCRIPT from $SSH_DEST. Exiting." | mail -s "Backup problem with $BRANCH-$PREFIX ($DOMAIN)" $MAILTO
exit 1
fi;
if [ -s $TEMP1/$CORE_SCRIPT ]; then
. $TEMP1/$CORE_SCRIPT
else
echo "Can't include $CORE_SCRIPT. It has zero size. Exiting." | mail -s "Backup problem with $BRANCH-$PREFIX ($DOMAIN)" $MAILTO
exit 1;
fi;
rm -f $TEMP1/$CORE_SCRIPT >/dev/null 2>&1
exit 0;

Краткий обзор (основная часть):
1. задать переменные
2. проверить запуск от root или нет
3. создать директории, если их нет в папке $ROOTDIR
4. смонтировать нужные файлы/папки $ROOTDIR_MOUNTS в $ROOTDIR_MOUNTS/папки/файлы для сохранения текущей иерархии
5. дамп таблиц mysql
6. создание архива папки $ROOTDIR
7. размонтирование ранее смонтированных файлов/папок
8. копирование архива и лог-файла на удаленный сервер
9. удаление архива и лог-файла
10. конец скрипта.

DATE=`date +%Y.%m.%d`
DATABASES='exim_db mysql rcubemail'
MYSQL_AUTH=' -u root -pPASSWORD '
MYSQLDUMP_OPTS=' --opt '
USER=admin

ROOTDIR=~/backups
ROOTDIR_MOUNT='/boot/grub/grub.conf /boot/config-* /root/.ssh
/home/jack/scripts /home/jack/.ssh /home/'$USER'/scripts /home/'$USER'/.fetchmailrc
/etc/dovecot/* /etc/dovecot/conf.d/* /etc/exim/* /etc/exim/dkim/* /etc/clamav/*
/etc/cron.d/* /etc/dspam/* /etc/httpd/conf/* /etc/httpd/conf.d/* /etc/free-sa/*
/etc/init.d/* /etc/ld.so.conf.d/* /etc/logrotate.d/* /etc/nagios/* /etc/php.d/*
/etc/pki/tls/certs/*'$DOMAIN'.crt /etc/pki/tls/private/*'$DOMAIN'.key /etc/racoon/* /etc/samba/*
/etc/squid/squid.conf /etc/squid/acl/* /etc/ssh/ssh* /etc/vsftpd/* /etc/yum.repos.d/*
/etc/sysconfig/exim /etc/sysconfig/kernel /etc/sysconfig/keyboard /etc/sysconfig/named
/etc/sysconfig/network /etc/sysconfig/squid /etc/sysconfig/network-scripts/route-*
/etc/sysconfig/network-scripts/ifcfg-* /etc/dovecot* /etc/fstab /etc/group
/etc/gshadow /etc/hosts /etc/inittab /etc/krb5.conf /etc/ld.so.conf /etc/mdadm.conf
/etc/my.cnf /etc/named.* /etc/nsswitch.conf
/etc/ntp.conf /etc/passwd /etc/php.ini /etc/redhat-release /etc/resolv.conf /etc/rndc.key
/etc/rsyslog.conf /etc/syslog.conf /etc/shadow /etc/sudoers /etc/sysctl.conf /etc/yum.conf
/var/named/master/* /var/named/slave/* /var/lib/dspam/group /var/spool/cron/*
/var/named/chroot/var/named/master/* /var/named/chroot/var/named/slave/*'

#echo "ROOTDIR_MOUNT=$ROOTDIR_MOUNT"
#exit 0
LOG=$ROOTDIR/backup-$PREFIX-$BRANCH-$DATE.log

make_dirs()
{
cat << EOF >> $LOG
Current variables:
PATH=$PATH

BRANCH=$BRANCH
PREFIX=$PREFIX
DOMAIN=$DOMAIN
CORE_SCRIPT=$CORE_SCRIPT
SSH_PORT=$SSH_PORT
SSH_DEST=$SSH_DEST
DATE=$DATE
DATABASES=$DATABASES
MYSQL_AUTH=
MYSQLDUMP_OPTS=$MYSQLDUMP_OPTS
USER=$USER

ROOTDIR=$ROOTDIR
ROOTDIR_MOUNT=$ROOTDIR_MOUNT
LOG=$LOG

EOF

echo "Function make_dirs" >> $LOG
echo "##############################" >> $LOG
echo `date` >> $LOG
mkdir -p $ROOTDIR
echo "Created $ROOTDIR";
mkdir -p $ROOTDIR/{etc,home,root,var,boot}
mkdir -p $ROOTDIR/boot/grub
mkdir -p $ROOTDIR/root/.ssh
mkdir -p $ROOTDIR/home/{jack,$USER}
mkdir -p $ROOTDIR/home/jack/scripts
mkdir -p $ROOTDIR/home/jack/.ssh
mkdir -p $ROOTDIR/home/admin/scripts
mkdir -p $ROOTDIR/etc/{clamav,cron.d,dspam,dovecot,exim,free-sa,httpd,init.d,ld.so.conf.d,logrotate.d,nagios,pam.d,php.d,pki,racoon,samba,squid,ssh,sysconfig,vsftpd,yum.repos.d}
mkdir -p $ROOTDIR/etc/exim/dkim
mkdir -p $ROOTDIR/etc/dovecot/conf.d
mkdir -p $ROOTDIR/etc/httpd/{conf,conf.d}
mkdir -p $ROOTDIR/etc/pki/tls
mkdir -p $ROOTDIR/etc/pki/tls/{certs,private}
mkdir -p $ROOTDIR/etc/squid/acl
mkdir -p $ROOTDIR/etc/sysconfig/network-scripts
mkdir -p $ROOTDIR/var/{lib,named,spool}
mkdir -p $ROOTDIR/var/lib/dspam
mkdir -p $ROOTDIR/var/spool/cron
mkdir -p $ROOTDIR/var/named/{etc,var}
mkdir -p $ROOTDIR/var/named/{master,slave,chroot}
mkdir -p $ROOTDIR/var/named/var/named
mkdir -p $ROOTDIR/var/named/var/named/{master,slave}
mkdir -p $ROOTDIR/var/named/chroot/var
mkdir -p $ROOTDIR/var/named/chroot/var/named
mkdir -p $ROOTDIR/var/named/chroot/var/named/{master,slave}
echo "Created all required directories."; >> $LOG
echo "Created all required directories."
echo "##############################" >> $LOG
}

mysql_backup()
{
echo "Function mysql_backup" >> $LOG
echo "##############################" >> $LOG
echo `date` >> $LOG
for i in $DATABASES; do
echo "Backing up $i database" >> $LOG
rm -f $ROOTDIR/$BRANCH-$DATE-$i.sql >/dev/null 2>/dev/null
mysqldump $MYSQL_AUTH $MYSQLDUP_OPTS $i > $ROOTDIR/$BRANCH-$DATE-$i.sql
done
echo "##############################" >> $LOG
}

mount_chroot_conf()
{
echo "Function mount_chroot_conf" >> $LOG
echo "##############################" >> $LOG
echo `date` >> $LOG
if [ -n "$ROOTDIR" ]; then
for all in $ROOTDIR_MOUNT; do
# Skip nonexistant files
[ -e "$all" ] || continue

# If mount source is a file
if ! [ -d "$all" ]; then
# mount it only if it is not present in chroot or it is empty
if ! [ -e "$ROOTDIR$all" ] || [ `stat -c'%s' "$ROOTDIR$all"` -eq 0 ]; then
touch "$ROOTDIR$all"
mount -o ro --bind "$all" "$ROOTDIR$all" >/dev/null 2>/dev/null
echo "Mounting $all on $ROOTDIR$all" >> $LOG
fi
else
# Mount source is a directory. Mount it only if directory in chroot is
# empty.
if [ -e "$all" ] && [ `ls -1A $ROOTDIR$all 2>> $LOG| wc -l` -eq 0 ]; then
mount -o ro --bind "$all" "$ROOTDIR$all" >/dev/null 2>/dev/null
echo "Mounting $all on $ROOTDIR$all" >> $LOG
fi
fi
done
fi
echo "##############################" >> $LOG
}

umount_chroot_conf()
{
echo "Function umount_chroot_conf" >> $LOG
echo "##############################" >> $LOG
echo `date` >> $LOG
for all in $ROOTDIR_MOUNT; do
# Check if file is mount target. Do not use /proc/mounts because detecting
# of modified mounted files can fail.
if mount | grep -q '.* on '"$ROOTDIR$all"' .*'; then
umount "$ROOTDIR$all" >/dev/null 2>> $LOG
echo "Umounting $all on $ROOTDIR$all" >> $LOG
# Remove temporary created files
[ -f "$all" ] && rm -f "$ROOTDIR$all"
fi
done
echo "##############################" >> $LOG
}

create_archive()
{
echo "Function create_archive" >> $LOG
echo "##############################" >> $LOG
echo `date` >> $LOG
echo "Enter in $ROOTDIR"
cd $ROOTDIR

echo "Creating fdisk -l file"
echo "Creating fdisk -l file" >> $LOG
rm -f $ROOTDIR/fdisk-l >/dev/null 2>/dev/null
fdisk -l > $ROOTDIR/fdisk-l

echo "Creating df -h file"
echo "Creating df -h file" >> $LOG
rm -f $ROOTDIR/df-h >/dev/null 2>/dev/null
df -h > $ROOTDIR/df-h

rm -f ../backup-$BRANCH-$DATE.tar.bz2 >/dev/null 2>/dev/null
tar --exclude=backup-$PREFIX-$BRANCH-$DATE.log -cjpf ../backup-$PREFIX-$BRANCH-$DATE.tar.bz2 .

cd ..
echo "Leaving $ROOTDIR. pwd=`pwd`"

for i in $DATABASES; do
echo "Deleting $BRANCH-$DATE-$i.sql" >> $LOG
echo "Deleting $BRANCH-$DATE-$i.sql"
rm -f $ROOTDIR/$BRANCH-$DATE-$i.sql >/dev/null 2>/dev/null
done

echo "Deleting other non-required files" >>$LOG
echo "Deleting other non-required files"
rm -f $ROOTDIR/df-h >/dev/null 2>/dev/null
rm -f $ROOTDIR/fdisk-l >/dev/null 2>/dev/null

echo "##############################" >> $LOG
}

echo "Creating $ROOTDIR"
mkdir -p $ROOTDIR
touch $LOG

if [ -e /etc/redhat-release ]
then
echo "Backing up system on `hostname` (Red Hat `uname -m` system)..."
echo "Backing up system on `hostname` (Red Hat `uname -m` system)..." > $LOG
fi

# make sure you're root:
ID=$(id -u)
if [ "$ID" != "0" ]
then
echo "Must run this script as root!"
echo "Must run this script as root!" >> $LOG
exit 1
fi

echo "Making required dirs";
make_dirs

echo "mount_chroot_conf";
mount_chroot_conf;

if [ $BRANCH == "Odessa" ] && [ $PREFIX == "MX" ]; then
DATABASES='exim_db mysql'
else
if [ $BRANCH == "Odessa" ] && [ $PREFIX == "GW" ]; then
DATABASES='rcubemail mysql'
fi;
fi;
echo "Backing up "$DATABASES" databases";
mysql_backup;

echo "Creating archive.";
create_archive;

echo "umount_chroot_conf";
umount_chroot_conf;

echo "pwd = `pwd`"
echo "Copying backup-$PREFIX-$BRANCH-$DATE.tar.bz2 to remote server" >> $LOG
scp -P $SSH_PORT backup-$PREFIX-$BRANCH-$DATE.tar.bz2 $SSH_DEST
scp -P $SSH_PORT $LOG $SSH_DEST

echo "Deleting backup-$PREFIX-$BRANCH-$DATE.tar.bz2" >> $LOG
rm -f backup-$PREFIX-$BRANCH-$DATE.tar.bz2 >/dev/null 2>/dev/null

echo "Deleting $LOG"
rm -f $LOG >/dev/null 2>&1

Добавить в crontab
Перезапустить crond - service crond restart

Здравая критика приветствуется.
Литература: 
/etc/init.d/named в RHEL6