The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
RRDtool и русский язык, !*! Egenius, 13-Апр-10, 10:34  [смотреть все]
Доброго времени суток!

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

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

  • RRDtool и русский язык, !*! Egenius, 12:47 , 13-Апр-10 (1)
    Добавлю что, на сколько я понял, дело именно в перловом модуле RRDs.pm, т.к. сгенерированный скриптом русский текст на странице отображается нормально, а крякозябры только на графиках.
    • RRDtool и русский язык, !*! cuad0, 12:55 , 13-Апр-10 (2)
      • RRDtool и русский язык, !*! Egenius, 14:47 , 13-Апр-10 (3)
        >Не знаю, что за скриптами вы там пользуетесь, но как наводка:
        >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, 15:15 , 13-Апр-10 (4)
          • RRDtool и русский язык, !*! Egenius, 15:22 , 13-Апр-10 (5)
            >так погуглите по темам "linux, переменные окружения, lc_all, локаль", наверняка найдете что-нибудь.
            >
            >вкратце, вам надо, чтобы в системе была установлена LC_ALL=ru_RU.UTF-8. Причем не для
            >вашей учетной записи, а для юзера под которым запускается скрипт генерации
            >графиков. Ну и проверьте, что сам файл скрипта у вас в
            >утф8, а то мало ли...

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

            • RRDtool и русский язык, !*! cuad0, 15:30 , 13-Апр-10 (6)
              • RRDtool и русский язык, !*! Egenius, 15:53 , 13-Апр-10 (7)
                >[оверквотинг удален]
                >это не переменная окружения, а ее значение. имя переменной какое? добавьте то
                >же, но с именем 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, 16:34 , 13-Апр-10 (8)
                  • RRDtool и русский язык, !*! Egenius, 16:47 , 13-Апр-10 (9)
                    >>Полностью вывод команды "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, 17:13 , 13-Апр-10 (10)
                      • RRDtool и русский язык, !*! Egenius, 08:29 , 14-Апр-10 (11)
                        >[оверквотинг удален]
                        >Тогда скорее всего, в шрифте нет необходимых глифов (символов), поэтому pango недостающие
                        >берет из дефолтного шрифта (или из похожего шрифта того же семейства,
                        >начертания, etc. не помню точно).
                        >>
                        >>Не уверен, но как это проверить увы, не знаю.
                        >
                        >Попробуйте другой шрифт, желательно юникодный. Может у вас и так все нормально
                        >(если с кодировками не напутано) и LC_ALL не нужен. Поставьте микрософтские
                        >шрифты. Ссылку я вам давал, там и мануал по установке есть.
                        >На крайняк попробуйте стандартные шрифты типа Arial, Courier, Times.

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


                        • RRDtool и русский язык, !*! gpl77, 10:07 , 14-Апр-10 (12)
                        • RRDtool и русский язык, !*! Egenius, 13:22 , 14-Апр-10 (13)
                          >>
                          >>В том то и дело что он даже не пытается использовать другой
                          >>шрифт. Пробовал ставить и 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:16 , 14-Апр-10 (14)
                        • RRDtool и русский язык, !*! Egenius, 19:58 , 14-Апр-10 (15)
                          >посмотрите 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, 00:14 , 22-Апр-10 (17)
    • RRDtool и русский язык, !*! Egenius, 16:10 , 15-Апр-10 (16)
      Всем спасибо за помощь!

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

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

  • RRDtool и русский язык, !*! Вадим, 18:19 , 04-Июн-13 (18)



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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