Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #115, ИЮЛЬ 2008 г.

Все свое ношу с собой

Виталий «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, поддерживающий автомонтирование съемных устройств и обладающий всеми преимуществами обычного «настольного» дистрибутива. В будущем этот диск можно бесконечно улучшать, настраивать, обновлять. В общем, работать с ним, как с обычной ОС.

Подготовка

Итак, нам понадобится:

  1. Архив второй стадии
  2. Свежий набор портеджей
  3. Коллекция исходных текстов программ
  4. Утилита для работы со сжатой файловой системой squashfs и программа записи CD-дисков
  5. Приблизительно 12 часов терпения

Первые три пункта можно слить с любого зеркала Gentoo.

Чтобы получить современную, полностью работоспособную систему с KDE, нужно будет скачать около 600 Мб файлов с исходными текстами. Читатели, у которых доступ в Сеть не безлимитный, сейчас возможно немного расстроились, и это зря. Мы скачали и записали на прилагаемый к журналу диск самые актуальные на начало мая 2008-го года исходные файлы.

Четвертый пункт ставится имеющимися средствами используемой ОС.

В Gentoo это делается так:

# emerge -av squashfs-tools cdrtools

Теперь по пункту пять – или про 12 часов терпения. Gentoo относится к разряду так называемых Source Based дистрибутивов. Основная идея, лежащая в основе Gentoo, – компиляция всех пакетов из исходников на компьютере пользователя. Основным преимуществом такого подхода будет то, что все собранное ПО наилучшим образом оптимизировано под архитектуру компьютера, на котором оно собиралось. А минусы – установка программ потребует гораздо больше времени, чем в «обычных» дистрибутивах. Но здесь все зависит от мощности используемого тобой компа.

Двенадцать часов – это суммарное время компиляции всех программ на моем AMD Duron 2500 с 1 Гб ОЗУ. Если у тебя более мощная машина, следовательно, затратишь меньше времени. Особенно, если у тебя многоядерная или многопроцессорная система. Опытным путем проверено, что сборка идет ровно в два раза быстрее, чем на аналогичной однопроцессорной. Чтобы ты мог планировать свое время, я буду указывать длительность компиляции на различных стадиях.

Хотя в качестве host системы здесь описывается Gentoo – это не принципиально, собирать такой LiveCD можно на любом дистрибутиве.

Сам процесс сборки несложен, и его можно разделить на следующие этапы:

  1. Создание дерева каталогов, распаковка архива второй стадии и набора портеджей
  2. Базовая настройка второй стадии и сборка из него третьей
  3. Сборка и установка ядра, настройка загрузчика
  4. Установка скриптов для автоматического конфигурирования оборудования
  5. Настройка автоматического входа в систему
  6. Создание первого ISO образа и проверка его работоспособности
  7. Сборка KDE, русификация, установка TrueType шрифтов
  8. Настройка автоматического входа для KDM и тонкая настройка KDE
  9. Установка дополнительных приложений

Подробно рассмотрим каждый из них.

Создание дерева каталогов, распаковка архива второй стадии и набора портеджей

Для сборки 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 системе. Общий план дальнейших действий таков:

  1. Установить имя машины/домена, профиль, дописать USE флагов в make.conf, создать /etc/fstab
  2. Установить часовой пояс, перевести часы в режим Local, сгенерировать русские локали, установить русскую раскладку клавиатуры и экранный шрифт
  3. Выполнить «emerge -e system» и «emerge -e world» для получения Stage3
  4. Не забыть установить пароль root'у

Первые два пункта за нас выполнит 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 таков:

  1. Входим в LiveCD под логином livecd
  2. Производим тонкую настройку KDE, исходя из своих предпочтений (сюда входит все: начиная от шрифтов и обоев рабочего стола и заканчивая поведением окна и видом мышиного курсора)
  3. Архивируем директорию /home/livecd и записываем архив на какой-нибудь носитель
  4. Выключаем LiveCD
  5. Копируем архив с сохраненными настройками в каталог source/home
  6. Выполняем chroot в source через скрипт enter
  7. Распаковываем архив с настройками в каталог /home/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. Удачи!

Версии основных используемых пакетов

  • sys-fs/squashfs-tools-3.1_p2
  • app-misc/livecd-tools-1.0.40_pre1
  • sys-kernel/genkernel-3.4.10_pre7
  • sys-kernel/gentoo-sources-2.6.24-r3
  • sys-apps/hwdata-gentoo-0.3
  • sys-apps/hwsetup-1.2
  • x11-misc/mkxf86config-0.9.9
  • stage2-i686-2007.0.tar.bz2
  • portage-20080321.tar.bz2

DVD

Все необходимые исходные тексты для сборки своего LiveCD ты найдешь на прилагаемом к журналу DVD.

INFO

Из Википедии: «Дистрибутив LiveCD – сборка операционной системы, которая не требует установки на винчестер, а для ее запуска требуется лишь вставить в привод CD-ROM диск с дистрибутивом и настроить в BIOS загрузку с CD-ROM, после чего перезагрузить компьютер».

WWW

  • Дополнительную информацию о том, как работать с Gentoo и конкретно с утилитой для управления пакетами emerge, ты можешь получить на официальном сайте Gentoo – www.gentoo.org/doc/ru/.
  • Настоятельно рекомендую ознакомиться с книгой «Сборник статей о Gentoo Linux», содержащей более 800 страниц отборной русскоязычной документации. Скачать ее в различных форматах можно по адресу: code.google.com/p/gentoo-doc/downloads/list.
Содержание