Archive

Archive for December, 2008

установка tinydns на freebsd

December 25th, 2008

Сразу замечу, что tinydns это днс-сервер для авторитативных запросов. Если надо еще кэширующий днс-резолвер то необходимо настроить dnscache из того же комплекта.
Ставим из портов djbdns, daemontools.
затем:

echo svscan_enable="YES" >> /etc/rc.conf
tinydns-conf bind bind /etc/tinydns 1.2.3.5
mkdir /var/service
ln -s /etc/tinydns /var/service
/usr/local/etc/rc.d/svscan.sh start

создаем файлик /etc/tinydns/root/data с примерно таким содержимым:

#domain.com
.domain.com::ns1.domain.com.:2500
&domain.com::ns2.domain.com.:2500
+ns1.domain.com:192.168.0.1:2500
+ns2.domain.com:192.168.0.1:2500
+domain.com:192.168.0.3:2500
+www.domain.com:192.168.0.3:2500

Находясь в /etc/tinydns/root/ делаем tinydns-data

dns, FreeBSD ,

linux, синхронизация времени

December 19th, 2008
ln -fs /usr/share/zoneinfo/Europe/Moscow /etc/localtime
yum install ntp
ntpdate pool.ntp.org
date

linux ,

ротация логов apache во freebsd

December 16th, 2008

для каждого лог-файла добавить в newsyslog.conf

/var/log/httpd-access.log               600  7     10000 *  J /var/run/httpd.pid 30

Apache ,

универсальный конфиг nginx

December 9th, 2008

С данным конфигом не надо будет прописывать в nginx каждый сайт. Условимся что сайты лежат в /home/домен-без-www/html

user  nobody;
worker_processes  4;
worker_rlimit_nofile 8192;

error_log  /var/log/nginx/nginx-error.log crit;

pid        /var/run/nginx.pid;

events {
worker_connections  2048;
# for linux
use epoll;
# for freebsd
# use kqueue;
}

http {
include       mime.types;
default_type  application/octet-stream;

#access_log  /var/log/httpd/nginx-access.log  main;
access_log  off;
sendfile on;
tcp_nopush on;
tcp_nodelay on;

keepalive_timeout  65;
client_max_body_size       20m;

gzip  on;
gzip_disable "MSIE [1-6]";
gzip_min_length 1100;
gzip_buffers 4 8k;
gzip_types text/plain text/css text/xml application/x-javascript;

server {
listen       *:80 default;
server_name ~^(.*)$;

set $p $host;
if ($host ~ www\.(.*)) { set $p $1; }

location / {
proxy_pass         http://127.0.0.1/;
proxy_redirect     off;
proxy_set_header   Host             $p;
proxy_set_header   X-Real-IP        $remote_addr;
proxy_set_header    X-Forwarded-For $remote_addr;
}

location ~* \.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|js|swf)$ {
root /home/$p/html;
expires max;
}
}
}

FreeBSD, nginx

nginx, ограничение по странам

December 9th, 2008

Будем запрещать доступ только если ип проверен по двум базам. т.к. там встречаются ошибки.
Качаем базу maxmind
ее надо сконвертить в формат Nginx скриптом geo2nginx.pl
Вторую базу качаем отсюда в CIDR формате.
в nginx.conf в http

geo $geo {
        default US;
        include geo-best.conf;
    }

    geo $geo2 {
        default US;
        include worldip.conf;
}

внутри Location

if ($geo ~ "^(CN)$"){
                set $i  "a";
            }
            if ($geo2 ~ "^(CN)$"){
                set $i  "a$i";
            }
            if ($i = "aa"){
                access_log /var/log/httpd/bad-country.log;
                return 403;
            }

FreeBSD ,

linux, включение-отключение сервисов

December 9th, 2008
service --status-all
chkconfig --list
chkconfig --level 2345 mysqld off

(отключить для автозапуска mysql)

linux

установка MogileFS

December 9th, 2008

Общая часть:
ставим subversion

cd /usr/ports/devel/p5-subversion && make install

сохраняем текущий транк в /root/mogile:

svn checkout http://code.sixapart.com/svn/mogilefs/trunk

или лучше просто перенести архивом с существующего места

ставим из портов:

/usr/ports/sysutils/p5-mogilefs-server
/usr/ports/sysutils/p5-MogileFS-Utils
/usr/ports/sysutils/p5-MogileFS-Client
/usr/ports/devel/p5-String-CRC32

– обновляем все библиотеки в /usr/local/lib/perl5/site_perl/5.8.8/ и в /usr/local/bin на полученные из svn
– копируем /mogile/trunk/server/lib/mogdeps/Gearman в /usr/local/lib/perl5/site_perl/5.8.8/
– setenv PERL5LIB lib:/usr/local/lib/perl5/5.8.8/BSDPAN:/usr/local/lib/perl5/site_perl/5.8.8/mach:/usr/local/lib/perl5/site_perl/5.8.8:/usr/local/lib/perl5/site_perl:/usr/local/lib/perl5/5.8.8/mach:/usr/local/lib/perl5/5.8.8:/usr/local/lib/perl5/site_perl/5.8.8/MogileFS

– /etc/mogilefs/mogilefs.conf

lib = /usr/local/lib/perl5/site_perl/5.8.8/
trackers=192.168.0.4:6001

– добавляем юезра:

pw groupadd mogile
pw useradd mogile -g mogile -s tcsh -m

копируем скрипты для мониторинга загрузки дисков в /root/scripts в crontab
*/2 * * * * root /root/scripts/disk-busy-stat.sh

установка трекера:
– ставим из портов:

/usr/ports/databases/p5-DBD-mysql51 (или для 5.0)
/usr/ports/databases/p5-DBI
# mysql
mysql> CREATE DATABASE mogilefs;
mysql> GRANT ALL ON mogilefs.* TO 'mogile'@'%';
mysql> SET PASSWORD FOR 'mogile'@'%' = OLD_PASSWORD( '1111111' );
mysql> FLUSH PRIVILEGES;
mysql> quit
mogdbsetup --dbhost=127.0.0.1 --dbname=mogilefs
-  /etc/mogilefs/mogilefsd.conf
db_dsn = DBI:mysql:mogilefs:host=127.0.0.1
db_user = mogile
db_pass = 111111
conf_port 6001

если после запуска процессы могилы жрут много цпу на трекере – рестартануть могилу на стораджах.

# su mogile
$ mogilefsd -c /etc/mogilefs/mogilefsd.conf --daemon
$ exit

установка storage ноды:

– mkdir /var/mogdata
– монтируем туда как “devN” сами диски-стораджи (N должно быть уникальное для всего трекера)
ln -s /usr/home/mogile/dev4/ /var/mogdata/dev4
– создаем в каждом каталог test-write mkdir /home/mogile/dev4/test-write
– ставим на них права 777 chmod -R 777 /usr/home/mogile/dev4/
– /etc/mogilefs/mogstored.conf
mgmtlisten=0.0.0.0:7501
docroot=/var/mogdata
server=none

– ставим апач (сначала) и пхп из портов.

cd /usr/ports/www/apache20 && make install
cd /usr/ports/lang/php5 && make config

– Ставим nginx

cd /usr/ports/www/nginx && make config

– включить mod_dav, mod_flv(он будет как вебдав и отдавать статику)
Если у нас будет антихотлинк на стораджах

cd /usr/ports/security/php5-mcrypt && make install

в rc.conf

apache2_enable="YES"
nginx_enable="YES"
mogstored_enable="YES"
mkdir /var/log/nginx
chmod 777 /var/log/nginx/

– nginx.conf и httpd.conf взять с других стораджей
– mkdir /usr/home/domain.com, скопировать туда скрипты
– автостартап скрипт для стораджа

– проверить содержимое /etc/mogilefs/
– синхронизировать время /usr/sbin/ntpdate pool.ntp.org
– запускаем nginx, апач
– /usr/local/etc/mogstored start
– в ротацию

/var/log/nginx/nginx-access.log         600  7     10000 *  J /var/run/nginx.pid
/var/log/nginx/error_log                600  7     10000 *  J /var/run/nginx.pid
/var/log/httpd-access.log               600  7     10000 *  J /var/run/httpd.pid
/var/log/snmpd.log                      644  7     3000 *     J

Трекер должен быть запущен.
– Добавляем новый хост на трекер (выполняем на трекере): mogadm host add [dns имя нового стораджа] –ip=[ip нового стораджа] –status=alive
например,

mogadm host add storage1.domain.com --ip=1.2.3.1 --status=alive

– Добавляем папки с нового хоста на трекер:
mogadm device add [dns имя нового стораджа] N –status=alive
например,

mogadm device add storage1.domain.com 1 --status=alive

Сделать приоритет в два раза больше чем у других

mogadm device modify storage1.domain.com 1 --status=alive --weight=200

Если надо приостановить отдачу с хоста

mogadm device modify storage1.domain.com 1 --status=down

Если надо его вывести

mogadm device modify storage1.domain.com 1 --status=dead

FreeBSD

настройка ssmtp (FreeBSD)

December 9th, 2008

Установим и автоматически заменим системный почтовик:

cd /usr/ports/mail/ssmtp && make install replace clean

В /usr/local/etc/ssmtp/ssmtp.conf

root=admin@domain.ru
mailhub=mail.domain.ru
hostname=this-host.domain.ru
rewritedomain=domain.ru

Таким образом вся почта отправленная на локального root-а уйдет на admin@domain.ru

FreeBSD, почта , ,

PowerDNS

December 9th, 2008

конфиг для pdns – slave

allow-recursion=127.0.0.1
daemon=yes

launch=gmysql
gmysql-host=127.0.0.1
gmysql-user=pdns
gmysql-dbname=pdns
gmysql-password=password
gmysql-socket=/var/lib/mysql/mysql.sock

local-address=1.2.3.1
slave=yes

* при добавлении нового слэйва поправить строчку allow-axfr на мастере
* в таблице supermaster – заполнить!

create table domains (
 id      INT auto_increment,
 name        VARCHAR(255) NOT NULL,
 master      VARCHAR(128) DEFAULT NULL,
 last_check  INT DEFAULT NULL,
 type        VARCHAR(6) NOT NULL,
 notified_serial INT DEFAULT NULL,
 account         VARCHAR(40) DEFAULT NULL,
 primary key (id)
)type=InnoDB;

CREATE UNIQUE INDEX name_index ON domains(name);

CREATE TABLE records (
  id              INT auto_increment,
  domain_id       INT DEFAULT NULL,
  name            VARCHAR(255) DEFAULT NULL,
  type            VARCHAR(6) DEFAULT NULL,
  content         VARCHAR(255) DEFAULT NULL,
  ttl             INT DEFAULT NULL,
  prio            INT DEFAULT NULL,
  change_date     INT DEFAULT NULL,
  primary key(id)
)type=InnoDB;

CREATE INDEX rec_name_index ON records(name);
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);

create table supermasters (
  ip VARCHAR(25) NOT NULL,
  nameserver VARCHAR(255) NOT NULL,
  account VARCHAR(40) DEFAULT NULL
);

GRANT SELECT ON supermasters TO pdns;
GRANT ALL ON domains TO pdns;
GRANT ALL ON records TO pdns;

FreeBSD ,

CentOS допольнительные репозитарии

December 9th, 2008

Для i386:

rpm -ihv http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
rpm -ihv http://download1.rpmfusion.org/free/el/updates/testing/5/i386/rpmfusion-free-release-5-0.1.noarch.rpm
rpm -ihv http://download1.rpmfusion.org/nonfree/el/updates/testing/5/i386/rpmfusion-nonfree-release-5-0.1.noarch.rpm
rpm -ihv http://repo.redhat-club.org/redhat/5/i386/redhatclub-repository-release-5-3.el5.rhc.noarch.rpm
rpm -ihv http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
rpm -ihv http://rpms.famillecollet.com/enterprise/remi-release-5.rpm

# неплохой дополнительный репозиторий
rpm -ihv http://centos.alt.ru/repository/centos/5/i386/centalt-release-5-3.noarch.rpm

Для x86_64:

rpm -ihv http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
rpm -ihv http://apt.sw.be/redhat/el5/en/x86_64/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
rpm -ihv http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
rpm -ihv http://centos.alt.ru/repository/centos/5/x86_64/centalt-release-5-3.noarch.rpm

linux , ,

sysctl.conf (для i386 & amd64)

December 9th, 2008
security.bsd.see_other_uids=0
security.bsd.see_other_gids=0
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
net.link.ether.inet.log_arp_movements=1
net.inet.icmp.drop_redirect=1
net.inet.icmp.bmcastecho=0
net.inet.tcp.icmp_may_rst=0
kern.sync_on_panic=1
kern.coredump=0
net.inet.ip.random_id=1
net.inet.icmp.maskrepl=1
kern.ipc.somaxconn=8096
kern.threads.max_threads_per_proc=8096
kern.maxfiles=204800
net.inet.tcp.sendspace=65535
net.inet.udp.recvspace=65535
net.inet.ip.intr_queue_maxlen=100
net.inet.tcp.rfc1323=1
kern.maxvnodes=150000
net.inet.ip.portrange.randomized=0
net.inet.ip.portrange.first=1024
net.inet.ip.portrange.last=65536
net.inet.tcp.nolocaltimewait=1
kern.ipc.maxsockets=204800
kern.ipc.nmbclusters=32768
# 65536 - если кол-во подключений будет очень большое. потребует 144 мб от памяти ядра

Применить:

/etc/rc.d/sysctl restart

FreeBSD ,

rc.conf

December 9th, 2008
fsck_y_enable="YES"
icmp_drop_redirect="YES"
accounting_enable="YES"
syslogd_flags="-ss"
tcp_drop_synfin="YES"
tcp_restrict_rst="YES"

sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

FreeBSD

установка snmpd

December 9th, 2008

если на фре надо поддержку 64-bit счетчиков то компилим так:

make WITHOUT_PERL_EMBEDDED=yes WITH_MFD_REWRITES=yes -DBATCH -C /usr/ports/net-mgmt/net-snmp install clean

snmpd_enable="YES"
snmpd_conffile="/usr/local/etc/snmp/snmpd.conf"
snmpd_pidfile="/var/run/snmpd.pid"

mkdir /usr/local/etc/snmp
/usr/local/etc/rc.d/snmpd start

FreeBSD , ,

tcsh

December 9th, 2008

поменять шелл:

pw usermod egor -s tcsh

в .cshrc

alias ll        /bin/ls -AlFG
alias ls        /bin/ls -FG
alias df    df -h
alias du    du -hс
   
setenv  EDITOR  ee
setenv  PAGER   less
set prompt = '[%n@%B%m%b] %~%# '
set ignoreeof
set nobeep
set autolist

FreeBSD ,

openvz, virtuozzo мониторинг, производительность

December 9th, 2008

смотрим превышения в последнем столбце

cat /proc/user_beancounters

если чего то не хватает, то добавляем по принципу

vzctl set 200 --numtcpsock 5000 --save

linux , ,

linux, мониторинг, производительность

December 9th, 2008

hdparm -t -T /dev/sda1 – дисковая производительность
stat -f / – количество занятых/свободных блоков/инодов
iostat -m -x sda 2 6 – смотрим загрузку указанного диска (пакет sysstat)
vmstat -S M 2 50 – смотрим статистику/потребление по ресурсам
free -m (колонка cache – память занятая под кэш ФС)
cat /proc/meminfo
cat /proc/cpuinfo
cat /proc/interrupts – кто генерит больше прерываний
cat /proc/net/dev – передано через интерфейс в байтах
cat /proc/sys/fs/file-max – макс. допустимое количество откр. файлов (sysctl -w fs.file-max=”16384″)
cat /proc/sys/fs/file-nr
nload – графический мониторинг трафика
fdisk -l – информация о дисках и разделах
top, 1 – распределение нагрузки по ядрам
netstat -s # статистика по сети. Например, netstat -s |grep establish текущее количество установленных соединений
ethtool eth0 # информация о режимах работы поддерживаемых сетевой картой, о текущих режимах и параметрах
Отличная статья про использование top-утилит

linux ,

FreeBSD, мониторинг, производительность

December 9th, 2008

top -mio -o total – показать I/O по процессам
top -S – показать системные процессы в топе (по дефолту они не показываются)
gstat – нагрузка на диски
iostat -d -w1 -c7 – нагрузка на диски
systat -io start 1
diskinfo -t da0 – тест на дисковую производительность
tunefs -p /var/ – информация о настройках файловой системы
vmstat -z чего не хватает
vmstat -i прерывания по устройствам
netstat -i ошибки на интерфейсах
systat -ifstat – интенсивность передачи трафика
netstat -inb – передано через интерфейс в байтах
netstat -w1 – количество пакетов/ошибок/байт на интерфейсе
sysctl kern.ipc.numopensockets – количество открытых сокетов
df -H – количество свободного места
df -i – количество свободных инодов

Для детальной информации по расходу памяти:

fetch -o /usr/local/bin/free http://people.freebsd.org/~rse/dist/freebsd-memory
chmod +x /usr/local/bin/free
free

Смотреть top: mem Inact, если меньше RAM/2 то мало памяти под дисковый кеш.

“помеченные как Inact, Cache и Buf – это всё кэшированные данные разных степеней устаревания”

При большой дисковой нагрузке, особенно с большим количеством мелких файлов смотреть на vfs.ufs.dirhash_maxmem. Можно увеличить до 8-16-32 мегов и более. sysctl -a | egrep “kmem|dirhash|shpg” смотреть чтобы vfs.ufs.dirhash_lowmemcount не росло.

+ неплохой обобщающий топик про тюнинг nginx

Выжимка из доклада Сысоева про тюнинг фряхи

Хороший топик про Тюнинг отдачи мелких картинок через nginx на FreeBSD

FreeBSD ,

чтобы собрать порт с параметрами (например вкомпилить модули в апач)

December 9th, 2008
cd /usr/ports/www/apache20
make configure
cd ./work/программа

сказать configure с нужными опциями
вернуться ../../ и сказать

make
make install

FreeBSD

postfix и cyrus создание ящика

December 9th, 2008
saslpasswd2 -c support@domain.com
cyradm -u admin localhost
mail3.domain.com> cm user/support@domain.com
mail3.domain.com> sam user/support@domain.com support@domain.com all
mail3.domain.com> sam user/support@domain.com admin c
mail3.domain.com> sq user/support@domain.com STORAGE 300000
mail3.domain.com> quit

добавить строку в файл virtual

postmap ./virtual

Если добавляешь домен:
прописать в virtdomains

postmap ./virtdomains

прописать в imapd.conf

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

Для тестирования работы связки можно использовать:

sasldblistusers2 # список юзеров в сасл-базе
imtest -u user@domain.com -w password mail.domain.com # пробуем локально зайти

Экспортировать список пользователей с паролями из sasdb базы в удобочитаемый вид можно так:

db41_dump -p ./sasldb2 | sed 's/\\00/@/g' | sed 's/@userPassword//g'

почта , , ,

nginx включение сжатия

December 9th, 2008
gzip on;
gzip_disable "MSIE [1-6]";
gzip_min_length 1100;
gzip_buffers 4 8k;
gzip_types text/plain text/css text/xml application/x-javascript;

FreeBSD