воскресенье, 29 мая 2011 г.

Сборка FreeBSD-9 с помощью Clang

Clang является фронэндом к LVM и призван заменить gcc в базовой системе. Сейчас же по умолчанию сборка как системы, так и портов ведется с помощью далеко не самой свежей версии gcc.

пятница, 27 мая 2011 г.

Обновление perl с 5.10 до 5.12 во FreeBSD

Не так давно версией перла по умолчанию в портах стала 5.12. Процесс обновления уже установленного порта подробно описан в файле UPDATING, тем не менее выкладываю пошаговую инструкцию:
  1. Первым делом нужно обновить дерево портов до актуальной версии (portsnap, cvsup, csup)
  2. Проверим pkgdb: pkgdb -Ff
  3. Установим новую версию: env DISABLE_CONFLICTS=1 portupgrade -o lang/perl5.12 -f perl-5.10.\*
  4. Пересоберем все порты, зависящие от перла (долго): portupgrade -fr perl

вторник, 24 мая 2011 г.

Использование mysqlbackup для автоматического бекапа баз mysql

Скрипт mysqlbackup позволяет легко автоматизировать резервное копирование баз mysql.  Сам скрипт написан на sh и не имеет никаких зависимостей. Во FreeBSD скрипт устанавливается из портов:

понедельник, 23 мая 2011 г.

vim конвертация dos в unix

Всем когда-то приходится сталкиваться с файлами, созданными в dos/win. Напомню, что файлы созданные в win имеют в конце каждой строки символ возврата каретки (символ ^M).
Есть два способа их удаления в редакторе vim:
:set ff=unix а затем :w файл будет сохранен без символов возврата каретки
либо можно воспользоваться комадой замены :%s/^V^M//. Здесь нажатие Ctrl+V необходимо для ввода символа ^M

четверг, 19 мая 2011 г.

MySQL удаление старых binlogs

В некоторой литературе встречается мненение, что бинарных логи можно удалять просто вызывая команду rm, однако это верно лишь для старых версий MySQL. Начиная с 5.0 этого делать нельзя. Для удаления устаревших логов нужно использовать либо команду PURGE BINARY LOGS, либо установить переменную expire_logs_days в my.cnf.

Использование APC для ускорения выполнения PHP скриптов

APC (Alternative PHP Cache) как и другие подобные продукты работает за счет кэширования скомпилированного байт-кода. Без акселератора процесс выполнения скрипта состоит из четырех этапов:
  • открытие файла
  • компиляция в байт код
  • выполнение байт-кода
  • отдача результата выполнения
Один из самых ресурсозатратных - это компиляция.

вторник, 17 мая 2011 г.

Безопасный способ изменения правил ipfw

Изменение правил фаервола на удаленной машине всегда рискованная операция, поскольку есть риск закрыть себе доступ. Во FreeBSD есть скрипт change_rules.sh, который частично решает данную пробему.

понедельник, 16 мая 2011 г.

Мониторинг состояния MySQL и InnoDB с помощью innotop

Незаменимый инструмент для мониторинга в реальном времения состояния MySQL - аналог утилиты top.
В режиме по умочанию показывает:
  • количество соединений (всего, активных и кэшированных потоков)
  • количество запросов в секунду
  • аптайм и версию сервера
  • количество slow query
  • распределение запросов по типам (select, insert, update, delete)
  • процент попадания в кэш запросов
  • трафик сервера
  • список выполняющихся запросов в формате похожем на show processlist;
Утилита представляет собой perl-скрипт. Лицензия на код GPL2 скачать можно отсюда

суббота, 14 мая 2011 г.

Skype во FreeBSD

Сегодня обновился порт skype для freebsd с полной поддержкой видео и аудио.
Правда сначала придется обновить систему до ревизии r221388 или старше. Звук лично у меня зарботал только через oss, видео не тестировал.

Уменьшение количества соединений в состоянии TIME_WAIT

Как я уже рассказывал в одной из предыдущих заметок, соединение может еще долгое время находится в состоянии TIME_WAIT, согласно RFC 1323 это время должно равнятся 2 минутам, двум msl (Maximum Segment Lifetime). MSL - это время, в течение которого сегмент может путешествовать по сети (RFC рекомендует 60 секунд). На загруженном сервере при таком значении msl число соединений time_wait расчет очень быстро, к тому же упомянутый rfc составлялся достаточно давно и пропускная способность каналов с тех пор возрасла многократно, поэтому многие уменьшают это значение.

пятница, 13 мая 2011 г.

Мониторинг процессов через snmpd

В пакете net-snmp предусмотрена возможность мониторинга запущенных процессов, для этого предназначена директива proc. На своих серверах я обычно включаю  в snmpd.conf сделедующие директивы:
proc ntpd
proc syslogd
proc sshd
proc cron
Остальное по вкусу, можно также указать максимальное/минимальное число процессов.

среда, 11 мая 2011 г.

nginx http_gzip_module

Согласно официальной документации модуль позволяет уменьшить объем передаваемых данных в два раза.

вторник, 10 мая 2011 г.

Получение исходных кодов FreeBSD с помощью cvsup

Несмотря на то, что все коммиты вносятся в репозиторий subversion, зеркала csvup по прежнему обновляются и их можно использовать для получения актуальной версии исходных кодов.

Репликация Redis

Мастер-Слейв репликация Redis позволяет иметь слейвам точную копию данных мастера.
Ключевые особенности репликации Redis:
  • Мастер может иметь несколько слейвов
  • Слейвы могут играть роль мастеров для другий серверов, создавая таким образом древовидную структуру
  • Репликация не приводит к блокировке на стороне мастера. Это означает, что мастер продолжает обрабатывать запросы во время первичной синхронизации данных слейвом.
  • Репликация может использоваться как для машстабирования чтения, так и для повышения доступности 

MySQL отличия Row-based и Statement-based репликации

Начиная с mysql 5.1 поддерживаются два вида репликации: Row-based и Statement-based, каждый имеет как достоинства, так и недостатки.

воскресенье, 8 мая 2011 г.

Мониторинг состояния nginx с помощью nagios

Для мониторинга количества запросов и подключений в секунду можно использовать плагин check_nginx, который представляет из себя простой sh скрипт

пятница, 6 мая 2011 г.

FreeBSD ZFS замена сбойного диска

Диски являются одной из самых частных причин сбоев на серверах, поэтому нужно быть готовым заменить диск в случае его сбоя

Правильная настройка sshd на сервере

На я серверах меняю ряд параметров в /etc/ssh/sshd_config, дефолтные значения которых считаю не оптимальными.

четверг, 5 мая 2011 г.

среда, 4 мая 2011 г.

Основы работы с subversion

Subversion - это одна из самых популярных систем контроля версий. В этой заметке я расскажу о самый основных приемах работы с ней

вторник, 3 мая 2011 г.

htop(1) - расширенная версия top(1)

htop - расширенная версия просмотрщика процессов, который показывает процессы в виде дерева.

Мой rc скрипт для запуска VirtualBox во FreeBSD

Текущий порт virtualbox идет без какого-либо rc скрипта, поэтому его приходится делать самим.

FreeBSD кастомный /etc/src.conf

Этот конфирурационный файл опеределяет параметры сборки основной системы, точнее - что собирать, а что нет.
Вот мой типовой конфиг:

WITHOUT_PROFILE=    yes # не собирать версии библиотек для профайлинга
WITHOUT_ATM=    yes         # не собирать ATM и все с ним связанное
WITHOUT_I4B=    yes           # не собирать ISDN - удалено в 9.0
WITHOUT_IPX= yes              # не собирать IPX
WITHOUT_CDDL=yes           # не собирать компоненты, импортированные из opensolaris - zfs, dtace
WITHOUT_FLOPPY="YES"   # не собирать поддержку floppy дисков
WITHOUT_INET6="YES"      # без поддержки ipv6
WITHOUT_NCP="YES"          # без поддержки NetWare
WITHOUT_NDIS="YES"        # без поддержки NDIS


другие параметры перечислены в man src.conf

postmaster@ abuse@ должны быть

Раз уж речь пошла об RFC, будет нелишним напомнить, что адреса abuse@ postmaster@ обязательно должны существовать, даже если в whois указаны другие контактные адреса.

понедельник, 2 мая 2011 г.

SMTP ограничение количества получателей

Многие администраторы устанавливают лимит количества получателей письма, кто-то ставит 25, кто-то даже 10. Так вот все это неправильно, поскольку согласно rfc-2821 сервер за  один раз должен принять не меньше 100 получателей. Почтовые серверы, не выполняющие это требование (чаще всего по незнанию rfc администраторами) грубо нарушают данный стандарт.

Terminator - удобный эмулятор терминала

Терминатор написан на питоне с использованием py-vte. От традиционных многовладочных терминалов его отличает возможность в одном онке открывать несколько сессий, при этом экран делиться либо вертикально, либо горизонтально. Вдобавок можно на лету менять кодировку, это очень удобно, если на локальной машине юникод, а на удаленной utf-8. Кроме того, есть функция объединения терминалов в группу. Т.е. команда вводиться один раз, а выполняется на всех серверах.
В общем мас-хев http://www.tenshu.net/terminator/

Проверка авторизации SMTP

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

Простая защита от ddos средставами фаервола

Рано или поздно всем приходится сталкиваться с таким неприятным моментом, как ddos. Скажу сразу, что зашититься на 100% от ддос нельзя, но предусмотреть некоторые превентивные меры не только можно, но и нужно. Самый простой - способ блокировать хосты, проявляющие слишком большую активность.

воскресенье, 1 мая 2011 г.

Снапшуты zfs и бекап баз

В одной и предыдущих заметок я рассказывал о резервном копировании баз postgresql, но тот метод основан на применении pgdump и не всегда подходит. У него есть минимум два недостатка:
  • Большая длительность операций, особенно для крупных баз. Это касается как сохранения, так и восстановления.
  • Снятие дампа - это достаточно дорогая с точки зрения ввода-вывода операция и может негативно отразиться на состоянии сервера, если снимать дамп с боевой машины.

Восстановление рутового пароля к mysql

Восстановить пароль достаточно просто при условии, что есть рутовые права на самом сервере.

Для начала нужно добавить строку skip-grant-tables в секцию [mysqld] конфига mysql. Данная опция позволяет подключаться без пароля любому пользователю.
Для вступления в силу изменений необходимо перезапустить сервер базы. Далее подключаемся рутом:
$ mysql -u root mysql
Если в конфиге все прописано верно, то пароль не будет запрошен. Получив доступ к консоли меняем пароль:
> UPDATE mysql.user SET Password=PASSWORD('new password') WHERE User='root';
После этого снова перезапускаем сервер, предварительно убрав опцию skip-grant-tables из конфига

TCP TIME_WAIT

Такое состояние характерно для завершающей стадии соединия.
Рассмотрим пример:
FIN 1 => 2
ACK 1 <=2
FIN  1 <= 2
ACK 1 => 2
В первой строке хост 1 инициирует завершение соединение отправкой пакета с флагом FIN. Хост 2, получив такой пакет подтверждает его флагом ACK, после чего в свою очередь отправляет хосту 1 свой пакет с флагом FIN и закрывает соединение. Вот с момента получения этого пакета хостом 1, соединение переходит в состояние TIME_WAIT. Это время дается на случай, если последний ACK не дойдет до хоста 2, тогда он снова отправит FIN, на который хост 1 еще раз отошлет ACK.

Использование subversion для получения исходных кодов FreeBSD

В 2008 году проект FreeBSD осуществил переход от устаревшего CVS к subversion. Все новые комитты с тех пор вносятся в subversion, а лишь затем попадают в CVS, а уже от туда распространяются по зеркалам cvsup. Там образом в subversion всегда более свежая редакция исходных кодов, да и checkout из subversion быстрее cvsup.