Создание специализированных 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
Для создания загрузочного 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
Комментариев 0