The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Русификация загрузки Slackware 9.1 (linux slackware boot rus)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: 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.ru/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=такой-то). Разумеется, так можно переводить только программы, со скриптами это не пройдет.

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру