Сборка собственного образа с помощью kickstart-файла

Материал из База знаний проекта Russian Fedora

Перейти к: навигация, поиск

Содержание

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

Устанавливаем пакет livecd-tools и готовые наборы kickstart-файлов:

$ su -c 'yum install livecd-tools fedora-kickstarts -y'

Создание своего kickstart-файла

Создаем временную рабочую директорию и переходим в нее:

$ mkdir ~/works; cd ~/works

Установленный ранее пакет fedora-kickstarts добавит несколько вариантов файлов kikstart в каталоге /usr/share/spin-kickstarts. Посмотрев их, можно определиться с выбором шаблона для собственной сборки. В настоящее время там находятся файлы kickstart как CD, так и DVD, с различием не только в размерах окончательной системы, но и в наборе программ, в том числе и рабочих столов. Для примера скопируем kickstart-файл сборки офисного пакета из Бразилии в качестве шаблона:

$ cp /usr/share/spin-kickstarts/fedora-livecd-broffice.org.ks fedora-livecd-my.ks

Просмотрим и отредактируем только что скопированный kickstart-файл: fedora-livecd-my.ks

# fedora-livecd-my.ks - имя моего kiskstart-файла (не обязательно, указывается для порядка)
#
# Description:
# - Fedora Live Gnome Desktop Spin with russian language - Краткое описание (не обязательно, указывается для порядка)
#
# Maintainer:
# - Name <login at email dot net> - Имя автора и его электроный адрес (не обязательно, указывается для порядка)

%include fedora-livecd-desktop.ks 

selinux --disabled       # отключаем selinux если он нам не нужен на flash диске

lang ru_RU.UTF-8    # язык locale
keyboard ru       # раскладка клавиатуры
timezone Europe/Moscow    # временная зона

%packages --instLangs en_US:ru_RU # какие локали оставлять в общих пакетах

# L10n packages - включение поддержки русского языка
@russian-support
hunspell-ru

# Include some additional packages
java-1.6.0-openjdk
java-1.6.0-openjdk-plugin
-empathy    # удаляем пакет empathy
pidgin       # просим установить пакет pidgin
# (далее пишем какие пакеты нужно доустановить дополнительно а какие убрать с LiveCD)
# ...
%end
# fedora-live-base.ks
#
# Defines the basics for all kickstarts in the fedora-live branch
# Does not include package selection (other then mandatory)
# Does not include localization packages or configuration
#
# Does includes "default" language configuration (kickstarts including
# this template can override these settings)

lang en_US.UTF-8
keyboard us
timezone US/Eastern
...
selinux --enforcing
...
  • именно из-за того, что фактически вам придётся исправлять не один файл kikstart, и чтобы избежать потери изначального содержимого пакета fedora-kickstarts, сделайте копию необходимых файлов из каталога /usr/share/spin-kickstarts/ в рабочий каталог. Так у вас всегда будет возможность быстро начать всё сначала, а не зависеть от вашего провайдера, например.
ПРИМЕЧАНИЕ:
В даном случае пакеты берутся из вышестоящего kickstart-файла c репозитариев описанных опцией repo. Если Вы хотите добавить свои пакеты, Вы должны создать свой локальный репозиторий и прописать это в созданом своем kickstart-файле строкой : repo --name=<name> --baseurl=<url>. Для полного ознакомления со всеми опциями kickstart-файлов можно обратиться к руководству по Опции kickstart-файлов (анг.)

Раздел %post файла kikstart

Необходим для настройки после установки всех необходимых вам пакетов. Для первой (испытательной) сборки, которую вам, возможно, удастся получить, в этом разделе можно было бы ничего не исправлять. Тем более, если вы прочитали всё, что напечатано выше, знаете о существовании нескольких таких разделов в разных файлах kikstart. На удивление, по состоянию на настоящий момент времени (03.05.2011 г.), вы не найдёте в этих разделах уж очень много повторов одного и того же действа. Думаю, что скоро этих повторений и вовсе не будет. То есть речь о том, что не стоит особенно удивляться повторяющимся настройкам gnome в разных файлах kikstart, которые вы используете в своей сборке. Для примера, чтобы не заподозрили в чём-нибудь нехорошем, из пакета fedora-kickstarts 0.14.5-1.fc14 (пока последнего из Official Fedora Spins):

Настройка экрана gnome в файле fedora-live-desktop.ks

....
# Use the animated laughlin background by default
gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults -t str -s /desktop/gnome/background/picture_filename /usr/share/backgrounds/laughlin/default-tod/laughlin.xml
....

И такая же настройка в файле fedora-livecd-desktop.ks

....
# Since we aren't including the animated backgrounds we should use the plain one
.
gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults -t str -s /desktop/gnome/background/picture_filename /usr/share/backgrounds/laughlin/default/laughlin.xml
....

Помните, что оба этих файла вам нужны, а дубляж... Что дубляж? Один файл сочинял один разработчик, а другой файл - другой разработчик. И обоим разработчикам пришлась по душе эта картинка. Ничего такого. Вы можете добавить свой набор картинок и указать где-нибудь "пониже" всех. И будут ваши картинки. Или удаляйте ненужное, добавляя своё. На примере оформления рабочего стола, куда вы можете положить свои любимые изображения, объясняется необходимость использования отдельного раздела файла kikstart %post --nochroot Если в разделе %post вы настраиваете систему, выдавая команды как бы работая в ней самой, и не можете обратиться к внешним ресурсам без особенных хитростей, то параметр --nochroot разрешает эту проблему. Тут достаточно лишь запомнить:

На примерах это выглядит так.

%post --nochroot
....
sed -i -e 's/timeout 100/timeout 20/' $LIVE_ROOT/isolinux/isolinux.cfg
sed -i -e 's/timeout 100/timeout 20/' $LIVE_ROOT/EFI/boot/isolinux.cfg
....
%post --nochroot
....
cp -f ~/works/splash.jpg $LIVE_ROOT/isolinux/splash.jpg
cp -f ~/works/splash.jpg $LIVE_ROOT/EFI/boot/splash.jpg
.....
$ cd ~/works
$ tar -czvf myshow.tar.gz myshow

И добавить в kikstart-файл:

%post
...
# set backgrounds
cd /usr/share/backgrounds
tar -zxvf myshow.tar.gz > /dev/null
chown -R root:root /usr/share/backgrounds
cd /
...
# Since we aren't including the animated backgrounds we should use the plain one
gconftool-2 --direct --config-source=xml:readwrite:/etc/gconf/gconf.xml.defaults -t str -s /desktop/gnome/background/picture_filename /usr/share/backgrounds/myshow/myshow.xml


%post --nochroot
...
cp ~/works/myshow.tar.gz $INSTALL_ROOT/usr/share/backgrounds/myshow.tar.gz
...
  • удивительно здесь то, что раздел %post --nochroot следует за разделом %post. И на первый взгляд похоже, что мы пытаемся сначала разархивировать архив, который только потом добавляем. Но это действительно сработает, если вы не будете стараться добавить в раздел %post файла kikstart свои "новшества" впереди всех предварительных и уже имеющихся настроек в избранных вами шаблонах. Я же делаю проще, чтобы не очень голова болела из-за вероятных несоответствий и нарушений порядка. Для раздела %post --nochroot создаю отдельный файл kikstart и подключаю его к основному файлу той же опцией %include (англ.)

О пользователях в собираемом LiveCD

В предлагаемых вариантах сборок, на основе файлов kikstart из пакета fedora-kickstarts, в системе есть два беспарольных пользователя: root и liveuser. Кому-нибудь и так сойдёт. Меня это не устраивает. Во-первых, я абсолютно не настаиваю, но мне не нравятся беспарольные, запускаемые в глобальную сеть. Боязно как-то и жалко если от постороннего, пусть даже и случайного вмешательства что-то начнёт пропадать или портиться. Пользователя liveuser я вообще переименовываю и назначаю пароль, а root-у просто назначаю пароль. Во-вторых, делается просто, так почему бы и не использовать?

$ sed -i -e 's/liveuser/GrigoriyEphimovichRasputin/g' ~/works/fedora-live-base.ks
# add fedora user with no passwd
action "Adding live user" useradd \$USERADDARGS -c "Live System User" GrigoriyEphimovichRasputin
passwd -d GrigoriyEphimovichRasputin > /dev/null

и назначить ему хитрый пароль 1234:

%post
...
# add fedora user with passwd
action "Adding live user" useradd \$USERADDARGS -c "Live System User" GrigoriyEphimovichRasputin
passwd -d GrigoriyEphimovichRasputin > /dev/null
echo 1234 | passwd --stdin GrigoriyEphimovichRasputin
...

С root-ом делают ещё проще. Для этой цели есть специальная опция rootpw (англ.), которую можно указать сразу же после настроек языка, времени и проч. в стартовом файле kikstart. Существует всего лишь два варианта. Либо пароль в файле kikstart надо печатать таким, каким он должен быть (--plaintext можно опустить), либо с указанием --iscrypted, что пароль зашифрован. Выбирать вам, но не ошибайтесь в букво-цифрах, если будете шифроваться в kikstart:

....
selinux --disabled
lang ru_RU.UTF-8
keyboard us
timezone Europe/Moscow
auth --useshadow --enablemd5
xconfig --startxonboot
part / --size 4608 --fstype ext4
services --enabled=NetworkManager,sshd,vsftpd --disabled=network

rootpw toor

....
%post
...
# set up timed auto-login for after 60 seconds
cat >> /etc/gdm/custom.conf << FOE
[daemon]
TimedLoginEnable=true
TimedLogin=GrigoriyEphimovichRasputin
TimedLoginDelay=60
FOE
...
Я это дело меняю на более понятное и простое:
%post
...
# set auto-login 
cat >> /etc/gdm/custom.conf << FOE
[daemon]
AutomaticLoginEnable=true
AutomaticLogin=GrigoriyEphimovichRasputin
FOE
...
$ grep -rl 'liveuser' ~/works

По идее больше не встретится. Разве что вы уже где-нибудь не подправили. Потому что:

$ grep -rl 'liveuser' /usr/share/spin-kickstarts
/usr/share/spin-kickstarts/fedora-livecd-meego.ks
/usr/share/spin-kickstarts/fedora-livecd-xfce.ks
/usr/share/spin-kickstarts/fedora-livecd-lxde.ks
/usr/share/spin-kickstarts/fedora-livecd-design-suite.ks
/usr/share/spin-kickstarts/fedora-live-mini.ks
/usr/share/spin-kickstarts/fedora-livecd-kde.ks
/usr/share/spin-kickstarts/fedora-live-desktop.ks
/usr/share/spin-kickstarts/fedora-live-base.ks
/usr/share/spin-kickstarts/fedora-livecd-soas.ks
%post
...
# set sudo

cat >> /etc/sudoers << FOE
GrigoriyEphimovichRasputin	ALL=(ALL)	NOPASSWD: /bin/mount,/bin/umount
FOE

#
....

Firewall

Возможно, появится желание держать на LiveCD(DVD), флешке или каком-нибудь другом носителе сервер. Возможно, серверов будет много. И вам придётся настраивать в сборке firewall. Если вы прочитали всё, что было напечатано выше или вы знаете эту тему, то ничего особенно нового не узнаете. Но лично мне, к сожалению, и тут пришлось попыхтеть. Считаю хорошим делом сберечь вам несколько минут, которые запросто можете потратить прописывая правила в опции firewall (англ.) вашего файла kikstart. Для настройки разрешений для портов, обеспечивающих работу тех или иных служб, сервисов и демонов явно просматриваются три пути:

...
%post
...
lokkit --service=ftp
lokkit --service=ssh
lokkit --service=http
...

Лично мне попался вариант второй, и он оказался тем самым путём, которым идти пришлось очень долго. Но теперь, зная о первом и особенно третьем варианте, мне и второй кажется довольно простым. Выбирать вам.

Сборка своего LiveCD

Собираем свой liveCD (все пакеты в этом liveCD будут самые новые на момент сборки):

$ su -c "setarch i386 livecd-creator --fslabel=Fedora-14-i686-Live-My --config=fedora-livecd-my.ks --cache=/var/cache/live"
setarch i386 - указываем нужную архитектуру;
--fslabel=Fedora-14-i686-Live-My - имя файла iso и метки диска;
--config=fedora-livecd-my.ks - с каким kiskstart файлом собирать iso;
--cache=/var/cache/live - кеш юм файлов
ВНИМАНИЕ:
Если вы используйте не только локальные репозитарии в своих kickstart файлах то требуемые пакеты будут скачиваться из internet. И скорость создания LiveCD будет зависить от вашего трафика.
ВНИМАНИЕ:
Если вы используете защиту SELinux, то вам либо придётся позаботиться о разрешениях при сборке вашего LiveCD, либо просто отключить SELinux на время сборки.

Запись полученого образа на flash-диск

Запись из консоли

Полученый образ заливаем на flash-диск:

$ su -c "livecd-iso-to-disk --reset-mbr --overlay-size-mb 256 Fedora-14-i686-Live-My.iso /dev/sdc1"
--reset-mbr - обнулять mbr файл на flash-диске;
--overlay-size-mb 256 - сделать overlay файл 256 Mb на flash-диске, в который будут записываться изменения при работе на flash-диске;
Fedora-14-i686-Live-My.iso - образ полученного LiveCD;
/dev/sdc1 - наш flash-диск (его видно командой fdisk -l), он должен быть размонтирован.

Опций у скрипта livecd-iso-to-disk, конечно же больше. Две наиболее популярные указаны выше. Кроме них есть ещё: --home-size-mb, --swap-size-mb, --crypted-home, --unencrypted-home, --delete-home, --noverify, --efi или --mactel, --format, --skipcopy, --xo, --xo-no-home, --compress, --skipcompress, --extra-kernel-args, --force, --livedir, --multi, --timeout, --totaltimeout Что они делают интуитивно понятно, а детали можно посмотреть способом разглядывания самого скрипта /usr/bin/livecd-iso-to-disk.

# /usr/bin/livecd-iso-to-disk --format --reset-mbr --overlay-size-mb 512 --livedir CON Fedora-14-i686-Live-My.iso /dev/sdc1

и теперь вы узнаете свой личный диск (или флешку) лишь взглянув на её содержимое. Наверное, особенно приятен будет такой вид корня вашего носителя, когда вы его будете разглядывать в Windows. Впрочем, именно в Windows вы и вовсе можете ничего не увидеть. Проблема опять же в опции part (англ.) и тех параметрах, которые будут указаны. Изначально в файле fedora-live-base.ks сделано так:

part / --size 3072 --fstype ext4

То есть выделяется 3 Gb под корневой раздел, а файловая система должна быть ext4. Вот и livecd-iso-to-disk запишет на флешку ext4. Если же с какой-нибудь зловещей целью вы поменяете файловую систему на vfat, то проигрываете из-за всем известного ограничения для размера файла, а ваша мега-сборка навряд ли станет эталоном. Безусловно, и тут можно кое-что придумать. Например после записи на флешку вашей сборки, разделить её на два раздела. Где первый раздел со сборкой будет в vfat, а второй - в btrfs, например. Поскольку образ системы, который вы создали и записали на флешку сжат, то у вас на 2-ух Gb без свопа, но с файлом-оверлеем в 512 Mb должно остаться не менее 150 Mb, которые можно смело использовать под второй раздел. 150 или 200 Mb - это будет зависеть прежде всего от самого носителя. Так получается, что у повстречавшихся мне 2-ух Gb флешек полезная ёмкость отличалась более чем на 100 Mb. Если же у вас общий размер собранной системы (сжатого файла), файла-оверлея, своп-файла и домашнего каталога будет больше размера устройства, на которое вы будете записывать, то livecd-iso-to-disk прекратит свою работу и выдаст диагностическое сообщение, где все эти величины будут сложены "столбиком". Домашний каталог и тот же своп при записи на флешку или диск вы можете оформить отдельными файлами, задавая их размеры параметрами для опций --home-size-mb и --swap-size-mb соответственно.

Запись с помощью графической программы

Полученый образ также можно записать на flash-диск с помощью графической программы liveusb-creator . Установим и запустим эту программу:

$ su -c 'yum install liveusb-creator -y'
liveusb-creator

Далее выбираем LiveCD образ, выбираем flash-диск, также можем указать размер overlay-файла (для хранения изменений) и нажимаем: Create LIVE USB

На другом компьютере грузимся с flash-диска, и либо просто работаeм, либо устанавливаем свой spin дистрибутива Fedora на жесткий диск!

Заключение

Таким образом достаточно легко с помощью kickstart-файла сделать свою сборку. К примеру: рабочий стол с Gnome для редактирования видеофайлов, сервер с LAMP и т.д. для работы которым не нужен будет жесткий диск.

Дополнительные материалы