Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents


Info
titleДанная статья применима к:
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7)
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)

  • Astra Linux Special Edition РУСБ.10015-16 исп. 1

  • Astra Linux Common Edition 2.12



Warning
titleВнимание!
  1. Установка Astra Linux в автоматическом режиме означает автоматическое принятие лицензионного соглашения (см. Лицензионные соглашения и политика лицензирования ГК Astra Linux);
  2. При установке в автоматическом режиме Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7) выбор уровня защищенности должен осуществляться в соответствии с условиями действующего лицензионного договора. Подробнее про уровни защищенности см.  Astra Linux Special Edition (очередное обновление x.7): Ключевые изменения в комплексе средств защиты информации.



Info
PXE (англ.Preboot eXecution Environment) — среда для загрузки компьютеров с помощью сетевой карты без использования жестких дисков, компакт-дисков и других устройств, применяемых при загрузке операционной системы.
Подробная информация об автоматической установке с помощью списка ответов: https://www.debian.org/releases/stretch/s390x/apbs01.html.ru


Note

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

  • Виртуальный графический адаптер  VMSVGA для Oracle VirtualBox;
  • Виртуальный графический адаптер cirrus или qxl для Virt Manager.


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

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

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

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

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

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

      • http://192.168.56.1/repo/se
      • http://192.168.56.1/repo/ce
Info

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

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


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

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

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

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

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

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


Warning

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


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

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

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

Command
sudo apt install tftpd-hpa pxelinux syslinux

Где:

  • tftpd-hpa - TFTP-server;
  • pxelinux - загрузчик для сетевой загрузки PXE;
  • syslinux - загрузчик для сетевой загрузки DOS FAT / NTFS;

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

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

Установка и настройка службы DHCP

Info
Создание собственой службы DHCP требуется только в том случае, если в сети нет уже такой действующей службы. Если в сети уже имеется служба DHCP (DHCP-сервер), то следует внести в его настройку указанные ниже параметры в соответствии его с инструкциями по эксплуатации.

Для создания собственного DHCP-сервера:

  1. Установить пакет:

    Command
    sudo apt install isc-dhcp-server


  2. Настроить пакет:

    1. В файле /etc/default/isc-dhcp-server:

      Code Block
      INTERFACESv4="eth0"


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

      Code Block
      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 broadcast-address 192.168.56.255;
          option routers 192.168.56.1;
          option subnet-mask 255.255.255.0;
      }  


    3. После внесения изменений в настройки перезапустить службу:

      Command
      sudo systemctl restart isc-dhcp-server


Независимо от используещейся службы DHCP для загрузки по сети нужны следующие файлы:

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

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

Для копирования файлов:

  1. Для Astra Linux Special Edition (в примере ниже предполагается, что основной установочный диск находится в приводе компакт дисков) это копирование сделать командами:

    Command

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

    Для Astra Linux Common Edition, если образ установочного диска находится в файле ce212.iso:

    Command

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


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

    Command

    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/


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

    Command

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


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

    Code Block
    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 Special Edition
    LABEL netinstall
        MENU LABEL Start Astra Linux SE net install
        kernel se/linux
        append initrd=se/initrd.gz modprobe.blacklist=evbug auto=true priority=critical debian-installer/locale=en_US console-keymaps-at/keymap=ru hostname=se16 domain=my.dom astra-license/license=true url=tftp://192.168.56.1/se/preseed.cfg interface=auto netcfg/dhcp_timeout=60 astra_install=1 vga=788 debian-installer/allow_unauthenticated=true
    # Astra Linux Common Edition
    LABEL netinstall
        MENU LABEL Start Astra Linux CE net install
        kernel ce/linux
        append initrd=ce/initrd.gz modprobe.blacklist=evbug auto=true priority=critical debian-installer/locale=en_US console-keymaps-at/keymap=ru hostname=ce212 domain=my.dom astra-license/license=true url=tftp://192.168.56.1/ce/preseed.cfg interface=auto netcfg/dhcp_timeout=60 vga=788 debian-installer/allow_unauthenticated=true


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

    Важные параметры:

    1. hostname - имя хоста, которое будет использовано при автоматической установке ОС;

    2. domain - имя домена ;

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

    4. append ... astra_install=1 - параметр ядра astra_install=1 необходим для корректной установки Astra Linux Special Edition с включенным МКЦ.

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

    1. Загрузить архив с образом с помощью web-браузера по ссылке: скачать. По умолчанию архив будет сохранен в подкаталоге Загрузки домашнего каталога;

    2. Распаковать архив Загрузки/netinst.tar.gz в каталог /srv/tftp:

      Command

      sudo tar xvf Загрузки/netinst.tar.gz -C /srv/tftp


    3. Отредактировать конфигурационный файл /srv/tftp/debian-installer/amd64/grub/grub.cfg:

      Code Block
      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 Special Edition
      menuentry 'Install Astra Linux SE' {
          set background_color=black
          linux    /se/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/se/preseed.cfg interface=auto netcfg/dhcp_timeout=60
          initrd   /se/initrd.gz
      }
      # Установка Astra Linux Common Edition
      menuentry 'Install Astra Linux CE' {
          set background_color=black
          linux    /ce/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/ce/preseed.cfg interface=auto netcfg/dhcp_timeout=60
          initrd   /ce/initrd.gz
      }
      
      

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

  6. Перезапустить службы:

    Command

    sudo systemctl restart isc-dhcp-server # если используется
    sudo systemctl restart tftpd-hpa


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

Файл preseed.cfg для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) см. далее.


Файл preseed.cfg для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6): preseed_se16.cfg.

Файл preseed.cfg для Astra Linux Common Edition 2.12: preseed_ce.cfg.

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

Info
sudo cp preseed_se16.cfg /srv/tftp/se/preseed.cfg

или

Info
sudo cp preseed_ce.cfg /srv/tftp/ce/preseed.cfg

Важные параметры файла preseed:

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

Code Block
# Репозиторий для установки
# Если вы выберете 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/se
# или, вариант для Astra Linux Common Edition 2.12
#d-i mirror/http/directory string /repo/ce
d-i mirror/http/proxy string

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

Code Block
d-i mirror/protocol string ftp
d-i mirror/ftp/hostname string 192.168.56.1
d-i mirror/ftp/directory string /repo/se
# или, вариант для Astra Linux Common Edition 2.12
#d-i mirror/ftp/directory string /repo/ce
d-i mirror/ftp/proxy string


Часовой пояс:

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

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

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

# Автоматическая установка на компьютеры с уже установленной ОС в режиме UEFI без запроса подтверждения
# d-i partman-efi/non_efi_system boolean true

# Если один из дисков, который нужно разметить с помощью автоматической
# разметки, содержит старую конфигурацию 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 и задание пароля:

Warning

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

Command
openssl passwd -1

Эта команда запросит ввод пароля и выведет на экран кеш этого пароля.


Code Block
# Создать учётную запись обычного пользователя.
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

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

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

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

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

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

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

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

Warning

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

Command
openssl passwd -1

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


Code Block
# Необязательный пароль на 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 сервер:

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

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

Command

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

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

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

В Astra Linux Common Edition 2.12 можно выполнить обновление указав в late-command:

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

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

Code Block
[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 в котором должны быть указаны репозитории с обновлениями. Репозитории могут размещаться где угодно, важно только правильно указать путь к ним:

Code Block
#!/bin/bash

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

Code Block
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/se/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/se/update.service; \
                                in-target systemctl enable update.service;

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


Приложение:

Автоматическая разметка дисковых разделов с помощью partman-auto

- автоматическая разметка дисковых разделов

Info
Данная статья является переводом статьи : https://github.com/xobs/debian-installer/blob/master/doc/devel/partman-auto-recipe.txt

0. Введение

Директива partman-auto является частью системы управления дисковыми разделами, автоматизирующей разбиение дисков на дисковые разделы. Порядок разбиения управляется рецептами, предоставляемыми в виде файлов, а также может управляться пакетами udeb (пакетами, предназначенными для Debian Installer) или указанием параметров разметки в файле предварительных настроек preseed. В настоящем документе описываются формы рецептов и порядок их применения.

1. Форма рецептов

Все символы перевода строки и табуляции преобразуются в пробелы. Далее каждые два или более пробела заменяются одним пробелом. Почти все лексемы разделяются пробелами. Важным исключением является открывающая фигурная скобка ("{"); перед котоной _не_ должно быть пробелов.
Далее в правилах пробелы обозначаются символом подчеркивания ("_").

Code Block
 <рецепт>::=<заголовок>_<раздел>
 <заголовок>::=<простое имя>|<имя debconf>
 <простое имя>::=<имя>_:
<имя> может быть, например "Multi user system".
Code Block
<имя debconf>::=<шаблон debconf>_::

Назначением лексемы <имя debconf> является перевод имен рецептов на другие языки.


Code Block
<раздел>::=<раздел>|<раздел>_<разделы>
<раздел>::=<лимиты>_<спецификации>_.
<лимиты>::=<минимальный размер>_<приоритет>_<максимальный размер>_<файловая система>
  • <минимальный размер> задает минимальный допустимый размер дискового раздела в мегабайтах. Размер округляется до размера дискового цилиндра, поэтому есть задать минимальный размер 20МБ при размере цилиндра 12МБ размер дискового раздела будет 12МБ. Размеры также могут быть заданы в процентах от общего объёма системного ОЗУ или (начиная с partman-auto версии 87) как число плюс проценты (например, "2000+50%"), что задает размер как указанное число плюс указанный процент от общего объёма системного ОЗУ;
  • <приоритет> - некоторое число, обычно между числами <минимальный размер> и <максимальный размер>. Оно определяет приоритеты разделов при назначении размера. Если <приоритет> слишком мал (относительно приоритета другого раздела) этот раздел получит размер ближе к величине <минимальный размер>. Для маленьких разделов рекомендуется задавать <приоритет> больше чем их <максимальный размер>;
  • <максимальный размер> - максимальный размер раздела. Специальное значение -1 используется для задания разделов неограниченного размера;
  • <файловая система> - файловая система для этого раздела. Может быть задана как $default_filesystem для использования значения по умолчанию (в настоящее время ext3).


Code Block
<спецификаторы>::=<спецификатор>|<спецификатор>_<спецификаторы>
<спецификатор>::=<внутренний спецификатор>|<регулярный спецификатор>|<спецификатор типа>
<внутренний спецификатор>::=$primary{_}|$bootable{_}|$default_filesystem{_}
  • $primary{_} - раздел должен быть создан как первичный (если это возможно);
  • $bootable{_} - раздел должен быть загрузочным;
  • $default_filesystem{_} - определяет, что должна использоваться файловая система, заданная по умолчанию (в настоящее время ext3).
Code Block
<регулярный спецификатор>::=<имя файла>{ <содержимое файла> }
  • <file name> - имя файла, который будет создан в разделе (подробности см. часть 2.4 руководства по partman);
  • <file contents> - информация, которая будет записана в этот файл.
Code Block
<спецификатор типа>::=$lvmok{_}|$defaultignore{_}|$lvmignore{_}
  • $lvmok{_} - указувает, что раздел может быть логическим томом LVM при использовании LVM;
  • $defaultignore{_} - используется для очистки принятых по умолчанию параметров раздела (применимо при использовании LVM);
  • $lvmignore{_} -  используется для очистки принятых по умолчанию параметров раздела LVM (применимо при неиспользовании LVM)

Спецификаторы defaultignore и lvmignore позволяют в одном рецепте определить разные параметры, например, раздела /boot в LVM-схеме разбиения на разделы и не-LVM схеме.

2. Примеры

Пример: корневой раздел и раздел подкачки (swap)

Code Block
partman-auto/text/atomic_scheme:
500 10000 1000000 ext4
 $primary{ }
 $bootable{ }
 method{ format }
 format{ }
 use_filesystem{ }
 filesystem{ ext4 }
 mountpoint{ / } .

64 512 300% linux-swap
 method{ swap }
 format{ } .

Этим рецептом задается, что:

  • Раздел root должен быть не менее 500 МБ и фактически не имеет максимального размера. Размер раздела swap изменяется от 64МБ до тройного размера системного ОЗУ;
  • Параметр $bootable{ } делает раздел загружаемым, и параметр $primary{ } делает раздел первичным.

Кроме того, в примере используются параметры:

  • method{ format } - указывает, что раздел должен быть отформатирован. Для разделов подкачки (swap) используется значение "swap". Для создания раздела без форматирования используется значение "keep" (такой раздел может применяться для резервирования дискового пространства);
  • format{ } - следует указать, чтобы раздел был отформатирован;
  • use_filesystem{ } - указывает, что на разделе размещается файловая система;
  • filesystem{ ext4 } - указывает тип файловой системы для размещения на разделе;
  • mountpoint{ / } - задает точку монтирования раздела. Дополнительно можно задать опции монтирования, например, для задания опций "nodev,ro":

    Code Block
     options/nodev{ nodev }
     options/ro{ ro }


Также возможно задать метку файловой системы для поддерживающих метки файловых систем. Например, для задания метки "astralinux":

Code Block
 label{ astralinux }

При установке должен быть отформатирован один дисковый раздел, помеченный как:

Code Block
 method{ format }

Пример: корневой раздел, раздел подкачки и отдельный раздел /home 

Code Block
titlepartman-auto/text/home_scheme:
300 4000 7000 ext4
        $primary{ }
        $bootable{ }
        method{ format }
        format{ }
        use_filesystem{ }
        filesystem{ ext4 }
        mountpoint{ / } .

64 512 300% linux-swap
        method{ swap }
        format{ } .

100 10000 1000000000 ext4
        method{ format }
        format{ }
        use_filesystem{ }
        filesystem{ ext4 }
        mountpoint{ /home } .


Info
Разделы будут создаваться в том порядке, в котором они  перечислены в рецепте.

3. Опции, специфичные для LVM

При использовании метода автоматического разбиения "lvm" в рецепте задаются специальные опции. Это позволяет разбить на разделы несколько дисков, определяя разделы, содержащие физические тома, принадлежность этих томов группам томов, имена и принадлежность логических томов.
В одной сессии может быть обработано несколько дисков, что также должно быть указано в рецепте. Разделы, не являющиеся логическими томами и не имеющие назначенных дисков (например, /boot) по умолчанию размещаются на первом диске. Для явного задания физического тома определим раздел следующим образом:

Code Block
100 1000 1000000000 ext4
        $defaultignore{ }
        $primary{ }
        method{ lvm }
        device{ /dev/hdb }
        vg_name{ vg00 } .

 Параметры "device{ ... }" и "vg_name{ }" опциональны.
Указанные в параметре device устройства обязательно должны быть объявлены с помощью параметра partman-auto/disk.
Группа томов, в которую входит логический том, может быть задана как "in_vg{ }", например:


Code Block
96 512 300% linux-swap
        $lvmok{ }
        in_vg{ vg00 }
        lv_name{ myswap }
        method{ swap }
        format{ } .

Параметр "lv_name{ }" задает имя логического тома, который будет создан.

4. Зависимость от архитектуры

Некоторые архитектуры предъявляют специфические требования к дисковым разделам. Например, многие из них требуют выделения специального дискового радела для поддержки загрузки. В частности, так называемые NewWorld PowerMAC машины требуют загрузочный дисковый раздел, размещенный в начале дискаn. Ниже приведен фрагмент рецепта для создания такого раздела:.


Code Block
1 1 1 hfs
 $bootable{ }
 method{ newworld } .

Этот раздел должен быть первым в списке разделов и он не должет быть отформатирован.

Другой пример — архитектура  netwinder, требующая небольшой раздел /boot, отформатированный в файловую систему ext2 версии 0:


Code Block
50 500 100 ext2
 $primary{ }
 $bootable{ }
 method{ format }
 format{ }
 use_filesystem{ }
 filesystem{ ext2r0 }
 mountpoint{ /boot } .

И, наконец, пример настройки загрузочного раздела EFI для архитектуры ia64:


Code Block
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 — размер свободного места для размещения разделов. Тогда:

Code Block
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.

Приложение.

Особенности настройки параметров сети

Eсли файл ответов загружается из сети, то настройка параметров сети выполняется до загрузки файла ответов, и параметры настройки сети, заданные в этом файле, игнорируются. То есть, настройка сети с помощью файла ответов по умолчанию применима если загрузка происходит с компакт-диска или USB-накопителя. При загрузке файла ответов из сети можно только указать используемый для загрузки файлов ответов сетевой интерфейс, для чего используется параметр ядра interface, например interface=eth1.

Принудительно выполнить перенастройку сети (например, задать статический адрес) с помощью файла ответов после завершения установки по сети можно следующим способом:

  1. Создать на ftp-сервере сценарий со следующим содержимым:

    Code Block
    #!/bin/sh
    kill-all-dhcp; netcfg

    При выполнении этого сценария будут отключены службы автоматической настройки сети через DHCP и выполнены директивы netcfg из файла ответов (список возможных директив см. ниже).


  2. Сделать файл с созданным сценарием исполняемым:

    Command
    sudo chmod +x <имя_файла_со_сценарием>


  3. Добавить следующую строку в файл ответов непосредственно перед статической настройкой сети:

    Code Block
    d-i preseed/run string ftp://<путь_к_файл_со_сценарием>


Для настройки сети могут использоваться следующие переменные debconf:

Пер

ПеременнаяОписание
d-i netcfg/enable boolean falseПолностью  выключить настройку сети. Это полезно при установке на устройства, не имеющие сети, когда вопросы о сети неуместны.
d-i netcfg/choose_interface select autoАвтоматический выбор активного сетевого интерфейса, если такой имеется. Если имеется более одного интерфейса, то при данной настройке список интерфейсов выводиться не будет.
d-i netcfg/choose_interface select eth1Принудительный выбор указанного сетевого интерфейса (в данном случае - интерфейс eth1).
d-i netcfg/link_wait_timeout string 10Время ожидания появления связи (link) (по умолчанию 3 секунды). Значение указывается в секундах.
d-i netcfg/dhcp_timeout string 60
d-i netcfg/dhcpv6_timeout string 60
Время ожидания параметров DHCP
d-i netcfg/disable_autoconfig boolean trueОтключение автоматической настройки сети, переход к ручной настройке.
d-i netcfg/dhcp_failed note
d-i netcfg/dhcp_options select Configure network manually 
Игнорирование отсутствия DHCP-сервера

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

Статические настройки параметров сети (пример для IPv4).
d-i netcfg/get_ipaddress string fc00::2
d-i netcfg/get_netmask string ffff:ffff:ffff:ffff::
d-i netcfg/get_gateway string fc00::1
d-i netcfg/get_nameservers string fc00::1
d-i netcfg/confirm_static boolean true 
Статические настройки параметров сети (пример для IPv6).
d-i netcfg/hostname string somehostПринудительное задание имени хоста (значения, предлагаемые DHCP  или реверсивным DNS игнорируются).
d-i netcfg/wireless_wep stringВыключение диалога о ключе WEP
d-i netcfg/dhcp_hostname string radishСпециальное имя DHCP-сервера, которое используют некоторые провайдеры в качестве некоего пароля.
d-i hw-detect/load_firmware boolean trueРазрешение загрузки несвободных микропрограмм без запроса подтверждения (или значение false для запрета загрузки).
netcfg/get_netmask string 255.255.255.0Принудительное задание маски сети. Если не задано, то маска выбирается автоматически.
netcfg/get_gateway string 192.168.1.1Принудительное задание адреса сетевого шлюза. Если не задано, то адрес сетевого шлюза выбирается автоматически. Специальное значение none указывает, что шлюз не используется.


Пример файла preseed.cfg для Astra Linux Special Edition РУСБ.10015-01 очередное обновление 1.7

Особенности установки:

  1. Загрузка выполняется из Интернет-репозитория Astra Linux Special Edition РУСБ.10015-01 очередное обновление 1.7 (см. Интернет-репозитории Astra Linux Special Edition x.7);
  2. Установка выполняется с раздельными дисковыми разделами для корневого каталога и каталогов /boot и /tmp и без создания раздела подкачки (подробнее про рекомендованную структуру разделов см. Astra Linux Red Books):

    Code Block
    d-i partman-auto/expert_recipe string myroot :: \
         512 16384 512 ext2 \
             $primary{ } $bootable{ } \
             method{ format } format{ } use_filesystem{ } filesystem{ ext2 } mountpoint{ /boot } .\
         8192 16384 16384 ext4 \
             method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /     } .\
         2048 16384 2048 ext4 \
             method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /tmp  } options/noexec{ noexec } options/nodev{ nodev } options/nosuid{ nosuid } .\
         500 8192 -1 ext4 \
             method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /home } . 
    d-i partman-auto/choose_recipe select myroot


  3. Установка ПО выполняется в минимальной конфигурации (только базовые пакеты Base packages и графическая оболочка Fly desktop), дополнительно устанавливается служба SSH Server для обеспечения возможности удаленного управления компьютером:

    Code Block
    tasksel tasksel/first multiselect Base packages, Fly desktop, SSH server

    Установка ПО Astra Linux Directory (ALD) не выполняется;

  4. Создается пользователь-администратор с именем astra и паролем 12345678;
     
  5. В примере файла ОС устанавливается c максимальным уровнем защищенности, однако возможны варианты:
    1. Максимальный уровень защищенности:

      Code Block
      d-i astra-additional-setup/os-check select Maximum security level Smolensk


    2. Усиленный уровень защищенности:

      Code Block
      d-i astra-additional-setup/os-check select Advanced security level Voronezh


    3. Базовый уровень защищенности:

      Code Block
      d-i astra-additional-setup/os-check select Base security level Orel


  6. Если это позволяет выбранный уровень защищенности, то могут быть включены МРД и МКЦ. Также может быть запрещена трассировка:
    1. Максимальный уровень защищенности:

      Code Block
      d-i astra-additional-setup/additional-settings-smolensk multiselect Enable Mandatory Integrity Control, Enable Mandatory Access Control, Disable ptrace capability


    2. Усиленный уровень защищенности:

      Code Block
      d-i astra-additional-setup/additional-settings-voronezh multiselect Enable Mandatory Integrity Control, Disable ptrace capability


    3. Базовый уровень защищенности:

      Code Block
      d-i astra-additional-setup/additional-settings-orel multiselect Disable ptrace capability


  7. После установки:
      1. Удалятся серверная служба синхронизации времени ntp, и включается клиентская служба синхронизации времени systemd-timesyncd.service (см. Службы синхронизации времени в ОС Astra Linux):
    Code Block
    d-i preseed/late_command string in-target apt purge -y ntp ; \
                                    in-target systemctl enable systemd-timesyncd.service ; \
    
    1. Удаляются созданные при установке сетевые подключения:

      Code Block
      in-target rm -f /etc/NetworkManager/system-connections/*; 

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

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

Code Block
collapsetrue
# Сетевой репозиторий для установки
d-i mirror/protocol string http
d-i mirror/http/hostname string dl.astralinux.ru
d-i mirror/http/directory string /astra/stable/1.7_x86-64/repository-main
# Настройки языка
d-i mirror/country string manual
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 Ctrl+Shift
d-i console-setup/layoutcode string ru
d-i keyboard-configuration/toggle select Ctrl+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 netcfg/choose_interface select auto
# Выбор компонент репозитория
d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true
d-i apt-setup/services-select none
# Настройка часов и синхронизации времени
d-i clock-setup/utc boolean true
d-i time/zone string Europe/Moscow
d-i clock-setup/ntp boolean false
# Разметка диска
d-i partman-auto/method string regular
d-i partman-auto/purge_lvm_from_device boolean true
d-i partman-lvm/confirm boolean true
# Для режима legacy bios:
d-i partman-auto/expert_recipe string myroot :: \
     512 16384 512 ext2 \
         $primary{ } $bootable{ } \
         method{ format } format{ } use_filesystem{ } filesystem{ ext2 } mountpoint{ /boot } .\
     8192 16384 16384 ext4 \
         method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /     } .\
     2048 16384 2048 ext4 \
         method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /tmp  } options/noexec{ noexec } options/nodev{ nodev } options/nosuid{ nosuid } .\
     500 8192 -1 ext4 \
         method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /home } . 
d-i partman-auto/choose_recipe select myroot
#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 false
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

d-i base-installer/kernel/image string linux-image-5.10-generic

d-i passwd/make-user boolean true
# Учетная запись и пароль пользователя
d-i passwd/user-fullname string astra
d-i passwd/username string astra
d-i passwd/user-password password 12345678
d-i passwd/user-password-again password 12345678

d-i debian-installer/allow_unauthenticated string true
# Выбор ПО для установки
tasksel tasksel/first multiselect Base packages, Fly desktop, SSH server
tasksel tasksel/astra-feat-setup multiselect
# Выбор уровня защищенности ОС
d-i astra-additional-setup/os-check select Maximum security level Smolensk
# Выбор параметров ОС
d-i astra-additional-setup/additional-settings-smolensk multiselect Enable Mandatory Integrity Control, Enable Mandatory Access Control, Disable ptrace capability

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

popularity-contest popularity-contest/participate boolean false

d-i grub-installer/only_debian boolean true

d-i grub-installer/with_other_os boolean true
# Пароль загрузчика grub
d-i grub-installer/password password 12345678
d-i grub-installer/password-again password 12345678
grub-installer grub-installer/password-mismatch error
# Не показывать последнее сообщение о том, что установка завершена.
d-i finish-install/reboot_in_progress note
d-i finish-install/exit/poweroff boolean true

d-i preseed/late_command string in-target apt purge -y ntp ; \
                                in-target systemctl enable systemd-timesyncd.service ; \
                                in-target rm -f /etc/NetworkManager/system-connections/*; 


Загрузка по сети в режиме восстановления (rescue mode)

Warning
Разрешение загрузки (локально или по сети) в режиме восстановления существенно снижает защищенность компьюьера, предоставляя к нему неограниченных доступ анонимным пользователям.

Для того, чтобы предоставить пользователям возможность загрузки компьютеров в режиме восстановления следует создать в файте pxelinux.cfg/default элемент меню следующего содержания:

Code Block
LABEL netinstall
    MENU LABEL Start Astra Linux 1.07.02 rescue
    kernel 1.07.00/linux
    append initrd=ce/initrd.gz modprobe.blacklist=evbug auto=true priority=critical debian-installer/locale=en_US console-keymaps-at/keymap=ru hostname=ce212 domain=my.dom astra-license/license=true url=tftp://192.168.56.1/ce/preseed.cfg interface=auto netcfg/dhcp_timeout=60 vga=788 debian-installer/allow_unauthenticated=true rescue/enable=true

От ранее приведенных примеров меню данный пример отличается добавленной опцией:

Code Block
rescue/enable=true

включающей загрузку в режиме восстановления