Некоторые камрады, наверно, помнят серию статей про принципы создания живых дистрибутивов, размещенную на linux16.net некоторое время назад. Сегодня я хотел бы перевести эту тему из теоретической плоскости в практическую и поговорить о таком выдающемся варианте LiveCD, как Slax.
Slax симпатичен мне по нескольким причинам. Во-первых, он базируется на одном из моих любимых дистрибутивов - Slackware, который отличается простотой, стабильностью, стремлением к соответствию классическим образцам (можно сказать, что он ближе всех из Linux-систем к стандартам BSD). Slackware хорош для решения задач, не требующих GUI (сервера), но при желании его можно заточить под X.org сколь угодно красиво. Вторая причина, по которой мне нравится Slax - стильный и очень толковый сайт проекта, который активно развивается. Там есть форум, благожелательное отношение к новичкам, приятный, современный дизайн, мощная теоретическая база. Ну и, наконец Slax легко настроить под решение широкого круга задач.
Дистрибутив можно загрузить с соответствующего сайта (около 200 Мб)и поэкспериментировать с ним в виртуальной машине (я использую VirtualBox). Загрузившись с iso-образа, вы будете приятно удивлены тем, что подключение к Интернет уже настроено, большинство частоиспользуемых консольных утилит (вплоть до Midnight Commander) уже присутствуют в системе, что иксы запускаются и выглядят очень опрятно (KDE). Но есть и неприятные моменты:во-первых, дистрибутив не русифицирован. Во-вторых, под иксами отсутствует сколь-либо адекватный браузер (не считать же таковым Konqueror). В-третьих... В третьих каждый для себя может придумать сам, поскольку LiveCD - не просто забава, а система для выполнения специфических задач, так что решив его использовать нужно быть готовым к доработкам.
Принципы "заточки" Slax под "себя" очень просты. С помощью утилит dir2lzm и tgz2lzm можно превратить содержимое каталога или tgz-архива в модуль Slax. Далее iso-шник потрошится (с помощью Midnight Commander'a) полученный модуль добавляется в каталог с модулями и с помощью скрипта make_iso.sh вновь превращается в iso-образ, но уже с новыми возможностями. Поясню на примере. Известно, что для корректной русификации Linux нужны библиотеки glibc и glibc-i18, а также кое-какие скрипты. Допустим, эти пакеты у вас находятся в файлах glibc.tgz, glibc-i18.tgz и config_ru_RU.tgz (пакеты Slackware - это обычные tgz-архивы, только в добавок выполняющие при распаковке скрипты из своей папки install. Найти их можно в дистрибутиве Slackware 12.1). Для создания соответствующих модулей достаточно выполнить
tgz2lzm glibc.tgz 020-glibc.lzm
tgz2lzm glibc-i18.tgz 025-i18.lzm
tgz2lzm config_ru_RU.tgz 030-ru.lzm
Названия результирующих файлов могут быть любыми, но лучше впереди ставить трехзначные числа (с лидирующими нулями при необходимости) чтобы Slax знал, в какой последовательности загружать их. Получившиеся файлы нужно поместить в соответствующую папку распакованного дистрибутива Slax и создать новый iso-образ с помощью скрипта make_iso.sh.
Но не всё так просто... Дело в том, что tgz2lzm и dir2lzm - не стандартные утилиты Linux, а исключительно слаксовские приблуды, то есть воспользоваться ими можно только загрузившись с диска Slax. Это не есть гут. Хотелось бы всё это проделывать (изменять живой дистрибутив в соответствии со своими потребностями) не перезагружаясь и не прекращая других задач. Решение напрашивается само собой: работать над модификацией Slax под виртуальной машиной. Только вот беда: виртуальная машина - вещь в себе. По крайней мере моя любимая VirtualBox. Попасть внутрь нее из реальной машины можно только по сети или через механизм зашаренных (общих для реальной и виртуальной машин) папок. А чтобы зашарить папки нужно пропатчить виртуальную машину так называемыми гостевыми дополнениями. Давайте вместе проделаем необходимые шаги для этого, а заодно модифицируем Slax таким образом, чтобы он, работая под виртуальной машиной, всегда имел доступ к основной машине через зашаренную папку (или несколько папок, их число не ограничено).
Создайте виртуальную машину с виртуальным жестким диском объемом мегабайт в 500, установите на нее Slackware (или любой другой дистрибурив) в минимальной конфигурации. Загружаемся, входим. Из меню виртуальной машины выбираем "Устройства -> Подключить CD-ROM -> Образ CD/DVD-ROM". В появившемся менеджере виртуальных дисков выбераем VBoxAdditions.iso. Он там присутствует по умолчанию, но если по каким-то причинам его там нет, то этот исошник можно найти в каталоге .usr/share/virtualbox (для VirtualBox версии 6.0.7 по крайней мере). Монтируем:
mkdir -p /mnt/cdrom
mount -t iso9660 /dev/cdrom /mnt/cdrom
Можете убедиться в mc, что всё замонтировалось правильно и каталог /mnt/cdrom действительно содержит дополнения гостевой ОС, то есть файлы с именами типа VBoxLinuxAdditions-бла-бла-бла.
Выключаем виртуальную машину командой halt, создаем виртуальную машину, которая будет грузиться со Slax, подключаем к ней виртуальный жесткий диск, на который только что перенесли инсталлятор гостевой ОС. Бутимся со Slax в текстовом режиме, входим, обнаруживаем жесткий диск, уже примонтированный умным Слаксом куда-нибудь в папку типа /mnt/hda2, то есть в каталоге /mnt/hda2/tmp нас ждет исполняемый файл VboxLinuxAdditions-x86.run. Казалось бы уже всё понятно: нужно его запустить и он установит дополнения гостевой ОС. Это так, но сначала мы выполним маленькую хитренькую команду:
touch /tmp/before
Ну, а теперь действительно:
cd /mnt/hda2/tmp
./VboxLinuxAdditions-x86.run
Пошел процесс, причем процесс явно что-то делающий с исходниками ядра (они, со всеми необходимыми для LiveCD патчами, включены в стандартный состав Slax). Это компилируются модули, которые позволят в дальнейшем связывать виртуальную и реальную машины с помощью зашаренных папок. В конце процесс слегка матюгнется по поводу того, что не обнаружил X. Да они нам и не нужны, иксы-то, лишь бы папки зашаривались. Теперь высший консольный пилотаж:
find /bin -type f -anewer /tmp/before > vbox.lst
find /etc -type f -anewer /tmp/before >> vbox.lst
find /lib -type f -anewer /tmp/before >> vbox.lst
find /sbin -type f -anewer /tmp/before >> vbox.lst
find /usr -type f -anewer /tmp/before >> vbox.lst
vim (mcedit) vbox.lst
tar cvfz vbox.tgz -T vbox.lst
С помощью этой последовательности команд мы составляем список файлов, к которым было обращение после создания файла /tmp/before и загоняем их в архив (список придется слегка подредактировать вручную, ибо там много лишнего, но вы легко догадаетесь, что в нем реально нужно оставить). А вот теперь можно полученный архив превратить в модуль для Slax
tgz2lzm vbox.tgz 040-vbox.lzm
Можете сразу же, не перезагружаясь, убедиться, что виртуальная машина стала видеть зашаренные папки. Создайте общую папку с помощью меню VirtualBox и выполните
/etc/rc.d/rc/rc.vboxadd start
/etc/rc.d/rc.vboxvfs start
mkdir -p /mnt/vbox
mount -t vboxsf myshare /mnt/vbox
В этот каталог (то есть в зашаренную вами папку реальной машины) скопируйте получившийся модуль, затем поместите его в папку с модулями Slax, пересоберите iso-образ и после перезагрузки вы сможете работать с папками реальной машины из виртуальной.
Описанный метод (создаем файл с помощью команды touch и собираем в архив всё, что возникло позднее его) годится для любых задач по модификации Slax. Я с помощью этого нехитрого трюка закорячил в LiveCD браузер Opera (с русификацией, оконным менеджером fvwm и Qt) и даже сервера PostgreSQL и Tomcat. Всё прекрасно работает, в том числе под виртуальной машиной.
К сему прилагаются:
- Гениальный, железобетонный русификатор консоли Slackware (а следовательно и Slax). Требует glibc и glibc-i18. config-ru_RU.CP1251-0.0.2-noarch-2.tgz
- скомпилированный модуль для стыковки Slax и VirtualBox (тем, кому влом всё это проделывать самостоятельно). Не забудьте извлечь lzm-файл из архива перед тем, как поместить его в папку с модулями!!!. 040-vbox.tgz



