Разработки
May 18, 2022
Подготовка автоматически устанавливающегося образа Astra Linux
В статье описан самый простой вариант установки с использованием сетевого репозитория.
Например, если внутри preseed.cfg вы укажете репозиторий https://mirror.yandex.ru/astra/stable/orel/repository/, то установка будет производиться со скачиваением пакетов из общедоступного зеркала. Однако, лучше сделать зеркало репозитория где-то у себя - так быстрее и надежнее.
NOTE: все операции делаем из под sudo -s
Необходимо подготовить
Создаем папку isofiles
Монтируем дистрибутив в папку distrib
Копируем файлы из папку в isofiles
Копируем сектор загрузчика дистрибутива в файл
Предполагаемое дерево файлов каталога, откуда вы создаете образ:
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
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