Все свое ношу с собойВиталий «Pizgin» Шишорин (pizgin@gmail.com) Хакер, номер #115, стр. 115-086-1 Собираем LiveCD на базе Gentoo LinuxТебе нравится идея LiveCD? Ты уже давно подумываешь о том, как создать свой идеальный дистрибутив? Эта статья специально для тебя. Сделай свой собственный диск. Наполни его самыми полезными и актуальными программами, бери его с собой и раздавай друзьям. Почувствуй себя настоящим дистростроителем! ВведениеБез преувеличения можно сказать, что все, кто хотя бы мало-мальски знаком с Linux системами, видели и знают, что такое LiveCD. Гибкость и возможности применения живых дистрибутивов сложно недооценить. Кроме основного их назначения – служить своего рода реаниматорами – существуют версии, разработанные для запуска игр, просмотра DVD, прослушивания музыки, проверки безопасности сети, обучения и т.д. Администраторы применяют LiveCD для восстановления сбойных систем. Программист, создав свой проект, может записать его на LiveCD и пойти на встречу к заказчику. Ну а рядовому пользователю просто приятно иметь при себе заточенный под его нужды диск со всеми необходимыми для работы программами. LiveCD активно применяются не только в IT-сфере, но и на производстве. Например, разработчики игровых автоматов и электронных киосков для упрощения обновления внутреннего ПО используют в своих изделиях вместо жестких дисков связку CDROM+LiveCD. Сегодня мы рассмотрим, как можно собрать свой собственный LiveCD. В качестве основы будет использоваться мета дистрибутив Gentoo Linux, который славится невероятной гибкостью настройки, скоростью и продуманностью инструментов. Абсолютно все программы, начиная от архиватора и заканчивая KDE, мы будем компилировать из исходников. После выполнения всех пунктов у нас получится полностью русифицированный LiveCD-диск, включающий все необходимые драйверы, программы, KDE, поддерживающий автомонтирование съемных устройств и обладающий всеми преимуществами обычного «настольного» дистрибутива. В будущем этот диск можно бесконечно улучшать, настраивать, обновлять. В общем, работать с ним, как с обычной ОС. ПодготовкаИтак, нам понадобится:
Первые три пункта можно слить с любого зеркала Gentoo. Чтобы получить современную, полностью работоспособную систему с KDE, нужно будет скачать около 600 Мб файлов с исходными текстами. Читатели, у которых доступ в Сеть не безлимитный, сейчас возможно немного расстроились, и это зря. Мы скачали и записали на прилагаемый к журналу диск самые актуальные на начало мая 2008-го года исходные файлы. Четвертый пункт ставится имеющимися средствами используемой ОС. В Gentoo это делается так: # emerge -av squashfs-tools cdrtools Теперь по пункту пять – или про 12 часов терпения. Gentoo относится к разряду так называемых Source Based дистрибутивов. Основная идея, лежащая в основе Gentoo, – компиляция всех пакетов из исходников на компьютере пользователя. Основным преимуществом такого подхода будет то, что все собранное ПО наилучшим образом оптимизировано под архитектуру компьютера, на котором оно собиралось. А минусы – установка программ потребует гораздо больше времени, чем в «обычных» дистрибутивах. Но здесь все зависит от мощности используемого тобой компа. Двенадцать часов – это суммарное время компиляции всех программ на моем AMD Duron 2500 с 1 Гб ОЗУ. Если у тебя более мощная машина, следовательно, затратишь меньше времени. Особенно, если у тебя многоядерная или многопроцессорная система. Опытным путем проверено, что сборка идет ровно в два раза быстрее, чем на аналогичной однопроцессорной. Чтобы ты мог планировать свое время, я буду указывать длительность компиляции на различных стадиях. Хотя в качестве host системы здесь описывается Gentoo – это не принципиально, собирать такой LiveCD можно на любом дистрибутиве. Сам процесс сборки несложен, и его можно разделить на следующие этапы:
Подробно рассмотрим каждый из них. Создание дерева каталогов, распаковка архива второй стадии и набора портеджей Для сборки LiveCD и последующей удобной его поддержки нужно продумать и создать структуру каталогов, где будет проходить сборка и обновление системы. Для себя я сделал такой выбор: . `-- livecd |-- conf |-- distrib |-- scripts |-- source `-- target В директории conf будем собирать свои конфигурационные файлы. В distrib скопируем то, из чего, собственно, и собирается LiveCD – набор портеджей, архив второй стадии, исходные файлы всех необходимых пакетов и, возможно, какие-то картинки и прочий пользовательский контент. Директория scripts предназначена для сборочных и вспомогательных скриптов. Каталог Target нужен для обработки готового дистрибутива и создания из него образа для записи на CD. Под «обработкой» подразумевается удаление сборочных каталогов, файлов справки, исходников ядра и прочих вещей, которые не нужны на LiveCD, и, удалив их, мы получим больше места для других файлов и программ. Сам дистрибутив будет находиться в каталоге source. Дерево каталогов нужно распаковать на жесткий диск. Куда распаковывать, в принципе, без разницы, лишь бы на этом разделе было свободно, как минимум, 5 Гб. Переходим в корень созданного дерева. Все последующие шаги будут выполняться именно здесь. $ cd ~/livecd Принимаемся за архив второй стадии и набор портеджей: # tar -C source -pxjvf distrib/stage2-i686-2007.0.tar.bz2 # tar -C source/usr -xjvf distrib/portage-20080321.tar.bz2 Базовая настройка второй стадии и сборка третьей. Сейчас система распакована в каталог source. Можно переходить (как еще говорят, chroot'иться) в собираемую систему и начинать подгонять ее под свои запросы. Но перед этим дам маленький совет. Работа в source окружении будет занимать большую часть времени, и чтобы легко отличать консоль в песочнице от консоли основной системы, рекомендую для первой изменить приглашение командной строки и вместо «#» написать, например, «(LIVECD) #». Для этого копируем заготовленный в conf директории файл root/bashrc в каталог source/root/ (добавив в начало названия точку). # cp conf/root/bashrc source/root/.bashrc Также скопируем в source/root скрипт prepare. Он поможет нам провести базовую настройку и русификацию нашего дистрибутива. # cp scripts/inside_livecd/prepare source/root/ Если ты планируешь из chroot окружения качать какие-то файлы из Сети, тогда предварительно скопируй конфиг /etc/resolv.conf в source/etc: # cp /etc/resolv.conf source/etc/ Переходим в chroot окружение: # cd scripts # ./enter Если все прошло нормально, то на экране не должно быть никаких ругательных сообщений, а приглашение командной строки будет выглядеть так: (LIVECD) # Сейчас мы находимся в только что распакованной из stage2 системе. Общий план дальнейших действий таков:
Первые два пункта за нас выполнит prepare. Открой этот скрипт в текстовом редакторе и убедись, что тебя все устраивает (например, название livecd, переключатель раскладки клавиатуры и пр.). Итак, начинаем: 1. Подготавливаем и русифицируем систему: (LIVECD) # /root/prepare 2. Устанавливаем основные утилиты для управления пакетами: (LIVECD) # emerge -av gentoolkit Примечание: при первом запуске команды emerge по экрану должны проскочить текстовые блоки вида «Performing Global Updates:...» – это нормально. 3. Собираем Stage3. На момент написания статьи в дистрибутиве замечен небольшой нюанс с установкой Perl, поэтому перед выполнением «emerge -e system» необходимо выполнить следующее: (LIVECD) # emerge --oneshot gdbm db (LIVECD) # emerge -N --oneshot --nodeps perl Пересобираем систему: (LIVECD) # emerge -e system Возможно, где-то на середине сборка system прервется с ошибкой на пакете sys-apps/attr. Выглядеть ошибка будет так: «libexpat.so.0: cannot open shared objects file: No such file or directory». Если это случилось, создаем символическую ссылку с libexpat.so на libexpat.so.0 и пробуем продолжить сборку: (LIVECD) # ln -s /usr/lib/libexpat.so /usr/lib/libexpat.so.0 (LIVECD) # emerge --resume Обновляем конфигурационные файлы установленных приложений: (LIVECD) # dispatch-conf Здесь нужно быть внимательным и не затереть те конфигурационные файлы, которые мы сами изменяли (или их изменил скрипт prepare). Это касается русского шрифта, раскладки клавиатуры и прочего. В общем, прежде чем в ответ на вопрос dispatch-conf'a жать 'u', внимательно посмотри, какой файл он хочет обновить. Если это файлы: clock, consolefont, hostname или keymaps, жми 'z' (не обновлять). Проверяем целостность зависимостей системы: (LIVECD) # revdep-rebuild То же самое и про мир. Пересобираем, обновляем конфигурационные файлы, проверяем целостность зависимостей: (LIVECD) # emerge -e world (LIVECD) # dispatch-conf (LIVECD) # revdep-rebuild Пересборка system на AMD Duron 2500 заняла 4 часа 30 мин, world – 4 часа 20 минут. 4. Задаем пароль root'а: (LIVECD) # passwd Сборка и установка ядра, плюс настройка загрузчика Устанавливаем и компилируем ядро: (LIVECD) # emerge -av gentoo-sources Устанавливаем утилиту для автоматической сборки ядра: (LIVECD) # emerge -av genkernel Пакет genkernel должен быть >=3.4.10_pre4. На момент написания статьи такой версии в стабильной ветке не было. Если у тебя то же самое, разрешаем устанавливать его из тестовой (~x86). Для этого выполним: (LIVECD) # echo 'sys-kernel/genkernel ~x86' >> \ /etc/portage/package.keywords Устанавливаем splash темы для красивой графической загрузки: (LIVECD) # emerge -av splash-themes-livecd Собираем ядро: (LIVECD) # genkernel all --menuconfig --splash=livecd-2007.0 Появится стандартный диалог настройки ядра. Если что-то нужно изменить – меняем. Если нет – выбираем exit и выходим. Сборка на AMD Duron 2500 заняла 45 минут, так что запасись терпением. Устанавливаем загрузчик: (LIVECD) # emerge -av syslinux (LIVECD) # mkdir /boot/isolinux (LIVECD) # cp /usr/lib/syslinux/isolinux.bin /boot/isolinux (LIVECD) # cp /boot/kernel-genkernel-x86-2.6.24-gentoo-r3 \ /boot/isolinux/vmlinuz (LIVECD) # cp /boot/initramfs-genkernel-x86-2.6.24-gentoo-r3 \ /boot/isolinux/initrd.igz Из директории с конфигурационными файлами копируем в /boot/isolinux файл isolinux.cfg. Устанавливаем и добавляем в автозагрузку Gentoo LiveCD скрипты Снимаем маскировку (установлена разработчиками, чтобы предупредить о том, что скрипты предназначены только для использования вместе с livecd): (LIVECD) # echo 'app-misc/livecd-tools' >> /etc/portage/package.unmask (LIVECD) # echo 'x11-misc/mkxf86config' >> /etc/portage/package.unmask (LIVECD) # echo 'sys-apps/hwsetup' >> /etc/portage/package.unmask (LIVECD) # emerge -av livecd-tools Не спеши отвечать 'yes'. Лучше внимательно посмотри на список предлагаемых пакетов, библиотека libkudzu должна предлагаться версии не ниже, чем 1.2.57.1. Если будет устанавливаться более старая версия, отвечаем 'no' и разрешаем libkudzu из тестовой ветки. Вот так: (LIVECD) # echo 'sys-libs/libkudzu ~x86' >> /etc/portage/package.keywords После повторной команды «emerge -av livecd-tools» должна быть предложена более новая версия. Затем добавляем пакет в автозагрузку: (LIVECD) # rc-update add autoconfig default Создаем пользователя, с правами которого будем работать: (LIVECD) # useradd -m -G users,wheel,audio,video,cdrom,cdrw,usb \ -s /bin/bash livecd Устанавливаем пароль: (LIVECD) # passwd livecd Настраиваем автоматический вход в систему 1. Устанавливаем mingetty: (LIVECD) # emerge -av mingetty 2. Прописываем его в /etc/inittab вместо agetty. Строку: c1:12345:respawn:/sbin/agetty 38400 tty1 linux Нужно исправить на: c1:12345:respawn:/sbin/mingetty --autologin livecd --noclear tty1 3. Правим файл /sbin/rc. Находим секцию «Updating inittab» (приблизительно, строка 500) и делаем ее такой: if [ -f "/sbin/livecd-functions.sh" -a -n "${CDBOOT}" ] then ebegin "Updating inittab" /bin/true #livecd_fix_inittab eend $? /bin/true #/sbin/telinit q &>/dev/null fi Создание ISO образаВыходим из chroot окружения и запускаем скрипт build.sh: (LIVECD) # exit # ./build.sh Процесс сборки образа длится примерно минут пять. После чего забираем ISO файл в директории livecd. Объем ~154 Мб. Можно записать его на болванку, но лучше для этих целей поставить VirtualBox или VMWare, потому как – удобнее и быстрее. Записать на CD можно так: # cdrecord -v -eject speed=10 fs=8m dev=/dev/cdrw image.iso Или, если это DVD, то так: # growisofs -dvd-compat -Z /dev/dvd=image.iso Образ должен загрузиться. Когда дойдет до приглашения, будет произведен автоматический вход под пользователем livecd. Поздравляю, полдела сделано. Сейчас желательно создать архив с каталогом livecd на случай, если при дальнейших манипуляциях что-нибудь пойдет не так (можно будет откатиться). Установка KDEУстанавливаем Xorg и драйвер nVidia: (LIVECD) # emerge -av xorg-xserver (LIVECD) # emerge -av nvidia-drivers Правим таблицу соответствия устройство-драйвер для nVidia карт. Открываем файл /usr/share/hwdata/Cards, находим строку NAME NVIDIA Legacy и меняем название драйвера 'vesa' на 'nv'. Далее находим строку NAME NVIDIA GeForce и меняем название драйвера с 'vesa' на 'nvidia'. Теперь добавляем строки для работы с видеоадаптером VirtualBox (пригодится, если ты будешь проводить отладку с помощью этой программы). (LIVECD) # echo 'NAME VirtualBox' >> /usr/share/hwdata/Cards (LIVECD) # echo 'DRIVER vesa' >> /usr/share/hwdata/Cards Устанавливаем минимальный набор KDE: (LIVECD) # emerge -av kdm kdebase-startkde kde-i18n Установка всех пакетов из этого набора заняла у меня 4 часа 30 минут. Добавляем в автозапуск xdm и указываем в нем запускаемый оконный менеджер. В файле /etc/conf.d/xdm переменной DISPLAYMANAGER присваиваем значение «kdm»: (LIVECD) # rc-update add xdm default Настройка автомонтирования съемных устройств: (LIVECD) # emerge -auv dbus hal pmount (LIVECD) # rc-update add dbus default (LIVECD) # rc-update add hald default В файл /etc/conf.d/local.start добавляем команду для автоматического создания каталога media. В нем будут создаваться точки монтирования для всех съемных устройств. (LIVECD) # echo 'mkdir /media' >> /etc/conf.d/local.start Включаем русскую раскладку и переключатель en/ru. Для этого: 1. Открываем файл /usr/sbin/mkxf86config.sh и удаляем строку вида: "-e 's|"XkbLayout" *"[^"]*"|"XkbLayout" [...] 2. Открываем файл /etc/X11/xorg.conf.in и в секции InputDevice, Keyboard0 меняем последние три строчки на следующие: Option "XkbLayout" "us,ru(winkeys)" Option "XkbVariant" "us" Option "XkbOptions" "grp:alt_shift_toggle,grp_led:scroll" Если у тебя есть набор TrueType шрифтов, таких, как Arial, Tahoma, Courier New, то их нужно положить в какой-нибудь каталог, например ttfonts, и скопировать его в /usr/share/fonts. Затем: (LIVECD) # cd /usr/share/fonts/ttfonts (LIVECD) # chmod 644 * (LIVECD) # mkfontdir (LIVECD) # mkfontscale (LIVECD) # fc-cache -fv Открываем файл /etc/X11/xorg.conf.in и добавляем в секцию Files следующую строку: FontPath "/usr/share/fonts/ttfonts/" Если такого набора шрифтов у тебя нет, можно поставить пакет corefonts, который включает в себя около семи шрифтов (но в нем нет Tahoma и Lucida Console). Делается это так: (LIVECD) # emerge -av media-fonts/corefonts Настройка автоматического входа для KDM и тонкая настройка KDEВ этом разделе нам нужно будет еще раз создать iso образ и один раз с него загрузиться. Как уже было написано выше, это можно сделать при помощи VMWare или VirtualBox. Общий план работ с новым LiveCD таков:
Получается, при входе под учетной записью livecd пользователя будет ждать красиво оформленный и настроенный рабочий стол. Осталось только сделать так, чтобы вход был автоматический. Для этого открываем файл /usr/kde/3.5/share/config/kdm/kdmrc и раскомментируем следующие строки: NoPassEnable=true AutoLoginEnable=true AutoLoginUser=joe Обрати внимание на строку AutoLoginUser. Так как логин нашего пользователя отличается от предложенного, меняем значение joe на livecd. Установка дополнительных приложенийТеперь у нас есть готовый, но еще «голый» LiveCD диск (без программ пользователя). Желательно сделать архивную копию (всего каталога, где велась разработка). Если в дальнейшем что-нибудь пойдет не так, можно будет его распаковать и начать работу с этого момента. Сейчас самое время начать устанавливать и настраивать свои приложения. Самыми популярными, полагаю, будут Konsole, MidnightCommander и Vim. Чтобы установить их, набираем: (LIVECD) # emerge -av mc vim (LIVECD) # emerge -av konsole Все остальные приложения устанавливаются по аналогии. Все пункты пройденыВот, в принципе, и все. Собраны основные пакеты, затрачено громадное количество процессорного времени. Теперь у тебя есть собственный полностью работоспособный LiveCD. Настраивать и улучшать можно до бесконечности, главное, знать чувство меры. Заточи LiveCD для какой-то конкретной цели. Дай название своему дистрибутиву и расскажи о нем друзьям. Может, уже через пару месяцев твой диск будет в десятке лучших на distrowatch.com. Если какой-то определенной задачи нет, попробуй сделать копию своей рабочей машины и бери его с собой. Теперь, где бы ты ни находился, у тебя всегда будет под рукой удобная и максимально настроенная система. По всем вопросам пиши на pizgin@gmail.com. Удачи! Версии основных используемых пакетов
DVDВсе необходимые исходные тексты для сборки своего LiveCD ты найдешь на прилагаемом к журналу DVD. INFOИз Википедии: «Дистрибутив LiveCD – сборка операционной системы, которая не требует установки на винчестер, а для ее запуска требуется лишь вставить в привод CD-ROM диск с дистрибутивом и настроить в BIOS загрузку с CD-ROM, после чего перезагрузить компьютер». WWW
|