Об автоматической установке дистрибутива «Astra Linux Special Edition»
См. обновление.
Автоматическая преднастроенная установка на основе так называемых preseed файлов (ответов на вопросы инсталлятора) не является чем-то новым, информации в сети полно, например тут. Данная технология очень удобна и в комбинации с PXE (подробнее тут) позволяет быстро и без лишних вопросов установить ОС на целевой компьютер или сервер. Наша команда при работе над проектом программного комплекса кластера высокой готовности (что такое кластерные технологии в целом можно почитать здесь) на базе отечественной защищенной ОС Astra Linux Special Edition версии 1.3 столкнулась с необходимости установки ОС в идентичной конфигурации на несколько серверов, а поскольку в процессе тестирования нашего продукта на железе, возникала необходимость тестировать на свежеустановленной ОС, вопрос оптимизации временных затрат на данную операцию вышел на первый план. При установке программного комплекса у заказчика автоматизация установки тоже дело полезное и, как выяснилось позже, необходимое.
Кратко процедура установки выглядит так:
- В BIOS целевого компьютера ставим «Загрузка по сети» (обычно Boot to Network -> Enable и в Boot Device Priority -> Ethernet на первом месте, уточняйте в документации).
- На компьютере который у нас будет выступать в роли сервера установки, заряжаем dhcp, tftp и http(ftp) (подробности ниже).
- Включаем целевой компьютер, тот получает IP, качает загрузочный образ по tftp и запускает инсталляцию.
- и как говорится: Поехали!.
Автоматическая установка «Astra Linux Special Edition»
Из документации на ОС нами было определено, что такая возможность присутствует, что в принципе ожидаемо для достаточно свежего Дебьян-подобного дистрибутива и разработчики приводят инструкцию как это сделать… Но «гладко было на бумаге». В процессе первоначального знакомства столкнулись с рядом проблем. Но обо всем по порядку. Для реализации задачи нами был выбран dnsmasq в качестве dhcp и tftp сервера и образ netinst с диска Астры. Первое с чем надо определится как будем отдавать репозиторий с пакетами. Как правило, используют http и тут первая особенность, поскольку это защищенная и сертифицированная ОС, то имеющийся сервер Apache — тоже защищен, т.е. отсутствует возможность доступа без авторизации (только pam или kerberos). Следовательно, если вы будете использовать другую ОС, в качестве сервера установки, то можно настроить любой http-сервер.
[symple_toggle title=»Настройка http-сервера apache для ubuntu’образных»]
- ~# aptitude install apache2
- правим /etc/apache2/httpd.conf добавив следующие строки:
# /media/cdrom - зеркала пакетов(в данном примере cd дистрибутивом)
<Directory /media/cdrom>
Options Indexes FollowSymLinks
Allowoverride None
</Directory>
<Directory /srv/ftp/tftp>
Options Indexes FollowSymLinks
Allowoverride None
</Directory>
Alias /astra "/media/cdrom"
Alias /tftpboot "/srv/ftp/tftp" - ~# service apache2 restart
- Проверить через браузер, что указанные каталоги доступны.
[/symple_toggle]
В нашем случае необходимо, чтобы сервером автоматической установки ОС была Astra Linux Special Edition, тогда для отдачи файлов будем использовать ftp-сервер. Берем vsftpd устанавливаем и настраиваем на доступ без авторизации.
[symple_toggle title=»Настройка vsftpd»]
- ~# aptitude install vsftpd
- ~# mkdir -p /srv/ftp && chmod -R 755 /srv/ftp
- ~# usermod -d /srv/ftp ftp
- правим файл /etc/vsftpd.conf:
listen=YES
listen_ipv6=NO
anonymous_enable=YES
anon_root=/srv/ftp/
local_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=ftp
rsa_cert_file=/etc/ssl/private/vsftpd.pem - ~# service vsftpd restart
[/symple_toggle]
Сервер tftp может быть отдельным, например tftpd-hpa, или, как уже упоминалось, можно использовать tftp сервер встроенный в dnsmasq — берем второй вариант. Делаем каталог tftp в /srv/ftp.
[symple_toggle title=»Настройка dnsmasq как dhcp и tftp сервера»]
- ~# aptitude install dnsmasq
- правим файл /etc/dnsmasq.conf:
interface=eth0
dhcp-range=<начальный IP>,<конечный IP>,<маска подсети>,24h
dhcp-option=3,<IP сервера установки>
enable-tftp
# /srv/ftp/tftp - путь до корневого каталога tftp сервера
tftp-root=/srv/ftp/tftp
# pxelinux.0 это файл из пакета SYSLINUX, входящего в состав образа netinst.
dhcp-boot=pxelinux.0 - ~# service dnsmasq restart
[/symple_toggle]
Организация каталога для tftp-сервера
Копируем в /srv/ftp/tftp из netinst файлы linux (ядро), pxelinux.0, initrd.gz (временная файловая система, используемая ядром при начальной загрузке). Далее, в /srv/ftp/tftp создаем каталог pxelinux.cfg и там делаем файл с именем default (его будет получает целевой компьютер). Данный файл содержит параметры загрузки ядра. В параметре url и указывается файл с ответами на вопросы установщика .
[symple_toggle title=»Пример файла default»]
DEFAULT astra LABEL astra kernel linux append initrd=initrd.gz debian-installer/locale=ru_RU console-keymaps-at/keymap=ru hostname=<host-имя которое будет назначено целевому компьютеру> domain=<имя домена> url=ftp://<IP-адрес_сервера>/tftp/preseed.cfg interface=auto netcfg/dhcp_timeout=60 TIMEOUT 1
[/symple_toggle]
Создаем файл preseed.cfg с ответом на вопросы инсталлятора в /srv/ftp/tftp. Пример файла приведен ниже. Комментарии к некоторым ответам имеются, остальное можно без труда найти в сети. Отмечу лишь несколько особенностей специфичных для Astra Linux:
- Для установки базовой системы + рабочего стола Fly добавляем строку:
tasksel tasksel/first multiselect Base, Fly
- не настраиваем сервисы ALD и службу kiosk(служба разграничения доступа к файлам) добавляем следующие строки:
astra-license astra-license/license boolean true
krb5-config krb5-config/kerberos_servers string
libnss-ldapd libnss-ldapd/ldap-base string
libnss-ldapd libnss-ldapd/ldap-uris string
libnss-ldapd libnss-ldapd/nsswitch multiselect services
ald-client ald-client/make_config boolean false
ald-client ald-client/manual_configure note
tasksel tasksel/astra-feat-setup multiselect
[symple_toggle title=»Пример файла preseed.cfg»]
# настройка языка и страны согласно локали
d-i debian-installer/language string ru
d-i debian-installer/country string RU
d-i debian-installer/locale string ru_RU.UTF-8
# настройка клавиатуры
d-i keyboard-configuration/xkb-keymap select ru
d-i console-setup/toggle string Alt+Shift
d-i languagechooser/language-name-fb select Russian
d-i countrychooser/country-name select Russia
d-i keyboard-configuration/toggle select Alt+Shift
d-i console-setup/fontface select Terminus
d-i console-setup/ask_detect boolean false
d-i console-setup/layoutcode string ru
d-i console-setup/variant Россия
# подключение репозиториев
d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true
# выключить показ диалога с WEP ключом.
d-i netcfg/wireless_wep string
# настройка зеркала с пакетами
d-i mirror/protocol string ftp
d-i mirror/country string manual
d-i mirror/ftp/hostname string 192.168.50.211
d-i mirror/ftp/directory string /astra_repository
d-i mirror/ftp/proxy string
# задаёт, установлены или нет аппаратные часы по Гринвичу.
d-i clock-setup/utc boolean true
# настройка timezone
d-i time/zone string Europe/Moscow
# определяет, нужно ли использовать NTP для установки часов во время установки
d-i clock-setup/ntp boolean false
# разбиение диска создание разделов
d-i partman-auto/method string lvm
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-auto/purge_lvm_from_device boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-md/confirm_nochanges boolean true
d-i partman-lvm/confirm boolean true
d-i partman-auto/choose_recipe select atomic
d-i partman-md/confirm boolean true
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select Finish partitioning and write changes to disk
d-i partman/confirm boolean true
d-i partman-md/confirm_nooverwrite boolean true
d-i partman/confirm_nooverwrite boolean true
# устанавливаемый пакет (мета) с образом ядра; можно указать «none»,
# если ядро устанавливать не нужно.
d-i base-installer/kernel/image string linux-image-generic
d-i passwd/make-user boolean true
# пароль суперпользователя, любой открытым текстом
d-i passwd/root-password password password
d-i passwd/root-password-again password password
# создать учётную запись обычного пользователя.
d-i passwd/user-fullname string user
d-i passwd/username string user
# пароль обычного пользователя, или открытым текстом
d-i passwd/user-password password user
d-i passwd/user-password-again password user
console-setup console-setup/fontface select Terminus
# Вы можете указать нужно ли устанавливать non-free и contrib ПО.
d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true
d-i apt-setup/services-select multi-select
d-i apt-setup/security_host string
d-i apt-setup/volatile_host string
# По умолчанию программа установки требует, чтобы репозитории
# аутентифицировались с помощью известного ключа gpg.
# Этот параметр выключает данную аутентификацию.
# Предупреждение: это небезопасно, рекомендуется не делать этого.
d-i debian-installer/allow_unauthenticated string true
# установка базовой системы + рабочий стол Fly
tasksel tasksel/first multiselect Base, Fly
# отдельные дополнительные пакеты для установки
d-i pkgsel/include string openssh-server
# специфичные настройки для Astra Linux
astra-license astra-license/license boolean true
krb5-config krb5-config/kerberos_servers string
libnss-ldapd libnss-ldapd/ldap-base string
libnss-ldapd libnss-ldapd/ldap-uris string
libnss-ldapd libnss-ldapd/nsswitch multiselect services
ald-client ald-client/make_config boolean false
ald-client ald-client/manual_configure note
# НЕ настраивать киоск
#astra-feat-setup astra-feat-setup/feat multiselect kiosk mode
tasksel tasksel/astra-feat-setup multiselect
d-i console-cyrillic/toggle select Caps Lock
# некоторые версии программы установки могут отсылать отчёт
# об установленных пакетах. По умолчанию данная возможность
# выключена, но отправка отчёта помогает проекту
# определить популярность программ и какие из них включать на CD.
popularity-contest popularity-contest/participate boolean false
# эту переменную можно безопасно устанавливать, она указывает, что grub
# должен устанавливаться в MBR,
# если на машине не найдено другой операционной системы.
d-i grub-installer/only_debian boolean true
# это заставляет grub-installer устанавливать в MBR, даже если на машине
# есть другая ОС, что менее безопасно, так как может привести к отказу
# загрузки этой другой ОС.
d-i grub-installer/with_other_os boolean true
# остановить систему после завершения установки, а
# не перегружаться в установленную систему.
d-i debian-installer/exit/halt boolean true
[/symple_toggle]
Так как мы используем ftp вам необходимо перекинуть репозиторий с пакетами (папки dists, pool) c cd в предварительно созданный каталог в корне ftp сервера и прописать этот путь в preseed файле(см. пример pressed файла). Инфраструктура для автоматизированной установки готова.
Некоторые выявленные проблемы
Большинство изменений сделаны в initrd, под спойлерами команды для разборки\сборки initrd.
[symple_toggle title=»Разбираем initrd.gz»]
~# gunzip initrd.gz
~# mkdir new_initrd
~# cd new_initrd
~# cpio -id < ../initrd
[/symple_toggle]
[symple_toggle title=»Собираем initrd.gz»]
~# cd new_initrd
~# find . | cpio —create —format=’newc’ > ../initrd
~# cd ..
~# sudo gzip initrd
[/symple_toggle]
Список изменений в оригинальном initrd:
- изменен usr/share/localechooser/languagelist поддержка русскому языку изменена с 2 на 1.Было ru;2;RU;ru_RU.UTF-8;;console-setup стало ru;1;RU;ru_RU.UTF-8;;console-setup. Без этого при выборе русской локали установка «затыкалась».
- добавлен модуль dca.ko в lib/modules/3.2.0-27-generic/kernel/drivers/dca/. Без него intel’овские гигабитные адаптеры не «поднимаются» в процессе инсталляции, следовательно качнуть пакеты не представляется возможным.
- добавлены модули dm-log.ko dm-mirror.ko dm-mod.ko dm-region-hash.ko в lib/modules/3.2.0-27-generic/kernel/drivers/md/. Без них не работали наши сервера, в которых стоит программный RAID (serial ata raid, soft raid).
- также мы добавили ключи от своего репа spkb-archive-keyring.gpg (он служит зеркалом при установке) в usr/share/keyrings, так как репозиторий нам пришлось модифицировать.
Причина использования собственного репозитория в качестве зеркала для установки в том, что имеющейся в оригинальном дистрибутиве пакет grub-installer_1.70astra.se4_amd64.udeb, содержит ошибку и валится при установке grub на soft&fake raid. Был заменен на grub-installer_1.78ubuntu8_amd64.udeb.
Как видно из данной статьи, количество операций по настройке, довольно велико, и, естественно, нам хотелось этот процесс как-то автоматизировать. Что из этого получилось и как задавать индивидуальные параметры установки по mac-адресам читайте в следующей части.