Кривой стартер. Начало.

This entry is part 1 of 4 in the series kickstart

В связи с новой работой возникла необходимость автоматизировать установку Linux на x86 железо. Из всего зоопарка пингвинов выбрал Scientific Linux, как наиболее мне привычный (уже имел с ним дело). Плюс SL является основным инструментом моего друга при решении большинства задач, так что будет к кому обратиться с вопросом, если что.
Плюсы, они же и минусы SL да и вообще всех RHEL – их стабильнось. Они не прикручивают всякие новомодные финтифлюшки тоннами и развиваются довольно планомерно, так что SL не сильно отличается от ASP Linux десятилетней давности :). Хотя эта стабильность оборачивается, как я написал, и минусами – в RHEL-based дистрибутивах большинство софта настолько протухшее… Сразу оговорюсь, что я не гонюсь слепо за версией программ. Но в ходе создания установочной флешки выяснил, что в SL (и RHEL) сидит довольно древняя версия gstreamer, у которой серьёзные проблемы с утечками памяти. Убил кучу времени на “отлов” причины. В итоге решил эту проблему сборкой собственных пакетов с более свежей версией gstreamer’a.
Ладно, буду последователен.
В красношапочных дистрибутивах есть такая вещь как kickstart, которая позволяет подготовить файл с ответами на вопросы инсталлятора и автоматизировать установку частично или полностью.
Моей задачей было сделать автономную и максимально автоматизированную установку. Под автономностью я подразумеваю отсутствие доступа к сети, только установочная флешка и минимальное количество вопросов, задаваемое установщиком.
Для моих задач хватает флешки на 8GiB. Чтобы её создать не заморачиваясь с dd и прочими юниксовыми утилитами, я, по совету друга, возпользовался UltraISO и её возможностью писать ISO образы на флешки. Причём она не просто пишет, но ещё и подсовывает корректный вайл syslinux.cfg Для этого надо в UltraISO открыть образ SL-64-i386-2013-03-18-boot.iso (т.е. минимальный загрузочный образ) и через меню выбрать запись образа диска. В роли destination выбираем флешку. Через энсколько минут получается флешка, с которой уже можно загрузиться и попасть в инсталлятор anaconda.
Теперь можно переходить к самому кикстарту. Шаблон этого файла можно получить сделав пробную установку. По окончании установки в домашней директории пользователя root появится файл anaconda-ks.cfg, который можно будет дорабатывать напильником. Я приведу выдержки из уже готового файла. Краткие комментарии мною уже сделаны в самом файле, так что более подробно буду комментировать только отдельные моменты.

install

# Force using textmode install. Why anyone will need GUI when smoking?
# But even in this case one may need more than 384M of RAM to run install.
text

# Tell installer where ISO image is.
harddrive --partition=sda4 --dir=/

Последней строчкой я указываю инсталлятору место нахождения DVD образа SL-64-i386-2013-03-18-Install-DVD.iso. Этот образ отличается от boot.iso тем, что содержит репозитории с пакетами. В моём случае этот путь указывает инсталлатору на то, что установочный образ находится в корне раздела sda4. sda4 – это сама флешка. Т.е. установочный образ надо скопировать в корень флешки.


# No russian in console!!! Learn to read, write and understand documentation in English.
lang en_US.UTF-8
keyboard us

# Configure interface to use DHCP by default.
network --onboot=yes --bootproto=dhcp --noipv6

# Do you want to know how it looks like in palintext? ;)
rootpw --iscrypted BLAH_BLAH_BLAH

В шифрованном виде пароль, естественно, выглядит иначе ;)

# Open SSH and munin-node by default.
firewall --service=ssh --port=4949

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

# Disable SElinux. It's evil in most cases.
selinux --disabled

SELinux я готовить не умею и воевать с ним не хочу, отключаю.

# Add reboot=bios fix for Acer netbooks.
bootloader --location=mbr --driveorder=sdb,sda --append="crashkernel=auto rhgb quiet reboot=bios"

На Acer Apire One вылезла проблема – при перезагрузке они висли. Помогало только нажатие на кнопку питания. Т.к. наше оборудование должно быть максимально автономным, то эту проблему надо было решить. Покопавшись на форумах узнал, что для решения проблемы надо указать загрузчику дополнительный параметр reboot=bios.

# Clear all existing partitions on destiation disk.
clearpart --all --drives=sdb

При загрузке с флешки ядро определяет флешку как диск sda, а жёсткий диск – как sdb. Соответственно жёсткий диск я предварительно очищаю от существующих разделов.

# Don't touch our installation usb stick.
part None --fstype=efi --label="Scientific" --onpart=sda4 --noformat

Anaconda автоматом создала строчку, предотвращающую изменеия на флешке при установке. Я, естественно, решил её оставить.

# Create partitions. Set --asprimary to prevent creating extended partition.
part /boot --asprimary --fstype=ext4 --size=100
part swap --asprimary --size=256
part / --asprimary --fstype=ext4 --size=2000
# We should create this partition for further use as crypto partition.
# I can't find a way to create it without formatting.
part /var/lib/mss --asprimary --fstype=ext4 --grow --size=1024

В моём случае нужны четыре раздела – /boot, swap, / и раздел с данными /var/lib/mss. Чтобы при установке не плодились ненужные мне extended разделы, я для каждого раздела указал параметр --asprimary. Раздел /var/lib/mss в пост-инсталляционном скрипте будет сделан шифрованым. Создаю я его штаными средствами чтобы потом не развлекаться со скриптованием для fdisk. Не делаю его шифрованым штаными средствами, т.к. ключом шифрования будет являться файл с MAC-адресом и автоматизацию этого процесса так же удобнее делать в %post секции.

# Configure list of services.
services --disabled pppoe-server,mdmonitor,ip6tables,kdump
# Enable autofs for automounting flash drives with updates.
# Enable ntpd so machine can obtain correct time from NTP server if Internet connection is available.
# Enable munin-node for monitoring machines with Internet access.
services --enabled autofs,ntpd,munin-node

Тут всё понятно. Отключаю лишнее, добавляю нужное. Через services --enabled добавить можно только сервисы из базового дистрибутива или из дополнительных репозиториев. Я писал init.d скрипт для собственной программы и его добавлял уже в %post скрипте.

# Add local repos for extra packages (i.e. munin-node and gstreamer-plugins-ugly).
repo --name=SSextras --baseurl=file:///mnt/isodir/extras
repo --name=SSgst --baseurl=file:///mnt/isodir/gst

Методом тыка выяснил, как же нативно добраться до флешки во время установки. Оказалось, что инсталлятор её монтирует в /mnt/isodir. Тут я добавил два репозитория с дополнительными пакетами, которых нет в базовом дистрибутиве.
Чтобы директорию с пакетами сделать репозиторием, надо натравить на неё программу createrepo – она создаст всю необходимую структуру, понятную пакетному менеджеру. Прога есть в родном репозитории SL.

Дальше начинается более интересная часть, на которую я потратил существенное количество сил и времени. Данная информация, по большей части, была почерпнута из форумов. В официальном руководстве по kickstart’у ничего полезного про предустановочные скрипты не пишут. Результаты изысканий в следующей части.

Series NavigationКривой стартер. Интерактивность. >>
Share