Игорь Олемской — практические заметки по системному администрированию Linux CentOS

Архив тега ‘Несортированное’

VoIP трафик (перепечатка)

Комментариев нет

Ставил на сервер с Asterisk мониторилку munin, решил поглядеть на графики. Забавно смотрится график с трафиком. Примерно такая же картинка на осциллографе если на вход подать НЧ сигнал, тот же микрофон.

Дело было вечером. (перепечатка)

Комментариев нет

делать было нечего... друзья запускали новый офис в ноябрьские праздники, позвали на подмогу. вот собстна мои «пять копеек»

На фото часть стойки с коммутационным оборудованием, патч панели, кабельные органайзеры и свитчи. Провайдерский Dlink DES-1228, ядро сети гигабитный Allied Telesis AT-8000GS/24 и аксесный свитч для админов Allied Telesis AT-8000s/24. Здание большое, т.ч. решено было вынести остальные патч панели иаксесные свитчи (тоже элайед телесис) в настенные боксы 6U.

А это сервера.

Супермикра сверху 6016 , два 56хх ксона в сумме 8 ядер, 16 гиг озу, четыре диска в RAID10 – сервер под вирутализацию. MS Hyper-V и несколько гостевых Windows 2008.
следующая супермикра 5015 под IP-PBX Asterisk, кто не знаком поясню, это VoIP-ная мини АТС.
следом какой-то Intel под роутер. Самый последний 2U Supermicro, какой-то древний серверок битком набитый дисками, под файлопомоку и бакапный сторадж.

а на рабочих местах вот такие тонкие клиенты HP t5000

Довольно интересный проектик в плане оборудования, думаю некоторе количество фоток опубликую как руки дойдут. Из интересного IP-DECT от KIRK.

memcached on CentOS 5 (перепечатка)

Комментариев нет

при попытке установить memcached на CentOS 5 получаем ошибку:

  --> Missing Dependency: perl(Net::SSLeay) >= 1.33 is needed by package perl-AnyEvent-5.240-1.el5.rf.noarch (rpmforge)
Error: Missing Dependency: perl(Net::SSLeay) >= 1.33 is needed by package perl-AnyEvent-5.240-1.el5.rf.noarch (rpmforge)

решаем проблему так:

rpm -qa | grep perl-Net-SSLeay | xargs rpm -e
rpm -qa | grep perl-IO-Socket-SSL | xargs rpm -e
wget http://packages.sw.be/perl-Net-SSLeay/perl-Net-SSLeay-1.36-1.el5.rfx.i386.rpm
wget http://packages.sw.be/perl-Net-SSLeay/perl-Net-SSLeay-1.36-1.el5.rfx.x86_64.rpm
wget http://packages.sw.be/perl-IO-Socket-SSL/perl-IO-Socket-SSL-1.34-1.el5.rfx.noarch.rpm
rpm -ivh perl-Net-SSLeay-1.36-1.el5.rfx.x86_64.rpm
rpm -ivh perl-Net-SSLeay-1.36-1.el5.rfx.i386.rpm
rpm -ivh perl-IO-Socket-SSL-1.34-1.el5.rfx.noarch.rpm

Теперь устанавливаем

yum -y install memcached

включаем автостарт

chkconfig memcached on

Закрываем memcached от внешнего мира

iptables -A INPUT -p tcp --dport 11211 -j DROP
iptables -A INPUT -p udp --dport 11211 -j DROP
iptables-save > /etc/sysconfig/iptables

У добавляем функционал в php

yum install libmemcached-devel
yum install libmemcache-devel
/usr/local/bin/pecl install memcache
/usr/local/bin/pecl install memcached
echo "extension=memcache.so" >> /usr/local/Zend/etc/php.ini
/etc/init.d/httpd restart

Supermicro разочаровывает. (перепечатка)

Комментариев нет

Новенький одноюнитовый сервер Supermicro 6016 проработал три дня и сдох... сдохла видеокарта.
какой-то двухгодовалый Supermicro 2U подохли все сетевые контроллеры, еще один такойже, сдох блок питания.

как-то доверие к ним терять начинаю...

static routes pushed through DHCP (перепечатка)

Комментариев нет

Моя домашняя сеть находится в 192.168.1.0/24, а голос вынесен в подсеть 192.168.0.0/24.
доступ «в мир» роутится через 192.168.1.1 а в голос через 192.168.1.111 (да вот захотелось мне так).
Домашние машины получают ip адреса из подсети 192.168.1.0/24, а айпифоны из подсети 192.168.0.0/24

соответственно по дефолту машины не могут получить доступа к фойсовым аппаратам (ATA и IP фоны), прописывать на каждой машине статик роуты, я считаю моветоном. К счастью, не я один так считаю и есть rfc3442 позволяющий с DHCP сервера передавать клиентам статичные маршруты.

итак настроим dhcp сервер давать статик роут на сеть 192.168.0.0/24 через 192.168.1.111

option ms-classless-static-routes code 249 = array of unsigned integer 8;
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;

option ms-classless-static-routes 24, 192,168,0, 192, 168, 1, 111;
option rfc3442-classless-static-routes 24, 192,168,0, 192, 168, 1, 111;

Так как Microsoft компания новатор, срать ей хотелось на RFC. По этому в приведенном выше конфиге присутствуют ms-classless строки. Если у вас в сети нет windows машин, то можно их не уазывать.

На сервере делаем service dhcpd restart, а на клиенте /etc/init.d/networking restart и на клиенте получим:

shakirov@work:~$ route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     1      0        0 eth0
192.168.0.0     192.168.1.111   255.255.255.0   UG    0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 eth0

справедливо это для Ubuntu на клиенте, говорят что в других дистрибутивах нужно в /etc/dhcp3/dhclient.conf добавить:

option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;

И в том же файле в поле request добавить параметр rfc3442-classless-static-routes; выглядеть в итоге должно так:

option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;

send host-name "<hostname>";
request subnet-mask, broadcast-address, time-offset, routers,
    domain-name, domain-name-servers, domain-search, host-name,
    netbios-name-servers, netbios-scope, interface-mtu,
    rfc3442-classless-static-routes, ntp-servers;

И еще, если нет, то надо создать файл /etc/dhcp3/dhclient-exit-hooks.d/rfc3442-classless-routes

RUN="yes"

if [ "$RUN" = "yes" ]; then
        if [ "$new_rfc3442_classless_static_routes" != "" ]; then
                if [ "$reason" = "BOUND" ] || [ "$reason" = "REBOOT" ]; then
                        rfc_routes=($new_rfc3442_classless_static_routes)

                        for(( i=0; i < ${#rfc_routes[@]}; )); do
                                net_length=${rfc_routes[$i]}

                                ((i++))

                                net_address=(0 0 0 0)
                                for(( j=0; j < $[$net_length / 8 + \
                                    ($net_length % 8 ? 1 : 0)]; j++, i++)); do

                                        net_address[$j]=${rfc_routes[$i]}
                                done

                                gateway=(0 0 0 0)
                                for (( j=0; j < 4; j++, i++ )); do
                                        gateway[$j]=${rfc_routes[$i]}
                                done

                                old_IFS="$IFS"
                                IFS='.'

                                if [ "$net_length" == "32" ]; then
                                        /sbin/route add -host "${net_address[*]}" gw "${gateway[*]}"
                                else
                                        /sbin/route add -net "${net_address[*]}/$net_length" gw "${gateway[*]}"
                                fi
                                IFS="$old_IFS"

                        done
                fi
        fi
fi

Ну и конечно сделать его исполняемым.

кстати, если нужно передать несколько статичных маршрутов клиентам, то перечислять их надо через запятую, примерно вот так:

option ms-classless-static-routes       24, 192,168,0, 192,168,1,111, 16, 172,16, 10,16,40,100;
option rfc3442-classless-static-routes 24, 192,168,0, 192,168,1,111, 16, 172,16, 10,16,40,100;

И на последок, если используете OpenWRT и сервер dnsmasq, то вам приголится мануал http://www.debian-administration.org/articles/471

Monitoring Adaptec RAID controller under Ubuntu (перепечатка)

Комментариев нет

Для мониторинга RAID массива построенного на контроллере Adaptec крайне удобно использовать утилиту arcconf.
нативно адаптек дает пакет для RHEL/SCO/FreeBSD/Windows .deb пакетов в этом списке нет. Понадобилось поставить на Ubuntu 10.04, ставить будем так:

wget -c -q http://download.adaptec.com/raid/storage_manager/asm_linux_x86_v6_40_18530.rpm
sudo alien --scripts asm_linux_x86_v6_40_18530.rpm
sudo dpkg -i storman_6.40-18531_i386.deb
sudo ln -s /usr/StorMan/libstdc++.so.5 /usr/lib
sudo /usr/StorMan/arcconf GETCONFIG 1

Controllers found: 1
----------------------------------------------------------------------
Controller information
----------------------------------------------------------------------
   Controller Status                        : Optimal
   Channel description                      : SAS/SATA
   Controller Model                         : Adaptec 3405
   Controller Serial Number                 : 7C2110BD45E
   Physical Slot                            : 3
   Temperature                              : 55 C/ 131 F (Normal)
   Installed memory                         : 128 MB
   Copyback                                 : Disabled
   Background consistency check             : Enabled
   Automatic Failover                       : Enabled
   Stayawake period                         : Disabled
   Spinup limit internal drives             : 0
   Spinup limit external drives             : 0
   Defunct disk drive count                 : 0
   Logical devices/Failed/Degraded          : 1/0/0

HP iLo self signed sertificate (перепечатка)

Комментариев нет

Есть у меня пара HP ProLiant DL360-ых, которые оснащены iLO (это ip-kvm, power management и многое другое через вебморду). так вот, и у того и у другого оказался сертификат с одним и тем же серийником. как следствие firefox не давал зайти.

Покупать ssl сертификаты для iLO на мой взгляд глупо, по этому решено было сгенерить self signed

openssl genrsa -out ca.key 1024
openssl req -new -x509 -days 365 -key ca.key -out ca.pem -subj /CN=ilo.server.com/O=Company/C=RU

теперь из Administration -> Certificate Administration делаем «Generate a certificate request» и полученный ключ Certificate Signing Request кладем в ilo-server1.csr ну и подписываем его:

openssl x509 -req -days 365 -in ilo-server1.csr -CA ca.pem -CAkey ca.key -set_serial 01 -out ilo-server1.crt

для второго сервера из того же Administration -> Certificate Administration делаем «Generate a certificate request» и полученный ключ Certificate Signing Request кладем в ilo-server2.csr и подписываем его тем же ключом но с другим серийником:

 openssl x509 -req -days 365 -in ilo-server2.csr -CA ca.pem -CAkey ca.key -set_serial 02 -out ilo-server2.crt

полученные ilo-server1.crt и ilo-server2.crt вставляем в форму на следующем шаге Certificate Administration, а именно на Step 3. Import Certificate.

отобразить конфиг без комментариев (перепечатка)

Комментариев нет

Иногда нужно посмотреть конфиг не перегружая внимание чтением комментариев, я это делаю так:

grep -v -E "^;|^$" /usr/local/lib/php.ini

или так:

 grep -v -E "#|^$" /usr/local/apache2/conf/httpd.conf

Хочу уточнить относительно отличий ^# и #. Первое это все строки начинающиеся с #, второе все строки содержащие #.

перенаправление stdout и stderr (перепечатка)

Комментариев нет

Коротко и ясно расскажу о пере направлении stdout и stderr. stdout это нормальный вывод, stderr это ошибки.

[root@shakirov ~]# ls /opt/ /blah
ls: /blah: Нет такого файла или каталога
/opt/:
firebird  iso  lost+found

красным выделен stderr, а синим stdout. По умолчанию в output отправляется и stdout и stderr.


перенаправления stdout в /tmp/stdout используйте конструкцию:

[root@shakirov ~]# ls /opt/ /blah > /tmp/stdout
ls: /blah: Нет такого файла или каталога

для перенаправления stderr в /tmp/stderr используйте конструкцию:

[root@shakirov ~]# ls /opt/ /blah 2> /tmp/stdout
/opt/:
firebird  iso  lost+found

Для перенаправления sterr и stdout в файл /tmp/all используйте конструкцию:

[root@shakirov ~]# ls /opt/ /blah > /tmp/all 2>&1

Есть вариант когда stderr и stdout отправляются в output и в файл. Это удобно для отладки интерактивных скриптов. Делается это через tee.

[root@shakirov ~]# ls /opt/ /blah 2>&1 | tee /tmp/all
ls: /blah: Нет такого файла или каталога
/opt/:
firebird  iso  lost+found

ну и пара практических вариантов, отправка stdout и stderr на электронную почту:

[root@shakirov ~]# ls /opt/ /blah 2>&1 | mail root@localhost

скрытие сообщений об ошибках:

[root@shakirov ~]# ls /opt/ /blah 2> /dev/null

qmail smart relaying (перепечатка)

Комментариев нет

в одной из статей я описывал как настроить рлеинг исходящей почты через другой сервер. сейчас опишу как это сделать если используется Qmail.

echo ":mxr.domain.com" > /var/qmail/control/smtproutes

где mxr.domain.com это наш релей.
после чего делаем рестарт qmail. например /etc/init.d/qmaild restart