Об автоматической установке дистрибутива «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-сервер.
[symple_toggle title=»Настройка 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. Проверить через браузер, что указанные каталоги доступны.

[/symple_toggle]

В нашем случае необходимо, чтобы сервером автоматической установки ОС была Astra Linux Special Edition, тогда для отдачи файлов будем использовать ftp-сервер. Берем vsftpd устанавливаем и настраиваем на доступ без авторизации.

[symple_toggle title=»Настройка 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_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
  5. ~# service vsftpd restart

[/symple_toggle]

Сервер tftp может быть отдельным, например tftpd-hpa, или, как уже упоминалось, можно использовать tftp сервер встроенный в dnsmasq  — берем второй вариант.  Делаем каталог tftp в /srv/ftp.

[symple_toggle title=»Настройка 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

[/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-адресам читайте в следующей части.

 

0 комментариев

Что у нас
нового

Блог

Astra Linux Special Edition 1.6.11

29 августа 2022

Вышло оперативное обновление 2022-0829 (№ 11) для Astra Linux Special Edition 1.6.

Astra Linux Special Edition 1.7.2

19 августа 2022

Вышло оперативное обновление Astra Linux Special Edition № 2022-0819.

Наши
контакты

Связаться с нами

Телефон: 8 (812) 981-68-09
Электронная почта: team@lab50.net





    Заполняя данную форму, вы принимаете условия Соглашения об использовании сайта, и соглашаетесь
    с Правилами обработки и использования персональных данных