Установка и настройка DHCP/TFTP-сервера
Установка пакетов
Установим необходимые пакеты:
Command |
---|
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;
} |
После внесения изменений в настройки перезапустим сервис:
Command |
---|
sudo systemctl restart isc-dhcp-server |
Для загрузки по сети нужны следующие файлы:
- pxelinux.0;
- библиотеки syslinux;
- ядро ОС;
- специальный initrd.
Эти файлы находятся на установочном диске в каталоге netinst. Скопируем ядро и initrd в /srv/tftp/.
Для Astra Linux Special Edition (в примере ниже предполагается, что основной установочный диск находится в приводе компакт дисков):
Command |
---|
|
Для Astra Linux Common Edition:
Если образ установочного диска находится в файле orel.iso:
Command |
---|
|
Скопируем в каталог /srv/tftp файл pxelinux.0 и необходимые библиотеки syslinux:
Command |
---|
|
Создадим каталог /srv/tftp/pxelinux.cfg/:
Command |
---|
|
И создадим в этом каталоге файл /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 |
Настройка DHCP/TFTP-сервера
Установим необходимые пакеты:
Command |
---|
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;
Настройка службы 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;
} |
Для загрузки по сети нужны следующие файлы:
- pxelinux.0;
- библиотеки syslinux;
- ядро ОС;
- специальный initrd.
Эти файлы находятся на установочном диске в каталоге netinst. Скопируем ядро и initrd в /srv/tftp/.
Для Astra Linux SE Смоленск (в примере ниже предполагается, что основной установочный диск находится в приводе компакт дисков):
Command |
---|
sudo mkdir /srv/repo/smolensk/main |
Для Astra Linux CE Орел (предполагается, что образ установочного диска нходтся в файле orel.iso):
Command |
---|
sudo mkdir /srv/repo/orel |
Command |
---|
sudo cp /usr/lib/PXELINUX/pxelinux.0 /srv/tftp/ |
Создадим каталог:
Command |
---|
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=http://192.168.56.1/repo/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=http://192.168.56.1/repo/orel/preseed.cfg interface=auto netcfg/dhcp_timeout=60 |
По умолчанию стоит загрузка с локального жесткого диска, что бы избежать повторной автоматической установки, после завершения первой, или случайной установки на компьютер с уже установленной ОС, подключенный к этой же сети.
Для загрузки в режиме UEFI служит специальный EFI образ загрузчика grub: скачать
Распакуйте архив netinst.tar.gz в /srv/tftp
Command |
---|
sudo tar xvf netinst.tar.gz -C /srv/tftp |
Рассмотрим конфигурационный файл /srv/tftp/debian-installer/amd64/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=test2astra16 domain=my.dom astra-license/license=true url=ftptftp://192.168.56.1/repo/smolensk/preseed.cfg interface=auto netcfg/dhcp_timeout=60 # Astra Linux CE initrd /smolensk/initrd.gz } # Установка Astra Linux CE Орел menuentry 'InstallOrel LABEL netinstall MENU LABEL Start Astra Linux CEOrel Orel'net {install set background_color=blackkernel orel/linux linux /append initrd=orel/linuxinitrd.gz modprobe.blacklist=evbug debian-installer/allow_unauthenticated=true auto=auto=true priority=critical debian-installer/locale=en_US console-keymaps-at/keymap=ru hostname=test2orel212 domain=my.dom astra-license/license=true url=ftptftp://192.168.56.1/orel/preseed.cfg interface=auto netcfg/dhcp_timeout=60 initrd /orel/initrd.gz } |
Обратите внимание на следующие параметры:
- hostname - имя хоста, которое будет использована при автоматической установке ОС;
- domain - имя домена ;
- url - адрес, по которому должны быть доступны конфигурационные файлы. В данном примере используется протокол TFTP, однако можно использовать FTP или HTTP (файлы при этом должны быть размещены в соответствующих локациях).
По умолчанию загрузка выполняется с локального жесткого диска. Это сделано для предотвращения повторной автоматической установки после завершения первой установкиПо умолчанию стоит загрузка образа EFI из EFI/Boot/Bootx64.efi (на некоторых системах может быть иначе), что бы избежать повторной автоматической установки, после завершения первой, или случайной установки на компьютер с уже установленной ОС, подключенный к этой же сети.
Перезапускаем сервисы:
Command |
---|
sudo systemctl restart isc-dhcp-server |
Автоматическая установка с помощью файла preseed.cfg
Файл preseed.cfg для Astra Linux SE Смоленск 1.6: preseed_smol.cfg
Файл preseed.cfg для Astra Linux CE Орел 2.12: preseed_orel.cfg
Файл preseed.cfg скопировать в /srv/repo/smolensk или /srv/repo/orel
Разберем важные параметры файла preseed:
Указываем путь к репозиторию с установочными файлами. Если используется протокол ftp меняем http на ftp и раскомментируем строку d-i mirror/protocol string ftp.
Блок кода |
---|
# Если вы выберете ftp, то mirror/country string устанавливать не нужно.
#d-i mirror/protocol string ftp
d-i mirror/country string manual
d-i mirror/http/hostname string 192.168.56.1
d-i mirror/http/directory string /repo/smolensk/main
d-i mirror/http/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 и задание пароля:
Блок кода |
---|
# Создать учётную запись обычного пользователя.
d-i passwd/user-fullname string user
d-i passwd/username string user
# Пароль обычного пользователя, или открытым текстом
d-i passwd/user-password password 12345678
d-i passwd/user-password-again password 12345678 |
Устанавливаемые компоненты:
Блок кода |
---|
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)
|
Пароль для загрузчика:
Блок кода |
---|
# Необязательный пароль на grub, или в виде открытого текста
d-i grub-installer/password password 12345678
d-i grub-installer/password-again password 12345678
|
Блок кода |
---|
# Эта команда выполняется перед окончанием установки, пока ещё
# есть рабочий каталог /target. Вы можете выполнить chroot в /target
# и непосредственно использовать его, или же воспользоваться командами
# apt-install и in-target для облегчения задачи установки пакетов и
# запуска команд в целевой системе.
d-i preseed/late_command string in-target systemctl enable ssh.service |
Теперь, если подключить машину к этой сети и настроить в BIOS/UEFI загрузку по сети, автоматически запустится установка Astra Linux . Так же можно, установить систему, вручную ответив на все вопросы и после установки выполнить
Command |
---|
debconf-get-selections --installer > 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 |
Там же создать файл /usr/local/bin/update.sh c таким содержимым:
Блок кода |
---|
#!/bin/bash
clear
# тут добавляем в /etc/apt/sources.list наши репозитории
echo "deb ftp://repo/smolensk/mounted-iso-main smolensk main contrib non-free" > /etc/apt/sources.list
echo "deb ftp://repo/smolensk/mounted-iso-devel smolensk main contrib non-free" >> /etc/apt/sources.list
echo "deb ftp://repo/smolensk/repository-update smolensk main contrib non-free" >> /etc/apt/sources.list
echo "deb ftp://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 wget -O /usr/local/bin/update.sh ftp://192.168.56.1/update.sh; \
in-target chmod +x /usr/local/bin/update.sh; \
in-target wget -O /lib/systemd/system/update.service ftp://192.168.56.1/update.service; \
in-target systemctl enable update.service; |
Для загрузки в режиме UEFI служит специальный EFI образ загрузчика grub: скачать
Распакуйте архив netinst.tar.gz в /srv/tftp
Command |
---|
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' {
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' {
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 (на некоторых системах может быть иначе), что бы избежать повторной автоматической установки, после завершения первой, или случайной установки на компьютер с уже установленной ОС, подключенный к этой же сети.
Перезапускаем сервисы:
Command |
---|
sudo systemctl restart isc-dhcp-server |
Автоматическая установка с помощью файла preseed.cfg
Файл preseed.cfg для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6): preseed_smol.cfg
Файл preseed.cfg для Astra Linux Common Edition 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
# для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
d-i mirror/http/directory string /repo/smolensk
# или, вариант для Astra Linux Common Edition 2.12
#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
# или, вариант для Astra Linux Common Edition 2.12
#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 |
В следующем блоке подготавливаются разделы на жестком диске (по умолчанию стоит автоматическое создание с использованием всего диска, с одним корневым разделом и своп разделом)
Раскрыть |
---|
#Если система имеет свободное место, вы можете выбрать для разметки |
Создание пользователя user и задание пароля:
Предупреждение | ||
---|---|---|
Не рекомендуется использовать пароли в виде открытого текста. Получить хеш пароля можно командой:
Эта команда запросит ввод пароля и выведет на экран кеш этого пароля. |
Блок кода |
---|
# Создать учётную запись обычного пользователя.
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 Common Edition 2.12 необходимо указать вручную, на какой диск ставить загрузчик:
Блок кода |
---|
# В ОС 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 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 . Так же можно, установить систему, вручную ответив на все вопросы и после установки выполнить
Command |
---|
debconf-get-selections --installer > preseed.new |
Это создаст файл preseed.new с готовыми ответами, который можно использовать при следующих установках.
Автоматическая установка обновлений после установки системы
В Astra Linux Common Edition 2.12 можно выполнить обновление указав в late-command:
Блок кода |
---|
d-i preseed/late_command string in-target apt update; in-target apt dist-upgrade; |
В Astra Linux Special Edition для автоматической установки обновлений нужно создать файл 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; |
Если всё сделано корректно - то после завершения установки ОС, после первой перезагрузки выполнится сценарий обновления, самоудалится и перезагрузит машину.
Приложение: partman-auto - автоматическая разметка дисковых разделов
Информация |
---|
Данная статья является переводом статьи : https://github.com/xobs/debian-installer/blob/master/doc/devel/partman-auto-recipe.txt |
0. Введение
Директива partman-auto является частью системы управления дисковыми разделами, автоматизирующей разбиение дисков на дисковые разделы. Порядок разбиения управляется рецептами, предоставляемыми в виде файлов, а также может управляться пакетами udeb (пакетами, предназначенными для Debian Installer) или указанием параметров разметки в файле предварительных настроек preseed. В настоящем документе описываются формы рецептов и порядок их применения.
1. Форма рецептов
Все символы перевода строки и табуляции преобразуются в пробелы. Далее каждые два или более пробела заменяются одним пробелом. Почти все лексемы разделяются пробелами. Важным исключением является открывающая фигурная скобка ("{"); перед котоной _не_ должно быть пробелов.
Далее в правилах пробелы обозначаются символом подчеркивания ("_").
Блок кода |
---|
<рецепт>::=<заголовок>_<раздел>
<заголовок>::=<простое имя>|<имя debconf>
<простое имя>::=<имя>_: |
<имя> может быть, например "Multi user system".
Блок кода |
---|
<имя debconf>::=<шаблон debconf>_:: |
Назначением лексемы <имя debconf> является перевод имен рецептов на другие языки.
Блок кода |
---|
<раздел>::=<раздел>|<раздел>_<разделы>
<раздел>::=<лимиты>_<спецификации>_.
<лимиты>::=<минимальный размер>_<приоритет>_<максимальный размер>_<файловая система> |
- <минимальный размер> задает минимальный допустимый размер дискового раздела в мегабайтах. Размер округляется до размера дискового цилиндра, поэтому есть задать минимальный размер 20МБ при размере цилиндра 12МБ размер дискового раздела будет 12МБ. Размеры также могут быть заданы в процентах от общего объёма системного ОЗУ или (начиная с partman-auto версии 87) как число плюс проценты (например, "2000+50%"), что задает размер как указанное число плюс указанный процент от общего объёма системного ОЗУ;
- <приоритет> - некоторое число, обычно между числами <минимальный размер> и <максимальный размер>. Оно определяет приоритеты разделов при назначении размера. Если <приоритет> слишком мал (относительно приоритета другого раздела) этот раздел получит размер ближе к величине <минимальный размер>. Для маленьких разделов рекомендуется задавать <приоритет> больше чем их <максимальный размер>;
- <максимальный размер> - максимальный размер раздела. Специальное значение -1 используется для задания разделов неограниченного размера;
- <файловая система> - файловая система для этого раздела. Может быть задана как $default_filesystem для использования значения по умолчанию (в настоящее время ext3).
Блок кода |
---|
<спецификаторы>::=<спецификатор>|<спецификатор>_<спецификаторы>
<спецификатор>::=<внутренний спецификатор>|<регулярный спецификатор>|<спецификатор типа>
<внутренний спецификатор>::=$primary{_}|$bootable{_}|$default_filesystem{_} |
- $primary{_} - раздел должен быть создан как первичный (если это возможно);
- $bootable{_} - раздел должен быть загрузочным;
- $default_filesystem{_} - определяет, что должна использоваться файловая система, заданная по умолчанию (в настоящее время ext3).
Блок кода |
---|
<регулярный спецификатор>::=<имя файла>{ <содержимое файла> } |
- <file name> - имя файла, который будет создан в разделе (подробности см. часть 2.4 руководства по partman);
- <file contents> - информация, которая будет записана в этот файл.
Блок кода |
---|
<спецификатор типа>::=$lvmok{_}|$defaultignore{_}|$lvmignore{_} |
- $lvmok{_} - указувает, что раздел может быть логическим томом LVM при использовании LVM;
- $defaultignore{_} - используется для очистки принятых по умолчанию параметров раздела (применимо при использовании LVM);
- $lvmignore{_} - используется для очистки принятых по умолчанию параметров раздела LVM (применимо при неиспользовании LVM)
Спецификаторы defaultignore и lvmignore позволяют в одном рецепте определить разные параметры, например, раздела /boot в LVM-схеме разбиения на разделы и не-LVM схеме.
2. Примеры
Пример: корневой раздел и раздел подкачки (swap)
Блок кода |
---|
partman-auto/text/atomic_scheme:
500 10000 1000000 ext3
$primary{ }
$bootable{ }
method{ format }
format{ }
use_filesystem{ }
filesystem{ ext3 }
mountpoint{ / } .
64 512 300% linux-swap
method{ swap }
format{ } . |
Этим рецептом задается, что:
- Раздел root должен быть не менее 500 МБ и фактически не имеет максимального размера. Размер раздела swap изменяется от 64МБ до тройного размера системного ОЗУ;
- Параметр $bootable{ } делает раздел загружаемым, и параметр $primary{ } делает раздел первичным.
Кроме того, в примере используются параметры:
- method{ format } - указывает, что раздел должен быть отформатирован. Для разделов подкачки (swap) используется значение "swap". Для создания раздела без форматирования используется значение "keep" (такой раздел может применяться для резервирования дискового пространства);
- format{ } - следует указать, чтобы раздел был отформатирован;
- use_filesystem{ } - указывает, что на разделе размещается файловая система;
- filesystem{ ext3 } - указывает тип файловой системы для размещения на разделе;
mountpoint{ / } - задает точку монтирования раздела. Дополнительно можно задать опции монтирования, например, для задания опций "nodev,ro":
Блок кода options/nodev{ nodev } options/ro{ ro }
Также возможно задать метку файловой системы для поддерживающих метки файловых систем. Например, для задания метки "astralinux":
Блок кода |
---|
label{ astralinux } |
При установке должен быть отформатирован один дисковый раздел, помеченный как:
Блок кода |
---|
method{ format }
|
Пример: корневой раздел и отдельный раздел /home
Блок кода | ||
---|---|---|
| ||
300 4000 7000 ext3
$primary{ }
$bootable{ }
method{ format }
format{ }
use_filesystem{ }
filesystem{ ext3 }
mountpoint{ / } .
64 512 300% linux-swap
method{ swap }
format{ } .
100 10000 1000000000 ext3
method{ format }
format{ }
use_filesystem{ }
filesystem{ ext3 }
mountpoint{ /home } . |
Информация |
---|
Разделы будут создаваться в том порядке, в котором они перечислены в рецепте. |
3. Опции, специфичные для LVM
При использовании метода автоматического разбиения "lvm" в рецепте задаются специальные опции. Это позволяет разбить на разделы несколько дисков, определяя разделы, содержащие физические тома, принадлежность этих томов группам томов, имена и принадлежность логических томов.
В одной сессии может быть обработано несколько дисков, что также должно быть указано в рецепте. Разделы, не являющиеся логическими томами и не имеющие назначенных дисков (например, /boot) по умолчанию размещаются на первом диске. Для явного задания физического тома определим раздел следующим образом:
Блок кода |
---|
100 1000 1000000000 ext3
$defaultignore{ }
$primary{ }
method{ lvm }
device{ /dev/hdb }
vg_name{ vg00 } .
|
Параметры "device{ ... }" и "vg_name{ }" опциональны.
Указанные в параметре device устройства обязательно должны быть объявлены с помощью параметра partman-auto/disk.
Группа томов, в которую входит логический том, может быть задана как "in_vg{ }", например:
Блок кода |
---|
96 512 300% linux-swap
$lvmok{ }
in_vg{ vg00 }
lv_name{ myswap }
method{ swap }
format{ } . |
Параметр "lv_name{ }" задает имя логического тома, который будет создан.
4. Зависимость от архитектуры
Некоторые архитектуры предъявляют специфические требования к дисковым разделам. Например, многие из них требуют выделения специального дискового радела для поддержки загрузки. В частности, так называемые NewWorld PowerMAC машины требуют загрузочный дисковый раздел, размещенный в начале дискаn. Ниже приведен фрагмент рецепта для создания такого раздела:.
Блок кода |
---|
1 1 1 hfs
$bootable{ }
method{ newworld } . |
Этот раздел должен быть первым в списке разделов и он не должет быть отформатирован.
Другой пример — архитектура netwinder, требующая небольшой раздел /boot, отформатированный в файловую систему ext2 версии 0:
Блок кода |
---|
50 500 100 ext2
$primary{ }
$bootable{ }
method{ format }
format{ }
use_filesystem{ }
filesystem{ ext2r0 }
mountpoint{ /boot } . |
И, наконец, пример настройки загрузочного раздела EFI для архитектуры ia64:
Блок кода |
---|
100 100 150 fat16
$primary{ }
method{ efi }
format{ } . |
Для других архитектур см. соответствующие рецепты в udeb-пакете partman_auto.
5. Ограничения
Из-за ограничений реализации partman-auto для того, чтобы было использовано всё свободное дисковое пространство, должен быть задан один раздел максимального размера. Обычно для этого используется раздел /home, которому назначается максимальный размер 1000000000, что достаточно для существующих устройств хранения данных. Если большой раздел /home не нужен, можно задать дополнительный дисковый раздел с размером 1000000000, с методом создания "keep" и оставить его не примонтированым. После завершения инсталляции такой раздел можно удалить.
6. Как вычисляются размеры разделов
Предположим, требуется создать N разделов и min[i], max[i] и priority[i] — максимальный размер, минимальный размер и приоритет раздела i как описано в части 1 настоящей статьи.
Предположим free_space — размер свободного места для размещения разделов. Тогда:
Блок кода |
---|
for(i=1;i<=N;i++) {
factor[i] = priority[i] - min[i];
}
ready = FALSE;
while (! ready) {
minsum = min[1] + min[2] + ... + min[N];
factsum = factor[1] + factor[2] + ... + factor[N];
ready = TRUE;
for(i=1;i<=N;i++) {
x = min[i] + (free_space - minsum) * factor[i] / factsum;
if (x > max[i])
x = max[i];
if (x != min[i]) {
ready = FALSE;
min[i] = x;
}
}
}
|
В итоге значение min[i] будет значением размера радела i.