FastNetMon

Sunday 28 February 2010

Установка collectd на Debian

Ставим:
apt-get install -y collectd


Открываем конфиг:

vi /etc/collectd/collectd.conf


Стандартно ведется мониторинг следующих параметров: батарея, процессор, диск, энтропия, сеть, irq, load, memory, processes, swap, users. Дополнительные датчики Вы можете найти по адресу: http://collectd.org/wiki/index.php/Table_of_Plugins При этом метрики отписываются в RRD файлы (папка с ними здесь: /var/lib/collectd/rrd), а логи пишутся в SysLog. Такой расклад дел я считаю полностью оптимальным :)

Я предлагаю отключить все, кроме мониторинга cpu, load и memory (по соображениям снижения нагрузки на систему от мониторинга), поэтому комментируем диезом (#) все остальные строки LoadPlugin (кроме syslog и rrdtool, разумеется).

Также удаляем файлы данных от уже ненужных плагинов:
rm /var/lib/collectd/rrd/domain.ru/* -rf


Применяем настройки:
/etc/init.d/collectd restart


Разработчики collectd многократно обращают внимание на то, что collectd только сохраняет данные, но никаким образом их не отрисовывает, для этого служат CGI скрипты (к слову, оба из них генерируют графики на лету и не требуют временных файлов и крон-задач, но с поправкой на нагрузку) /usr/share/doc/collectd/examples/collection.cgi и /usr/share/doc/collectd/examples/collection3, при этом Интернеты утверждают, что тот, что с 3кой - более продвинута версия скрипта без тройки :) Будем ставить более новый :)

Ставим его зависимости:
apt-get install librrds-perl libconfig-general-perl libhtml-parser-perl


Копируем файлы скрипта визуализации в папку Апача с поддержкой ExecCgi
cp -R /usr/share/doc/collectd/examples/collection3/ /var/www/cgi-bin


Теперь открываем URL: http://domain.ru/cgi-bin/collection3/bin/index.cgi и наслаждаемся результатом :) Либо же идем и юзаем альтернативы, например: http://auxesis.github.com/visage/ и вот (подробное описание VIsage) http://holmwood.id.au/~lindsay/2009/09/08/graphing-collectd-statistics-in-the-browser-with-visage/

Кроме генерации графиков на лету есть возможность генерировать графики вручную посредством скрипта: /usr/share/doc/collectd/examples/collectd2html.pl, который вызывается следующим образом:

cd
mkdir rrd
cd rrd
perl /usr/share/doc/collectd/examples/collectd2html.pl --data-dir=/var/lib/collectd/rrd/`hostname`/load


После этого будут сгенерированы папка и файл, содержащие html код и изображения с графиками за разные временные отрезки (load-1day.png load-1hour.png load-1month.png load-1week.png):
1.domain.ru.dir 1.domain.ru.html


А вот мануалы по написанию своих плагинов на Перле: http://collectd.org/wiki/index.php/Plugin:Perl и http://collectd.org/documentation/manpages/collectd-perl.5.shtml

источники: http://linuxpoison.blogspot.com/2010/01/collectd-linux-system-statistics.html и http://collectd.org/wiki/index.php/First_steps

Гениальный пример оформления форм

Как послать письмо из Perl, используя /usr/bin/mail?

perl -e 'open my $mail, "| mail -s test test\@domain.ru" or die; print $mail "body"; close $mail '

Saturday 27 February 2010

Даунгрейд / downgrade testing/unstable до lenny

vi /etc/apt/preferences



Package: *
Pin: release a=stable
Pin-Priority: 9000


apt-get update
apt-get upgrade


Если в результате этих манипуляций будет выдаваться нечто в виде:
0 upgraded, 0 newly installed, 0 to remove and 80 not upgraded.


То это означает, что нужно далее запустить команду:
apt-get dist-upgrade


Либо если нужен частичный даунгрейд:
apt-get install programmname

Сборка в Debian ядра с kernel.org

Идем на: http://kernel.org/, смотрим какое ядро "Latest Stable Kernel" и скачиваем его.

Скачиваем:

cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.9.tar.bz2
tar -xf linux-2.6.32.9.tar.bz2
cd linux-2.6.32.9


Если Вам требуется самое новое актуальное ядро (сейчас это 2.6.33.7), а не то, что идет с долгой поддержкой, вызываем следующие команды (а такде не забудьте поставить kernel-package из testing):

cd /usr/src
export KERNEL_VERSION=2.6.33.7
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-$KERNEL_VERSION.tar.bz2
tar -xf linux-$KERNEL_VERSION.tar.bz2
cd linux-$KERNEL_VERSION


Копируем конфиг от активного ядра:

cp /boot/config-`uname -r` .config


Ставим ncurses, необходимый для работы конфигуратора:

apt-get install -y libncurses5-dev


Запускаем конфигуратор:

make menuconfig


Корректируем, что требуется, выходим из конфигуратора по Exit и подтверждаем сохранение конфига.

Ставим спец-софт для сборки .deb пакетов с ядром:
apt-get install -y kernel-package


Очищаем директорию от временных файлов, оставшихся от прошлой сборки(если она была):
make-kpkg clean


В случае 2.6.33 ядра и Debian Lenny (ну Ubuntu все должно быть ок) следующая операция у Вас завершится гарантированной неудачей, чтобы ее не постигнуть читаем здесь: http://phpsuxx.blogspot.com/2010/02/2633-makekpkg.html

Собираем (2 - означает число ядер в системе, ставьте на основе того, сколько у Вас их):
CONCURRENCY_LEVEL=2 make-kpkg --initrd --revision=1.2 --append-to-version=-mycompany-1-2 kernel-image


Кстати, есть фишка у make-kpkg - он Вам не даст собрать ядро, пока вы не сделали clean, что при частой пересборке ядра (например при тюнинге) очень неудобно, но решение есть:

vi /etc/kernel-pkg.conf



do_clean := NO


Теперь ждем, после окончания сборки в папке /usr/src будет создан пакет .deb c новым ядром, его нужно установить командой:
dpkg -i kernel-some-version.deb

После установки этого .deb пакета возможна проблема - initrd не будет создан автоматически (у меня она имела место лишь на Debian 5 Lenny), более подробно о баге: http://phpsuxx.blogspot.com/2010/09/make-kpkg-deb-initrd.html

gmirror: Command 'load' not available.

Команда gmirror load отказывается работать и не запускает /dev/mirror.

ls /dev/mirror/
ls: /dev/mirror/: No such file or directory

Смотрим список доступных модулей:
kldstat
Id Refs Address Size Name
1 2 0xffffffff80100000 bd23e0 kernel
2 1 0xffffffff80e22000 cb52 geom_mirror.ko

Выгружа
ем модуль:
kldunload geom_mirror.ko


Убеждаемся, что он выгрузился:
kldstat
Id Refs Address Size Name
1 1 0xffffffff80100000 bd23e0 kernel


Повторно пробуем запустить RAID:
gmirror load


Теперь все окей:
# ls -la /dev/mirror/
total 1
dr-xr-xr-x 2 root wheel 512 Feb 27 15:14 .
dr-xr-xr-x 6 root wheel 512 Feb 27 15:04 ..
crw-r----- 1 root operator 0, 91 Feb 27 15:04 gm0
crw-r----- 1 root operator 0, 92 Feb 27 15:04 gm0s1
crw-r----- 1 root operator 0, 93 Feb 27 15:04 gm0s1a
crw-r----- 1 root operator 0, 94 Feb 27 15:04 gm0s1b
crw-r----- 1 root operator 0, 95 Feb 27 15:04 gm0s1c


Кстати, в процессе восстановления пробовал команды gmirror clear ad4 / ad6, возможно, помоги они.

lsmod в FreeBSD

kldstat

Fastvps.ru, конфигурация NHS-3 на Intel Core i7 975 - выжми из сервера все!

Сборка 33го ядра в 8 потоков следующим образом:
time CONCURRENCY_LEVEL=8 make-kpkg --initrd --revision=1.1 --append-to-version=-xxx-1-1 kernel-image


Занимает всего-то 8 минут:
real 8m6.685s
user 44m24.038s
sys 5m4.447s


Эх, вот это скорость =)

Friday 26 February 2010

2.6.33 + make_kpkg

Воот натолкнулся на такой баг при сборке 2.6.33 посредством make-kpkg:

This is kernel package version 11.015.
echo "The UTS Release version in include/linux/version.h"; echo " \"\" "; echo "does not match current version:"; echo " \"2.6.33-xxxx-2-1\" "; echo "Please correct this."; exit 2
The UTS Release version in include/linux/version.h
""
does not match current version:
"2.6.33-xxxxxx-2-1"
Please correct this.
make[1]: *** [debian/stamp/install/linux-image-2.6.33-xxxx-2-1] Error 2
make[1]: Leaving directory `/usr/src/linux-2.6.33'
make: *** [kernel-image] Error 2


Вот пакадж для Lenny: http://packages.debian.org/lenny/kernel-package как я понял, в стабильной ветке этот баг исправлять не будут. Так что идем в сквиз http://packages.debian.org/squeeze/kernel-package и ставим руками пакет с него, так как в версиях выше 12.032 баг исправлен (ссылка).

Ставим kernel-package вручную из testing (да, я знаю, что это можно сделать через Apt, но в моем конкретном данном случае это не подходит):

cd /usr/src
wget http://ftp.us.debian.org/debian/pool/main/k/kernel-package/kernel-package_12.036_all.deb
dpkg -i kernel-package_12.036_all.deb


О причинах сюда: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=561569

О надежности ПО


Как-то, еще в Ташкенте, я калибровал весы для бытового мусора. Меня, еще только выпускника политеха, взяли на работу в крупную немецкую строительную компанию. Работа была не бей лежащего. Месяцами сидел дома, фантастику читал, даже за зарплатой, раз в месяц, ехать лень было. Дело в том, что софт для испанско-немецко-китайско-английской техники, писали немцы а не майкрософт и после качественной, разовой его настройки я мог никогда не возвращаться к этому вопросу, а за поддержку платили пока шла стройка новых объектов и пока я был единственным в городе, кто знал как выполнять мою работу.


Вот так надо писать софт, да. Нашим зачастую такое качество даже близко не снилось :)

via http://ganievich.livejournal.com/108856.html

Как смотреть логи бэкап системы ISP?

Вот так:
tail -f /usr/local/ispmgr/var/pbackup.log

Как сменить кодировку таблиц в MySQL дампе?

Так:
sed -i s/CHARSET=utf8/CHARSET=cp1251/g katalog.sql


Также лучше сменить кодировку файла дампа:
cat dump.sql | iconv -f utf8 -t cp1251 > dump1251.sql


А также заменить SET NAMES utf8 на SET NAMES cp1251.

Thursday 25 February 2010

Описание устройства DEB пакетов на русском

http://wiki.debian.org/DebianRussian/DebinstPackages

cURL: как менять исходящий IP?

Часто на серверах используется большое количество IP, но все программы и скрипты используют самый первый из них (точнее тот, для которого прописан default route). Изменить это поведение вполне возможно, пример кода ниже. Этот скрипт при выполнении отображает IP адрес, который видят удаленные сервисы.


<?PHP
// create a new cURL resource
$ch = curl_init();

// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, "http://automation.whatismyip.com/n09230945.asp");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_INTERFACE, '88.xx.xx.xx'); // работаем через дополнительный IP
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// grab URL and pass it to the browser
$output = curl_exec($ch);
echo $output;

// close cURL resource, and free up system resources
curl_close($ch);
?>


Если же cURL не используется, а используются лишь голые сокеты, то это все равно возможно сделать: http://blog.nachtarbeiter.net/2008/08/21/binding-phps-fsockopen-to-a-specific-ip-address/

По материалам http://www.php.net/manual/en/function.curl-setopt.php

Как быстро узнать из консоли свой реальный внешний IP?

wget -O- -q http://automation.whatismyip.com/n09230945.asp 
curl http://automation.whatismyip.com/n09230945.asp 

Ключевое слово: Whatismyip. 

Ускорение компиляции C/C++ программ: ccache

Да, ожидаемое ускорение до 4-5 раз: http://ccache.samba.org/performance.html

А вот отзывы: http://www.vflare.org/2009/03/ccache-to-speed-up-linux-kernel-compile.html

OpenVZ: CPUUNITS vs CPULIMIT

По сабжу рекомендую свою же статью: http://www.stableit.ru/2014/08/cpulimit-cpuunits-cpus-cpu-openvz.html

Векторная графика на Js? Легко!

http://raphaeljs.com/

Пересборка PHP на Debian для поддержки imagerotate

И да, то, что PHP в Debian 5 Lenny собран с системным gd, а не со встроенным, тоже его баг. Аналогичная проблема с функциями imageconvolution(), imageantialias().

Убеждаемся,что стоит не Bundled версия GD:
php -i | grep gd -i
/etc/php5/cli/conf.d/gd.ini,
ffmpeg-php gd support => enabled
gd
GD Support => enabled
GD Version => 2.0 or higher


Предварительно рекомендую обновить систему, чтобы поставить актуальную версию PHP:
apt-get update;
apt-get -y upgrade;

cd /usr/src
apt-get install -y dpkg-dev devscripts build-essential fakeroot
apt-get source libapache2-mod-php5
apt-get build-dep -y libapache2-mod-php5
cd php5-5.2.6.dfsg.1


Теперь вносим коррективы (переключаемся с внешнего gd на внутренний):

sed -i 's/-with-gd=shared,\/usr/-with-gd=shared/' debian/rules



Собираем:

debuild -us -uc # -us unsigned source, -uc unsigned changes
# если же требуется на 64 битной архитектуре собирать 32 битный пакет, то команда будет иной:
# debuild -us -uc -ai386


Ставим обновленный gd (32 бита):
cd ..
dpkg -i php5-gd_5.2.6.dfsg.1-1+lenny9_i386.deb

Или так (64 бита):
cd ..
dpkg -i php5-gd_5.2.6.dfsg.1-1+lenny9_amd64.deb

Рестартим Апача:

/etc/init.d/apache2 restart


Убеждаемся, что встала Bundled сборка GD:
php -i | grep gd -i
/etc/php5/cli/conf.d/gd.ini,
ffmpeg-php gd support => enabled
gd
GD Support => enabled
GD Version => bundled (2.0.34 compatible)


Тестим работу:
php -r "imagerotate();"


и еще вторую функцию:
php -r "imageconvolution();"


Блокируем обновление php5-gd, чтобы более новая версия не заменила нашу:
echo "php5-gd hold" | dpkg --set-selections


Кому требуется "легкий путь", вот уже собранная под 32 и 64 битный Debian версия:
apt-get update; apt-get upgrade
cd /usr/src


32 бита:
wget http://fastvps.googlecode.com/files/php5-gd_5.2.6.dfsg.1-1%2Blenny8_i386.deb
dpkg -i php5-gd_5.2.6.dfsg.1-1+lenny8_i386.deb


64 бита:
wget http://fastvps.googlecode.com/files/php5-gd_5.2.6.dfsg.1-1%2Blenny8_amd64.deb
dpkg -i php5-gd_5.2.6.dfsg.1-1+lenny8_amd64.deb



echo "php5-gd hold" | dpkg --set-selections
/etc/init.d/apache2 restart


основано на: http://digitalconsumption.com/forum/622-PHP-imagerotate-on-Debian и http://cumu.li/2008/5/13/recompiling-php5-with-bundled-support-for-gd-on-ubuntu

Хазин жжот

Чем занимаются "Ростехнологии", вообще мало кто знает, но на примере "АвтоВАЗа" понятно, что [это] неэффективно


via http://www.bbc.co.uk/russian/business/2010/02/100224_corporations_reform.shtml

Wednesday 24 February 2010

Вышло 2.6.33, ура!

За ебилдами прошу сюда: http://kernel.org/ :)

При старте системы некорректно стартует fail2ban

В логах вот такая фигня:
tail -f /var/log/fail2ban.log
2010-02-25 01:17:49,943 fail2ban.jail : INFO Jail 'sasl' started
2010-02-25 01:17:50,086 fail2ban.actions.action: ERROR iptables -N fail2ban-dovecot
iptables -A fail2ban-dovecot -j RETURN
iptables -I INPUT -p tcp -m multiport --dports 110,143,993,995 -j fail2ban-dovecot returned 200
2010-02-25 01:17:50,087 fail2ban.actions.action: ERROR iptables -N fail2ban-sasl
iptables -A fail2ban-sasl -j RETURN
iptables -I INPUT -p tcp -m multiport --dports 25,587 -j fail2ban-sasl returned 200
2010-02-25 01:17:50,090 fail2ban.actions.action: ERROR iptables -N fail2ban-proftpd
iptables -A fail2ban-proftpd -j RETURN
iptables -I INPUT -p tcp -m multiport --dports ftp -j fail2ban-proftpd returned 200


Кто подскажет, почему так?

UPDATE:
И это тоже баг fail2ban: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=554162 а фикс взят отсюда: http://sourceforge.net/tracker/?func=detail&aid=2870788&group_id=121032&atid=689044

Фиксим.
vi /etc/fail2ban/action.d/iptables-multiport.conf


И корректируем actionstart следующим образом (добавляем sleep....):

14 actionstart = sleep ${RANDOM:0:1}.${RANDOM: -1:1}
15 iptables -N fail2ban-
16 iptables -A fail2ban- -j RETURN
17 iptables -I INPUT -p -m multiport --dports -j fail2ban-


И аналогично поступаем с actionstop:

23 actionstop = sleep ${RANDOM:0:1}.${RANDOM: -1:1}
24 iptables -D INPUT -p -m multiport --dports -j fail2ban-
25 iptables -F fail2ban-
26 iptables -X fail2ban-


После этого попробуйте перезапустить машину и все должно подняться успешно. Бага вызвана тем, что fail2ban мультипоточный и при запуске нескольких процессов происходит race-condition - попытка добавить забаниваемого юзера до того, как правило fail2ban-name будет создано. Вот так, да.

UPDATE:
Все заработало! На 8ядерном i7 полет нормальный, 4 правила после ребута поднимаются на ура.

UPDATE:
при повторном ребуте также все окей!

Исправленное правило для fail2ban для защиты Dovecot / Debian

Необходимо внести в файл /etc/fail2ban/filter.d/dovecot-pop3imap.conf (взятый по ссылке ниже) следующий контент:


[Definition]
# Example:
# Feb 25 00:56:29 v1 dovecot: pop3-login: Aborted login (1 authentication attempts): user=, method=PLAIN, rip=95.79.205.2, lip=188.40.60.215, TLS

# fixed by FastVPS version:
failregex = (?: pop3-login|imap-login): (?:Authentication failure|Aborted login|Aborted login \(auth failed|Disconnected \(auth failed).*rip=(?P\S*),.*
ignoreregex =


Первоначальная версия взята здесь: http://wiki.dovecot.org/HowTo/Fail2Ban

Исправленное правило для fail2ban для защиты Postfix / Debian

Необходимо заменить содержимое файла /etc/fail2ban/filter.d/sasl.conf на следующее (в стандартной версии баг в регулярном выражении):


# Fail2Ban configuration file
#
# Author: Yaroslav Halchenko
#
# $Revision: 510 $
#

[Definition]

# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P\S+)
# Values: TEXT
#

# Example:
# Feb 25 00:38:07 v1 postfix/smtpd[11100]: warning: unknown[95.79.205.2]: SASL PLAIN authentication failed: authentication failure

# fixed by FastVPS version:
failregex = : warning: [-._\w]+\[\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed: authentication failure$

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

Debian: как отучить Bind слушать 953й порт на ipv6

Открываем конфиг:
vi /etc/default/bind9


Добавляем там параметр для запуска демона Named только с поддержкой ipv4:
OPTIONS="-4 -u bind"


Перезапускаем Named:
/etc/init.d/bind9 restart


Убеждаемся, в результатах:

netstat -lnpt | grep 953
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 10181/named


Источник: http://ubuntu-tutorials.com/2009/03/21/configure-bind-9-for-ipv4-or-ipv6-only/

Debian: как отучить Proftpd слушать на ipv6 интерфейсе

Открываем конфиг:
vi /etc/proftpd/proftpd.conf


Вписываем там в верху следующее:
# disable ipv6 support
UseIPv6 off


Перезапускаем демона:

/etc/init.d/proftpd restart


Убеждаемся, что слушается только ipv4:

netstat -lnpt | grep :21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 8384/proftpd: (acce

Debian: отучить SSH слушать ipv6 интерфейс

Стандартно SSHD на Debian слушает на ipv6 интерфейсе, что далеко не всем нужно:

netstat -lnpt | grep ssh
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6555/sshd
tcp6 0 0 :::22 :::* LISTEN 6555/sshd


Открываем конфиг:
vi /etc/ssh/sshd_config


Добавляем около закомментированного ListenAddress:
AddressFamily inet


Перезапускаем SSH:
/etc/init.d/ssh restart


Убеждаемся, что слушается только ipv4:
netstat -lnpt | grep ssh
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 7675/sshd


Источник: http://ubuntu-tutorials.com/2008/01/12/disabling-ssh-connections-on-ipv6/

Sunday 21 February 2010

Почта России жжот!

Гугл мне выслал купон на 1400 бонусных рублей, на рекламу, дата высылки купона датирована 18 января (отпечатано на самой карточке), пришел он только СЕГОДНЯ, 20го февраля.

Внимание, самое интересное - купон имеет дату окончания - 28 ФЕВРАЛЯ! Я так понимаю, у Америкацев просто не могло возникнуть мысли, что письмо в 21м веке может идти МЕСЯЦ.

Bash, как работать с файлами, в именах которых есть дефис?

Вот так: http://www.cyberciti.biz/faq/linuxunix-move-file-starting-with-a-dash/

OpenVZ мониторинг использования полосы

http://wiki.openvz.org/Monitoring_bandwidth_of_containers

Версии vzctl в CentOS 5 и Debian 5 Lenny

Lenny: 3.0.22-14
CentOS: 3.0.23


Так что я не рискну делать между ними лайв миграции, тем более у них еще и ядра разных веток :)

Windows Media Player для MacOS X

http://www.microsoft.com/windows/windowsmedia/player/mac/mp9/default.aspx

Как просматривать формат wmv на MacOS ?

Для этого необходимо скачать и поставить следующий кодек: http://www.microsoft.com/windows/windowsmedia/player/wmcomponents.mspx

Saturday 20 February 2010

Хостинг-беспредел, фейк или правда о ИТ?

Все, думаю видели http://komm-bespredel.livejournal.com/ или нет?

linuxforum.ru - говно

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

А последние события с пересрачем между собой админов сайта как бы это подтверждают:
http://www.linux.org.ru/news/russia/4573614?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+org%2FLOR+%28Linux.org.ru%3A+%D0%9D%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8%29&utm_content=Google+Reader

Апдейт, новый адрес форума тут: http://linuxforum.etersoft.ru/

Официальная версия событий от уважаемого человека: http://alv.me/?p=1046/

Error: vzcpt module is not loaded on the source node

При переносе OpenVZ контейнера столкнулся с проблемой:
vzmigrate -v --remove-area no --online domain.ru 1111
OPT:-v
OPT:--remove-area
OPT:--online
OPT:domain.ru
Starting online migration of CT 1098 to domain.ru
OpenVZ is running...
Error: vzcpt module is not loaded on the source node
Error: Can't continue online migration


Фиксится легко:
modprobe vzcpt

Использование Nginx для проброса всего http трафика на сторонний сервер

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


Проксирующий сервер будет у нас стоять на Debian 5 Lenny и иметь IP p.p.p.p (proxy), а основной будет иметь айпи s.s.s.s (source).

Ставим необходимое ПО:
apt-get install -y nginx


Открываем конфиг:
vi /etc/nginx/sites-enabled/default


Удаляем там все и вносим следующее:

server {
listen 80;
server_name _;

access_log /var/log/nginx/localhost.access.log;

location / {
# передаем хостнейм удаленному серверу
proxy_set_header Host $host;
proxy_pass http://s.s.s.ss:80;
}
}


Запускаем Nginx:
/etc/init.d/nginx start


Ну и все, теперь достаточно свернуть DNS на новый пркоси-сервер и все заработает =)

Управление машиной без руля, фантастика? Реальность!

http://rromarom.livejournal.com/428449.html

Исполнители некачественной рассылки СПО для школ оштрафованы на 11 млн, ура товарищи!

http://www.linux.org.ru/news/russia/4571141?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+org%2FLOR+%28Linux.org.ru%3A+%D0%9D%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8%29&utm_content=Google+Reader

Friday 19 February 2010

Переустановка GRUB в Rescue Mode на FastVPS.ru

При условии типовой конфигурации делается это следующим образом.

Монтируем диск с root:
mount /dev/md2 /mnt


Чрутимся:

chroot-prepare /mnt
chroot /mnt


Монтируем /boot:
mount /dev/md1 /boot


Переустанавливаем grub:
grub-install /dev/sda
grub-install /dev/sdb


Выходим из чрута и демаунтим все диски:

umount /boot
exit
cd
umount -a


Ребутимся:
shutdown -r now

Thursday 18 February 2010

О слетанности экипажа или о формализации бизнес-процессов



Почти половина комментариев ко вчерашнему посту "Аэропорт глазами пилота" была о философии AIRBUS и о том, что пилоты знакомятся друг с другом только перед полетом, а не летают слетанным экипажем. Я нашел интересную презентацию о философии кабины от компании AIRBUS, а также получил комментарии от пилотов. В прошлой статье я забыл несколько интересных фактов, которые тоже собрал здесь. Простите, что немного сумбурно…

Вначале о слетанности и философии AIRBUS. Признаю, я тут немного неправильно понял. Есть позиция производителей и эксплуатантов всех самолетов с двухчленным экипажем об отсутствии необходимости (и даже некоторой вредности) полетов в закрепленном составе экипажа. Все это хорошо объясняется в пособии по CRM (crew resource management), но они нудные и на буржуйском языке написаны.

Летчики S7 хотели мне сказать то, что именно AIRBUS унифицировал свои процедуры до такой степени, что прийди они сегодня в Delta или любую другую авиакомпанию, они сразу смогут сесть в кабину с каким-нибудь Джоном и сразу полететь!!! И у них не возникнет никаких непоняток по поводу того, как выполнять ту или иную процедуру.


Похоже, у меня теперь есть компания-идеал для подражания и копирования :)

via http://sergeydolya.livejournal.com/134356.html

Установка IonCube на FreeBSD 7.2

Ставим wget:
cd /usr/ports/ftp/wget
make install clean


Переходив в домашнюю папку:
cd



32 битная версия:
wget http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_fre_7_x86.tar.gz

64 битная:
wget http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_fre_7_x86-64.tar.gz


Ставим:

tar -xf ioncube_loaders_fre_7_x86-64.tar.gz
cd ioncube
cp ioncube_loader_fre_5.2.so /usr/local/lib/php/20060613


Открываем конфиг:

vi /usr/local/etc/php/extensions.ini


И добавляем там перед всеми остальными строка zend_extension (если они есть) следующее:
zend_extension = "/usr/local/lib/php/20060613/ioncube_loader_fre_5.2.so"



php -m | grep ioncube -i
ionCube Loader
the ionCube PHP Loader


Перезапускаем апача:

/usr/local/etc/rc.d/apache22 restart

Как узнать, сколько места занято / еще доступно на FTP сервере?

К сожалению, никак:


Not exactly... although RFC959 doesnt provide a command to get free disk space some FTP servers do provide extended commands to go beyond the RFC listed commands. Best bet is to check what commands does the FTP server support and if they are any extended commands to get the free disk space.


Но при этом возможны хаки по показу занятого места, например, в приветственном баннере :)

(с) http://channel9.msdn.com/forums/TechOff/255243-how-to-check-free-space-on-disk-using-FTP-client/

И-ди-о-ты


Сегодня, в четверг 18.02, должно было состояться совещание у министра связи Щеголева с капитанами гигантов американской ИТ-промышленности: руководителями eBay, Catalyst, Twitter, Mozilla, Cisco и других. Вместе с ними приехали видные чиновники, в том числе директор по технологиям администрации президента США.
До этого они побывали у Суркова и Дворковича.
Тема совещания в Минсвязи была вроде бы про электронное правительство - как его у нас сделать силами американских компаний. А также русская Кремниевая долина с их помощью и все такое.

Однако, совещание отменили за несколько часов, по слухам, по следующей причине: министерство пригласило на встречу также представителей русских ИТ: Воложа, Мильнера, Касперскую, Андреева (ABBYY), Колпакова (гендиректор Ростелекома) и других. Но американцы резко воспротивились присутствию русских компаний, сказав, что они сами хотят рассказать нам, как тут все обустроить, и местные им на встрече вовсе не нужны.
Тогда министр взял и отменил встречу вообще.


Обращаю внимание, что заголовок адресован вовсе не Американцам, выставившим такие требования.

Апдейт, список Гостей:

В Россию приехали глава компании Mozilla Митчелл Бейкер и глава онлайн-аукциона eBay Джон Донахью, основатель сервиса для ведения микроблогов Twitter Джек Дорси, а также голливудский актер, интернет-предприниматель и блогер Эштон Катчер. Последний, скорее всего, был приглашен в качестве твиттер-репортера. Его микроблог является одним из самых популярных в Твиттере. Юзера aplusk - так актер называет себя в блогосфере - читают более 4,5 (!) миллиона пользователей.
А также интернет-предпринимательница и космонавтка Эстер Дайсон, в Москву пожаловал Эниш Чопра - идеолог электронного правительства США или, как его называет пресса, "техноцарь администрации


via http://roem.ru/2010/02/18/addednews13730/ и http://community.livejournal.com/ru_telecom/507995.html

Что такое --mark-- в SysLog?

That's just the syslog daemon letting you know that it is alive and well. You may set the interval to anything you like on Debian by editing /etc/init.d/sysklogd. This sets it to 60 minutes:


Иными словами, это демон мониторинга SysLog сообщает о том, что он жив и доблестно выполняет свой труд :)

(c) http://www.enterprisenetworkingplanet.com/netsysm/article.php/3517611

Домены на руском? Легко!

http://пример.испытание

А Вы говорите, Рф, Рф :))

Как закрыть Apache на 8080м порту?

В связке ISPManager + Apache + Nginx есть встроенный косяк безопасности - к Апачу можно подключиться через 8080й порт снаружи.

Фиксится этот баг так:

# разрешаем локальный трафик
iptables -A INPUT -i lo -j ACCEPT
# блокируем все остальные соединения до 8080го порта
iptables -A INPUT -p tcp --dport 8080 -j DROP


Хм, фикс под сомнением.... может и не сработать.

OpenVZ kernel panic: vzquota_dparents_check_actual

Господа, никто с подобным не сталкивался: http://forum.openvz.org/index.php?t=tree&goto=38902&#msg_38902 ?

Для интересующихся, вот тикет в BugZilla: http://bugzilla.openvz.org/show_bug.cgi?id=1435

Wednesday 17 February 2010

OpenVZ и 2.6.32

Как и предполагалось, OpenVZ портируется на 2.6.32 ядро, которое объявлено с "расширенной поддержкой".



In the meantime, and this is now fully official, OpenVZ kernel team is working on porting our stuff to Linux kernel 2.6.32. This will take about a month, and we hope to have it working in time to include into next Debian release.

While 2.6.32 is some time away, we keep updating our stable (RHEL5-based) kernel. You can have a sneak preview of newest kernel changelog here. One feature worth noticing is added support for signalfd() syscall which is desperately needed by late versions of udevd and thus all the latest distros (like Fedora 12 and Ubuntu 9.10) which you might want to run in a container.


(с) http://community.livejournal.com/openvz/30934.html

Супер крутая и продвинутая библиотека для C++

Итак, встречайте, Boost! Полное описание возможностей: http://en.wikipedia.org/wiki/Boost_C%2B%2B_Libraries#Input.2FOutput

Кстати, а вот и еще одна библиотека: http://dlib.net/

QNX 6.4 + MacOS терминал + vi/ed = проблемы

Симптомы:

# vi test.c
skipping 2 old session files
reading test.c
read test.c, 6 lines, 79 chars
#include

int main() {
printf("Hello world!\n");
return 0;


Проблема фиксится на стороне программы "Terminal" сменой типа терминала с "xterm-color" на "vt100".

Активация telnet в QNX Neutrino

Открываем конфиг:
vi /etc/inetd.conf


Там видим строку:
# telnet stream tcp nowait root /usr/sbin/telnetd in.telnetd


Раскомментируем эту строку (убираем диез в начале и приводим к виду):
telnet stream tcp nowait root /usr/sbin/telnetd in.telnetd


Добавляем inetdd в автозапуск:

touch /etc/rc.d/rc.local
chmod 755 /etc/rc.d/rc.local
echo "inetd" >> /etc/rc.d/rc.local


Запускаем inetd:
inetd


Вот и все, после этого можно спокойно войти в систему по telnet:

telnet 192.168.56.101
Trying 192.168.56.101...
Connected to 192.168.56.101.
Escape character is '^]'.


QNX Neutrino (localhost) (ttyp1)

login: root
Wed Feb 17 14:29:15 2010 on /dev/ttyp1
edit the file .profile if you want to change your environment.
To start the Photon windowing environment, type "ph".
#



Обращаю внимание, что протокол telnet можно использовать только в защищенных сетях, в открытых сетях его использование крайне небезопасно!

По материалам: http://qnx.org.ru/wiki/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_ssh

VirtualBOX: как создать сеть только между вирутальной машиной и хост системой?

Легко! Необходимо выбрать в настройках "виртуальный адаптер хоста" ("Host-Only"). И после этого перезагрузить виртуальную машину. Сеть будет сконфигурирована автоматически по DHCP, IP адреса, выданные хост-машине и виртуальной машине можете посмотреть посредством команды ifconfig -a.

Tuesday 16 February 2010

PHP: функция безопасности open_basedir - для чего и зачем?

http://www.php.net/manual/en/ini.core.php#ini.open-basedir

Хай-тек

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

(c) http://antihubbard.livejournal.com/374828.html

V8


Как и Chrome, V8 на данный момент работает только на трёх платформах: i386, amd64 и arm. Это связано с тем, что V8 компилирует javascript сразу в исполняемый код, минуя стадию промежуточного байт-кода. Кстати, первоначально поддержки amd64 не было, она появилась только летом 2009 года. Впрочем, поскольку разработчики V8 работают на обычных x86 компьютерах, то для ускорения отладки кода, который V8 компилирует для архитектуры arm, был написан симулятор arm, который позволяет выполнять код arm на любой платформе. Теоретически этот симулятор можно было бы использовать и для любой неподдерживаемой специальным образом платформы.


(c) http://www.sysoev.ru/prog/v8.html

Снова отжиги


Данная сборка официально стала поддерживать
инсталляцию на Debian Lenny, но, к сожалению, как говорят в сообществе,
сборка для Debian 5 пока ещё активно не тестировалась и содержит ряд
мелких неисправностей (на момент написания статьи). Поэтому
целесообразнее будет поставить ZCS на Debian Etch.


Окуительно я щщитаю писать статью про установку на дистрибутив, который в ближайшем феврале будет похоронен. Хорошо, хоть у них woody под рукой не было, а-то бы поставили, да.

(с) http://www.opennet.ru/base/sys/zimbra_install.txt.html

Conexant - ублюдки

Я еще ни разу не видел, чтобы разработчик железа давал ссылку на сторонний сайт, где ПРОДАЮТСЯ Linux драйвера для их продукции (причем, замены им не существует). А эти дают и не стесняются. Причем далеко не только на старые железки!

А вот абсолютно честное лекарство от Dell: http://linux.dell.com/files/ubuntu/hardy/modem-drivers/hsf/

Где взять исходники ядра CentOS?

Получаем патч + исходники чистого ядра 2.6.18:
cd /usr/src
wget ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Server/en/os/SRPMS/kernel-`uname -r`.src.rpm
mkdir -p /usr/src/redhat/SOURCES
mkdir -p /usr/src/redhat/BUILD
rpm -ihv kernel-`uname -r`.src.rpm


Патчим дерево ядра 2.6.18 патчами от Red Hat:

yum install -y rpm-build redhat-rpm-config unifdef # необходимы для наложения патчей
cd /usr/src/redhat/SPECS
rpmbuild -bp kernel-2.6.spec


Ключ bp обозначает:

-bp Executes the "%prep" stage from the spec file. Normally this involves unpacking the sources and applying any patches.



Теперь, если необходимо провести подготовку к сборке модулей, выполняем команды:

cd /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.i386
make oldconfig
make prepare


Либо можно подключить srcrpm репо для этого и стянуть оттуда.

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

Ставим:
yum install -y minicom


Заносим в конфиг порт нашего модема:
vi /etc/minicom/minirc.dfl
pr port /dev/ttyS0
pu baudrate 9600
pu bits 8
pu parity N
pu stopbits 1


После этого можете подать модему команду ATZ и если он откликнется командой OK, то все супер :)

Выход из программы по CTRL+A + x

Debian: Apache too many open files

Имеем в error логе Апача следующее:

Unable to open logs


А при strace -f запуске Апача:

[pid 3348] open("/var/www/httpd-logs/domain.ru.access.log", O_WRONLY|O_CREAT|O_APPEND|O_LARGEFILE, 0666) = -1 EMFILE (Too many open files)
[pid 3348] gettimeofday({1266321102, 423342}, NULL) = 0
[pid 3348] open("/etc/localtime", O_RDONLY) = -1 EMFILE (Too many open files)


Это ошибка означает, что мы уперлись в стандартный лимит - 1024 открытых файла и его надо увеличить так:
echo 'export APACHE_ULIMIT_MAX_FILES="ulimit -n 999999"' >> /etc/apache2/envvars


Ну и все, перезапускаем Апача:

/etc/init.d/apache2 restart

Monday 15 February 2010

Методы ведения бизнеса

В прошлом такие организации, как Transparency International отмечали, что российские компании, выходя на рынки зарубежных стран, переносят туда свои методы ведения бизнеса, иными словами дают взятки.

http://bbc.co.uk

Как включить DNS сервер в ISPManager, если кнопка активации не нажимается?

/usr/local/ispmgr/sbin/pkgctl activate dns

Проблемы с ротацией лог файлов Nginx в Debian

Имеется вот такой почти стандартный конфиг:

/var/log/nginx/*.log {
daily
missingok
rotate 52
# do not kill hdd
# compress
# delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
endscript
}


Но все равно появляются файлы с кривыми правами (чтение разрешено всем):

ls -al /var/log/nginx/
total 4.8M
drwxr-xr-x 2 root root 4.0K 2010-02-15 06:25 .
drwxr-xr-x 15 root root 4.0K 2010-02-15 06:25 ..
-rw-r----- 1 www-data adm 64K 2010-02-15 14:51 access.log
-rw-r----- 1 www-data adm 192K 2010-02-15 06:24 access.log.1
-rw-r----- 1 www-data adm 198K 2010-02-14 06:18 access.log.2
-rw-r----- 1 www-data adm 576K 2010-02-13 06:24 access.log.3
-rw-r----- 1 www-data adm 2.7M 2010-02-12 06:24 access.log.4
-rw-r--r-- 1 root root 616K 2010-02-11 06:06 access.log.5
-rw-r----- 1 www-data adm 4.6K 2010-02-15 14:16 error.log
-rw-r----- 1 www-data adm 14K 2010-02-15 05:28 error.log.1
-rw-r----- 1 www-data adm 36K 2010-02-14 06:05 error.log.2
-rw-r----- 1 www-data adm 235K 2010-02-13 04:16 error.log.3
-rw-r----- 1 www-data adm 90K 2010-02-12 03:44 error.log.4
-rw-r--r-- 1 root root 57K 2010-02-11 05:20 error.log.5
-rw-r----- 1 www-data adm 0 2010-02-13 06:25 localhost.access.log
-rw-r----- 1 www-data adm 1.4K 2010-02-12 22:12 localhost.access.log.1
-rw-r--r-- 1 root root 4.1K 2010-02-09 07:13 localhost.access.log.2



Как исправить? :)

Скрипт для массового добавления IP адресов в ISPManager

for i in `seq 10 220`; do /usr/local/ispmgr/sbin/mgrctl -m ispmgr iplist.edit name=xx.xx.xx.$i stat=assigned owner=billing sok=ok ;done

Использование rsync для передачи файлов на удаленный сервер

Довольно часто приходится копировать иерархии папок с одного места на другое с сохранением владельцев/разрешений. Обычно, я это делал посредством cp -a + sshfs, но есть намного более правильное для этой задачи средство - rsync. Который умеет ряд замечательных фишек, например, ограничение скорости передачи данных, работу поверх ssh, возможность передачи только изменившихся файлов и проч.

Для работы поверх SSH сначала необходимо настроить доступ по сертификату на удаленный сервер: http://phpsuxx.blogspot.com/2009/12/ssh_17.html

Простейшая команда для синхронизации двух файловых иерархий выглядит так (обращаю внимание, никаких оканчивающих слешей в путях быть не должно!!! иначе поведение rsync будет не таким, как ожидается):
rsync -avH --numeric-ids /var/backup vuser@domain.ru:/backup2/user


Причем, /var/backup - это локальная папка, а вот передается она на удаленный сервер domain.ru в папку /backup2/user, при этом целевая папка не обязательно должна существовать - rsync создаст ее сам. Ключ v выводит дополнительную информацию, которая крайне полезна во время отладки. А вот о ключе -a стоит поговорить подробнее, так как он крайне полезен и удобен:


This is equivalent to -rlptgoD. It is a quick way of saying you want recursion and want to preserve almost everything (with -H being a notable omission). The only exception to the above equivalence is when --files-from is specified, in which case -r is not implied.

Note that -a does not preserve hardlinks, because finding multiply-linked files is expensive. You must separately specify -H.


То есть при копировании будут следующие настройки:
1) рекурсивная передача
2) символические ссылки будут копироваться как символические ссылки а не файлы, на которые они указывают
3) после копирования будут сохранены разрешения на файлы и папки (unix chmod)
4) будет сохранено время изменения
5) будет сохранена группа-владелец файла / папки
6) будет сохранен пользователь-владелец файла / папки
7) будут сохранены в исходном виде файлы устройств
8) будут сохранены в исходном виде специальные файлы (именованные сокеты и fifo)

Обращаю внимание, что для сохранения пунктов 5, 6, 7, 8 на удаленной системе у Вас должны быть root полномочия.

Ключ -H предназначен для копирования hard (жестких) ссылок как ссылок, а не как отдельных файлов, набор фич ключа -a этого не делает и об этом указано в документации.

А ключик --numeric-ids предназначен для того, чтобы при восстановлении данных о владельце на принимающей стороне не происходило разыменование имени группы / пользователя (владельцев файлов), а копировались лишь числовые значения uid / gid. То есть, вместо того, чтобы на исходном сервере сохранить данные о владельце в виде www-data:www-data, скопировать файл на целевой сервер, узнать, какой uid/gid соответствует группе-пользователю www-data на целевом сервере и установить их (uid/gid) для файла, мы просто копируем 33:33 (uid/gid www-data) как данные о пользователе-группе и устанавливаем их на целевом сервере.

Но почему это делать обязательно? Допустим, мы переносим OpenVZ контейнер (с Debian на борту) с сервера, где на ноде www-data создан как 33:33 на сервер, где www-data по каким-то причинам оказался 44:44, как результат мы получим 44:44 как владельца всех файлов сайта в контейнере, что, разумеется, приведет к его неработоспособности.

Теперь о фишках, исходная папка занимает довольно много места:

du -sh /var/backup
280M /var/backup


Теперь запускаем первый раз выше означенную команду передачи файлов на удаленный сервер:

sent 292542176 bytes received 982 bytes 11472280.71 bytes/sec
total size is 292502769 speedup is 1.00


Тут все как и ожидалось - передано 280 мегабайт и ускорения (speedup) нету никакого.

Теперь повторяем запуск и видим следующее чудо:

sent 209914 bytes received 337186 bytes 364733.33 bytes/sec
total size is 292502769 speedup is 534.64


Ускорение аж в 500 раз и передано треть мегабайта вместо 280 мегабайт, что налицо является огромной экономией - вот в этой фиче и есть основная ценность rsync - он не передает только изменившиеся файлы :)

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

Также при проблеме с пропускной способностью канала стоит добавить ключик -z, который включит сжатие передаваемых файлов.

Пакет для тестирования систем виртуализации

http://code.google.com/p/benchvm/

Sunday 14 February 2010

Управление лимитами дискового пространства для пользователей на Debian Linux

Для начала пару слов о том, что такое квоты. Это способ ограничить различных linux пользователей в занимаемом ими дисковом пространстве. Квоты бывают двух типов - для пользователя (usrquota) либо для группы (grpquota). Также у квот есть два подтипа - мягкие и жесткие. Первые можно превышать (но недолго, не более 7 дней), а вот жесткие превышать нельзя в принципе. Также есть еще лимиты уровня блоков и уровня inode (ограничение на число файлов), стандартным является тот, кто уровня блоков.

Ставим необходимое ПО:
apt-get install -y quota quotatool


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

Для этого открываем:
vi /etc/fstab


И ищем там нужный раздел (если их несколько - операцию необходимо проделать для всех), в моем случае он выглядел так:

/dev/md4 /backup2 ext3 defaults 0 0


И добавляем опции монтирования grpquota и usrquota:

/dev/md4 /backup2 ext3 defaults,grpquota,usrquota 0 0


Теперь перемонтируем файловые системы (если же Вы активируете квоты для /, то рекомендую перезагрузиться):

umount -a
mount -a


Теперь для каждой файловой системы непосредственно в ее точке монтирования (у меня это /backup2), где планируется использовать квоты, нам необходимо создать специальные файлы, где будут хранится данные квот.


touch /backup2/aquota.user
touch /backup2/aquota.group
chmod 600 /backup2/aquota.user /backup2/aquota.group



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

mount | grep md4
/dev/md4 on /backup2 type ext3 (rw,grpquota,usrquota)


Теперь загружаем модуль поддержки квот в ядро (к слову, почему v2? Ну потому, что есть v1, который оставлен для совместимости со "старым" форматом данных квот):

modprobe quota_v2


Также добавляем модуль в автозагрузку:

echo 'quota_v2' >> /etc/modules


Инициализируем систему квот:

quotacheck -vagum


В ответ будет выдано примерно следующее (на тему журналируемых квот, упомянутых ниже, можете сходить вот сюда):

quotacheck: Your kernel probably supports journaled quota but you are not using it. Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown.
quotacheck: WARNING - Quotafile /backup2/aquota.user was probably truncated. Cannot save quota settings...
quotacheck: WARNING - Quotafile /backup2/aquota.group was probably truncated. Cannot save quota settings...
quotacheck: Scanning /dev/md3 [/backup2]
done
quotacheck: Checked 3 directories and 4 files


Теперь берем подопытного пользователя test и выставляем ему на блоки мягкий лимит в 200 мегабайт и жесткий в 250:

quotatool -u test -b -q 200M -l 250M /backup2


Если при этому вы получаете ошибку:
quotatool: Error while detecting kernel quota version: No such process


То необходимо запустить служебный демон quota:

/etc/init.d/quota start


Текущее использование же квот для определенного раздела можно посмотреть так:

repquota /backup2


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

repquota /backup2/
*** Report for user quotas on device /dev/md4
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 202364 0 0 4 0 0
test -- 28 204800 256000 7 0 0


Также от имени захомутанного юзера можно посмотреть лимит командой:
quota


Которая откликается вот так:
quota
Disk quotas for user test (uid 1000):
Filesystem blocks quota limit grace files quota limit grace
/dev/md4 28 204800 256000 7 0 0


Ну и теперь протестируем, попробовав загнать 260 мегабайт вместо отведенных 250:

dd if=/dev/zero of=260mb-file bs=1024 count=260216
md4: warning, user block quota exceeded.
md4: write failed, user block limit reached.
dd: writing `260mb-file': Disk quota exceeded
246493+0 records in
246492+0 records out
252407808 bytes (252 MB) copied, 0.657214 s, 384 MB/s


И теперь все последующие попытки забить место обернутся обломом:

mkdir 1
mkdir: cannot create directory `1': Disk quota exceeded


Ну вот мы и стали чуточку лучше понимать Линукс :)

Источник: http://www.debian-administration.org/articles/47 и http://learnlinux.tsf.org.za/courses/build/sys-admin/ch05s02.html

Еще политики!

Крайне рекомендую: http://krocodl.livejournal.com/816309.html и http://www.novayagazeta.ru/data/2010/007/10.html

Как узнать версию удаленного DNS сервиса?

Ставим:
apt-get install -y fpdns


Узнаем версию:
fpdns ns1.r01.ru
fingerprint (ns1.r01.ru, 195.24.65.7): ISC BIND 9.2.3rc1 -- 9.4.0a0

И снова о политике!

http://rootaria.livejournal.com/19473.html

Установка "второй" тестовой системы в Debian

Иногда возникает необходимость иметь тестовую систему, которую можно сломать и быстро переставить. Если Вы работаете на платформе Debian Linux, то сразу есть отличное решение - chroot и установка второго тестового дитрибутива посредством утилиты debootstrap.


Ставим:
apt-get install -y debootstrap

Создаем папку, куда будем ставить наш второй дистрибутив:
mkdir -p /home/second_debian

Ставим:
debootstrap --variant=minbase wheezy /home/second_debian/
Занимать она будет где-то 158 мегабайт, 82 пакета.

Монтируем служебные файловые системы:

mount -t proc proc /home/second_debian/proc/
mount -t devpts devpts /home/second_debian/dev/pts


Логинимся в тестовую систему:

chroot /home/second_debian/
export PS1="CHROOT:\w# "


Тестируем вызов команд:

CHROOT:/# id
uid=0(root) gid=0(root) groups=0(root)


Конфигурируем репозитории:
vi /etc/apt/sources.list

deb http://ftp.us.debian.org/debian wheezy main contrib
deb http://security.debian.org/ wheezy/updates main contrib


Обновляем систему:

apt-get update
apt-get upgrade
Также есть альтернативная утилита - cdebootstrap, она интересна тем, что написана на С и имеет статически слинкованную версию, которую потенциально можно запускать и на НЕ Debian'е.

Результат ее работе аналогичный, но запуск осуществляется несколько иначе:
cdebootstrap --flavour minimal  wheezy /home/second_debian/
Но при всем этом он создает образ всего-то в 95 мегабайт (всего 77 пакетов).

Основно на: http://wiki.freaks-unidos.net/chrooted-debian-server#configure-the-chroot

Symink изнутри chroot наружу?

По понятным причинам (т.к. это всего лишь символическая ссылка), невозможен. Но можно использовать mount -o bind для монтирования папки под другим именем :)

Запуск SSHD в chroot на Debian 5 Lenny: подготовка дерева каталогов

ЭТО НЕ CHROOTED SSH в папку пользователя!!! Это запуск демона в CHROOT!!!! В 95% случаев ЭТА СТАТЬЯ ВАМ НЕ НУЖНА.

Мы будем использовать makejail, но есть еще ряд аналогов: jailer и jailtool.

Ставим тулзу для сборки chroot среды:
apt-get install -y makejail


В его стандартной поставке есть ряд шаблонов для запуска различных сервисов в chroot:

ls /usr/share/doc/makejail/examples
apache.py global.OpenBSD mysqld.py postgresql.py
bind.py mldonkey.py ntpd.py sshd.py


Теперь создаем папку, куда будет "сложен" комплект файлов для успешного чрута sshd:
mkdir -p /var/chroot/sshd


Но при попытке запуска:
makejail /usr/share/doc/makejail/examples/sshd.py


Нас постигает полный облом:

Loading configuration file /usr/share/doc/makejail/examples/sshd.py
Cannot load configuration file '/usr/share/doc/makejail/examples/sshd.py' as a python module
Executing it with python which should display a syntax error:
File "/usr/share/doc/makejail/examples/sshd.py", line 3
SyntaxError: Non-ASCII character '\xf1' in file /usr/share/doc/makejail/examples/sshd.py on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details


К счастью, это крайне легко фиксица добавлением в файл:
vi /usr/share/doc/makejail/examples/sshd.py


Следующих строк в самое начало:
# -*- coding: utf-8 -*-


Также добавляем в низ файла подключение стандартных утилит работы с файлами - ls, dir, ln, chown и проч ( в примере конфига опечатка, fileutils теперь зовут coreutils):
packages=["coreutils"]


И повторяем запуск команды.

После того, как программа отработает в нашей chroot папке будет построено дерево каталогов, необходимое sshd для работы:

ls /var/chroot/sshd/
bin dev etc lib lib64 sbin usr var


Причем, занимаемое им пространство крайне скромно:

du -sh /var/chroot/sshd/
16M /var/chroot/sshd/


Теперь пробуем сделать chroot на созданную папку:
chroot /var/chroot/sshd/



Основано на: http://www.debian.org/doc/manuals/securing-debian-howto/ap-chroot-ssh-env.en.html и http://stephan.paukner.cc/syslog/archives/332-SSH-daemon-in-a-chroot-on-Debian-lenny.html

Какие протоколы для удаленного бэкапа поддерживает ISPManager?

FTP, sFTP по паролю, sFTP по ключу и все :)

Friday 12 February 2010

Скрыть версию Proftpd

Добавляем в proftpd.conf:
ServerIdent off

Debian: /usr/lib/apache2/modules/mod_jk.so: cannot open shared object file: No such file or directory

Ставим:
apt-get install -y libapache2-mod-jk

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


a2enmod expires
/etc/init.d/apache2 restart

CRON в Debian не поддерживает имена файлов с расширениями!

Это для меня было поистине открытием, но тесты показали, что так и есть.

Имеем папку cron.hourly:

ls /etc/cron.hourly/
clean_logs.sh hosting_check_configs.pl restart_failover_apache


Но если попробовать запустить CRON задачи вручную мы получим:

run-parts -v /etc/cron.hourly/
run-parts: executing /etc/cron.hourly/restart_failover_apache
Syntax OK
Restarting web server: apache2 ... waiting .


То есть CRON вообще не увидел остальные скрипты, у которых есть расширение. Вот такие вот дела :)

Как включить register_globals на сервере с ISPManager и PHP FastCGI?

Заходите в "Инструменты" -> "Менеджер файлов". Далее в домашней папке входите в папку php-bin и там видите php.ini, куда требуется добавить строку:
register_globals = On


Но ISP выдаст "Can't open file '/var/www/v001022/data/php-bin/php.ini' for writing", хотя права на файл 400 и владельцем указан владелец аккаунта :( Так что делайте это через FTP либо попросите сделать это саппорт.

Для саппорта нужно сделать следующее:
echo "register_globals = On" >> /var/www/v001022/data/php-bin/php.ini
killall -u v001022


После этого PHP воркеры благополучно погибнут и запустятся с новыми настройками.

Либо после внесения изменений в конфиг необходимо зайти в панель управления ISPManager и открыть настройки указанного www домена и просто их сохранить ничего не меняя (это вызовет релоад Апача, что необходимо для применения настройки из пользовательского php.ini).

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

Возникает ошибка при использовании в .htaccess такой вот директивы:
CharsetDisable On


Судя по форумам, это директива, которая использовалась в "Русском Апаче" и она обычным Апачем не поддерживается (пруфлинк). Так что основной фикс - удалить эту строку из .htaccess.

Thursday 11 February 2010

Инструменты от Гугла для анализа производительности ПО

http://code.google.com/p/google-perftools/

Использование kexec для загрузки нового ядра без ребута

apt-get install -y kexec-tools


Загружаем новое ядро:
kexec -l /boot/vmlinuz-2.6.32 --command-line="root=/dev/md2 ro" --initrd=/boot/initrd.img-2.6.32


Исполняем новое ядро:
kexec -e


Но не сработало :( Что я делаю не так?

А мы их давили давили

В "Коммерсанте" пишут, что за покупку ICQ сейчас борются Ceznam.cz, DST, "Яндекс" и какие-то китайцы

http://roem.ru

Wednesday 10 February 2010

Magento 1.3.2.4 в связке с PHP 5.2 и eAccelerator 0.9.6 = проблемы

При входе в админку Magento возникает следующая проблема:

There has been an error processing your request.
Strict Notice: Only variables should be passed by reference in /var/www/nrg/data/www/z-support.ru/lib/Zend/Db/Select.php on line 216
Trace:
#0 /var/www/nrg/data/www/z-support.ru/lib/Zend/Db/Select.php(216): mageCoreErrorHandler(2048, 'Only variables ...', '/var/www/nrg/da...', 216, Array)
#1 /var/www/nrg/data/www/z-support.ru/app/code/core/Mage/Eav/Model/Mysql4/Entity/Attribute/Collection.php(70): Zend_Db_Select->columns(Array)
#2 /var/www/nrg/data/www/z-support.ru/app/code/core/Mage/Eav/Model/Config.php(606): Mage_Eav_Model_Mysql4_Entity_Attribute_Collection->useLoadDataFields()
#3 /var/www/nrg/data/www/z-support.ru/app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.php(367): Mage_Eav_Model_Config


Открываем файл Select.php на строке 216

Там будет следующее:
$correlationName = current(array_keys($this->_parts[self::FROM]));


Заменяем это на:
$arrayKeys = array_keys($this->_parts[self::FROM]);
$correlationName = current($arrayKeys);


(c) http://www.magentocommerce.com/boards/viewthread/56007/

Публичные DNS от Google

8.8.8.8
8.8.4.4

Тестирование производительности Drupal на различных платформах

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

Новая социальная сеть от Google?

http://www.google.com/buzz

Что самое интересное в ней - подход. Она представляет собой "надстройку" для популярного GMail, что имхо - крайне удобно :)

Конференция в облаках? Или облачная конференция?

http://www.cloudconf.ru/

Слежение за изменениями страницы сайта

http://www.changedetection.com/

Либо эту же задачу можно решить посредством плагина к FireFox: https://addons.mozilla.org/ru/firefox/addon/3362

Tuesday 9 February 2010

Текст, меняющий взгляд на жизнь: "Спиритический сеанс с товарищем Сталиным"

Крайне рекомендую всем для прочтения:http://medved-magazine.ru/?mode=article_view&sid=7&id=257

Как часто надо запускать OPTIMIZE TABLE?

http://www.xaprb.com/blog/2010/02/07/how-often-should-you-use-optimize-table/

ISPManager в качестве вторичного DNS на Debian

При таком варианте использования у него есть баг, что добавляемые клиентами зоны добавляются в /etc/bind, что правильно. А вот когда подчиненные сервер добавляет зону вида:


zone "nrg.name" {
type slave;
file "/var/named/nrg.name";
masters {xx.xx.xx.xx;};
};


Что есть бред. Фиксица это добавление следующих строк в конфиг:

vi /usr/local/ispmgr/etc/ispmgr.conf



path DomainSlaveZonesPath /etc/bind/slave


Также эту папку необходмо создать:

mkdir /etc/bind/slave
chown bind:bind /etc/bind/slave


Ну и после необходимо рестарт ISP:
killall -9 -r ispmgr


На новых установках баг не проявляется, эта строка уже включена в конфиг, а вот апдейтер для старых ее не добавлял.

Яндекс новости такие Яндекс новости

Извините, при загрузке сюжета произошла ошибка.
Попробуйте найти эту новость поиском или зайдите позднее.


Причем, мне уже пятый день почта яндекса не дает толком читать сообщения с ЖЖ, т.к. схлопывает их в "ленту" (да, это та функция, что они спиздили у Гугла) и они пропадают.

Они чо, QA свой выгнали от безденежья? У Гугла ничего подобного не встречал никогда либо всегда помогало F5 и ошибка уже пропадала.

Лишь очередное подтверждение, что наши соотечественники в большинстве своем не понимают слова "качество", как было говно в головах, так и осталось.

СУПРУГИ РОЗЕНБЕРГ "Атомные шпионы"

Крайне рекомендую к прочтению: http://elib.ru/Encycl/History/SENSATION/sens56.html

Замена сетевой карты Realtek 8169 на Intel e1000 в Debian 5 Lenny на fastvps.ru

После установки новой карты необходимо скорректировать правила udev.

Узнаем новый mac адрес:
ifconfig eth0 | grep HWaddr
eth0 Link encap:Ethernet HWaddr 00:24:21:b4:31:0a


Вносим коррективы в конфиг:
vi /etc/udev/rules.d/70-persistent-net.rules


И также меняем комментарий на корректный:
PCI device 0x8086:0x107c (e1000)


Ну и после этого перезагружаемся и сеть поднимется корректно :)

Monday 8 February 2010

Сайт посвященный описанию памяти в Linux

http://linux-mm.org/

Инвайты (Invite, приглашения) Google Wave, инвайтов больше нету

Всем привет! Думаю, кто меня читает постоянно, в курсе, что я был на Google Developer Day #09, на котором мне выдали 8 инвайтов, которые я успешно раздал. Недавно Гугл обрадовал меня и выдал еще 8 инвайтов, так что кому нужно - отписываем почту в комментах, вышлю. Ап: еще 3 инвайта осталось.

Как Гугл делает инновации или 20% free time?

http://hbr.org/product/reverse-engineering-google-s-innovation-machine/an/R0804C-PDF-ENG

Потребление памяти в OpenVZ, подробное описание



http://maxgarrick.com/understanding-openvz-resource-limits/

Online бэкап баз данных посредством LVM

http://www.opennet.ru/tips/info/2291.shtml

О программировании в администрировании

http://www.standalone-sysadmin.com/blog/2010/01/sysadmins-arent-necessarily-programmers-theyre-people-who-can-program/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+standalone-sysadmin%2FrWoU+%28Standalone+Sysadmin%29&utm_content=Google+Reader

Очистка кэша пакетов в ISPManager

/usr/local/ispmgr/sbin/pkgctl -D cache
killall -9 -r ispmgr

Sunday 7 February 2010

Сборка smartmontools 5.39.1 из исходников

Причина пересборки вручную довольно простая, при диагностике стандартным Дебияновским smartctl для новых винтов ST31500341AS появились загадочные записи:

241 Unknown_Attribute 0x0000 100 253 000 Old_age Offline - 2106849488
242 Unknown_Attribute 0x0000 100 253 000 Old_age Offline - 1822690218


А для SSD дсиков он начал выдавать полный бред.

Офсайт: http://sourceforge.net/apps/trac/smartmontools/

cd /usr/src
wget 'http://downloads.sourceforge.net/project/smartmontools/smartmontools/5.39.1/smartmontools-5.39.1.tar.gz?use_mirror=sunet'
tar -xf smartmontools-5.39.1.tar.gz
cd smartmontools-5.39.1


Если же свежеть версии релиза не устраивает, можно собрать из svn:

apt-get install -y subversion
cd /usr/src
svn co https://smartmontools.svn.sourceforge.net/svnroot/smartmontools/trunk/smartmontools smartmontools
cd smartmontool
./autogen.sh


Собираем:

./configure --prefix=/opt/smartmontools
make
make install



Запускаем диагностику:
/opt/smartmontools/sbin/smartctl --all /dev/sda



Ну вот и все, непонятные "Unknown_Attribute" сменились на Total_LBAs_Written и Total_LBAs_Read.

Очень хороший вводный курс по Линукс

Вводный курс по Linux: http://gserg.volnet.ru/linux/

Также рекомендую хороший сайт: http://serverfault.com

Смена имени программы при запуске


/*
* Copyright (c) 1997-1999 Red Hat, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License, version 2,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/

#include <unistd.h>

int main(int argc, char ** argv) {
if (argc<2) return 1; execvp(argv[1], argv + 2); return 1; }



Компилировать так:

gcc doexec.c -o doexec


Использовать так:

./doexec /usr/bin/perl new_name -e 'while(){}'


И теперь если в другой консоли посмотреть имя процесса, то оно будет вот такое:

root 32576 92.0 0.0 100468 1556 pts/0 R+ 03:49 0:06 new_name -e while(){}


Теперь немного теории о том, как это работает:

The execv() and execvp() functions provide an array of pointers to null-terminated strings that represent the argument list available to the new program. The first argument, by convention, should point to the filename associated with the file being executed. The array of pointers must be terminated by a NULL pointer.


Одно прошу - не спрашивайте, зачем мне это понадобилось :)))

Отправка почты из Линукс консоли через SMTP c авторизацией

Ставим почтовик, который это умеет:

apt-get install -y sendemail


Отсылаем:
sendEmail -t admin@domain.ru -s 127.0.0.1 -u subj -m body -xu test@suxx.us -xp qwerty -f spammer@spam.ru

Friday 5 February 2010

Директива _default_ для виртуальных хостов Apache

The string _default_, which is used only with IP virtual hosting to catch unmatched IP addresses.


Например, в случае SSL виртуального хоста действовать оно будет так: если для IP адреса не был создан виртуальный хост, где явно указан IP, например, вот так: <VirtualHost 11.11.11.11:443>, то запрос будет обрабатываться виртуальным хостом с _default_ (ну и SSL сертификаты будут использованы, разумеется, его же). В противном случае, запрос отработает заданный вихост.

(с) http://httpd.apache.org/docs/2.2/mod/core.html#virtualhost

Запретить апдейт пакета Debian

Иногда бывает необходимость запретить обновление каких-либо пакетов в системе. Для этого в Debian есть стандартный механизм.

Смотрим расширенный статус требуемого пакета:
dpkg --get-selections | grep nginx


Блокируем обновления пакета (ставим на него "Hold"):

echo "nginx hold" | dpkg --set-selections


Смотрим результат:

dpkg --get-selections | grep nginx
nginx hold

shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory

Если у Вас такая ошибка, то будьте добры, пожалуйста, выйдите командой cd из папки, которую уже удалили :) Да, благодарности принимаются :)

Thursday 4 February 2010

chmod для директорий

Отлично знал, что с этим у меня пробел в знаниях и вот наткнулся на проблему :( Теперь придется изучить.

Права доступа для каталогов не столь очевидны. Это в первую очередь связано с тем, что система трактует операции чтения и записи для каталогов отлично от остальных файлов. Право чтения каталога позволяет Вам получить имена (и только имена) файлов, находящихся в данном каталоге. Чтобы получить дополнительную информацию о файлах каталога (например, подробный листинг команды ls -l), системы придется "заглянуть" в метаданные файлов, что требует права на выполнения для каталога. Право на выполнение также потребуется для каталога, в который Вы захотите перейти (т.е. сделать его текущим) с помощью команды cd.


Также небольшое дополнение от меня: допустим, у вас есть папка /var/test, на нее стоят права 700 и овнером Вы не являетесь, но внутри нее есть вложенная папка /var/test/user, на которую Вы овнер и имеете права 750. Фишка в том, что вы не сможете сделать ls /var/test/user, так как необходимо выдать на основную папку (/var/backup) +x для всех, иначе система попросту не сможет считать то, что папка user вообще есть и на нее есть права.

Источник: http://www.linuxrsp.ru/artic/art2.html

И вот еще отличное описание: http://markelov.blogspot.com/2010/05/x-linux.html

В ISPManager на Debian отсутствует пункт "настройки PHP"

В ISPManager на Debian отсутствует пункт "настройки PHP", который позволяет управлять размером памяти PHP и register_globals.

Открываем конфиг ISP:

vi /usr/local/ispmgr/etc/ispmgr.conf


Ищем строку:
path php.ini /etc/php.ini


Изменяем на:
path php.ini /etc/php5/apache2/php.ini


Перезапускаем ИСП:
killall -9 -r ispmgr

О людях и работе

Рекомендую: http://yakimovmihail.livejournal.com/22374.html

Вот, видимо, поэтому у меня после каждой поездки по столицам стандартное месячное отвращение к родному городу. Причем, именно вымораживает не само качество работы, а отношение.

waiting for interface eth0:59 before doing NFS mounts

На одном из серверов с двумя сотнями IP при перезапуске сети возникает вот такая фигня:
if-up.d/mountnfs[eth0:8]: waiting for interface eth0:59 before doing NFS mounts (warning).
if-up.d/mountnfs[eth0:8]: waiting for interface eth0:60 before doing NFS mounts (warning).
if-up.d/mountnfs[eth0:8]: waiting for interface eth0:61 before doing NFS mounts (warning).


Причем, это выполняется весьма долго (около 10 минут) и крайне мешает делать /etc/init.d/networking restart. Сейчас придумаем, как с этой напастью бороться :)

А вот так - просто запрещаем монтирование nfs (если он у вас, конечно, не используется):

chmod -x /etc/network/if-up.d/mountnfs


После этого рстарт сети будет проходить штатно и быстро:

/etc/init.d/networking restart

Обновился сканер безопасности веб-приложений Nikto

http://cirt.net/Nikto2

Сканер веб-страниц на предмет наличия malware

Как же давно я ждал подобного проекта: http://iscanner.isecur1ty.org/ !

Wednesday 3 February 2010

Hey apple!

http://www.youtube.com/watch?v=K80_WdnvkDw

Переустановка всех пакетов на Debian

for p in `dpkg -l | egrep '^ii' | awk '{print $2}'`; do apt-get install --reinstall $p ; done

Sun Tech Days 2010

Однако они 9го апреля, йоу! Еду =)

Методика тестирования MySQL

После нескольких дней извращений вывел следующее - правильному тестированию MySQL категорически мешают две вещи: MySQL Query Cache и Linux Page Cache.

Имеем тестовую базу данных вордпресса, забитую 3 миллионами постов, с генерированных скриптом, суммарно около 302 мегабайт. Тест производится запросом главной страницы вордпресса и замером времени ее отклика. Запуск осуществляется таким образом:
time wget http://test1.ru:80/


Далее, перед каждым тестом делается "подготовка" для очистки всех кэшей Линукса:

/etc/init.d/apache2 stop
/etc/init.d/failoverapache stop # наш спец апач
/etc/init.d/mysql stop

# запись грязных страниц на диск и сброс slab буферов и дискового кэша
sync
echo 3 > /proc/sys/vm/drop_caches

/etc/init.d/apache2 start
/etc/init.d/failoverapache start
/etc/init.d/mysql start


Итого, все кэши включены:

Первый запрос:
real 0m16.408s
user 0m0.002s
sys 0m0.009s

Повторно:
real 0m0.324s
user 0m0.001s
sys 0m0.008s


Крайне хороший результат, тут работают и страничный кэш Линукса и Query Cache MySQL.

Теперь, чтобы узнать, какую часть вносит кэш MySQL, а какую страничный кэш Линукса, перезапускаем MySQL для обнуления Query Cache и снова делаем запрос:

real 0m6.438s
user 0m0.002s
sys 0m0.010s


То есть Query Cache дает -6 секунд ко скорости работы :) А страничный же кэш дает аж -10секунд ко времени отработки повторного запроса.

Tuesday 2 February 2010

Огромное число занятых inod`ов

Обнаружил на одном из OpenVZ серверов такую пренеприятную ситуацию:

df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 19144704 3809703 15335001 20% /
/dev/sda2 131648 43 131605 1% /boot


То есть занято аж 3809703 айнодов! Из них одним пользователем - 999117. Однако, это повод как-то контролировать данную ситуацию дабы не допускать таких издевательств над файловой системой впредь.

Плодит такие файлы частенько ISPManager в своих папках bin-tmp и mod-tmp, так что на OpenVZ нодах их можно искать вот так:
du -sh /vz/private/*/var/www/*/data/bin-tmp
du -sh /vz/private/*/var/www/*/data/mod-tmp

Конвертер PHP в C++

http://developers.facebook.com/news.php?blog=1&story=358

А вот вики проекта на Гит Хабе: http://github.com/facebook/hiphop-php/wikis

Подробности о грядущем PHP от FaceBook

http://www.readwriteweb.com/archives/facebook_gets_faster_debuts_homegrown_php_compiler.php

Итак, бегущим текстом - язык НЕ потеряет динамические фичи, компилятор основан на LLVM (как и оптимизированная версия Python). Ну и - это НЕ простой кэш опкода.

Тестирование производительности MySQL сервера

Вот исходная статья: http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/

cd /usr/src
wget http://www.mysqlperformanceblog.com/files/benchmarks/phptestsuite.stable.tar.gz
tar -xf phptestsuite.stable.tar.gz
cd phptestsuite.stable


Далее можно прочесть README.

Конфигурируем:
vi /usr/src/phptestsuite.stable/main.php


На строке 19 необходимо указать свой root пароль:

19 define('MYSQLPWD' , '');


Готовим тестовую таблицу на 1 миллион строк:
php main.php -o prepare -n normal -e MyISAM -s 1000000


Запускаем тест на 600 секунд в 32 потока:

Открываем:
vi run.sh


Корректируем там (ну ядер у меня столько, Вы же ставьте сколько нужно):
for threads in 1 4 16 64 128 256;

на
for threads in 8;


Исправляем также пути до main.php на свои и меняем INNODB на MyISAM.

Запускаем тестовый пакет:
sh run.sh


Ну и ждем =)

Для SSD у меня получились вот такие результаты:

READ_PK_POINT
Total: 46505.965 q/s, deviation=11.4053
Total: 47229.318 q/s, deviation=18.8951
Total: 49838.665 q/s, deviation=15.9148

READ_KEY_POINT
Total: 7669.379 q/s, deviation=6.5187
Total: 7760.701 q/s, deviation=5.9935
Total: 7704.402 q/s, deviation=14.7306

READ_KEY_POINT_NO_DATA
Total: 7704.402 q/s, deviation=14.7306
Total: 11404.569 q/s, deviation=20.5885
Total: 11436.221 q/s, deviation=25.6906

READ_PK_POINT_INDEX
Total: 56056.599 q/s, deviation=19.5014
Total: 55983.262 q/s, deviation=18.8560
Total: 55817.980 q/s, deviation=21.8716

READ_PK_RANGE
Total: 25022.524 q/s, deviation=6.0592
Total: 25150.018 q/s, deviation=9.4339
Total: 25213.854 q/s, deviation=10.0127

READ_PK_RANGE_INDEX
Total: 39620.934 q/s, deviation=7.0374
Total: 39807.611 q/s, deviation=9.5999
Total: 39794.090 q/s, deviation=10.7286

READ_KEY_RANGE
Total: 16640.772 q/s, deviation=18.0400
Total: 17996.585 q/s, deviation=29.1274
Total: 17920.519 q/s, deviation=33.3841

READ_KEY_RANGE_NO_DATA
Total: 18599.171 q/s, deviation=12.8984
Total: 19248.910 q/s, deviation=19.1902
Total: 19196.287 q/s, deviation=11.7246

READ_FTS
Total: 31796.281 q/s, deviation=603.4080
Total: 31952.113 q/s, deviation=1339.6131
Total: 31390.170 q/s, deviation=1344.7636


А для SATA SOFT-RAID:

READ_PK_POINT
Total: 48174.207 q/s, deviation=10.8548
Total: 51986.717 q/s, deviation=12.6436
Total: 52876.077 q/s, deviation=16.9745

READ_KEY_POINT
Total: 7740.196 q/s, deviation=8.9858
Total: 7738.722 q/s, deviation=10.4796
Total: 7756.663 q/s, deviation=7.2526

READ_KEY_POINT_NO_DATA
Total: 11542.783 q/s, deviation=20.7497
Total: 11537.835 q/s, deviation=20.3939
Total: 11485.384 q/s, deviation=29.8689

READ_PK_POINT_INDEX
Total: 56369.553 q/s, deviation=15.9098
Total: 56516.247 q/s, deviation=22.9794
Total: 56289.146 q/s, deviation=14.4877

READ_PK_RANGE
Total: 24962.318 q/s, deviation=9.4856
Total: 25065.788 q/s, deviation=11.5125
Total: 25120.887 q/s, deviation=6.4752

READ_PK_RANGE_INDEX
Total: 38578.917 q/s, deviation=9.8165
Total: 38535.999 q/s, deviation=15.2744
Total: 38554.974 q/s, deviation=8.0175

READ_KEY_RANGE
Total: 16536.120 q/s, deviation=25.5412
Total: 17846.933 q/s, deviation=34.3493
Total: 17927.789 q/s, deviation=28.7770

READ_KEY_RANGE_NO_DATA
Total: 18590.159 q/s, deviation=24.9226
Total: 19193.986 q/s, deviation=19.8769
Total: 19194.111 q/s, deviation=24.1207

READ_FTS
Total: 31640.063 q/s, deviation=1274.8275
Total: 32510.063 q/s, deviation=1274.8275
Total: 31470.914 q/s, deviation=1026.6997


Только вот грош цена всем моим тестам :( Спасибо страничному кэшу - 346304k cached :( Как же блин тестить-то их, чтобы данные не читались только с оперативки а?

MySQL: table crashed, как от этого избавиться раз и навсегда?

Необходимо добавить в: my.cnf следующее:
myisam-recover = BACKUP,FORCE


В случае, если таблица повредится, будет предпринята попытка починить ее. Если это будет приводить к удалению 1 и более строк, будет сделан бэкап и сохранен рядом с расширением .bak.

Выглядеть в логе это будет вот так:

May 31 04:15:22 v1 mysqld[5869]: 100531 4:15:22 [ERROR] /usr/sbin/mysqld: Table './db/table' is marked as crashed and should be repaired
May 31 04:15:22 v1 mysqld[5869]: 100531 4:15:22 [Warning] Checking table: './db/table'
May 31 04:15:22 v1 mysqld[5869]: 100531 4:15:22 [Warning] Recovering table: './db/table'


(с) http://dev.mysql.com/doc/refman/5.0/en/server-options.html

MySQL и flush

В дефалт конфигурации настройки такие:
| flush | OFF |
| flush_time | 0 |


В подробностях же следующее:

If ON, the server flushes (synchronizes) all changes to disk after each SQL statement. Normally, MySQL does a write of all changes to disk only after each SQL statement and lets the operating system handle the synchronizing to disk. See Section B.5.4.2, “What to Do If MySQL Keeps Crashing”. This variable is set to ON if you start mysqld with the --flush option.


Странно, однако... предельно странно.

(с) http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_flush

Отключение query_cache в MySQL

Для многих тестов железа крайне противопоказан MySQL Query_Cache. Поэтому будем его отключать :)

Документация MySQL говорит следующее:
To set the size of the query cache, set the query_cache_size system variable. Setting it to 0 disables the query cache. The default size is 0, so the query cache is disabled by default.


Иными словами, для отключения query_cache достаточно установить в нуль глобальную переменную query_cache_size.

Сделать это в root консоли MySQL можно так:

set global query_cache_size=0;


После чего убеждаемся, что новое значение применилось:

show variables like 'query_cache_size';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| query_cache_size | 0 |
+------------------+-------+
1 row in set (0.00 sec)


А косвенно в этой опции можно убедиться по диким тормозам, которые начнутся при работе с БД :)

источник: http://dev.mysql.com/doc/refman/5.0/en/query-cache-configuration.html

Фича Линукса при очистке кэшей посредством: echo 3 > /proc/sys/vm/drop_caches

Последнее время я стал замечать, что команда:
echo 3 > /proc/sys/vm/drop_caches
не очищает страничный кэш на нагруженных хостинг-серверах. Чем это может быть вызвано?

А вот чем:

This is a non-destructive operation and will only free things that are completely unused. Dirty objects will continue to be in use until written out to disk and are not freeable. If you run "sync" first to flush them out to disk, these drop operations will tend to free more memory.


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

(с) http://linux-mm.org/Drop_Caches

Monday 1 February 2010

О линейных скоростях SSD

Вот как-то так:
dd if=/dev/sdc of=/dev/null
250069680+0 records in
250069680+0 records out
128035676160 bytes (128 GB) copied, 1239.9 s, 103 MB/s


Модельку SSD выложу чуть позже.

Тестирование скорости рандомного доступа к диску

Линейную скорость чтения так или иначе можно смерить. Вот со случайным доступом значительно сложнее, но тут на помощь нам приходит отличная тулза: http://www.linuxinsight.com/how_fast_is_your_disk.html. Скачать ее можно тут и тут.


cd /usr/src
mkdir -p seeker
cd seeker
wget http://fastvps.googlecode.com/svn/trunk/other/seeker.c
gcc seeker.c -o seeker


Запуск теста производится так:

./seeker /dev/sda


Примеры результатов для моего железа.

SATA без RAID:

Results: 62 seeks/second, 15.90 ms random access time
Results: 62 seeks/second, 15.97 ms random access time
Results: 62 seeks/second, 16.04 ms random access time


SATA в soft-raid 1

Results: 65 seeks/second, 15.21 ms random access time
Results: 63 seeks/second, 15.81 ms random access time
Results: 65 seeks/second, 15.25 ms random access time


Один SSD накопитель
Results: 6547 seeks/second, 0.15 ms random access time
Results: 6694 seeks/second, 0.15 ms random access time
Results: 6594 seeks/second, 0.15 ms random access time

4xSAS 15000 Cheetah в RAID-10
Results: 200 seeks/second, 4.98 ms random access time
Results: 198 seeks/second, 5.03 ms random access time
Results: 202 seeks/second, 4.94 ms random access time


Ну что же, в этой весовой категории (seek rate) SSD выходит безоговорочным победителем.

Параметры shm в ядре


/proc/sys/kernel/shmmax - The maximum size of a shared memory segment.
/proc/sys/kernel/shmmni - The maximum number of shared memory segments.
/proc/sys/kernel/shmall - The maximum amount of shared memory that can be allocated (в страницах! страница - 4 кб)


Эти настройки можно очень удобно просмотреть утилитой ipcs:
ipcs -lm

------ Shared Memory Limits --------
max number of segments = 8192
max seg size (kbytes) = 262144
max total shared memory (kbytes) = 8388608
min seg size (bytes) = 1


А текущее использование можно посмотреть вот так:
ipcs -um

------ Shared Memory Status --------
segments allocated 450
pages allocated 1605547
pages resident 464458
pages swapped 14
Swap performance: 0 attempts 0 successes


(с) http://publib.boulder.ibm.com/infocenter/wmqv6/v6r0/index.jsp?topic=/com.ibm.mq.amq1ac.doc/lq10410_.htm

Кеширование страниц - ускоряем сайт в 100 раз (Varnish + ESI)

http://highload.com.ua/index.php/2010/01/22/%D0%BA%D0%B5%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86-%D1%83%D1%81%D0%BA%D0%BE%D1%80%D1%8F%D0%B5%D0%BC-%D1%81%D0%B0%D0%B9%D1%82-%D0%B2-100/

Информационный голод однако!

Господа! Кто какие зарубежные (англоязычные, разумеется) авторитетные ИТ конференции порекомендует? :)