URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 88697
[ Назад ]

Исходное сообщение
"RRDtool и русский язык"

Отправлено Egenius , 13-Апр-10 10:34 
Доброго времени суток!

Перевожу MRTG статистику на RRD.
Проблема в том, что при генерации графиков скриптом "14all-1.1" русские символы на графиках превращаются в иероглифы.
Перекопал кучу доков, установил шрифты для RRD, переводил кодировку конфигов MRTG, сам скрипт изучил от и до, но проблема не решается.

Помогите найти решение !


Содержание

Сообщения в этом обсуждении
"RRDtool и русский язык"
Отправлено Egenius , 13-Апр-10 12:47 
Добавлю что, на сколько я понял, дело именно в перловом модуле RRDs.pm, т.к. сгенерированный скриптом русский текст на странице отображается нормально, а крякозябры только на графиках.

"RRDtool и русский язык"
Отправлено cuad0 , 13-Апр-10 12:55 
Не знаю, что за скриптами вы там пользуетесь, но как наводка:
rrdtool graph использует перем. окружения LC_ALL. Установите ее значение в соответствии с вашей локалью.
Напр у меня при генерации из шелла:
export LC_ALL=ru_RU.KOI8-R
rrdtool graph --параметры --параметры ...

работает нормально и с дефолтными шрифтами, и с микрософтскими ( sharpfonts.com )


"RRDtool и русский язык"
Отправлено Egenius , 13-Апр-10 14:47 
>Не знаю, что за скриптами вы там пользуетесь, но как наводка:
>rrdtool graph использует перем. окружения LC_ALL. Установите ее значение в соответствии с
>вашей локалью.
>Напр у меня при генерации из шелла:
>export LC_ALL=ru_RU.KOI8-R
>rrdtool graph --параметры --параметры ...
>
>работает нормально и с дефолтными шрифтами, и с микрософтскими ( sharpfonts.com )
>

Этот скрипт "14all.cgi" лежит на оф.сайте MRTG в разделе mrtg-rrd и рекомендован к использованию для простого перевода всей статистики на RRD.
Скрипт использует перловую библиотеку RRDs.pm и как в этом скрипте передать переменные окружения для меня загадка, т.к. я с перлом не дружу. Пробовал добавлять к аргументам "'--font', 'DEFAULT:8:Arial'", но кроме размера шрифта ничего не поменялось.

В самой системе вот такие переменные окружения:
LANG=ru_RU.UTF-8
RRD_DEFAULT_FONT=/usr/share/rrdtool/fonts/COUR8.TTF

Если подскажете как необходимые переменные передать этому скрипту, буду очень рад.


"RRDtool и русский язык"
Отправлено cuad0 , 13-Апр-10 15:15 
так погуглите по темам "linux, переменные окружения, lc_all, локаль", наверняка найдете что-нибудь.
вкратце, вам надо, чтобы в системе была установлена LC_ALL=ru_RU.UTF-8. Причем не для вашей учетной записи, а для юзера под которым запускается скрипт генерации графиков. Ну и проверьте, что сам файл скрипта у вас в утф8, а то мало ли...

"RRDtool и русский язык"
Отправлено Egenius , 13-Апр-10 15:22 
>так погуглите по темам "linux, переменные окружения, lc_all, локаль", наверняка найдете что-нибудь.
>
>вкратце, вам надо, чтобы в системе была установлена LC_ALL=ru_RU.UTF-8. Причем не для
>вашей учетной записи, а для юзера под которым запускается скрипт генерации
>графиков. Ну и проверьте, что сам файл скрипта у вас в
>утф8, а то мало ли...

Апач , из под которого запускается скрипт имеет переменную окружения ru_RU.UTF-8
но даже если поставить любую другую, то это ничего не меняет.
При любых переменных на графиках крякозябры, при том что, тот же скрипт при тех же переменных текстовые записи нормально генерит в русской кодировке.
Так что думаю дело тут не в переменных, а именно в RRDs.pm, который не хочет отрисовывать русские символы, а вот как заставить его это делать мне не понятно.


"RRDtool и русский язык"
Отправлено cuad0 , 13-Апр-10 15:30 

>Апач , из под которого запускается скрипт имеет переменную окружения ru_RU.UTF-8

это не переменная окружения, а ее значение. имя переменной какое? добавьте то же, но с именем LC_ALL.

>Так что думаю дело тут не в переменных, а именно в RRDs.pm,
>который не хочет отрисовывать русские символы, а вот как заставить его
>это делать мне не понятно.

Ну начнем с того, что графики рисует все-таки rrdtool graph, а не скрипт. А текст на графиках (на графиках! не на страницах) рендерится при помощи бекэнда pango.


"RRDtool и русский язык"
Отправлено Egenius , 13-Апр-10 15:53 
>[оверквотинг удален]
>это не переменная окружения, а ее значение. имя переменной какое? добавьте то
>же, но с именем LC_ALL.
>
>>Так что думаю дело тут не в переменных, а именно в RRDs.pm,
>>который не хочет отрисовывать русские символы, а вот как заставить его
>>это делать мне не понятно.
>
>Ну начнем с того, что графики рисует все-таки rrdtool graph, а не
>скрипт. А текст на графиках (на графиках! не на страницах) рендерится
>при помощи бекэнда pango.

Полностью вывод команды "env", запущенной от юзера apache:

su - apache -s /bin/sh
-sh-3.2$ env
HOSTNAME=www
SHELL=/bin/sh
TERM=xterm
HISTSIZE=1000
USER=apache
LS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:
MAIL=/var/spool/mail/apache
PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/netflow/bin/
INPUTRC=/etc/inputrc
PWD=/var/www
LANG=ru_RU.UTF-8
SHLVL=1
HOME=/var/www
LOGNAME=apache
LESSOPEN=|/usr/bin/lesspipe.sh %s
G_BROKEN_FILENAMES=1
HISTTIMEFORMAT=%d.%m.%Y %H:%M:%S
_=/bin/env

И ещё, параметр '--font','DEFAULT:18:TimeKOI8', найдённый в доке по RRD, не влияет на выбор  шрифта и всё равно используется стандартный щрифт "/usr/share/rrdtool/fonts.DejaVuSansMono-Roman.ttf". Проверял переименованием шрифта "TI_KOI8.TTF" в "DejaVuSansMono-Roman.ttf"


"RRDtool и русский язык"
Отправлено cuad0 , 13-Апр-10 16:34 
>Полностью вывод команды "env", запущенной от юзера apache:
>
 
>su - apache -s /bin/sh
>

Как видим, LC_ALL там нет. Я ж вам правильным языком в правильной локали написал - "установите переменную окружения LC_ALL=ru_RU.UTF-8".


>И ещё, параметр '--font','DEFAULT:18:TimeKOI8', найдённый в доке по RRD, не влияет на
>выбор  шрифта и всё равно используется стандартный щрифт

Влияет. Но в вашем случае не работает потому, что шрифта "TimeKOI8" у вас в системе нет.

fc-list выведет список всех установленных шрифтов. Юзайте любой.

И еще. Вы уверены, что в кодировках не запутались? Локаль у вас utf8, а шрифт пытаетесь использовать koi8. Текст в скриптах, надеюсь, не в cp1251 написан? :)


"RRDtool и русский язык"
Отправлено Egenius , 13-Апр-10 16:47 
>>Полностью вывод команды "env", запущенной от юзера apache:
>>
 
>>su - apache -s /bin/sh
>>

>
>Как видим, LC_ALL там нет. Я ж вам правильным языком в правильной
>локали написал - "установите переменную окружения LC_ALL=ru_RU.UTF-8".

А вот этого я никак не могу добиться для юзера апача.
Прописал в стартовом скрипте export LC_ALL="ru_RU.UTF-8"
но всё равно в переменных только LANG

>>И ещё, параметр '--font','DEFAULT:18:TimeKOI8', найдённый в доке по RRD, не влияет на
>>выбор  шрифта и всё равно используется стандартный щрифт
>Влияет. Но в вашем случае не работает потому, что шрифта "TimeKOI8" у
>вас в системе нет.


fc-list |grep TimeKOI8
TimeKOI8:style=Regular

С этим всё в порядке, шрифт есть.

>fc-list выведет список всех установленных шрифтов. Юзайте любой.
>
>И еще. Вы уверены, что в кодировках не запутались? Локаль у вас
>utf8, а шрифт пытаетесь использовать koi8. Текст в скриптах, надеюсь, не
>в cp1251 написан? :)

Не уверен, но как это проверить увы, не знаю.


"RRDtool и русский язык"
Отправлено cuad0 , 13-Апр-10 17:13 
>С этим всё в порядке, шрифт есть.

Тогда скорее всего, в шрифте нет необходимых глифов (символов), поэтому pango недостающие берет из дефолтного шрифта (или из похожего шрифта того же семейства, начертания, etc. не помню точно).
>
>Не уверен, но как это проверить увы, не знаю.

Попробуйте другой шрифт, желательно юникодный. Может у вас и так все нормально (если с кодировками не напутано) и LC_ALL не нужен. Поставьте микрософтские шрифты. Ссылку я вам давал, там и мануал по установке есть. На крайняк попробуйте стандартные шрифты типа Arial, Courier, Times.



"RRDtool и русский язык"
Отправлено Egenius , 14-Апр-10 08:29 
>[оверквотинг удален]
>Тогда скорее всего, в шрифте нет необходимых глифов (символов), поэтому pango недостающие
>берет из дефолтного шрифта (или из похожего шрифта того же семейства,
>начертания, etc. не помню точно).
>>
>>Не уверен, но как это проверить увы, не знаю.
>
>Попробуйте другой шрифт, желательно юникодный. Может у вас и так все нормально
>(если с кодировками не напутано) и LC_ALL не нужен. Поставьте микрософтские
>шрифты. Ссылку я вам давал, там и мануал по установке есть.
>На крайняк попробуйте стандартные шрифты типа Arial, Courier, Times.

В том то и дело что он даже не пытается использовать другой шрифт. Пробовал ставить и Arial, Courier, Times, но используется только свой стандартный. Потому и решил натравить его на KOI8, который лежит в той же папке, где и тот, что юзает rrd.
Насчёт кодировки самих файлов у меня тоже было подозрение, но они отпали после того как я увидел что текст на страницах корректно отображается, значит скрипт вытаскивает текст из конфигов MRTG нормально, даже когда текст в конифигах был в KOI-8. Плюс я пробовал менять кодировку как в конфигах MRTG, так и сам скрипт создавал копированием содержания скрипта в пустой файл.(cat > 14all.cgi)



"RRDtool и русский язык"
Отправлено gpl77 , 14-Апр-10 10:07 
>
>В том то и дело что он даже не пытается использовать другой
>шрифт. Пробовал ставить и Arial, Courier, Times, но используется только свой
>стандартный. Потому и решил натравить его на KOI8, который лежит в

rrdtool использует fontconfig.
посмотрите что подставляет fontconfig на запрошенные фонты. (fc-match)
посмотрите какие lang и style property fontconfig выдает и
попробуйте поиграть правилами подстановки


"RRDtool и русский язык"
Отправлено Egenius , 14-Апр-10 13:22 
>>
>>В том то и дело что он даже не пытается использовать другой
>>шрифт. Пробовал ставить и Arial, Courier, Times, но используется только свой
>>стандартный. Потому и решил натравить его на KOI8, который лежит в
>
>rrdtool использует fontconfig.
>посмотрите что подставляет fontconfig на запрошенные фонты. (fc-match)
>посмотрите какие lang и style property fontconfig выдает и
>попробуйте поиграть правилами подстановки

Вот что я получил по команде fc-match:
fc-match
n019003l.pfb: "Nimbus Sans L" "Regular"


"RRDtool и русский язык"
Отправлено gpl77 , 14-Апр-10 14:16 

>>rrdtool использует fontconfig.
>>посмотрите что подставляет fontconfig на запрошенные фонты. (fc-match)
>>посмотрите какие lang и style property fontconfig выдает и
>>попробуйте поиграть правилами подстановки
>
>Вот что я получил по команде fc-match:
>fc-match
>n019003l.pfb: "Nimbus Sans L" "Regular"

посмотрите man fc-match
ему на вход задаешь паттерн (то что запрашивает программа) (times, arial и т.п.)
в ответ получаем конкретный фонт, который выдаст на такой запрос fontconfig

несоответствия могут быть если properties отрабатываются некорректно (или не запрашиваются)


"RRDtool и русский язык"
Отправлено Egenius , 14-Апр-10 19:58 
>посмотрите man fc-match
>ему на вход задаешь паттерн (то что запрашивает программа) (times, arial и
>т.п.)
>в ответ получаем конкретный фонт, который выдаст на такой запрос fontconfig
>
>несоответствия могут быть если properties отрабатываются некорректно (или не запрашиваются)

Простите, может мои вопросы кажутся глупыми, но я уже ничего не понимаю. На все запросы fc-match выдаёт "n019003l.pfb: "Nimbus Sans L" "Regular""
запрашиваю вот так:
fc-match Arial
n019003l.pfb: "Nimbus Sans L" "Regular"

и только на
fc-match DejaVuSansMono-Roman.ttf

получаю ответ
DejaVuSansMono-Roman.ttf: "DejaVu Sans Mono" "Roman"

Куда дальше копать и что править ума не приложу. Ткните носом, если не сложно !



"RRDtool и русский язык"
Отправлено cuad0 , 22-Апр-10 00:14 
(написал пост, а потом только заметил, что уже неактуально)

"RRDtool и русский язык"
Отправлено Egenius , 15-Апр-10 16:10 
Всем спасибо за помощь!

Проблема была в старой версии rrdtool (1.2.29)
После обновления до 1.3.9 всё встало на свои места.

Ещё раз всем спасибо !


"RRDtool и русский язык"
Отправлено Вадим , 04-Июн-13 18:19 
yum install xorg-x11-fonts-cyrillic.noarch xorg-x11-fonts-ethiopic.noarch xorg-x11-fonts-misc.noarch xorg-x11-fonts-truetype.noarch xorg-x11-fonts-100dpi.noarch xorg-x11-fonts-75dpi.noarch fonts-ISO8859-2.noarch fonts-ISO8859-2-100dpi.noarch fonts-ISO8859-2-75dpi.noarch freefont.noarch

Помогло попробуй!