Доброго времени суток!
В этой статье я хочу описать установку и настройку связки из двух серверов. Первый -- сервер, предоставляющий такие повседневные сервисы, как электронная почта, ФТП и обмен мгновенными сообщениями. Всё это на одном сервере потому, что далеко не все админы имеют великое благо — выделенный сервер для каждого сервиса. Второй сервер будет из себя представлять почтовый шлюз + NAT-сервер для первого сервера. Его функции будут следующие: фильтр электронной почты на глобальном уровне и защита первого сервера от внешней сети. Схема их расположения будет выглядеть примерно так:
В моём случае, в местной локальной сети также присутствуют Windows-серверы, выполняющие роль Active Directory и DNS-серверов. На схеме я их не стал указывать.
Для того, чтобы одна только Zimbra работала без тормозов, понадобится довольно неплохое железо, это написано на оф.сайте Зимбры:
http://files.zimbra.com/website/docs/7.0/zcs-system-requirements-7.1.2.pdf
Ну, а поскольку, здесь же, у нас на первом сервере будут ещё ФТП-сервер и OpenFire-сервер, то требования к железу должны быть ещё выше. А вот для второго сервера нам нужно будет совсем немного. Для настройки первого сервера лучше использовать два жёстких диска. Один под систему, а второй, непосредственно, для наших предоставляемых сервисов. Операционная система, для всего этого, будет использоваться Fedora 13 x86_64.
Этап 1. Общая подготовка сервера.
При установке самой системы будем выбирать почти самый минимум компонентов:
Базовая система:
- Основные
- Поддержка оборудования
- Системные средства. Но зайдём внутрь и оставим галки лишь на тех компонентах, которые нам могут понадобиться:
- mc
- ntp
- samba-client
- yum-utils
Больше нам пока ничего не понадобится. Тем не менее, если на этом этапе мы что-то упустили, то это можно будет поправить позже. Устанавливаем.
После того, как система установилась, надо установить самые свежие обновления. Для этого нам нужно, чтобы наш сервер имел доступ в интернет. Сначала настроим сетевой интерфейс. Логинимся под root и набираем команду:
mc
Запустится консольный файловый менеджер. Находим файл /etc/sysconfig/network-scripts/ifcfg-eth0, ставим на него курсор и жмём F4 — откроется содержимое этого файла с возможностью редактирования. Приводим содержимое этого файла примерно вот к такому виду:
DEVICE=eth0
HWADDR=08:00:27:05:1E:FB #mac-адрес сетевого интерфейса
ONBOOT=yes
IPADDR=192.168.199.101 #ваш ip-адрес
NETMASK=255.255.255.0 #ваша маска сети
GATEWAY=192.168.199.2 #ваш шлюз
DNS1=192.168.199.202 #ваш DNS-сервер
DNS2=192.168.199.199 #ваш альтернативный DNS-сервер
SEARCH="mydomain.domain" #ваш локальный домен Active Directory, если есть
DOMAIN="mydomain.domain" #ваш локальный домен Active Directory, если есть.
Сохраняем и перезагружаем систему командой reboot. После загрузки проверяем, что сеть работает:
ping 192.168.199.2
Если пинг пошёл, значит всё хорошо.
Если у вас в сети есть прокси-сервер, и доступ в интернет осуществляется через него, а не напрямую через 80-ый порт, то необходимо в файле /etc/yum.conf дописать следующее:
proxy=http://192.168.199.2:3128 #в таком виде надо прописывать адрес прокси и его порт
proxy_username=myuser # В случае, если необходима авторизация, то прописываем логин
proxy_password=mypass # и пароль
Всё, теперь пробуем обновиться. Важно! Сначала надо обновить сам менеджер пакетов yum! На практике встречалось, что обновление может не пойти, пока не обновишь сам yum. Итак, делаем:
yum -y update yum
И вот только после этого запускаем обновление всей системы:
yum -y update
После успешного обновления надо перезагрузить систему.
Теперь, пришло время немного подстраховаться на некоторые случаи жизни. Желательно запретить заходить на сервер под суперпользователем через ssh. Откроем файл /etc/ssh/sshd_config, в нём раскомментируем и отредактируем строчку:
PermitRootLogin no
Сохраним файл. Теперь, через ssh мы на сервер сможем зайти только под любым обычным пользователем. Кстати, давайте его и создадим:
useradd admin
passwd admin
Мы добавили пользователя admin и назначили ему пароль.Не забудем перезапустить демон sshd:
service sshd restrat
Вторая подстраховка, которую необходимо сделать — это посадить сервер на ИБП и настроить его автовыключение при низком заряде батареи. Для этого мы возьмём ИБП APC Back-UPS ES 525 и программу Apcupsd. Будем считать, что вы уже подключили ИБП к серверу через USB-интерфейс. Теперь, устанавливаем Apcupsd:
yum -y install apcupsd
Для настройки Apcupsd я воспользовался вот этой статьёй. Итак, после установки программы, отрываем файл /etc/apcupsd/apcupsd.conf и правим там лишь некоторые строчки:
BATTERYLEVEL 10
# уровень заряда батареи, при котором сервер начнёт выключаться
MINUTES 8
# оставшееся время работы батареи, меньше которого сервер начнёт выключаться
NISIP 127.0.0.1
Наберём команду ntsysv и отметим в меню apcupsd, чтоб этот сервис запускался при запуске сервера. После этого, можно продолжать, не опасаясь проблем с электричеством.
Чтобы у нас во время установки и настройки не возникло каких-либо непонятных проблем, нужно перевести в разрешающий режим систему принудительного контроля доступа SELinux. Находим файл /etc/selinux/config , находим в нём строчку SELINUX=enforcing и меняем её на SELINUX=permissive.
Далее, пригодится и синхронизация времени с контроллерами домена. Найдём файл /etc/ntp.conf, а в нём найдём строки:
server 0.fedora.pool.ntp.org
server 1.fedora.pool.ntp.org
server 2.fedora.pool.ntp.org
и заменим их на строчки, в которых серверами NTP будут указаны контроллеры домена:
server 192.168.199.202
server 192.168.199.199
Сохраняем и включаем демон ntpd в автозагрузку:
chkconfig ntpd on
И сейчас надо перезагрузить систему.
Для того, чтобы производительность наших сервисов была выше, я решил использовать файловую систему Reiser4 на втором жёстком диске. Но для того, чтобы её можно было создать и использовать в нашей операционной системе, нам нужно будет собрать ядро с поддержкой Reiser4 и установить библиотеки с утилитой для Reiser4.
Начнём с того, что соберём ядро с поддержкой Reiser4. О том, как пересобрать ядро, мне пришлось почитать wiki вот тут, а также обратиться за помощью на юниксфорум. Сейчас я пошагово распишу, как собрать ядро с поддержкой Reiser4 для Fedora 13. Для начала, установим пару пакетов:
yum -y install rpmdevtools yum-utils
Дальнейшие действия надо производить не от суперпользователя, а от обычного пользователя. Для этого, залогинимся под недавно созданным пользователем admin и скачаем src.rpm-ку текущего ядра системы:
yumdownloader --source kernel
Скачается файл kernel-2.6.34.9-69.fc13.src.rpm. Затем, выполняем последовательность команд:
rpmdev-setuptree
su -c 'yum-builddep kernel-2.6.34.9-69.fc13.src.rpm' # вводим пароль от root после этой команды
rpm -Uvh kernel-2.6.34.9-69.fc13.src.rpm
cd ~/rpmbuild/SPECS
rpmbuild -bp --target=$(uname -m) kernel.spec
Затем, нам надо перейти в каталог ~/rpmbuild/SOURCES и скачать туда патч для ядра, который обеспечит поддержку файловой системы reiser4:
cd ~/rpmbuild/SOURCES
wget http://mirror.yandex.ru/kernel.org/linux/kernel/people/edward/reiser4/reiser4-for-2.6/reiser4-for-2.6.34.patch.bz2
Далее, в этом же каталоге надо найти файл config-generic и открыть его для правки. Нам нужно найти строчку CONFIG_REISERFS_FS=m. Перед ней добавим две вот такие строчки:
CONFIG_REISER4_FS=m
# CONFIG_REISER4_DEBUG is not set
Теперь нам надо перейти в каталог ~/rpmbuild/SPECS и открыть для редактирования файл kernel.spec. В нём находим строчку:
# % define buildid .local
и правим её вот до такого вида:
%define buildid .reiser4
Далее, нам надо найти блок кода, который содержит множество строчек, начинающихся как: PatchXX: PatchXXX: PatchXXXX: , где иксы — это цифры, идущие по возрастанию. В том месте, где эти строчки заканчиваются, мы добавим свои аналогичные строчки:
# reiser4
Patch999: reiser4-for-2.6.34.patch.bz2
Затем, находим ещё один блок строчек, начинающихся c ApplyPatch. И также добавим свои аналогичные строчки в том месте, где те заканчиваются:
# 999
ApplyPatch reiser4-for-2.6.34.patch.bz2
Сохраняем наше редактирование. Осталось запустить сборку. Находясь прямо в этом же каталоге ~/rpmbuild/SPECS, выполняем команду:
rpmbuild -bb --without debuginfo --target=`uname -m` kernel.spec
Дожидаемся окончания сборки — она будет идти долго. На моём не самом мощном компьютере это длилось почти весь день. Но когда сборка, всё же таки, закончится, то в каталоге ~/rpmbuild/RPMS/x86_64 появятся готовые rpm-пакеты для установки. Установить наше свежесобранное ядро нужно вот такой последовательностью команд:
su -c "rpm -Uvh kernel-headers-2.6.34.9-69.reiser4.fc13.x86_64.rpm"
su -c "rpm -ivh kernel-2.6.34.9-69.reiser4.fc13.x86_64.rpm kernel-devel-2.6.34.9-69.reiser4.fc13.x86_64.rpm"
После чего, перезагрузим систему. Когда сервер загрузится, то нам надо убедиться, что система работает уже на нашем новом ядре и что модуль поддержки Reiaer4 в нём действительно есть. Сделаем это по порядку. Сначала убедимся, что ядро наше. Введём:
uname -r
Если вывод будет такой: 2.6.34.9-69.reiser4.fc13.x86_64 , то система загрузилась с нашим ядром. Теперь убедимся, что модуль reiser4 присутствует:
modinfo reiser4
Если вывод такой:
filename: /lib/modules/2.6.34.9-69.reiser4.fc13.x86_64/kernel/fs/reiser4/reiser4.ko
license: GPL
author: Hans Reiser <Reiser@Namesys.COM>
description: Reiser4 filesystem
srcversion: 09AFD392BB13E78F9568A62
depends: zlib_deflate,lzo_compress
vermagic: 2.6.34.9-69.reiser4.fc13.x86_64 SMP mod_unload
то модуль reiser4 есть. Теперь попробуем его включить командой:
modprobe -v reiser4
и должны увидеть вот это:
insmod /lib/modules/2.6.34.9-69.reiser4.fc13.x86_64/kernel/lib/zlib_deflate/zlib_deflate.ko
insmod /lib/modules/2.6.34.9-69.reiser4.fc13.x86_64/kernel/lib/lzo/lzo_compress.ko
insmod /lib/modules/2.6.34.9-69.reiser4.fc13.x86_64/kernel/fs/reiser4/reiser4.ko
Похоже, что с ядром всё в порядке. Теперь настало время собрать и установить библиотеки и утилиту для Reiser4. Перейдём в удобный для нас каталог и скачаем:
wget http://mirror.yandex.ru/kernel.org/linux/utils/fs/reiser4/libaal/libaal-1.0.5.tar.bz2
Эта специальная библиотека, которая нужна для работы утилиты reiser4progs. Итак, мы скачали исходники библиотеки libaal. Перед тем, как её собирать и устанавливать, нам надо установить некоторые пакеты, иначе сборка не пойдёт. Выполним:
yum -y install gcc-c++ glibc-static
Теперь соберём и установим libaal:
tar xvf libaal-1.0.5.tar.bz2
cd libaal-1.0.5
./configure
make
make install
После успешной установки библиотеки libaal, точно также скачаем, соберём и установим утилиту для создания файловой системы reiser4:
wget http://mirror.yandex.ru/kernel.org/linux/utils/fs/reiser4/reiser4progs/reiser4progs-1.0.7.tar.bz2
tar xvf reiser4progs-1.0.7.tar.bz2
cd reiser4progs-1.0.7
./configure
make
make install
Теперь, настало время создать на втором жёстком диске раздел с файловой системой reiser4 и примонтировать его в нужное место. Для начала, нам нужно выяснить, под какой буквой наш второй жёсткий диск числится в системе. Обычно, это можно сделать с помощью команды:
dmesg | grep sd
В моём случае, второй жёсткий диск в системе получил название /dev/sda. И в моём случае, этот жёсткий диск не пустой — на нём имеется раздел ntfs, который мне не нужен и который я собираюсь удалить смело. Выполняю команду:
cfdisk /dev/sda
Откроется консольная утилита с довольно понятным интерфейсом, при помощи которой я удалю все существующие разделы на втором жёстком диске. А дальше, уже как будет вам удобнее. Можно на диске создать новый раздел, чтоб потом отформатировать его в reiser4, а можно и не создавать никаких разделов и сразу весь жёсткий диск отформатировать под reiser4. Я, всё-таки, создам раздел sda1, опять же, при помощи cfdisk. Теперь, отформатируем наш раздел в reiser4, включив опцию прозрачного сжатия lzo на файловой системе:
mkfs.reiser4 -o create=ccreg40,compress=lzo1 /dev/sda1
Теперь, осталось только настроить монтирование нашего раздела с Reiser4 к папке /opt. Потому что, именно в эту папку будет устанавливаться zimbra, openfire, и именно в этой папке мы разместим наше будущее фтп-хранилище. Находим файл /etc/fstab и в конце добавим вот такую строчку:
/dev/sda1 /opt reiser4 defaults 0 2
Для чистоты эксперимента, сначала примонтируем этот раздел вручную:
mount /dev/sda1 /opt
и создадим в папке /opt какой-нибудь файл с любым содержимым, например файл «234» с какой-нибудь билибирдой. Теперь, перезагрузим систему. А после загрузки, снова зайдём в каталог /opt и посмотрим, есть ли там наш файл «234». Если есть, то всё отлично :) Ну, и, на всякий случай, выполним команду:
mount
Эта команда покажет, что, в текущий момент, и куда примонтировано. И где-то в серединке, ближе к концу, этого списка как раз и должен быть наш:
/dev/sda1 on /opt type reiser4 (rw)
Если так оно и есть, то можно приступать к следующему глобальному шагу. А именно, к установке и настройке Zimbra.