Добавить non-free репозиторий в Debian

December 7th, 2009

в /etc/apt/sources.list должно быть:

deb ftp://ftp.debian.org/debian/ stable main contrib non-free

потом:

apt-get update

Бэкап, восстановление, клонирование OpenVZ контейнеров

December 3rd, 2009

Ставим тулзы:

yum install cstream perl-LockFile-Simple
rpm -Uvh http://www.proxmox.com/cms_proxmox/cms/upload/vzdump/vzdump-1.2-4.noarch.rpm

Собственно дампим существующий контейнер в архив (по дефолту в /vz/dump/), восстанавливаем в новый ID (120), меняем у него хостнейм и IP и запускаем:

vzdump --compress --suspend 110
vzdump --restore /vz/dump/vzdump-110.tgz 120
vzctl set 120 --hostname newhostname.com --save
vzctl set 120 --ipdel 1.2.3.1 --save
vzctl set 120 --ipadd 1.2.3.2--save
vzctl start 120

У новых версий vzdump уже может не быть параметра restore – он заменен на утилиту

vzrestore /vz/dump/vzdump-110.tgz 120

Этот же механизм удобно использовать и для резервного копирования контейнеров OpenVZ.

Хороший репозиторий для CentOS

November 20th, 2009

Нашел хороший дополнительный репозиторий серверного софта для CentOS.
Ставить так:
Для i386:
1. Устанавливаем epel репозиторий.

rpm -ihv http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm

2. Устанавливаем CentALT репозиторий.

rpm -ihv http://centos.alt.ru/repository/centos/5/i386/centalt-release-5-4.noarch.rpm

Для x86_64:
1. Устанавливаем epel репозиторий.

rpm -ihv http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

2. Устанавливаем CentALT репозиторий.

rpm -ihv http://centos.alt.ru/repository/centos/5/x86_64/centalt-release-5-4.noarch.rpm

Полный список пакетов

Установка mod_geoip на Linux/FreeBSD сервер с DirectAdmin

October 17th, 2009

В случае c Linux:

yum install GeoIP GeoIP-devel
cd /root
wget http://geolite.maxmind.com/download/geoip/api/mod_geoip2/mod_geoip2_1.2.5.tar.gz
tar zxvf mod_geoip2_1.2.5.tar.gz
cd mod_geoip2_1.2.5
apxs -i -a -L/usr/lib -I/usr/include -lGeoIP -c mod_geoip.c

В /etc/httpd/conf/httpd.conf добавляем:

LoadModule geoip_module /usr/lib/apache/mod_geoip.so
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
/etc/init.d/httpd restart

В случае с FreeBSD:

cd /usr/ports/net/GeoIP && make install
cd /root
wget http://geolite.maxmind.com/download/geoip/api/mod_geoip2/mod_geoip2_1.2.5.tar.gz
tar zxvf mod_geoip2_1.2.5.tar.gz
cd mod_geoip2_1.2.5
apxs -i -a -L/usr/local/lib -I/usr/local/include -lGeoIP -c mod_geoip.c

Добавление в конфиг апача аналогично.

Увеличение conntrack таблицы в Linux

October 16th, 2009

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

Oct 16 21:40:24 my-host kernel: ip_conntrack: table full, dropping packet.
Oct 16 21:40:29 my-host kernel: printk: 817 messages suppressed.

Посмотрим какое ограничение у нас прописано сейчас:

sysctl -a|grep net.ipv4.netfilter.ip_conntrack_max

И сколько физически используется сейчас:

sysctl -a|grep net.ipv4.netfilter.ip_conntrack_count

Решением этой проблемы является увеличение данного лимита:

sysctl net.ipv4.netfilter.ip_conntrack_max=631072

Не лишне данный параметр записать в sysctl.conf

Наблюдение за действиями на другом терминале

October 16th, 2009

Иногда бывает необходимо посмотреть что делает в терминале другой пользователь системы. Во FreeBSD для этого есть встроенные средства:

# w
9:16PM up 55 days, 5 mins, 2 users, load averages: 0.07, 0.06, 0.00
USER TTY FROM LOGIN@ IDLE WHAT
user1 p0 test1.ru 9:06PM - w
user2 p1 test2.ru 9:16PM - -bash (bash)

Теперь подключаемся к сеансу:

watch p1

Добавление IP-алиасов в Debian

October 12th, 2009

/etc/network/interafces:

auto lo
iface lo inet loopback

allow-hotplug eth0
auto eth0
iface eth0 inet static
        address 1.2.3.2
        netmask 255.255.255.0
        network 1.2.3.0
        broadcast 1.2.3.255
        gateway 1.2.3.1
        dns-nameservers 208.67.222.222

auto eth0:0
iface eth0:0 inet static
        address 1.2.3.3
        netmask 255.255.255.0
        broadcast 1.2.3.255

auto eth0:1
iface eth0:1 inet static
        address 1.2.3.4
        netmask 255.255.255.0
        broadcast 1.2.3.255

Рестартим сеть:

/etc/init.d/networking restart

Даунгрейд порта во FreeBSD

October 12th, 2009

Иногда возникает необходимость откатить приложение установленное через порты на более раннюю версию. Сначала откатим данные в нашей базе портов на нужную версию. К примеру будем откатывать php:

cd /usr/ports/ports-mgmt/portdowngrade && make install clean
/usr/local/sbin/portdowngrade -s "anoncvs@anoncvs.tw.FreeBSD.org:/home/ncvs" lang/php5
Выбираем 1, выбираем номер версии на которую нужно откатиться, пишем yes

Теперь мы получили нужную версию в дереве портов. Теперь, чтобы переустановить приложение в систему:

portupgrade -f php5

Если надо даунгрейдить другие приложения, то шаги нужно повторить.

Установка memcached на CentOS 5

September 25th, 2009
yum --enablerepo=remi install memcached

Конфиг (/etc/sysconfig/memcached):

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1"

Запуск:

chkconfig memcached on
/etc/init.d/memcached start

Если надо еще PHP расширение к нему:

yum --enablerepo=remi install php-pecl-memcache
или для PHP 5.2.10
rpm -ihv http://rpms.famillecollet.com/enterprise/5/olds/x86_64/php-pecl-memcache-3.0.4-1.el5.remi.x86_64.rpm
/etc/init.d/httpd reload

Кратко о использовании iperf для тестирования скорости соединения

September 23rd, 2009

Ставим iperf из портов или из yum-a.
Запускаем сервер:

iperf -s -i2 # tcp-сервер с выводом стастистики каждые 2 сек.
iperf -s -u -w1400 #udp-сервер, с размером окна 1400 байт

Запускаем клиента:

iperf -c server_host -u -t 60 # подключение по udp к server_host и тестирование в течение 60сек
iperf -n 10m -p 65005 -c server_host # Послать 10 мегабайт, на порт 65005

Пересылка всей исходящей почты через smarthost в Linux (CentOS)

September 17th, 2009

В /etc/mail/sendmail.mc добавляем:

define(`SMART_HOST', `mail.domain.com')

Ставим пакет для sendmail и апдейтим конфигурацию:

yum install sendmail-cf
make -C /etc/mail
/etc/init.d/sendmail restart

Установка Bind (named) на CentOS

September 14th, 2009

В этой заметке рассмотрим установку bind на CentOS в chroot и синхронизацию (в том числе создание/удаление зон на первом и втором ДНС-сервере).
Ставим

yum install bind-chroot

Создаем файл /var/named/chroot/etc/named.conf

options {
        listen-on port 53 { 1.2.3.1; };
        directory       "/var/named";
        allow-query     { any; };
        recursion no;
        allow-transfer { none; };
        version "no version info";
};

include "/var/named/zone.conf";

Создаем файл /var/named/chroot/var/named/zone.conf

zone "domain1.com" IN {
        type master;
        file "domain1.com.conf";
        allow-update { none; };
};

zone "domain2.com" IN {
        type master;
        file "domain2.com.conf";
        allow-update { none; };
};

Ну и файлы зон, например, /var/named/chroot/var/named/domain.com.conf

$TTL 3600
domain.com.    IN    SOA    ns1.dnsdomain.com.    root.domain.com.    (
20010610    ; Serial
10800        ; Refresh
3600        ; Retry
604800        ; Expire
86400    )    ; Minimum TTL

@        IN    NS    ns1.dnsdomain.com.
@        IN    NS    ns2.dnsdomain.com.
@        IN    A  1.2.3.1
www      IN    CNAME  @
@        IN    MX 10  mail.domain.com.
mail     IN    A   1.2.3.1

На втором сервере делаем все точно так же.
Теперь про синхронизацию зон.

На первом сервере:

cd /root/.ssh
ssh-keygen -b 1024 -t dsa

На втором сервере:

/usr/sbin/useradd -s /bin/bash srv-dns-acct
cd /home/srv-dns-acct/
mkdir .ssh
В файл .ssh/authorized_keys копируем id_dsa.pub с первого сервера
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
chown -R srv-dns-acct /var/named/chroot/var/named
chmod +x /var/named/
chmod +x/var/named/chroot/
chmod +x /var/named/chroot/var/

На первом сервере создаем файл /var/named/dnssync.sh:

#!/bin/sh
cd /var/named/chroot/var/named/
tar czvf - *.conf | ssh srv-dns-acct@ns2.domain.com tar xzf - -C /var/named/chroot/var/named/

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

#!/bin/sh

# first param - domain, Second - IP

# Domains base
BASE="/var/named/chroot/var/named"

sed -e "s/domain.com/$1/g" "$BASE/sample" > "$BASE/$1.db.tmp"
sed -e "s/1.2.3.4/$2/g" "$BASE/$1.db.tmp" > "$BASE/$1.conf"
echo "zone \"$1\" { type master; file \"$BASE/$1.conf\"; };" >> $BASE/zone.conf
rm "$BASE/$1.db.tmp"

service named reload

Установка nginx с PHP как FastCGI на Debian Linux

September 9th, 2009

Отличная статья по этой теме здесь

Справка по aptitude в Linux Debian

September 9th, 2009

Преимущество aptitude над apt состоит в том, что она лучше справляется с обработкой зависимостей и рекомендуется разработчиками Debian в качестве основного средства для управления пакетами.
Если вы раньше пользовались утилитами apt, то можете просто начать пользоваться aptitude, в большинстве случаев это не вызовет никаких проблем.
Справка по ключам:
install – Установить/обновить пакеты
remove – Удалить пакеты
purge – Удалить пакеты и их файлы конфигурации
hold – Зафиксировать пакеты
unhold – Отменить команду hold для пакета
markauto – Пометить пакет, что он был установлен автоматически
unmarkauto – Пометить пакет, что он был установлен вручную
forbid-version – Запретить aptitude обновлять определённую версию пакета.
update – Загрузить список новых/обновлённых пакетов
safe-upgrade – Perform a safe upgrade
full-upgrade – Perform an upgrade, possibly installing and removing packages
forget-new – Забыть, какие пакеты “новые”
search – Поиск пакета по имени и/или выражению
show – Показать подробную информацию о пакете
clean – Удалить загруженные файлы пакетов
autoclean – Удалить старые загруженные файлы пакетов
changelog – Посмотреть changelog пакета
download – Загрузить файл .deb для пакета
reinstall – Загрузить и (возможно) переустановить уже установленный пакет

Параметры:
-h Этот текст помощи
-s Имитировать действия, но не выполнять их на самом деле.
-d Только загрузить пакеты, ничего не устанавливать и не удалять.
-P Всегда спрашивать подтверждение или действия
-y Предполагать ответ ‘yes’ на простой вопрос yes/no
-F format Задать формат отображения результатов поиска; смотрите руководство
-O order Задать формат сортировки результатов поиска; смотрите руководство
-w width Задать ширину вывода результатов поиска
-f Принудительно исправлять неработоспособные пакеты.
-V Показывать версию устанавливаемых пакетов.
-D Показывать зависимости автоматически изменяемых пакетов.
-Z Показывать изменение размера установки каждого пакета.
-v Отображать дополнительную информацию. (может быть введено несколько раз)
-t [release] Задать выпуск, из которого должны быть установлены пакеты
-q Не выводить индикатор прогресса в режиме командной строки.
-o key=val Вручную установить значение параметра настройки с именем ‘key’
–with(out)-recommends Указать, будут ли рекомендуемые пакеты
трактоваться как строгие зависимости
-S fname Читать aptitude информацию о расширенном статусе из fname.
-u Загрузить список новых пакетов при запуске.
-i Запустить установку при запуске.

После выполнения, например, aptitude search package_name в левой колонке можно увидеть два ряда статусов:
Значения основного статуса следующие:
i (от installed) – пакет установлен в системе:
p (от purge) – пакет не был установлен или был удален “вчистую”
c (от clean) – пакет, удаленный с сохранением конфигурационных файлов;
v (от virtual) – т.н. виртуальные пакеты, то есть просто списки реальных пакетов, один из которых будет использоваться в той или иной ситуации.

Дополнительный статус пакета может принимать такие значения:
A (от Auto) – пакет был установлен не самостоятельно, а автоматически, как зависимость другого пакета;
h (от hold) – для пакета зафиксирована его текущая версия, то есть он не будет обновляться при выполнении операторов upgrade и dist-upgrade (см. ниже);
u (от unpacked) – пакет был получен, распакован, но не инкорпорирован в файловую систему и не сконфигурирован;
C (от half-Configured) – пакет, установка которого оборвалась на стадии конфигурирования;
H (от Half-installed) – пакет, установка которого оборвалась на стадии инсталляции;
B (от Broken) – т.н. “сломанные” пакеты – то есть содержащие ошибки внутри себя или утратившие свои зависимости.

Установка Tinydns (djbdns) на linux

September 7th, 2009

Так как нормальных rpm нет придется ставить из исходников.
Сначала ставим daemontools, который будет запускать сервис tinydns, следить за его состоянием и тд.

cd /root
wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
tar zxvf ./daemontools-0.76.tar.gz
В src/conf-cc в строку с gcc добавляем -include /usr/include/errno.h
cd ./admin/daemontools-0.76/
./package/install

cd /root
wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
tar zxvf ./ucspi-tcp-0.88.tar.gz
cd ./ucspi-tcp-0.88
В conf-cc в строку с gcc добавляем -include /usr/include/errno.h
make
make setup check

cd /root
wget http://cr.yp.to/djbdns/djbdns-1.05.tar.gz
tar zxvf ./djbdns-1.05.tar.gz
cd djbdns-1.05
echo gcc -O2 -include /usr/include/errno.h > conf-cc
make
make setup check

groupadd dnsuser
/usr/sbin/useradd -g dnsuser -s /sbin/nologin -d /dev/null tinydns
/usr/sbin/useradd -g dnsuser -s /sbin/nologin -d /dev/null dnslog
/usr/local/bin/tinydns-conf tinydns dnslog /etc/tinydns [ip-сервера]
ln -s /etc/tinydns /service/tinydns #говорим daemontools-у о новом сервисе, он сам его запустит через 5 сек

Заполняем файл зон (/etc/tinydns/root/data) по образцу:

.domain.com::ns1.domain.com.:2500
&domain.com::ns2.domain.com.:2500
@domain.com::mail.domain.com.:10:2500
+domain.com:serverip:2500
+*.domain.com:serverip:2500

Делаем в /etc/tinydns/root чтобы перекинуть данные в бинарную версию data.cdb:

make

Проверить что data.cdb содержит требуемые данные:

cd /etc/tinydns/root
tinydns-get a www.domain.com

Управление сервисами:

svc -d /service/tinydns #остановить сервис
svc -u /service/tinydns #запустить сервис
svc -t /service/tinydns #рестартануть сервис
svstat /service/tinydns #проверяем статус

Синхронизация зон со вторым ДНС-сервером.

Для синхронизации бинарного файла с данными по зонам (с другим сервером) воспользуемся scp.
На втором днс-сервере необходимо установить аналогичный комплект. Затем на первом сервере:

cd /root/.ssh
ssh-keygen -b 1024 -t dsa

На втором сервере:

/usr/sbin/useradd -s /bin/bash srv-dns-acct
cd /home/srv-dns-acct/
mkdir .ssh
В файл .ssh/authorized_keys копируем id_dsa.pub с первого сервера
chmod 700 .ssh
chmod 600 .ssh/authorized_keys

На первом сервере в файл /etc/tinydns/root/Makefile добавляем:

scp data.cdb srv-dns-acct@ns2.domain.com:/etc/tinydns/root/data.cdb

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

cd /etc/tinydns/root
make

Смотрите так же Скрипт добавления зон
Для добавления разных экзотических записей есть tinydns Record Builder

Примечание:
Если вдруг была удалена директория /etc/tinydns/supervise то надо сделать ps auxww |grep sup и грохнуть два процесса supervise. Затем сделать ps auxww |grep sv и грохнуть два процесса svscan. Инит перезапустит svscan, а тот перезапустит supervise и он пересоздаст каталоги.

PHP 5.3 и PHP 5.2.10

September 1st, 2009

После выхода PHP 5.3 в популярном репозитории REMI для RHEL/CentOS PHP-пакеты были заменены на версию 5.3. В некоторых случаях это создает неудобства, так как далеко не все веб-приложения и скрипты работоспособны под этой версией. Поэтому при сетапе или обновлении сервера надо либо отключать этот репозиторий или ставить 5.2.10 пакеты вручную для i386 и для x86_64

Проблемы со статистикой (webalizer) в DirectAdmin

August 13th, 2009

Иногда бывает, что ДиректАдмин по каким-то причинам не считает статистику по доменам. Вот несколько пунктов по которым это может происходить:

  • отсутствует библиотека GD. Симптом: “ebalizer: error while loading shared libraries: libgd.so.2: cannot open shared object file: No such file or directory”. Чтобы починить:
    yum install gd
  • Не установлен или не работает crond. Чтобы починить:
    yum -y install vixie-cron
    service crond start
    chkconfig crond on
  • Не прописан создатель домена. Например, в общем случае, в /usr/local/directadmin/data/users/admin/users.list должны быть прописаны все пользователи DirectAdmin-а
  • Сам webalizer не корректно собран. Для проверки просто запускаем webalizer и смотрим не появятся ли ошибки.
  • Анализ логов отключен в directadmin.conf. Чтобы починить ищем и исправляем в directadmin.conf строки:
    webalizer=0
    rotation=0
  • Какие либо проблемы в самом webalizer. Чтобы проверить это запускаем обсчет статистики вручную для конкретного домена:
    /usr/bin/webalizer -p -n domain -o /home/user/domains/domain.com/stats /var/log/httpd/domains/domain.com.log
  • Логи апача по каким-либо причинам не пишутся для этого домена. Проверяем здесь /var/log/httpd/domains/domain.com.log

Чтобы проверить статистику делаем:

echo "action=tally&value=all" >> /usr/local/directadmin/data/task.queue

и смотрим /var/log/directadmin/system.log & /var/log/directadmin/error.log

Еще фишка с настройками вебалайзера. По дефолту, используются умолчальные настройки и они забиты в бинарник ДиректАдмина.
Чтобы кастомизировать настройки webalizer надо создать конфиг в /usr/local/directadmin/data/templates/custom/webalizer.conf и поместить туда директивы, которые должны отличаться от дефолтных, например:

AllReferrers    yes

suPHP для PHP под Apache

August 4th, 2009

Если по простому,то suPHP это штука, которая позволяет выполнять PHP-скрипты под Apache с правами их владельца, а не с правами веб-сервера. Это бывает необходимо если на сервере несколько пользователей (например, фтп), они активно меняют контент сайтов, но веб-серверу тоже нужен доступ к этим файлам. Тут то и происходит конфликт владельцев.
suPHP есть и в портах для FreeBSD:

cd /usr/ports/www/suphp && make install clean

и в пакетах для CentOS:

yum install mod_suphp

Запускается как обычный модуль для апача:

LoadModule php5_module libexec/apache2/libphp5.so
LoadModule suphp_module libexec/apache2/mod_suphp.so

Конфиги в файле suphp.conf

Внимательнее к параметрам:

; Security options
allow_file_group_writeable=false
allow_file_others_writeable=false
allow_directory_group_writeable=false
allow_directory_others_writeable=false

Из-за них может посыпаться много ошибок.

Для активации надо прописать либо в глобальной секции httpd.conf, либо в конкретном виртуал-хосте:

suPHP_Engine on
suPHP_AddHandler application/x-httpd-php

Не путать с модулем для апача suexec!

Замечен такой косяк: если надо запускать что-то через exec и по относительному пути исполняемый файл не находится, то надо убедится, что в suphp.conf прописано с кавычками!

env_path="/bin:/usr/bin"

Обновление DirectAdmin вручную

July 30th, 2009
cd /usr/local/directadmin
wget -O update.tar.gz https://www.directadmin.com/cgi-bin/daupdate?uid=111&lid=222
tar xvzf update.tar.gz
./directadmin p
cd scripts
./update.sh
service directadmin restart

Из какого пакета файл?

July 22nd, 2009

Отличная статья отвечающая на вопрос Из какого пакета установлен файл?

Сайт пластиковых окон информация окна пвх kbe. Производство пластиковых окон и окна пвх. .
RSS-подписка