Часть статьи из журнала
Популярный дистрибутив Damn Small Linux о возможностях которого рассказано здесь, не локализован. Но учитывая его кноппиксовские корни решить эту проблему просто.
Начинаем вскрытие
Загружаемся с диска DSL как обычно. Если нет готового раздела Linux, при помощи утилит fdisk или cfdisk создаем раздел, куда будут распаковываться файлы с диска:
# mke2fs /dev/hda3
Монтируем dev:
# mount -o dev /dev/hda3 /mnt/hda3
Если мало оперативной памяти может понадобиться раздел подкачки (у меня он на /devhda6):
# mkswap /dev/hda6
# swapon /dev/hda6
На этом подготовительный этап можно считать законченным. Вся файловая система дистрибутива упакована в файл /KNOPPIX/KNOPPIX, который занимает почти 50 Мб. При загрузке он автоматически распаковывается в каталог /KNOPPIX. Изменять там что-либо не имеет никакого смысла, так как при перезагрузке все изменения улетучатся вместе с многочасовыми трудами, для правки необходимо его скопировать жесткий диск:
# cp -Rpv /KNOPPIX /mnt/hda3/
Вот теперь у нас есть два варианта работы. Если необходимо просто изменить конфигурационные файлы, добавить недостающие пакеты при помощи простого копирования, это можно проделать либо непосредственно из загруженного DSL или при наличии другого Linux из него. Если имеются deb-пакеты традиционно используемые в Debian или программы в исходниках, тогда лучшим решением будет смонтировать данный раздел в качестве корневого:
# chroot /mnt/hda3/KNOPPIX
С этого момента каталог /mnt/hda3/KNOPPIX является корневым, все пути к необходимым файлам для простоты изложения, буду приводить относительно корня. Монтируем файловую систему proc:
# mount -t proc /proc proc
Все теперь можно работать здесь как в полноценном дистрибутиве, доустановив из MyDSL компилятор и apt (пакет dsl-dpkg.dsl) можно устанавливать и удалять программы и конечно же править конфигурационные файлы.
Битва за консоль
Для начала займемся консолью. При использовании параметра “dsl lang=ru” устанавливается русская раскладка клавиатуры, переключаемая по правому Ctrl, но при вводе на экране нечитаемые символы. Чтобы каждый раз не вводить при загрузке язык, установим сразу нужную расскладку. Напомню, что в Debian для установки необходимого экранного шрифта и клавиатурной раскладки по традиции используется пакет console-tools. Берем понравившийся файл раскладки, например ru4.kmap.gz или ru_win.kmap.gz и подменяем файл используемый по умолчанию:
# cp /usr/share/keymaps/i386/qwerty/ru4.kmap.gz /etc/console-tools/default.kmap.gz
Остальные каталоги и файлы с раскладками можно смело удалить, чтобы место зря не занимали. Другой способ (и кстати не последний) просто прописать путь к нужному файлу вместе с командой напрямую в конце скрипта /etc/init.d/keymap.sh. Перезапустив скрипт “/etc/init.d/keymap.sh restart”, можно попробовать в работе.
В каталоге /usr/share/consolefonts никаких шрифтов не обнаружилось. Так как шрифты koi8-r смотрятся в консоли обычно не ахти, будем использовать cp866. Но для того чтобы они читались на экране в соседний каталог consoletrans, положим файл карты соответствия. Я взял, что нужное с Ubuntu, файлы Cyr_a8x16.psf.gz и koi2alt.trans. Чтобы при загрузке шрифты автоматически устанавливались, правим файл /etc/console-tools/config:
# nano /etc/console-tools/config
SCREEN_FONT= Cyr_a8x16
SCREEN_FONT_MAP= koi2alt
Можно прямо вбить в файл /etc/init.d/console-screen.sh, загрузку шрифтов и карты соответствия указав полный путь в команде “consolechars”:
consolechars -f /usr/share/consolefonts/Cyr_a8x16.psf.gz -m /usr/share/consoletrans/koi2alt.trans
Принимаемся за локаль. Смотрим, что дает нам вывод:
$ locale
LANG=C
Для начала в /etc/environment заменяем имеющуюся там строку на LANG=ru_RU.KOI8-R. Перезапускаем, пробуем “locale”. Не помогло, лезем внутрь скриптов. Запускаем команду:
# grep -R LANG /etc
И узнаем таким образом, что необходимо заглянуть еще в парочку файлов. В /etc/bash_completion есть ссылка на /etc/bashrc в котором в свою очереь производится попытка считать переменную LANG из /etc/sysconfig/i18n. Аналогичная ссылка и в /etc/profile.
Вся беда в том, что эти файлы образуются на лету, а при работе со скопированными на жесткий диск файлами, каталог sysconfig пуст. Смотрим дальше и находим скрипт /etc/init.d/knoppix-autoconfig.
В нем обнаруживаются две интересные функции обрабатывающие параметры передаваемые ядру при загрузке getbootparam и checkbootparam. И чуть ниже искомая строка [ -n «$LANGUAGE» ] || LANGUAGE=»en» то есть если строка содержит значение (не нулевая) то локаль берется по ней, если же нет то по умолчанию принимается английская локаль. Изменяем значение en на ru или если не предвидится использование другой локали, то эту строку комментируем и с новой пишем просто LANGUAGE=»ru» и чуть ниже правим LANG=»ru_RU.KOI8-R» (чтобы система меньше думала). Через пару строк при помощи конструкции case «$LANGUAGE» in устанавливаются все необходимые переменные и заносятся в соостветсвующие файлы в каталоге /etc/sysconfig/*.
Строка для ru выглядит так:
ru)
# Russian version
COUNTRY=»ru»
KEYTABLE=»ru»
XKEYBOARD=»ru»
KDEKEYBOARD=»ru»
CHARSET=»koi8-r»
CONSOLEFONT=»Cyr_a8x16″
KDEKEYBOARDS=»de,us,fr»
TZ=»Europe/Moscow»
Значение KDEKEYBOARDS, на дальнейшие установки не влияет никак, но я поменял на «us,ru«. По умолчанию (т.е. *) case опять же устанавливает английскую локаль, для подстраховки дополнительно впереносим все данные с сектора ru в *.
Почти все файлы в каталоге /etc/sysconfig, образуются на лету при загрузке системы, поэтому ничего там вручную создавать не нужно. В knoppix-autoconfig это выглядит так:
echo «LANG=\»$LANG\»» > /etc/sysconfig/i18n
echo «COUNTRY=\»$COUNTRY\»» >> /etc/sysconfig/i18n
echo «LANGUAGE=\»$LANGUAGE\»» >> /etc/sysconfig/i18n
echo «CHARSET=\»$CHARSET\»» >> /etc/sysconfig/i18n
echo «XMODIFIERS=\»$XMODIFIERS\»» >> /etc/sysconfig/i18n
При желании можно просто закомментировать все эти строки и вручную создать файл с необходимыми переменными. Чуть ниже значение переменных KEYTABLE, KEYBOARD, KDEKEYBOARD и KDEKEYBOARDS, таким же образом заносятся в /etc/sysconfig/keyboard. И все параметры сгенерированные knoppix-autoconfig записываются в /etc/sysconfig/knoppix.
Еще чуть ниже нашлась строка, загружающая консольный шрифт и раскладку по умолчанию, данные о последней берутся в только, что созданном файле /etc/sysconfig/keyboard.
[ -f /etc/sysconfig/keyboard ] && . /etc/sysconfig/keyboard
[ -n «$KEYTABLE» ] && loadkeys -q $KEYTABLE
[ -n «$CONSOLEFONT» ] && consolechars -f $CONSOLEFONT
Могу сказать, что ничего там по настоящему не загружается, без полного пути, программа просто не знает, где все это искать. Сюда также можно вставить ту строку с consolechars, приведенную выше. Смотрится не очень элегантно, но зато работает. Как говорится, дешево и сердито. После всех этих манипуляций можно спокойно работать в консоли с кириллицей.
Но прежде чем заняться доводкой X-Window заглянем в еще один файл не последний по значимости — /etc/profile. Здесь конечно есть чем поживиться. Кроме экспорта переменной PATH, экспортируется LANG, взятая на этот раз из /etc/sysconfig/i18n. Причем строкой [-n «$LANG»] || LANG=»de_DE@euro» по умолчанию устанавливается на этот раз немецкая локаль. Исправляем на нужную. Строкой ниже если переменная $SYSFONTACM имеет нулевое значение, для всех терминалов экспортируется карта соответствия. Я просто убрал проверку и оставил только:
if ls -l /proc/$$/fd/0 2>/dev/null | grep — ‘-> /dev/tty[0-9]*$’ >/dev/null 2>&1; then echo -n -e ‘\033(K’ > /proc/$$/fd/0
fi
И традиционно в данный файл можно добавить средство от дампов:
ulimit -Sc 0 &>/dev/null
В этом же файле, при желании можно изменить вид приглашения в bash (переменная PS1), добавить алисов для сокращенного вода команд. С консолью закончили переходим к X-Window.
Боремся за Х
Начнем с начала, то есть с /usr/X11R6/bin/startx. Где находим следующую строку:
XFILE=$HOME/.xserverc
Далее идет проверка наличия строк xsetup, fbdev в параметрах загрузки, если их нет, то запускает скрипт /usr/sbin/xsetup.sh с параметром default. И в конце строка инициализации:
xinit $HOME/.xinitrc — $HOME/.xserverrc
По умолчанию в .xserverrc после работы xsetup.sh заносится строка:
exec /usr/bin/X11/Xvesa -mouse “/dev/psaux”,5 -screen 1024x768x32 -shadow -nolisten tcp -I &>/dev/null
Только в зависимости от типа подключенной мышки, может меняться параметр в mouse. Цифра 5 означает, что это мышь с колесиком. Все гут, ничего не трогаем. А в .xinitrc находим такие строки:
KEYTABLE=“$(getknoppixparam.lua KEYTABLE)”
И чуть ниже, если переменная KEYTABLE не равна us:
xmodmap –e “clear Mod4” –e “add Mod5 = Mode_switch” &
В X-Window 8 модификаторов Ctrl, Shift, Scroll Lock и пять виртуальных Mod1-Mod5. Разъяснение нашел, порывшись в документации к XKeyCaps (www.jwz.org/xkeycaps). Там были такие строки в описании одной из клавиатур:
«Scroll Lock» key generates Mode_switch, and the Mod5 modifier
«Alt» key generates XF86ModeLock and Mode_switch, and the Lock/Mod5
modifiers
Параметр Mode_switch является одним из переключателей, обеспечивающий привязку сканкода клавиши к ее назначению. В данном случае работа похожа на параметр ModeShift в xorg.conf, то есть пока на клавишу нажимаешь модификатор работает (русские буквы вводятся). Чтобы клавиша “залипала” нужно добавить в эту строку после Mode_switch еще и XF86ModeLock. Это правда единтсвенный вопрос который пока не удалось побороть до конца. В одних конигурациях он срабатывает в других нет. В более раних версиях DSL просто создавался конфигурационый файл /etc/X11/XF86Config и проблем с установкой раскладки не было.
Но клавишу пока не нашли. Пробуем. Нажатие на Scroll Lock ничего не привело, но правый Alt сработал, правда в окне вместо текста кракозябры. Но главное работает, со шрифтами разберемся потом. Правда есть еще один моментик. Все правила необходимые для описания загружаемой клавиатурной раскладки находятся в каталоге /usr/X11R6/lib/X11/xkb/symbols/, в некоторых дистрибутивах могут и в другом месте, но в этом случае в этом месте обязательно будет ссылка. В варианте по умолчанию, используется блок basic, из-за которого новички ругают Linux чуть ли не в каждой конференции из-за неправильной раскладки. В этом случае точка и запятая вводятся по Shift+6(7), соответственно и некоторые другие знаки тоже попутаны. В xorg.conf, обычно подключают при помощи XkbVariant секцию winkeys, в которой точка, запятая уже на своих местах. Я просто перенес строки в этом файле из winkeys на basic.
Кстати в knoppix-autoconfig есть такая строка выполняющася при загрузке DSL в интерактивном режиме, генерирующая нормальный XF86Config-4:
xf86cfg -textmode -xf86config /etc/X11/XF86Config-4 >/dev/console 2>&1
И последний этап — установка шрифтов. Команда “xlsfonts” показала отсутствие кирилических шрифтов. Просмотр каталогов /etc/X11/fonts и /usr/X11R6/lib/X11/fonts это подтвердил. В MyDSL предлагается только небольшой набор (distro.ibiblio.org/pub/linux/distributions/damnsmall/mydsl/system/lfp_fixed_fonts.tar.gz). Можно взять шрифты с любого дистрибутива или с сайта
На этом основные настройки можно считать законченными. Остальные действия зависят только от вашей фантазии, наличия свободного времени и желания покопаться в настройках. Так можно настроить оконный менеджер по своему вкусу (тема, которых в комплекте предостаточно, фоновый рисунок, пункты меню), добавить скины и плагины к XMMS, прописать необходимые параметры для настройки сети, чтобы потом их не вбивать вручную, создать нового пользователя и задать пароли. Я уже не говорю об установке любимых приложений. Простор для творчества большой.
Упаковка обратно
Все предыдущие действия мы выполняли с файлами расположенными на жестком диске. Теперь наша задача загнать это все обратно, откуда взяли, т.е. на CD-ROM. Создаем на разделе с файловой системой Linux (чтобы права и имена сохранить) каталог. И переносим туда все файлы с CD-ROM, за исключением файла со сжатым образом KNOPPIX/KNOPPIX. Я думаю после всех выполненных действий вполне справедливо изменить заставку появляющуюся при загрузке системы. Для загрузки используется isolinux (syslinux.zytor.com/iso.php). Заходим внутрь /boot/isolinux и обнаруживаем несколько файлов. Большинство из них являются текстовыми, поэтому находящиеся внутри параметры можно править. В файле boot.msg содержится приветственное сообщение, на русское менять не советую, шрифты ведь все рано не будут к тому времени загружены, но себя любимого похвалить здесь можно. Чтобы изменить параметры, передаваемые ядру при загрузке необходимо покопаться в файле isolinux.cfg. Например, чтобы немного увеличить размер надписей при загрузке я установил значение параметра VGA=788 (или normal), что соответсвует разрешению 800х600, по умолчанию VGA=791. В файлах f2 и f3 содержится help. И наконец картинка отображаемая при загрузке спрятана в файле logo.16.
Чтобы ее заменить необходимо взять 16 цветный рисунок размером 640х400 в формате png. Далее выполняем следующие команды:
# pngtopnm < logo.png > logo.pnm
# ppmtolss16 < logo.pnm > logo.16
# cp logo.16 /mnt/temp/KNOPPIX/logo.16
Теперь когда все готово осталось сжать каталог, в который мы вносили все изменения и положить его на свое законное место, которое пока пустует. Утилита create_compressed_fs, есть в DSL и KNOPPIX.
# mkisofs -R -U -hide-rr-moved -cache-inodes -no-bak -pad /mnt/hda3/KNOPPIX | nice -n -10 /usr/bin/create_compressed_fs — 65536 > /mnt/newdsl/KNOPPIX/KNOPPIX
И наконец создаем iso-образ:
# cd /mnt/
# mkisofs -pad -l -r -J -v -V «My DSL» -b temp/isolinux/isolinux.bin -c temp/isolinux/boot.cat -o myownlinux.iso newdsl
В итоге мы получили настроенную по нашему вкусу, локализованную систему, автоматически подстраивающуюся под любое оборудование.
З.Ы. На диске к февральскому номеру Хакера выложена версия DSL приготовленная по этому рецепту.
//
fdisk/cfdisk, а не fdisc/cfdisc
//
большое спасибо — как раз очень нужно
Permalink
//
В файле boot.msg содержится приветственное сообщение, на русское менять не советую, шрифты ведь все рано не будут к тому времени загружены
Может всё таки как то можно русское сообщение написать в boot.msg очень надо…..
//
Можно это дело оформить в рисунке-заставке
//
A gde ya mogu skachat’ faili Cyr_a8?16.psf.gz и koi2alt.trans?