Anaconda

Материал из Rosalab Wiki
Версия от 16:49, 24 сентября 2020; Mikhailnov (обсуждение | вклад) (PXE-загрузка)

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

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

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

Статья описывает использование Anaconda в дистрибутивах на платформах rosa2019.1 (ROSA Fresh >= R12, ROSA Enterprise Desktop >= X5) и rosa2019.05.

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

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

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

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

Минималистичный образ rosa2019.1 для тестирования инсталлятора: rosa2019.1_LXQt_mini_alpha_mn

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

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

  • чтение cmdline ядра dracut-модулем anaconda внутри initrd (https://anaconda-installer.readthedocs.io/en/latest/boot-options.html) на ранних этапах запуска ОС в LiveCD
  • запуск программы установки (автоматизированно исходя из параметров в cmdline или оператором вручную с помощью ярлыка на рабочем столе в запущенной графической оболочке)
  • применение настроек (либо из файла настроек автоматизированной установки, либо путем интерактивного взаимодействия с оператором)
  • подготовка дисковых устройств (автоматическая или ручная разметка диска)
  • копирование 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.

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

Графическая установка по 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

# Keyboard layouts
keyboard --xlayouts='us','ru' --switch='grp:alt_shift_toggle'
# System language
lang ru_RU.UTF-8

# Network information
network  --hostname=localhost.localdomain

# SELinux configuration
#selinux --disabled

# System services
services --enabled="chronyd"

autopart
# Partition clearing information
clearpart --all --initlabel

# System timezone
timezone Europe/Moscow --utc

# Root password
# python3 -c "import crypt; print(crypt.crypt(input('clear-text pw: '), crypt.mksalt(crypt.METHOD_SHA512)))"
# Password: 123456
rootpw --iscrypted $6$BHWkSXIw6TgPrdvJ$V1ARg/yAP.kRe5mo5FawOOvf7SRm/GDM.Ly6RGGmSBR3Zc81/XzYlpoDnYKFMMPZodKBIVyBvjJ9evM1sey0E/
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

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

 a.ks

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

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

 cmdline

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

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

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

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

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

 lang ru_RU.UTF-8

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

 services --enabled="chronyd"

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

 clearpart --all --initlabel

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

 timezone Europe/Moscow --utc

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

 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 --name=user --password=$6$BHWkSXIw6TgPrdvJ$V1ARg/yAP.kRe5mo5FawOOvf7SRm/GDM.Ly6RGGmSBR3Zc81/XzYlpoDnYKFMMPZodKBIVyBvjJ9evM1sey0E/ --iscrypted

Создаем пользователя "user", которого добавляем в группу "wheel". Пароль аналогично root.

 reboot

Перезагрузим компьютер по завершению установки.

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

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

 /sbin/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-загрузки необходимо выполнить описанные ниже наши, при необходимости адаптируя предлагаемые настройки под конкретную локальную сеть.

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

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

 mkdir -p "$HOME/webserver"

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

 cd "$HOME/webserver"

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

 /sbin/ip a

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

 python3 -m http.server

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

 python3 -m http.server 8001


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

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

 dnf install tftp-server xinetd syslinux

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

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

Убеждаемся в наличии файла /etc/xinetd.d/tftp:

 cat /etc/xinetd.d/tftp

Проверяем, что директива disable имеет значение no, а не yes.