Содержание

Versions Compared

Key

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

Table of Contents

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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


Warning

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



Info
titleДанная статья применима к:
  • ОС СН Смоленск

    Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6

    ОС ОН Орёл

    )

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

  • Astra Linux Common Edition 2.12


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


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


Note

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

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




Установка и настройка 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:

Code Block
INTERFACESv4="eth0"

Настроим /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 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 SE Смоленск Special Edition (в примере ниже предполагается, что основной установочный диск находится в приводе компакт дисков):

Command

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 ОрелCommon Edition:

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

Command

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:

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/

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

Command

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

И создадим в этом каталоге файл /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 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

Command

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

Рассмотрим конфигурационный файл /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 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 (на некоторых системах может быть иначе), что бы избежать повторной автоматической установки, после завершения первой, или случайной установки на компьютер с уже установленной ОС, подключенный к этой же сети.

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

Command

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

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

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

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

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

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

или

Info
sudo cp preseed_orel.cfg /srv/tftp/orel/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/smolensk
# или, вариант для Astra Linux ОСCommon ОНEdition Орёл2.12
#d-i mirror/http/directory string /repo/orel
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/smolensk
# или, вариант для Astra ОСLinux Common ОНEdition Орёл2.12
#d-i mirror/ftp/directory string /repo/orel
d-i mirror/ftp/proxy string


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

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

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

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

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

debconf-get-selections --installer > preseed.new
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/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 в конец добавляем команды для загрузки и запуска созданных файлов:

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/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 - автоматическая разметка дисковых разделов

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 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":

    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 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 } .


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

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

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

Code Block
100 1000 1000000000 ext3
        $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.