Развертывание сервера
Общая установка и настройка
Установка системы на серверную машину производится любым из доступных способов, например с CD- или DVD-носителя. Опуская специфичные для каждого конкретного класса (и каждого конкретного дистрибутива) подробности этого процесса, обратим внимание на некоторые детали.
Во-первых, при разметке диска рекомендуется учитывать следующие факторы:
Поскольку на сервере будут храниться данные одного или, что более вероятно, нескольких профилей (необходимость хранить более одного профиля возникнает как при организации разнородного класса, так и при конфигурировании "на лету"), а также домашние каталоги всех пользователей, разумно выделить достаточно большой объем дискового пространства под раздел с /srv, в подкаталогах которого все эти данные и будут храниться. Отметим, что для повышения уровня безопасности сервера монтирование этого раздела разумно осуществлять с опциями nosuid и nodev.
С учетом того, что процесс эксплуатации класса предполагает активное использование сетевых служб (в том числе необходимых для синхронизации), разумно выделить значительный объем под раздел подкачки (swap).
В случае, если предполагается активное использования сервера как операторского рабочего места, имеет смысл отвести достаточный объем дискового пространства под корневой раздел / (или, в случае более тонкой настройки, под раздел /usr и, возможно, /var).
Приведем простейшую схему разбиения жесткого диска объемом в 28 гигабайт (примерно 30 миллиардов байт):
1 GB swap 10 GB / 17 GB /srv (nosuid,nodev)
Во-вторых, при настройке сети рекомендуется привязать имена сетевых интерфейсов в системе к MAC-адресам физических устройств. В дистрибутивах ПСПО это можно осуществить либо выбором соответствующей опции при установке, либо с помощью ручного редактирования конфигурационного файла /etc/iftab (за справкой отошлем к странице руководства iftab(5)). Ручная настройка в простейшем случае может свестись к выполнению следующей команды:
# ip -o link show | sed -nr '/link\/ether/s+^[[:digit:]]*: ([[:alnum:]]*):.*link/ether ([[:alnum:]:]*).*$+\1\tmac \2+p' > /etc/iftab
В большинстве случаев сервер разумно использовать в качестве маршрутизатора, если для его клиентов планируется доступ во внешнюю сеть. Подробнее о настройке маршрутизации ---
Практика использования iptables: продолжение
В простейшем случае достаточно присвоить параметру net.ipv4.ip_forward в файле /etc/net/sysctl.conf значение 1. Тогда при настроенной маршрутизации на сервере подключенные к нему клиенты получат через него доступ во внешнюю сеть. При значении 0 сервер перестаёт работать как маршрутизатор и у клиентов остаётся только локальная сеть.
Установка и конфигурирование сетевых служб
Предварительные действия
Будем теперь считать, что первичная настройка системы, включая конфигурирование сети, выполнена. Подключим необходимые хранилища (рекомендуется использование Sisyphus school branch) и обновим локальные индексы диспетчера пакетов:
# apt-get update
Установим необходимые для функционирования класса сетевые службы:
# apt-get install rsync-server nfs-server dhcp-server tftp-server apt-utils pdnsd rdate
(Заметим, что rdate непосредственно использоваться не будет.)
Займемся теперь конфигурированием этих служб.
Службы, поддерживаемые метадемоном xinetd
Вначале откроем файл /etc/xinetd.conf и закомментируем строку с параметром only_from, поставив в ее начале символ решетки:
#only_from = 127.0.0.1
Сохраним изменения и отредактируем конфигурационный файл rsync-сервера --- /etc/rsyncd.conf. Впишем в его конец следующие строки:
uid = root
gid = root
[profiles]
path = /srv/profiles
[update-profiles]
path = /srv/profiles
read only = no
auth users = updater
list = no
secrets file = /etc/rsyncd.secretsКак видим, здесь мы ссылаемся на файл /etc/rsyncd.secrets, который должен содержать базу данных пользователей службы rsync. Создадим этот файл и впишем в него единственную строку:
updater:updpassword
Здесь updater --- имя пользователя, которому будет разрешено обновлять данные профилей в нашем классе. Его можно оставить без изменений, а можно задать и иным (но тогда нужно будет вносить изменения в инициальные настройки synchrone). Что же касается строки updpassword, то она задает пароль для этого пользователя --- этот пароль обязательно следует заменить на другой; лучше --- более сложный. Сохранив файл /etc/rsyncd.secrets, ограничим права доступа к нему:
# chmod 600 /etc/rsyncd.secrets
Теперь правом на чтение и изменение этого файла обладает лишь суперпользователь нашего сервера.
В основном конфигурационном файле службы rsync упоминался также каталог /srv/profiles --- это место, где будут храниться данные профилей. Создадим этот каталог уже сейчас:
# mkdir /srv/profiles
Помимо этих изменений, нам нужно внести изменения в конфигурационный файл метадемона xinetd, отвечающий за обслуживание rsync-сервера. Этот файл называется /etc/xinetd.d/rsync. Откроем его и отредактируем строку с параметром rlimit_as, отвечающую за накладываемые на rsync ограничения по объему адресного пространства. В нашем случае она должна выглядеть так:
rlimit_as = UNLIMITED
На этом настройку службы rsync можно считать завершенной. Задействуем ее по умолчанию:
# chkconfig rsync on
Нам также необходимо включить запуск при старте системы двух других служб, поддерживаемых метадемоном xinetd: это tftp и time-tcp.
# chkconfig tftp on # chkconfig time-tcp on
Чтобы эти службы (и, кроме них, rsync-сервер) запустились прямо сейчас, дадим следующую команду:
# for i in rsync tftp time-tcp; do service $i start; done
На всякий случай дадим команду для включения самого демона xinetd:
# service xinetd start
Служба DHCP
Для функционирования класса нам пригодится служба DHCP. Поскольку пакет dhcp-server был нами установлен, то для настройки осталось создать корректный конфигурационный файл /etc/dhcp/dhcpd.conf. Его содержимое должно выглядеть примерно так:
# See dhcpd.conf(5) for further configuration
ddns-update-style none;
subnet 192.168.201.0 netmask 255.255.255.0 {}
subnet 10.30.5.0 netmask 255.255.255.0 {
option routers 10.30.5.1;
option subnet-mask 255.255.255.0;
#option nis-domain "domain.org";
option domain-name "class305.mpgu.edu.ru";
option domain-name-servers 10.30.5.1;
range dynamic-bootp 10.30.5.101 10.30.5.199;
default-lease-time 21600;
max-lease-time 43200;
filename "pxelinux.0";
next-server 10.30.5.1;
}Обратим внимание на используемые IP-адреса. 10.30.5.1 следует заменить на внутренний IP-адрес нашего сервера (обратим внимание, что он встречается в тексте нашего файла трижды), 10.30.5.101 и 10.30.5.199 --- на границы диапазона выдаваемых клиентским компьютерам адресов. Строку subnet 10.30.5.0 netmask 255.255.255.0 следует привести в соответствие с используемыми в классе сетевыми адресами, а строку subnet 192.168.201.0 netmask 255.255.255.0 {} --- с "внешним" IP-адресом настраиваемого нами сервера (заметим, что для каждой непосредственно доступной нашему серверу сети в dhcpd.conf должна содержаться строка данного вида).
Сохранив конфигурационный файл на диск, включим запуск DHCP-сервера при старте системы:
# chkconfig dhcpd on
Для включения же его прямо сейчас воспользуемся другой командой:
# service dhcpd start
Служба доменных имен
Сконфигурируем установленный нами простейший сервер доменных имен --- pdnsd. Откроем его конфигурационный файл /etc/pdnsd.conf и внесем в него два изменения. Во-первых, закомментируем параметр server_ip в разделе global --- соответствующая строка должна выглядеть примерно так:
# server_ip="127.0.0.1";
Во-вторых, в первом из разделов server заменим в строке с параметром ip используемый по умолчанию IP-адрес одного из корневых серверов службы DNS на IP-адрес сервера DNS, предоставляемого нашим провайдером. Сохраним внесенные в файл изменения и организуем запуск демона pdnsd при старте системы:
# chkconfig pdnsd on
Перед включением pdnsd полезно сгенерировать разумный файл /etc/hosts. В простейшем случае это достигается двумя командами:
# echo "127.0.0.1 localhost.localdomain localhost" > /etc/hosts
# for i in `seq 254`; do echo "10.30.5.${i} host${i}.class305.mpgu.edu.ru host${i}"; done >> /etc/hostsСтроку 10.30.5. следует при этом заменить на используемый в нашем классе адрес сети без последнего байта, а строку class305.mpgu.edu.ru --- на имя внутреннего домена (оно может быть и фиктивным, таким как class15.school123.zhukovsky.moscow-region.ru). После этого можно заменить адрес используемого сервера DNS на 127.0.0.1 в файле /etc/resolv.conf (можно воспользоваться также "Центром управления системой" --- конфигуратором Alterator).
Чтобы запустить pdnsd, дадим следующую команду:
# service pdnsd start
Сетевая файловая система
Организуем теперь на нашем сервере раздачу посредством сетевой файловой системы NFS нужных для функционирования класса каталогов: клиентских /home (он будет соответствовать каталогу /srv/home на сервере) и каталога для сетевой загрузки (его мы поместим в /srv/boot). Вначале создадим их:
# mkdir /srv/home /srv/boot
Теперь составим корректный конфигурационный файл для службы NFS со списком раздаваемых каталогов. Он должен называться /etc/exports и содержать следующие строки (адрес 10.30.5.0/24 следует заменить на используемый в классе адрес сети)::
/srv/boot *(ro,no_subtree_check,no_root_squash) /srv/home 10.30.5.0/24(rw,no_subtree_check,no_root_squash)
Сохраним этот файл на диск и организуем службы NFS при старте системы:
# chkconfig nfs on # chkconfig nfslock on
Непосредственный же запуск NFS отложим до разворачивания всех необходимых нам данных.
Организация сетевой установки: предварительные действия
Осталось организовать сетевую загрузку и установку. Во-первых, нам понадобятся данные с загрузочного диска дистрибутива ПСПО "Легкий Линукс" (возможно, подойдет и какой-либо другой дистрибутив из семейства ALT Linux). Будем считать, что соответствующая файловая система уже примонтирована к каталогу /media/cdrom. Скопируем все содержимое диска в подкаталог каталога /srv/boot:
# cp -a /media/cdrom /srv/boot/lite
Теперь зайдем в системный каталог, который отвечает за этап загрузки, поддерживаемый уже настроенным нами tftp-сервером:
# cd /var/lib/tftpboot
Создадим в нем подкаталог, соответствующий установке по сети:
# mkdir install
Скопируем нужные для загрузки файлы:
# cp /srv/boot/lite/syslinux/alt0/* install/ # cp /usr/lib/syslinux/pxelinux.0 .
Создадим теперь еще один необходимый для нас каталог:
# mkdir pxelinux.cfg
В нем нужно создать файл с именем default (полным путем к нему будет, естественно, /var/lib/tftpboot/pxelinux.cfg/default) со следующим содержимым:
timeout 10 prompt 1 default install label install kernel install/vmlinuz append initrd=install/full.cz fastboot automatic=method:nfs,network:dhcp,server:10.30.5.1,directory:/srv/boot/lite ai live stagename=altinst
Осталось внести нужные нам модификации в установщик.
Организация сетевой установки: модификация установщика
Для внесения изменений в установщик нам понадобится архив со всеми необходимыми файлами (прикладывается к инструкции). Будем производить все действия из домашнего каталога суперпользователя /root:
# cd
Пусть имя файла с архивом --- hack-pkg.tgz. Распакуем его:
# tar xvvzf hack-pkg.tgz
Все файлы из архива будут помещены в каталог hack. Перейдем в него:
# cd hack
Вначале следует отредактировать файл options, содержащий общие настройки. В нашем случае он должен выглядеть примерно так:
# NFS server name SERVER=host1 # NFS home export NFS_HOME=/srv/home # server-side directories: # hack home HACK_HOME=/root/hack SOURCE="$HACK_HOME"/src BIN="$HACK_HOME"/bin # installer DEST=/srv/boot/lite # installer subdirectory names: REPO=ALTLinux META=Metadata # absolute paths: REPODIR="$DEST/$REPO" METADIR="$DEST/$META"
Если значения каких-либо переменных не соответствуют действительности, то в options следует внести соответствующие изменения. host1 --- это имя нашего сервера с точки зрения службы NFS, /srv/home --- расположение домашних каталогов пользователей клиентских компьютеров. /root/hack --- наше текущее "местонахождение", /srv/boot/lite --- каталог с содержимым диска выбранного нами дистрибутива ПСПО.
После сохранения изменений нужно модифицировать также файл src/synchrone-src/etc/synchrone/config/global. Этот файл содержит основные настройки утилиты synchrone и будет при установке распространен по всем клиентским компьютерам. Следует привести его содержимое примерно к такому виду:
# Configuration file for synchrone (simply sourced)
# Server-related options
SERVER_ADDRESS=10.30.5.1
SERVER_PORT=873
SERVER_PUB=/profiles
SERVER_UPLOAD=/update-profiles
UPLOAD_USER=updater
# Local destination
TARGET=/
# End of configuration settings
# (you should NOT probably change any line below this
# unless you know exactly what you are doing!)
# Local settings are kept in a seperate file
# so they shall not be syncronized
CONFIG_LOCAL=/etc/synchrone/config/local
if [ -r "$CONFIG_LOCAL" ]; then
. "$CONFIG_LOCAL"
fiЗдесь нужно вписать IP-адрес нашего сервера вместо 10.30.5.1, а также задать имя пользователя из базы данных rsync (/etc/rsyncd.secrets), который будет отвечать за сохранение профилей клиентских компьютеров на нашем сервере (в нашем случае это updater, что соответствует сделанной нами ранее записи в /etc/rsyncd.secrets).
Сохраним изменения и отредактируем еще один файл --- им будет src/synchrone-src/etc/rc.d/init.d/synchrone. Чтобы обеспечить автоматическую (при загрузке) синхронизацию времени на клиентских компьютерах со временем на нашем сервере, раскомментируем несколько строк в ветке start) в данном сценарии, удалив пять стоящих столбцом символов решетки # (один должен остаться). Содержимое файла должно выглядеть так:
# Init file for synchrone
#
# chkconfig: 2345 12 88
# description: synchrone is a simple wrapper for rsync(1)
#
# config: /etc/synchrone/config/global
# config: /etc/synchrone/config/local
# config: /etc/synchrone/rules/main
# config: /etc/synchrone/rules/local
# config: /etc/synchrone/rules/upgrade
WITHOUT_RC_COMPAT=1
SYNCHRONE=/usr/bin/synchrone
case "$1" in
start)
# synchonize time
if which rdate > /dev/null 2>&1; then
rdate -s host1
hwclock --systohc
fi
"$SYNCHRONE" --upgrade
"$SYNCHRONE" --get
;;
stop)
;;
restart)
#"$SYNCHRONE" --get
;;
reload)
;;
status)
;;
*)
;;
esac
exit 0Сохраним изменения и в этом файле. Последнее изменение, которое нам необходимо внести, касается сценария автоматической установки, находящегося в файле src/metadata-mod/autoinstall.scm. В нем следует заменить строку pass1word на пароль суперпользователя клиентских компьютеров (обратим внимание, что данная строка встречается в файле четырежды). Заметим также, что в данном сценарии задаются также регистрационное имя и пароль "резервного" пользователя (гостя): по умолчанию это guest и guest.
После записи сценария автоматической установки на диск запустим собственно модификатор установщика, передав ему в качестве параметра имя файла с основными настройками:
# ./modify-installer.sh options
Когда модификатор завершит свою работу, в нашем классе появится возможность выполнять установку ОС на клиентские компьютеры по сети в автоматическом режиме. Единственное действие (отложенное нами ранее), которое необходимо выполнить для включения данной возможности, --- это включение службы NFS:
# service nfs start # service nfslock start
После это действия по разворачиванию сервера можно считать оконченными.
