четверг, 29 декабря 2011 г.

Немного извращений с выдернутым сд

Потребовалось поставить в одном месте недосервачок-файлопомойку на бытовом компе. Но времени было от силы минут 10-15. И в качестве дистра был выбран gentoo.
Комп был загружен со своего zalman бокса, который умеет эмулировать двд, прямо на боксе выбирается образ, выбран livecd который install-x86-minimal

Проверили, что айпи выдан. Запомнили его, пробросили на роутере и ушли домой. Бокс был вытащен, не хочется рабочий инструмент оставлять непойми где.
Там автомонтируется раздел на squashfs, который частично сохраняется в памяти. И при грубом извлечении диска получили, что часть файлов у него в кэше, часть отсутствует. И это требует применения бубна.
Если кто так делает - надо перед извлечением вызвать основные команды, чтобы их закэшировало, это прежде всего mount, mkfs.ext3, ls, ifconfig, dd, fdisk/parted, wget/curl

Приехали домой, подключились, приступили.
Доки, которые лучше держать под рукой
quickinstall
Англ хэндбук. Крайне желательно использовать не русский, а этот!
полный хэндбук, рус

Для начала, разметим через parted диск. Хочу gpt.. :)
Было создано 3 раздела:
sda1 - /boot
sda2 - swap
sda3 - /

Активируем своп
mkswap /dev/sda2

Создадим lvm на /dev/sda3 с именем vg0-lvroot, и будет он в /dev/mapper/vg0-lvroot
Попытаемся создать раздел - mkfs.ext3 /dev/sda1, и тут ловим
Dec 28 23:49:09 livecd kernel: SQUASHFS error: Unable to read data cache entry [10cdf76]
Dec 28 23:49:09 livecd kernel: SQUASHFS error: Unable to read page, block 10cdf76, size ff3c

К счастью, тут нам может помочь parted ) Он умеет форматировать диски.
А вот с lvm хуже - он не понимает их и не может создать. Так что примонтируем sda1 и закачаем на него stage3, который нужен для дальнейшей установки, и попутно сделаем финт ушами: закачаем и подключим install-x86-minimal
(похоже, в 3.0 уже убрали создание раздела)
...
livecd / # mount /dev/mapper/vg0-lvroot /mnt/new/
livecd / # cd /mnt/new
livecd new # wget ...
Oops... не катит.
livecd new # curl "http://mirror.yandex.ru/gentoo-distfiles/releases/x86/current-iso/stage3-i686-20111213.tar.bz2" > stage3-i686-20111213.tar.bz2
livecd new # curl http://mirror.yandex.ru/gentoo-distfiles/releases/x86/current-iso/install-x86-minimal-20111213.iso > install-x86-minimal-20111213.iso

Закачали, подмонтируем и починим систему.
livecd new # mount -o loop install-x86-minimal-20111213.iso /mnt/cdrom/
livecd new # mount -o loop -t squashfs /mnt/cdrom/image.squashfs /mnt/livecd

В 2 маунта "оживили" систему, теперь можно отформатировать vg0-lvroot
livecd new # mkfs.ext3 /dev/mapper/vg0-lvroot

А теперь нам бы надо отмонтировать наш временный раздел, но мы снова потеряем squah-раздел, и уже может с нужными утилитами. Делаем финт ушами.

livecd new # mount /dev/mapper/vg0-lvroot /mnt/gentoo/
livecd new # mkdir /mnt/gentoo/boot
livecd new # mount -o bind /mnt/new /mnt/gentoo/boot
livecd new # ls /mnt/gentoo/boot/
install-x86-minimal-20111213.iso  lost+found  stage3-i686-20111213.tar.bz2
livecd new #

Впрочем, можно было сделать и так:
# mkdir /mnt/ram
# mkfs.ext3 /dev/ram15
# mount /dev/ram15 /mnt/ram
# cp /mnt/new/ins* /mnt/ram
Снова подключаем образ как сд, подключаем сквош-раздел. Хотя
# df -k /dev/ram15
Filesystem           1K-blocks      Used Available Use% Mounted on
udev                     10240       164     10076   2% /dev

говорит, что там всего 10 Мб. Надо сначала выгрузить модуль, подгрузить с опцией rd_size=... Но мне этого не требовалось.
И помним, что без монтирования реального диска ничего у меня бы не вышло - mkfs не закэширован был.

подробнее про ram диски

Продолжим.
livecd ~ # df -h
Filesystem            Size  Used Avail Use% Mounted on
tmpfs                 945M   32M  914M   4% /
/dev/sr0              130M  130M     0 100% /mnt/cdrom
/dev/loop0            102M  102M     0 100% /mnt/livecd
udev                   10M  164K  9.9M   2% /dev
tmpfs                 102M  102M     0 100% /mnt/livecd/lib/firmware
tmpfs                 102M  102M     0 100% /mnt/livecd/usr/portage
/dev/sda1             457M  270M  163M  63% /mnt/new
/dev/loop1            130M  130M     0 100% /mnt/cdrom
/dev/loop2            102M  102M     0 100% /mnt/livecd
/dev/mapper/vg0-lvroot
                       40G  177M   38G   1% /mnt/gentoo

Дальше работаем по хэндбуку - tar, chroot, обновление, загрузчик, ядро, службы на старте.

Небольшое уточнение: в кратком хэндбуке не все маунты прописаны. Надо:
# mount -t proc none /mnt/gentoo/proc
# mount -o bind /dev /mnt/gentoo/dev
Иначе после чрута нет /dev

---
До этого особо с parted работать не доводилось.. За форматирование конечно спасибо, но тупой он - это нечто. Автоотступ от начала диска? Ой, а я не умею. Создать раздел сразу за текущим? Извините, я слишком туп. Хотя бы формат +2G? А это как?

12 заблуждений сетевого администратора

http://habrahabr.ru/blogs/sysadm/122145/

1. Комментировать изменения в конфигах — не нужно. На память вы не жалуетесь, amiright?
2. QoS — не нужен. Всегда проще купить канал, заведомо превышающий потребности компании.
3. Бессмысленно проверять возможность удаленного управления оборудованием перед отправкой в удаленный офис.
Вы — профессионал и не могли ошибиться в настройке такой элементарной функции.
4. Устная договоренность с сетевиками ISP является полноценной разновидностью SLA.
5. Сертификация — незначима. Экзамены всегда можно сдать с помощью дампов.
6. Прямой доступ через serial к оборудованию — анахронизм. IP-интерфейс — удобнее.
7. С системой мониторинга должен работать соответствующий отдел. Сотрудники там опытные, разберутся, что к чему.
8. Во внутренних маршрутах никогда не будет более 15 хопов.
9. Остановка работы компании из-за разрыва линка со стороны ISP — не ваша вина.
10. Одного гигабитного линка будет достаточно для всех.
11. Никто никогда не соединит 2 сетевые розетки патчкордом. Зачем это делать?
12. Какой смысл ставить 2 маршрутизатора в ядре, если загрузка одного менее 50%?

Со многим согласен, в частности "com-порт не нужен". Действительно, зачем нам ком-порт, если мы угробили например прошивку и нам нужно её восстановить, для чего надо попасть в pre-boot mode? Или просто убили конфиг и айпи нет ни на одном интерфейсе. (если кто не понял - я это считаю заблуждением).
Хотя похоже, скоро может стать стандартом usb, на том же huawei уже есть клиентский порт (miniusb). Пока никак не заявленный, но как сказали на их тренинге, что-то на тему перехода было. При этом не отменяя com. Хотя смысл непонятен:
1) для кома никаких драйверов не надо. Подключайтся любым терминалом, выставляй скорость порта и работай. Для усб - вышла винда 9, а эта железка больше не поддерживается. Всё, в пролёте. Плюс очень вероятная закрытость этих самых драйверов, что приведёт к сложности их отладки и на ранных версиях - возможны бсоды на виндовых управляющих машинах. Итд.
2) Насколько я знаю, макс длина для ком-хвоста 100м. Для усб - макс 5 без активных повторителей. А 20 повторителей работать не будут.
3) во многих чипах com аппаратный, что не грузит и без того обычно слабый проц плюс его можно включать в режиме отладки. Тогда как usb всегда программный.
Минус кома только 1 - низкая скорость. Обычно требуется 9600, и залить по нему прошивку пусть в 20мб - процесс, который может растянуться на часы. usb 2.0 - 30мб/с и упираемся только в скорость флэша.

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

вторник, 20 декабря 2011 г.

Автоматическая настройка vlan-ов при старте

centos

Для начала, надо проверить, что стоит пакет vconfig

Настройки пишутся в /etc/sysconfig/network-scripts/ifcfg-*
Есть варианты через vlanX и ethX.Y

vlanX
ifcfg-vlanX

VLAN=yes
VLAN_NAME_TYPE=VLAN_PLUS_VID_NO_PAD
DEVICE=vlan10
PHYSDEV=eth0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=10.10.10.2
NETMASK=255.255.255.252

ethX.Y
ifcfg-ethX.Y

VLAN=yes
DEVICE=eth0.10
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=10.10.10.2
NETMASK=255.255.255.252

Взято отсюда, комментарии там же.

понедельник, 19 декабря 2011 г.

apache mod_vhost_alias

Есть такой модуль у апача, mod_vhosts, хорош для массхостинга, а также для программерских серваков: для добавления сайта достаточно создать каталог.

Но есть нюансы:
1) проблемы с mod_rewrite, лечится в .htaccess строкой RewriteBase /
2) Проблема с DocumentRoot, равным корневому каталогу. Тут чуть сложнее, надо писать скрипты-обработчики.

Наш скрипт для перла (года так 2007)
# Author Andrey Ivanov
#include <stdio.h>
#include <unistd.h>
#include <string.h>

int main(int argc, char *argv[], char *envp[])
{
        int i=0, dr=-1, sn=-1;
        char *foo;

        while(envp[i]!=NULL)
        {
                if (strstr(envp[i], "DOCUMENT_ROOT")==envp[i]) dr=i;
                if (strstr(envp[i], "SERVER_NAME")==envp[i]) sn=i;
                i++;
        }

        if (sn!=-1 && dr!=-1)
        {
                foo=strchr(envp[sn]+12, '.');
                if(foo) *foo=0;
                sprintf(envp[dr], "DOCUMENT_ROOT=/var/www/%s/site/htroot", envp[sn]+12);
        }

        execve("/usr/local/bin/perl5.8.8", argv, envp);

        return(0);
}
Скомпилированый файл называется perl и кладется в /usr/local/bin/, заменяя старый симлинк.

Для пхп есть например такой метод

php_admin_value auto_prepend_file /path/setdocroot.php

<?php apache_setenv("DOCUMENT_ROOT",$_SERVER['DOCUMENT_ROOT'] = str_replace($_SERVER['SCRIPT_NAME'], '', $_SERVER['SCRIPT_FILENAME'])) ?>
отсюда

$l = explode("/",$_SERVER['SCRIPT_FILENAME']);
$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"] = implode("/",Array( $l[0], $l[1], $l[2], $l[3], $l[4]));
С хабра.

"Что касается проблем с $_SERVER['DOCUMENT_ROOT'] и RewriteBase, примечательно, что такие же проблемы есть и при реализации виртуальных хостов с помощью mod_rewrite. Не смотрел исходники vhost_alias, но такое чувство, что он с помощью mod_rewrite и реализован."
Оттуда же. Линк потерян, сорь.

debian: pvcreate /dev/xvdb -su: pvcreate: command not found

# pvcreate /dev/xvdb
-su: pvcreate: command not found

Причина проста: штатно нет утилит для lvm

# apt-get install lvm2

# pvcreate /dev/xvdb
Physical volume "/dev/xvdb" successfully created

вторник, 13 декабря 2011 г.

Разбираемся с сертификатами

Теория
теория-2
Много теории
Проверка подлинности цифровых сертификатов в инфраструктуре Windows PKI

Вики
SSL
OpenSSL

Проверка .crt руками
openssl verify -CAfile company.ru-ca.crt client3.crt
-CAFile может быть опущен, если проверяем честный сертификат.

Проверка SSL сертификата из командной строки

php fpm

Что есть php-fpm и зачем оно нужно

fastcgi process manager

Работа через mod_php имеет особенности - все скрипты исполняются от пользователя апача (www, www-data, apache), и даже для 1000 сайтов рабочих процессов php относительно немного и равно количеству воркеров апача. Минусы - каждый воркер ест в среднем 150Мб памяти, и нет разделения доступа. С доступом можно решить через всякие suexec, но это порой немалое снижение быстродействия.
PHP, запускаемый как CGI (не FastCGI!) – страшный атавизм. Быть такого не должно.
Чем такая схема плоха. Если в двух словах – на каждое обращение к php-скрипту запускается новый процесс интерпретатора PHP. Все это работает очень медленно, производительность сайта будет крайне низкой.
Можно запустить под каждого пользователя по fastcgi-процессу, 1 или даже нескольким. Расход памяти на процесс будет меньше, но если создать по 2 процесса на 1000 сайтов - это 2000 fastcgi процессов. Немало.
В этом случае помогает fpm - он управляет fastcgi процессами, при этом их достаточно небольшое количество и создание не такая проблема. Хотя по-моему, актуально скорее для масс-хостиинга -- для больших проектов с единичными сайтами на сервер достаточно простого fastcgi.

Как выбрать по-настоящему хороший хостинг (пара строк взята оттуда)
Nginx + php-fpm на CentOS 5.3
Centos5.5 Nginx 0.8.33 + PHP5.3.1(fpm) + MySQL5.5.0(phpmyadmin) — полная настройка для начинающих — 1 часть
Установка и настройка: Nginx + php5-fpm на debian

понедельник, 12 декабря 2011 г.

SVN: некоторые особенности

Тэги

В свн тэг - это не метка на определённую ревизию, а самый обычный бранч, который делается через svn copy. Об этом надо помнить, особенно после работы с другими системами, где термины схожи, но суть разная.
Это означает некоторые особенности в работе:
1) Метки можно менять. И меняться они будут независимо от бранча. Считается неправильным, но часто применяется "пофиксить прямо сейчас";
2) Можно сделать багофикс в метке и влить его в транк;
3) если права доступа установлены индивидуально для директорий, то метка эти права не наследует;
4) трудно узнать, в какие метки вошёл файл (то же для директории);
5) если из метки создать рабочую копию и зафиксировать из этой рабочей копии какие-либо изменения, то это изменит саму метку, а не те данные, которые были помечены. Правильным способом работы «от метки» является создание рабочей копии не из метки, а из того, что является источником этой метки.

Часть информации скопирована из вики

Свойства

Такое впечатление, что свойства появились сильно позднее - работа с ними через костыли. Поиска по свойствам нет, фильтров нет, вывод свойств svn proplist - только на отдельные объекты. Штатно не сделать вывод всех директорий, для которых установлен svn:ignore, со значениями.

На самом деле со свойствами много непоняток.
Крайне неудобно, что нельзя задать в маски строки вида */*/*links.db - оно просто не работает.
svn status verbose не показывает изменения атрибутов. Точнее, М покажет, но изменился сам файл или ему поменяли какое-то свойство - непонятно.
Установка svn:executable и некоторых подобных меток нелогична, и в оф доке ни намёка как правильно делать. Суть в том, что должно быть 3 аргумента, а у нас есть только 2: имя свойства, значение свойства, файл. А какое тут значение? А любое: ON, yes, 1... Так что писать так:
svn propset svn:executable yes /path/to/file. И ещё момент: этот бит не выставляется на каталоги, только на файлы.
!!! Если делаем svn propset svn:ignore -- тут надо внимательнее вписывать первый аргумент, потому что написав "svn propset svn:ignore ON tmp/" в игнор будет записан ON, поэтому надо вписывать \* (со слэшем, чтобы шелл не перехватил)

Особенности с операциями
Добавление файлов и каталогов. Сделав svn add dir/ добавит не только этот каталог, но и всё в нём. Чтобы добавить только его (например, чтобы проставить игнор), добавлять надо так: svn add -N dir/ . Если же было по ошибке добавлено без -N, снять добавление (до коммита) можно через svn revert dir, это не тронет его содержимое, но снимет метку добавления. Но если что-то внутри локально было исправлено - тоже откатит, поэтому надо быть аккуратным и revert-ить только лишнее. Или заранее сделав бэкап, и если что-то откатило - вернуть потом на место. А вот если уже так и закоммитили -- можно сделать svn up -r xxx (на предыдущую), а потом как-то зафиксировать так.. но проще скопировать, сделать svn rm dir, коммит и вернуть файлы на место (rm их удалит при коммите). В общем, тут красивого решения не знаю. Реверта на конкретную версию нет.

Частичный коммит. Можно сделать svn ci subdir/ - это закоммитит только изменения в subdir, не затронув изменения выше.
Но также можно сделать svn up subdir - это обновит тоже только subdir, что может быть чревато - если менялось много файлов, у нас получится часть файлов ревизии 1, часть ревизии 2.. Привет странные ошибки.

Простое создание ветки
svn copy ^/trunk ^/branches/branch_name

"Да и никто не мешает сделать скрипт, наподобии:
svn copy ^/trunk ^/branches/%1

И вызывать его:
svn_branch НАЗВАНИЕ_ВЕТКИ"
отсюда

Стратегии использования svn

Для работы на svn-сервере есть команда svnlook, ей в частности можно посмотреть содержимое репы, информацию о ревизии итд.
svnlook info /path/to/repo - информация о последнем коммите
svnlook tree /path/to/repo - список файлов

Плюс для работы нужна утилита svnadmin
создание репы, проверка, дамп-рестор

И есть малоизвестная команда svnsync - создание зеркала реп

среда, 7 декабря 2011 г.

#7948: Назад к «окнам»

http://ithappens.ru/story/7948
"Сказка - ложь, да в ней намёк..."

И ведь на самом деле стоимость владения (TCO) линукса на рабочих местах зачастую даже выше.

понедельник, 28 ноября 2011 г.

/usr/bin/ld: cannot find -licui18n

При обновлении subversion вылезла ошибка
/usr/bin/ld: cannot find -licui18n

Для начала проверим, что этот icu вообще стоит
# pkg_info |grep icu
icu-4.8.1.1 International Components for Unicode (from IBM)


Как оказалось - достаточно было отключить в опциях static. С чем это связано - не было времени разбираться.

Да, лучше сразу обновить модули expat, gdbm, sqlite3.

Включаем SSI

Это делается весьма просто: в .htaccess или конфиг сайта
Optins +Includes
(через mod_include)
или ставим perl CGI::SSI
Также есть Apache::SSI

Но первый вариант самый простой.

четверг, 24 ноября 2011 г.

Почему не стоит использовать make install

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

netapp: FlashCache

FlashCache. Как использовать Flash в СХД НЕ как SSD?

bitrix

Настройка и оптимизация сервера на Debian

Курсы
http://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=3&INDEX=Y

среда, 23 ноября 2011 г.

perl: Формирование названия пакетов

Отдельно идёт LWP::* - оно в пакете libwww

FreeBSD:
p5-{}, :: заменяется на -, регистр не меняется
Примеры:
DBD::mysql p5-DBD-mysql

LWP::* p5-libwww

CentOS:
perl-{}, :: заменяется на -, регистр не меняется
Примеры:
DBI perl-DBI
DBD::mysql perl-DBD-MySQL

LWP::* perl-libwww-perl

Debian:
lib{}-perl, :: заменяется на -, регистр меняется на строчные
Примеры:
DateTime libdatetime-perl
DBI libdbi-perl
DBD::mysql libdbd-mysql-perl

LWP::* libwww-perl

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

DES-3526 подборка линков

Про прошивку
http://desnopass.110mb.com/
http://fevil.org.ru/network/kak-proshit-d-link-des-3526/
http://fevil.org.ru/network/kak-proshit-d-link-des-3526-chast-2/
http://darkstar.spb.ru/2011/01/dlink-automatic-flash/
http://wiki.opennet.ru/DES3526

Есть в том числе скрипты автоапдейта по snmp, tftp

ssh авторизация по ключам, безопасное копирование scp

Весьма подробная дока про авторизацию по ключам
http://vds-admin.ru/unix-toolbox/ssh-scp

EdgeCore

ES3526XA, L2+ (в офдоке L2, но веб-интерфейс говорит 2+). Дока -- 500+ страниц.

Существует три версии коммутаторов ES3526XA, отличающиеся друг от друга
версиями аппаратной платформы. Аппаратную версию можно посмотреть
с помощью консольной команды show version.

Модель - апп. версия - номер ветки ПО:

ES3526-XA - R01 - 2.3.3.x
ES3526-XA-V1 - R01A1 - 2.3.4.x
ES3526-XA-V2 - R01A2 - 1.1.0.x

ES3526XA/Readme.txt

Вопрос, чем они отличаются по возможностям и реальные аппаратные отличия кроме поддержки внешнего питания...

Обновление прошивки
Обновление микропрограммы на коммутаторах ES3526S

Подборка прошивок
mmnt.net
ftp.vimcom.ru

Полезные доки
http://wiki.sirmax.noname.com.ua/index.php/Accton_Edge_Core_ES_3526XA

Ряд полезных команд:
sh ver
sh sys
sh ip int

Переход в конфиг-режим:
conf
Сохранить конфиг на флэш
copy running-config startup-config

Включение ssh
Весьма нетривиальное.
Сначала надо создать ключи, это делается в обычном режиме

Console#ip ssh crypto host-key generate
Console#ip ssh save host-key

Проверим.
Console#sh public-key

(покажет ключи)

Теперь запустим сервис.
Console#conf
Console(config)#ip ssh server
Console(config)#
Console#sh ip ssh
SSH Enabled - version 2.0
Negotiation Timeout: 120 secs; Authentication Retries: 3
Server Key Size:     512 bits

Всё.

зы
Make sure you allow for the default VLAN (1), the GVRP base VLAN (4093), and the Single STP VLAN (4094)

ещё несколько линков
ES3528M и DLink dir 620
Бэкап конфигов
CACTI и оборудование едже
Простой вопрос по edge-core es3526xa
Edge-Core Вопросы

ERROR: The certificate of `github.com' is not trusted.

Попытка обновить nginx выдала ошибку:

=> Attempting to fetch https://github.com/agentzh/echo-nginx-module/tarball/v0.36/agentzh-echo-nginx-module-v0.36-0-g13dd12f.tar.gz
--2011-11-18 16:58:23-- https://github.com/agentzh/echo-nginx-module/tarball/v0.36/agentzh-echo-nginx-module-v0.36-0-g13dd12f.tar.gz
Resolving github.com (github.com)... 207.97.227.239
Connecting to github.com (github.com)|207.97.227.239|:443... connected.
ERROR: The certificate of `github.com' is not trusted.
ERROR: The certificate of `github.com' hasn't got a known issuer.

Решение:
cd /usr/ports/distfiles

wget --no-check-certificate https://github.com/agentzh/memc-nginx-module/tarball/v0.12/agentzh-memc-nginx-module-v0.12-0-g4f1952c.tar.gz

wget --no-check-certificate https://github.com/agentzh/echo-nginx-module/tarball/v0.36/agentzh-echo-nginx-module-v0.36-0-g13dd12f.tar.gz

среда, 16 ноября 2011 г.

аутсорс

http://juick.com/101O101/753410
как способ работы с идиотами:
заключаем договор. отвозим к заказчику свой программно-аппаратный комплекс (линукс коробка с системой мониторинга и оповещения), настраиваем на площадке клиента интернет для этой железки. берем бабло ежемесячно. при этом в договоре указываем, что железку вскрывать нельзя, ничего с ней делать нельзя, жалазка эта наша, мы её не продаем.
у мало компетентного заказчика есть твердая увереность: все люди идиоты, просто самые хитрые из них берут много денег.
при виде нашей железки подсознательно формируется ощущение, что вот так выглядит будущее, что это инновация и панацея от его бед. разрывать договор страшно, потому что волшебную коробку заберут. :)

...

Любая компания, которая соприкосается с IT в России, пытается экономить на этом секторе, более того, зачастую не понимая, а зачем нужны все эти люди. Причём, палка о двух концов, первый конец — "почему всё постоянно ломается?!", второй конец — "а зачем вы все нужны, если всё работает?!". Баланса не бывает. По большому счёту, IT-инженер должен воплощать в себе волшебника, что постоянно шариком мечется между первым и вторым концом, почти падая со второго. Студенты-админы со временем вырастают в серьезных инженеров, поднимая глубоко запущенные проекты, и уходят, который год. Уже с медалями, в другие страны. А IT-бизнес Росии так до сих пор ничему и не может научиться. Ведь менеджерам со степенью MBA невдомёк, что надо беречь кадры, ибо завтра на их место придут те, которые сделают моментально первый конец палки на недели или даже месяцы.

(орфография сохранена)

вторник, 8 ноября 2011 г.

механизм "заботы вендора о кастомере"

Вкраце: ещё во времена 3сом (это даже я помню), а затем и Accton, существует механизм "заботы вендора о кастомере", который позволяет при утрате пароля сгенерить его на основе МАС адреса - таким образом можно получить доступ к девайсу без сброса настроек к умолчальным и без потери конфигурации. Вендор высылает такие пароли, генерит по известному только ему алгоритму, но алгоритм стал известен людям :-).

В новых версиях firmware (нет информации с каких) этот механизм работает только с консоли. Так же как workaround предлагается высаживать управление в отдельный влан + настраивать management (с каких адресов дозволено управление). Типа вендор уверяет, что после таких защитных мер backdoor будет работать только с адресов управления.

статья
найдено

loopdetect на STP

http://www.vimcom.ru/support/lofiversion/index.php?t553.html

Если в логах при петле пишутся слов "STA Topology Change", то это значит, что определение петель на клиентских портах сделано на STP движке. Конечно вы сами решите, как вам ловить такие петли, но вот чем это плохо:

суббота, 5 ноября 2011 г.

Linux на десктопах

Использую линукс дома, были попытки использовать на работе...
Итог: до сих пор для массового пользователя непригодно. Для небольших компаний непригодно. Железо требуется мощнее, чем для винды, даже 7.

вторник, 1 ноября 2011 г.

Немного о private vlan

http://habrahabr.ru/blogs/network_technologies/114646/
http://www.cisco.com/en/US/tech/tk389/tk814/tk840/tsd_technology_support_sub-protocol_home.html

Private VLAN - термин, который используется компанией Cisco. В управляемых Ethernet-коммутаторах ZyXEL существует поддержка функции с названием Port isolation, схожей по функционалу с Private VLAN.

Коммутаторы ZyXEL поддерживают Port isolation как при использовании VLAN на базе портов (port based VLAN), так и при использовании VLAN на базе признака (802.1Q VLAN).

Port isolation (в настройках VLAN 802.1Q) – если включено, то данные не могут передаваться между клиентскими портами. Клиентским портам разрешен только обмен данными с Uplink-портами.
Port isolation (в настройках Port-based VLAN) – если включено, то данные не могут передаваться с одного порта на другой. Разрешен только обмен данными между портами и коммутатором (CPU) для настройки.

Изоляция портов VLAN работает аналогично Private VLAN Cisco. Т.е. делает порты, расположенные в пределах того же самого VLAN, неспособными общаться друг с другом, кроме как через шлюз или Uplink-порт.
Кроме того, без использования Port isolation широковещательные пакеты распространяются на все порты, принадлежащие VLAN.
Port isolation повышает безопасность и препятствует широковещательным пакетам распространяться в пределах одной VLAN.

http://zyxel.ru/kb/1768

Warning: date() [function.date]: It is not safe to rely on the system's timezone settings.

php+fastcgi/fcgid
Можно получить ошибку
Warning: date() [function.date]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Moscow' for 'MSD/4.0/DST' instead in

Прописать в основной php.ini - не поможет (хотя в режиме mod_php работает). Решение:
прописать эти строки в локальные php.ini

Можно сделать проще, создать в /etc/php5/conf.d файл timezone.ini с указанием временной зоны.

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

Если данные значения должны быть различны для разных доменов - необходимо править локальные php.ini

ssd cache

SSD можно использовать как кэш для классических HDD без дорогих аппаратных контроллеров. Программные решения:
— модуль ядра Flashcache от Facebook
— ZFS L2Arc

https://github.com/facebook/flashcache/

PHP Warning: Call-time pass-by-reference has been deprecated - argument passed by value

На самом деле это даже не ошибка, а просто предупреждение разработчику о том, что передача аргументов по ссылке во время вызова функции была объявлена устаревшей. Избавиться от этого предупреждения можно тремя способами:

1) Отключить отображение Warning'ов
2) В конфигурации PHP (файл php.ini) заменить allow_call_time_pass_reference = off
на allow_call_time_pass_reference = on
3) Исправить непосредственно сам скрипт, убрав в указанной строчке символ & перед именем переменной, передаваемой в какую-либо функцию. Для ошибки, приведенной выше, нужно в файле admin.vfm.php строчку:

if ( !($database->loadObject(&$row)) ) {

заменить на

if ( !($database->loadObject($row)) ) {

Ну и далее — по аналогии.

http://joomlaforum.ru/index.php/topic,14229.0.html

понедельник, 31 октября 2011 г.

Отмена перехода на зимнее время

В линуксах достаточно обновить tzdata, во фре сложнее: писали, что надо обновить ядро, но это не работает (несколько серверов на 8.2 - не перешли)
Итак.
# date
Mon Oct 31 01:56:57 MSK 2011
#portinstall misc/zoneinfo
#tzsetup

Выбираем MSK (у меня так)
# date
Mon Oct 31 03:00:41 MSK 2011

Вариант 2 - установить GMT-4
ln -sf /usr/share/zoneinfo/Etc/GMT-4 /etc/localtime

PS
# diff /usr/share/zoneinfo/Europe/Moscow /etc/localtime
Files /usr/share/zoneinfo/Europe/Moscow and /etc/localtime differ
(на пока не обновлённой системе)
Так что для начала - попробовать просто сделать симлинк. Не поможет - тогда уже обновлять мир или ставить доп пакеты.

PS2
Оказывается, centos 6 в пролёте - там g-версия, это где-то май.
zdump -v /etc/localtime | grep 2011
показывает, что должен быть перевод 30.10
Лечение: http://rpm.pbone.net/index.php3/stat/4/idpl/17043165/dir/centos_6/com/tzdata-2011h-2.el6.noarch.rpm.html - выбираем поближе зеркало, wget ...., rpm -Uvh tzdata-*
Также можно попробовать подключить репу, которая pre-centos 6.1, там должна быть нормальная версия.

Есть ещё http://habrahabr.ru/blogs/sysadm/130363/, но там про центось 6 нет (разве что в комментах, не читал их)

Debian: right way

Разбираемся, что и как настраивается.

mysql
Основной конфиг
/etc/mysql/my.cnf
Также читается debian.cnf

Не забываем про
# You can copy this file to /etc/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options
# (/var/lib/mysql for this installation) or to
# ~/.my.cnf to set user-specific options.


apache
Установленные модули
/etc/apache2/mods-avaliable
Если нам нужно что-то -- ставим, потом идём в mods-enabled и делаем симлинк
ln -s ../mods-avaliable/rpaf.load

Рабочие сайты
/etc/apache2/sites-avaliable
Как и с дополнениями. Свои сайты пишем в sites-avaliable, потом симлинк в sites-enabled

Вообще, в /etc/apache2/apache2.conf крайне редко приходится писать: весь изменяемый функционал вынесен.

php5
Тут у меня получилось 3+ конфигов:
/etc/php5/apache2/php.ini
/etc/php5/cgi/php.ini
/etc/php5/cli/php.ini
Вдобавок в каждой из этих каталогов есть conf.d, которые являются симлинками в /etc/php5/conf.d

Изменения для модулей надо писать в эти файлы, например после установки APC в /etc/php5/conf.d/apc.ini дописываем
apc.ttl=1
apc.max_file_size=16M
(данные строки хочет битрикс)

Также можно создать в /etc/php5/conf.d файл timezone.ini с указанием временной зоны.
В таком случае изменения будут применены для всех доменов. Должно работать в том числе с fastcgi/fcgid, штатно они работают только с локальным php.ini (ispmanager)

[будет дополняться по мере работы с битриксом]

пятница, 28 октября 2011 г.

Особенности поиска в apt-cache

~# apt-cache search named|wc -l
179

~# apt-cache search named|egrep -i "bind|named"|wc -l
13

Более 90% в выводе - мусор, не имеющий отношения к named. Например, smssend, tkabber итд.
Поэтому есть ключ --names-only

~# apt-cache search --names-only named|wc -l
1
Но в данном случае видим, что надо было искать не named, а bind

~# apt-cache search --names-only bind|wc -l
53

Теперь можно отключить подсчёт строк и смотреть, какие пакеты нам могут пригодиться.

четверг, 27 октября 2011 г.

Анонсирован выход Xen Cloud Platform (XCP) 1.1

http://www.opennet.ru/opennews/art.shtml?num=32022
http://xen.org/download/xcp/index_1.1.0.html
http://wiki.xen.org/xenwiki/XAPI_on_debian

После семи месяцев разработки увидел свет релиз Xen Cloud Platform 1.1 (XCP), развиваемой силами сообщества разработчиков Xen платформы для организации развертывания и управления работой cloud-инфраструктуры. XCP можно использовать как автономное решение для развертывания сервиса аренды виртуальных серверов, приватных cloud-окружений и инфраструктур промышленной виртуализации, так и как базис для наращивания функциональности и создания новых программных решений, построенных поверх кодовой базы XCP.

Платформа XCP является свободным (GPLv2) ответвлением от продукта Citrix XenServer. Разработчики гарантируют, что XCP всегда будет доступен под свободной лицензией и все части проекта будут открыты. Загрузочный пакет XCP оформлен в виде готового iso-образа (307 Мб), основанного на CentOS и адаптированного для быстрого развертывания хост-системы (Dom0). В комплект входят все необходимые драйверы и модули для поддержки популярных cloud-инфраструктур. Для дистрибутивов Debian и Ubuntu предоставлена возможность установки штатного инструментария XenAPI из специального репозитория, что позволяет на базе Debian и Ubuntu создать вариант сервера виртуализации, полностью функционально эквивалентного стандартному дистрибутиву XCP.

Поддержка стандартных API в платформе XCP дает возможность в случае непредвиденных проблем, например, при нехватке мощности оборудования в пиковые моменты, перенести часть корпоративного «облака» во внешние системы, такие как Amazon EC2, Rackspace Cloud Servers или GoGrid. Консолидация серверов предприятия и их размещение без привязки к физическому оборудованию в инфраструктуре виртуализации позволяет повысить гибкость, увеличить безопасность и понизить затраты, за счет более рационального расходования ресурсов (аппаратное обеспечение не простаивает и нагружается равномерно, новые серверы докупаются по мере необходимости, каждый сервис не пересекается в ОС с другими сервисами и запускается в отдельном окружении). Технология XenMotion позволяет организовать работу высоконадежных конфигураций, за счет горячего резервного копирования виртуальных машин и совместного использования разделяемых ресурсов.


Ключевые отличия xapi по сравнению с xend'ом:

Поддержка концепции «пула» — объединения одинаковых серверов в массу неразличимых вычислительных ресурсов, которые могут заменять друг друга без каких-либо специальных усилий со стороны обслуживающего персонала.
Автоматическая конфигурация всех подсистем серверов согласно общей конфигурации пула, включая автоматическое создание соединений с сетевыми хранилищами и конфигурирование сетевых интерфейсов.
Open vSwitch в качестве основного бэкэнда для сетевых соединений, позволяющий создавать pure-virtual сети с произвольной архитектурой.
Готовые шаблоны для большинства операционных систем.
Единый метод администрирования как PV, так и HVM машин.
Особая версия XenStored (одна из важнейших компонент обвязки зена), полностью переписанная на окамле, с повышенной (по сравнению со стандартной версией) стабильностью и производительностью.
Обширное и продуманное API для управления пулом.

Ещё почитать:
Xen Cloud Platform в условиях предприятия [1] [2] [3] [4]

debian: Can't locate GD.pm

apt-get install libgd-gd2-noxpm-perl

среда, 26 октября 2011 г.

maatkit

mk-archiver - архивирование строк из таблицы MySQL в другую таблицу или в файл;

mk-deadlock-logger - выявление и сохранение информации о взаимных блокировках;

mk-duplicate-key-checker - поиск дублирующихся индексов и внешних ключей;

mk-find - аналог утилиты find для выполнения поиска по таблицам и выполнения
действий над результатами;

mk-heartbeat - мониторинг задержки при выполнении репликации;

mk-kill - удаляет запросы, соответствующие определенным критериям;

mk-loadavg - следит за нагрузкой на базу и выполняет указанные действия при обнаружении перегрузки;

mk-log-player - позволяет повторно выполнить запросы из лога;

mk-parallel-dump/mk-parallel-restore - создание и восстановление дампа таблиц в
параллельном режиме;

mk-purge-logs - чистит бинарный лог в соответствии с заданными правилами;

mk-query-advisor - анализирует запросы и выявляет возможные проблемы;

mk-query-digest - парсит лог и анализирует, фильтрует и преобразует запросы в
логе, формируя в итоге полезный суммарный отчет;

mk-query-profiler - выполняет SQL-запросы и выводит статистику или измеряет
активность других процессов;

mk-table-checksum - генерация контрольных сумм с целью проверки целостности реплицированных данных;

mk-table-sync - эффективная синхронизация содержимого нескольких таблиц;

mk-upgrade - запускает запрос одновременно на нескольких серверах и проверяет идентичность ответов;

mk-variable-advisor - анализирует переменные MySQL и выявляет возможные проблемы;

mk-visual-explain - выводит результат выполнения EXPLAIN-запроса в древовидном виде.

mk-index-usage - строит детальный отчет на основе выполнения EXPLAIN-операции
для каждого фигурирующего в логе запроса

http://www.opennet.ru/tips/2491_mysql_log_analyze_monitoring_index.shtml

WebDAV

Что это - неплохое описание
http://citforum.ru/internet/webservers/webdav/
WebDAV является расширением протокола HTTP/1.1. WebDAV добавил в HTTP/1.1 несколько новых заголовков и методов, а также изменил существующие методы HTTP

Есть много реализаций на сервере, в том числе через apache и nginx. Через nginx - будет несколько урезанным, там чего-то нет, поэтому полноценным сервером оно выступать не может. Зато апач тяжёл.

Собственно, задача - поднять удалённое шифрованное хранилище (c encFS), но об этом как-нибудь в другой раз.

понедельник, 24 октября 2011 г.

Joomla 1.5.12 и php 5.3

Штатно старые версии жумлы не работают в php 5.3, надо немного подправить.

В разных версиях разные ошибки, поэтому всё, что было мной найдено в сети

Вариант 1:
Joomla! → Учим меню Jooml'ы <=1.5.13 дружить с PHP 5.3
Сегодня перенося старый сайт нового клиента на свой vds, обнаружил, что пропал вывод меню.
Гугление дало понять две вещи:
1. Проблема не решена
2. Для решение проблемы предлагают откатить PHP на старую ветку (5.2 и ниже)
Естественно это вообще не вариант. По-этому пришлось как всегда всё делать самому.
Ошибка заключается в том, что данные в функцию передаются по ссылке. Для её исправление, достаточно убрать амперсанды в нужных местах.
Для основного меню сайта, в файле /modules/mod_mainmenu/helper.php на строке 31 перед параметром $params.
С админкой телодвижений немного больше =)
В файле /libraries/joomla/html/html/menu.php на 124ой убираем амперсанд от $children в параметрах вызова функции treerecurse, затем в /libraries/joomla/html/html/grid.php на строках 93,115,157 перед $row.

http://forum.dklab.ru/viewtopic.php?t=36396

Вариант 2:

http://inetmarketing.ws/sozdanie-sajtov/obnovlyaem-joomla-dlya-php-5-3-svoimi-rukami
(много кода)

Вариант 3:

Warning: Parameter 3 to showItem() expected to be a reference, value given in /var/www/prohotel/data/www/media.prohotel.ru/htroot/includes/Cache/Lite/Function.php on line 100
Warning: Parameter 1 to HTML_content::show() expected to be a reference, value given in /var/www/prohotel/data/www/media.prohotel.ru/htroot/includes/Cache/Lite/Function.php on line 92

http://forum.joomla.org/viewtopic.php?f=268&t=530296

csync: часть 2

Настраиваем. (на примере centos)

!Порт 30865

Для начала, необходим файл - приватный ключ
csync2 -k /etc/csync2/csync2.cluster.key

Теперь надо править конфиги
vi /etc/csync2/csync2.cfg


Теперь построим локальную базу всех файлов проекта, с которой работает csync2.

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

# csync2 -cIr /

Мы выполняем именно ее, так как второй сервер клонирован из первого.

Если есть какие-либо различия (например, данные на второй сервер копировали с первого по сети, и при этом в это же время на первом сервере могли быть изменены какие-либо данные), лучше использовать:

# csync2 -cr /

Эта команда будет работать дольше, и при первом запуске синхронизации будут проверены на актуальность все данные (что тоже для первого раза будет работать достаточно долго, несколько минут).

Клиентская часть - запуск csync2 с ключом "-x".

Можно определить (в зависимости от объема данных) необходимую частоту обновлений и прописать запуск csync2, например, через cron. Строка в /etc/crontab:

*/5 * * * * root /usr/sbin/csync2 -x >/dev/null 2>&1

...означает запуск csync2 каждые 5 минут.

http://packetcloud.net/2009/08/28/compiling-csync2-on-centos-5/
http://www.1c-bitrix.ru/blog/demidov/start-the-web-cluster-in-the-cloud-scalaxy.php
http://habrahabr.ru/blogs/sysadm/120702/

воскресенье, 23 октября 2011 г.

csync: часть 1

Это утилита для синхронизации файлов на серверах.

Для начала, Ставим.

FreeBSD
Тут проблем нет:
cd /usr/ports/net/csync2 && make install clean

Debian
Как ни странно, тут тоже проблем особо нет
apt-get install csync2

CentOS
Вот тут всё плохо. Warning: No matches found for: csync
Увы и ах, тут центось - сливает по полной. Выход 1 - брать компилер и собирать пакет.
В доке битрикса есть установка csync из пакетов, через freshrpms
Мой пример подключения репы (в доке качается и ставится попакетно):
vi /etc/yum.repos.d/freshrpms.repo
[freshrpms-cluster]
name=freshrpms cluster repo for csync2
baseurl=http://ftp.freshrpms.net/pub/freshrpms/redhat/testing/EL5/cluster/$basearch/
enabled=1
gpgcheck=0

Можно сделать wget -r http://ftp.freshrpms.net/pub/freshrpms/redhat/testing/EL5/cluster/`uname -i`

Если самому собирать - в зависимостях librsync, libtasn1, xinetd, sqlite2, libsqlite. Если кто будет собирать - просьба поделиться spec-файлами.

суббота, 22 октября 2011 г.

Gentoo

Весьма интересный дистр, хоть и со своими тараканами. Не LFS конечно, но новичкам не по зубам. Зато есть штатные средства для кросс-дев на тот же арм.

Есть описание даже на лурке, и что еще более странно - есть и полезная инфа.

Есть даже на баше:
<@insomnia> Нужно выполнить всего три команды, чтобы поставить Gentoo
<@insomnia> cfdisk /dev/hda && mkfs.ext4 /dev/sda1 && mount /dev/hda1 /mnt/gentoo/ && chroot /mnt/gentoo/ env-update && . /etc/profile && emerge --sync && cd /usr/portage && scripts/bootsrap.sh && emerge system && emerge vim && vi /etc/fstab && emerge gentoo-dev-sources && cd /usr/src/linux && make menuconfig && make install modules_install && emerge gnome mozilla-firefox openoffice && emerge grub && cp /boot/grub/grub.conf.sample /boot/grub/grub.conf && vi /boot/grub/grub.conf && grub && init 6
<@insomnia> это первая

На самом деле, команда нерабочая, но легко делится на части "что надо сделать".

!Русская версия похоже больше не поддерживается, но пока актуальна
Русская дока
Начинать можно отсюда
"экспресс-старт"
Ещё (уже не оф, это про порты)

вторник, 18 октября 2011 г.

XEN

Чем больше общаюсь с xen, тем меньше ему доверяю. Периодические танцы с бубном, отвал xm и прочие радости уже вкусил. Проблема в том, что у меня нет возможности "отдельная SAN и пачка нод", поэтому и данные, и хен расположены на 1 машине с centos 5.5

Сегодняшний прикол: работали нормально, но отвалился eth0, всякие /etc/init.d/network restart и ifconfig eth0 down; ifconfig eth0 up не помогли, не сообщало даже об отключении кабеля. Ладно, ребут... Больше виртмашины не запустились.
В логах

cat /var/log/xen/xend.log
[2011-10-18 18:28:17 4528] INFO (SrvDaemon:332) Xend Daemon started
[2011-10-18 18:28:17 4528] INFO (SrvDaemon:336) Xend changeset: unavailable.
[2011-10-18 18:28:17 4528] ERROR (SrvDaemon:349) Exception starting xend (no element found: line 1, column 0)
...
cat /var/log/xen/xend-debug.log
Xend started at Tue Oct 18 18:28:17 2011.
Exception starting xend: no element found: line 1, column 0

И на xm list
Error: Unable to connect to xend: No such file or directory. Is xend running?

Думал, что что-то снова с ядром, и нечаянно обнулил /boot/grub/grub.conf, благо была копия. Как оказалось, на диске кончилось место, потому что хен зачем-то стал машины не выключать, а сейвить. Также непонятно, почему очистить файл мы смогли, но записать новые данные на то же самое место - нет.

Ладно, очистил /var/lib/xen/save/
Перезагрузились.. Не работает. Обновил xen с либами, ядро, перезагрузился раз 20 с разными вариантами загрузки... Глухо.
Гугл на запрос ничего полезного не сказал. Но потом случайно наткнулся на http://www.karlkatzke.com/xend-fails-to-start-due-to-xml-error/ и узнал, что это глюк в xml файлах (возможно, их при ребуте очистило так же, как мне grub.conf). Фикс:
rm -rf /var/lib/xend

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

пятница, 14 октября 2011 г.

selectel псевдо-API

Ответ саппорта

API на сегодняшний день в разработке, не реализован.
Для включения и выключения виртуальных машин существует workaround:
Последовательность действий:
1) Авторизация на сайте, получение и сохранение cookie:
curl -v --cookie-jar /tmp/cloud.txt --data "action_method=GET&user=ЛОГИН&pass=ПАРОЛЬ" https://support.selectel.ru/
2) Непосредственно команда для запуска машины:
curl -v --cookie /tmp/cloud.txt "https://support.selectel.ru/cloud/proxy.php?uuid=ИДЕНТИФИКАТОР_МАШИНЫ&action=vm-start";;;
3) Удаление cookie:
rm /tmp/cloud.txt

Идентификатор (VM UUID) указан на вкладке «Информация» виртуальной машины. Для выключения машины вместо действия (action) vm-start нужно написать vm-stop.

XEN/KVM hosting

Для начала
http://www.linode.com/

(будет дополняться)

четверг, 13 октября 2011 г.

Intel осваивает модель платежей donate (donat)?

Обнаружил на 3dnews статью Core i3-2332M: заплати и получи плюс 400 МГц и больше кеша. Но данная система довольно давно известна игрокам под названием "donate" - чтобы получить круче, плати. (суть: платишь баблос, всё больше и больше, получаешь всё меньше и меньше)

В идеале - интел станет раздавать процы с 1 ядром 1ГГц, 128к кэша, и можно ступенчато апать до топовых. Ну или продавать по себестоимости кристалла. Впрочем, это очень остро поставит вопрос о разлочке таких ядер программно или аппаратно, и может быть как очень прибыльным, так и весьма убыточным вариантом продаж.

вторник, 11 октября 2011 г.

UEFI: обзор со всех сторон

http://www.3dnews.ru/offsyanka/618151/

mod_fcgid: HTTP request length xyz (so far) exceeds MaxRequestLen (131072)

Debian:
vi /etc/apache2/mods-available/fcgid.conf

в <IfModule mod_fcgid.c> дописываем
# to get around upload errors when uploading images increase the MaxRequestLen size to 15MB
MaxRequestLen 15728640

CentOS:
vi /etc/httpd/conf.d/fcgid.conf

В конец
# to get around upload errors when uploading images increase the MaxRequestLen size to 15MB
MaxRequestLen 15728640

Перезапускаем апач, проверяем.

офдока
Почти все ссылаются на
http://www.blogtorrent.de/2010/11/30/mod_fcgid-http-request-length-135714-so-far-exceeds-maxrequestlen-131072/
Ну и я подглядел тут:
http://blog.philippklaus.de/2011/04/fix-mod_fcgid-http-request-length-xyz-so-far-exceeds-maxrequestlen-131072/

понедельник, 10 октября 2011 г.

OCZ RevoDrive Hybrid: симбиоз SSD и HDD на PCIe-плате

http://www.3dnews.ru/news/616278

Новинка построена на печатной плате под шину PCI Express х1 с применением более современной фирменной архитектуры VCA 2.0 (Virtualized Controller Architecture) и сочетает в себе твердотельный диск объёмом 100 Гбайт и винчестер ёмкостью 1 Тбайт. Как сообщается, передача данных осуществляться на скорости до 910 Мбайт/с, а производительность в произвольных операциях записи достигает 120000 IOPS.
Разработчики оценили своё детище в $500 и дают на него трёхлетнюю гарантию качества.

OpenSSL

Основы работы с OpenSSL
Хороший FAQ

пятница, 7 октября 2011 г.

Осваиваем iozone

Это интересная утилита, которая умеет делать замеры чтения, записи (произвольной, последовательной), выдавать в мб/с и в iops-ах.

Для начала, надо его поставить.
Freebsd
cd /usr/ports/benchmarks/iozone && make install clean

CentOS
yum install --enablerepo=rpmforge iozone
(rpmforge должен быть подключен)


debian:
apt-get install iozone3

дальше о запуске хорошо описано тут:
http://disorder.ru/archives/tag/iozone

По простому:
$ iozone -a > iozone.log
$ Generate_Graphs iozone.log
По первой команде программа выполнит все возможные тесты, по второй - покажет трехмерный график.

вторник, 4 октября 2011 г.

ISPManager и python

Как cgi запустить несложно, но это очень ограничивает производительность

Также можно через mod_python и mod_wsgi

Django хорошо работает через mod_wsgi:
http://forum.ispsystem.com/ru/showthread.php?t=14832

http://stackoverflow.com/questions/799354/configure-apache-to-use-python-just-like-cgi-php

понедельник, 3 октября 2011 г.

Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration

Ошибка при работе с mod_rewrite в дебиане после установке апача. Причина - модуль стоит, но штатно не подключается? Почему? Одним фанатикам ведомо.
Впрочем, лечится просто:
# cd /etc/apache2/mods-enabled
# ln -s ../mods-avaliable/rewrite.load

Или "фирменный" вариант
a2enmod rewrite
но он делает тоже самое.

Нагрузочное тестирование веб-проекта

Зачем это нужно? Вроде неплохо описано тут:
http://habrahabr.ru/blogs/testing/106493/

Performance vs. load vs. stress testing

Совсем простой метод:
time wget -O /dev/null "http://site.ru/index.php"
Показывает скорость получения страницы, без статики.
Можно запустить в N потоков.
Впрочем, есть curl-loader

Более наглядный вариант - через плагин к FF - webdeveloper. Можно посмотреть скорость загрузки каждого элемента, но нагрузочное тестирование этим не провести.

Чуть более действенный метод через ab, но загружать будет только 1 страницу.
ab -n 1000 -c 100 — чтобы быть уверенным, что сайт не уйдет в даун после нагрузки
ab -n 1000 -c 2 — чтобы оценить, какой наплыв посетителей он способен выдержать

Есть ещё siege

pylot
Нечто среднее между jmeter и ab. Но правила там задаются в xml-файле, так что без быстрого старта его сложно освоить. Сейчас он перерос в multi-mechanize, но новый проект гораздо сложнее в освоении.
Плюсы - он на питоне. Минус - с наскока его всё-таки не освоить.

Перейдём к jmeter - мощной программе, но весьма сложной в освоении. Увы, на яве.
Простой нагрузочный тест с Apache JMeter
Рецепт нагрузочного тестирования на JMeter
Быстрое создание нагрузочных тестов на JMeter для web-сайтов
Отладка тест-плана JMeter

Видео
Видео с HighLoad++: Юрий Ковалев — Нагрузочное тестирование без границ

пятница, 30 сентября 2011 г.

Доступ к дискам(разделам) виртуальных машин (lvm in lvm)

http://andrey.org/virtual-images-lvm/

Делается через kpartx
# kpartx -l /home/vm/centos.img #смотрим разделы
# kpartx -a /home/vm/centos.img #маппим разделы

Если есть LVM - прибавляется еще серия движений
# lvm pvscan #сканируем на наличие LVM-томов
# lvm vgchange -a y VolGroup

Потом не забываем всё отмонтировать.

И на офсайте

воскресенье, 25 сентября 2011 г.

Bitrix: бэкапим проект

Оф описание
http://dev.1c-bitrix.ru/community/blogs/howto/945.php
Как видим, сами разработчики советуют бэкапить базу + файлы штатными средствами.
mysqldump -u user -ppass dbname > dbname.sql
tar -czf proj.tgz /var/www/proj

Но эти бэкапы для разворачивания вручную, на старом месте. Если надо сделать перенос на новое место - надо сделать встроенный бэкап (файлов может быть больше 1, будет aaa.tar.gz, aaa.tar.gz.1 итд), на новом месте залить restore.php и им развернуть. Он запросит новые названия баз, юзеров итд.

"Архивы, созданные системой резервного копирования, предназначены исключительно для распаковки с помощью restore.php "
"Большие архивы автоматически делятся на части. Формат деления - исключительно своя разработка, пожалуйста, не пытайтесь их распаковать как многотомные архивы всякого рода архиваторами. "
http://dev.1c-bitrix.ru/community/forums/forum6/topic14618/

По первой ссылке есть скрипт автобэкапа, который сам парсит dbconn.php.

blogger: подсветка синтаксиса

Штатно нет подсветки. Варианты:
1) спец сервисы. Вставляем туда код, потом полученный html код - в наше сообщение. Несколько неудобно.
http://tohtml.com/

2) через подключаемые js. Проще, но надо подключать каждый раз код.
highlight.js
google prettify

3) Через установку виджета.
http://dremlin.blogspot.com/2009/09/syntax-highlighter-widget-blogger.html

4) правка шаблона - добавление класса code
http://votrexflame.blogspot.com/2010/09/html.html
http://ilook12.blogspot.com/2009/10/putting-code-box-on-blogger-posts.html (вариант 2)

суббота, 24 сентября 2011 г.

Сокеты: гонка за копейкой

intel:
775
1155
1156
1365 (?)
1366
2001

AMD:
AM2
AM2+
AM3
AM3+
FM1

И если у АМД оно хоть как-то совместимо, у интеля каждый сокет - свои виды процессоров. Для чего? Разводить юзера на лишние расходы конечно. просто проц не заменить, только проц+плата + зачастую память.. а там и остальное потянется...

среда, 21 сентября 2011 г.

О новых чипсетах intel

ru.wikipedia.org/wiki/Список_чипсетов_Intel
http://www.ixbt.com/mainboard/i67p-67h-chipsets.shtml
http://www.ixbt.com/mainboard/i68z-chipset.shtml

Отдельно стоит Q67, который для корп сегмента..

Ставим awstats не для ispmanager в centos

Для ISP ставить просто - подключаем репу, где она есть (в epel есть, насколько я помню), при необходимости сносим webalizer, сбрасываем кэш isp, ставим через панель.
/usr/local/ispmgr/sbin/pkgctl cache
killall ispmgr

Другое дело - хост без isp.
Ставим awstats (тоже подключив сначала репы)
Но оно ставится, а что дальше - непонятно.
Основной каталог
/usr/share/awstats/wwwroot/cgi-bin/
Также в /etc/httpd/conf.d появляется awstats.conf

Теперь если в этом конфиге заменить allow from 127.0.0.1 на allow from all и обратиться на 1.2.3.4/awstats/awstats.pl, получим:
Error: Couldn't open config file "awstats.1.2.3.4.conf" nor "awstats.conf" after searching in path "/usr/share/awstats/wwwroot/cgi-bin,/etc/awstats,/usr/local/etc/awstats,/etc,/etc/opt/awstats": No such file or directory
Из этой ошибки понятно, где оно ищет конфиги.
И предлагает методы запуска:
Example: http://localhost/awstats/awstats.pl?config=mysite
Example: http://127.0.0.1/cgi-bin/awstats.pl?config=mysite
- Did you create your config file 'awstats.12.3.4.conf' ?
If not, you can run "awstats_configure.pl" from command line, or create it manually.

Теперь надо найти этот файл. А лежит он тут:
/usr/share/awstats/tools/awstats_configure.pl
Но запустить откуда угодно нельзя - ругнётся

Warning: AWStats standard directory on Linux OS is '/usr/share/awstats'.
If you want to use standard directory, you should first move all content
of AWStats distribution from current directory:
/root
to standard directory:
/usr/share/awstats
And then, run configure.pl from this location.
Do you want to continue setup from this NON standard directory [yN] ?

Надо перейти в /usr/share/awstats и уже оттуда запускать.
После настройки конфиги в /etc/awstats
Я под свои хосты правлю пути, у меня не единый access_log, а на каждый проект свой.


-----> Add update process inside a scheduler
Sorry, configure.pl does not support automatic add to cron yet.
You can do it manually by adding the following command to your cron:
/usr/share/awstats/wwwroot/cgi-bin/awstats.pl -update -config=aaa.ru
Or if you have several config files and prefer having only one command:
/usr/share/awstats/tools/awstats_updateall.pl now
Press ENTER to continue...


A SIMPLE config file has been created: /etc/awstats/awstats.aaa.ru.conf
You should have a look inside to check and change manually main parameters.
You can then manually update your statistics for 'aaa.ru' with command:
> perl awstats.pl -update -config=aaa.ru
You can also build static report pages for 'aaa.ru' with command:
> perl awstats.pl -output=pagetype -config=aaa.ru

По умолчанию парсинг не запустится - не тот формат лога, он настроен на conbined, а надо common. Вообще, правильнее отпарсить режим common, поставив LogFormat=4, а потом переключить апач в режим combined и вернуть 1
Снова запускаем и когда всё верно - увидим

From data in log file "/var/www/aaa/logs/aaa.ru-access_log-"...
Phase 1 : First bypass old records, searching new record...
Searching new records from beginning of log file...
Phase 2 : Now process new records (Flush history on disk after 20000 hosts)...

вторник, 20 сентября 2011 г.

ставим encfs

ставим encfs

Для начала, ищем
yum search encfs

Информация
yum info fuse-encfs

Available Packages
Name : fuse-encfs
Arch : i386
Version : 1.4.2
Release : 1.el5
Size : 381 k
Repo : epel
Summary : Encrypted pass-thru filesystem in userspace
URL : http://www.arg0.net/encfs
License : GPLv3+
Description: EncFS implements an encrypted filesystem in userspace using FUSE. FUSE
: provides a Linux kernel module which allows virtual filesystems to be written
: in userspace. EncFS encrypts all data and filenames in the filesystem and
: passes access through to the underlying filesystem. Similar to CFS except that
: it does not use NFS.

Да, штатно её нет - надо подключить epel

Ставим
yum install -y fuse-encfs.`uname -i`

воскресенье, 18 сентября 2011 г.

Zalman VE-200

Внешний бокс для дисков 2.5". Чем же он так интересен? Тем, что при подключении появляется как переносной диск, так и виртуальный сд-ром, с которого можно грузиться. Незаменимая вещь для любого админа, особенно с тенденциями отказа от двд приводов (я сам давно отказался, сервера если что грузятся по PXE, рабочие машины в офисе тоже.. Всякие ноуты друзей итд - с флэшки)

Обзор

Прошивка там от iodd, так что прошивки можно брать у них или у самого залмана

Для работы двд - создаём в корне папку _ISO (регистр не важен).
Поддерживаются ФС: FAT32, NTFS, exFAT. Возможно, exFAT поддерживается только в iodd-прошивке. Но обновиться не так сложно.

Для поддержки русского надо подключить шрифт "Global 'E' Font file"

Интересный момент: Если при включенной железяке джойстик удерживать в нижнем положении более 3 сек, то винчестер паркуется и Zalman можно смело отключать не боясь повредить HDD или информацию на нем… Так сказать аппаратное безопасное извлечение…Хотя в lite_мануале к нему нет даже намека на подобную «фичу».
Сложности с Zalman VE-200

И ещё
Если пишет 1st partition :0 – Система шита NTFS, жесткий диск FAT32
Если пишет 1st partition :7 – Система шита FAT32, жесткий диск NTFS.
Оттуда же.

Бывает, не ест исо-образы и хочет дефрагментацию файла. Под виндой - есть contig от Русиновича и WinContig

четверг, 15 сентября 2011 г.

Боремся со спамом логов postgresql в syslog

FreeBSD 8.2, postgres 8.3
Иначально он спаммит в syslog, что порой мешает.
Открываем конфиг, ищем log_destination
vi /usr/local/pgsql/data/postgresql.conf

Видим
log_destination = 'syslog'

У нас 2 варианта - использовать перенаправление вывода через сам syslog или сказать постгресу использовать отдельный файл. Сделаем второе.
Комментируем строку про syslog.
Но указать просто файл не получится - ругнётся

LOG: unrecognized "log_destination" key word: "/var/log/pgsql_log"
FATAL: invalid value for parameter "log_destination": "/var/log/pgsql_log"

Потому что это задаётся чуть другими опциями.
log_directory = '/var/log/pgsql'
log_filename = 'pgsql_log'

В версии 8.1 также надо было выставить redirect_stderr, но в 8.3 такой опции уже нет - теперь это logging_collector (см), выставляем = on

Обращаем внимание на одинарные кавычки - с двойными работать не будет.
Не надо пытаться указать /var/log/messages - ничего хорошего не выйдет.
Также не получится просто указать на файл в /var/log - для создания не хватит прав. Надо создать каталог и дать ему 777 или владельцем пользователя, от которого работает постгрес.
При работе в кластере - у каждого процесса должен быть свой лог-файл, использовать 1 на всех недопустимо.

Также я добавляю
log_rotation_size = 10MB
log_rotation_age = 1d
Это позволит не разрастись логам до огромных величин. (Если делать через syslog, не забыть настроить что-то подобное для rotatelogs)

> ls -la /var/log/pgsql/
total 13
drwxrwxrwx 2 root wheel 3 Sep 15 15:00 .
drwxr-xr-x 6 root wheel 277 Sep 15 15:00 ..
-rw------- 1 pgsql wheel 822 Sep 15 15:07 pgsql_log.1316084441

Работает исправно.

Основные грабли описаны тут:
http://archives.postgresql.org/pgsql-admin/2007-02/msg00342.php
Дока на 8.3
http://www.postgresql.org/docs/8.3/static/logfile-maintenance.html
Описание всех ключей про логгинг
http://www.postgresql.org/docs/8.3/static/runtime-config-logging.html
(при необходимости вместо 8.3 подставить нужную версию, в том числе на 9.0)

Где купить ISPManager

Конечно, лучше всего брать бесплатные версии с хостингом :) Но если по каким-то причинам такого нет - нашёл неплохой вариант
http://www.isplicense.ru/services/ispsystem/ispmanager/
Проблема в том, что на офсайте цены несколько негуманные, можно найти в разы дешевле.
Если кто знает дешевле этого - оставляйте в комментах, добавлю.

среда, 14 сентября 2011 г.

perl-mysql, centos и юникод

Дело в том, что в CentOS 5.6 штатно идёт perl-DBD-MySQL 3.0007, который некорректно работает с юникодом - страницы показывает, будто то ли указана cp1251, то ли получили двойное преобразование. Это проблема старой версии. Лечится установкой 4 версии. Для этого подключаем rpmforge-extras (ставится с rpmforge), там версия 4.014, с ней отображается нормально.

ЗЫ Некоторые говорят, что типа фря отстой, линукс форева.. Но при этом в центоси много софта многолетней давности, во фре в разы такого меньше. Тот же перл -- штатно тут 5.8, во фре штатно 5.8, 5.10, 5.12.
Более того, просмотрел все основные репы - там _только_ 5.8.8

понедельник, 12 сентября 2011 г.

Немного о SAS-экспандерах

http://true-system.blogspot.com/2011/09/sas.html
Занимательная статья.

LSi 2008 - замена прошивки

ftp://ftp.supermicro.com/driver/SAS/LSI/2008/
Выбираем нужную версию
iMR - Поддержка raid5, но поскольку чип слабый, можно подключить мало дисков.
IR - raid
IT - HBA
Часть плат поставляются с iR стеком, можно прошить в iMR при наличии аппаратного ключа iButton или в IT стек

Есть пример с картинками
http://www.servethehome.com/howto-flash-supermicro-x8si6f-lsi-sas-2008-controller-lsi-firmware/
Вообще интересный сайт.
Ещё
http://true-system.blogspot.com/2011/07/lsi-9211-48i-it.html

Цинизм в IT: Курсы по сетевому оборудованию Juniper на русском

Цинизм в IT: Курсы по сетевому оборудованию Juniper на русском:
https://www.juniper.net/us/en/training/technical_education/jsl_international_editions/russian/course_start.html

Настраиваем фаервол: ipfw

Для начала, Ipfw должен быть в ядре или в виде модуля. Если ядро самосборное - крайне желательно собирать с IPFIREWALL_DEFAULT_TO_ACCEPT
Это связано с тем, что при ошибке в конфиге фаера или просто перезапуск без перевода процесса в фон чревато полной недоступностью сервера из сети. А так - прошёл ipfw -f -q flush (сброс правил), состояние стало "разрешить всё", и пока не дойдём до правила в конце "запрет всего лишнего", мы сможем как минимум переподключиться и поправить правила. Хотя это и не спасёт от ошибки вида "забыли проковырять дырку для ssh".
Минимальный набор служб, который обычно надо выпустить: 22 (ssh - tcp), 25 (smtp, отправка уведомлений с сервера, tcp), 53 (dns - как минимум мы сами должны уметь делать резолв, может быть как tcp так и udp)
Также надо сразу разрешить трафик на служебном интерфейсе lo0

Проверим, что ipfw включен:
ipfw -a list

Должно быть что-то вроде
65535 583535090 359726489527 allow ip from any to any
Правило номер 65535, следующие 2 числа это сколько трафика вошло и вышло (in и out), потом само правило - разрешить всё ото всех.

Простейшее правило:
ipfw add allow all from any to any via lo0
Разрешаем весь трафик на интерфейсе lo0

Разрешим для примера ssh
ipfw add allow tcp from any to me 22
ipfw add allow tcp from me 22 to any
Это правила без контроля соединения, поэтому надо 2 правила: первым мы разрешили коннекты к нам на 22 порт (ssh), но ответы от нас будут резаться. Вторым правилом мы разрешили отправлять с нашей стороны с 22 порта.

Есть динамические правила. Пишутся так:
ipfw add allow all from any to me 25 setup keep-state
Внимание! На нагруженном сервере спокойно можем схватить "Too many dynamic rules". Немного рассматривал у себя на примере limit, но вызывается это именно на keep-state, поэтому не рекомендую для web-сервера вешать на 80 порт, не понимая принципов работы IPFW. Также не рекомендую для ssh - если на сервере кончились динамические правила, фаервол не сможет нам разрешить ssh-подключение.

Пытался разобраться в смысле setup+keep-state, не разобрался. Кто-то пишет только setup, кто-то только keep-state...

- дальше по аналогии нужные правила -
Нюансы: например, чтобы почта ходила нормально, нужно 2 набора:
1) почта к нам
allow all from any to me 25 setup keep-state

2) почта от нас
allow all from me 25 to any setup keep-state

То же для днс, веба (если у нас там веб-сервер) - обновления тянутся по 80 порту...

Также не забываем про пинги
allow icmp from any to any

Теперь запретим всё лишнее, но будем писать лог, что запретили
ipfw add 65000 deny log all from any to any

логи идут в /var/log/security, но надо включить вывод

в ядре
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100 # или сколько надо по умолчанию

либо в /etc/rc.conf
firewall_logging="YES"

либо
sysctl -w net.inet.ip.fw.verbose=1

Не забываем первое время проверять этот файл - там может оказаться забытая служба или разные аномалии.

Можно запретить выборочные порты, например 3306 (mysql), чтобы в лог не попадало об этом записей.

Вообще, возможностей значительно больше, включая нат, копирование всех пакетов куда-либо (tee), ограничение скорости (queue) итд. На хорошую книгу можно набрать.


Линки
Как вести лог блокировок в iptables и ipfw
http://dragonflybsd.blogspot.com/2011/03/ipfw.html

воскресенье, 11 сентября 2011 г.

LSi контроллеры

http://www.lsi.com/products/storagecomponents/Pages/LSISAS2008.aspx
http://www.lsi.com/products/storagecomponents/Pages/LSISAS2108.aspx
http://www.ixbt.com/storage/lsi-sas9211-8i.shtml
http://true-system.blogspot.com/2011/04/oem-sas-supermicro.html
http://true-system.blogspot.com/2011/06/sas-lsi-6160-1.html
Опознать платы с SAS2 контроллером на борту можно по наличию цифры 6 в наименовании (например, X8DTU-6TF+).

суббота, 10 сентября 2011 г.

Системы мониторинга

Вроде, все так нахваливают host-tracker.com, но он мало того, что непойми как снимает смс (сразу по 2-3).. но и сам сервис похоже сегодня лёг )
Ошибка 102 (net::ERR_CONNECTION_REFUSED): Сервер отказал в подключении.
(хром)

А этот сервис многие нахваливают, в том числе фаствпс )

четверг, 8 сентября 2011 г.

изменение времени

Понадобилось сменить время в domU (при запуске сервера неверно было выставлено время)
В основной системе сменилось нормально, но в госте получали
# ntpdate ntp.psn.ru
date
8 Sep 23:06:29 ntpdate[7731]: poll(): nfound = 0, error: No such file or directory
8 Sep 23:06:29 ntpdate[7731]: poll(): nfound = 0, error: No such file or directory
Часы просто остановились на этом времени - я оставил синхронизацию минут на 15, но он так и выводил это время. Это особенность синхронизации - чтобы не оказалось записей "в прошлом" например, часы ждут, пока время сравняется с выставленным.

При этом получали "забавный" эффект вроде крайне длинного времени пинга (первый пакет уходил сразу, второй ждал пару минут - не дождался, но потери 0%)
Надо сначала привести часы к подобию правды
(на часах машины 23:06)

# date +%H%M
2306
# date +%H%M -s 1657
1657
# date +%H%M
1657

Всё, время 16:57, теперь можно выставить точное время

# ntpdate ntp.psn.ru
8 Sep 16:58:16 ntpdate[7831]: adjust time server 194.149.67.129 offset -0.289437 sec

Можно ускорить и через опцию -b, но при этом желательно остановить бд и подобные сервисы.

-b Force the time to be stepped using the settimeofday() system call, rather than
slewed (default) using the adjtime() system call. This option should be used
when called from a startup file at boot time.

bitrix+svn

http://dev.1c-bitrix.ru/community/webdev/user/27606/blog/978/
При разработке сколь-либо серьёзных проектов зачастую просто необходимо использовать систему контроля версий, например SVN. К сожалению, Битрикс не позволяет вести командную разработку на нескольких локальных машинах, ввиду особенностей его лицензий. Тем не менее, система контроля версий может быть использована в паре с Битрикс в качестве хранилища бэкапов.

Однако, внесение проекта на Битрикс под контроль SVN, не совсем тривиальная задача. Как минимум излишнем будет хранить файлы ядра Битрикса, так как:
1. Они не имеют никакого отношения к проекту
2. Их слишком много
3. Они постоянно обновляются

Казалось бы ничего страшного - ставим svn:ignore на папку bitrix и радуемся жизни. Но в таком случае мы не внесём под контроль SVN свои компоненты, шаблоны, настройки. Для решения этой проблемы я предлагаю воспользоваться механизмом символьных ссылок.

И так, суть решения состоит в следующем. Допустим Ваш проект располагается в каталоге /var/www/project и имеет следующую структуру папок:
* etc - каталог настроек
* bin - каталог вспомогательных скриптов
* lib - библиотеки
* www - document root сайта

Теперь действуем по пунктам:
1. Добавляем пустое дерево каталогов /var/www/project под контроль SVN
2. Разворачиваем Битрикс в /var/www/project/www
3. Проставляем свойство ignore для каталога www (svn propedit:ignore www), указывая в нём каталоги bitrix и upload
4. Коммитим (svn commit), обновляем (svn update) SVN - теперь она не обращает внимание на файлы в папках www/bitrix и www/upload
5. Переносим содержимое каталога www/bitrix/php_interface в каталог etc
6. Удаляем каталог www/bitrix/php_interface
7. Создаём символическую ссылку (находясь в каталоге www/bitrix выполняем ln -s ../../etc php_interface)
8. Пункты 5-7 повторяем для своего пространства имён компонентов, шаблонов и модулей (их можно положить в lib/componets, lib/templates и lib/modules соответственно).

После этого добавляем под контроль SVN все, видимые ей файлы в текущем репозитории и радуемся жизни.

P.S. Структуру tag/branch/trunk не стал организовывать для упрощения примера.

Чего делать категорически нельзя:

- загонять ВСЮ папку bitrix в svn
-- невменяемое количество файлов
-- папка .svn трактуется как модуль и система site update впадает в кому (в саппорт отписывался уже пару раз, обещали поправить)
-- папки .svn в сниппетах тоже трактуются как снипеты со всеми вытекающими (тоже писал в саппорт).


Если разработка под виндой, а сервер на никсах - может быть проблема с правами, владельцами.

В общем, это возможно.

Особенности работы с ipmi на supermicro

http://www.supermicro.com/manuals/other/Embedded_BMC_IPMI.pdf
http://www.supermicro.com/manuals/other/Onboard_BMC_IPMI.pdf

LAN Interface
This feature allows the user to select which port to use for IPMI out-of-band communication.
• The default setting is Failover, which will allow IPMI to be connected from either
the shared LAN port (LAN1/eth0) or the dedicated IPMI LAN port. Precedence
is given to dedicated LAN port over the shared LAN port.
• Select "Dedicated LAN" for IPMI to connect through the IPMI Dedicated LAN
port at all time.
• Select "Shared LAN" for IPMI to connect through the LAN1 port on the board

Переключение:
web-интерфейс: Configuration->Lan Select->Dedicated LAN
В IPMIView: на вкладке BMC Setting.

Проверил работу на подручной микре: режим failover, запустил пинг и вынул патчкорд из ipmi-интерфейса. Потерялся 1 пакет, но дальше пинги снова пошли. Поставил патчкорд назад, немного подождал, вынул кабель из lan1 - ни одного пакета не потерялось, значит переключило назад.
НО! говорят, есть особенность: если подать напряжение на сервер, в который сетевые кабели пока не воткнуты (или перезагрузили стойку и свич пока грузится, погасив все порты) -- независимо от выставленного режима ipmi будет работать только на lan1. ipmitool bmc reset cold не поможет. Решение - полностью выключить сервер, обесточить, проверить, что в ipmi есть кабель на работающий свич, подать питание.
Столкнулся с этой проблемой, весьма неприятно получилось.
UPD Возможно, это был баг, который уже поправили в свежих прошивках. Нет лишней железки для проверки.

UPD2: переключение режимов
Посмотреть какой режим сейчас установлен можно так ipmitool -l -lanplus raw 0x30 0x70 0xc 0 0 0

Default (failover): you will see 00 00
Dedicated LAN: you will see 01 00
Onboard LAN: you will see 01 01


Изменить можно так:

Set Dedicated LAN:
Ipmitool -l -lanplus raw 0x30 0x70 0xc 1 1 0

Set Onboard LAN1
Ipmitool -l -lanplus raw 0x30 0x70 0xc 1 1 1

Set Failover(default setting)
Ipmitool -l -lanplus raw 0x30 0x70 0xc 1 0 0

И рестартануть БМЦ

http://www.supermicro.com/support/faqs/faq.cfm?faq=9848

отсюда

среда, 7 сентября 2011 г.

Подключаем новый сервер c ipmi

Настраивал новую плату с ipmi (X8SI6-F), там есть ipmi

Подключил к сети. Штатно оно получит адрес по dhcp, но можно задать адрес в биосе. Изменять настройки можно или с диска (не проверял, возможно надо в /makedisk/makedisk.exe сделать загрузочный диск), или поставить OpenIPMI (в биосе нашёл только изменение айпи, но не пользователей), через ipmicfg, или через IPMI View. Если это делать удалённо - логин-пароль:
ADMIN:ADMIN
Через OpenIPMI - после установки появится ipmitool, про настройку сети через него есть у меня в заметках. С добавлением пользователя - копать в сторону

# ipmitool user list
ID  Name             Enabled Callin  Link Auth  IPMI Msg   Channel Priv Limit
2   ADMIN            false   true    false      false      Unknown (0x00)

# ipmitool user
User Commands: summary [<channel number>]
                   list    [<channel number>]
                   set name     <user id> <username>
                   set password <user id> [<password>]
                   disable      <user id>
                   enable       <user id>
                   priv         <user id> <privilege level> [<channel number>]
                   test         <user id> <16|20> [<password]>

Впрочем, можно получить
# ipmitool lan print 1
Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or directory
Get Channel Info command failed

Не загрузился ipmi-модуль.
# modprobe ipmi_devintf
Почему оно не грузится автоматом (как во фре), непонятно.

Можно добавить ipmievd (из OpenIPMI) в загрузку - ipmievd - IPMI event daemon for sending events to syslog

PS Неплохой обзор этой платы
http://www.servethehome.com/supermicro-x8si6-f-motherboard-review-including-onboard-lsi-sas-2008-controller/

пятница, 2 сентября 2011 г.

SATA/SAS контроллеры

http://blog.zorinaq.com/?e=10
From 16 to 2 ports: Ideal SATA/SAS Controllers for ZFS & Linux MD RAID

http://forum.ixbt.com/topic.cgi?id=11:35147
SATA/SAS/RAID-контроллеры для дома и офиса. Выбор и нюансы использования (FAQ)

http://forum.ixbt.com/topic.cgi?id=11:35388
Порекомендуйте дешевый но "сердитый" контроллер SATA150 (PCI 2.2)

вторник, 30 августа 2011 г.

Обновление пакетами: что делать, если сломали перл

Решили поставить/обновить например glib? Если обновлять пакетами (например portinstall -PP devel/glib20), можно увидеть такое:


---> Checking for the latest package of 'devel/glib20'
---> Fetching the package(s) for 'glib-2.28.8' (devel/glib20)
---> Fetching glib-2.28.8
/var/tmp/portupgradetCmzSZ97/glib-2.28.8.tbz 100% of 3095 kB 724 kBps
---> Downloaded as glib-2.28.8.tbz
---> Identifying the package /var/tmp/portupgradetCmzSZ97/glib-2.28.8.tbz
---> Saved as /usr/ports/packages/All/glib-2.28.8.tbz
---> Found a package of 'devel/glib20': /usr/ports/packages/All/glib-2.28.8.tbz (glib-2.28.8)
---> Located a package version 2.28.8 (/usr/ports/packages/All/glib-2.28.8.tbz)
---> Installing 'glib-2.28.8' from a package
---> Installing lang/perl5.12 as dependency required by glib-2.28.8
---> Checking for the latest package of 'lang/perl5.12'
---> Fetching the package(s) for 'perl-5.12.4_1' (lang/perl5.12)
---> Fetching perl-5.12.4_1
/var/tmp/portupgradeyshhUlQo/perl-5.12.4_1.tbz100% of 14 MB 986 kBps 00m00s
---> Downloaded as perl-5.12.4_1.tbz
---> Identifying the package /var/tmp/portupgradeyshhUlQo/perl-5.12.4_1.tbz
---> Saved as /usr/ports/packages/All/perl-5.12.4_1.tbz
---> Found a package of 'lang/perl5.12': /usr/ports/packages/All/perl-5.12.4_1.tbz (perl-5.12.4_1)
---> Located a package version 5.12.4_1 (/usr/ports/packages/All/perl-5.12.4_1.tbz)
---> Installing 'perl-5.12.4_1' from a package
---> Installing the new version via the package
pkg_add: package 'perl-5.12.4_1' conflicts with perl-5.10.1_3
pkg_add: -f specified; proceeding anyway
Removing stale symlinks from /usr/bin...
Removing /usr/bin/perl
Removing /usr/bin/perl5
Done.
Creating various symlinks in /usr/bin...
Symlinking /usr/local/bin/perl5.12.4 to /usr/bin/perl
Symlinking /usr/local/bin/perl5.12.4 to /usr/bin/perl5
Done.
Cleaning up /etc/make.conf... Done.
Spamming /etc/make.conf... Done.
Cleaning up /etc/manpath.config... Done.
Spamming /etc/manpath.config... Done.

Первое - НЕ ПАНИКОВАТЬ! Не пытаться срочно переустановить старый перл и так далее. Он на месте и полностью рабочий, и чинится за минуту.
1) Узнать старую версию перла
pkg_info |grep perl-5
Теперь для каждого смотрим информацию о зависимостях (Required by:)
pkg_info perl-5.10.1_3
У которого их много - это наша старая версия.

2) восстановить симлинки
cd /usr/bin/
unlink perl*
ln -s /usr/local/bin/perl5.10.1 perl
ln -s /usr/local/bin/perl5.10.1 perl5
На самом деле, надо ещё поправить: в /usr/local/bin перезаписывается perl и perl5, причём perl5 симлинк, а вот perl - файл.
rm /usr/local/bin/perl
unlink /usr/local/bin/perl5
cp /usr/local/bin/perl5.10.1 /usr/local/bin/perl
ln -s /usr/local/bin/perl5.10.1 /usr/local/bin/perl5

vi /etc/make.conf
исправляем версию перла..
vi /etc/manpath.config
тоже самое

Всё, перл вернули назад.

четверг, 25 августа 2011 г.

WiMesh - IEEE 802.11s

Wireless Mesh Network или стандарт IEEE 802.11s (версия 1.0)
Для Linux выпущены драйверы для mesh-сетей, соответствующих последней версии стандарта 802.11s
http://en.wikipedia.org/wiki/IEEE_802.11s

Легко эксплуатируемая DoS-уязвимость в HTTP-сервере Apache

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

Проблема вызвана ошибкой в реализации поддержки загрузки части файла по указанному диапазону (например, после обрыва соединения можно запросить загрузку начиная с определенной позиции). Ошибка связана с тем, что при обработке запроса, содержащего большое число диапазонов (например, "Range:bytes=0-,5-1,5-2,5-3,...,5-1000"), расходуется слишком много памяти. Для осуществления удачной атаки достаточно отправить около 50 подобных запросов на сервер.

Проблема присутствует в Apache 2.2.x, включая последний релиз 2.2.19. Исправление пока доступно в виде патча. Также имеется несколько способов временной защиты, не требующих пересборки Apache. Например, можно принудительно очищать заголовок Range при помощи mod_header ("RequestHeader unset Range") или блокировать длинные последовательности Range через mod_rewrite:



# Вариант 1:
RewriteEngine On
RewriteCond %{HTTP:Range} bytes=0-[0-9]+, [NC,OR]
RewriteCond %{HTTP:Range} bytes=([0-9-],){4,} [NC,OR]
RewriteCond %{HTTP:Range} bytes=[0-9,-]+,0-(,|$) [NC]
RewriteRule .? http://%{SERVER_NAME}/ [NS,L,F]

# Вариант 2:
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(HEAD|GET) [NC]
RewriteCond %{HTTP:Range} ([0-9]*-[0-9]*)(\s*,\s*[0-9]*-[0-9]*)+
RewriteRule .* - [F]

# Вариант 3:
RewriteEngine On
RewriteCond %{HTTP:Range} bytes=0-.* [NC]
RewriteRule .? http://%{SERVER_NAME}/ [R=302,L]


http://www.opennet.ru/opennews/art.shtml?num=31582

Проверялка
http://seclists.org/fulldisclosure/2011/Aug/att-175/killapache_pl.bin

apache+nginx: убираем порт из адреса при редиректе

Столкнулся на одном проекте с багой: после 301 редиректа адрес становился вида site.ru:8080/newaddr

Оказалось, в данном случае в конфиге был прописан
UseCanonicalName On

Закомментировал - заработало как надо.
Если что - есть вариант прописать в конфиге апача после VirtualHost
Port 80

"Появление порта 8080 в адреса вызвано работой модуля Apache mod_dir. Правильное решение проблемы - добавление Port 80 в конфигурацию Apache.
Установка же header в nginx не всегда решает проблему - некоторые сайты генерируют адрес с использованием директивы Port, которая, если её не выставить, остаётся 8080."
http://forum.nic.ru/archive/index.php/t-197.html

ЗЫ
Не забываем проверить и остальные части конфигов, они такие:
nginx:
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
#proxy_redirect http://${SITENAME}:${PORT}/ http://${SITENAME}/;
...

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

apache - mod_rpaf:
LoadModule rpaf_module libexec/apache22/mod_rpaf.so
RPAFproxy_ips 127.0.0.1 1.2.3.4
RPAFEnable On
RPAFheader X-Forwarded-For
#RPAFsethostname On

Не могу упомянуть занятную статью
http://greenmice.info/ru/node/116

понедельник, 22 августа 2011 г.

Новая редакция закона о ПД: нужно ли нам бояться?

Новая редакция закона о ПД: нужно ли нам бояться?

Срочно переезжаем в «облако»: частые ошибки
Защита в виртуальной среде: чеклист угроз

Запись вебинара «Изменения в законе о защите персональных данных»
http://connect.webinar.ru/join.php?id=9572bb6eac50b088cbb53e77ac5dbb4c&afid=&pw=&r=c4ca4238a0b923820dcc509a6f75849b

Об ублюдочности cisco NAT

Задача: есть мобильные пользователи, которые ходят со своими ноутами и могут работать с сетевыми сервисами как из дома, так и из офиса. Для этого адрес должен быть внешний, вида office.site.ru
Причём вариант service.office.site.ru рассматривается лишь как крайний случай.
Я могу решить эту задачу на freebsd, не так давно было на базе kerio, это легко сделать за 15 минут гугления на iptables...
Но я уже месяц не могу это сделать на циске. Нет, может качество железа у них на уровне, и их гибкостью многие восторгаются... Но эта гибкость появляется несколько в других областях. А по данной проблеме спросил 5 опытных цисководов - все долго гуглили, в итоге разводили руками и советовали делать через service.office.site.ru и локальный днс (серверов много - "по сервису на сервер", а благодаря виртуализации железа при этом много не надо).
В данном случае через днс получается как раз "через жопу": основной домен лежит снаружи и по многим причинам внутри не будет, создать view никто там не даст. Но в инете "спецы" описывают данное решение как единственный "правильный" путь, потому что никак не могут признать отстойность ната в цисках и отсутствия банальных snat и dnat штатно, большая сложность создания нескольких нат-правил...
пример на opennet

Как вариант, заказал второй айпи, прописал его как secondary... Из мира всё работает по обоим айпи, а вот из локалки - нет (через один внешний айпи на другой).

Есть подозрение, что задача не через днс решается только с железом на десяток-другой килобаксов.

Также можно почитать про NAT Order of Operation
http://www.cisco.com/en/US/tech/tk648/tk361/technologies_tech_note09186a0080133ddd.shtml
https://learningnetwork.cisco.com/docs/DOC-8009
https://learningnetwork.cisco.com/thread/30633

воскресенье, 21 августа 2011 г.

Немного про MODX Revolution

Небольшая подборка ссылок

С MODx Evolution уже доводилось общаться - неплохая цмс. Лучше всяких жумл и особенно юми. В чём-то даже удобнее битрикса. Хотя пока не было больших проектов на модх :) На битриксе были, но там свои нюансы...

Быстрый старт в MODX Revolution
http://habrahabr.ru/blogs/modx/116614/
И далее в "похожие посты".

Про "встроенная консоль" - в данном варианте вещь весьма уязвимая (читать комменты). Надо делать через "пишем в файл - запускаем штатными методами", избегая eval()

Ну и основная ветка там - http://habrahabr.ru/blogs/modx/

среда, 17 августа 2011 г.

Подключаем внешнее хранилище к XenServer по iSCSI

Само хранилище будет лежать на хосте с CentOS.

Для начала, надо понять терминологию.
Инициатор (initiator) — iSCSI-клиент.
Таргет — iSCSI-сервер; предоставляет доступ к своим устройствам по iSCSI.
Обнаружение (discovery) — процесс, в ходе которого инициатору становятся известны доступные ему таргеты.
Существующие на сегодняшний день методы обнаружения:
iSNS (Internet Storage Name Service);
SendTargets — таргеты обнаруживаются через специальный адрес обнаружения (discovery-address);
Использование протокола SLP (Service Location Protocol);
Статическое указание.

Именование в iSCSI
IQN (iSCSI qualified name) – имя длиной до 255 символов в следующем формате:
iqn.<year-mo>.<reversed_domain_name>:<unique_name>
Здесь:
<year-mo> это год (year) и месяц (mo), когда был зарегистрирован домен;
<reversed_domain_name> официальное имя домена, записанное в обратном порядке;
<unique_name> это произвольное имя, например, имя сервера.
Пример: iqn.1998-01.com.mycompany:myserver.
EUI (extended unique identifier) – Represents the eui. prefix followed by the
16‐character name. The name includes 24 bits for company name assigned by the IEEE and 40 bits for a unique ID such as a serial number. Например, eui.0123456789ABCDEF.
http://xgu.ru/wiki/iSCSI

Вот так вот хитро и непонятно.

Варианта штатно 2:
netbsd-iscsi.x86_64 : User-space implementation of iSCSI target from NetBSD
scsi-target-utils.x86_64 : The SCSI target daemon and utility programs
Плюс уже стоит
iscsid - Open-iSCSI daemon

netbsd - userspace, то есть медленно и грузит цп.

Есть варианты вроде компиляции самому, например Установка iSCSI-target на CentOS, но тогда уж надо собирать open-scsi c iSER.. В общем, будем разбираться с scsi-target-utils

"Хранилище"
Ставим пакет.
# yum install -y scsi-target-utils.x86_64

Конфиг лежит в (!) /etc/tgt/target.conf
Впрочем, есть вариант "напрямую" через tgtadm. Попробуем.
# tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2000-01.ru.spb.webmaster:disk1
# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /mnt/1t/xen/iSCSI/iscsi-target0
Для теста я поставил в заранее созданный файл на 4Gb
# ls -la /mnt/1t/xen/iSCSI/iscsi-target0
-rw-r--r-- 1 root root 4294967808 Sep 29 2010 /mnt/1t/xen/iSCSI/iscsi-target0
# tgtadm --mode target --op show
Target 1: iqn.2000-01.ru.spb.www:disk1
System information:
Driver: iscsi
State: ready
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: IET 00010000
SCSI SN: beaf10
Size: 0 MB
Online: Yes
Removable media: No
Backing store type: null
Backing store path: None
Backing store flags:
LUN: 1
Type: disk
SCSI ID: IET 00010001
SCSI SN: beaf11
Size: 4295 MB
Online: Yes
Removable media: No
Backing store type: rdwr
Backing store path: /mnt/1t/xen/iSCSI/iscsi-target0
Backing store flags:
Account information:
ACL information:

Теперь пробуем подключить этот лун в хенсервере. Вводим имя хоста, Discover IQNs - находит. Делаем Discover LUNs - получаем "The SR failed to complete the operation".
Дело в том, что у нас просто "нет прав", что можно проверить с другой машины в сети
# iscsiadm -m discovery -t st -p 192.168.2.15
#

Дадим права.
# tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL

Снова с другой машины:
# iscsiadm -m discovery -t st -p 192.168.2.15
192.168.2.15:3260,1 iqn.2000-01.ru.spb.www:disk1

Отлично.
Снова делаем Discover LUNs, ждём секунд 10, радуемся.
Finish, да форматировать
Появился диск, можно на него ставить систему.

Вообще, правильнее давать не файлы, а LV-разделы например. Для этого в -b указывается путь в /dev
-b /dev/mapper/iscsi_vg-iscsi_300Gb

И ещё сюрприз.
Перезапускаем сервис... и все таргеты пропадают. Установка 777 на конфиг файл и рабочую директорию не помогает.

Все операции выше уместились в 3 строки

<target iqn.2000-01.ru.spb.www:disk1>
backing-store /mnt/1t/xen/iSCSI/iscsi-target0
</target>

Некоторые вещи можно делать через
tgt-admin
tgt-setup-lun

например, tgt-admin -s
аналог tgtadm --mode target --op show

Линки
http://xgu.ru/wiki/iSCSI
http://markelov.blogspot.com/2008/11/iscsi-target-initiator-rhelfedora.html
http://daevy.uzps.mh.ru/?p=512
http://redhat-club.org/forum/viewtopic.php?id=8491