среда, 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
}

Литература:

вторник, 4 октября 2011 г.

Узнать текущие параметры загруженного модуля.

Казалось бы, тривиальная вещь, а многие не сразу могут ответить на этот вопрос. Небольшая заметка для себя.

$ modinfo -p <module_name>
$ cat /sys/module/<module_name>/parameters/<param_name>

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

Webcam Eye 312S в fedora15

Внезапно перестала работать web-камера Eye 312S. Ну, не совсем внезапно - после переноса жесткого диска на новое железо, при этом система определет устройство нормально:
# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 003: ID 0458:706f KYE Systems Corp. (Mouse Systems)
****

Конечно, это недорогая web-камера, но все же хочется заставить ее работать, тем более она раньше работала без проблем. Недолгое гугление объясняет, что дешёвые вебкамеры имеют недостаток - они запрашивают у usb-контроллера максимальную пропускную способность, даже на минимальном разрешении. В результате в логи сыплются ошибки типа:
Oct 1 14:55:17 Zeus kernel: [ 2233.047315] uvcvideo: Failed to query (SET_CUR) UVC control 8 on unit 2: -110 (exp. 2).
Oct 1 15:06:19 Zeus kernel: [ 2893.437166] uvcvideo: Failed to query (SET_CUR) UVC control 10 on unit 2: -32 (exp. 2).
Oct 1 15:06:20 Zeus kernel: [ 2893.735641] uvcvideo: Failed to query (SET_CUR) UVC control 8 on unit 2: -110 (exp. 2).


При запуске skype сыпятся ошибки типа:
"no space left on device".

Временное решение:
rmmod uvcvideo
modprove uvcvideo quirks=2

Постоянное решение:
Чтобы модуль uvcvideo загружался каждый раз с нужным значением параметра - необходимо создать файл /etc/modprobe.d/uvcvideo.conf с таким содержанием:
options uvcvideo quirks=2