Сборка собственного образа с помощью 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
- обратите внимание на опцию %include (англ.) , заданную с параметром fedora-livecd-desktop.ks, которая указывает на включение содержимого другого файла kikstart из пакета fedora-kickstarts. Здесь следует знать, что этот дополнительный файл должен быть доступен при сборке, а следовательно должен либо находиться в том же каталоге, что и исправленный только что fedora-livecd-my.ks, либо путь к fedora-livecd-desktop.ks должен быть определён. Вариантов исправить такую неприятность, когда файлы, используемые при сборке лежат в разных местах, да ещё в таких неочевидных, как /usr/share/spin-kickstarts/ не так уж и много. Например, просто скопируйте в свой рабочий каталог ~/works все необходимые файлы не меняя им имена.
- открывая по очереди (начиная со стартового fedora-livecd-my.ks) и просматривая все файлы kikstart можно обнаружить все необходимые сведения о необходимых именно вашей сборке файлах. Смотрите на параметры включения %include (англ.). Для выбранного бразильского офиса, например, понадобятся fedora-livecd-desktop.ks, fedora-live-desktop.ks, fedora-live-base.ks, fedora-live-minimization.ks.
- если вы добавляете какой либо пакет, то проследите нет ли его удаления по маске в предыдущих kiskstart-файлах, иначе ваш пакет не будет включен в сборку. И хотя это заявление в целом очень сомнительное, но звучит правильно и его следует придерживаться.
- простой пример нашей сборки, где в стартовом kikstart-файле fedora-livecd-my.ks (переименованном fedora-livecd-broffice.org.ks) установкой пакетов java-1.6.0-openjdk и java-1.6.0-openjdk-plugin делается поддержка java, а в подключаемом fedora-livecd-desktop.ks эти пакеты запрещаются к установке, и в результате получается сборка с поддержкой java не смотря на запреты, может ввести в замешательство. Но лучшим вариантом всё же было бы избегать одновременных включений и исключений пакетов, пусть даже и в разных файлах kikstart.
- тоже самое можно сказать и об опциях установки языка (англ.), временной зоны (англ.), настройках selinux (англ.), которые имеются в дополнительном (включаемом) файле fedora-live-base.ks; эти настройки, для чистоты эксперимента, лучше удалить, хотя все они, разумеется, будут проигнорированы:
# 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/ в рабочий каталог. Так у вас всегда будет возможность быстро начать всё сначала, а не зависеть от вашего провайдера, например.
- может случиться так, что в конце концов вы придёте к оригинальной мысли, что если и есть в Fedora пакеты сомнительной надобности, то их количество ничтожно мало, а потому можно добавить в свою сборку всё (или почти всё), а там уж разберёмся, мол, какой лишний. Бывает, знаете ли... Так вот, безусловно, достижения современных технологий, когда флешка на 32 Gb уже не редкость, позволят вам собрать крайне насыщенную и при этом рабочую сборку. Но при этом вам обязательно надо знать, что никто кроме вас не указывает размер корневого каталога. Всегда помните об опции part (англ.), которая непременно должна быть вами скорректирована для таких мега-сборок. В нашем варианте вы найдёте эту опцию всё в том же дополнительном файле fedora-live-base.ks О том, что бывает, когда вы не обратите на это внимание практически безответно спрашивают на форуме проекта Russian Fedora.
- c примерами файлов kikstart, всевозможными вариантами реализации того или иного изменения, применяемого целиком к сборке или к её составляющим можно ознакомиться в репозитории spin-kikstart (англ.)
Раздел %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 - это отдельный раздел в файле kikstart
- специально для этого раздела (с параметром --nochroot) предусмотрены две переменные:
- INSTALL_ROOT - путь, указывающий на корневой каталог собираемой вами системы;
- LIVE_ROOT - путь, указывающий на каталог CD(DVD) образа, то есть когда вы соберёте диск, запишите его на какой-нибудь носитель, то всё, что вы положите по адресу $LIVE_ROOT будет выложено непосредственно на самом CD(DVD).
На примерах это выглядит так.
- Утомительно ждать десять (стандартных) секунд перед началом загрузки системы. Вы считаете, что достаточно было бы и двух секунд. Добавьте в раздел %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 ....
- Захотелось сменить картинку заставки при отсчёте стандартных 10 секунд перед загрузкой. Кладём в рабочий каталог ~/works нашей сборки свою картинку splash.jpg (только, если кто ещё не в курсе, это не jpeg, а png с изменённым расширением) и добавляем в раздел %post --nochroot следующее:
%post --nochroot .... cp -f ~/works/splash.jpg $LIVE_ROOT/isolinux/splash.jpg cp -f ~/works/splash.jpg $LIVE_ROOT/EFI/boot/splash.jpg .....
- Надо добавить своих картинок на рабочий стол gnome, вместо стандартных. Собираем все картинки в отдельный каталог ~/works/myshow/. Воспользуемся услугами широко известного скрипта builds wallpaper slideshow (англ.) для создания своего слайд-шоу, назвать его не как-нибудь, а myshow.xml, и можно бы было сразу скопировать картинки и xml-файл из ~/works/myshow/ в $INSTALL_ROOT/usr/share/backgrounds/myshow/ , но для пробы неплохо было бы сохранить архив со своим слайд-шоу. Вдруг у вас не получится скопировать содержимое каталога вместе с каталогом, или в собираемой системе вы случайно забыли создать подкаталог myshow в /usr/share/backgrounds/, а для этого можно использовать раздел %post без опций, или что-то не так получилось с использованием скрипта от гугла - всегда есть повод сохранить свою работу, чтобы разобраться на месте. Конечно, здесь важен порядок что за чем следует и как именно делается, ведь вариантов, как оказывается, больше трёх, но и тут вас могут удивить некоторые моменты. Предлагаю для начала особенно не мудрить, а сжать весь каталог с картинками и файлом xml в архив. Скопировать его в собираемую систему, разархивировать там и пока не удалять сам архив:
$ 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, где встречается ~/works тильду на ваш полный путь от корня и всё будет хорошо. Подкаталог ~/works вашего домашнего каталога указан именно так с одной лишь целью - соблюдения общности в порядке указания путей.
О пользователях в собираемом LiveCD
В предлагаемых вариантах сборок, на основе файлов kikstart из пакета fedora-kickstarts, в системе есть два беспарольных пользователя: root и liveuser. Кому-нибудь и так сойдёт. Меня это не устраивает. Во-первых, я абсолютно не настаиваю, но мне не нравятся беспарольные, запускаемые в глобальную сеть. Боязно как-то и жалко если от постороннего, пусть даже и случайного вмешательства что-то начнёт пропадать или портиться. Пользователя liveuser я вообще переименовываю и назначаю пароль, а root-у просто назначаю пароль. Во-вторых, делается просто, так почему бы и не использовать?
- заменяем в fedora-live-base.ks все упоминания liveuser на "лучшее" имя GrigoriyEphimovichRasputin :
$ sed -i -e 's/liveuser/GrigoriyEphimovichRasputin/g' ~/works/fedora-live-base.ks
- дальше надо найти в 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 ....
- заменить liveuser на GrigoriyEphimovichRasputin надо будет и в fedora-live-desktop.ks. Там же есть и автоматическая регистрация пользователя в системе:
%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 ...
- заодно проверьте и все остальные файлы kikstart на предмет упоминания liveuser:
$ 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
- если вы привыкли, что простой пользователь может повысить свои привилегии, подправьте файл sudoers на свой вкус. Лично мне всегда хватает того, что пользователь может только монтировать устройства:
%post ... # set sudo cat >> /etc/sudoers << FOE GrigoriyEphimovichRasputin ALL=(ALL) NOPASSWD: /bin/mount,/bin/umount FOE # ....
Firewall
Возможно, появится желание держать на LiveCD(DVD), флешке или каком-нибудь другом носителе сервер. Возможно, серверов будет много. И вам придётся настраивать в сборке firewall. Если вы прочитали всё, что было напечатано выше или вы знаете эту тему, то ничего особенно нового не узнаете. Но лично мне, к сожалению, и тут пришлось попыхтеть. Считаю хорошим делом сберечь вам несколько минут, которые запросто можете потратить прописывая правила в опции firewall (англ.) вашего файла kikstart. Для настройки разрешений для портов, обеспечивающих работу тех или иных служб, сервисов и демонов явно просматриваются три пути:
- составить правила для iptables и банально скопировать эти файлы (для ipv4 и ipv6) в $INSTALL_ROOT/etc/sysconfig , используя раздел %post --nochroot ;
- воспользоваться опцией firewall (англ.), с помощью которой сделать необходимые разрешения в заголовке файла kikstart, там где время, язык, рутовый пароль, способ шифрования и проч. ;
- подсмотреть в скрипте livecd-creator о том, что такое опция firewall (англ.) и в разделе %post прописать выполнение lokkit с необходимыми параметрами.
- если необходим доступ по ftp, ssh и http:
... %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 - кеш юм файлов
Запись полученого образа на 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.
- Например, по какой-то очень важной причине непременно надо, чтобы образ собираемой вами системы находился на флешке, CD(DVD) не в каталоге LiveOS, как это придумано изначально, а в каталоге CON. Сделайте так:
# /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 и т.д. для работы которым не нужен будет жесткий диск.
