Кривой стартер. Интерактивность.

This entry is part [part not set] of 5 in the series kickstart

Мне была нужна возможность ввода дополнительной информации при установке. Долго бился и искал решение, но всё же нашёл. Довольно удобное и элегантное. Для решения подобных задач можно использовать секцию %pre. Скрипты из этой секции выполняются ДО запуска установки Linux на жёсткий диск.

%pre
mkdir /tmp/flash
mount /dev/sda4 /tmp/flash

Монтирую флешку в /tmp, так как на момент запуска %pre к ней ещё нет доступа. Манёвр нужен для разделения kickstart на файлы. В дополнительных файлах отдельно прописаны секции %packages и %post, чтобы не делать один большой километровый конфиг.


chvt 6
exec /dev/tty6 2>/dev/tty6

А вот это тот код, который позволяет добавить кастомной интерактивности в процесс установки. Я переключаюсь на шестой виртуальный терминал и перенаправляю на него stdin, stdout и stderr.
# Read MAC address and hostname from stdin.
echo "-- MAC configuration --"
mac=ifconfig eth0 | awk '/HWaddr/{print $5}'
echo -n "Current MAC address is $mac ( enter alternative MAC or press return ): "
read _altmac
# Convert MAC to uppercase as in ifconfig output.
altmac=echo $_altmac | awk '{print toupper($0)}'

[ -n “$altmac” ] && mac=$altmac
echo “MAC was set to $mac”
# Store variable in temporary file. It will be used in %post section.
echo “$mac” > /tmp/mac.txt
Запрашиваю MAC-адрес, который будет использоваться в роли ключа шифрования. Да, я знаю, это абсольютно не безопасно, но такой ключ шифрования – банальная защита от дурака.
Так как в выводе ifconfig MAC-адрес идёт в верхнем регистре, то я автоматом конвертирую введённую информацию в верхний регистр. Если не вводить MAC, то будет использоваться текущий MAC интерфейса eth0. Значение сохраняю в /tmp для дальнейшего использования.

echo "-- Hostanme configuration --"
echo -n "Enter hostname: "
read _host
# Store hostname in lower case. Upper case breaks at least munin-node.
host=echo $_host | awk '{print tolower($0)}'

# Store variable in temporary file. It will be used later in %post section.
echo “Hostname was set to $host”
echo “$host” > /tmp/hostname.txt
Дабы долго не тыркаться в сетевых настройках инсталлятора, я имя машины буду задавать так же скриптом. Плюс проверка чтобы имя было в нижнем регистре. Напирмер munin не опрашивает свои ноды, у которых имена содержат символы в верхнем регистре.

sleep 5
Даю возможность в течение пяти секунд созерцать содеянное и….
chvt 1
exec /dev/tty1 2> /dev/tty1
%end

… переключаюсь обратно на первую консоль, в которй запущенная anaconda приступает к дальнейшей работе.

%include /tmp/flash/ks/packages.cfg
%include /tmp/flash/ks/post.cfg

Вот для этого момента я монтировал флешку в /tmp/flash. Про %include с локального носителя в документации, ессно, ничего толком не написано.

Предварительный этап закончен, больше никаких вопросов установщик не задаст (если только на жёстком диске не было до этого RAID, или если жёсткий диск только из упаковки извлечён).
Можно идти кури^Wпить чай, пока создаются разделы, устанавливаются пакеты и шуршат скрипты из секции %post. Про пакеты писать особо нечего, хотя один нюанс есть. Наибольший интерес представляет секция %post, о которой речь пойдёт через главу.

Series Navigation
Share

One thought on “Кривой стартер. Интерактивность.

  1. Pingback: Кривой стартер. Начало. | linklevel.net

Comments are closed.