« Перенос LiveCD на USB-флешку | А Стрим тоже молодцы! » |
Свой LiveCD/LiveUSB на основе RHEL/Centos/Fedora
Понадобилось мне тут... Да неважно. Захотелось загрузочную флешку под конкретную задачу. Они, флешки эти, конечно сегодня достаточно дешевы, но было навязчивое желание, чтобы система на ней занимала поменьше места. Поковырял в очередной раз DSL - нет того, что нужно, да и ядро 2.4 не фонтан. На всякие кноппиксы даже не смотрел по причине слоновьего размера.
В итоге, наткнулся сперва на Fedora liveusb-creator, а потом и на livecd-creator. Первая вся из себя с GUI, но есть только под собственно Федору или Windows. Ни того, ни другого у меня под рукой нету. Ну, т.е. винда конечно в целом есть, но до нее нужно тянуться, и все равно нужен диск с федорой. Вторая оказалась несколько веселее - создает iso'шник LiveCD, который потом можно перекинуть на флешку. Собирает системы на основе Федоры/RHEL/Centos и прочих соплеменников под чутким руководством кикстарта из указанных пакетов, всасывая их из указанных источников и для тех же RHEL/Centos имеется в репе epel. А как раз под Centos у меня сервачки имеются.
Собираем LiveCD
Значит, ставим пакет livecd-tools, плюс то, что он потянет за собой. После этого в нашем распоряжении оказываются пара скриптов - livecd-creator и livecd-iso-to-disk. Первый, собственно собирает iso, второй может сделать из него флешку/винт/etc. Нам пока нужен первый.
Как уже сказано выше, работает livecd-creator под руководством кикстарта. Буквально. Можно скормить ему кикстарт, который получается в домашнем каталоге рута после установки и получить LiveCD. Но этого на не нужно. Нам нужно что поменьше. Поэтому идем в /usr/share/livecd-tools, выбираем там болванку, копируем в укромное место и начинаем точить. Я взял livecd-fedora-minimal.ks. Что писать в кикстарте, можно почитать здесь. Начало у меня выглядит так:
lang ru_RU.UTF-8
keyboard ru_win
timezone Europe/Moscow
auth --useshadow --enablemd5
selinux --disabled
firewall --disabled
part / --size 1024
network --device=eth0 --bootproto=dhcp --onboot=yes --noipv6
skipx
text
#user --name=tr510 --password=somepass --groups=wheel,root
services --disabled=messagebus,lvm2-monitor,xfs --enabled=network,sshd,crond,syslog
repo --name=base --baseurl=http://yum.fireground.ru/centos/5/os/$basearch/
repo --name=updates --baseurl=http://yum.fireground.ru/centos/5/updates/$basearch/
repo --name=epel --baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch/
Т.е. вибираем для системы русский язык и русскую раскладку клавиатуры, стандартные настройки аутентификации, отключаем selinux (кстати, не помогает) и файрвол, поднятие первого сетевого интерфеса с получением настроек по DHCP, отключаем графику и включаем/выключаем некоторые службы при загрузке. Дальше указываем из каких репозиториев брать пакеты. Первые два, это местные зеркала стандартных base и updates, третий - epel.
Далее раздел %packages. В нем указываем из чего, собственно, будем собирать систему:
%packages
@core
@russian-support
bash
kernel
passwd
policycoreutils
chkconfig
authconfig
rootfiles
perl
mysql
perl-DBD-MySQL
perl-DBI
perl-Device-SerialPort
openssh
openssh-server
vixie-cron
mc
nano
-openldap
-yum-fastestmirror
-Deployment_Guide-ru-RU
-hicolor-icon-theme
И далее в том же духе. "%packages" - название секции. Можно указывать "%packages --excludedocs", чтобы не ставились запчасти с документакией, которая, имхо, на LiveCD ни к чему. Строки начинающиеся с "@" - имена групп пакетов. Это те же группы, на которых расставляются галки при установке анакондой. Строки начинающиеся с "-" - удаление пакета из сборки. Ну и остальные - просто имена отдельных пакетов. У меня там много еще исключенных пакетов указано, все вписывать не стал, ибо сильно длинно выходит. Пакеты до "rootfiles
" включительно были сразу указаны в болванке, остальные - то что нужно уже мне. Исключать пакеты можно достаточно спокойно, т.к. сборщик либо проигнорирует это (зависимости же), либо отвалиется еще на сборке, на пример, если выкинуть из системы syslinux.
Собственно, можно уже сейчас запускать процесс сборки. Система должна будет загрузиться до логина... и все. Дальше процесс не пойдет, поскольку во-первых - пароля у рута нету, во-вторых - других пользователей не создали, в-третьих - SELinux похоже не отключается. Второй пункт я пропущу, т.к. не больно-то мне лишние пользователи нужны, лучше задам рутовый пароль. И SELinux таки нужно выключить. И поможет в этом раздел "%post", в котором указываются действия, выполняемые над уже собранной системой перед ее утрамбовкой в исошник. В данном случае нужно как минимум:
%post
(echo rootpass; sleep 1; echo rootpass; sleep 1) | passwd root
cat > /etc/selinux/config << EOF
SELINUX=disabled
SELINUXTYPE=targeted
SETLOCALDEFS=0
EOF
Далее по вкусу. Я еще сношу доки, маны, ненужные локали и кое-что по мелочи - то, что врятли приходится мне в этой системе. Эти действия выполняются в chroot'е, т.е. можно не бояться снести хостовую систему неаккуратным "rm -rf". Но как следствие - мы не можем добавить в систему того, чего нет в репозитории. Свои скрипты на пример. А нужно. Поэтому для раздела "%post" существует вариация с достаточно очевидным названием - "%post --nochroot". В ней можно как раз скопировать из хостовой системы на будующий LiveCD что-то свое, безумно дорогое и ценное. В этом разделе доступны две дополнительных переменных окружения: $INSTALL_ROOT - указывает на корень новой системы, именно сюда делает chroot простой "%post"; $LIVE_ROOT - корень исошника, здесь можно, на пример, поправить настройки isolinux или положить свой autorun. Т.е. что-то скопировать в новую систему можно командой вида:
cp /etc/resolv.conf $INSTALL_ROOT/etc/resolv.conf
Ну а по завершении создания кикстарта можно выполнить
livecd-creator --config=/path/to/our-config.ks --fslabel=CENTOSLIVE
и пойти попить чаю/кофе/пива, т.к. утрамбовка займет некоторое время. "CENTOSLIVE" будет использована как имя файла iso, метка компакта и название пункта в меню isolinux.
Если все собралось, можно грузить. Напоминаю: для проверки не обязательно переводить диски - есть же виртуалки. На пример:
qemu -cdrom CENTOSLIVE.iso -boot d
1 комментарий

Когда-то тоже сталкивался с данной проблемой. Вот мое решение:
http://www.sysadmin.md/whitepapers/Create_and_test_CentOS_LiveCD_ISOs_on_remote_server.pdf