Доброго времени суток!Перевожу MRTG статистику на RRD.
Проблема в том, что при генерации графиков скриптом "14all-1.1" русские символы на графиках превращаются в иероглифы.
Перекопал кучу доков, установил шрифты для RRD, переводил кодировку конфигов MRTG, сам скрипт изучил от и до, но проблема не решается.Помогите найти решение !
Добавлю что, на сколько я понял, дело именно в перловом модуле RRDs.pm, т.к. сгенерированный скриптом русский текст на странице отображается нормально, а крякозябры только на графиках.
Не знаю, что за скриптами вы там пользуетесь, но как наводка:
rrdtool graph использует перем. окружения LC_ALL. Установите ее значение в соответствии с вашей локалью.
Напр у меня при генерации из шелла:
export LC_ALL=ru_RU.KOI8-R
rrdtool graph --параметры --параметры ...работает нормально и с дефолтными шрифтами, и с микрософтскими ( sharpfonts.com )
>Не знаю, что за скриптами вы там пользуетесь, но как наводка:
>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Если подскажете как необходимые переменные передать этому скрипту, буду очень рад.
так погуглите по темам "linux, переменные окружения, lc_all, локаль", наверняка найдете что-нибудь.
вкратце, вам надо, чтобы в системе была установлена LC_ALL=ru_RU.UTF-8. Причем не для вашей учетной записи, а для юзера под которым запускается скрипт генерации графиков. Ну и проверьте, что сам файл скрипта у вас в утф8, а то мало ли...
>так погуглите по темам "linux, переменные окружения, lc_all, локаль", наверняка найдете что-нибудь.
>
>вкратце, вам надо, чтобы в системе была установлена LC_ALL=ru_RU.UTF-8. Причем не для
>вашей учетной записи, а для юзера под которым запускается скрипт генерации
>графиков. Ну и проверьте, что сам файл скрипта у вас в
>утф8, а то мало ли...Апач , из под которого запускается скрипт имеет переменную окружения ru_RU.UTF-8
но даже если поставить любую другую, то это ничего не меняет.
При любых переменных на графиках крякозябры, при том что, тот же скрипт при тех же переменных текстовые записи нормально генерит в русской кодировке.
Так что думаю дело тут не в переменных, а именно в RRDs.pm, который не хочет отрисовывать русские символы, а вот как заставить его это делать мне не понятно.
>Апач , из под которого запускается скрипт имеет переменную окружения ru_RU.UTF-8это не переменная окружения, а ее значение. имя переменной какое? добавьте то же, но с именем LC_ALL.
>Так что думаю дело тут не в переменных, а именно в RRDs.pm,
>который не хочет отрисовывать русские символы, а вот как заставить его
>это делать мне не понятно.Ну начнем с того, что графики рисует все-таки rrdtool graph, а не скрипт. А текст на графиках (на графиках! не на страницах) рендерится при помощи бекэнда pango.
>[оверквотинг удален]
>это не переменная окружения, а ее значение. имя переменной какое? добавьте то
>же, но с именем 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"
>Полностью вывод команды "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 написан? :)
>>Полностью вывод команды "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 написан? :)Не уверен, но как это проверить увы, не знаю.
>С этим всё в порядке, шрифт есть.Тогда скорее всего, в шрифте нет необходимых глифов (символов), поэтому pango недостающие берет из дефолтного шрифта (или из похожего шрифта того же семейства, начертания, etc. не помню точно).
>
>Не уверен, но как это проверить увы, не знаю.Попробуйте другой шрифт, желательно юникодный. Может у вас и так все нормально (если с кодировками не напутано) и LC_ALL не нужен. Поставьте микрософтские шрифты. Ссылку я вам давал, там и мануал по установке есть. На крайняк попробуйте стандартные шрифты типа Arial, Courier, Times.
>[оверквотинг удален]
>Тогда скорее всего, в шрифте нет необходимых глифов (символов), поэтому pango недостающие
>берет из дефолтного шрифта (или из похожего шрифта того же семейства,
>начертания, etc. не помню точно).
>>
>>Не уверен, но как это проверить увы, не знаю.
>
>Попробуйте другой шрифт, желательно юникодный. Может у вас и так все нормально
>(если с кодировками не напутано) и LC_ALL не нужен. Поставьте микрософтские
>шрифты. Ссылку я вам давал, там и мануал по установке есть.
>На крайняк попробуйте стандартные шрифты типа Arial, Courier, Times.В том то и дело что он даже не пытается использовать другой шрифт. Пробовал ставить и Arial, Courier, Times, но используется только свой стандартный. Потому и решил натравить его на KOI8, который лежит в той же папке, где и тот, что юзает rrd.
Насчёт кодировки самих файлов у меня тоже было подозрение, но они отпали после того как я увидел что текст на страницах корректно отображается, значит скрипт вытаскивает текст из конфигов MRTG нормально, даже когда текст в конифигах был в KOI-8. Плюс я пробовал менять кодировку как в конфигах MRTG, так и сам скрипт создавал копированием содержания скрипта в пустой файл.(cat > 14all.cgi)
>
>В том то и дело что он даже не пытается использовать другой
>шрифт. Пробовал ставить и Arial, Courier, Times, но используется только свой
>стандартный. Потому и решил натравить его на KOI8, который лежит вrrdtool использует fontconfig.
посмотрите что подставляет fontconfig на запрошенные фонты. (fc-match)
посмотрите какие lang и style property fontconfig выдает и
попробуйте поиграть правилами подстановки
>>
>>В том то и дело что он даже не пытается использовать другой
>>шрифт. Пробовал ставить и Arial, Courier, Times, но используется только свой
>>стандартный. Потому и решил натравить его на KOI8, который лежит в
>
>rrdtool использует fontconfig.
>посмотрите что подставляет fontconfig на запрошенные фонты. (fc-match)
>посмотрите какие lang и style property fontconfig выдает и
>попробуйте поиграть правилами подстановкиВот что я получил по команде fc-match:
fc-match
n019003l.pfb: "Nimbus Sans L" "Regular"
>>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 отрабатываются некорректно (или не запрашиваются)
>посмотрите 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 (1.2.29)
После обновления до 1.3.9 всё встало на свои места.Ещё раз всем спасибо !
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Помогло попробуй!