FreeBSD Jail Zabbix cannot create Semaphore: [22] Invalid argument

Обновилял я zabbix который работал в jail на FreeBSD 10.
Обновился, перегрузил jail для пущей надежности. А после перезагрузки zabbix_server не запускался с такими сообщениями в лог:

zabbix_server [PID]: cannot create Semaphore: [22] Invalid argument
zabbix_server [PID]: unable to create mutex for log file

После разбирательств оказалось что zabbix использует shared memory, которая в случае с FreeBSD и jail расшаривается между хост системой и всеми джейлами с включенным параметром «allow.sysvipc». Скорее всего zabbix не подчистил после себя эту часть памяти или не смог это сделать при ребуте джейла.

Статистику по shared memory можно посмотреть командой ipcs -a, пример вывода:
Message Queues:
T ID KEY MODE OWNER GROUP CREATOR CGROUP CBYTES QNUM QBYTES LSPID LRPID STIME RTIME CTIME

Shared Memory:
T ID KEY MODE OWNER GROUP CREATOR CGROUP NATTCH SEGSZ CPID LPID ATIME DTIME CTIME
m 196608 2029070292 –rw——- zabbix zabbix zabbix zabbix 27 16777216 90749 90749 16:45:38 no-entry 16:45:38
m 458753 1961961428 –rw——- zabbix zabbix zabbix zabbix 27 4194304 90749 90749 16:45:38 no-entry 16:45:38
m 458754 1743857620 –rw——- zabbix zabbix zabbix zabbix 27 7130317 90749 90749 16:45:38 no-entry 16:45:38
m 458755 1945184212 –rw——- zabbix zabbix zabbix zabbix 27 1258291 90749 90749 16:45:38 no-entry 16:45:38
m 458756 1408313300 –rw——- zabbix zabbix zabbix zabbix 27 6744 90749 90749 16:45:38 no-entry 16:45:38
m 458757 1995515860 –rw——- zabbix zabbix zabbix zabbix 27 8388608 90749 90749 16:45:38 no-entry 16:45:38
m 458758 1827771991 –rw——- zabbix zabbix zabbix zabbix 6 761616 90753 90753 16:45:38 no-entry 16:45:38
m 458759 1760634836 –rw——- zabbix zabbix zabbix zabbix 27 8388575 90749 90749 16:45:38 no-entry 16:45:38
m 458760 1826196904 –rw——- zabbix zabbix zabbix zabbix 6 761616 72299 72299 17:39:26 18:16:16 17:39:26

Semaphores:
T ID KEY MODE OWNER GROUP CREATOR CGROUP NSEMS OTIME CTIME
s 196608 2062624724 –rw——- zabbix zabbix zabbix zabbix 13 18:17:03 16:45:38
s 458753 2062653015 –rw——- zabbix zabbix zabbix zabbix 13 18:17:02 16:45:38
s 458754 2061077928 –rw——- zabbix zabbix zabbix zabbix 12 18:17:02 17:39:26

Для успешного запуска zabbix_server при наличии старых хвостов в shared memeory, ее необходимо подчистить. Использовать для этого можно ipcrm.
ipcrm -S KEY – удалить семафор
ipcrm -M KEY – удалить область памяти

Рубрика: Техно | Добавить комментарий

Авторизация на свичах Huawai через Tacacs с откатом на локальную базу пользователей

На входе:
Huawei Quidway S2326TP-EI Software Version : VRP (R) Software, Version 5.70 (S2300 V100R005C01SPC100)
Debian 6.0.4
tacacs+ 4.0.4.19-8

На коммутаторе:

sys
[switch]hwtacacs-server template tacacs
# дополнительно можно указать порт отличный от стандартного (49)
# и вторичный сервер указав после адреса «secondary»
[switch-hwtacacs-tacacs]hwtacacs-server authentication 10.0.0.1
[switch-hwtacacs-tacacs]hwtacacs-server authorization 10.0.0.1
[switch-hwtacacs-tacacs]hwtacacs-server accounting 10.0.0.1
[switch-hwtacacs-tacacs]hwtacacs-server shared-key simple TACACS_KEY
# по умолчанию на сервер передается имя в формате логин@домен, отключаем подобное поведение
[switch-hwtacacs-tacacs]undo hwtacacs-server user-name domain-included
[switch-hwtacacs-tacacs]quit
[switch]aaa
[switch-aaa]authentication-scheme tacacs
[switch-aaa-authen-tacacs]authentication-mode hwtacacs local
[switch-aaa-authen-tacacs]quit
[switch-aaa]authorization-scheme tacacs
[switch-aaa-author-tacacs]authorization-mode hwtacacs local
[switch-aaa-author-tacacs]authorization-cmd 3 hwtacacs local
[switch-aaa-author-tacacs]authorization-cmd 15 hwtacacs local
[switch-aaa-author-tacacs]quit
[switch-aaa]accounting-scheme tacacs
[switch-aaa-accounting-tacacs]accounting-mode hwtacacs
# по умолчанию, если нет возможности отправить стартовый аккаунтинг, то свич будет килять пользователя
[switch-aaa-accounting-tacacs]accounting start-fail online
[switch-aaa-accounting-tacacs]quit
[switch-aaa]domain example.net
[switch-aaa-domain-example.net]authentication-scheme tacacs
[switch-aaa-domain-example.net]accounting-scheme tacacs
[switch-aaa-domain-example.net]authorization-scheme tacacs
# tacacs – имя шаблона созданного выше (hwtacacs-server template tacacs)
[switch-aaa-domain-example.net]hwtacacs-server tacacs
[switch-aaa-domain-example.net]quit
# добавляем пользователя на случай недоступности Tacacs сервера
[switch-aaa]local-user manager password simple manager
[switch-aaa]local-user manager privilege level 3
[switch-aaa]quit
# устанавливаем домен который будет использоваться по умолчанию
№ без это строчки логин возможен только с полным логином (логин@домен)
[switch]domain example.net admin

Результирующий конфиг:

#
domain example.net admin
#
hwtacacs-server template tacacs
hwtacacs-server authentication 10.0.0.1
hwtacacs-server authorization 10.0.0.1
hwtacacs-server accounting 10.0.0.1
hwtacacs-server shared-key simple TACACS_KEY
undo hwtacacs-server user-name domain-included
#
aaa
authentication-scheme tacacs
authentication-mode hwtacacs local
authorization-scheme tacacs
authorization-mode hwtacacs local
authorization-cmd 3 hwtacacs local
authorization-cmd 15 hwtacacs local
accounting-scheme tacacs
accounting-mode hwtacacs
accounting start-fail online
domain rekom.ru
authentication-scheme tacacs
accounting-scheme tacacs
authorization-scheme tacacs
hwtacacs-server mon.rekom.ru
local-user manager password simple manager
local-user manager privilege level 3
undo local-user admin
#

На стороне сервера:
$ sudo cat /etc/tacacs+/tac_plus.conf

accounting file = /var/log/tac_plus.acct
key = TACACS_KEY

# супер пользователь, получает максимальные привилегии
# пользователь должен присутствовать в системе, т.к. авторизация идет через PAM
user = admin {
login = PAM
default service = permit
service = exec {
priv-lvl = 15
}
}

Рубрика: Техно | Комментарии (8)

sysctl dev.em.max_interrupt_rate для Intel(R) PRO/1000 Legacy Network Connection

Не помню точно с какой версии FreeBSD, мне кажется что с 8.0, драйвера для сетевых плат Intel были разделены на 3 части:

  • if_lem
  • if_em
  • if_igb

Если очень грубо попытаться описать разницу, то выйдет следующее:

В первую группу попали устаревшие платы.
Во третью – современные гигабитные платы на шине PCI-E.
Вторую группу наполнили чипы не попавшие в первые две группы.

Если нужно выжать из подобных плат все соки, то придётся патчить драйвера. Потому что по дефолту в них прописано ограничение на число прерываний которые может генерировать плата в секунду – 8000.
Патч который добавляет нужный sysctl для em драйверов не проблема найти в интренете. А вот для lem пришлось его немного подкорректировать.
Собственно сам патч для добавления max_interrupt_rate в if_lem

Для того что бы быстренько примерить данный патч можно выполнить:

[host]$ cd /usr/src
[host]$ sudo patch < ~/lem_sysctl.diff
[host]$ cd sys/modules/em
[host]$ sudo make
[host]$ sudo make install

После этого нужно добавить пару строчек в /boot/loader.conf

if_em_load="YES"
hw.em.max_interrupt_rate=32000

Значение max_interrupt_rate нужно будет подобрать протестировав конкретное железо на приличной нагрузке.

Рубрика: Техно | Добавить комментарий

Управление светодиодами под OpenWRT

Дома стоит роутер Lynksys WRT54GL с прошивкой OpenWRT. После обновления на новую ветку прошивки по умолчанию, после загрузки, стали гореть светодиоды под логотипом Cisco. В принципе это не критично, но у меня этот девайс стоит в комнате у сына, и ночью вся эта конструкция превращается в подобие новогодней елки. Ну и как говорится – «Гугл в помощь», я полез на поиски решения.
На данной модели роутера система управления светодиодами которая реализована в прошивке не позволяла управлять теми что мне были нужны, вернее не нужны. Поэтому пришлось все делать ручками.

root@OpenWrt:~# cat /etc/init.d/ses_led
#!/bin/sh /etc/rc.common

START=99

start() {
echo "0" > /proc/diag/led/ses_white
echo "0" > /proc/diag/led/ses_orange
}

Текст скрипта который выключает назойливые светодиоды под логотипом Cisco.

root@OpenWrt:~# chmod 755 /etc/init.d/ses_led
root@OpenWrt:~# /etc/init.d/ses_led enable
root@OpenWrt:~# /etc/init.d/ses_led start

Исполняемый скрипт в автозагрузке. Запускаем его для выключения светодиодов. Спим спокойно.

Рубрика: Техно | Добавить комментарий

Как не учитывать администраторов WordPress в статистике Google Analytics

Не учитывать активность администраторов в статистике это один из первых шагов по тюнингу Google Analytics. Это можно сделать исключив IP или целую подсеть где работает администратор, но встает вопрос что делать, если адрес динамический. В этом случае нужно фильтровать с помощью дополнительных возможностей Google Analytics. Весь процесс настройки бедет состоять из двух шагов.

Первым делом нужно произвести изменения с шаблоном сайта. Необходимо добавить код Google Analytics несколько строк, так чтобы он выглядел следующим образом:

<script type=»text/javascript»>

var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXX-X']);
<?php if (current_user_can(‘level_10′)) {
echo «_gaq.push(['_setCustomVar', 1, 'wp_administrator', 'wp_administrator', 1]);\n»;
} ?>
_gaq.push(['_trackPageview']);

(function() {
var ga = document.createElement(‘script’); ga.type = ‘text/javascript’; ga.async = true;
ga.src = (‘https:’ == document.location.protocol ? ‘https://ssl’ : ‘http://www’) + ‘.google-analytics.com/ga.js’;
var s = document.getElementsByTagName(‘script’)[0]; s.parentNode.insertBefore(ga, s);
})();

</script>

После этого нужно создать фильтр в Google Analytics и добавить его к профилю сайта. Параметры фильтра:

  • FILTER_NAME/Название фильтра: wp_administrator;
  • Filter Type/Тип фильтра:
    Custom filter/Пользовательский фильтр -> Exclude/Исключить,
    Filter Field/Поле фильтра -> User-defined/Определено пользователем,
    Filter Pattern/Шаблон фильтра -> wp_administrator,
    Case-sensitive/С учетом регистра -> No/Нет.

После обновления данных на Google Analytics в меню Visitors/Пользователи -> Custom Variables/Переменные, заданные пользователем будет отображаться статистика по посещению сайта именно администраторами.

Рубрика: Техно | Добавить комментарий