2006/08/31

Инструментарий#1 [procps]

В большинстве стандартых поставок Linux дистрибутивов входит пакет procps, он содержит программы для мониторинга системных ресурсов. В данном контексте меня интересует только те утилиты из этого пакета, которые помогают оценить состояние системы и помочь при решении задач, касающихся производительности.

free
Возвращает информацию о свободной и используемой памяти в системе, как физической, так и виртуальной. Физическая память - реальный объем оперативной памяти, виртуальная - часть диска, использующаяся как продолжение физической памяти. Виртуальная память = swap область на диске.
Пример вывода
#free
total used free shared buffers cached
Mem: 516588 480172 36416 0 5524 75704
-/+ buffers/cache: 398944 117644
Swap: 1975976 70200 1905776
  • total - всего доступной физической памяти. Некоторая область оперативной памяти может быть зарезервирована ядром, поэтому показатель total может быть меньше реального объема оперативной памяти.
  • used - используется памяти (used=total-free)
  • free - незадействованая память. На самом деле память задействованная в кэшах(cached) тоже является свободной и может быть использована в любое время, если есть на то нужда какого-то процесса. Работает принцип "свободная память - потерянная память".
  • shared - память распределенная между процессами, но по непонятной причине всегда показывает 0.
  • buffers - память используемая в буферах.
  • cached - память используемая для кэширования.
  • -/+ buffers/cache - использованная память без учета буферов и кэшей/свободная память с учётом буферов и кэшей
  • swap - использование swap-области
Разница между буферами и кэшами следующая: буфер - это временное хранилище данных, работающих в данный момент процессов, своеобразный временный терминал; кэш - это данные, к которым уже обращались(они были считаны с устройств ввода/вывода), но они были оставлены в памяти для того, чтобы сократить издержки из-за доступа к устройствам ввода/вывода(I/O), скорость доступа к которым значительно(в 1000-чи раз) ниже по сравнению с оперативной памятью.

pmap
Возвращает карту памяти указанного процесса. Ключ -d выводит значение используемой writeable/private-памяти - памяти, которую занимает сам процесс, исключая использование общих(shared)-библиотек.

ps
Выводит список текущих процессов. Много полезной информации выводится с ключами aux. Ключ f показывает процессы с ветвлением от родителей.
Столбцы :
  • UID - идентификатор пользователя;
  • PID - идентификатор процесса
  • PPID - идентификатор родительского процесса. Родителем всех процессов является процесс init с PID равной 1
  • C - приоритет процесса, используемый планировщиком задач;
  • STIME - время старта процесса;
  • TTY - терминал, с которым связан данный процесс;
  • TIME - общее время работы процесса;
  • CMD - команда, запустившая данный процесс «с некоторыми опциями выводит и каталог откуда процесс был запущен»;
  • STAT - состояние, в котором на данный момент находится процесс.
Параметры STAT:
  • R - процесс выполняется в данный момент
  • S - процесс ожидает выполнение ("спит" менее 20 секунд)
  • D - процесс в полной (непрерываемой) спячке, например, ожидает ввода/вывода
  • Z - zombie или defunct процесс, то есть процесс у которого нет родителя.
  • T - процесс остановлен.
  • W - процесс в свопе
  • < - процесс в приоритетном режиме.
  • N - процесс в режиме низкого приоритета
  • L - real-time процесс, имеются страницы заблокированные в памяти.
  • D – процесс находится в ожидании дисковой (непрерываемой) операции
  • I – процесс в ожидающем режиме (процесс "спит" более 20 секунд)
  • J – процесс в "тюрьме" (см. man 2 jail)
Символ + показывает что процесс выполняются на переднем плане (foreground-процессы), s говорит о том, что процесс является начальным в сеансе.

sysctl
Модифицирует параметры ядра во время его работы. Полезна, если необходимо изменить какие-то переменные ядра, без перезагрузки и перекомпиляции.

tload
Отображает график загрузки системы(load average). График выводится с заданной задержкой на терминал в виде столбиков.

top
Отображает загрузку процессора. Используется для слежения за активностью процессора в реальном времени.
Полезные команды:
  • c - Включает/выключает отображение имени программы/полной командной строки в поле COMMAND
  • x - Включает/выключает подсветку колонки, по которой происходит сортировка процессов
  • <,> - сортировка по выбранному столбцу
  • z - Включает/выключает цвет
  • u - показать процессы указанного пользователя
  • Пробел - Заставляет программу перечитать список процессов
Состояние процессора:
  • us - процент использования процессорного времени программами пользователей.
  • sy - процент использования процессорного времени процессами ядра.
  • ni - процент использования процессорного времени программами с измененным приоритетом.
  • id - простой процессора.
  • wa - процент процессорного времени, потраченного на завершение ввода/вывода(IO)
  • hi - процент процессорного времени, потраченного на обработку hard-прерываний (IRQ)
  • si - процент процессорного времени, потраченного на обработку soft-прерываний (network)
Столбцы:
  • VIRT — общий объем виртуальной памяти, используемой процессом, включает в себя: область кода (CODE), данные (DATA), разделяемые библиотеки (SHARED) и страницы, перемещенные в swap-область памяти. Если приложение потребовало от ядра выделить ему 100Мб памяти, а использует всего 5 Мб, данный столбец всё равно будет показывать цифру 100.
  • RES — количество резидентной (не перемещаемой в swap) памяти в килобайтах. Если приложение потребовало от ядра выделить ему 100Мб памяти, а использует всего 5 Мб, то данный столбец покажет 5. Но здесь есть два ньюанса: а) RES не показывает сколько данных было перемещено в swap, б) часть RES-памяти может быть разделяемой.
  • SHR — количество разделяемой (shared) памяти программы в килобайтах, т.е. памяти, которая может быть использована другими приложениями.
  • DATA - объем памяти, занятой данными, используемые процессом в ходе выполнения.
  • SWAP - объем памяти, используемой процессом, но перемещенной в swap-область.
  • CODE - объем памяти, содержащая исполняемый код процесса.
Эмпирически можно вычислить следующее отношение: VIRT = RES + SWAP.
Все остальные столбцы аналогичны столбцам команды ps.
Кроме интерактивного режима, в котором top выводит данные на экран, можно использовать так называемый командный режим (Batch mode). Он применяется, когда результаты работы программы необходимо передать другим программам или сохранить в файле.
Для запуска программы в командном режиме используют параметр –b. В этом случае список отсортированных процессов (по умолчанию, процессы сортируются по проценту использования процессорного времени) будет с определенной задержкой (по умолчанию три секунды) выводится на стандартный вывод. Количество повторов не ограничено, поэтому необходимо явно завершать работу программы, например, при помощь комбинации клавиш Ctrl+C.
  • n - количество повторов.
  • d - задержка между повторами в секундах.
  • u - определяет пользователя, с правами которого выполняются процессы.
  • p - определяет PID процессов, за которыми должна следить программа.
Например, необходимо с задержкой в четыре секунды два раза получить список процессов, выполняемых с правами пользователя daemon. Для этого программу запускают со следующими параметрами:
#top -b -d 4 -n 3 -u daemon
top - 17:28:22 up 34 min, 1 user, load average: 0.15, 0.05, 0.03
Tasks: 66 total, 1 running, 65 sleeping, 0 stopped, 0 zombie
Cpu(s): 2.1% us, 0.6% sy, 0.0% ni, 91.7% id, 5.5% wa, 0.1% hi, 0.0% si
Mem: 246832k total, 242968k used, 3864k free, 2708k buffers
Swap: 514072k total, 0k used, 514072k free, 107936k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3753 daemon 16 0 4972 2616 1940 S 0.0 1.1 0:00.01 named
3787 daemon 16 0 1684 688 584 S 0.0 0.3 0:00.00 atd

top - 17:28:26 up 34 min, 1 user, load average: 0.13, 0.05, 0.03
Tasks: 66 total, 1 running, 65 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.8% us, 0.0% sy, 0.0% ni, 99.0% id, 0.0% wa, 0.2% hi, 0.0% si
Mem: 246832k total, 242928k used, 3904k free, 2708k buffers
Swap: 514072k total, 0k used, 514072k free, 107936k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3753 daemon 16 0 4972 2616 1940 S 0.0 1.1 0:00.01 named
3787 daemon 16 0 1684 688 584 S 0.0 0.3 0:00.00 atd

uptime

Возвращает время работы системы, количество вошедших в нее пользователей и загрузку системы. Всё то же самое выводит в реальном времени команда top, но top "ест" больше ресурсов.

vmstat
Отображает статистику виртуальной памяти, включая информацию о процессах, памяти, страницах, блоках ввода-вывода, прерываниях и активности CPU. В отчете, выдаваемом по умолчанию, имеются следующие поля:
procs - число процессов, которые:
r - находятся в очереди на выполнение;
b - заблокированы в ожидании ресурсов, например, пока закончатся дисковые операции ввода/вывода или paging;
w - выключены из обмена. Эти значения всегда отражают текущую ситуацию, если даже высвечивается полная информация с момента загрузки.
memory - выводит информацию о памяти(в Кб)
swpd - размер используемой в данный момент виртуальной памяти
free - размер свободной памяти
buff - объем памяти, задействованной в буферах
cache - объем памяти, задействованной на кэширование
swap - сообщает о производительности системы при выполнении замещения страниц по требованию. Пока не будет высвечена полная информация с момента загрузки, эта информация усредняется по производительности на интервале в (interval)-секунд.
si - число загруженных процессов.
so - число выгруженных процессов.
io - содержит информацию об общении с устройствами ввода/вывода
bi - принято блоков из блочного устройства (блоков/сек)
bo - послано блоков на блочное устройство (блоков/сек)
system - сообщает об активности основной системы. Пока не будет высвечена суммарная информация с момента загрузки, эти позиции показывают средние значения за последние (interval)-секунд.
in - число прерываний(в секунду) устройств (несинхронных).
cs - число переключений(в секунду) контекста.
cpu - процент цикла процессора, затрачиваемый на различные режимы:
us - пользователь
sy - система
id - ожидание
wa - операции i/o(ввода/вывода). До Linux 2.5.41 показывала 0.

Литература:
  1. FAQ Linux Memory Management
  2. Перевод статьи Understanding memory usage on Linux
  3. Ps - Википедия
  4. Исследуем процессы
  5. Top - Wiki Open Book
  6. On measuring memory usage

2006/08/28

KnowledgeTree

Наконец-то нашли решение для управления электронными документами внутри организации - KnowledgeTree. Из уже опробованных функций хочется отметить:
  • индексация содержимого doc, rtf, pdf, htm, xml - документов
  • подписка на директорию - в случае, если содержимое директории поменялось Вас известят об это по e-mail
  • bulk upload/export
  • возможность использования функции workflow для работы с изменяемыми документами
  • очень удобное управление разграничением доступа
  • возможность использования plugin'ов
  • возможность использования внешнего хранилица пользователей (LDAP)
Установка очень проста, а требования стандартны - Apache/PHP/MySQL + для возможности индексации документов необходимо установить соответствующие программы для анализа содержимого.
Давно хотел привести в порядок библиотеку технической документации, поэтому обнаружив этот продукт, начал осваивать профессию библиотекаря.

2006/08/24

Установка ZOPE/Plone на RHEL4 (Red Hat Enterprise Linux)

В доступном наборе rh-пакетов нет ни zope, ни plone. Кроме того, ZOPE требует наличия python =>2.3.5, а RHEL4 может предоставить только python 2.3.4. Поэтому установку необходимо начинать с установки python 2.3.5(не ниже!). Установка проходит в пределах домашней директории /var/lib/zope пользователя zope. Без библиотеки zlib ZOPE не запустится, поэтому прежде всего необходимо собрать её.

1. Zlib 1.2.3.
tar zxf zlib-1.2.3.tar.gz
./configure --prefix=/var/lib/zope
make && make install
export LDFLAGS="-L/var/lib/zope/lib/"
export CPPFLAGS="-I/var/lib/zope/include/"

2. Python 2.3.5
tar zxf Python-2.3.5.tgz
./configure --prefix=/var/lib/zope
make && make install

3. Zope 2.8.8

tar zxf Zope-2.8.8-final.tgz
./configure --prefix=/var/lib/zope --with-python=/var/lib/zope/bin/python
make && make install

4. Создать instance и запустить созданный zope-instance

/var/lib/zope/bin/mkzopeinstance.py
vi /var/lib/zope/etc/zope.conf (если нужно что-нибудь исправить)
/var/lib/zope/bin/zopectl start

5. Plone 2.1.3. Достаточно положить содержимое архива в директорию Products запущенного zope-instance

tar zxf Plone-2.1.3.tar.gz
cd Plone-2.1.3/
mv * /var/lib/zope/instances/demo/Products

После этого можно заходить в management-консоль zope по адресу http://servername:port/manage и добавлять plone-сайты.

2006/08/21

Subversion

Поставив cvs, ознакомился с аутентичными публикациями по данной теме и пришёл к выводу, что нужно переходить на subversion, пока не обустроились в cvs-среде. Subversion пришёл на смену cvs, поэтому он изначально имел несколько нововведений, которые перекрывают функциональность cvs.
"Subversion поддерживает большинство соглашений CVS , включая большую часть набора команд, поэтому пользователи CVS быстро почувствуют себя как дома. Subversion предлагает много полезных улучшений по сравнению с CVS : копирование и переименование файлов и директорий, настоящие атомарные фиксации, эффективная обработка бинарных файлов, способность сетевой работы по HTTP (HTTPS) - через WebDAV. Subversion также имеет родной Win32 клиент и сервер."
"CVS следит только за историей отдельных файлов, тогда как Subversion использует виртуальную файловую систему с возможностями управления версиями, которая способна отслеживать изменения во времени целых деревьев каталогов. Под управление версиями попадают файлы и каталоги."

Установка на Debian Etch (модуль WebDAV уже должен присутствовать в apache2):
1. Установить subversion и модуль dav_svn к apache2
apt-get install subversion
apt-get install libapache2-svn

2. Активировать модули dav и dav_svn

a2enmod dav
a2enmod dav_svn

3. Изменить содержимое файла /etc/apache2/mods-available/dav_svn.conf


DAV svn
# Путь до репозитария
SVNPath /var/lib/svn
# Включение обычной аутентификации
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
# Если раскомментировать строки Limit, то анонимные пользователи
# получат доступ на чтение к репозитарию, иначе только
# аутентифицированные пользователи имеют доступ
#
Require valid-user
#


4. Создать файл /etc/apache2/dav_svn.passwd со списком пользователей, имеющих доступ к репозитарию

htpasswd2 /etc/apache2/dav_svn.passwd programmer1
New password:
Re-type new password:
Adding password for user programmer1

5. Создать репозитарий и поправить права доступа к его административныым каталогам

svnadmin create /var/lib/svn
chown -R www-data.www-data /var/lib/svn

6. Перегрузить apache2, после этого можно с помощью svn-клиента работать с созданным репозитарием. Если необходима более гибкая настройка доступа, в модуле dav_svn имеется набор директив AuthzSVNAccess.

2006/08/19

cvs

Опираясь на статьи Setting up a secure CVS server with OpenSSH, Permitting anonymous read-only access to your CVS repository можно поднять в Debian систему CVS. Так как репозитарий будет открыт для anonymous пользователей, можно использовать pserver.
Единственная трудность возникла при настройке web-интерфейса ViewCVS. Если ставить его из пакетов, то начинаются невообразимые сложности - отображаются только каталоги, а файлы - нет. если все делать через экспериментальный python-модуль, а не через rcs-утилиты, то не функционирует diff. А вот если ставить последнюю на сегодняшний день версию ViewCVS 1.0.1 из исходников, то всё прекрасно работает.

2006/08/17

Backup with rdiff-backup

Подискутировав и поинтересовавшись на форумах, решил продолжать использующийся механизм резервного копирования данных на backup-сервер, при котором сам backup-сервер инициирует копирование с серверов.
Лог:
1. Генерируем пару ключей на backup-сервере для пользователя root.
backup# ssh-keygen -t dsa -b 2048 -N ""
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
ea:41:ed:8d:76:32:9f:1b:f5:41:68:3d:e0:10:a0:5d root@backup

2. Копируем содержимое файла /root/.ssh/id_dsa.pub с backup-сервера в файл /root/.ssh/authorized_keys на те сервера, которые нуждаются в резервном копировании. В соответствие с форматом файла authorized_keys добавляем в него необходимые опции: from="backup". После тестирования ssh-соединения можно добавить необязательные, но предоставляющие дополнительную безопасность, опции: no-X11-forwarding, no-port-forwarding, no-pty, no-agent-forwarding.

3. На backup-сервере и всех серверах, учавствующих в резервном копировании необходимо установить утилиту rdiff-backup

  • Debian
apt-get install rdiff-backup
  • FreeBSD
cd /usr/ports/sysutils/rdiff-backup
make && make install
  • from sources (необходимо наличие библиотек и header-файлов для librsync, python)
wget http://savannah.nongnu.org/download/rdiff-backup/rdiff-backup-VER.tar.gz
tar zxf rdiff-backup-VER.tar.gz
cd rdiff-backup-VER
python setup.py install

4. В соответствие с форматом backup-скрипта(приведен ниже), составляем list-файлы, содержащие описание директорий для резервного копирования.

#!/bin/sh
# $1 - list
StartTime=`date +%H:%M:%S`;
cat $1 | while read args
do
# format of entries in list-file
# $1 - remote host
# $2 - remote dir
# $3 - local dir
# $4 - pattern (copy dirs, which contains files with that pattern. For example 'log|tar')
set $args
if [ "$1" = "#" ]
then
continue;
fi
echo "$1::$2 > $3"
rdiff-backup --create-full-path --exclude-symbolic-links --exclude-sockets --exclude-special-files --exclude-fifos --exclude-device-files --no-hard-links --include-regexp ".*($4)" --exclude $2 $1::$2 $3
done
EndTime=`date +%H:%M:%S`;
echo "$StartTime - $EndTime";

5. Автоматизируем действия с помощью cron, periodic.


2006/08/16

OTRS - Open Ticket Request System

Инсталляция проводилась на Debian Testing (Etch) из исходников otrs-2.0.4.
1. Распаковать архив в /opt/otrs
cd /opt
tar zxf otrs-2.0.0.tar.gz
cd otrs

2. Создать в системе пользователя otrs, который будет входить в ту же группу, что и пользователь от имени которого запущен web-сервис(Apache) - в Debian это группа www-data.

useradd -d /opt/otrs/ -c 'OTRS user' otrs
usermod -G www-data otrs

3. На основе шаблонных файлов, идущих в дистрибутиве, необходимо создать основные файлы конфигурации

cd Kernel/
cp Config.pm.dist Config.pm
cd Config
for foo in *.dist; do cp $foo `basename $foo .dist`; done

4. Запустить скрипт, корректирующий права доступа к содержимому директории /opt/otrs. Формат запуска скрипта следующий:

SetPermissions.sh { Home directory of the OTRS user } { OTRS user } { Web server user } [ Group of the OTRS user ] [ Group of the web server user ]

cd /opt/otrs/bin
SetPermissions.sh /opt/otrs otrs www-data www-data www-data
SetPermissions.sh <$Revision: 1.27 $> - set OTRS file permissions
Copyright (c) 2001-2004 Martin Edenhofer
Setting file permissions...
chown -R www-data:www-data /opt/otrs
chmod -R og+rw /opt/otrs
chown otrs:www-data /opt/otrs
chown -R otrs:www-data /opt/otrs/var/
chown -R www-data:www-data /opt/otrs/var/sessions/
touch && chown otrs:www-data /opt/otrs/var/log/TicketCounter.log
chmod -R 775 /opt/otrs/bin/
(chown && chmod 700) otrs:0 /opt/otrs/bin/DeleteSessionIDs.pl
(chown && chmod 700) otrs:0 /opt/otrs/bin/UnlockTickets.pl
(chown && chmod 700) otrs:0 /opt/otrs/bin/otrs.getConfig

5. Перед запуском инсталляции необходимо установить все необходимые для работы библиотеки. Проверить наличие необходимых пакетов можно скриптом otrs.checkModules.

./otrs.checkModules
CGI ... ok
Date::Pcalc ... ok
Date::Format ... ok
DBI ... ok
DBD::mysql ... ok
Digest::MD5 ... ok
LWP::UserAgent ... ok
IO::Scalar ... ok
IO::Wrap ... ok
MIME::Base64 ... ok
MIME::Tools ... ok
Mail::Internet ... ok
Net::DNS ... ok
Net::POP3 ... ok
Net::LDAP ... not installed! (for directory authentication - not required)
Net::SMTP ... ok
Authen::SASL ... ok
GD ... ok
GD::Text ... ok
GD::Graph ... ok
GD::Graph::lines ... ok
GD::Text::Align ... ok
XML::Parser ... ok

Установить недостающие пакеты можно с помощью apt, либо запустив perl -e shell -MCPAN. В дополнение можно проверить синтаксис основных скриптов:

cd /opt/otrs
perl -cw cgi-bin/installer.pl
cgi-bin/installer.pl syntax OK
perl -cw PostMaster.pl
PostMaster.pl syntax OK
6. Добавить необходимые директивы и описания в конфигурацию web-сервера(Apache). Модуль mod_cgi должен быть активирован!
touch /etc/apache2/conf.d/otrs.conf

otrs.conf:
#
# Basic apache configuration file for OTRS
#
# agent, admin and customer frontend
#
ScriptAlias /otrs/ "/opt/otrs/bin/cgi-bin/"
Alias /otrs-web/ "/opt/otrs/var/httpd/htdocs/"
#
# Directory settings
#

AllowOverride None
Options +ExecCGI -Includes
Order allow,deny
Allow from all


AllowOverride None
Order allow,deny
Allow from all

7. Перегрузить web-сервис

/etc/init.d/apache2 restart
Forcing reload of apache 2.0 web server....

8. Закончить установку из броузера по адресу http://localhost/otrs/installer.pl

Если db-сервер по умолчанию не использует utf-8, то чтобы избежать проблем с кодировкой, лучше создать базу вручную(в комплекте идет набор скриптов). После успешной инсталяции можно логиниться root@localhost:root по адресу http://localhost/otrs/index.pl.

2006/08/13

Network diagram

Уже не раз сталкивался с необходимостью иметь удобный софт для изображения топологии сети и рисования различных диаграм. Не могу сказать, что я что-то, действительно, стоящее нашел, но то, что есть, использовать можно. В отборе учавствовали только freeware-продукты!
  • CADE - русская разработка, добротно сделан, но слишком маленький набор возможных элементов, зато с помощью обычных линий можно изобразить что угодно :) Отлично подходит для изображения логической схемы сети. [скачать(3552Кб)]
  • Network Notepad - менее функционален, но изначально задумывался как чертежник для сети, поэтому в нем есть все необходимое, плюс можно скачать дополнительные наборы элементов. Минус - в схеме можно использовать только доступные элементы, нет возможности рисовать собственные фигуры. Хорош для изображения физической схемы сети. [скачать(2678Кб)/элементы1(280Кб)/элементы2(10Кб)]

2006/08/10

Tomcat advanced tuning#1

Очень волновал тот факт, что tomcat имеет права root. Порывшись, нашел решение - использовать демон jsvc
cd $CATALINA_HOME/bin
tar xvfz jsvc.tar.gz
cd jsvc-src
chmod +x configure
./configure
make
cp jsvc ..

После успешной сборки tomcat можно запускать командой:

cd $CATALINA_HOME
./bin/jsvc -Djava.endorsed.dirs=./common/endorsed -cp ./bin/bootstrap.jar \
-outfile ./logs/catalina.out -errfile ./logs/catalina.err \
-user tomcat_user org.apache.catalina.startup.Bootstrap

Естественно, необходимо прежде убедиться, что указанный пользователь tomcat_user существует в системе и имеет все необходимые привелегии доступа в директории, с которыми работает tomcat.

update: А потом еще порылся и понял, что искал то, что лежит перед глазами - start-stop-daemon :)

2006/08/08

IE/HTTPS/POST "The page cannot be displayed" problem

Разрешили интересную проблему.
IE корректно не обрабатывает keepalive-функцию, реализованную в HTTP1.1. Если используется https-соединение и пользователь пытается POST-ом отправить данные на сервер, то временами соединение с сервером рвется и броузер показывает "The page cannot be displayed".

Решение:
Добавить в конфигурационный файл web-сервера для конкретного контекста
SetEnvIf User-Agent ".*MSIE.*" nokeepalive

SSL handshake failure

Никак не могу нащупать в чем дело и куда копать.
Если на сайте стоит аутентификация пользователей по сертификату и пользователь использует в качестве броузера IE, в логе апача появляется следующее:
[08/Aug/2006 12:41:04 19853] [info]  Connection to child 33 established (server ssl-server:443, client 192.168.0.11)
[08/Aug/2006 12:41:04 19853] [info] Seeding PRNG with 1160 bytes of entropy
[08/Aug/2006 12:41:04 19853] [info] Connection: Client IP: 192.168.0.11, Protocol: SSLv3, Cipher: RC4-MD5 (128/128 bits)
[08/Aug/2006 12:41:04 19853] [info] Initial (No.1) HTTPS request received for child 33 (server ssl-server:443)
[08/Aug/2006 12:41:04 19853] [info] Requesting connection re-negotiation
[08/Aug/2006 12:41:04 19853] [info] Awaiting re-negotiation handshake
[08/Aug/2006 12:41:04 19853] [error] Re-negotiation handshake failed: Not accepted by client!?
[08/Aug/2006 12:41:04 19853] [error] SSL error on writing data (OpenSSL library error follows)
[08/Aug/2006 12:41:04 19853] [error] OpenSSL: error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure
[08/Aug/2006 12:41:04 19853] [info] Connection to child 33 closed with unclean shutdown (server ssl-server:443, client 192.168.0.11)

Самое интересное, что аутентификация все-таки проходит, все выглядит так, будто сервер осуществляет вторую попытку и она у него заканчивается успехом.

2006/08/07

Тестирование производительности web-сервера

Задавшись задачей померить производительность наших web-серверов при реальной нагрузке для того, чтобы в дальнейшем их подстроить, нашел очень интересный инструмент - JMeter
"Apache JMeter may be used to test performance both on static and dynamic resources (files, Servlets, Perl scripts, Java Objects, Data Bases and Queries, FTP Servers and more)"

2006/08/03

HELO ограничения для Exim4

Продолжая борьбу со спамом, наткнулся на статейку
Добавил в конфигурацию наших серверов все необходимое:
30_exim4-config_check_rcpt
deny message = Forged IP in HELO.
log_message = HELO is our IP
condition = ${if eq {${lookup {$sender_helo_name} \
lsearch{/ПУТЬ_ДО_reject_helo} \
{yes}{no}}}
{${if !eq {$sender_host_address}{127.0.0.1} \n
{yes}{no}}} \n
{yes}{no}}

reject_helo
localhost
127.0.0.1
и что-нибудь еще, сам знаешь что :)

Spamassassin Bayes scores

В файле 50_scores.cf можно увеличить значения показателей для BAYES_99, BAYES_90, BAYES_80, например, вдвое. Работает прекрасно :)

TSOL8 fundamentals


Authorizations
назначаются пользователям, privileges - процессам.
Authorizations
и Trusted Applications группируются в профайлы(Rights Profiles).

Label и clearance состоят из одного classification и 0 или больше compartment.
Примеры:
Classification - CONFIDENTIAL, TOP SECRET
Compartment - менеджеры, сотрудники, операция "вихрь-антитеррор".

Label A и Label B являются эквивалентны(equal), если они имеют одинаковый набор classification и compartment. Если они эквивалентны, то они доминируют друг над другом.
Если Label A имеет более высокий classification или если classification тот же самый, но набор compartment включает весь набор Label B, то говорят, что Label A строго доминирует(strictly dominate) над Label B. Две метки называют несовместимыми(disjoint, noncomparable), если ни одна из них не доминирует над другой.
Clearance - максимальный набор доступных для пользователя classification и compartment. Clearance не обязательно будет являться меткой.
ADMIN_HIGH и ADMIN_LOW - административные метки. ADMIN_HIGH - имеет самый "высокий" уровень доступа, данная метка доминирует над всеми другими в системе. ADMIN_LOW - самый низкий уровень, все остальные метки в системе доминируют над ADMIN_LOW.
В TSOL действует правило - WURD (write up/read down). Т.е. читать можно всё, над чем доминирует текущая Label, нельзя писать в объекты, над которыми доминирует текущая Label.

2006/08/02

Roller Blog

Немножко повозившись связал apache2 с tomcat5.5 через mod_jk2 и вынес блог систему в отдельный виртуальный хост blog.ssc.lt.

Лог:

workers2.properties
[uri:blog.ssc.lt/*]
info=Roller Blogs
debug=0

server.xml


driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://СЕРВЕР:3306/name_db?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8"
username="user"
password="pass"
maxActive="20"
maxIdle="3"
removeAbandoned="true"
maxWait="3000" />
mail.smtp.host="localhost" />