Slax всемогущий

Некоторые камрады, наверно, помнят серию статей про принципы создания живых дистрибутивов, размещенную на 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. Всё прекрасно работает, в том числе под виртуальной машиной.

К сему прилагаются:

  1. Гениальный, железобетонный русификатор консоли Slackware (а следовательно и Slax). Требует glibc и glibc-i18. config-ru_RU.CP1251-0.0.2-noarch-2.tgz
  2. скомпилированный модуль для стыковки Slax и VirtualBox (тем, кому влом всё это проделывать самостоятельно). Не забудьте извлечь lzm-файл из архива перед тем, как поместить его в папку с модулями!!!. 040-vbox.tgz