среда, 30 октября 2013 г.

cron и mail - attachment вместо body

Скидываю на мыло некий лог (в кот. есть кириллица).
Отрабатываю из консоли - все ок, приходить письмо с логом в теле.
Сую в крон - текста нет, зато есть аттач.

Прикинул, что mail почему-то считает ввод бинарным. Видимо из-за нестыковок локалей.
Решил проблему добавлением в крон локали:

LANG=ru_RU.UTF-8
LANGUAGE=ru
LC_CTYPE=ru_RU.UTF-8
CONTENT_TYPE="text/plain; charset=utf-8"

0 19 * * * /root/logparse.pl | mail -r noreply@blabla.ru -s "Login report" mail0@gmail.com mail1@gmail.com; echo > /var/log/my.log

пятница, 18 октября 2013 г.

Чиним сломанный сайт

Клиенту сайт поломали. Открывается ппц долго. Решили перед тем, как бекап отдать, сами посмотреть.
Итак - начинаем с предположения, что при запуске пых процесса он коннектится куда-то.

1. Запускаю курлом хит по сайту, на серваке делаю ps aux с грепом по юзеру и netstat -lntp | grep php. Да, куда-то ломится - на 192.151.154.180 По адресу видимо искать смысла нет, в коде наверняка хостнейм. Для очистки совести греп по жумле - нету такого.

2. Ок, давайте найдём хостнейм. Запускаем tcpdump -nnt -A port 53 > dnslog и опять жмакаем по сайту. Отлично, в полученном логе по адресу находим хостнейм.
 IP 188.xx.xx.133.53 > 188.xx.xx.21.46260:  951 2/2/4 A 192.151.154.180, (206) api.ipinfodb.com

3. Грепаем по хостнейму файло - находим занятный файлик /home/cpxxxxxx/public_html/libraries/joomla/plugin/qdh1ym.php. В нём, среди прочих няшек, упоминается ещё один: /home/cpxxxxxx/public_html/includes/thx7r.txt

4. Муваем файлики, жмакаем по сайту - открылся сразу, но с ошибкой require. Комментим этот require - сайт работает )

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

вторник, 20 августа 2013 г.

Apache: Cannot create SSLMutex Configuration Failed

Подняли, блин, под утро..  Апач упал, при запуске в лог:
[error] (28)No space left on device: Cannot create SSLMutex Configuration Failed
Семафоры надо дропнуть:

ipcs -s | grep http| awk '{print $2}' > sema
for a in `cat sema`;do ipcrm -s $a;done

четверг, 15 августа 2013 г.

Вставки sed'ом

Вставить пару строк в начало:
sed  -i '1iWorkDir: \/var\/www\/mrtg\/\nOptions[_]: growright, bits' sw1.example.ru.cfg
Вставить строчку после определённой:
sed -i '/^prog=nginx/i ulimit -n 16384'  /etc/init.d/nginx

понедельник, 3 июня 2013 г.

cpanel backup config file

Ха, грепал, грепал и нагрепал )
/etc/cpbackup.conf

четверг, 30 мая 2013 г.

tshark and port 3333

Офигенный прикол - если дампить трафик tshark с параметрами
tshark -l -i p33p1 -f 'port 3333' -T fields -e frame.date -e frame.time -e ip.src -e ip.dst -e tcp.srcport -e tcp.len -e data
то акула не покажет содержимое пакета дальше tcp хедера.
Оказалось, что она резолвит порт 3333 в протокол ENTTEC и выводит содержимое пакета только при указании полей  enttec.

Решается путём запрета резолва протокола enttec в конфиг файлике )
Походу, справедливо для всех известных протоколов

среда, 22 мая 2013 г.

debian и pxe

У дебиан свой путь, корявый.
Скачав и запихнув на pxe образ Netinstall и загрузившись с него получаем требование запихать CD.

Вспомнил, что для загрузки нсталлера по сети у них есть штука под названием netboot:
http://ftp.nl.debian.org/debian/dists/wheezy/main/installer-amd64/current/images/netboot/

Из неё нам нужны ядро и инитрд:

 debian-installer/amd64/initrd.gz
 debian-installer/amd64/linux

среда, 15 мая 2013 г.

IBGP между EX4200 через VLAN

В общем, надо было IBGP поднять между 2 шасси из EX4200. Линк - агрегейт, на котором куча транков висит.
Почитал маны, везде пишут, что надо пиринговый адрес вешать на loopback интерфейс. Однако упоминается, что можно юзать и обычный иннтерфейс, но надо указать router-id.

Сделал так:

Router A:

Влан для пиринга:
set vlans internal-bgp description internal_bgp vlan-id 110
set vlans internal-bgp l3-interface vlan.110

RVI:
set interfaces vlan unit 110 family inet address 10.0.110.1/24
set interfaces vlan unit 110 description Internal_BGP_RVI

Прицепить тег на порт между VC:
set interfaces ae61 unit 0 family ethernet-switching vlan members internal-bgp

Определяем id роутера, дабы не полагаться на дефолт:
set routing-options router-id 10.0.110.1

Разрешаем адрес пира для коннекта по бгп:
set policy-options prefix-list pl-bgp-peers 10.0.110.2/32

Сессия, пока всё режектим (политику po-deny-all не привожу, и так ясно):
edit protocols bgp group ibgp_peers
set type internal
set local-address 10.0.110.1
set neighbor 10.0.110.2
export po-deny-all
import po-deny-all
Закоммитили.

Router B:

Всё тоже самое, только адреса свопаются.
Влан для пиринга:
set vlans internal-bgp description internal_bgp vlan-id 110
set vlans internal-bgp l3-interface vlan.110

RVI:
set interfaces vlan unit 110 family inet address 10.0.110.2/24
set interfaces vlan unit 110 description Internal_BGP_RVI

Прицепить тег на порт между VC:
set interfaces ae61 unit 0 family ethernet-switching vlan members internal-bgp

Определяем id роутера, дабы не полагаться на дефолт:
set routing-options router-id 10.0.110.2

Разрешаем адрес пира для коннекта по бгп:
set policy-options prefix-list pl-bgp-peers 10.0.110.1/32

Сессия, пока всё режектим (политику po-deny-all не привожу, и так ясно):
edit protocols bgp group ibgp_peers
set type internal
set local-address 10.0.110.2
set neighbor 10.0.110.1
export po-deny-all
import po-deny-all
Закоммитили.

Проверили сессию, увидели, что поднялась.
Ну а дальше - на одном конце делаем политику на экспорт нужных сетей, на втором - политику их импорта и наоборот.
Примерно так (эспорт с b, приём на a):
router-a# set protocols bgp group ibgp_peers import po-internal-bgp-receive
router-b# set protocols bgp group ibgp_peers export po-internal-bgp-announce

Экcпорт роутера B:
> show configuration policy-options policy-statement po-internal-bgp-announce
term a {
    from {
        prefix-list-filter pl-internal-bgp exact;
    }
    then accept;
}
term b {
    then reject;
}

В pl-internal-bgp перечислены префиксы сетей.

Импорт роутера A:
> show configuration policy-options policy-statement po-internal-bgp-receive
term a {
    from {
        prefix-list-filter pl-internal-bgp-receive exact;
    }
    then {
        preference 100;
        accept;
    }
}
term b {
    then reject;
}

pl-internal-bgp-receive - список принимаемых префиксов.
Приоритет меняем, чтобы в эти сети ходить напрямую, а не через дефолт, получаемый по бгп от провайдера (приоритет 170).

Смотрим, что сети получены )

onapp: поиск lvm виртуалки

Надо найти лвмку в onapp, чтобы поправить на диске кой-чего, владелец виртуалки себе что-то прострелил.

Нашли машинку, в ней диск, в описании диска - номер и сторадж
Дальше лезем в БД:

mysql> use onapp
mysql> select * from disks where id = '1913'\G  
*************************** 1. row ***************************
                id: 1913
virtual_machine_id: 1002
     data_store_id: 12
         disk_size: 21
        identifier: gskrjjn1ydypz7
        created_at: 2013-03-03 05:54:14
        updated_at: 2013-03-10 05:42:55
           is_swap: 0
             built: 1
            locked: 0
           primary: 1
    disk_vm_number: 1
       mount_point: NULL
add_to_linux_fstab: NULL
1 row in set (0.00 sec)

identifier - название, собственно, нужного лвма. Лезем на сторадж, кот. нам уже известен и можно ковырять лвмку.

понедельник, 22 апреля 2013 г.

Хватает же наглости

Сегодня один клиент с хостинга пожаловался. Что у него спам до яху не доходит. Совсем обнаглели. Сами на лок напрошиваются )

среда, 20 февраля 2013 г.

Bind: journal out of sync with zone

Внезапно одна зона пропала. Полез на ДНС, в журнале по этой зоне мельтешат мессаги:
zone xxxxxxxx.ru/IN: journal rollforward failed: journal out of sync with zone

Поковырялся с серийником в файле зоны - то же самое.
Решил проблему удалением журнала зоны, лежал рядом с файликом зоны, и релоадом.

Зона сразу всосалась, раздалась слейву, всё пофиксилось

вторник, 19 февраля 2013 г.

Апач - аутентификация и исключение по адресу

Пускаем без пароля с наших акков, все остальные только с паролем.

<VirtualHost xxx.xxx.118.4:80>
.........
<Directory /var/www/html/munin>
        Order deny,allow
        Deny from all
        AuthType Basic
        AuthName "Restricted Resource"
        AuthUserFile /etc/httpd/htpasswd
        Require valid-user
        Allow from xxx.xxx.212.0/24
        Allow from xxx.xxx.98.210/32
        Allow from xxx.xxx.224.67/32
        Satisfy Any
</Directory>
.......
</VirtualHost>

понедельник, 18 февраля 2013 г.

Паттерны обфусцированного пыххлама

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

"e\166\141\154\050b\141\163\145\066\064\137\144\145\143\157\144\145\050"
"\145\166\141\154\050\142\141\163\145\066\064\137\144\145\143\157\144\145\050\163\164\162\162\145\166\050"
"\051\051\073"
"eval(base64_decode(strrev("
"eval(base64_decode("
"strrev('edoced_46esab');eval"

четверг, 14 февраля 2013 г.

FreeBSD SATA hotswap

Надо было наживую подцепить саташный диск во фряхе. Воткнул - не видно. Пошаманил с atacontrol - не видно. Стало грустно и пошёл есть. Коллеги за это время таки добили диск. Итак, последовательность действий, чтобы фряха увидела сата диск,  поставленый на живую:

0. Вынуть этот диск
1. Сделать детач нужного канала (ataconfig detach ata6)
2. Запихать диск
3. Сделать аттач канала (ataconfig attach ata6)

четверг, 7 февраля 2013 г.

Про бюрократию и эффективность в отдельной конторе

Ну вот и у нас развели бюрократию. Собираемся, ругаемся, получаем люлей, объясняем, почему не выполнена пятилетка за три года и т.д. По сути - просто тратим время. На всех собраниях просто сидишь, слушаешь отчёты начальству своих коллег, из которых интересно послушать только девов и ТП, остальное - продажи, непродажи, маркетинги и акции к моей работе вообще мало относятся. Потом доходит дело до меня, говорю "сделал, не сделал, не сделал, ...,ну потому,..., не я не ненавижу всех и не хочу убить всех людей"
Ещё была задумка в в том, что на этих сборищах разные отделы могли поинтересоваться друг у другу: "Ну что у нас там с subj?!". И если ничего - то типа попросить всё-таки сделать.
На практике оказалось, что всё это бесполезно. Мои просьбы к двум коллегам не были услышаны в течении 2х недель и как-то всё это замялось ими.
Самое клёвое - раньше была доска с задачами, которые по мере возможности выполняли. Теперь же есть недельный и квартальный планы, которые по идее составляем мы сами. В итоге вышло, что сверху в эти планы вставляются дополнительные вещи, а те задачи, которые ставим перед собой мы сами - надо развёрнуто обосновывать. Причём новые задачи накидываются по ходу недели и реакции на них требуют чуть ли не моментальной
В результате я теперь каждый день по полдня трачу на то, чтобы что-то где-то заполнить, отчитаться, объяснить и т.д. Остальное время съедает повседневная работа, которой довольно много и которую никто не отменял.
Приходится что-то делать, оставаясь сидеть в офисе на час-полтора и дома по выходным. Есть в этом что-то неправильное.

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


пятница, 1 февраля 2013 г.

Сетап ксеновпсок через virt-install

Debian:
virt-install -f /dev/mapper/vg_vm-ejab -p -r 512 -l "http://mirrors.cn99.com/debian/dists/Debian6.0.5/main/installer-amd64/" -n ejab

Centos:
virt-install -f /dev/mapper/vg_vm-otrs -p -r 4096 -l "http://mirror.yandex.ru/centos/6.3/os/x86_64/" -n otrs

вторник, 22 января 2013 г.

Не верьте переводам

Начал учить матчасть по оптике. А то кроме как - какие трансиверы купить, какое волокно проложить, какие  затухания допустимы - вроде и не знаю больше )
Нашёл какую-то аццкую книгу, оказалось офперевод какого-то известного труда.
Читаю, и вдруг смутил один параметр.  И так посчитал, и эдак, графики построил - не сходится и всё тут, наоборот. Убрал минус из формулы - всё хорошо. Нашёл оригинал на Амазоне, там формула указана верно, без минуса.

Так что перевод этот можно смело выкидывать ) а ведь издана каким-то техническим издательством ))