Создание специализированных Linux-дистрибутивов вроде MoviX

За последние несколько лет освоена значительная часть потенциальных возможностей Linux на платформе х86, но целое поле приложений всё еще остается неразработанным. Я имею в виду специализированные мини-дистрибутивы, а именно дистрибутивы, которые на CD, содержат только софт, нужный для запуска какого-то приложения, и автоматически запускают это приложение при загрузке. То есть они используют Linux, только чтобы обеспечить основу для запуска какого-либо приложения прямо с CD. В данной статье будет предложен рецепт сборки таких систем.



Автор оригинала: Roberto de Leo

Прочитать оригинал >>



Как собрать свой собственный специализированный дистрибутив.




За последние несколько лет освоена значительная часть потенциальных возможностей Linux на платформе х86, но целое поле приложений всё еще остается неразработанным. Я имею в виду специализированные мини-дистрибутивы, а именно дистрибутивы, которые 'живут' на CD, содержат только софт, нужный для запуска какого-то приложения, и автоматически запускают это приложение при загрузке. То есть они используют Linux, только чтобы обеспечить основу для запуска какого-либо приложения прямо с CD.



Приведу конкретный пример. Предположим, что любимые аудио-, видеофайлы вы храните на CD в нескольких форматах типа DivX, XviD, MP3, Ogg Vorbis и др. Как правило, при попытке воспроизвести файлы на компьютере, отличном от вашего, может случиться следующее: на компьютере отсутствует жесткий диск; нет плеера, способного воспроизвести ваши файлы; нужный кодек не установлен; или всё это есть, но качество воспроизведения неудовлетворительное, несмотря на приличные аппаратные возможности компьютера.



Теперь представьте, что вместе с вашими файлами вы также записали на CD и мини-Linux-систему, которая способна загружаться непосредственно с CD и автоматически воспроизводить все файлы, находящиеся на нем. Такой компакт-диск был бы самодостаточным. Не нужно волноваться из-за отсутствия кодеков и вы будете уверены, что все ресурсы компьютера направлены только на воспроизведение. Фактически можно воспроизводить ваши файлы на компьютере без жесткого диска. И, конечно, как только захотите, вы сможете воспроизвести файлы с этого CD под вашей любимой операционной системой.



Такая философия не ограничена воспроизведением аудио и видео. Можно создать Linux мини-дистрибутив для любого приложения, включая игры, текстовые редакторы, мультимедиа-редакторы, программы сетевого вещания и т.д.



Позвольте мне показать главные преимущества таких мини-дистрибутивов:



- Не тратится место на жестком диске;


- Дистрибутив готов к использованию в любой момент;

- Запускается даже на бездисковой машине;

- Запускается даже там, где нет Linux, помогая его распространению.



Идея дистрибутивов 'live-CD' не нова. Существует много хороших примеров как больших (DemoLinux, Knoppix), так и маленьких (LinuxBBC, Devil-Linux) дистрибутивов. Но я нашел очень мало примеров именно специализированных дистрибутивов (см. раздел 'Ресурсы' в конце этой статьи).



В частности, несколько месяцев назад я искал в Сети мини-дистрибутив Linux, который мог бы загружаться и автоматически воспроизводить аудио/видео файлы с CD. Я был очень удивлен ничего не найдя. Единственной возможностью заполучить такой дистрибутив была его самостоятельная разработка, поэтому я начал работу над MoviX. Я не линукс-гуру и мои знания о воспроизведении медиафайлов близки к нулю, но прелесть открытого ПО в том, что вы можете собрать вместе программы, разработанные людьми, знающими больше вас и создающими что-то действительно новое и полезное. Я сложил воедино свои знания по работе с дистрибутивом Slackware (я любитель Slackware с 1994), MPlayer (мультимедийный проигрыватель), IsoLinux (удобный CD-загрузчик) и начал собирать свой дистрибутив.



Первоначально MoviX был представлен единственным мини-дистрибутивом, но после многочисленных откликов и запросов пользователей, проект разделился на три:



- eMoviX: мини-дистрибутив Linux (~7MB), предназначенный для записи на CD вместе с аудио-, видеофайлами, способный загружаться и автоматически воспроизводить все файлы с CD;


- MoviX: мини-дистрибутив Linux (~15MB), способный загружаться и запускать в консольном режиме интерфейс MPlayer;

- MoviX2: мини-дистрибутив Linux (~30MB), содержащий XFree86 4.2.0, способный загружаться и запускать gmplayer (GUI-интерфейс MPlayer).



Если вы используете MoviX или MoviX2, то после загрузки вы можете извлечь загрузочный CD и воспроизводить большинство типов аудио/видео CD/DVD. Короче говоря, если eMoviX делает ваш CD самодостаточным, MoviX и MoviX2 является некоей разновидностью мультимедийного 'швейцарского ножа', способного превратить любой ПК в мощную мультимедийную станцию. И даже на P200MMX благодаря MPlayer можно добиться качественного воспроизведения.



Цель этой статьи - показать, что разработка специализированного мини-дистрибутива не является сложной задачей если соблюдать несколько правил. Нижеследующим описанием основных шагов, которые я прошел при сборке MoviX, я надеюсь поспособствовать появлению большего количества подобных дистрибутивов. Единственное требование - вы должны быть знакомы с процессом конфигурации и компиляции ядра и модулей.





Компиляция ядра





Во-первых, убедитесь, что ядро будет скомпилировано с поддержкой RAM-диска и loopback device.




Кроме того, лучше будет держать ядро вашей рабочей системы отдельно от ядра, используемого для нового дистрибутива. Поэтому скачайте последнюю стабильную версию ядра и распакуйте его в директорию, отличную от директории где находится ядро системы.



Установки конфигурации ядра по умолчанию близки к тому, что нам нужно. Тем не менее, находясь в директории с ядром нового дистрибутива, запустите make menuconfig и добавьте поддержку следующих модулей:



* Code maturity level options ---> Prompt for development and/or incomplete code/drivers

* Processor type and features ---> Processor family: [выберите Pentium-MMX]

* Block device ---> Loopback device support


* Block device ---> RAM disk support

* Block device ---> Initial RAM disk (initrd) support

* File systems ---> /dev file system support [выберите опцию "Automatically mount at boot"]



После этого запустите make bzImage для сборки ядра.






Создание файловой системы





Файл initrd (init Ram Disc) содержит корневую файловую систему дистрибутива. Наш первый initrd будет содержать только системные файлы, поэтому 5 Мб будет достаточно:



dd if=/dev/zero of=/dev/ram0 bs=1k count=5000

mke2fs -m0 /dev/ram0 5000

mount /dev/ram0 /distro



Вместо множества маленьких пакетов мы будем использовать стандарт де-факто для мини-дистрибутивов - пакет Busybox ('швейцарский нож встраиваемой Linux').




Инструкции по компиляции очень просты (пакет хорошо документирован), но, возможно, вы также захотите взглянуть на статью Брюса Перенса в 'Embedded Linux Journal' . Я предлагаю скомпилировать Busybox с поддержкой всех возможных команд, т.к. большинство из них нам понадобится. Не забудьте установить Busybox командой ./install.sh /distro , чтобы ссылки на все команды, поддерживаемые вашей копией Busybox, автоматически были созданы в /distro.



Библиотеки обычно подсоединяются динамически. Для экономии места можно скомпилировать Busybox 'статически', но в дальнейшем мы собираемся добавлять в дистрибутив разнообразные пакеты, поэтому так или иначе надо оставить поддержку динамических библиотек. Для добавления библиотек, необходимых для работы какого-нибудь пакета, например Busybox, надо выполнить следующие действия:



- Получить список присоединяемых библиотек:



root# ldd busybox

libc.so.6 => /lib/libc.so.6 (0x40028000)


/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)



- Скопировать всё в /distro/lib/





Чтобы уменьшить размер библиотек, нужно удалить все отладочные (debug) файлы:



objcopy --strip-debug /lib/libc.so.6 /distro/lib/libc.so.6



В завершение нужно добавить несколько конфигурационных файлов: /distro/etc/inittab, /distro/etc/rc.d/rc.S, /distro/etc/fstab, /distro/etc/shells и /distro/etc/profile. Вот их примеры:




- /etc/inittab (пример) :



# Boot-time system configuration/initialization script.

::sysinit:/etc/rc.d/rc.S



# Start a shell on the console

::respawn:-/bin/sh



# It is always good to have at least another console


vc/2::askfirst:-/bin/sh



# Reboot when ctrl-alt-del keys are pressed.

::ctrlaltdel:/sbin/reboot



# Stuff to do before halting or rebooting.

::shutdown:/sbin/swapoff -a >/dev/null 2>&1

::shutdown:/bin/umount -a -r >/dev/null 2>&1






- /etc/rc.d/rc.S (пример) :



#!/bin/ash



/bin/mount -av -t nonfs





- /etc/fstab (пример) :




none /proc proc defaults 0 0





- /etc/shell (пример) :



/bin/sh

/bin/ash

/bin/bash






- /etc/profile (пример) :



PATH="$PATH:/bin:/sbin:/usr/bin:/usr/sbin:"

LESS=-MM

TERM=linux

HOME=/root

PS1='MoviX:w# '

PS2='> '


ignoreeof=10

export PATH DISPLAY LESS TERM PS1 PS2 HOME ignoreeof





Также необходимо добавить несколько директорий: /distro/dev, /distro/mnt, distro/proc, /distro/root и /distro/tmp. Нет необходимости создавать устройства в /distro/dev, т.к. демон devfs автоматически создает их во время загрузки.



Наконец, создаем файл initrd:



umount /dev/ram0

dd if=/dev/ram0 of=initrd bs=1k count=5000




Чтобы проверить, всё ли в порядке, можно смонтировать initrd и посмотреть его содержимое:



mount initrd /distro -o loop

ls -lR /distro



После этого не забудьте размонтировать и сжать его gzip'ом.



Перед прожигом CD, будет хорошей идеей загрузиться с образом initrd для его тестирования. Создайте директорию /initrd в вашей системе, поместите туда bzImage и initrd.gz, переименуйте bzImage в vmlinuz и добавьте строки из Listing 1 в lilo.conf.



Listing 1. Добавляем строки в lilo.conf




# Linux bootable partition config begins

image = /initrd/vmlinuz

initrd = /initrd/initrd.gz

append = "root=/dev/ram0 init=/linuxrc rw load_ramdisk=1 prompt_ramdisk=0

ramdisk_size=5000"

label = Distro

read-only

# Linux bootable partition config ends




Запустите LILO, перезагрузитесь и выберите из списка 'Distro' для загрузки вашего нового дистрибутива.




Страницы:
1 2

Похожие новости

Комментариев 0