Содержание

Skip to end of metadata
Go to start of metadata

Как это работает

Предполагается, что:

  • установка производится на компьютер клиент, подключенный к локальной сети;

  • в этой сети имеются:
    • настроенный DHCP-сервер, выдающий клиентским компьютерам не только сетевые IP-адреса, но и другие сетевые параметры (в частности, IP-адрес TFTP-сервера, с которого будет загружаться установочный образ);
    • настроенный TFTP сервер, с которого можно загрузить установочные данные и файлы для первичной загрузки:
      • tftp://192.168.56.1/smolensk
      • tftp://192.168.56.1/orel
    • настроенные разделяемые сетевые ресурсы, из которых можно загружать пакеты. Для загрузки могут использоваться протоколы FTP или HTTP.

      Это не совсем обычные репозитории пакетов: в обычных репозиториях пакетов нет загрузочных модулей ядра.
      Чтобы необходимые модули были доступны при сетевой установке проще всего использовать в качестве разделяемых сетевых ресурсов примонтированные установочные диски (образы дисков).

      Для примера используются HTTP-репозитории.

      • http://192.168.56.1/repo/smolensk
      • http://192.168.56.1/repo/orel

Обратите внимание: используются РАЗНЫЕ источники данных, работающие по РАЗНЫМ протоколам, расположенные в РАЗНЫХ местах файловой системы, и, возможно, даже на разных серверах:

  • в первом случае это источники установочных файлов и и файлов для первичной загрузки, работающий по протоколу TFTP. Размещаются в каталоге /srv/tftp/;
  • во втором случае (репозиторий пакетов), работающий по протоколу HTTP. Размещается, например, в каталоге /srv/repo или  в кателоге /var/www/html/repo. Подробнее про создание и настройку репозитория HTTP см. Создание локального репозитория.


Для упрощения изложения далее предполагается, что сетевые службы DHCP, TFTP, HTTP располагаются на одном и том же компьютере. При необходимости эти службы могут быть установлены на разных компьютерах

Как это работает:

  • клиент подключается к сети и запрашивает IP-адрес, передавая в запросе информацию о собственной конфигурации;

  • DHCP-сервер назначает клиенту IP-адрес и вместе с назначенным адресом передаёт клиенту дополнительные сетевые параметры, в том числа IP-адрес TFTP-сервера с необходимыми файлами сценариев установки;

  • клиент подключается к TFTP-серверу и загружает файлы со сценариями установки;

  • клиент выполняет установку в соответствии с полученными сценариями.


Установка выполняется с заранее заданными фиксированными именами (имя хоста, имя пользователя, пароль пользователя).
Рекомендуется после установки сменить имена и пароли.


Данная статья применима к:

  • ОС СН Смоленск 1.6
  • ОС ОН Орёл 2.12
PXE (англ.Preboot eXecution Environment) — среда для загрузки компьютеров с помощью сетевой карты без использования жёстких дисков, компакт-дисков и других устройств, применяемых при загрузке операционной системы.


Подробная информация об автоматической установке с помощью списка ответов:
https://www.debian.org/releases/stretch/s390x/apbs01.html.ru

Описанная  в данной статье методика установки на виртуальных машинах может приводить к черному экрану после перезагрузки. Чтобы избежать этого рекомендуется использовать виртуальные графические адаптеры:

  • VMSVGA для Oracle VirtualBox;
  • cirrus или qlx для Virt Manager

Установка и настройка DHCP/TFTP-сервера

Установка пакетов

Установим необходимые пакеты:

sudo apt install isc-dhcp-server tftpd-hpa pxelinux syslinux

Где:

  • Пакеты для DHCP-сервера:
    • isc-dhcp-server - DНCP-севрер;
  • Пакеты для TFTP-сервера:
    • tftpd-hpa - TFTP-server;
    • pxelinux - загрузчик для сетевой загрузки PXE;
    • syslinux - загрузчик для сетевой загрузки DOS FAT / NTFS;

Настройка службы TFTP

Служба tftpd после установки запускается автоматически и сразу предоставляет доступ к каталогу /srv/tftp/, в котром далее и будут размещены файлы для сетевой загрузки.

Настройка службы DHCP

Пропишем наш сетевой интерфейс в /etc/default/isc-dhcp-server:

INTERFACESv4="eth0"

Настроим /etc/dhcp/dhcpd.conf. В данной конфигурации dhcp сервер будет определять тип клиента (UEFI или Legacy BIOS) и отдавать ему нужный загрузчик.

authoritative;
option domain-name "my.dom";
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
option domain-name-servers 8.8.8.8;
allow booting;
allow bootp;
option fqdn.no-client-update    on;  
option fqdn.rcode2            255;
option pxegrub code 150 = text ;

next-server 192.168.56.1; 
option architecture code 93 = unsigned integer 16 ;
if option architecture = 00:07 {
  filename "bootx64.efi"; 
} elsif option architecture = 00:09 {
  filename "bootx64.efi";
} else {
  filename "pxelinux.0"; 
}

subnet 192.168.56.0 netmask 255.255.255.0 {
    range 192.168.56.20 192.168.56.250;
    option domain-name "example.com";
    option broadcast-address 192.168.56.255;
    option routers 192.168.56.1;
    option subnet-mask 255.255.255.0;
}  


После внесения изменений в настройки перезапустим сервис:

sudo systemctl restart isc-dhcp-server

Для загрузки по сети нужны следующие файлы:

  • pxelinux.0;
  • библиотеки syslinux;
  • ядро ОС;
  • специальный initrd.

Эти файлы находятся на установочном диске в каталоге netinst. Скопируем ядро и initrd  в /srv/tftp/.

Для Astra Linux SE Смоленск (в примере ниже предполагается, что основной установочный диск находится в приводе компакт дисков):

sudo mkdir -p       /srv/repo/smolensk/
sudo mount /dev/sr0 /srv/repo/smolensk/
sudo mkdir -p                                /srv/tftp/smolensk/
sudo cp /srv/repo/smolensk/netinst/linux     /srv/tftp/smolensk/
sudo cp /srv/repo/smolensk/netinst/initrd.gz /srv/tftp/smolensk/

Для Astra Linux CE Орел:

Если образ установочного диска находится в файле orel.iso:

sudo mkdir -p       /srv/repo/orel/
sudo mount orel.iso /srv/repo/orel
sudo mkdir -p                            /srv/tftp/orel/
sudo cp /srv/repo/orel/netinst/linux     /srv/tftp/orel/
sudo cp /srv/repo/orel/netinst/initrd.gz /srv/tftp/orel/


Скопируем в каталог /srv/tftp файл pxelinux.0 и необходимые библиотеки syslinux:

sudo cp /usr/lib/PXELINUX/pxelinux.0 /srv/tftp/
sudo cp /usr/lib/syslinux/modules/bios/{chain.c32,ldlinux.c32,libcom32.c32,libutil.c32,menu.c32} /srv/tftp/

Создадим каталог /srv/tftp/pxelinux.cfg/:

sudo mkdir -p /srv/tftp/pxelinux.cfg

И создадим в этом каталоге файл /srv/tftp/pxelinux.cfg/default со следующим содержимым:

ui menu.c32
PROMPT 0
 
MENU TITLE PXE Boot menu
TIMEOUT 50
DEFAULT local
  
LABEL local
    MENU LABEL Boot from local drive
    kernel chain.c32
    append hd0
# Astra Linux SE Smolensk
LABEL netinstall
    MENU LABEL Start Astra Linux Smolensk net install
    kernel smolensk/linux
    append initrd=smolensk/initrd.gz modprobe.blacklist=evbug auto=true priority=critical debian-installer/locale=en_US console-keymaps-at/keymap=ru hostname=astra16 domain=my.dom astra-license/license=true url=tftp://192.168.56.1/smolensk/preseed.cfg interface=auto netcfg/dhcp_timeout=60
# Astra Linux CE Orel
LABEL netinstall
    MENU LABEL Start Astra Linux Orel net install
    kernel orel/linux
    append initrd=orel/initrd.gz modprobe.blacklist=evbug auto=true priority=critical debian-installer/locale=en_US console-keymaps-at/keymap=ru hostname=orel212 domain=my.dom astra-license/license=true url=tftp://192.168.56.1/orel/preseed.cfg interface=auto netcfg/dhcp_timeout=60

Обратите внимание на следующие параметры:

  • hostname - имя хоста, которое будет использована при автоматической установке ОС;
  • domain - имя домена ;
  • url - адрес, по которому должны быть доступны конфигурационные файлы. В данном примере используется протокол TFTP, однако можно использовать FTP или HTTP (файлы при этом должны быть размещены в соответствующих локациях).


По умолчанию стоит загрузка с локального жесткого диска, что бы избежать повторной автоматической установки, после завершения первой, или случайной установки на компьютер с уже установленной ОС, подключенный к этой же сети.

Для загрузки в режиме UEFI служит специальный EFI образ загрузчика grub: скачать

Распакуйте архив netinst.tar.gz в /srv/tftp

sudo tar xvf netinst.tar.gz -C /srv/tftp

Рассмотрим конфигурационный файл /srv/tftp/debian-installer/amd64/grub/grub.cfg

if loadfont $prefix/font.pf2 ; then
  set gfxmode=800x600
  set gfxpayload=keep
  insmod efi_gop
  insmod efi_uga
  insmod video_bochs
  insmod video_cirrus
  insmod gfxterm
  insmod png
  terminal_output gfxterm
fi

if background_image /isolinux/splash.png; then
  set color_normal=light-gray/black
  set color_highlight=white/black
else
  set menu_color_normal=cyan/blue
  set menu_color_highlight=white/blue
fi

menuentry "Boot default EFI bootloader" {
 set background_color=black
 regexp -s root '\((.+)\)' "$cmdpath"
 chainloader /EFI/Boot/Bootx64.efi
}

# Установка Astra Linux SE Смоленск
menuentry 'Install Astra Linux SE Smolensk' {
    set background_color=black
    linux    /smolensk/linux modprobe.blacklist=evbug debian-installer/allow_unauthenticated=true auto=true priority=critical debian-installer/locale=en_US console-keymaps-at/keymap=ru hostname=test2 domain=my.dom astra-license/license=true url=tftp://192.168.56.1/smolensk/preseed.cfg interface=auto netcfg/dhcp_timeout=60
    initrd   /smolensk/initrd.gz
}
# Установка Astra Linux CE Орел
menuentry 'Install Astra Linux CE Orel' {
    set background_color=black
    linux    /orel/linux modprobe.blacklist=evbug debian-installer/allow_unauthenticated=true auto=true priority=critical debian-installer/locale=en_US console-keymaps-at/keymap=ru hostname=test2 domain=my.dom astra-license/license=true url=tftp://192.168.56.1/orel/preseed.cfg interface=auto netcfg/dhcp_timeout=60
    initrd   /orel/initrd.gz
}

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

По умолчанию стоит загрузка образа EFI из EFI/Boot/Bootx64.efi (на некоторых системах может быть иначе), что бы избежать повторной автоматической установки, после завершения первой, или случайной установки на компьютер с уже установленной ОС, подключенный к этой же сети.

Перезапускаем сервисы:

sudo systemctl restart isc-dhcp-server
sudo systemctl restart tftpd-hpa

Автоматическая установка с помощью файла preseed.cfg

Файл preseed.cfg для Astra Linux SE Смоленск 1.6: preseed_smol.cfg

Файл preseed.cfg для Astra Linux CE Орел 2.12: preseed_orel.cfg


Файл после скачивания скопировать каталог установочных файлов соответствующего дистрибутива под именем preseed.cfg:

sudo cp preseed_smol.cfg /srv/tftp/smolensk/preseed.cfg

или

sudo cp preseed_orel.cfg /srv/tftp/orel/preseed.cfg

Разберем важные параметры файла preseed:

Указываем путь к HTTP-репозиторию с пакетами для установки:

# Репозиторий для установки
# Если вы выберете 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/smolensk
# или, вариант для ОС ОН Орёл
#d-i mirror/http/directory string /repo/orel
d-i mirror/http/proxy string

Или вариант для FTP-репозиториев:

d-i mirror/protocol string ftp
d-i mirror/ftp/hostname string 192.168.56.1
d-i mirror/ftp/directory string /repo/smolensk
# или, вариант для ОС ОН Орёл
#d-i mirror/ftp/directory string /repo/orel
d-i mirror/ftp/proxy string


Устанавливаем часовой пояс:

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

В следующем блоке подготавливаются разделы на жестком диске (по умолчанию стоит автоматическое создание с использованием всего диска, с одним корневым разделом и своп разделом)

#Если система имеет свободное место, вы можете выбрать для разметки
# только его.
# Замечание: нужно указывать локализованные (переведённые) значения.
#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


Создание пользователя user и задание пароля:

Не рекомендуется использовать пароли в виде открытого текста.
В примере ниже использован хеш пароля 12345678

Получить хеш пароля можно командой:

openssl passwd -1

Эта команда запросит ввод пароля и выведет на экран кеш этого пароля.
Не указывайте использованный пароль в незашифрованном виде!

# Создать учётную запись обычного пользователя.
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 $1$EPkHS/dI$0tl23aI/oMBBNdBVZP0o.1

Устанавливаемые компоненты:

tasksel tasksel/first multiselect Base, Fly
# Доступные компоненты и входящие в них пакеты можно посмотреть в /usr/share/tasksel/debian-tasks.desc

Дополнительно устанавливаемые пакеты можно указать в: 

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

Установка загрузчика. По умолчанию, загрузчик ставится на первый диск в MBR. Но в Astra Linux CE Орел необходимо указать вручную, на какой диск ставить загрузчик:

#  В ОС 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)

Пароль для загрузчика:

Не рекомендуется использовать пароли в виде открытого текста.
В примере ниже использован хеш пароля 12345678

Получить хеш пароля можно командой:

openssl passwd -1

Эта команда запросит ввод пароля и выведет на экран кеш этого пароля.
Не указывайте использованный пароль в незашифрованном виде!


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

Самый последний параметр позволяет выполнить команды перед завершением установки и перезагрузки компьютера, например включить ssh сервер:

# Эта команда выполняется перед окончанием установки, пока ещё
# есть рабочий каталог /target. Вы можете выполнить chroot в /target
# и непосредственно использовать его, или же воспользоваться командами
# apt-install и in-target для облегчения задачи установки пакетов и
# запуска команд в целевой системе.
d-i preseed/late_command string in-target systemctl enable ssh.service


Теперь, если подключить машину к этой сети и настроить в BIOS/UEFI загрузку по сети, автоматически запустится установка Astra Linux . Так же можно, установить систему, вручную ответив на все вопросы и после установки выполнить 

debconf-get-selections --installer > preseed.new
debconf-get-selections >> preseed.new

Это создаст файл preseed.new с готовыми ответами, который можно использовать при следующих установках.

Автоматическая установка обновлений после установки системы

В ОС ОН Орёл можно выполнить обновление указав в late-command:

d-i preseed/late_command string in-target apt update; in-target apt dist-upgrade;

В ОС СН Смоленск  для автоматической установки обновлений нужно создать файл update.service в корне ftp или http сервера с таким содержимым:

[Unit]
Description=Update system
After=rc-local.service network-online.target
Before=getty.target
Before=systemd-user-sessions.service

[Service]
StandardOutput=tty
Type=oneshot
ExecStart=/usr/local/bin/update.sh

[Install]
WantedBy=multi-user.target

Там же создать файл update.sh в котором должны быть указаны ваши репозитории с обновлениями. Репозитории могут размещаться где угодно, важно только правильно указать путь к ним:

#!/bin/bash

clear
# вносим в /etc/apt/sources.list используемые репозитории (для примера - репозиторий server, работающий по протоколу ftp):
echo "deb ftp://server/repo/smolensk/mounted-iso-main smolensk main contrib non-free" > /etc/apt/sources.list
echo "deb ftp://server/repo/smolensk/mounted-iso-devel smolensk main contrib non-free" >> /etc/apt/sources.list
echo "deb ftp://server/repo/smolensk/repository-update smolensk main contrib non-free" >> /etc/apt/sources.list
echo "deb ftp://server/repo/smolensk/repository-update-dev smolensk main contrib non-free"  >> /etc/apt/sources.list

echo "Updating system, please wait..."
echo "Do not turn off your computer!"
apt-get update &> /dev/null
apt-get -y dist-upgrade &> /dev/null
apt-get -y install chromium &> /dev/null
rm -f /etc/systemd/system/multi-user.target.wants/update.service
systemctl daemon-reload
rm -f /usr/local/bin/update.sh
reboot

а в preseed.conf в конец добавляем команды для загрузки и запуска созданных файлов:

d-i preseed/late_command string in-target systemctl enable ssh ; \
                                in-target wget -O /usr/local/bin/update.sh ftp://10.0.2.20/smolensk/update.sh; \
                                in-target chmod +x /usr/local/bin/update.sh; \
                                in-target wget -O /lib/systemd/system/update.service ftp://10.0.2.20/smolensk/update.service; \
                                in-target systemctl enable update.service;

Если всё сделано корректно - то после завершения установки ОС, после первой перезагрузки выполнится сценарий обновления, самоудалится и перезагрузит машину.

  • No labels