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

Создание CD





Для создания загрузочного CD, содержащего созданные нами ядро и файловую систему, нам нужен загрузочный образ. Наиболее удачным выбором является загрузочный образ IsoLinux, называемый isolinux.bin и являющийся частью пакета SysLinux.



Начнем с создания новой директории, например /cdrom. Затем создадим директорию /cdrom/isolinux/kernel; поместим файлы initrd.gz и isolinux.bin в /isolinux и ядро в isolinux/kernel. Наконец, отредактируйте isolinux.cfg в директории /isolinux (см. Listing 2):



Listing 2. Пример файла isolinux.cfg




default Distro

prompt 1

timeout 100

F1 f1.txt

F2 f2.txt

label Distro

kernel kernel/vmlinuz

append initrd=initrd.gz load_ramdisk=1 ramdisk_size=5000 rw root=/dev/ram0

label hd


localboot 0x80



Пример файла f1.txt :



Welcome to my Distro!

Available boot labels:

Distro (default): boot from CD

hd: boot from HD



Пример файла f2.txt :




Credits:

Me (me@my.house)



Формат этого файла совпадает с форматом lilo.conf. Для детальной информации посетите сайт SysLinux .



Хорошей идеей является возможность вызова в процессе загрузки до 10 текстовых файлов (используя клавиши F1-F10). Это дает возможность пользователю получить доступ к документации о параметрах загрузки непосредственно во время неё. Для дистрибутива нашего типа это является полезной возможностью.



Другая приятная возможность - это способность во время загрузки показывать изображение вместо текста, например, логотип дистрибутива (поддерживается всего 16 цветов, тем не менее, попробуйте пакет BootScriptor ).




Для сборки загрузочного образа CD, запустите mkisofs со следующими параметрами:



mkisofs -o /tmp/distro.iso -r -V "My distro" -v -no-emul-boot

-boot-load-size 4 -boot-info-table -b isolinux/isolinux.bin

-c isolinux/isolinux.boot /cdrom



Затем запишите образ на CD:



cdrecord dev=0,0 -v -eject /tmp/distro.iso




Теперь можно перезагрузить систему, чтобы убедиться, что CD действительно стал загрузочным.





Поиск оборудования





Полученный CD сам по себе уже является хорошим инструментом для проверки оборудования, и легко может быть превращен в хороший инструмент для восстановления системы. Просто загрузившись с него, вы можете определить производителя и модель практически любого оборудования ПК (кроме карт ISA), посмотрев в /proc/pci и /proc/cpuinfo. Посмотрев (при помощи dmesg) лог загрузки ядра, вы найдете информацию и о картах PnP ISA. Добавив в существующий набор пакеты типа e2fsck, вы получите все инструменты, необходимые для восстановления Linux-системы.



С другой стороны, в нашей системе пока нет поддержки сетевых, аудио-, SCSI-карт и т.д. Это не важно для rescue-CD, но совсем не подходит для нашего мини-дистрибутива.



Решением проблемы могло бы стать использование модулей ядра, но простая загрузка всех возможных модулей не выход. Нам нужен инструмент автоопределения оборудования. Для больших Linux-дистрибутивов уже разработаны инструменты автоопределения: kudzu (Red Hat), libdetect (Mandrake, теперь они тоже используют kudzu), discover (Progeny), но они слишком сложны для дистрибутива, который мы собираем.




К счастью, в нашем распоряжении есть базовые возможности процедуры автоопределения devfs. Автоматически создаваемые точки монтирования устройств можно эффективно использовать, чтобы определить, распозналось ли то или иное устройство ядром. Например, точка /dev/sound/dsp автоматически создается, только когда вы загрузили подходящий модуль для звуковой карты. Таким образом вы можете написать скрипт, который один за одним загружает аудиомодули и каждый раз проверяет, появилось ли аудиоустройство в списке или нет. Если оно появилось, можно загрузить драйвер и остановить цикл, в противном случае выгрузить модуль и продолжить перебор. См. Listing 3 - простой пример, написанный на Perl:



Listing 3. Загрузка модуля аудио-карты (на Perl)



opendir MODDIR, "/lib/modules/2.4.20/kernel/drivers/sound/";

while($mod = readdir MODDIR){

next if $mod =~ /^.{1,2}$/;

$mod =~ s/.o$//;

system "modprobe $mod > /dev/null 2>&1";


last if -e "/dev/sound/dsp";

system "rmmod $mod > /dev/null 2>&1";

}

closedir MODDIR;



Итак, процесс проходит по следующим этапам:



- перейти в директорию с ядром дистрибутива и активировать поддержку всех возможных модулей аудиокарт;


- скомпилировать все модули командой: make modules

- установите модули в вашу систему командой: make modules_install (чтобы избежать перезаписи истинной директории с модулями, переименуйте её перед установкой);

- перемонтируйте файл initrd.gz в /distro (не забудьте распаковать его перед монтированием);

- скопируйте вновь созданные директории /lib/modules/2.4.20 в /distro/lib/modules/; если оставшееся место меньше ~0.5 Мб, соберите новый initrd, как описывалось выше, и выделите больше места.

- добавьте скрипт для загрузки всех возможных модулей и добавьте строку вызова этого скрипта в rc.S.



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




Повторяя описанную процедуру для каждого нужного вам типа драйвера, можно легко создать скрипт, способный автоопределять любое оборудование, поддерживаемое Linux на любом PC. В каждой версии MoviX можно найти работающие версии подобных скриптов.





Добавляем приложения





Как только все необходимые драйверы загружены, любое приложение, использующее только консольный режим, может быть легко добавлено в дистрибутив. eMoviX и MoviX основаны на этом принципе, т.к. MPlayer может воспроизводить аудио-, видеофайлы без X Window.



В большинстве случаев для добавления пакета в дистрибутив удобно воспользоваться механизмом autoconf/automake:



./configure --prefix=/usr/local/mplayer [further options]


make

make install



В нашем случае, чтобы переместить пакет в дистрибутив, достаточно действовать следующим образом:



- смонтировать inird в /distro;

- скопировать пакет в /distro: cp -a /usr/local/mplayer/ /distro/usr/local/;

- добавить в /distro/lib/ все библиотеки, нужные пакетам из /usr/local/mplayer/bin/;

- добавить путь /usr/local/mplayer/bin/ в переменную PATH: PATH=$PATH:/usr/local/mplayer/bin/

- добавить в rc.S строку, создающую soft-ссылки в /distro/lib на все библиотеки в /usr/local/mplayer/lib/ : ln -s /usr/local/mplayer/lib/* /distro/lib/


- размонтировать и сжать initrd.



Следуя данным указаниям для приложения mp3blaster, вы можете легко собрать мини-дистрибутив, способный загружаться и автоматически воспроизводить все MP3- или Ogg Vorbis-файлы (mp3blaster предоставляет консольный интерфейс). Это позволит пользователям воспроизводить свои любимые аудиофайлы на любом компьютере (конечно при условии, что аудиокарта поддерживается Linux), вне зависимости от того, какая операционная система установлена.





Работаем с X Window





Большому числу приложений для работы необходим X Window. К сожалению, пакет XFree слишком велик по размерам (~80 Мб), чтобы его можно было задействовать в нашем дистрибутиве.



Существует несколько проектов (например, DirectFB или smallX), целью которых является X Window уменьшенных размеров, но ни один из них не может соперничать с последними версиями XFree86 по поддерживаемому оборудованию. Если вы планируете использовать свой дистрибутив на большом количестве видеокарт, то, пожалуй, лучшим решением будет использование пакета XFree86. По возможности, удалите из пакета все ненужные компоненты. Более половины пакета XFree86 занято шрифтами. Т.к. в собираемом вами дистрибутиве скорее всего будет только несколько приложений, то идентифицировав действительно используемые шрифты, вы можете легко уменьшить размер пакета до 40 Мб, а удаление ненужных компонентов и библиотек может снизить размер пакета до 30 Мб.




И, конечно, вы должны создать работающий файл XF86Config, либо сгенерировать его используя команду -configure (по крайней мере, нужно задать разрешение экрана и количество отображаемых цветов), либо использовать один из шаблонов. При использовании шаблонов вам необходимо написать скрипт, способный распознавать видеокарту и устанавливать соответствующие ей параметры.



В обоих случаях хорошо иметь средство для определения наиболее важных параметров монитора, а именно: диапазон горизонтальной и вертикальной развертки. Хорошим инструментом для этого является программа ddcxinfo (являющаяся часть пакета kudzu), которая выводит нужные нам данные с помощью команд ddcxinfo -hsync и ddcxinfo -vsync . Если информация недоступна, то ddcxinfo возвращает 0-0.



Наконец, можно предположить, что вам не понадобится оконный менеджер, т.к. будет запускаться только одно приложение (это как раз случай MoviX2). Если все же он понадобится, используйте маленький менеджер, например Matchbox.





Заключение





Я надеюсь, эта статья способствует увеличению количества специализированных дистрибутивов. Их разработка не требует высокого уровня технических навыков, только хорошего знакомства с управлением Linux-системой. Кроме того, это эффективный способ значительно увеличить ваши знания о Linux и приложениях, которые вы включили в дистрибутив (в том числе благодаря отзывам пользователей).




Позвольте мне закончить благодарностью разработчикам, которые сделали свои проекты открытым-, в противном случае MoviX бы просто не существовал. Спасибо также всем людям, чьи отзывы значительно увеличили объем моих знаний о Linux и MPlayer.





Ресурсы



MoviX: movix.sf.net

Slackware: www.slackware.com

Busybox: www.busybox.net




uClibc: www.uclibc.org

MPlayer: www.mplayerhq.hu

SysLinux: syslinux.zytor.com

BootScriptor: www.bootscriptor.org

MP3Blaster: www.stack.nl/~brama/mp3blaster.html

DirectFB: www.directfb.org




SmallX: www.superant.com/smalllinux/tinyX01.html

MatchBox: handhelds.org/~mallum/matchbox



Автоопределение оборудования



Kudzu: rhlinux.redhat.com/kudzu/

Discover: hackers.progeny.com/discover


Detect: www.linux-mandrake.com/harddrake



Руководства



Документация по ядру: http://www.tldp.org/HOWTO/Kernel-HOWTO.html

Документация по загрузке: www.tldp.org/HOWTO/Bootdisk-HOWTO/index.html and

www.woalf.uklinux.net/WebWolf-HOWTO.txt




Статья Брюса Перенса о BusyBox: linuxjournal.com/article/4335

DevFS HOWTO: www.atnf.csiro.au/people/rgooch/linux/docs/devfs.html



Дистрибутивы Live CD



DemoLinux: www.demolinux.org

Knoppix: www.knoppix.org


Linux-BBC: www.lnx-bbc.org/index.html

Devil-Linux: www.devil-linux.org/



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



LinuxConsole: linuxconsole.free.fr

DirectPresenter: team.gcu-squad.org/~fab/DP

DyneBolic: lab.dyne.org/DyneBolic


Byzantine OS: byzgl.sf.net
Страницы:
1 2

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

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