Ключевые слова:linux, slackware, boot, rus, (найти похожие документы)
From: K48 <a-i (at) bk dot ru>
Newsgroups: email
Date: Mon, 29 Dec 2003 14:31:37 +0000 (UTC)
Subject: Русификация загрузки Slackware 9.1
Русификация загрузки Slackware Linux 9.1
Автор: K48 <a-i (at) bk dot ru>
Если вы установили Slackware 9.x, то наверняка уже русифицировали эту
замечательную операционную систему по известной статье
(http://www.opennet.me/base/rus/slackware9rus.txt.html). Всё хорошо,
везде русский язык... Только вот при загрузке системы появляются
сообщения на английском. Сейчас мы ими и займёмся.
В первую очередь скажу, что в этой статье я не буду описывать
русификацию сообщений ядра (типа BIOS data check succesful). Поэтому
давайте просто отключим их.
Кстати, для выполнения большинства операций в этой статье вам
потребуются привилегии суперпользователя (root). Поэтому либо
настройте должным образом /etc/sudoers (вставьте в него строку %users
ALL=(ALL) NOPASSWD: ALL ) и запускайте все команды через sudo, либо
войдите в систему под именем root.
Итак, откройте файл настроек загрузчика LILO:
vi /etc/lilo.conf
Найдите строку append (для этого в Vim нужно ввести /append) и
добавьте к ней слово quiet, после чего она должна выглядеть примерно
так:
append="hdc=ide-scsi quiet"
(mini-vim-howto: чтобы вставлять текст, нажмите i, обратно в режим
команд - ESC, сохранить файл и выйти - :x, выйти не сохраняя - :q!)
Строка append определяет параметры, передаваемые ядру системы при
загрузке. Параметр quiet отключает сообщения, выводимые ядром (они вам
нужны?). После каждого изменения в файле /etc/lilo.conf выполняйте
команду:
lilo
Иначе изменения не вступят в силу.
Теперь перейдите в каталог /etc/rc.d:
cd /etc/rc.d/
ls
Здесь хранятся скрипты, отвечающие за загрузку системы. Если у вас
включено выделение файлов цветом, то в списке файлов, выдаваемом
командой ls, вы увидите, что некоторые файлы выделены зелёным, а
некоторые -- серым. Что это означает? Вы, наверное, знаете, что у
каждого файла есть атрибуты, определяющие права доступа к этому файлу.
Одним из таких атрибутов является атрибут, позволяющий выполнение
файлов. Если у какого-то файла нет атрибута выполнения, то он не может
быть запущен даже пользователем root. Поэтому самый простой способ
управления загрузкой -- установка или снятие атрибута выполнения с
этих скриптов при помощи команды chmod. Например, в каталоге /etc/rc.d
есть файл rc.pcmcia. Если у вас нет устройств PCMCIA, то зачем тогда
его запускать? Выполните команду:
chmod -x rc.pcmcia
Только пожалуйста, не убирайте атрибут выполнения у файлов rc.M, rc.S,
rc.6. Они важны для вашей системы. Зачем нужны они и другие файлы, вы
узнаете из следующей таблицы:
rc.0
Выполняется при выключении компьютера. На самом деле, это
символическая ссылка на файл rc.6.
rc.4
Запускает графический интерфейс -- систему X Window.
rc.6
Выполняется при перезагрузке системы. Если этот файл запускается через
символическую ссылку с rc.0, то это автоматически определяется и
система не перезагружается, а останавливается.
rc.acpid
Запускает службу ACPI, отвечающую за управление питанием компьютера.
rc.alsa
Запускает звуковую систему ALSA
rc.atalk
Запускает службу AppleTalk
rc.bind
Запускает службу DNS
rc.cups
Запускает систему печати CUPS
rc.font
Загружает национальный шрифт и раскладку клавиатуры
rc.font.sample
Пример файла rc.font. При загрузке он не выполняется.
rc.gpm
Запускает службу GPM, позволяющую использовать мышь в консоли
rc.hotplug
Запускает систему горячего подключения/отключения устройств
rc.inet1
Поднимает различные сетевые интерфейсы
rc.inet2
Загружает сетевую подсистему
rc.inetd
Запускает службу inetd. Если у вас не сервер, то можно отключить.
rc.ip_forward
Активирует перенаправление сетевых пакетов
rc.K
Выполняется при переходе в runlevel 1, т.е. однопользовательский режим
(при помощи команды init 1)
rc.local
Сюда вы можете добавить свои собственные команды, которые должны
выполняться при загрузке системы
rc.lprng
Запуск LPD, службы печати
rc.M
Содержит команды, выполняемые при переходе в многопользовательский
режим (runlevel 2, 3, 4, 5)
rc.modules
Загружает модули ядра (т.е. драйверы) для вашего оборудования
rc.mysqld
Запускает MySQL
rc.nfsd
Запускает службу NFS (сетевая файловая система)
rc.pcmcia
Подключает устройства PCMCIA
rc.S
Самый первый скрипт, выполняемый из этого каталога при загрузке
rc.samba
Служба, обеспечивающая доступ к файлам и принтерам для компьютеров с
Windows
rc.sendmail
Запускает почтовую службу Sendmail
rc.serial
Инициализирует последовательный порт
rc.sshd
Запускает SSH, обеспечивающий удаленный доступ к системе
rc.syslog
Запускает службу ведения системных журналов
rc.sysvinit
Обеспечивает совместимость с загрузкой в стиле System V
Во время загрузки скрипт rc.font выполняется одним из последних. Нам
же нужно, чтобы русские символы могли отображаться как можно раньше.
Сначала закомментируйте строку запуска rc.font в файле rc.M. Затем
откройте в редакторе vim файл rc.S, выполняющийся самым первым из всех
скриптов в /etc/rc.d/. Вот первые несколько команд в моем файле rc.S:
_________________________________________________________________
PATH=/sbin:/usr/sbin:/bin:/usr/bin
mount /usr
if [ -x /etc/rc.d/rc.font ]; then
/etc/rc.d/rc.font
fi
_________________________________________________________________
Первая команда устанавливает переменную PATH. Для запуска программ,
находящихся в этих папках, не нужно указывать полный путь, т.е. можно
написать setleds вместо /usr/bin/setleds. Вторая команда заранее
монтирует раздел с файлами каталога /usr (если у вас каталог /usr не
выделен в отдельный раздел, то эта команда и не нужна, все остальные
разделы будут смонтированы позднее), так как нам потребуются программы
из каталога /usr/bin. В общем, убедитесь, что он доступен на ранней
стадии загрузки.
Далее идет проверка условия, при выполнении которого запускается
/etc/rc.d/rc.font. -x обозначает, что rc.font будет запущен, только
если он является исполняемым (см. выше). В принципе, проверку этого
условия можно исключить, оставив только строку запуска rc.font, но
тогда при попытке его запуска будет показываться сообщение "permission
denied".
Откройте файл /etc/rc.d/rc.font. Он должен выглядеть примерно так:
_________________________________________________________________
#!/bin/sh
setfont Cyr_a8x16 >/dev/null
mapscrn koi2alt >/dev/null
for n in 1 2 3 4 5 6
do
echo -ne "\033(K" > /dev/tty$n
done
loadkeys ru-ms 2>/dev/null
echo Загружаются русские символы и раскладка клавиатуры...
_________________________________________________________________
setfont -- устанавливает русский шрифт
mapscrn -- загружает таблицу символов (в принципе, можно использовать
для этого setfont с параметром -m)
for do done -- цикл; определяет, что команда echo ... должна
повторяться столько раз, сколько элементов указано после ключевого
слова in (6 раз)
echo ... > /dev/tty$n -- посылает "магическую" последовательность
виртуальным консолям. Как вы знаете, все устройства представлены в
виде файлов;
/dev/tty1-/dev/tty6 -- это виртуальные консоли, по
которым вы переключаетесь при помощи клавиш Alt+F1..Alt+F6. Вместо $n
подставляется одно из значений, указанных после ключевого слова in.
loadkeys -- загружает раскладку клавиатуры
>/dev/null -- перенаправляет сообщения, выдаваемые программами, в
никуда. То есть на экран они не выводятся.
2>/dev/null -- дело в том, что для вывода сообщений есть несколько
"каналов". Обычно программы выводят сообщения в "канал" stdout --
стандартный вывод. Этот-то стандартный вывод и перенаправляется при
помощи символа >. Но программа loadkeys для вывода сообщений
использует stderr, перенаправление которого осуществляется при помощи
2>.
Что ж, теперь можно приступать непосредственно к переводу сообщений из
скриптов на русский. Думаю, вы сами с этим справитесь, в крайнем
случае, при помощи словаря. Ищите команду echo, но учтите, что она не
всегда использется только для вывода на экран сообщений. Слова типа
$RELEASE переводить не нужно, это имена переменных. В общем,
экспериментируйте, но не забудьте сначала выполнить
cp /etc/rc.d /etc/rc.d.BACKUP
Думаю, с переводом вы легко справитесь -- тут ничего сложного.
Выполните команду reboot или нажмите Ctrl+Alt+Delete. Ну как? Есть
русские сообщения? Если какие-то сообщения остались на английском,
смотрите таблицу выше, пытайтесь определить, из какого файла они
выдаются. Например, появилось сообщение: "Loading ALSA kernel modules;
Loading ALSA mixer settings". Перейдите в /etc/rc.d и выполните
команду:
grep -l "Loading ALSA" *
В ответ вы получите:
rc.alsa
Опция -l указывает, что нужно выводить только имя файла. Теперь
открывайте файл rc.alsa и переводите сообщения.
Хорошо, с этим вы справились. Но после описания процесса загрузки на
русском языке, вылезает приглашение ввести имя пользователя и пароль.
Опять же, на английском. Ладно, русифицируем и их. Откройте файл
/etc/inittab. Там вы увидите такие строки:
c1:12345:respawn:/sbin/agetty 38400 tty1 linux
c2:12345:respawn:/sbin/agetty 38400 tty2 linux
c3:12345:respawn:/sbin/agetty 38400 tty3 linux
c4:12345:respawn:/sbin/agetty 38400 tty4 linux
c5:12345:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linux
Они определяют, что во всех runlevel'ах с первого по пятый должна быть
запущена команда /sbin/agetty с указанными параметрами. Она и
предоставляет вам виртуальные консоли, и выводит приглашение имя_хоста
login:. Давайте узнаем, из какого пакета была установлена программа
agetty:
grep -l sbin/agetty /var/adm/packages/*
Обратите внимание, что перед sbin/agetty нет слэша, обозначающего
корневой каталог, т.к. при установке пакетов все имена каталогов
указываются относительно корневого. Итак, в ответ на эту команду вы
получите:
/var/adm/packages/util-linux-2.12-i486-1
Теперь вставьте и смонтируйте диск с исходниками Slackware. Перейдите
в каталог этого диска и выполните команду:
find . -name util-linux*
Скопируйте util-linux-2.12.tar.bz2 в какой-нибудь каталог, например,
/usr/src, и распакуйте его:
tar xjf util<нажмите tab>
cd util<нажмите tab>/login-utils
ls
В этом каталоге находятся исходники agetty. Откройте agetty.c. В
первую очередь закомментируйте строку #959:
write(1, hn, strlen(hn)); ,
т.е. поставьте перед ней два символа "/". Чтобы перейти на строку 959
в vim, просто введите :959. "Закомментировать строку" обозначает, что
она превращается в строку-комментарий, игнорируемую компилятором. В
этом случае мы отключили вывод имени компьютера перед словом "login:".
Теперь изменим саму строку "login:". Перейдите на строку 75. Она
должна выглядеть так:
#define LOGIN " login: " /* login prompt */
Замените ее на что-нибудь типа:
#define LOGIN "Здарова! Как тебя звать-то? " /* login prompt */
Сохраняйте файл и выходите из vi. Перейдите на один каталог выше (cd ..)
и выполните:
./configure #настройка
cd login-utils #нам нужно скомпилировать только agetty, поэтому
переходим в этот каталог
make #компилируем...
make install #...и устанавливаем
Теперь нажимайте Ctrl+D, чтобы закончить сеанс, и тут-то вы и должны
увидеть новое приглашение. Отлично! Вводим имя пользователя, Enter, и
видим: "Password:". Непорядок. Строка, приглашающая ввести пароль,
задается в файле /etc/login.defs. Найдите строку "LOGIN_STRING". Она
должна выглядеть примерно так:
LOGIN_STRING "%s! Стоять! Говори пароль: "
Как вы уже догадались, %s будет заменено на только что введенное имя
пользователя. Теперь, казалось бы, все работает. Но попробуйте ввести
неправильное имя или пароль -- и вы опять получите этот "linuxbox
login:". В чем же дело? Войдите в систему и выполните команду:
ps -A | grep agetty
Вы увидите, что на тех консолях, в которых вы уже ввели имя
пользователя (появилась хотя бы строка ввода пароля или где вы уже
ввели и пароль), agetty уже не запущен. Здесь уже вступает в дело
/bin/login.
Итак, повторяем те же действия. Выясняем, что bin/login находится в
пакете shadow-4.0.3, распаковываем исходники и заходим в каталог
shadow-4.0.3/src/. Открываем login.c.
Строка 852-853 (имя пользователя):
login_prompt (_("\nЗдарова! Как тебя звать-то? "), username, sizeof username);
Строка 1071 (строка, выводимая если имя пользователя или пароль
неверны):
puts (_("Ты, в натуре, гонишь! Ни фига не правильный пароль."));
Как компилировать и устаналивать программу, вы уже знаете.
Вот и все. Для разнообразия можете попробовать поработать с
po/pot-файлами. Они находятся в каталоге po/ исходников программ.
Открывать их можно с помощью kbabel (из пакета kdesdk). Компилируются
они при помощи msgfmt, и полученный файл *.mo должен быть в каталоге
/usr/share/locale/ru/LC_MESSAGES/ (не забудьте корректно настроить
локаль до запуска agetty/login, т.е. в одном из файлов в /etc/rc.d/
нужно выполнить команду export LANG=такой-то LC_ALL=такой-то).
Разумеется, так можно переводить только программы, со скриптами это не
пройдет.