null

Добавляем поддержку cp1251 в AIX

К сожалению местами AIX - операционная система безнадежно отставшая от жизни. Не стала исключением и поддержка кириллицы и русских локалей в этой системе - единственная присутствующая в LPP-пакетах - это ru_RU.ISO8859-5. Недавно ко мне обратился заказчик с просьбой помочь с локалью cp1251 в vnc-сессиях в AIX, к тому же этот вопрос обсуждался на AIXportal: http://www.aixportal.ru/forum/10-aixhardware/4179-aix-cp1251.html и я решил разобраться, что к чему.

Создаем локаль

В приложенном архиве в директории loc есть файлы ru_RU.cp1251 и ru_RU.cp1251__64 - их нужно положить в директорию /usr/lib/nls/loc/. Я собирал их на AIX 7.1, так что возможны несовместимости, если они таки возникнут, то нужно проделать собрать локаль вручную:

1. Чтобы собрать локаль нам потребуется C-компилятор XL C (gcc к сожалению не подойдет). Триальную версию можно скачать здесь:
http://www.ibm.com/developerworks/downloads/r/xlcplusaix/?S_CMP=rnav&S_CMP=rnav

Установка выглядит следующим образом:
Распаковываем сам архив:
# tar xf xlcpp.11.1.0.1.aix.eval.tar

Запускаем SMItty:
# smitty easy_install

В поле INPUT device / directory for software вводим: /tmp/xlcpp/usr/sys/inst.images/
В списке выбираем набор файлов: vac-aix61

2. В качестве исходника локали можно использовать исходник от локали ru_RU.ISO8859-5. Для этого нужно установить LPP-пакет bos.loc.adt.locale и создать симлинк:
# ln -s /usr/lib/nls/loc/ru_RU.ISO8859-5.src /usr/lib/nls/loc/ru_RU.cp1251.src

А вот charmap (отображение мнемонических имен символов на их коды) нужно написать самому. Я сгенерировал этот файл - он лежит в архиве с именем charmap_cp1251. Его нужно положить в директорию /usr/lib/nls/charmap с именем cp1251.

3. После этого можно собирать локаль, для этого предназначена утилита AIX localedef (ей-то как раз и требуется C-компилятор). Укажите путь до компиляторов и запускайте утилиту:
# PATH=$PATH:/usr/vac/bin
# export PATH
# localedef -c -i /usr/lib/nls/loc/ru_RU.cp1251.src -f /usr/lib/nls/charmap/cp1251 ru_RU.cp1251


4. Проверить, что локаль появилась в  системе можно с помощью команды locale -a:
# locale -a | grep cp1251
ru_RU.cp1251

Прокачиваем X-сервер

Теперь нужно рассказать X-серверу про нашу локаль и установить шрифты. Так как Xvnc основан на XFree86, равно как и X-сервер в современных Linux-системах (Xorg), можно невозбранно брать конфигурационные файлы из Xorg.

1. Нам потребуется один файл - XLC_LOCALE (присутствует в архиве). Его нужно положить в директорию /usr/lib/X11/locale/cp1251 , предварительно создав ее.
В файл /usr/lib/X11/locale/locale.dir нужно добавить строчку:
cp1251/XLC_LOCALE                  ru_RU.cp1251

2. Добавить в систему кириллические шрифты. Я использовал шрифты terminus из openSUSE Linux. После распаковки нужно добавить соответствующий путь до шрифтов:
# xset +fp /path/to/fonts
# xset fp rehash


Эти две команды можно добавить в ~/.vnc/xstartup , чтобы они выполнялись при запуске VNC-сервера.

3. Проверить, что шрифты появились в системе можно с помощью команд xlsfonts или xfontsel.

4. Чтобы использовать кириллические шрифты в xterm, надо явно указать имя шрифта с помощью параметра -fn:
# xterm -fn '-xos4-terminus-medium-r-normal--12-120-72-72-c-60-microsoft-cp1251' &

Проверяем локаль

Если все прошло нормально, то кириллица и кодировка cp1251 будут поддерживаться в AIX:


aix_cp1251.tar.gz (205 Кб)

К списку статей

 

Интересуюсь по большей части системным анализом программного обеспечения: поиском багов и анализом неисправностей, а также системным программированием (и не оставляю надежд запилить свою операционку, хотя нехватка времени сказывается :) ). Программированием увлекаюсь с 12 лет, но так уж получилось, что стал я инженером.

Основная сфера моей деятельности связана с поддержкой Solaris и оборудования Sun/Oracle, хотя в последнее время к ним прибавились технологии виртуализации (линейка Citrix Xen) и всякое разное от IBM - от xSeries до Power. Учусь на кафедре Вычислительной Техники НИУ ИТМО.

See you...out there!

http://www.facebook.com/profile.php?id=100001947776045
https://twitter.com/AnnoyingBugs