Эскорт-услуги в Москве от Queens Palace

Архив рубрики ‘ Прочее

Некоторые итоги.

В этой заметке я отвлекусь от технической части и коснусь так называемых «оргвопросов».  Этот ресурс в первую очередь создан непосредственно для людей (главным образом для вашего же покорного слуги, и крепко помогает ему в случаях, когда он забывает какие-то вещи). Никаких особых SEO-мероприятий не проводилось, разве что поставлен плагин Google Sitemap, но это же святое, не правда ли? Как ни странно, ресурс попал в каталог DMOZ и получил PR = 3. Впрочем не будем акцентироваться на пузомерках.

Посещаемость ресурса Читать полностью »

Работа с файлом cookies4.dat в FreeBSD

Эта статья весьма специфична, надеюсь, она поможет тем, кто сталкивается с задачей работы с файлом cookies4.dat. Этот файл находится в конфигурационной директории браузера opera и имеет достаточно специфический . Традиционный метод — запустить браузер и сделать необходимые исправления вручную. Но хорошо, если вам надо исправить пару файлов, а что если тысячи их? На помощь приходит perl и модуль HTTP::Cookies::Opera. Однако не всё так просто, Читать полностью »

Сравниваем директории

Иногда необходимо сравнить 2 директории с достаточно большим количеством файлов на предмет наличия или отсутствия файлов, не анализируя их содержимое. В принципе для такой задачи в *nix существует утилита diff, впрочем с одним «но» — анализируется содержимое файлов и вывод несколько «избыточен». Представьте, что необходимо сравнить файловые системы jail с количеством файлов примерно 100 000. Мы, естественно, пойдем другим путем. В настоящей системе существуют еще 2 утилиты: find и comm. Читать полностью »

Nagios и arping под FreeBSD

Жалкая пародия на межсетевой экран в Microsoft Windows по умолчанию запрещает ICMP-ответы. Это осложняет мониторинг ансамбля хостов, используя nagios. В то же время утилита arping позволяет точно определить наличие в сети хоста с заданным IP-адресом. По умолчанию в nagios есть только скрипт cheсk_ping, который используется для проверки сервиса.

Поиск в Google говорит о наличии плагина check_arping для Linux, однако под FreeBSD собрать нужные для него хитрые модули perl, не получается. А ведь по сути достаточно иметь просто скрипт, запускающий поставленную из портов утилиту arping, и согласовывающий его с nagios.  Собственно, в этой заметке, я предлагаю такой способ.

Прежде всего меняем в описании сервиса в конфиге nagios:

define service{
use ping-service
host_name  somehost
service_description ARPING
check_command check_arping!em0!25
# check_command check_ping!100.0,20%!500.0,60%
}

Т.е. передаем для arping 2 аргумента, имя интерфейса и таймаут в миллисекундах.

Далее добавляем в файл  /usr/local/etc/nagios/commands.cfg следующие строки:

# 'check_arping' command definition
define command{
command_name check_arping
command_line $USER1$/check_arping -H $HOSTADDRESS$ -I $ARG1$ -T $ARG2$
}

И, наконец, в директории /usr/local/libexec/nagios создаем скрипт check_arping следующего содержания.

#! /usr/bin/perl
$ip =$ARGV[1];
$iface =$ARGV[3];
$timeout =$ARGV[5]*1000;
$cmd = "/usr/local/sbin/arping -i $iface -w $timeout -c 4 $ip";
@res = `$cmd`;
foreach $str (@res) {
if (($str,'packets')>-1) {
$more = $str;
}
}
$more =~ /.*\s(\d+)%.*/;
$percent = $1;
if ($percent == 0) {
$status = "OK";
$code = 0;
}
if ($percent > 25) {
$status = "WARNING";
$code = 1;
}
if ($percent == 100) {
$status = "CRITICAL";
$code = 2;
}
"ARPING $status - |$more";
$code;
__END__

Скрипт рабочий, но в самом минимуме. Выдает одну строку вида:

# ./check_arping -H 192.168.2.166 -I em0 -T 30
ARPING OK - |4 packets transmitted, 4 packets received, 0% unanswered

Если из четырех пакетов потеряно менее двух скрипт возвращает код 0 — «OK» для nagios, если потеряно два  или три пакета скрпит возвращает код 1 — «WARNING«, а если потеряны все четыре — то скрипт возвращает 2 — «CRITICAL«.

В перспективе планирую облагообразить обработку аргументов, так, как сейчас, — это решение, обусловленное катастрофическим отсутствием времени, поэтому заранее прошу прощения за индусский код.

Название может запутать, поэтому сформулирую техническое задание точнее. Есть некоторый хост, на котором необходимо выполнить некоторые команды посредством remote ssh. Как настроить собственно remote ssh я писал в предыдущим заметках. Допустим такая команда

# /usr/local/bin/sudo -u sshuser /usr/bin/ssh sshuser@192.168.0.2 /usr/local/bin/sudo /sbin/ipfw -f flush

отрабатывает правильно. Обратите внимание, что доступ по ssh происходит от имени пользователя sshuser, поэтому в команде 2 раза происходит вызов sudo:

  • первый раз на хосте, с которого осуществляется удаленное управление, запускает ssh-подключение от имени пользователя sshuser;
  • второй раз sudo вызывается для разрешения пользователю sshuser выполнить команду ipfw от имени суперпользователя.

Для этого в файл /usr/local/etc/sudoerc на хосте, который управляется удаленно необходимо добавить строку

sshuser      ALL = NOPASSWD: /sbin/ipfw *

Из командной строки с правами суперпользователя проблем нет. А теперь попробуем настроить такие же действия из веб-интерфейса.

Помещаем в php-скрипт  строку

$cmd = "usr/local/bin/sudo -u sshuser /usr/bin/ssh sshuser@192.168.0.2 /usr/local/bin/sudo /sbin/ipfw -f flush";
($cmd);

а сам скрипт работает от имени пользователя www. Естественно, что у www нет прав для выполнения команды sudo -u sshuser, поэтому придется пойти  на добавление в команду ЕЩЕ ОДНОГО вызова sudo для запуска приведенной выше команды с правами суперпользователя, вот так:

$cmd = "/usr/local/bin/sudo /usr/local/bin/sudo -u sshuser /usr/bin/ssh sshuser@192.168.0.2 /usr/local/bin/sudo /sbin/ipfw -f flush";
($cmd);

А  в файл /usr/local/etc/sudoerc на хосте, на котором работает php-скрипт управления  необходимо добавить строку

www       ALL = NOPASSWD: /usr/local/bin/sudo *

Вот такой вот cloaking позволяет выполнять необходимые команды на хосте без прямого доступа по ssh через веб-интерфейс.

NUT и Cacti

После установки системы мониторинга за источником бесперебойного питания NUT есть возможность получать параметры состояния ИБП следующим образом:

# /usr/local/bin/upsc myups@127.0.0.1
battery.voltage: 80.43
battery.voltage.nominal: 78.3
driver.name: megatec
driver.parameter.pollinterval: 2
driver.parameter.port: /dev/cuau0
driver.version: 2.4.1
driver.version.internal: 1.6
input.frequency: 50.0
input.frequency.nominal: 50.0
input.voltage: 202.5
input.voltage.fault: 0.0
input.voltage.maximum: 238.5
input.voltage.minimum: 192.0
input.voltage.nominal: 220.0
output.voltage: 220.0
ups.beeper.status: disabled
ups.delay.shutdown: 0
ups.delay.start: 2
ups.load: 25.0
ups.mfr: UPS
ups.model: Model 3000 Ver R1.2B
ups.serial: unknown
ups.status: OL
ups.temperature: 33.0
ups.type: online

Из всего потока информации для визуализации представляют интерес:

  • текущее значение напряжения сети input.voltage
  • текущая нагрузка ИБП ups.load
  • текущая температура ups.temperature

Приведу скрипт, который выдает эту информацию в виде, необходимом для cacti

Voltage:204.0 Load:24.0 Temperature:33.0
#!/usr/bin/perl
$cmd = '/usr/local/bin/sudo /usr/local/bin/upsc myups@127.0.0.1';
@strings = `$cmd`;
foreach $str (@strings) {
if (($str,'input.voltage:')!=-1) {
$str =~ /.+\s(\d+\.\d)/;
$voltage = $1;
}
if (($str,'ups.load:')!=-1) {
$str =~ /.+\s(\d+\.\d)/;
$load = $1;
}
if (($str,'ups.temperature')!=-1) {
$str =~ /.+\s(\d+\.\d)/;
$temperature = $1;
}
}
"Voltage:$voltage Load:$load Temperature:$temperature \n";
__END__

Вот так выглядят графики:

Напряжение сети, В

Нагрузка ИБП, %

Температура внутри корпуса ИБП,  ºС.

PHP 5.3 и cacti

При обновлении php до версии 5.3.x при запуске poller.php из пакета мониторинга сети cacti отображаются следующие ошибки:

PHP Deprecated: Function ereg_replace() is deprecated /usr/local/www/apache22/data/cacti/lib/rrd.php on line 31
PHP Deprecated:  Function ereg_replace() is deprecated /usr/local/www/apache22/data/cacti/lib/snmp.php on line 247
PHP Deprecated:  Function eregi_replace() is deprecated /usr/local/www/apache22/data/cacti/lib/snmp.php on line 289

Заменяем в файле /usr/local/www/apache22/data/cacti/lib/rrd.php строку 31

return ("(\\\$|`)", "", $command);
return ("/(\\\$|`)/", "", $command);

В файле /usr/local/www/apache22/data/cacti/lib/snmp.php заменяем строки: Читать полностью »

В этой короткой заметке речь пойдет о обработке файле лога стандарта combined для анализа user-agent. В конфигурационном файле Apache это выглядит так:

CustomLog "/var/log/httpd/somesite_access_log" combined

а в конфигурационном файле nginx:

access_log /var/log/nginx/somesite_access.log combined;

Строка в файле имеет вид:

178.216.0.216 - - [28/Oct/2010:00:09:36 +0300] "GET / HTTP/1.1" 301 20 "http://www.kharkovforum.com/showthread.php?p=15699158" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.8) Gecko/2010
0722 Firefox/3.6.8 ( .NET CLR 3.5.30729)"

Читать полностью »

Создание jail в FreeBSD 8.0

В интернете есть скрипты для создания jail, однако,  судя по количеству ошибок при их запуске под FreeBSD 7-ой или 8-ой ветки, складывается впечатление, что их писали еще во времена монголо-татарского ига (FreeBSD 6.1).  Честно говорю — речь об , конечно автору спасибо, но, как говорится, материальчик устарел.  Поэтому приведу исправленный мною лично рабочий скрипт.

jail_dir="/usr/home/jail/$1"
mkdir -p ${jail_dir}
cd /usr/src
mkdir -p ${jail_dir}
make world DESTDIR=${jail_dir}
cd /usr/src/etc
make distribution DESTDIR=${jail_dir}
mount -t devfs devfs ${jail_dir}/dev
echo ""
echo "Create jail $1 successfully complite"
echo ""
exit 64

Читать полностью »

Snmpwalk в net-snmp 5

В ucd-snmp (net-snmp 4) был простой и понятный синтаксис команды snmpwalk (запроса информации по snmp):

# snmpwalk public@192.168.0.2 [mib]

В net-snmp 5 синтаксис совершенно не такой. Работать в современной системе со старым ucd-snmp  не получится — очень много портов, требуют именно 5-ую версию. Поэтому проще выучить синтаксис командной строки:

# snmpwalk -Os -c public -v 2c 192.168.0.2 | less

т.е. определяем, что следует выводить только последний символический элемент OID (-Os), задаем community «publc» и версию SNMP (-v 2c). Для FreeBSD примерно такой вид:

# snmpwalk -Os -c public -v 2c 192.168.0.2 | less
sysDescr.0 = STRING: FreeBSD some.name.ua 8.0-RC1 FreeBSD 8.0-RC1 #0: Mon Aug  2 00:27:45 EEST 2010     user@some.name.ua:/usr/src/sys/amd64/compile/MY amd64
sysObjectID.0 = OID: netSnmpAgentOIDs.8
sysUpTimeInstance = Timeticks: (567015430) 65 days, 15:02:34.30
sysContact.0 = STRING: root@some.name.ua

Чтобы посмотреть числовое значение OID надо изменить формат вывода (-On):

# snmpwalk -On -c public -v 2c 192.168.0.2 | less
.1.3.6.1.2.1.1.1.0 = STRING: FreeBSD some.name.ua 8.0-RC1 FreeBSD 8.0-RC1 #0: Mon Aug  2 00:27:45 EEST 2010     user@some.name.ua /usr/src/sys/amd64/compile/MY amd64
.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.8072.3.2.8
.1.3.6.1.2.1.1.3.0 = Timeticks: (567052946) 65 days, 15:08:49.46
.1.3.6.1.2.1.1.4.0 = STRING: root@some.name.ua

Чтобы посмотреть  конкретный OID его следует указать после адреса хоста, причем допустимо как строковое имя, так и числовое значение

# snmpwalk -Os -c public -v 2c 192.168.16.2 .1.3.6.1.2.1.1.3.0
sysUpTimeInstance = Timeticks: (567067362) 65 days, 15:11:13.62
# snmpwalk -On -c public -v 2c 192.168.16.2 .1.3.6.1.2.1.1.3.0
.1.3.6.1.2.1.1.3.0 = Timeticks: (567067819) 65 days, 15:11:18.19
# snmpwalk -On -c public -v 2c 192.168.16.2 sysUpTimeInstance
.1.3.6.1.2.1.1.3.0 = Timeticks: (567069225) 65 days, 15:11:32.25
# snmpwalk -Os -c public -v 2c 192.168.16.2 sysUpTimeInstance
sysUpTimeInstance = Timeticks: (567069824) 65 days, 15:11:38.24

Все эти команды равноправны и  выводят аптайм системы.