Создание специализированных 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' для загрузки вашего нового дистрибутива.
Автор оригинала: 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' для загрузки вашего нового дистрибутива.
Комментариев 0