Anaconda — различия между версиями

Материал из Rosalab Wiki
Перейти к: навигация, поиск
 
(не показано 60 промежуточных версий 2 участников)
Строка 1: Строка 1:
 
 
== Введение и терминология ==
 
== Введение и терминология ==
  
 
[https://github.com/rhinstaller/anaconda Anaconda] — это программа для установки операционной системы (далее ­— ОС) с загрузочного образа на диск компьютера (далее — программа установки, '''инсталлятор''').<br>
 
[https://github.com/rhinstaller/anaconda Anaconda] — это программа для установки операционной системы (далее ­— ОС) с загрузочного образа на диск компьютера (далее — программа установки, '''инсталлятор''').<br>
 
Статья описывает использование Anaconda в дистрибутивах на платформах rosa2019.1 (ROSA Fresh >= R12, ROSA Enterprise Desktop >= X5) и rosa2019.05.
 
  
 
'''Оператор''' — человек, взаимодействующий с компьютером с целью установки ОС.<br>
 
'''Оператор''' — человек, взаимодействующий с компьютером с целью установки ОС.<br>
 
'''LiveCD''' — операционная система, загруженная со сменного носителя (CD, DVD, USB-накопитель и т.д.), не требующая для своего функционирования установки на жёсткий диск.
 
'''LiveCD''' — операционная система, загруженная со сменного носителя (CD, DVD, USB-накопитель и т.д.), не требующая для своего функционирования установки на жёсткий диск.
'''cmdline''' — параметры запуска initrd/ядра на системе, где производится установка ОС, устанавливаемые загрузчиком ОС (в LiveCD это Grub2 на UEFI и syslinux на legacy)
+
'''cmdline''' — параметры запуска initrd/ядра на системе, где производится установка ОС, устанавливаемые загрузчиком ОС.
  
 
Anaconda позволяет устанавливать ОС в пяти режимах:<br>
 
Anaconda позволяет устанавливать ОС в пяти режимах:<br>
Строка 19: Строка 16:
 
В '''интерактивном''' режиме оператор, выполняющий установку ОС, отвечает на вопросы установщика, вносит и изменяет настройки, а в '''автоматизированном''' режиме программа установки самостоятельно запускается, выполняет все настройки и установку ОС, не требуя никакого взаимодействия с оператором, что может быть полезно для автоматизированного развертывания рабочих станций и серверов.
 
В '''интерактивном''' режиме оператор, выполняющий установку ОС, отвечает на вопросы установщика, вносит и изменяет настройки, а в '''автоматизированном''' режиме программа установки самостоятельно запускается, выполняет все настройки и установку ОС, не требуя никакого взаимодействия с оператором, что может быть полезно для автоматизированного развертывания рабочих станций и серверов.
  
Минималистичный образ rosa2019.1 для тестирования инсталлятора: [https://abf.io/platforms/rosa2019.1/products/273 rosa2019.1_LXQt_mini_alpha_mn]
+
'''Режим Nickel''' — особый режим работы программы установки, в котором:<br>
 +
* редактирование пунктов меню загрузчика Grub2 защищается паролем root
 +
* установка пароля на root обязательна
 +
* из автоматической разметки диска исключен своп (раздел подкачки)
 +
Режим Nickel активируется добавлением "inst.nickel=1" в cmdline и включен по умолчанию на сертифицированных дистрибутивах (где может быть выключен добавлением "inst.nickel=0").
 +
 
 +
'''cmdline''' — аргументы запуска initrd, редактируемые нажатием латинской e в загрузчике Grub2, прописанные в строке, начинающейся с "linux" или "linuxefi"; нажатие F10 или Ctrl+X запускает систему с указанными параметрами.
 +
 
 +
Минималистичный образ rosa2021.1 для тестирования инсталлятора: https://abf.io/platforms/rosa2021.1/products/279
  
 
== Принцип работы ==
 
== Принцип работы ==
Строка 27: Строка 32:
 
* запуск программы установки (автоматизированно исходя из параметров в cmdline или оператором вручную с помощью ярлыка на рабочем столе в запущенной графической оболочке)
 
* запуск программы установки (автоматизированно исходя из параметров в cmdline или оператором вручную с помощью ярлыка на рабочем столе в запущенной графической оболочке)
 
* применение настроек (либо из файла настроек автоматизированной установки, либо путем интерактивного взаимодействия с оператором)
 
* применение настроек (либо из файла настроек автоматизированной установки, либо путем интерактивного взаимодействия с оператором)
* подготовка дисковых устройств (автоматическая или ручная разметка диска)
+
* подготовка дисковых устройств (автоматическая или ручная разметка диска; поддерживаются как локальные диски, так и сетевые, в т.ч. многопутевой доступ к устройствам хранения и Fiber Channel)
 
* копирование LiveCD на подготовленные дисковые разделы через rsync(1) (этот этап называется "Установка программного обеспечения", а копирование производится из '''исходного''' LiveCD '''без''' учета внесенных в Live-сеансе правок)
 
* копирование LiveCD на подготовленные дисковые разделы через rsync(1) (этот этап называется "Установка программного обеспечения", а копирование производится из '''исходного''' LiveCD '''без''' учета внесенных в Live-сеансе правок)
 
* установка загрузчика ОС (Grub2)
 
* установка загрузчика ОС (Grub2)
Строка 60: Строка 65:
 
Запустится мультиплексор терминалов tmux, на первой вкладке которого будет запущена консольная программа установки Anaconda.
 
Запустится мультиплексор терминалов tmux, на первой вкладке которого будет запущена консольная программа установки Anaconda.
  
! В настоящее время консольная программа установки хочет отдельный репозиторий для установки, установка прямо с LiveCD не работает, ведутся работы по исправлению.
+
Если не задан kickstart-файл, то выбирается kickstart-файл /usr/share/anaconda/[https://abf.io/import/anaconda/blob/rosa2021.1/anaconda-livecd-text.ks anaconda-livecd-text.ks], см. [https://bugzilla.redhat.com/show_bug.cgi?id=1883709 rhbz#1883709].
 +
 
 +
! Установка в режиме Nickel интерактивной консольной программой установки не поддерживается. См. раздел "Errata" ниже.
  
 
== Графическая установка по VNC ==
 
== Графическая установка по VNC ==
Строка 91: Строка 98:
 
== Автоматизированная установка ==
 
== Автоматизированная установка ==
  
 +
=== Введение в автоматизированную установку ===
 
Автоматизированная установка позволяет выполнить полностью автоматическую установку в соответствии с преднастройками. Может применяться для автоматического развертывания множества компьютеров одинаковой конфигурации.
 
Автоматизированная установка позволяет выполнить полностью автоматическую установку в соответствии с преднастройками. Может применяться для автоматического развертывания множества компьютеров одинаковой конфигурации.
  
Строка 96: Строка 104:
  
 
При установке в любом из режимов, в т.ч. интерактивном графическом, в установленной системе по адресу /root/anaconda-ks.cfg сохраняется kickstart-сценарий, описывающий произведенную установку, который можно взять за основу для своего сценария.
 
При установке в любом из режимов, в т.ч. интерактивном графическом, в установленной системе по адресу /root/anaconda-ks.cfg сохраняется kickstart-сценарий, описывающий произведенную установку, который можно взять за основу для своего сценария.
 +
 +
=== Типовой сценарий автоматизированной установки ===
  
 
Создадим сценарий автоматизированного развертывания со следующим содержимым:
 
Создадим сценарий автоматизированного развертывания со следующим содержимым:
Строка 103: Строка 113:
 
liveimg --url=file:///dev/mapper/live-base
 
liveimg --url=file:///dev/mapper/live-base
  
# Keyboard layouts
+
# Автоматически принять лицензионное соглашение
keyboard --xlayouts='us','ru' --switch='grp:alt_shift_toggle'
+
eula --agreed
# System language
+
 
 +
# Язык системы
 
lang ru_RU.UTF-8
 
lang ru_RU.UTF-8
  
# Network information
+
# Раскладки клавиатуры
 +
keyboard --xlayouts=us,ru --switch=grp:alt_shift_toggle
 +
 
 +
# Настройки сети, имя хоста
 
network  --hostname=localhost.localdomain
 
network  --hostname=localhost.localdomain
  
# SELinux configuration
+
# Настройка (выключение) SELinux
 +
# Раскомментировать нет смысла, т.к. SELinux и так выключен по умолчанию
 
#selinux --disabled
 
#selinux --disabled
  
# System services
+
# Какие службы systemd включить/выключить
 
services --enabled="chronyd"
 
services --enabled="chronyd"
  
 +
# Автоматическая разметка диски
 
autopart
 
autopart
# Partition clearing information
+
# Очистить все подключенные к машине диски
 
clearpart --all --initlabel
 
clearpart --all --initlabel
  
# System timezone
+
# Часовой пояс
 
timezone Europe/Moscow --utc
 
timezone Europe/Moscow --utc
  
# Root password
+
# Пароль root
# python3 -c "import crypt; print(crypt.crypt(input('clear-text pw: '), crypt.mksalt(crypt.METHOD_SHA512)))"
+
rootpw 123456
# Password: 123456
+
# Добавление пользователя
rootpw --iscrypted $6$BHWkSXIw6TgPrdvJ$V1ARg/yAP.kRe5mo5FawOOvf7SRm/GDM.Ly6RGGmSBR3Zc81/XzYlpoDnYKFMMPZodKBIVyBvjJ9evM1sey0E/
+
user --groups=wheel,users --name=rosa --password=123456
user --groups=wheel --name=user --password=$6$BHWkSXIw6TgPrdvJ$V1ARg/yAP.kRe5mo5FawOOvf7SRm/GDM.Ly6RGGmSBR3Zc81/XzYlpoDnYKFMMPZodKBIVyBvjJ9evM1sey0E/ --iscrypted
+
 
+
%anaconda
+
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
+
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
+
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
+
%end
+
  
reboot
+
reboot --eject
 
</pre>
 
</pre>
 
Скопируйте текст выше в отдельный файл, пусть он называется:
 
Скопируйте текст выше в отдельный файл, пусть он называется:
Строка 150: Строка 159:
 
   liveimg --url=file:///dev/mapper/live-base
 
   liveimg --url=file:///dev/mapper/live-base
 
Копируем на диск систему из LiveCD (также возможна установка из сетевого репозитория).
 
Копируем на диск систему из LiveCD (также возможна установка из сетевого репозитория).
 
  keyboard --xlayouts='us','ru' --switch='grp:alt_shift_toggle'
 
Добавляем в систему 2 раскладки клавиатуры: us и ru, а переключение раскладок настариваем на комбинацию alt+shift.
 
  
 
   lang ru_RU.UTF-8
 
   lang ru_RU.UTF-8
 
Установим язык системы ru_RU.UTF-8 (/etc/locale.conf).
 
Установим язык системы ru_RU.UTF-8 (/etc/locale.conf).
 +
 +
  keyboard --xlayouts=us,ru --switch=grp:alt_shift_toggle
 +
Добавляем в систему 2 раскладки клавиатуры: us и ru, а переключение раскладок настариваем на комбинацию alt+shift.
  
 
   services --enabled="chronyd"
 
   services --enabled="chronyd"
Включим службу systemd chronyd, можно перечислить несколько служб через запятые без пробелов.
+
Включим службу systemd chronyd, можно перечислить несколько служб через запятые без пробелов. Пример отключения sshd:
 +
  services --disabled="sshd"
  
 
   clearpart --all --initlabel
 
   clearpart --all --initlabel
Строка 166: Строка 176:
 
Установим часовой пояс Европа/Москва, а аппаратные часы (BIOS) будем считать выставленными по Гринвичу (рекомендуется их ставить по Гринвичу).
 
Установим часовой пояс Европа/Москва, а аппаратные часы (BIOS) будем считать выставленными по Гринвичу (рекомендуется их ставить по Гринвичу).
  
 +
  rootpw 123456
 +
Установим "123456" в качестве root-пароля
 +
 +
  user --groups=wheel,users --name=rosa --password=123456
 +
Создадим пользователя "rosa", добавив его в группы wheel и users и поставив пароль "123456"
 +
 +
Пароли можно записать в зашифрованном виде:
 
   rootpw --iscrypted $6$BHWkSXIw6TgPrdvJ$V1ARg/yAP.kRe5mo5FawOOvf7SRm/GDM.Ly6RGGmSBR3Zc81/XzYlpoDnYKFMMPZodKBIVyBvjJ9evM1sey0E/
 
   rootpw --iscrypted $6$BHWkSXIw6TgPrdvJ$V1ARg/yAP.kRe5mo5FawOOvf7SRm/GDM.Ly6RGGmSBR3Zc81/XzYlpoDnYKFMMPZodKBIVyBvjJ9evM1sey0E/
 
Установим пароль пользователю root. Хеш выше является результатом выполнения команды:
 
Установим пароль пользователю root. Хеш выше является результатом выполнения команды:
 
   python3 -c "import crypt; print(crypt.crypt(input('clear-text pw: '), crypt.mksalt(crypt.METHOD_SHA512)))"
 
   python3 -c "import crypt; print(crypt.crypt(input('clear-text pw: '), crypt.mksalt(crypt.METHOD_SHA512)))"
 
которая позволяет получить хеш введенного с клавиатуры пароля. Таким образом избегаем хранения пароля в открытом виде. Приведен хеш пароля "123456".
 
которая позволяет получить хеш введенного с клавиатуры пароля. Таким образом избегаем хранения пароля в открытом виде. Приведен хеш пароля "123456".
 +
  user --groups=wheel,users --name=rosa --password=$6$BHWkSXIw6TgPrdvJ$V1ARg/yAP.kRe5mo5FawOOvf7SRm/GDM.Ly6RGGmSBR3Zc81/XzYlpoDnYKFMMPZodKBIVyBvjJ9evM1sey0E/ --iscrypted
 +
Создаем пользователя "rosa", которого добавляем в группы wheel и users. Пароль аналогично root.
 +
...однако при установке в режиме '''Nickel''' пароль root обязательно указать в не зашифрованном виде, т.к. иначе будет невозможно зайти в редактирование параметров загрузчика Grub2.
  
   user --groups=wheel --name=user --password=$6$BHWkSXIw6TgPrdvJ$V1ARg/yAP.kRe5mo5FawOOvf7SRm/GDM.Ly6RGGmSBR3Zc81/XzYlpoDnYKFMMPZodKBIVyBvjJ9evM1sey0E/ --iscrypted
+
   reboot --eject
Создаем пользователя "user", которого добавляем в группу "wheel". Пароль аналогично root.
+
Перезагрузим компьютер по завершению установки. Попытаемся извлечь установочный носитель (полезно, когда в виртуальную машину производится установка с ISO-образа, подключенного как DVD-диск, а гипервизор умеет отключать виртуальный привод по команде извлечения диска из гостевой системы: тогда после перезагрузки система загрузится не с образа, а с диска с установленной ОС).
 
+
  reboot
+
Перезагрузим компьютер по завершению установки.
+
  
 
Параметры в cmline ядра и в kickstart-сценарии дополняют друг друга и могут использоваться в различных комбинациях.
 
Параметры в cmline ядра и в kickstart-сценарии дополняют друг друга и могут использоваться в различных комбинациях.
 +
 +
Пример разметки диска для установки в подтом root на BTRFS:
 +
<pre>
 +
clearpart --all --initlabel
 +
part btrfs.30 --fstype="btrfs" --size=9000 --grow
 +
btrfs none --label=btrfs_os btrfs.30
 +
btrfs / --subvol --name=root LABEL=btrfs_os
 +
</pre>
 +
 +
=== Дополнительные действия в сценарии ===
 +
 +
==== Произвольные скрипты ====
 +
В kickstart-сценарий можно добавить выполнение произвольных действий после установки, выполняемые в интерпретаторе shell. В примере ниже в файл /var/log/installtime записываются дата и время установки:
 +
<pre>
 +
%post
 +
LC_ALL=C date > /var/log/installtime
 +
%end
 +
</pre>
 +
 +
Приведенный выше скриптлет запустится внутри установленной системы (в chroot). Если нужно запустить скриптлет в LiveCD, то к %post необходимо добавить параметр --nochroot. Ниже приведен пример того же самого действия не из chroot:
 +
<pre>
 +
%post --nochroot
 +
LC_ALL=C date > "${INSTALL_ROOT}/var/log/installtime"
 +
%end
 +
</pre>
 +
 +
При необходимости можно с поднятого по инструкции ниже веб-сервера что-либо скачать командами curl(1), wget(1) и др.
 +
 +
==== Установка и удаление пакетов ====
 +
Можно удалить ненужные пакеты:
 +
<pre>
 +
%post
 +
dnf -q -y remove firefox-esr52
 +
%end
 +
</pre>
 +
 +
Можно установить дополнительные пакеты:
 +
<pre>
 +
%post
 +
dnf -q -y install sconfigs-detailed-audit
 +
%end
 +
</pre>
 +
 +
Установка пакетов с помощью инструкции <code>%packages</code> не поддерживается.
 +
 +
При вызове <code>dnf</code> рекомендуется добавлять ключ <code>-q</code>, как в примерах выше, иначе могут быть проблемы с автоматизированной работой.
 +
 +
=== Запуск тестового стенда автоматизированной установки ===
  
 
Узнаем IP-адрес компьютера оператора, выполнив команду:
 
Узнаем IP-адрес компьютера оператора, выполнив команду:
   /sbin/ip a
+
   ip a
  
 
На компьютере оператора откроем терминал в папке, где лежит kickstart-сценарий a.ks, и выполним команду:
 
На компьютере оператора откроем терминал в папке, где лежит kickstart-сценарий a.ks, и выполним команду:
Строка 204: Строка 269:
 
Запустится программа установки, скачает kickstart-сценарий, автоматически установит ОС и перезагрузит компьютер.
 
Запустится программа установки, скачает kickstart-сценарий, автоматически установит ОС и перезагрузит компьютер.
  
 +
=== Дополнительные ссылки ===
  
 
Ссылки на дополнительную документацию:<br>
 
Ссылки на дополнительную документацию:<br>
Строка 225: Строка 291:
 
Таким образом, запускается тот же LiveCD, что и при загрузке с USB-накопителя или DVD-диска, однако в оперативной памяти требуется достаточное количество места для хранения скачанной полной версии ОС, которая при запуске с дискового накопителя хранится на дисковом накопителе.
 
Таким образом, запускается тот же LiveCD, что и при загрузке с USB-накопителя или DVD-диска, однако в оперативной памяти требуется достаточное количество места для хранения скачанной полной версии ОС, которая при запуске с дискового накопителя хранится на дисковом накопителе.
  
Для настройки сервера PXE-загрузки необходимо выполнить описанные ниже наши, при необходимости адаптируя предлагаемые настройки под конкретную локальную сеть. ВСе команды, елси не указано иное, выполняются от root.
+
Для настройки сервера PXE-загрузки необходимо выполнить описанные ниже действия, при необходимости адаптируя предлагаемые настройки под конкретную локальную сеть. Все команды, если не указано иное, выполняются от root.
 +
 
 +
=== Установка необходимых пакетов ===
 +
 
 +
Поскольку ниже описывается настройка сети, приводящая к временному отключению доступа в интернет на компьютере-сервере PXE-загрузки, необходимо заранее установить требуемые пакеты:
 +
  dnf install dhcp-server tftp-server syslinux
 +
 
 +
По ходу инструкции ниже команды установки необходимых компонентов будут повторены, однако их можно не выполнять, если установить пакеты заранее.
 +
 
 +
=== Настройка BOOTP-сервера ===
 +
 
 +
Настройка DHCP-сервера специфична для конкретной сети, рассмотрим пример для следующей лабораторной установки: 2 персональных компьютера соединены патч-кордом (Ethernet), первый — DHCP-сервер (далее — сервер), второй — DHCP-клиент, на котором будет загружаться образ. Соедините оба компьютера патч-кордом.
 +
 
 +
Пусть сервер является десктопной операционной системой, на которой сеть настраивается автоматически через NetworkManager. Откройте настройки сетевого соединения. Перейдите во вкладку "IPv4". Поставьте отметку "Для этого соединения требуется IPv4". Поставьте "Метод" = "Вручную". В появившейся таблице нажмите "Добавить", заполните поля: "Адрес" = "192.168.1.1", "Маска сети" = "255.255.255.0". Нажмите "ОК". Отключите и включите соединение.
 +
 
 +
[[File:снимок1889.png||500px]]
 +
 
 +
При необходимости на сервере установите пакет dhcp-server (ISC DHCP):
 +
  dnf install dhcp-server
 +
 
 +
Открываем файл /etc/dhcpd.conf в консольном редакторе:
 +
  nano /etc/dhcpd.conf
 +
 
 +
Удалите все содержимое файла и вставьте следующее:
 +
<pre>
 +
option domain-name "rosa.lan";
 +
option domain-name-servers ns1.rosa.lan, ns2.rosa.lan;
 +
default-lease-time 3600;
 +
max-lease-time 7200;
 +
authoritative;
 +
allow booting;
 +
allow bootp;
 +
filename "pxelinux.0";
 +
subnet 192.168.1.0 netmask 255.255.255.0 {
 +
  option routers 192.168.1.1;
 +
  option subnet-mask 255.255.255.0;
 +
  option domain-search "rosa.lan";
 +
  option domain-name-servers 192.168.1.1;
 +
  range 192.168.1.10 192.168.1.100;
 +
}
 +
</pre>
 +
 
 +
Для сохранения и выхода из редактора nano нажмите Ctrl+O, Ctrl+X.
 +
 
 +
Добавляем в автозагрузку и запускаем DHCP/BOOTP-сервер:
 +
  systemctl enable --now dhcpd
 +
 
 +
Смотрим лог:
 +
  systemctl status dhcpd
 +
Должен быть статус "active" зеленым цветом, а не красный "failed", свидетельствующий об ошибке. Для выхода из лога нажмите q.
 +
 
 +
Переподключите сеть на клиенте (втором компьютере, загруженном в LiveCD). Посмотрите вывод команды:
 +
  /sbin/ip a
 +
Должен быть IP-адрес 192.168.1.10. Если так, то значит DHCP/BOOTP-сервер настроен и работает. Для работы сети оба соединенных компьютера должны быть включены.
  
 
=== Запуск HTTP-сервера ===
 
=== Запуск HTTP-сервера ===
Строка 231: Строка 350:
 
При необходимости установите python3:
 
При необходимости установите python3:
 
   dnf install python3
 
   dnf install python3
 +
 +
Приведенные ниже в '''этом''' разделе команды выполняются от '''пользователя''', а не root.
  
 
Приготовьте файл ISO-образа запускаемой по PXE ОС семейства ROSA. Создайте любую папку, например, "webserver" внутри домашнего каталога:
 
Приготовьте файл ISO-образа запускаемой по PXE ОС семейства ROSA. Создайте любую папку, например, "webserver" внутри домашнего каталога:
Строка 244: Строка 365:
 
   sudo mount -o loop "<путь к ISO-образу>" "$HOME/webserver/ISO"
 
   sudo mount -o loop "<путь к ISO-образу>" "$HOME/webserver/ISO"
  
Положите в папку "$HOME/webserver" файл kickstart-сценарий a.cfg, создание которого описано выше в разделе "Автоматизированная установка".
+
Положите в папку "$HOME/webserver" файл kickstart-сценарий a.ks, создание которого описано выше в разделе "Автоматизированная установка".
  
 
Узнайте IP-адрес компьютера-сервера командой:
 
Узнайте IP-адрес компьютера-сервера командой:
Строка 258: Строка 379:
 
   http://127.0.0.1:8000
 
   http://127.0.0.1:8000
  
В браузере должны быть выведены файлы из директории веб-сервера, в том числе должны быть доступны папка ISO и ее содержимое и kickstart-сценарий a.cfg, а в консоли, где запущен веб-сервер, должен быть выведен лог запросов к веб-серверу.
+
В браузере должны быть выведены файлы из директории веб-сервера, в том числе должны быть доступны папка ISO и ее содержимое и kickstart-сценарий a.ks, а в консоли, где запущен веб-сервер, должен быть выведен лог запросов к веб-серверу.
 +
 
 +
Оставьте консоль с запущенным веб-сервером открытой и далее используйте новую консоль.
  
 
=== Настройка сервера TFTP ===
 
=== Настройка сервера TFTP ===
  
 
Установите необходимые пакеты, выполнив от root:
 
Установите необходимые пакеты, выполнив от root:
   dnf install tftp-server xinetd syslinux
+
   dnf install tftp-server syslinux
  
 
Копируем в папку сервера TFTP компоненты первоначального загрузчика:
 
Копируем в папку сервера TFTP компоненты первоначального загрузчика:
 
   ( cd /usr/share/syslinux && cp -v menu.c32 pxelinux.0 ldlinux.c32 libutil.c32 /var/lib/tftpboot/ )
 
   ( cd /usr/share/syslinux && cp -v menu.c32 pxelinux.0 ldlinux.c32 libutil.c32 /var/lib/tftpboot/ )
  
Убеждаемся в наличии файла /etc/xinetd.d/tftp:
+
Копируем урезанную версию ОС из ISO-образа в папку TFTP-сервера (от '''пользователя''', не root):
  cat /etc/xinetd.d/tftp
+
   ( cd "$HOME/webserver/ISO/isolinux" ; sudo cp -v initrd0.img vmlinuz0 /var/lib/tftpboot/ )
 
+
Проверяем, что директива disable имеет значение no, а не yes.
+
 
+
Копируем урезанную версию ОС из ISO-образа в папку TFTP-сервера (от пользователя, не root):
+
   ( cd "$HOME/webserver/ISO/syslinux ; sudo cp -v initrd.img vmlinuz /var/lib/tftpboot/ )
+
  
 
Создаем папку для дополнительных конфигов TFTP-сервера:
 
Создаем папку для дополнительных конфигов TFTP-сервера:
Строка 288: Строка 406:
 
ONTIME local
 
ONTIME local
 
menu title #================ PXE BOOT ===============#
 
menu title #================ PXE BOOT ===============#
        label 1
 
        menu label ^1) Install ROSA
 
        kernel /vmlinuz0
 
        append initrd=/initrd0.img inst.repo=http://ip-address:8000/ root=live:http://ip-address:8000/ISO/LiveOS/squashfs.img
 
  
        label 2
+
  label 1
        menu label ^2) Automatically install ROSA
+
  menu label ^1) Automatically install ROSA
        kernel /vmlinuz0
+
  kernel /vmlinuz0
        append initrd=/initrd0.img inst.repo=http://ip-address:8000/ root=live:http://ip-address:8000/ISO/LiveOS/squashfs.img inst.text inst.ks=http://ip-address:8000/a.ks
+
  append initrd=/initrd0.img systemd.unit=anaconda.target enforcing=0 root=live:http://192.168.1.1:8000/ISO/LiveOS/squashfs.img inst.text inst.ks=http://192.168.1.1:8000/a.ks
 +
 
 +
  label 2
 +
  menu label ^2) Install ROSA
 +
  kernel /vmlinuz0
 +
  append initrd=/initrd0.img enforcing=0 root=live:http://192.168.1.1:8000/ISO/LiveOS/squashfs.img
 +
 
 
</pre>
 
</pre>
  
"ip-address" замените на IP-адрес компьютера с веб-сервером. "8000" при необходимости замените на другой порт.
+
"192.168.1.1" замените на IP-адрес компьютера с веб-сервером. В описанной выше лабораторной установке IP-адрес именно такой. "8000" при необходимости замените на другой порт.
  
Выше в строках, начинающихся с "append", после слова "append" идут параметры cmdline ядра, описанные выше. В первом пункте меню запускается просто LiveCD, а во втором случае запускается автоматизированная консольная установка по kickstart-сценарию. При запуске ОС по PXE можно выбрать нужный пункт меню. При необходимости адаптируйте меню выше под свои потребности (дополнительная информация: https://wiki.syslinux.org/wiki/index.php?title=PXELINUX).
+
Для сохранения и выхода из редактора nano нажмите Ctrl+O, Ctrl+X.
 +
 
 +
Выше в строках, начинающихся с "append", после слова "append" идут параметры cmdline ядра, описанные выше. В первом случае запускается автоматизированная консольная установка по kickstart-сценарию, а во втором случае запускается просто LiveCD. При отсутствии выбора какого-либо пункта меню в течение 300 секунд будет произведена загрузка первого пункта. Обратите внимание, что приведенный выше kickstart-сценарий автоматически стирает весь диск, т.е. в приведенной конфигурации, если не выбрать второй пункт меню, будет произведена автоматическая установка с затиранием диска. При запуске ОС по PXE можно выбрать нужный пункт меню. При необходимости адаптируйте меню выше под свои потребности (дополнительная информация: https://wiki.syslinux.org/wiki/index.php?title=PXELINUX).
  
 
Запускаем и добавляем в автозагрузку TFTP-сервер:
 
Запускаем и добавляем в автозагрузку TFTP-сервер:
   systemctl enable --now xinetd
+
   systemctl enable --now tftp
 +
 
 +
Настроить BIOS на загрузку по сети (PXE). Произвести загрузку.
 +
 
 +
== Нестандартные конфигурации ==
 +
 
 +
=== Настройка сети в LiveCD ===
 +
При запуске LiveCD (в т.ч. когда запускается только программа установки) сеть автоматически настраивается по DHCP. Если требуется настроить ее иначе, то можно в cmdline ядра передать параметры для dracut, например:
 +
ip=192.168.122.50::192.168.122.1:255.255.255.0:::off
 +
 
 +
В приведенном примере будет использован IP-адрес 192.168.122.50, шлюз 192.168.122.1, маска подсети 255.255.255.0, а DHCP будет отключен.
 +
 
 +
Дополнительно можно указать DNS-сервер Яндекса:
 +
ip=192.168.122.50::192.168.122.1:255.255.255.0:::off:77.88.8.8
 +
 
 +
Подробнее см. в dracut.cmdline(7). Для настройки сети в initrd LiveCD Росы используется модуль dracut network-legacy.
 +
 
 +
== Установка пароля на загрузчик ==
 +
 
 +
Рассмотрим установку пароля на редактирование параметров загрузки уже установленной ОС.
 +
 
 +
=== Автоматизированно ===
 +
Выполните команду:
 +
sudo grub2-set-password
 +
Будет запрошен пароль. Теперь, если в Grub нажать E для редактирования параметров загрузки, будет запрошен пароль. Логин root, пароль — заданный.
 +
 
 +
=== Вручную ===
 +
Описанные ниже действия выполняются программой grub2-set-password. Их нет необходимости выполнять, если используется она.
 +
 
 +
Создайте закодированный пароль:
 +
sudo grub2-mkpasswd-pbkdf2
 +
Будет запрошен пароль, затем будет выдана закодированная строка:
 +
<pre>
 +
$ sudo grub2-mkpasswd-pbkdf2
 +
Введите пароль:
 +
Повторно введите пароль:
 +
Хэш PBKDF2 вашего пароля: grub.pbkdf2.sha512.10000.7730DD2A5B6B5C31CD447BB9A8C313DCB9214BD184A0BA134EEA9D6AEDB44274E6A16712F8DA1FE23CF7E7785934B9D3118FD52F1D6AED0FDC27CC46ED296D17.337C51D7122A783A6B1AD63C3123B0C9077754AEA0002F4892085583033D7FFF0BCAAEEFF7D0A2193568F2CDCA6FCE08802AFE2522D2E46A6B00FBD867DF44AE
 +
</pre>
 +
 
 +
Создайте файл:
 +
( umask 077 && touch /boot/grub2/user.cfg)
 +
Запишите в него пароль в закодированном виде:
 +
echo "GRUB2_PASSWORD=grub.pbkdf2.sha512.10000.7730DD2A5B6B5C31CD447BB9A8C313DCB9214BD184A0BA134EEA9D6AEDB44274E6A16712F8DA1FE23CF7E7785934B9D3118FD52F1D6AED0FDC27CC46ED296D17.337C51D7122A783A6B1AD63C3123B0C9077754AEA0002F4892085583033D7FFF0BCAAEEFF7D0A2193568F2CDCA6FCE08802AFE2522D2E46A6B00FBD867DF44AE" > /boot/grub2/user.cfg
 +
 
 +
Обновите конфиг Grub:
 +
sudo update-grub2
 +
 
 +
Теперь, если в Grub нажать E для редактирования параметров загрузки, будет запрошен пароль. Логин root, пароль — заданный в grub2-mkpasswd-pbkdf2.
 +
 
 +
[[Категория:ROSA Server]]

Текущая версия на 13:39, 31 мая 2024

Введение и терминология

Anaconda — это программа для установки операционной системы (далее ­— ОС) с загрузочного образа на диск компьютера (далее — программа установки, инсталлятор).

Оператор — человек, взаимодействующий с компьютером с целью установки ОС.
LiveCD — операционная система, загруженная со сменного носителя (CD, DVD, USB-накопитель и т.д.), не требующая для своего функционирования установки на жёсткий диск. cmdline — параметры запуска initrd/ядра на системе, где производится установка ОС, устанавливаемые загрузчиком ОС.

Anaconda позволяет устанавливать ОС в пяти режимах:

  • интерактивный графический интерфейс программы установки непосредственно на компьютере
  • интерактивный графический интерфейс программы установки по VNC
  • автоматизированный графический интерфейс программы установки непосредственно на компьютере
  • интерактивный консольный интерфейс программы установки
  • автоматизированный консольный интерфейс программы установки

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

Режим Nickel — особый режим работы программы установки, в котором:

  • редактирование пунктов меню загрузчика Grub2 защищается паролем root
  • установка пароля на root обязательна
  • из автоматической разметки диска исключен своп (раздел подкачки)

Режим Nickel активируется добавлением "inst.nickel=1" в cmdline и включен по умолчанию на сертифицированных дистрибутивах (где может быть выключен добавлением "inst.nickel=0").

cmdline — аргументы запуска initrd, редактируемые нажатием латинской e в загрузчике Grub2, прописанные в строке, начинающейся с "linux" или "linuxefi"; нажатие F10 или Ctrl+X запускает систему с указанными параметрами.

Минималистичный образ rosa2021.1 для тестирования инсталлятора: https://abf.io/platforms/rosa2021.1/products/279

Принцип работы

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

  • чтение cmdline ядра dracut-модулем anaconda внутри initrd (https://anaconda-installer.readthedocs.io/en/latest/boot-options.html) на ранних этапах запуска ОС в LiveCD
  • запуск программы установки (автоматизированно исходя из параметров в cmdline или оператором вручную с помощью ярлыка на рабочем столе в запущенной графической оболочке)
  • применение настроек (либо из файла настроек автоматизированной установки, либо путем интерактивного взаимодействия с оператором)
  • подготовка дисковых устройств (автоматическая или ручная разметка диска; поддерживаются как локальные диски, так и сетевые, в т.ч. многопутевой доступ к устройствам хранения и Fiber Channel)
  • копирование LiveCD на подготовленные дисковые разделы через rsync(1) (этот этап называется "Установка программного обеспечения", а копирование производится из исходного LiveCD без учета внесенных в Live-сеансе правок)
  • установка загрузчика ОС (Grub2)
  • пересборка initramfs (в initramfs LiveCD есть не требуемые в установленной ОС модули, например, модуль Anaconda)
  • выполнение пост-установочных скриптов (на данный момент выполняется этот скрипт: https://abf.io/import/anaconda/blob/master/90-rosa1-postinstall.sh, основная задача которого — очистить скопированную с LiveCD систему от более ненужных пакетов, в т.ч. самой программы установки)

Графическая программа установки Anaconda

Графическая программа установки запускается командой liveinst. Как правило, запуск производится внутри запущенной в LiveCD графической оболочки. /usr/bin/liveinst является символической ссылкой на consolehelper, что позволяет запускать /usr/sbin/liveinst от не-root в LiveCD без пароля. liveinst — это bash-скрипт, запускающий /usr/sbin/anaconda (на Python).

Модель построения интерактивного графического интерфейса такова:

  • каждая группа настроек вынесена в отдельную группу ("spoke")
  • на главном экране есть прямоугольные области для вызова каждой группы
  • кнопка "Готово" внутри группы возвращает на главный экран
  • если настройки неоптимальные, но допустимые (например, слабый пароль), то по первому нажатию кнопки "Готово" будет показано предупреждение, а второе нажатие применит текущие настройки несмотря на их неоптимальность
  • если в установленных внутри группы настройках обнаружены критические ошибки, не позволяющие установить ОС, группа помечается красным цветом шрифта и восклицательным знаком; нужно нажать на нее и исправить настройки
  • группа может быть как обязательной к настройке, так и не обязательной
  • можно разрабатывать плагины, добавляющие свои группы настроек
  • когда необходимый минимум настроек выполнен, можно запустить установку ОС, в процессе которой не будет задано никаких дополнительных вопросов
  • по окончанию появится кнопка для закрытия программы установки
  • при запуске внутри графической оболочки выключение или перезагрузка компьютера выполяется оператором самостоятельно средствами запущенной графической оболочки

При запуске в неинтерактивном режиме пропускается этап настройки, сразу запускается установка ОС.

Консольная программа установки Anaconda

Консольная программа реализует тот же принцип работы, что и описанная выше графическая программа, однако интерактивное взаимодействие выполняется не с помощью мыши и клавиатуры, а только с помощью клавиатуры. Оператору предлагается выбрать один из нескольких вариантов (например, в какую группу настроек войти) путем ввода цифры или буквы с клавиатуры.

Для запуска консольной программы установки необходимо добавить в cmdline ядра:

 systemd.unit=anaconda.target inst.text

Запустится мультиплексор терминалов tmux, на первой вкладке которого будет запущена консольная программа установки Anaconda.

Если не задан kickstart-файл, то выбирается kickstart-файл /usr/share/anaconda/anaconda-livecd-text.ks, см. rhbz#1883709.

! Установка в режиме Nickel интерактивной консольной программой установки не поддерживается. См. раздел "Errata" ниже.

Графическая установка по VNC

Установка по VNC позволяет запустить графическую программу установки на другом компьютере (машине оператора). Полезно, если целевой компьютер находится далеко или не имеет монитора, мыши, клавиатуры. Можно управлять установкой с другого компьютера.

Важно! Запускается VNC-сервер с паролем или без пароля, подключение к которому доступно всем, без фильтрации сетевого трафика. Будьте осторожны при запуске VNC в незащищенной сети!

Для установки по сети понадобится клиентский компьютер с TigerVNC. Для установки в ОС ROSA выполните:

 sudo dnf install /usr/bin/vncviewer

На компьютере оператора (далее — клиент) запустите VNC-клиент в режиме ожидания входящего подключения:

 vncviewer -listen 4444

где 4444 — сетевой порт, любой свободный.

Узнайте IP-адрес компьютера оператора установки:

 /sbin/ip a

В cmdline ядра при запуске LiveCD (в т.ч. при PXE-загрузке) на компьютере, куда устанавливаем ОС, добавьте:

 systemd.unit=anaconda.target inst.vnc inst.vncconnect=192.168.1.173:4444

где 192.168.1.173 — адрес компьютера оператора установки, а 4444 — порт.

Сеть будет настроена автоматически по DHCP. Должна быть обеспечена двусторонняя сетевая доступность клиента (оператора) и сервера (компьютера, на который производится установка ОС).

Подождите. Через какое-то время на машине оператора откроется окно с графической программой установки, пример на скриншоте ниже.
Image.png

Подробная документация по опциями в cmdline: https://anaconda-installer.readthedocs.io/en/latest/boot-options.html

Автоматизированная установка

Введение в автоматизированную установку

Автоматизированная установка позволяет выполнить полностью автоматическую установку в соответствии с преднастройками. Может применяться для автоматического развертывания множества компьютеров одинаковой конфигурации.

Создается файл с настройками — kickstart-сценарий — сценарий быстрого развертывания. Затем в cmdline ядра записывается путь к этому файлу, по DHCP автоматически настраивается сеть, а модуль anaconda-dracut в initramfs загружает этот kickstart-сценарий и сохраняет в /run/install/ks.cfg.

При установке в любом из режимов, в т.ч. интерактивном графическом, в установленной системе по адресу /root/anaconda-ks.cfg сохраняется kickstart-сценарий, описывающий произведенную установку, который можно взять за основу для своего сценария.

Типовой сценарий автоматизированной установки

Создадим сценарий автоматизированного развертывания со следующим содержимым:

cmdline
# https://bugzilla.redhat.com/show_bug.cgi?id=1874434
liveimg --url=file:///dev/mapper/live-base

# Автоматически принять лицензионное соглашение
eula --agreed

# Язык системы
lang ru_RU.UTF-8

# Раскладки клавиатуры
keyboard --xlayouts=us,ru --switch=grp:alt_shift_toggle

# Настройки сети, имя хоста
network  --hostname=localhost.localdomain

# Настройка (выключение) SELinux
# Раскомментировать нет смысла, т.к. SELinux и так выключен по умолчанию
#selinux --disabled

# Какие службы systemd включить/выключить
services --enabled="chronyd"

# Автоматическая разметка диски
autopart
# Очистить все подключенные к машине диски
clearpart --all --initlabel

# Часовой пояс
timezone Europe/Moscow --utc

# Пароль root
rootpw 123456
# Добавление пользователя
user --groups=wheel,users --name=rosa --password=123456

reboot --eject

Скопируйте текст выше в отдельный файл, пусть он называется:

 a.ks

Документация по kickstart-сценариям: https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html

Разберем, что написано в приведенном выше простом сценарии.

 cmdline

Выполняем полностью автоматизированную установку. Запускается X-сервер, автоматически запускается установка, настройка не требуется. Возможны варианты без X-сервера и установка по VNC.

 liveimg --url=file:///dev/mapper/live-base

Копируем на диск систему из LiveCD (также возможна установка из сетевого репозитория).

 lang ru_RU.UTF-8

Установим язык системы ru_RU.UTF-8 (/etc/locale.conf).

 keyboard --xlayouts=us,ru --switch=grp:alt_shift_toggle

Добавляем в систему 2 раскладки клавиатуры: us и ru, а переключение раскладок настариваем на комбинацию alt+shift.

 services --enabled="chronyd"

Включим службу systemd chronyd, можно перечислить несколько служб через запятые без пробелов. Пример отключения sshd:

 services --disabled="sshd"
 clearpart --all --initlabel

Выполним полностью автоматизированную разметку диска, удалив все, что на нем уже есть. Можно прописать детализированные инструкции по разметке диска.

 timezone Europe/Moscow --utc

Установим часовой пояс Европа/Москва, а аппаратные часы (BIOS) будем считать выставленными по Гринвичу (рекомендуется их ставить по Гринвичу).

 rootpw 123456

Установим "123456" в качестве root-пароля

 user --groups=wheel,users --name=rosa --password=123456

Создадим пользователя "rosa", добавив его в группы wheel и users и поставив пароль "123456"

Пароли можно записать в зашифрованном виде:

 rootpw --iscrypted $6$BHWkSXIw6TgPrdvJ$V1ARg/yAP.kRe5mo5FawOOvf7SRm/GDM.Ly6RGGmSBR3Zc81/XzYlpoDnYKFMMPZodKBIVyBvjJ9evM1sey0E/

Установим пароль пользователю root. Хеш выше является результатом выполнения команды:

 python3 -c "import crypt; print(crypt.crypt(input('clear-text pw: '), crypt.mksalt(crypt.METHOD_SHA512)))"

которая позволяет получить хеш введенного с клавиатуры пароля. Таким образом избегаем хранения пароля в открытом виде. Приведен хеш пароля "123456".

 user --groups=wheel,users --name=rosa --password=$6$BHWkSXIw6TgPrdvJ$V1ARg/yAP.kRe5mo5FawOOvf7SRm/GDM.Ly6RGGmSBR3Zc81/XzYlpoDnYKFMMPZodKBIVyBvjJ9evM1sey0E/ --iscrypted

Создаем пользователя "rosa", которого добавляем в группы wheel и users. Пароль аналогично root. ...однако при установке в режиме Nickel пароль root обязательно указать в не зашифрованном виде, т.к. иначе будет невозможно зайти в редактирование параметров загрузчика Grub2.

 reboot --eject

Перезагрузим компьютер по завершению установки. Попытаемся извлечь установочный носитель (полезно, когда в виртуальную машину производится установка с ISO-образа, подключенного как DVD-диск, а гипервизор умеет отключать виртуальный привод по команде извлечения диска из гостевой системы: тогда после перезагрузки система загрузится не с образа, а с диска с установленной ОС).

Параметры в cmline ядра и в kickstart-сценарии дополняют друг друга и могут использоваться в различных комбинациях.

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

clearpart --all --initlabel
part btrfs.30 --fstype="btrfs" --size=9000 --grow
btrfs none --label=btrfs_os btrfs.30
btrfs / --subvol --name=root LABEL=btrfs_os

Дополнительные действия в сценарии

Произвольные скрипты

В kickstart-сценарий можно добавить выполнение произвольных действий после установки, выполняемые в интерпретаторе shell. В примере ниже в файл /var/log/installtime записываются дата и время установки:

%post
LC_ALL=C date > /var/log/installtime
%end

Приведенный выше скриптлет запустится внутри установленной системы (в chroot). Если нужно запустить скриптлет в LiveCD, то к %post необходимо добавить параметр --nochroot. Ниже приведен пример того же самого действия не из chroot:

%post --nochroot
LC_ALL=C date > "${INSTALL_ROOT}/var/log/installtime"
%end

При необходимости можно с поднятого по инструкции ниже веб-сервера что-либо скачать командами curl(1), wget(1) и др.

Установка и удаление пакетов

Можно удалить ненужные пакеты:

%post
dnf -q -y remove firefox-esr52
%end

Можно установить дополнительные пакеты:

%post
dnf -q -y install sconfigs-detailed-audit
%end

Установка пакетов с помощью инструкции %packages не поддерживается.

При вызове dnf рекомендуется добавлять ключ -q, как в примерах выше, иначе могут быть проблемы с автоматизированной работой.

Запуск тестового стенда автоматизированной установки

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

 ip a

На компьютере оператора откроем терминал в папке, где лежит kickstart-сценарий a.ks, и выполним команду:

 python3 -m http.server

которая запустит простой HTTP-сервер на порту 8000. Вместо него можно настроить и запустить иной веб-сервер: nginx, Apache httpd и др.

В cmdline запускаемого LiveCD добавим:

 systemd.unit=anaconda.target inst.ks=http://192.168.1.173:8000/a.ks

где 192.168.1.173 — адрес компьютера оператора, 8000 — порт HTTP-сервера. В консоли, где был запущен веб-сервер, будет отражена попытка скачать kickstart-сценарий.

Добавьте также

 inst.text

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

Ниже скриншот с примером редактирования cmdline в UEFI-режиме.

DeepinScreenshot выберите-область 20200923060810.png

Ниже скриншот автоматизированной консольной установки.

DeepinScreenshot выберите-область 20200923043132.png

Запустится программа установки, скачает kickstart-сценарий, автоматически установит ОС и перезагрузит компьютер.

Дополнительные ссылки

Ссылки на дополнительную документацию:

PXE-загрузка

Описание процесса PXE-загрузки

PXE-загрузка происходит следующим образом:

  • встроенный в BIOS компьютера загрузчик PXE получает IP-адрес по протоколу BOOTP (родственный DHCP протокол)
  • он же скачивает по протоколу TFTP с сервера TFTP: файлы загрузчика, в т.ч. сам загрузчик и конфигурационный файл с описанием меню загрузки, vmlinuz и initrd — урезанную версию операционной системы
  • он же запускает скачанный загрузчик
  • загрузчик запускает скачанную урезанную версию операционной системы (далее — initrd)
  • встроенные в initrd программные компоненты скачивают переданные в параметрах запуска initrd образ файловой системы и дополнительные компоненты полной версии операционной системы, сохраняя их в оперативную память
  • встроенные в initrd программные компоненты запускают ранее скачанную полную версию ОС

Таким образом, запускается тот же LiveCD, что и при загрузке с USB-накопителя или DVD-диска, однако в оперативной памяти требуется достаточное количество места для хранения скачанной полной версии ОС, которая при запуске с дискового накопителя хранится на дисковом накопителе.

Для настройки сервера PXE-загрузки необходимо выполнить описанные ниже действия, при необходимости адаптируя предлагаемые настройки под конкретную локальную сеть. Все команды, если не указано иное, выполняются от root.

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

Поскольку ниже описывается настройка сети, приводящая к временному отключению доступа в интернет на компьютере-сервере PXE-загрузки, необходимо заранее установить требуемые пакеты:

 dnf install dhcp-server tftp-server syslinux

По ходу инструкции ниже команды установки необходимых компонентов будут повторены, однако их можно не выполнять, если установить пакеты заранее.

Настройка BOOTP-сервера

Настройка DHCP-сервера специфична для конкретной сети, рассмотрим пример для следующей лабораторной установки: 2 персональных компьютера соединены патч-кордом (Ethernet), первый — DHCP-сервер (далее — сервер), второй — DHCP-клиент, на котором будет загружаться образ. Соедините оба компьютера патч-кордом.

Пусть сервер является десктопной операционной системой, на которой сеть настраивается автоматически через NetworkManager. Откройте настройки сетевого соединения. Перейдите во вкладку "IPv4". Поставьте отметку "Для этого соединения требуется IPv4". Поставьте "Метод" = "Вручную". В появившейся таблице нажмите "Добавить", заполните поля: "Адрес" = "192.168.1.1", "Маска сети" = "255.255.255.0". Нажмите "ОК". Отключите и включите соединение.

Снимок1889.png

При необходимости на сервере установите пакет dhcp-server (ISC DHCP):

 dnf install dhcp-server

Открываем файл /etc/dhcpd.conf в консольном редакторе:

 nano /etc/dhcpd.conf

Удалите все содержимое файла и вставьте следующее:

option domain-name "rosa.lan";
option domain-name-servers ns1.rosa.lan, ns2.rosa.lan;
default-lease-time 3600; 
max-lease-time 7200;
authoritative;
allow booting;
allow bootp;
filename "pxelinux.0";
subnet 192.168.1.0 netmask 255.255.255.0 {
   option routers 192.168.1.1;
   option subnet-mask 255.255.255.0;
   option domain-search "rosa.lan";
   option domain-name-servers 192.168.1.1;
   range 192.168.1.10 192.168.1.100;
}

Для сохранения и выхода из редактора nano нажмите Ctrl+O, Ctrl+X.

Добавляем в автозагрузку и запускаем DHCP/BOOTP-сервер:

 systemctl enable --now dhcpd

Смотрим лог:

 systemctl status dhcpd

Должен быть статус "active" зеленым цветом, а не красный "failed", свидетельствующий об ошибке. Для выхода из лога нажмите q.

Переподключите сеть на клиенте (втором компьютере, загруженном в LiveCD). Посмотрите вывод команды:

 /sbin/ip a

Должен быть IP-адрес 192.168.1.10. Если так, то значит DHCP/BOOTP-сервер настроен и работает. Для работы сети оба соединенных компьютера должны быть включены.

Запуск HTTP-сервера

При необходимости установите python3:

 dnf install python3

Приведенные ниже в этом разделе команды выполняются от пользователя, а не root.

Приготовьте файл ISO-образа запускаемой по PXE ОС семейства ROSA. Создайте любую папку, например, "webserver" внутри домашнего каталога:

 mkdir -p "$HOME/webserver"

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

 cd "$HOME/webserver"

Создайте папку, в которой станет доступно содержимое ISO-образа:

 mkdir -p ISO

Примонтируйте ISO-образ в эту папку:

 sudo mount -o loop "<путь к ISO-образу>" "$HOME/webserver/ISO"

Положите в папку "$HOME/webserver" файл kickstart-сценарий a.ks, создание которого описано выше в разделе "Автоматизированная установка".

Узнайте IP-адрес компьютера-сервера командой:

 /sbin/ip a

Запустите веб-сервер, который запустится на порту 8000 и будет отдавать файлы из текущей папки:

 python3 -m http.server

Если порт 8000 занят или по иным причинам не подходит, укажите иной порт, например, 8001:

 python3 -m http.server 8001

Проверьте работу веб-сервера, открыв в веб-браузере на этом же компьютере страницу по адресу:

 http://127.0.0.1:8000

В браузере должны быть выведены файлы из директории веб-сервера, в том числе должны быть доступны папка ISO и ее содержимое и kickstart-сценарий a.ks, а в консоли, где запущен веб-сервер, должен быть выведен лог запросов к веб-серверу.

Оставьте консоль с запущенным веб-сервером открытой и далее используйте новую консоль.

Настройка сервера TFTP

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

 dnf install tftp-server syslinux

Копируем в папку сервера TFTP компоненты первоначального загрузчика:

 ( cd /usr/share/syslinux && cp -v menu.c32 pxelinux.0 ldlinux.c32 libutil.c32 /var/lib/tftpboot/ )

Копируем урезанную версию ОС из ISO-образа в папку TFTP-сервера (от пользователя, не root):

 ( cd "$HOME/webserver/ISO/isolinux" ; sudo cp -v initrd0.img vmlinuz0 /var/lib/tftpboot/ )

Создаем папку для дополнительных конфигов TFTP-сервера:

 mkdir -p /var/lib/tftpboot/pxelinux.cfg

Открываем на редактирование файл /var/lib/tftpboot/pxelinux.cfg/default (изначально его нет, поэтому пустой в редакторе):

 nano /var/lib/tftpboot/pxelinux.cfg/default

со следующим содержимым:

default menu.c32
prompt 0
timeout 300
ONTIME local
menu title #================ PXE BOOT ===============#

  label 1
  menu label ^1) Automatically install ROSA
  kernel /vmlinuz0
  append initrd=/initrd0.img systemd.unit=anaconda.target enforcing=0 root=live:http://192.168.1.1:8000/ISO/LiveOS/squashfs.img inst.text inst.ks=http://192.168.1.1:8000/a.ks

  label 2
  menu label ^2) Install ROSA
  kernel /vmlinuz0
  append initrd=/initrd0.img enforcing=0 root=live:http://192.168.1.1:8000/ISO/LiveOS/squashfs.img

"192.168.1.1" замените на IP-адрес компьютера с веб-сервером. В описанной выше лабораторной установке IP-адрес именно такой. "8000" при необходимости замените на другой порт.

Для сохранения и выхода из редактора nano нажмите Ctrl+O, Ctrl+X.

Выше в строках, начинающихся с "append", после слова "append" идут параметры cmdline ядра, описанные выше. В первом случае запускается автоматизированная консольная установка по kickstart-сценарию, а во втором случае запускается просто LiveCD. При отсутствии выбора какого-либо пункта меню в течение 300 секунд будет произведена загрузка первого пункта. Обратите внимание, что приведенный выше kickstart-сценарий автоматически стирает весь диск, т.е. в приведенной конфигурации, если не выбрать второй пункт меню, будет произведена автоматическая установка с затиранием диска. При запуске ОС по PXE можно выбрать нужный пункт меню. При необходимости адаптируйте меню выше под свои потребности (дополнительная информация: https://wiki.syslinux.org/wiki/index.php?title=PXELINUX).

Запускаем и добавляем в автозагрузку TFTP-сервер:

 systemctl enable --now tftp

Настроить BIOS на загрузку по сети (PXE). Произвести загрузку.

Нестандартные конфигурации

Настройка сети в LiveCD

При запуске LiveCD (в т.ч. когда запускается только программа установки) сеть автоматически настраивается по DHCP. Если требуется настроить ее иначе, то можно в cmdline ядра передать параметры для dracut, например:

ip=192.168.122.50::192.168.122.1:255.255.255.0:::off

В приведенном примере будет использован IP-адрес 192.168.122.50, шлюз 192.168.122.1, маска подсети 255.255.255.0, а DHCP будет отключен.

Дополнительно можно указать DNS-сервер Яндекса:

ip=192.168.122.50::192.168.122.1:255.255.255.0:::off:77.88.8.8

Подробнее см. в dracut.cmdline(7). Для настройки сети в initrd LiveCD Росы используется модуль dracut network-legacy.

Установка пароля на загрузчик

Рассмотрим установку пароля на редактирование параметров загрузки уже установленной ОС.

Автоматизированно

Выполните команду:

sudo grub2-set-password

Будет запрошен пароль. Теперь, если в Grub нажать E для редактирования параметров загрузки, будет запрошен пароль. Логин root, пароль — заданный.

Вручную

Описанные ниже действия выполняются программой grub2-set-password. Их нет необходимости выполнять, если используется она.

Создайте закодированный пароль:

sudo grub2-mkpasswd-pbkdf2

Будет запрошен пароль, затем будет выдана закодированная строка:

$ sudo grub2-mkpasswd-pbkdf2
Введите пароль: 
Повторно введите пароль: 
Хэш PBKDF2 вашего пароля: grub.pbkdf2.sha512.10000.7730DD2A5B6B5C31CD447BB9A8C313DCB9214BD184A0BA134EEA9D6AEDB44274E6A16712F8DA1FE23CF7E7785934B9D3118FD52F1D6AED0FDC27CC46ED296D17.337C51D7122A783A6B1AD63C3123B0C9077754AEA0002F4892085583033D7FFF0BCAAEEFF7D0A2193568F2CDCA6FCE08802AFE2522D2E46A6B00FBD867DF44AE

Создайте файл:

( umask 077 && touch /boot/grub2/user.cfg)

Запишите в него пароль в закодированном виде:

echo "GRUB2_PASSWORD=grub.pbkdf2.sha512.10000.7730DD2A5B6B5C31CD447BB9A8C313DCB9214BD184A0BA134EEA9D6AEDB44274E6A16712F8DA1FE23CF7E7785934B9D3118FD52F1D6AED0FDC27CC46ED296D17.337C51D7122A783A6B1AD63C3123B0C9077754AEA0002F4892085583033D7FFF0BCAAEEFF7D0A2193568F2CDCA6FCE08802AFE2522D2E46A6B00FBD867DF44AE" > /boot/grub2/user.cfg

Обновите конфиг Grub:

sudo update-grub2

Теперь, если в Grub нажать E для редактирования параметров загрузки, будет запрошен пароль. Логин root, пароль — заданный в grub2-mkpasswd-pbkdf2.