酷!學園
2010-09-03 13:13 *
歡迎光臨, 訪客. 請先 登入註冊一個帳號.
您忘了 啟用您的帳號嗎?

請輸入帳號, 密碼以及預計登入時間
新聞:
 
   首頁 | Study-Area | 鳥園 | 鳥哥的Linux私房菜   說明 搜尋 日曆 登入 註冊  
頁: [1]
  列印  
作者 主題: [分享]RRDTool 中文版安裝經驗  (閱讀 30983 次)
0 會員 以及 1 訪客 正在閱讀本篇主題.
Ada
懷疑的國中生
**
文章: 33


檢視個人資料
« 於: 2004-06-01 18:19 »

最近研究了一下 RRD Tool 這個工具,並蒙 abelyang 提供其修改過的 RRDTool 中文化版本,在此將建置的經驗分享給各位網友參考。

前置準備:

系統要先安裝以下套件,請注意必須連同標頭檔一併安裝。在 Gentoo 上在 emerge 時即會直接將相關標頭檔一併安裝;若使用的是 RedHat  系列時則必須連同對應的 -devel 套件包。倘若必須自行 make 的話,則請注意必須指定安裝路徑如下:
程式碼:
freetype2 --prefix=/usr
gd-2.0.12 --prefix=/usr/local
libiconv --prefix=/usr/local

若一時找不到那邊可以下載時,可利用 abelyang 整理的 tar gzip 包包。http://211.72.210.251/all_need_by_rrd.tgz

另外請一併安裝由發行套件所提供的字型檔案,Gentoo 上是 emerge  media-fonts/arphicfonts 這個字形套件;RedHat 上則是 ttfonts-zh_TW-2.11-19.noarch.rpm 或 ttfonts-zh_TW-2.11-19.386.rpm 套件包。

下載 rrdtool 套件

要輸出中文訊息的話,就必須使用 abelyang 修改過的 rrdtool ,您可在 http://211.72.210.251/rrdtool-big5.tar.gz 處取得。

若您使用 Gentoo Linux
[list=1]
  • 自行建立 gnroff 的 soft link
    程式碼:
    ln -s  /usr/bin/nroff /usr/bin/gnroff

  • 修改 perl-piped 及 perl-shared 目錄下的 Makefile, 將 perl 版本別 (5.8.0) 改為系統上的狀態,例如在我的系統上必須改成 5.8.2。
  • 修改 perl-piped 及 perl-shared 目錄下的 Makefile, 將 i386-linux-thread-multi 改為系統上的狀態,例如在我的系統上必須修改為i686-linux。
  • 修改 gd1.3/gd.c 中字型檔位置,看是要直接複製一份 bkai00mp.ttf 字形檔到 /usr/share/fonts/zh_TW/TrueType 下,或是修改 gd1.3/gd.c 程式,將
    程式碼:
    gdImageStringTTF(im,&brect[0], color, "/usr/share/fonts/zh_TW/TrueType/bkai00mp.ttf",12,0.0,x-2,y+10,UTF8_String((char *)s));
    改為
    程式碼:
    gdImageStringTTF(im,&brect[0], color, "/usr/share/fonts/ttf/zh_TW/bkai00mp.ttf",12,0.0,x-2,y+14,UTF8_String((char *)s));

  • 不要作 ./configure ,直接在 rrdtool 目錄下 make clean; make; make install
  • 執行 rrdtool 看看有沒有安裝成功?成功後快試試看能不能輸出中文訊息吧。
  • [/list:o]
若您使用 RedHat  Linux (已在 RHEL 3 WS 及 RedHat 9 上測試過):
[list=1]
  • 修改 perl-piped 及 perl-shared 目錄下的 Makefile, 將 perl 版本別改為系統上的狀態。
  • 修改 perl-piped 及 perl-shared 目錄下的 Makefile, 將 i386-linux-thread-multi 改為系統上的狀態。
  • 不要作 ./configure ,直接在 rrdtool 目錄下 make clean; make; make install
  • 執行 rrdtool 看看有沒有安裝成功?成功後快試試看能不能輸出中文訊息吧。
  • [/list:o]
    依以上的經驗,可以推斷
若使用其他發行套件時
[list=1]
  • 確認相依性套件是否已安裝,特別是輔助的標頭檔部份。
  • 確認 perl-piped 及 perl-shared 中的 Perl 相關目錄及版本設定與當前系統相符。
  • 確認字形安裝路徑,視情形修改 gd.c 中的路徑位置。
  • 若想更改成非 Big5 碼系統時,則必須額外確認以下事項:
[list=a]
  • 安裝對應的字形檔名。
  • 修改 gd1.3/gd.c 中的字型檔路徑與檔名。
  • 修改 gd1.3/gd.c 中編碼的名稱,例如希望改成簡體中文 GB2312 碼時,即將
    程式碼:
    cd=iconv_open("UTF-8","BIG5");
    改為
    程式碼:
    cd=iconv_open("UTF-8","GB2312");

    [/list:o]
    [/list:o]
已記錄
abelyang
酷!學園 學長們
俺是博士!
*****
文章: 1097


檢視個人資料
« 回覆文章 #1 於: 2004-06-02 13:16 »

引用
gdImageStringTTF(im,&brect[0], color, "/usr/share/fonts/zh_TW/TrueType/bkai00mp.ttf",12,0.0,x-2,y+10,UTF8_String((char *)s));


解釋一下這個部份.
字型(bkai00mp.ttf) 可以自己改成想要的 TTF 檔,
12 是字體大小
0.0 是文字輸出時的角度
x-2 是圖例欄的位置,
y+10 改成 y+12 或 y+13 or y+14 較好,

如此字距才會夠
UTF8 則是轉碼,用 GB 則就如 ada 兄所提的方式即可
已記錄
梁楓
俺是博士!
*****
文章: 6217



檢視個人資料
« 回覆文章 #2 於: 2004-06-02 14:42 »

哇!
贊贊!

我還在想中文出不來怎麼辦...
已記錄
Ada
懷疑的國中生
**
文章: 33


檢視個人資料
« 回覆文章 #3 於: 2004-06-02 18:05 »

引用自: "abelyang"
引用
gdImageStringTTF(im,&brect[0], color, "/usr/share/fonts/zh_TW/TrueType/bkai00mp.ttf",12,0.0,x-2,y+10,UTF8_String((char *)s));


解釋一下這個部份.
字型(bkai00mp.ttf) 可以自己改成想要的 TTF 檔,
12 是字體大小
0.0 是文字輸出時的角度
x-2 是圖例欄的位置,
y+10 改成 y+12 或 y+13 or y+14 較好,

如此字距才會夠
UTF8 則是轉碼,用 GB 則就如 ada 兄所提的方式即可


大驚~~~
我一直以為 y 是指行距,所以目前是改成 y+14,現在仔細的瞧了瞧... 呃... 好像真的是字距耶... @@!!
已記錄
abelyang
酷!學園 學長們
俺是博士!
*****
文章: 1097


檢視個人資料
« 回覆文章 #4 於: 2004-06-02 18:42 »

字輸出 12 的字型...
若 y+10 則字太近 ..
y+12 以上才會理,這是我沒寫好的地方...
已記錄
jet0202ttt
可愛的小學生
*
文章: 7


檢視個人資料
« 回覆文章 #5 於: 2004-08-31 10:31 »

你好 :
環境 Fedora Linux
好不容易中文化了, 但星期顯示有問題...
如下圖所示 =>


謝謝你的幫忙 ..........
已記錄
abelyang
酷!學園 學長們
俺是博士!
*****
文章: 1097


檢視個人資料
« 回覆文章 #6 於: 2004-08-31 10:45 »

沒看到圖,
不過猜想,星期顯示有問題是因為你的 locale
請設成 zh_TW.Big5 即可,若不是再來看看是何原因囉
已記錄
jet0202ttt
可愛的小學生
*
文章: 7


檢視個人資料
« 回覆文章 #7 於: 2004-08-31 13:41 »

已經OK了 !!!!!!!!
謝謝大大你的熱心幫助
已記錄
cjp
懷疑的國中生
**
文章: 30


檢視個人資料
« 回覆文章 #8 於: 2004-09-02 15:22 »

請問各位...
RRD安裝在WINDOWS2000下圖形要如何顯示中文?
已記錄
abelyang
酷!學園 學長們
俺是博士!
*****
文章: 1097


檢視個人資料
« 回覆文章 #9 於: 2004-09-02 15:39 »

這我不知道~我不懂 windows programing , 看看有沒有人願意
porting , 大概需要的動作就和我那樣差不多吧
已記錄
cwinl
可愛的小學生
*
文章: 12


檢視個人資料
« 回覆文章 #10 於: 2004-12-21 12:25 »

我下不到http://211.72.210.251/rrdtool-big5.tar.gz 这个包了
麻烦您能再放上去吗?

谢谢!
已記錄
abelyang
酷!學園 學長們
俺是博士!
*****
文章: 1097


檢視個人資料
« 回覆文章 #11 於: 2004-12-21 12:30 »

一直都在...
你是大陸來的朋友吧...
找個 proxy 再試看看
已記錄
cwinl
可愛的小學生
*
文章: 12


檢視個人資料
« 回覆文章 #12 於: 2004-12-22 10:11 »


才知道
昨天也怀疑是这个问题了

谢谢!
已記錄
cwinl
可愛的小學生
*
文章: 12


檢視個人資料
« 回覆文章 #13 於: 2004-12-22 11:01 »

我下了那个包
在RH9下安装
我的locale是zh_CN:GB2312
按要求安装了需要的包和修改了source
make clean;make;make install

但生成的图有问题
没有文字
我保证字体文件是存在的
而且我通过修改source使它分别指向了zh_CN和zh_TW的truetype字体文件
可问题依旧
下面附上我生成的一个图



我生成图的脚本如下:

#! /bin/bash
RRD=/usr/local
RRD_FILE=/xxx/zhcn.rrd
IMAGE=/xxx

$RRD/bin/rrdtool graph $IMAGE/forum-hour-zhcn.png \
--title "forum" \
DEF:t1=$RRD_FILE:total:AVERAGE \
DEF:t2=$RRD_FILE:reg:AVERAGE \
DEF:t3=$RRD_FILE:guest:AVERAGE \
COMMENT:"\n" \
COMMENT:"Statistic:---Max---Avg---Min---Now\n" \
AREA:t1#00cc00:"Total" \
GPRINT:t1:MAX:"  %4.0lf" \
GPRINT:t1:AVERAGE:"%4.0lf" \
GPRINT:t1:MIN:"%4.0lf" \
GPRINT:t1:LAST:"%4.0lf\n" \
LINE1:t2#0000ff:"Reguser" \
GPRINT:t2:MAX:"%4.0lf" \
GPRINT:t2:AVERAGE:"%4.0lf" \
GPRINT:t2:MIN:"%4.0lf" \
GPRINT:t2:LAST:"%4.0lf\n" \
LINE1:t3#aa0000:"Guests" \
GPRINT:t3:MAX:" %4.0lf" \
GPRINT:t3:AVERAGE:"%4.0lf" \
GPRINT:t3:MIN:"%4.0lf" \
GPRINT:t3:LAST:"%4.0lf\n" \
COMMENT:"\n" \
COMMENT:"\n" \
COMMENT:"    Last Updated:  $now\n" \
COMMENT:"    Maintainer:    cwinl\n" \
-v "[ hour onlines ]" -M -U 10 \
-c BACK#d3d8ab \
-Y -h 200 -w 480 -s `date -d "-1  $t" +%s` -b 1024
已記錄
abelyang
酷!學園 學長們
俺是博士!
*****
文章: 1097


檢視個人資料
« 回覆文章 #14 於: 2004-12-22 11:17 »

你再找找,上面的動做你缺少了什麼...
我確定來自大陸的朋友是可以裝成功的 (GB2312)
但不知道你少了什麼動作
已記錄
cwinl
可愛的小學生
*
文章: 12


檢視個人資料
« 回覆文章 #15 於: 2004-12-22 13:07 »

奇怪的是:
-v参数是可以写出东西的,其他就都写不出来

我在debian下装了一下,也是同样的问题
能是iconv的问题吗?或者是perl的问题
已記錄
ihweb
可愛的小學生
*
文章: 3


檢視個人資料
« 回覆文章 #16 於: 2005-01-25 14:31 »

我的作业系统是 FreeBSD,也很想用中文。

请教:为什么不能用./configure 呢?

一、我的 prefix 不是 default 的,我一般都安装在其他地方的。

二、作业系统不一样,也应该要 ./configure 吧? :oops:  :oops:  :oops:

麻烦 各位前辈了。
已記錄
ihweb
可愛的小學生
*
文章: 3


檢視個人資料
« 回覆文章 #17 於: 2005-01-25 15:05 »

编译的时候,缺少 iconv.h

从系统 cp 一个过来,make 也不成功。
已記錄
ihweb
可愛的小學生
*
文章: 3


檢視個人資料
« 回覆文章 #18 於: 2005-01-25 15:17 »

更换 iconv.h 编译出现:

In file included from rrd_tool.h:37,
                 from rrd_cgi.c:7:
/usr/include/stdlib.h:110: warning: ANSI C does not support `long long'
/usr/include/stdlib.h:114: warning: ANSI C does not support `long long'
rrd_cgi.c:253: warning: no previous prototype for `rrdstrip'
rrd_cgi.c:443: warning: no previous prototype for `scanargs'
/bin/sh ../libtool --mode=link gcc  -g -O2 -Wall -pedantic -Wshadow -Wpointer-arith -Wcast-align -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline  -fPIC  -o rrdcgi  rrd_cgi.o librrd.la -lm
gcc -g -O2 -Wall -pedantic -Wshadow -Wpointer-arith -Wcast-align -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline -fPIC -o rrdcgi rrd_cgi.o .libs/librrd.a -lm -lm -lm -lm -lm -lm
.libs/librrd.a(gd.o): In function `gdImageString':
/ServerInstall/RRDtool/rrdtool-1.0.42/gd1.3/gd.c(.text+0xc7d): undefined reference to `gdImageStringTTF'
.libs/librrd.a(gd.o): In function `UTF8_String':
/ServerInstall/RRDtool/rrdtool-1.0.42/gd1.3/gd.c(.text+0xcb6): undefined reference to `iconv_open'
/ServerInstall/RRDtool/rrdtool-1.0.42/gd1.3/gd.c(.text+0xd06): undefined reference to `iconv'
/ServerInstall/RRDtool/rrdtool-1.0.42/gd1.3/gd.c(.text+0xd15): undefined reference to `iconv_close'
*** Error code 1

Stop in /ServerInstall/RRDtool/rrdtool-1.0.42/src.
*** Error code 1

Stop in /ServerInstall/RRDtool/rrdtool-1.0.42.
已記錄
abelyang
酷!學園 學長們
俺是博士!
*****
文章: 1097


檢視個人資料
« 回覆文章 #19 於: 2005-06-10 17:03 »

引用自: "ihweb"
我的作业系统是 FreeBSD,也很想用中文。

请教:为什么不能用./configure 呢?

一、我的 prefix 不是 default 的,我一般都安装在其他地方的。

二、作业系统不一样,也应该要 ./configure 吧? :oops:  :oops:  :oops:

麻烦 各位前辈了。

從前沒注意看這個問題..
你的解法在於你了不了解 Makefile 語法
如果懂的話,只要修一下 Makefile 即可
但前題是一個要先裝好 freetype2/gd/iconv
再對照 -L -l -I 等 gcc 參數下去改
已記錄
abelyang
酷!學園 學長們
俺是博士!
*****
文章: 1097


檢視個人資料
« 回覆文章 #20 於: 2005-06-10 17:05 »

rrdtool 1.2.8 中文化 Patch , 若不懂 patch 請先研究用法
我只試過 1.2.8 ,  >1.2.8 適不適用否我就不知了
Patch 處都做了注解,方便有需要研究的人

新版的 rrd (1.2.x) 調用 FT (freetype2) 做 TTF 輸出
所以程式用 1.0.x 版完全不能適用哦,切記
程式碼:
diff -u rrdtool-1.2.8/src/rrd_gfx.c rrdtool-1.2.8-big5/src/rrd_gfx.c
--- rrdtool-1.2.8/src/rrd_gfx.c Fri Jun 10 16:54:58 2005
+++ rrdtool-1.2.8-big5/src/rrd_gfx.c Fri Jun 10 16:45:42 2005
@@ -378,6 +378,9 @@
   unsigned int  n;
   int           error;
   int        gottab = 0;    
+  // 雙字元處理 multi-bytes 問題
+  wchar_t* w_text;
+
   ft_pen.x = 0;   /* start at (0,0) !! */
   ft_pen.y = 0;
 
@@ -391,6 +394,11 @@
   string->transform.xy = (FT_Fixed)(-sin(M_PI*(rotation)/180.0)*0x10000);
   string->transform.yx = (FT_Fixed)( sin(M_PI*(rotation)/180.0)*0x10000);
   string->transform.yy = (FT_Fixed)( cos(M_PI*(rotation)/180.0)*0x10000);
+  // pointer malloc
+  w_text = (wchar_t) calloc (string->count,sizeof(wchar_t));
+  //  轉換為 wide 型式
+  mbstowcs(w_text,text,string->count);
+
 
   use_kerning = FT_HAS_KERNING(face);
   previous    = 0;
@@ -419,8 +427,8 @@
     glyph->pos.x = 0;
     glyph->pos.y = 0;
     glyph->image = NULL;
-
-    glyph->index = FT_Get_Char_Index( face, letter );
+ // 字符隻轉換
+    glyph->index = FT_Get_Char_Index( face, w_text[n]);
 
     /* compute glyph origin */
     if ( use_kerning && previous && glyph->index ) {
@@ -495,6 +503,8 @@
   } */
   string->height = string->bbox.yMax - string->bbox.yMin;
 
+  free(w_text);
+
   return string;
 }
 
diff -u rrdtool-1.2.8/src/rrd_graph.c rrdtool-1.2.8-big5/src/rrd_graph.c
--- rrdtool-1.2.8/src/rrd_graph.c Fri Jun 10 16:54:58 2005
+++ rrdtool-1.2.8-big5/src/rrd_graph.c Fri Jun 10 16:36:04 2005
@@ -2793,7 +2793,9 @@
     tzset();
 #endif
 #ifdef HAVE_SETLOCALE
-    setlocale(LC_TIME,"");
+    //setlocale(LC_TIME,"");
+    // 可以不定 locale , 由系統自動判斷
+    setlocale(LC_ALL,"zh_TW.BIG5");
 #endif
     im->yorigin=0;
     im->xorigin=0;
已記錄
suss
可愛的小學生
*
文章: 2


檢視個人資料
« 回覆文章 #21 於: 2005-11-02 09:31 »

进行make时,总是出现tcl.h找不到,怎么回事?
已記錄
Ada
懷疑的國中生
**
文章: 33


檢視個人資料
« 回覆文章 #22 於: 2006-04-26 00:23 »

自從發表了 rrdtool 中文輸出心得後,一直沒注意 rrdtool 的發展(一方面是 Gentoo 的限制),然後 rrdtool 就從 1.0.x 版升級到 1.2.x 啦... 可惜官方版本還是不能繪製中文... 難過

為了能在 Gentoo Linux 上使用 RRDTool 繪製中文,我參照 abelyang 的 patch 修改了 rrdtool-1.2.12-r1.ebuild 這個 EBuild 檔,似乎可以完成編譯(但是有一堆 warning... )、可以將資料寫入 RRD、當然也可以繪製含中文字的圖形,有需要的人可以捉回去試試!

※2007-12-26 補充:其實 rrdtool 自 1.2.15 版起就可以支援 UTF-8 中文(其他編碼沒試過)輸出了,不再需要做相關 patch 動作。

※注意事項:
  • 我的平台是 UTF-8 環境,所以我選擇使用自動偵測語系設定的方式而非強制指定。
  • 兩個 patch 檔目前放在個人的 blog 主機上,如果無法下載的話請稍候再試。
  • 如果看不到字或出現框框字,那表示 rrdgraph 看到的中文字編碼與 LC_ALL 指定的不一樣!請檢查 rrdtool graph 指令檔和 locale 設定。

範例如下,我使用的是 CWTTF 的仿宋體輸出:
« 最後編輯時間: 2007-12-26 09:33 由 Ada » 已記錄
頁: [1]
  列印  
 
前往:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006, Simple Machines LLC Valid XHTML 1.0! Valid CSS!
本頁花了 0.107 秒,以及 16 次的資料庫查詢。