Разработки
May 18, 2022

Подготовка автоматически устанавливающегося образа Astra Linux

В статье описан самый простой вариант установки с использованием сетевого репозитория.

Например, если внутри preseed.cfg вы укажете репозиторий https://mirror.yandex.ru/astra/stable/orel/repository/, то установка будет производиться со скачиваением пакетов из общедоступного зеркала. Однако, лучше сделать зеркало репозитория где-то у себя - так быстрее и надежнее.

NOTE: все операции делаем из под sudo -s

Необходимо подготовить

  • образ дистрибутива
  • файлы preseed.cfg и finish.sh (запуск последнего указан в конце preseed.cfg)

Создаем папку isofiles

  • mkdir isofiles

Монтируем дистрибутив в папку distrib

  • mount astra.iso ./distrib

Копируем файлы из папку в isofiles

  • cp -rT ./distrib/* ./isofiles/

Копируем сектор загрузчика дистрибутива в файл

  • dd if=./astra.iso bs=1 count=432 of=isohdpfx.bin

Предполагаемое дерево файлов каталога, откуда вы создаете образ:

content_copy

distrib\
isofiles\
preseed.cfg
finish.sh
astra.iso
isohdpfx.bin

Меняем меню загрузки isofile/isolinux/isolinux.cfg на следующее содержимое:

default install
label install
        menu label ^Install
        menu default
        kernel /netinst/linux
        append initrd=/netinst/initrd.gz nomodeset quiet modprobe.blacklist=evbug file=/preseed.cfg interface=auto ramdisk_size=10800 root=/dev/rd/0 rw auto hostname=jodie-saxinger.mytbg.ru console-setup/ask_detect=false nomodeset auto=true priority=critical debian-installer/allow-unauthenticated=true debian-installer/locale=en_US console-keymaps-at/keymap=ru astra-license/license=true localechooser/translation/warn-light=true localechooser/translation/warn-severe=true domain=mytbg.ru locale=en_US  BOOT_DEBUG=2 log_host=192.168.30.127 log_port=514
default vesamenu.c32
prompt 0
timeout 5
ui gfxboot bootlogo

В примере выше указаны: адрес rsyslog-сервера 192.168.30.127, имя АРМ jodie-saxinger.mytbg.ru - при необходимости измените эти значения

Разбираем образ установщика, добавляем нужные файлы и собираем обратно. При работе эти команд особенно важно, чтобы все выполнялось в контексте пользователя root

content_copy

chmod -R -w isofiles
chmod +w -R isofiles/netinst/
gunzip isofiles/netinst/initrd.gz
chown root:root preseed.cfg
echo preseed.cfg | cpio -H newc -o -A -F isofiles/netinst/initrd
chown root:root finish.sh
chmod +x finish.sh
echo finish.sh | cpio -H newc -o -A -F isofiles/netinst/initrd
rm preseed.cfg
gzip isofiles/netinst/initrd
chmod -R -w isofiles

Собираем iso-образ

  • xorriso -as mkisofs -o test.iso -isohybrid-mbr isohdpfx.bin -c isolinux/boot.cat -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table ./isofiles
    В примере выше собирается файл test.iso

Пример файла preseed.cfg

# настройка языка и страны согласно локали.
d-i debian-installer/locale string ru_RU
d-i debian-installer/locale select ru_RU.UTF-8
d-i debian-installer/language string ru
d-i debian-installer/country string RU
d-i debian-installer/keymap string ru

# Выбор клавиатуры.
d-i console-tools/archs select at
d-i console-keymaps-at/keymap select ru
d-i console-setup/toggle string Alt+Shift
d-i console-setup/layoutcode string ru
d-i keyboard-configuration/toggle select Alt+Shift
d-i keyboard-configuration/layoutcode string ru
d-i keyboard-configuration/xkb-keymap select ru
d-i languagechooser/language-name-fb select Russian
d-i countrychooser/country-name select Russia

# Пример другой архитектуры клавиатуры
#d-i console-keymaps-usb/keymap select mac-usb-us

# netcfg выберет активный сетевой интерфейс, если такой имеется. Если
# есть более одного интерфейса, то при данной настройке список
# интерфейсов выводится не будет.
d-i netcfg/choose_interface select auto

# Чтобы использовать нужный интерфейс:
#d-i netcfg/choose_interface select eth1

# If you have a slow dhcp server and the installer times out waiting for
# it, this might be useful.
#d-i netcfg/dhcp_timeout string 60

# Если вы предпочитаете настраивать сеть вручную, раскомментируйте эту
# строку и статическую настройку сети ниже.
#d-i netcfg/disable_dhcp boolean true

# Если вы хотите чтобы файл ответов работал при наличии и без сервера
# dhcp, раскомментируйте эти строки и статическую настройку сети ниже.
#d-i netcfg/dhcp_failed note
#d-i netcfg/dhcp_options select Configure network manually

# Статическая настройка сети.
#d-i netcfg/get_nameservers string 192.168.1.1
#d-i netcfg/get_ipaddress string 192.168.1.42
#d-i netcfg/get_netmask string 255.255.255.0
#d-i netcfg/get_gateway string 192.168.1.1
#d-i netcfg/confirm_static boolean true

#non-free,contrib
d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true

# Имена хоста и домен, назначенные с помощью dhcp имеют приоритет над
# значениями, установленными здесь. Однако, установка значений всё ещё
# предотвращает показ вопросов, даже если значения получены от dhcp.
d-i netcfg/get_hostname string astra
d-i netcfg/get_hostname seen true
d-i netcfg/get_domain string cct.rbt

d-i apt-setup/services-select none
d-i apt-setup/security_host string

# Выключить показ надоедливого диалога с WEP ключом.
d-i netcfg/wireless_wep string

# Репозиторий для установки
# Если вы выберете ftp, то mirror/country string устанавливать не нужно.
d-i mirror/protocol string http
d-i mirror/country string manual
d-i mirror/http/hostname string 192.168.56.1
d-i mirror/http/directory string /repo/orel
d-i mirror/http/proxy string

# Задаёт, установлены или нет аппаратные часы по Гринвичу.
d-i clock-setup/utc boolean true

# Здесь вы можете указать любое допустимое значение для $TZ; смотрите
# допустимые значения в файле /usr/share/zoneinfo/.
d-i time/zone string Europe/Moscow

# Определяет, нужно ли использовать NTP для установки часов во время установки
#d-i clock-setup/ntp boolean true
# Используемый сервер NTP. Значение по умолчанию указывается здесь.
#d-i clock-setup/ntp-server 10.100.130.200

#Если система имеет свободное место, вы можете выбрать для разметки
# только его.
# Замечание: нужно указывать локализованные (переведённые) значения.
#d-i partman-auto/init_automatically_partition \
#      select Авто - использовать наибольшее свободное место

#Или же, вы можете задать размечаемый диск. Имя устройства
# должно задаваться в обычном не-devfs формате.
# Например, для использования первого жёсткого диска SCSI/SATA:
#d-i partman-auto/disk string /dev/sda
# Замечание: если вы хотите использовать любой доступный диск, не важно
# какое у него имя, закоммерируйте строку выше. Она работает только если
# в системе один жёсткий диск.
# Также, вы можете указать какой метод использовать.
# Доступные методы: "regular", "lvm" и "crypto"
d-i partman-auto/method string regular

# Если один из дисков, который нужно разметить с помощью автоматической
# разметки, содержит старую конфигурацию LVM, то пользователю выдаётся
# предупреждение. Ответ можно автоматизировать...
d-i partman-auto/purge_lvm_from_device boolean true
# И подтвердить запись lvm разделов.
d-i partman-lvm/confirm boolean true

# Вы можете выбрать любой из имеющихся наборов разметки.
# Замечание: он должен содержать локализованные (переведённые) значения.
# Расскомментируйте ниже нужный тип разметки
# Для режима legacy bios:
d-i partman-auto/choose_recipe select atomic

# Для режима UEFI:
# d-i	partman-auto/choose_recipe	select	/lib/partman/recipes-amd64-efi/30atomic

# Этот параметр заставляет partman выполнить разметку автоматически
# без подтверждения.
d-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i	partman-auto-crypto/erase_disks	boolean	true
d-i	partman-basicfilesystems/no_swap	boolean	true
d-i	partman-target/mount_failed	boolean	true
d-i	partman-partitioning/unknown_label	boolean	true
d-i	partman-auto/purge_lvm_from_device	string	true
d-i	partman-lvm/vgdelete_confirm	boolean	true
d-i	partman/confirm_write_new_label	string	true
d-i	partman-lvm/confirm	boolean	true
d-i partman/confirm_nooverwrite boolean true

# Устанавливаемый пакет (мета) с образом ядра; можно указать "none",
# если ядро устанавливать не нужно.
d-i base-installer/kernel/image string linux-image-generic

# Пропустить создание учётной записи суперпользователя (в обычной учётной
# записи пользователя можно использовать sudo).
#d-i passwd/root-login boolean false
# Или же пропустить создание обычной учётной записи пользователя.
d-i passwd/make-user boolean true

# Пароль суперпользователя, любой открытым текстом
d-i passwd/root-password password 12345678
d-i passwd/root-password-again password 12345678
# или в виде MD5 хеша.
#d-i passwd/root-password-crypted password [MD5 хеш]

# Создать учётную запись обычного пользователя.
d-i passwd/user-fullname string u
d-i passwd/username string u

# Пароль обычного пользователя, или открытым текстом
d-i passwd/user-password password 12345678
d-i passwd/user-password-again password 12345678

# или в виде MD5 хеша.
#d-i passwd/user-password-crypted password [MD5 хеш]
# Создать первую учётную запись с заданным UID вместо значения по
# умолчанию.
#d-i passwd/user-uid string 1010

# Учётная запись будет добавлена в несколько стандартных начальных групп.
# Чтобы это изменить -- отредактируйте и раскомментируйте строчку ниже.
#d-i passwd/user-default-groups string audio cdrom video

# Дополнительные репозитории доступны как local[0-9]
#d-i apt-setup/local0/repository string \
#       http://local.server/debian stable main
#d-i apt-setup/local0/comment string local server
# Активировать строки для deb-src
#d-i apt-setup/local0/source boolean true
# URL публичного ключа локального репозитория; вы должны
# предоставлять ключ, или apt будет жаловаться о невозможности
# аутентифицировать репозиторий и закомментирует строку,
# описывающую этот репозиторий в sources.list
#d-i apt-setup/local0/key string http://local.server/key

# По умолчанию программа установки требует, чтобы репозитории
# аутентифицировались с помощью известного ключа gpg.
# Этот параметр выключает данную аутентификацию.
# Предупреждение: это небезопасно, рекомендуется не делать этого.
d-i debian-installer/allow_unauthenticated string true

tasksel	tasksel/first	multiselect	Base packages, Fly desktop, Internet suite, Multimedia, Office suite
tasksel tasksel/astra-feat-setup multiselect

# Отдельные дополнительные пакеты для установки
d-i pkgsel/include string openssh-server

astra-additional-setup	astra-additional-setup/additional-settings	multiselect	
d-i	astra-additional-setup/additional-settings	multiselect	
astra-additional-setup	astra-additional-setup/automatic-network-disable	multiselect	
d-i	astra-additional-setup/automatic-network-disable	multiselect	
d-i desktop-tablet-mode-switch/tablet-mode multiselect

tripwire tripwire/use-localkey boolean false
tripwire tripwire/use-sitekey boolean false
tripwire tripwire/installed note ok
portsentry portsentry/warn_no_block note ok
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 false
astra-feat-setup astra-feat-setup/feat multiselect kiosk mode false
astra-feat-setup astra-feat-setup/feat multiselect Служба ALD false
d-i console-cyrillic/switch select "Клавиша Menu"
d-i console-cyrillic/toggle select Control+Shift
d-i samba-common/dhcp boolean false
d-i samba-common/workgroup string testgroup1

# Некоторые версии программы установки могут отсылать отчёт
# об установленных пакетах. По умолчанию данная возможность
# выключена, но отправка отчёта помогает проекту
# определить популярность программ и какие из них включать на 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

#  В ОС ALCE Орел необходимо указывать на какой диск ставить загрузчик
grub-installer  grub-installer/choose_bootdev   select  /dev/sda
d-i grub-pc/install_devices multiselect /dev/sda

# По умолчанию grub ставится на первый диск
# Или же, если вы хотите установить загрузчик не в mbr,
# то раскомментируйте и отредактируйте следующие строки:
#d-i grub-installer/only_debian boolean false
#d-i grub-installer/with_other_os boolean false
#d-i grub-installer/bootdev  string (hd0,0)
#d-i grub-pc/install_devices multiselect /dev/sda
# Для установки grub на несколько дисков:
#d-i grub-installer/bootdev  string (hd0,0) (hd1,0) (hd2,0)

# Необязательный пароль на grub, или в виде открытого текста
#d-i grub-installer/password password r00tme
#d-i grub-installer/password-again password r00tme
#grub-installer grub-installer/password-mismatch error
# или в шифрованном виде с помощью хеша MD5, смотрите grub-md5-crypt(8).
#d-i grub-installer/password-crypted password [MD5 хеш]

# Не показывать последнее сообщение о том, что установка завершена.
d-i finish-install/reboot_in_progress note
d-i finish-install/exit/poweroff boolean true

# Эта настройка заставляет программу установки не выдвигать лоток CD при
# перезагрузке, что иногда полезно.
#d-i cdrom-detect/eject boolean false

# Остановить систему после завершения установки, а
# не перегружаться в установленную систему.
#d-i debian-installer/exit/halt boolean true
# Эта настройка позволяет выключить питание машины, а не просто остановить её.
#d-i debian-installer/exit/poweroff boolean true

# В зависимости от выбранного для установки ПО, или если что-то идёт
# неправильно во время процесса установки, существует вероятность появления других
# вопросов. Естественно, их тоже можно автоматизировать. Чтобы получить список
# всех возможных вопросов, которые могут быть заданы во время установки, выполните
# установку, а затем запустите следующие команды:
#   debconf-get-selections --installer > file
#   debconf-get-selections >> file

#### Дополнительные опции
### Запуск различных команд в процессе инсталляции
# Автоматизация d-i по сути небезопасна. Программа установки не выполняет
# проверок на переполнения буфера или другого использования значений
# такого направления из файла ответов. Используйте файлы ответов только из
# надёжных источников! Для использования дома, и потому что это обычно
# полезно, здесь показано как запускать свои команды оболочки внутри
# программы установки автоматически.

# Эта команда будет выполнена самой первой, как только
# будет прочитан файл ответа 
#d-i preseed/early_command string anna-install some-udeb
# Эта команда выполняется перед окончанием установки, пока ещё
# есть рабочий каталог /target. Вы можете выполнить chroot в /target
# и непосредственно использовать его, или же воспользоваться командами
# apt-install и in-target для облегчения задачи установки пакетов и
# запуска команд в целевой системе.
d-i preseed/late_command string cp /finish.sh /target/tmp/finish.sh && in-target chmod +x /tmp/finish.sh && in-target /tmp/finish.sh

Пример файла finish.sh

#!/bin/bash
sudo systemctl enable ssh