Автоматическая установка «Astra Linux Special Edition» (часть 1)

Об автоматической установке дистрибутива «Astra Linux Special Edition»

См. обновление.

Автоматическая преднастроенная установка на основе так называемых preseed файлов (ответов на вопросы инсталлятора) не является чем-то новым, информации в сети полно, например тут. Данная технология очень удобна и в комбинации с PXE (подробнее тут) позволяет быстро и без лишних вопросов установить ОС на целевой компьютер или сервер. Наша команда при работе над проектом программного комплекса кластера высокой готовности (что такое кластерные технологии в целом можно почитать здесь) на базе отечественной защищенной ОС Astra Linux Special Edition версии 1.3 столкнулась с необходимости установки ОС в идентичной конфигурации на несколько серверов, а поскольку в процессе тестирования нашего продукта на железе, возникала необходимость тестировать на свежеустановленной ОС, вопрос оптимизации временных затрат на данную операцию вышел на первый план. При установке программного комплекса у заказчика автоматизация установки тоже дело полезное и, как выяснилось позже, необходимое.

Кратко процедура установки выглядит так:

  1. В BIOS целевого компьютера ставим «Загрузка по сети» (обычно Boot to Network -> Enable и в Boot Device Priority -> Ethernet на первом месте, уточняйте в документации).
  2. На компьютере который у нас будет выступать в роли сервера установки, заряжаем dhcp, tftp и http (ftp) (подробности ниже).
  3. Включаем целевой компьютер, тот получает IP, качает загрузочный образ по tftp и запускает инсталляцию.
  4. и как говорится: Поехали!

Автоматическая установка «Astra Linux Special Edition»

Из документации на ОС нами было определено, что такая возможность присутствует, что в принципе ожидаемо для достаточно свежего Дебьян-подобного дистрибутива и разработчики приводят инструкцию как это сделать… Но «гладко было на бумаге». В процессе первоначального знакомства столкнулись с рядом проблем. Но обо всем по порядку. Для реализации задачи нами был выбран dnsmasq в качестве dhcp и tftp сервера и образ netinst с диска Астры. Первое с чем надо определится как будем отдавать репозиторий с пакетами. Как правило, используют http и тут первая особенность, поскольку это защищенная и сертифицированная ОС, то имеющийся сервер Apache — тоже защищен, т. е. отсутствует возможность доступа без авторизации (только pam или kerberos). Следовательно, если вы будете использовать другую ОС, в качестве сервера установки, то можно настроить любой http-сервер.

Настройка http-сервера apache для ubuntu'образных

  1. ~# aptitude install apache2
  2. правим /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»
  3. ~# service apache2 restart
  4. Проверить через браузер, что указанные каталоги доступны.
В нашем случае необходимо, чтобы сервером автоматической установки ОС была Astra Linux Special Edition, тогда для отдачи файлов будем использовать ftp-сервер. Берем vsftpd устанавливаем и настраиваем на доступ без авторизации.

Настройка vsftpd

  1. ~# aptitude install vsftpd
  2. ~# mkdir -p /srv/ftp && chmod -R 755 /srv/ftp
  3. ~# usermod -d /srv/ftp ftp
  4. правим файл /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_port20=YES
    chroot_local_user=YES
    secure_chroot_dir=/var/run/vsftpd/empty
    pam_service_name=ftp
    rsa_cert_file=/etc/ssl/private/vsftpd.pem
  5. ~# service vsftpd restart
Сервер tftp может быть отдельным, например tftpd-hpa, или, как уже упоминалось, можно использовать tftp сервер встроенный в dnsmasq - берем второй вариант. Делаем каталог tftp в /srv/ftp.

Настройка dnsmasq как dhcp и tftp сервера

  1. ~# aptitude install dnsmasq
  2. правим файл /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
  3. ~# service dnsmasq restart

Организация каталога для tftp-сервера

Копируем в /srv/ftp/tftp из netinst файлы linux (ядро), pxelinux.0, initrd. gz (временная файловая система, используемая ядром при начальной загрузке). Далее, в /srv/ftp/tftp создаем каталог pxelinux. cfg и там делаем файл с именем default (его будет получает целевой компьютер). Данный файл содержит параметры загрузки ядра. В параметре url и указывается файл с ответами на вопросы установщика.

Пример файла 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
Создаем файл 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

Пример файла 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

Так как мы используем ftp вам необходимо перекинуть репозиторий с пакетами (папки dists, pool) c cd в предварительно созданный каталог в корне ftp сервера и прописать этот путь в preseed файле (см. пример pressed файла). Инфраструктура для автоматизированной установки готова.

Некоторые выявленные проблемы

Большинство изменений сделаны в initrd, под спойлерами команды для разборки\сборки initrd.

Разбираем initrd.gz

~# gunzip initrd. gz
~# mkdir new_initrd
~# cd new_initrd
~# cpio -id < ./initrd

Собираем initrd.gz

~# cd new_initrd
~# find. | cpio --create --format='newc' > ./initrd
~# cd.
~# sudo gzip initrd
Список изменений в оригинальном 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-installer1.70astra.se4_amd64.udeb, содержит ошибку и валится при установке grub на soft&fake raid. Был заменен на grub-installer1.78ubuntu8_amd64.udeb.

Как видно из данной статьи, количество операций по настройке, довольно велико, и, естественно, нам хотелось этот процесс как-то автоматизировать. Что из этого получилось и как задавать индивидуальные параметры установки по mac-адресам читайте в следующей части.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *