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

Изменение размера переменной innodb_log_file_size


При коммите InnoDB записывает данные не сразу в файлы данных, а сначала записывает изменения в innodb_log_file. Дело в том что записать данные непосредственно в таблицу - существенно более дорогая операция, чем записать изменения в бинарный лог. 
Ведение innodb_log_file позволяет проводить оптимизацию i/o: записывать данные большими последовательными кусками, а также более быстрее обслуживать клиентов (клиент быстро сделал коммит, а данные в табличное пространство записываются в фоне). 
При старте после неожиданного отключения MySQL просматривает innodb_log_file, откатывая транзакции, которые не успели завершиться перед крахом и отмечая коммиты, которые успели (и были полностью записаны в innodb_log_file). Чем больше файл, тем больше времени требуется серверу, чтобы просмотреть его.

mysql> show variables like 'innodb_log_file_size';
+---------------------------+--------------+
| Variable_name        | Value       |
+---------------------------+--------------+
| innodb_log_file_size | 5242880 |

По умолчанию в mysql 5.5 размер innodb_log_file_size установлен в 5M. 
Как же определить наиболее оптимальный размер?
Выполните эти команды во время наиболее интенсивной нагрузки вашего сервера:

mysql> pager grep sequence
PAGER SET TO 'grep sequence'
mysql> SHOW engine innodb STATUS\G SELECT sleep(60); SHOW engine innodb STATUS\G

Подробности смотрите в ссылках в конце статьи.

Собственно, процедура. Как оказалось, нельзя просто поменять значение в конфигурационном файле. Нужно, чтобы mysql заново создал эти файлы после остановки. Т.е. нужно остановить сервер, изменить значения директивы innodb_log_file_size, удалить или переместить старые файлы ib_logfile0/ib_logfile1, затем стартовать mysql. Приступим:

1. sudo service mysqld stop

2. Отредактировать /etc/my.cnf, изменив/добавив в секцию [mysqld]
innodb_log_file_size = 64M

3. cd /var/lib/mysql; sudo mv ib_logfile0 ib_logfile0_1; sudo mv ib_logfile1 ib_logfile1_1

4. sudo service mysqld start

5. Проверить лог-файлы, что все стартануло нормально:
*****
InnoDB: Setting log file ./ib_logfile0 size to 64 MB
InnoDB: Database physically writes the file full: wait...
111210 15:18:33  InnoDB: Log file ./ib_logfile1 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile1 size to 64 MB
*****


Литература:
http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar_innodb_log_file_size
http://www.mysqlperformanceblog.com/2011/11/21/should-mysql-update-the-default-innodb_log_file_size/
http://www.mysqlperformanceblog.com/2008/11/21/how-to-calculate-a-good-innodb-log-file-size/
http://greenmice.info/ru/node/92

четверг, 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.

Литература:

понедельник, 21 ноября 2011 г.

phpMyAdmin и Call to undefined function PMA_sanitize


Вылезла в логах веб-сервера вот такая замечательная ошибка. Буквально на ровном месте, ну почти :)
Fatal error: Call to undefined function PMA_sanitize() in /var/www/html/phpMyAdmin-3.X.X-all-languages/libraries/Message.class.php on line 601

Один из быстрых вариантов решения - поскольку я добавил функцию phpversion в список запрещенных функций - убрать из disable_functions.

Проверка, что функция действительно используется:

[user@host phpMyAdmin]$ grep -R phpversion *

libraries/export/latex.php:           .  '% ' . __('PHP Version') . ': ' . phpversion() . $crlf;
libraries/export/xml.php:           .  '- ' . __('PHP Version') . ': ' . phpversion() . $crlf
****


Проверка, что функция в списке запрещенных:
[user@host ~]$ grep disable_func /etc/php.ini
disable_functions = *** phpversion ***


Убираем из списка, рестартуем apache или php-fpm. смотря что у вас используется.
[user@host ~]$ sudo service httpd restart
или
[user@host ~]$ sudo service php-fpm restart

понедельник, 7 ноября 2011 г.

Как уменьшить размер LVM-тома

Собственно, небольшая напоминалка для себя. Руководств на эту тему полным полно в интернете, поэтому приведу только последовательность действий и несколько комментариев.
Итак, задача - уменьшить размер LVM-тома. Сразу скажу, что том НЕ системный. Посмотрим на список групп разделов. vgdb02 - группа разделов, myvol01 - единственный раздел в группе vgdb02. его и будем уменьшать на 45 Гигов.

$ sudo vgs
  VG     #PV #LV #SN Attr   VSize   VFree 
  vg01     1   2   0 wz--n-  59,80g     0 
  vgdb02   1   1   0 wz--n- 300,00g  0

Выполнять действия будем от пользователя root:

[user@vDB02 ~]$ sudo su -
Смотрим куда смонтирован раздел:
[root@vDB02 ~]# mount | grep db
/dev/mapper/vgdb02-myvol01 on /var/lib/mysql type ext4 (rw,nobarrier,commit=15)

Данный раздел используется под БД mysql, поэтому необходимо остановить сервис mysql:

[root@vDB02 ~]# service mysqld stop
Stopping mysqld:                                           [  OK  ]

Отмонтируем раздел под БД, поскольку его надо будет проверить на ошибки с помощью e2fsck. Если вылезут ошибки при отмонтировании - посмотреть lsof или kuser, кто еще использует данный раздел.
[root@vDB02 ~]# umount /var/lib/mysql/

Проверка файловой системы:
[root@vDB02 ~]# e2fsck -f /dev/mapper/vgdb02-myvol01
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/mapper/vgdb02-myvol01: 1531/19660800 files (9.4% non-contiguous), 1527657/78642176 blocks
В первую очередь уменьшаем размер файловой системы! Это важно не перепутать - сначала размер ФС, потом размер раздела. На всякий случай, уменьшаем размер файловой системы чуть больше, нежели размер раздела, потом увеличим до упора.
[root@vDB02 ~]# resize2fs /dev/mapper/vgdb02-myvol01 250G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/vgdb02-myvol01 to 65536000 (4k) blocks.
The filesystem on /dev/mapper/vgdb02-myvol01 is now 65536000 blocks long.
Уменьшаем размер раздела:
[root@vDB02 ~]# lvreduce -L 255G /dev/mapper/vgdb02-myvol01 
  WARNING: Reducing active logical volume to 255.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce myvol01? [y/n]: y
  Reducing logical volume myvol01 to 255.00 GiB
  Logical volume myvol01 successfully resized
Расширяем размер файловой системы до размера раздела:
[root@vDB02 ~]# resize2fs /dev/mapper/vgdb02-myvol01
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/vgdb02-myvol01 to 66846720 (4k) blocks.
The filesystem on /dev/mapper/vgdb02-myvol01 is now 66846720 blocks long.
Монтируем все файловые системы из /etc/fstab, проверяем, что измененный раздел имеет нужный размер:
[root@vDB02 ~]# mount -a
[root@vDB02 ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree 
  vg01     1   2   0 wz--n-  59,80g     0 
  vgdb02   1   1   0 wz--n- 300,00g 45,00g

Запуск сервиса mysql:
[root@vDB02 ~]# service mysqld start

Собственно, все.

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

суббота, 10 сентября 2011 г.

Проброс порта в FortiGate 50B внутрь локальной сети.

Небольшая заметка для себя об особенностях проброса порта в FortiGate 50B внутрь локальной сети. Поднимал у клиента почтовый сервер на базе exim+dovecot с авторизацией в Active Directory. Протестировал изнутри - все работает как надо, нужно публиковать сервис в интернет. В качестве маршрутизатора/фаервола у клиента стоит FortiGate 50B. Собственно, мои действия.
1. Идем в Firewall Objects -> Virtual IP -> Virtual IP,
1.1. Создаем новую запись "vMailSrv",
1.2. Выбираем из списка внешний интерфейс (если несколько интерфейсов внешних)
1.3. В полях External IP Address/Range задаем внешний IP-адрес (в моем случае один IP-адрес два раза нужно указать, поскольку он единственный)
1.4. В полях Mapped IP Address/Range задаем внутренний IP-адрес
1.5. Ставим галочку Port Forwarding
1.6. Protocol - TCP
1.7. External Service Port - 25
1.8. Map to Port - 25
2. Идем в Firewall Objects -> Service -> Predefined и ищем есть уже определенная служба TCP/25 порт (уже есть, называется SMTP). Если требуется нестандартная служба - заходим в Firewall Objects -> Service -> Custom и создаем новую (нужно будет указать имя службы, протокол, порты источника и назначения).
3. Идем в Policy -> Policy, чтобы задать проброс порта с внешнего интерфейса на ранее созданный виртуальный IP.
3.1. Выбираем нужный внешний интерфейс (в моем случае wan1) и правильное направление WAN -> INTERNAL
3.2. Создаем новое правило с именем "SMTP to vMailSrv"
3.3. Source Interface - WAN1
3.4. Source address - all
3.5. Destination Interface - Internal
3.6. Destination Address - выбираем ранее созданный виртуальный IP (vMailSrv, созданный на этапе 1)
3.7. Service - выбираем тип службы (SMTP или другую, созданную на этапе 2)
3.8. Action - ACCEPT, принимать трафик
3.9. Ставим галочку Log Allowed Traffic
3.10. Важный момент: если поставить галочку Enable NAT, то будет производиться "полный" NAT, т.е. и адрес назначения, и адрес источника будут меняться. Галочку НЕ ставить, если серверу важно знать адрес источника, что в моем случае важно, потому как без нее все соединения к серверу идут от IP-адреса FortiGate. Например, в логах exim:

2011-09-10 12:13:30 SMTP connection from fortigate50b.domain.com (mail-gy0-f172.google.com) [172.16.0.254]:47506 I=[172.16.0.126]:25 closed by QUIT

среда, 7 сентября 2011 г.

Ошибка в логах exim при обновлении Clamav.

Собственно, получил ошибку в логах exim. Это произошло после обновления clamav со стороннего  репозитория atrpms.net, верней после удаления старой версии clamav и установки новой.
2011-09-07 11:08:45 1R1DBd-0004GU-3I malware acl condition: clamd: ClamAV returned: /var/spool/exim/scan/1R1DBd-0004GU-3I/1R1DBd-0004GU-3I.eml: lstat() failed: Permission denied. ERROR
Проблема с полномочиями. Clamav не может прочитать файлы в домашней директории exim. Смотрим:
# id exim
uid=93(exim) gid=93(exim) groups=93(exim),12(mail)
# id clamav
uid=497(clamav) gid=494(clamav) groups=494(clamav)
Добавляем clamav в группу exim.
# usermod -G exim clamav
Проверяем:
# id clamav
uid=497(clamav) gid=494(clamav) groups=494(clamav),93(exim)

Перезапускаем exim и clamav:
# service exim restart
# service clamav restart

воскресенье, 28 августа 2011 г.

Ошибка при обновлении mysql.

Вылезла ошибка в общий лог событий службы mysql при обновлении до версии 5.5.14:
[ERROR] Native table 'performance_schema'.'XXXXXX' has the wrong structure
Быстрое решение избавится от такого рода сообщений - запустить mysql_upgrade (если у вас параметры доступа по умолчанию не заданы в my.cnf, то указывайте параметры -u USER -p, иначе вылезет ошибка 1045: Access denied)
и рестартовать mysql командой:
service mysqld restart

Литература:
http://dev.mysql.com/doc/refman/5.5/en/performance-schema-build-configuration.html

четверг, 28 июля 2011 г.

Exim + группы рассылки в Active Directory.

Давно уже сделана была фича (если не ошибаюсь в начале 2010 года), но только сейчас дошли руки написать заметку и включить ее в конфигурационных файлах.
Суть: ищется в AD группа рассылки (grouptype=2) и если в поле «Эл. адрес» значение совпадает с текущим обрабатываемым адресом, то составляется список из почтовых адресов членов данной группы, обрабатываемых отдельно. Применение: организация рассылки сообщений для нескольких пользователей, используя один адрес.

Был добавлен следующий функционал, а именно условие по которому на адреса данной группы могут писать ТОЛЬКО пользователи из определённых подсетей (свои подсети, подсети партнеров и т.п.) ИЛИ если в описании группы AD есть какое-то ключевое слово (public). Т.е., по умолчанию на адрес группы рассылки могут писать только пользователи «серых» бадмовских подсетей, если вам необходимо, чтобы на этот адрес писали извне — просто добавьте в поле «Description (описание)» в Active Directory слово public ИЛИ добавьте подчеть клиента/клиентов в файл /etc/exim/allow_send_to_adgroup.

Итак, данный роутер у меня вставляется ПОСЛЕ роутера dnslookup и ДО роутера ldapuser, что вполне логично. Переменные:
ldap_default_servers = <; 172.ХХ.***:3268 ; 10.1.***:3268
LDAP_AD_BINDDN =${quote_ldap:CN=exim,CN=Users,DC=****,DC=com}
LDAP_AD_PASS =123123
LDAP_AD_BASE =DC=********,DC=com
LDAP_AD_RCPT =user=LDAP_AD_BINDDN \
pass=LDAP_AD_PASS \
ldap:///LDAP_AD_BASE?mail?sub?\
(&\
(|\
(objectclass=user)(objectclass=person)\
)\
(!(userAccountControl:1.2.840.113556.1.4.803:=2))\
(mail=${quote_ldap:$local_part}@${quote_ldap:$domain})\
)


Файл со списками подсетей, которым разрешено писать на групповые адреса (указываются в основном частные "серые" подсети, хотя можно указать и "белые" - выбор за Вами).
cat /etc/exim/allow_send_to_adgroup
#10.0.0.0/8
172.16.0.0/12


Немного о данном роутере. Роутер redirect не имеет опции transport, потому как при срабатывании генерирует один (или ни одного) или несколько адресов. Данные адреса либо возвращаются в начало процесса роутинга, либо передаются указанному роутеру (см. опцию redirect_router). В поле data возвращается список адресов для обработки. Поиск среди групп рассылки, для которых в поле «Эл. адрес» указан заданный адрес для проверки, результат, возвращаемый функцией ldapm — список DN, разделенных запятыми. Для данного списка применяется функция sg, которая заменяет символы ", " (запятая и пробел) на \n. Затем этот список DN\nDN\n подается на вход функции map, которая для каждого DN вытягивает поле mail. Полученный список mail\nmail\n подается на вход функции sg, которая заменяет \n на ", " (запятую и пробел).
Условие, написанное мной намного проще. ЛИБО адрес IP-адрес отправителя является разрешенным (входит в указанные в файле allow_send_to_adgroup диапазоны), ЛИБО для заданного эл. адреса ищется поле описание (description) группы, и если оно совпадает с заданным мной ключевым словом (в данном случае - public), то роутер отправляется искать данные для редиректа (собственно, все те действия, что описаны выше).

adsi_group_check:
driver = redirect
domains = +local_domains
allow_defer
condition = \
${if or{ \
{ eq {${lookup ldap{ \
user=LDAP_AD_BINDDN \
pass=LDAP_AD_PASS \
ldap:///LDAP_AD_BASE?description?sub?\
(&\
(objectClass=group)\
(grouptype=2)\
(mail=${quote_ldap:${local_part}@${domain}})\
)\
}}}{public}}\
{match_ip{$sender_host_address}{iplsearch;/etc/exim/allow_send_to_adgroup}}\
}\
}
data = ${sg{${map {<\n \
${sg{${lookup ldapm { \
user=LDAP_AD_BINDDN \
pass=LDAP_AD_PASS \
ldap:///LDAP_AD_BASE?member?sub?\
(&\
(objectClass=group)\
(grouptype=2)\
(mail=${quote_ldap:${local_part}@${domain}})\
)\
}}}{\N, \N}{\n}}} \
{${lookup ldap{ \
user=LDAP_AD_BINDDN \
pass=LDAP_AD_PASS \
ldap:///${quote_ldapdn:$item}?mail?base?}} \
}}}{\N\n\N}{, } \
}
redirect_router = ldapuser


Проверка:
usr/sbin/exim -bt -bh 85.XX.XX.18 testgroup
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
routing testgroup@**********.ua
calling system_aliases router
system_aliases router declined for testgroup@********.ua
calling userforward router
userforward router declined for testgroup@*******.ua
********.ua in "+local_domains"? yes (matched "+local_domains" - cached)
********.ua in "+local_domains"? yes (matched "+local_domains" - cached)
calling adsi_group_check router
routed by adsi_group_check router
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
routing test@*********.ua
*********.ua in "+local_domains"? yes (matched "+local_domains")
calling ldapuser router
routed by ldapuser router
test@***********.ua
<-- testgroup@***********.ua
router = ldapuser, transport = dovecot_delivery

Может возникнуть вопрос — почему использовалась конструкция -bh 85.XX.XX.18?
Потому как при проверке условия в переменной $sender_host_address должен быть указан адрес отправителя, а в нашем случае он пуст, следовательно, такая проверка не пройдет.

Теперь небольшое howto как сделать группу рассылки:

1. создать в Active Directory группу рассылки

2. назначить ей e-mail адрес, опционально, внести в поле Description слово public.
3. добавить в данную группу нескольких пользователей

4. отправить на данный адрес письмо
5. проверить, что письмо получено всеми членами группы.

Инвентаризация. Где посмотреть в Linux какое железо установлено.

Небольшая памятка для себя.

Как узнать общий объем оперативной памяти:
cat /proc/meminfo | grep Total | head -1

Как узнать какие процессоры установлены и их характеристики:
cat /proc/cpuinfo

Как посмотреть параметры видеокарты
xdpyinfo
glxinfo
xvinfo


Как получить список PCI-устройств и их характеристик:
/sbin/lspci -v

Как не разбирая корпус посмотреть модель материнской платы:
sudo dmidecode

Краткая информация о SCSI-устройствах:
cat /proc/scsi/scsi

Более подробная информация о конкретном SCSI-устройстве:
sudo hdparm -i /dev/sda

среда, 27 июля 2011 г.

Обновление прошивки на Dlink DES-3010FL.

Недавно попала в руки такое устройство — Dlink DES-3010FL. Нужно было настроить разделение vlanов, приходящих от провайдера по 2-3 портам. Т.е. от провайдера приходит trunk (tagged)-порт с несколькими vlan, нужно отдать один untagged-порт для инэт-сервера, один-для cisco-роутера. Вот такая замечательная задача.
Схема подключения:
Распаковываем, подключаем консольный порт к компьютеру. Скачиваем документацию по устройству.
Настраиваем minicom (9600, 8 бит данных, 1 стоповый бит и отсутствие контроля по четности) или putty, кому что нравится.
Далее следует нажать клавишу Enter в полях Имя пользователя (User name) и Пароль (Password), т.к. по умолчанию они не заданы.
Show switch — смотрим информацию об устройстве
Настраиваем ip-адрес — config ipif System ipaddress 10.1.19.126 /8
На ftp-сервере ftp.dlink.ru имеется новая прошивка.
Чтобы обновить установленную версию программного обеспечения для коммутаторов серии DES/DHS-3000, сначала нужно обновить версию PROM до 30xx_prom_1.01.009.had, а только затем обновлять версию текущего программного обеспечения коммутатора. В противном случае коммутатор может работать некорректно.
Скачиваем нужные файлы для прошивки:
wget -с ftp://ftp.dlink.ru/pub/Switch/DES-3000%20Series/Firmware/DES_3000_BootPROM/30xx_prom_1.01.009.had
wget -c ftp://ftp.dlink.ru/pub/Switch/DES-3000%20Series/Firmware/DES3000_V4.20.027.had
Перегружаем коммутатор — reboot
нажимаем ‘#’(SHIFT + 3), чтобы перейти в режим обновления до полной загрузки новой версии программного обеспечения.
Изменяем скорость в бодах на 115200bps (Ctrl+a+Z, выбираем пункт изменить скорость порта в minicom), затем с помощью протокола zModem загружаем 30xx_prom_1.01.009.had (Ctrl+a+Z, выбираем пункт S, загрузка файлов). После завершения загрузки произойдет автоматическая перезагрузка системы.
После завершения перезагрузки коммутатора остаётся загрузить новое программное обеспечение с помощью сервиса TFTP (предварительно поднял tftpd и положил в нужную папку переименованный файл с прошивкой).
После успешного обновления и перезагрузки, логинимся и наблюдаем
Литература:
ftp://ftp.dlink.ru/pub/Switch/DES-3000%20Series/Description/DES-30xx_UG_R3_RUS.pdf
ftp://ftp.dlink.ru/pub/Switch/DES-3000%20Series/Firmware/DES_3000_BootPROM/DES-3000_HOWTO_upgrade_PROM_code.doc

суббота, 16 июля 2011 г.

VMware+RHEL6: BAR 13 can't allocate io resource

Имеется VMware ESXi 4.1u1, в нем запущена виртуалке с RHEL6.1. В лог-файле /var/log/messages заметил такие ошибки, штук 7-8
vRHEL kernel: pci 0000:00:15.7 BAR 13 can't allocate io resource.
Что же за устройства сидят на PCI-шине по такому адресу:
#lspci
00:11.0 PCI bridge: VMware PCI bridge (rev 02)
*****
00:15.5 PCI bridge: VMware PCI Express Root Port (rev 01)
00:15.6 PCI bridge: VMware PCI Express Root Port (rev 01)
00:15.7 PCI bridge: VMware PCI Express Root Port (rev 01)
*****
Слишком много, надо убрать минимум половину - меньше устройств - меньше грузиться будет, меньше памяти выделять и т.п.

Выключаем виртуалку.
Находим vmx-файл (конфигурационный файл) виртуалки vRHEL.vmx в моем случае.
ОБЯЗАТЕЛЬНО делаем резервную копию этого файла.
cp vRHEL.vmx vRHEL.vmx.good
Редактируем файл, убирая лишние записи
pciBridgeX.present = "TRUE" 
pciBridgeX.virtualDev = "pcieRootPort"
pciBridgeX.functions = "8"
pciBridgeX.pciSlotNumber = "YY" 
, где X=0..., я убрал сначала половину, потом все данные устройства.
Обязательно проверьте, что убрали ВСЕ строчки о  pciBridgeX, т.е. если убираете pciBridge1.present, то  убираете все строки с pciBridge1, иначе  может не запуститься виртуалка.
В моем случае после редактирования забыл удалить pciBridgeX.pciSlotNumber, после этого попытка запустить виртуалку закончилась ошибкой "Unable to allocate PCI sound adapter. Too many PCI devices already configured."

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

Non-volatile configuration memory is being accessed.

Сегодня зашел на маршрутизатор Cisco 870 серии, посмотрел running-config и чего-то дернуло меня глянуть на стартовый конфиг, сравнить насколько отличаются.
C871-IF#sh start
%% Non-volatile configuration memory is being accessed, Try again later

Интересная надпись. Почему нельзя посмотреть на конфиг в nvram? Данное сообщение выскакивает, когда несколько пользователей пытаются получить доступ к nvram, хоть на чтение, хоть на запись.

Лечение:
Команда sh users покажет кто еще работает с маршрутизатором
Команда clear line vty NUMBER сбросит пользователя с номером сессии NUMBER, полученного из вывода предыдущей команды.


Литература:
https://supportforums.cisco.com/docs/DOC-4924

понедельник, 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

пятница, 17 июня 2011 г.

Squid 3 и ошибка NONE/417 при POST-запросе.

Сегодня столкнулся с такой интересной ошибкой на шлюзе под RHEL6 с squid3. Для отдела логистики купили супер-программу Benish Fleet Managment (система спутникового мониторинга, позволяющая контролировать местоположение автотранспорта и любых объектов интересующих клиентов - взято с их сайта). В программе есть возможность указать прокси-сервер, логин/пароль для авторизации. Прописал, запускаю, не работает. Выдает какую-то билиберду. В логах строчка "1308310455.273 0 dn-office111.office.com NONE/417 4679 POST http://91.1X.4X.X0:81/tavl/Tavlentry.asmx - NONE/- text/html"

Недолгое гугление указывает на необходимость добавить в /etc/squid/squid.conf
ignore_expect_100 on
которая позволяет НЕ отсылать ошибку 417 клиентам с кривой поддержкой HTTP/1.1.
По умолчанию данная опция выключена и squid игнорирует заголовки вида Expect: 1XX в запросе (согласно RFC 2616).
Вообщем кривой софт и техподдержка с заученной фразой "раз не конектится - значит проблемы у вас" были побеждены внесением в конфиг небольшого workaround. Насколько стабильно заработает - время покажет.

Литература:
http://www.squid-cache.org/Doc/config/ignore_expect_100/
http://www.ietf.org/rfc/rfc2616.txt

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