查看文章
 
在CentOS 5 中安装Rmagick
2007-11-14 13:19


在CentOS 5 中安装Rmagick
# begin
Rmagick是ImageMagick的ruby接口封装,要先装好ImageMagick:
# 查看ImageMagick
yum list ImageMagick*
# 输出:
ImageMagick.x86_64                       6.2.8.0-3.el5.4        base           
ImageMagick.i386                         6.2.8.0-3.el5.4        base           
ImageMagick-c++.i386                     6.2.8.0-3.el5.4        base           
ImageMagick-c++.x86_64                   6.2.8.0-3.el5.4        base           
ImageMagick-c++-devel.x86_64             6.2.8.0-3.el5.4        base           
ImageMagick-c++-devel.i386               6.2.8.0-3.el5.4        base           
ImageMagick-devel.x86_64                 6.2.8.0-3.el5.4        base           
ImageMagick-devel.i386                   6.2.8.0-3.el5.4        base           
ImageMagick-perl.x86_64                  6.2.8.0-3.el5.4        base

# 安装要用的:
yum install ImageMagick.x86_64
yum install ImageMagick-devel.x86_64

# 检查是否成功安装:
rpm -qa | grep -i 'ImageMagick'
# 输出:
ImageMagick-devel-6.2.8.0-3.el5.4
ImageMagick-6.2.8.0-3.el5.4

yum list installed | grep ImageMagick*
# 输出:
ImageMagick.x86_64                       6.2.8.0-3.el5.4        installed      
ImageMagick-devel.x86_64                 6.2.8.0-3.el5.4        installed

# 查看rubygem-rmagick(使用RubyWorks打包的):
yum list rubygem-rmagick
# 输出:
rubygem-rmagick.x86_64                   1.15.7-1               rubyworks

# 安装RubyWorks的rmagick:
yum install rubygem-rmagick.x86_64

# 失败,报错:
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Package rubygem-rmagick.x86_64 0:1.15.7-1 set to be updated
--> Running transaction check
--> Processing Dependency: ImageMagick >= 6.0.7.1 for package: rubygem-rmagick
--> Processing Dependency: libdps.so.1()(64bit) for package: rubygem-rmagick
--> Processing Dependency: libMagick.so.6()(64bit) for package: rubygem-rmagick
--> Processing Dependency: libdpstk.so.1()(64bit) for package: rubygem-rmagick
--> Restarting Dependency Resolution with new changes.
--> Populating transaction set with selected packages. Please wait.
---> Package ImageMagick.x86_64 0:6.2.8.0-3.el5.4 set to be updated
--> Running transaction check
--> Processing Dependency: libdps.so.1()(64bit) for package: rubygem-rmagick
--> Processing Dependency: libMagick.so.6()(64bit) for package: rubygem-rmagick
--> Processing Dependency: libdpstk.so.1()(64bit) for package: rubygem-rmagick
--> Finished Dependency Resolution
Error: Missing Dependency: libdps.so.1()(64bit) is needed by package rubygem-rmagick
Error: Missing Dependency: libMagick.so.6()(64bit) is needed by package rubygem-rmagick
Error: Missing Dependency: libdpstk.so.1()(64bit) is needed by package rubygem-rmagick


# 尝试用gem自带的(依赖ImageMagick-devel.x86_64):
gem install rmagick
Select which gem to install for your platform (x86_64-linux)
1. rmagick 1.15.10 (ruby)
2. rmagick 1.15.9 (x86_64-linux)
3. rmagick 1.15.9 (ruby)
4. rmagick 1.15.8 (ruby)
5. Skip this gem
6. Cancel installation
> 1

# 但编译时报错:
This installation of RMagick 1.15.10 is configured for
ruby 1.8.6 (2007-06-07 patchlevel 36) [x86_64-linux] and ImageMagick 6.2.8.
RMagick configuration completed successfully.

make
if test -n "/usr/lib64/ruby/gems/1.8/gems/rmagick-1.15.10/lib"; then \
                RUBYLIBDIR=--rbdir="/usr/lib64/ruby/gems/1.8/gems/rmagick-1.15.10/lib"; \
        fi; \
        if test -n "/usr/lib64/ruby/gems/1.8/gems/rmagick-1.15.10/lib"; then \
                RUBYARCHDIR=--sodir="/usr/lib64/ruby/gems/1.8/gems/rmagick-1.15.10/lib"; \
        fi; \
        /usr/bin/ruby setup.rb config $RUBYLIBDIR $RUBYARCHDIR --data-dir=/share
---> lib
---> lib/rvg
<--- lib/rvg
<--- lib
---> ext
---> ext/RMagick
/usr/bin/ruby /usr/lib64/ruby/gems/1.8/gems/rmagick-1.15.10/ext/RMagick/extconf.rb
can't find header files for ruby.
setup.rb:655:in `command': system("/usr/bin/ruby" "/usr/lib64/ruby/gems/1.8/gems/rmagick-1.15.10/ext/RMagick/extconf.rb") failed (RuntimeError)
        from setup.rb:660:in `ruby'
        from setup.rb:1238:in `extconf'
        from setup.rb:1230:in `config_dir_ext'
        from setup.rb:1532:in `__send__'
        from setup.rb:1532:in `traverse'
        from setup.rb:1549:in `dive_into'
        from setup.rb:1530:in `traverse'
        from setup.rb:1534:in `traverse'
         ... 9 levels...
        from setup.rb:826:in `__send__'
        from setup.rb:826:in `invoke'
        from setup.rb:772:in `invoke'
        from setup.rb:1578
make: *** [.config] Error 1


Gem files will remain installed in /usr/lib64/ruby/gems/1.8/gems/rmagick-1.15.10 for inspection.
Results logged to /usr/lib64/ruby/gems/1.8/gems/rmagick-1.15.10/gem_make.out

# 选择其他版本:
gem install rmagick
2. rmagick 1.15.9 (x86_64-linux)
# 顺利装上:
Successfully installed rmagick-1.15.9-x86_64-linux

# 查看安装后信息:
gem list|grep rmagick
# rmagick (1.15.9)

# 尝试用ruby调用:
ruby -rrubygems -e "require 'RMagick'; puts Magick::Long_version;"
# 但报错:
/usr/lib64/ruby/gems/1.8/gems/rmagick-1.15.9-x86_64-linux/lib/RMagick.so: libMagick.so.6: cannot open shared object file: No such file or directory - /usr/lib64/ruby/gems/1.8/gems/rmagick-1.15.9-x86_64-linux/lib/RMagick.so (LoadError)
        from /usr/lib64/ruby/1.8/rubygems/custom_require.rb:32:in `require'
        from /usr/lib64/ruby/gems/1.8/gems/rmagick-1.15.9-x86_64-linux/lib/RMagick.rb:11
        from /usr/lib64/ruby/1.8/rubygems/custom_require.rb:32:in `gem_original_require'
        from /usr/lib64/ruby/1.8/rubygems/custom_require.rb:32:in `require'
        from -e:1

# 又是这个libMagick.so.6
# 查看是否有加载成功:
ldconfig -v|grep libMagick.so
# 输出:
        libMagick.so.10 -> libMagick.so.10.0.3

# 查找库文件在哪:
locate libMagick
# 输出:
/usr/lib/libMagick++.so
/usr/lib/libMagick++.so.10
/usr/lib/libMagick++.so.10.0.3
/usr/lib/libMagick.so
/usr/lib/libMagick.so.10
/usr/lib/libMagick.so.10.0.3
/usr/lib64/libMagick++.so
/usr/lib64/libMagick++.so.10
/usr/lib64/libMagick++.so.10.0.3
/usr/lib64/libMagick.so
/usr/lib64/libMagick.so.10
/usr/lib64/libMagick.so.10.0.3

# 有个libMagick.so.10,但却没有libMagick.so.6
google后发现:http://rpm.pbone.net/index.php3/stat/3/srodzaj/1/search/libMagick.so.6()(64bit)
libMagick.so.6 存在于ImageMagick-6.0.7.1-17.x86_64.rpm,难道要装回这么旧的版本?但在网上看到有人成功用源码安装ImageMagick 6.3.5-6 + RMagick1.15.9,没道理要由6.2.8倒退到6.0.7.1吧

# 再换个版本的rmagick
# 先卸载:
gem uninstall rmagick
# Successfully uninstalled rmagick version 1.15.9
# 再装:
gem install rmagick
3. rmagick 1.15.9 (ruby)

# 但报错,如跟装 1. rmagick 1.15.10 (ruby) 一样
# 再试了 4. rmagick 1.15.8 (ruby) 也一样,看来是只要是(ruby)版本的都有问题
# 搜索到 http://www.laoxiong.cn/archives/338 也是在make里过不去,难道还是gcc的问题?
# 检查gcc的版本:
gcc --version
gcc (GCC) 4.1.1 20070105 (Red Hat 4.1.1-52)

# 想升级gcc,但默认centos的源很少,没有可用的升级包
# 但第2个能编译成功,应该不是gcc的问题
# 检查ldconfig cache文件里是什么:
strings /etc/ld.so.cache|grep libmagic*
# 既无 libMagick.so.10 也无 libMagick.so.6
libmagic.so.1
/usr/lib64/libmagic.so.1
libmagic.so
/usr/lib64/libmagic.so
# 删除ldconfig的cache试试:
rm -f /etc/ld.so.cache
# 重新加载
ldconfig
# 再装rmagick,还是同样现象

# 尝试link一个libMagick.so.6
cd /usr/lib64/
ln -s libMagick.so.10.0.3 libMagick.so.6
ll libMagick*
lrwxrwxrwx 1 root root      19 Nov 14 15:39 libMagick.so -> libMagick.so.10.0.3
lrwxrwxrwx 1 root root      19 Nov 14 14:28 libMagick.so.10 -> libMagick.so.10.0.3
-rwxr-xr-x 2 root root 1788456 Mar 15 2007 libMagick.so.10.0.3
-rwxr-xr-x 2 root root 1788456 Mar 15 2007 libMagick.so.6
# 刷新加载库:
ldconfig
# 安装 2. rmagick 1.15.9 (x86_64-linux)
# 再尝试用ruby调用:
ruby -rrubygems -e "require 'RMagick'; puts Magick::Long_version;"
# 报错,但错误信息不同了:
/usr/lib64/ruby/gems/1.8/gems/rmagick-1.15.9-x86_64-linux/lib/RMagick.so: libdpstk.so.1: cannot open shared object file: No such file or directory - /usr/lib64/ruby/gems/1.8/gems/rmagick-1.15.9-x86_64-linux/lib/RMagick.so (LoadError)
        from /usr/lib64/ruby/1.8/rubygems/custom_require.rb:32:in `require'
        from /usr/lib64/ruby/gems/1.8/gems/rmagick-1.15.9-x86_64-linux/lib/RMagick.rb:11
        from /usr/lib64/ruby/1.8/rubygems/custom_require.rb:32:in `gem_original_require'
        from /usr/lib64/ruby/1.8/rubygems/custom_require.rb:32:in `require'
        from -e:1

# 这次缺少库文件 libdpstk.so.1,似乎对应上安装 rubygem-rmagick 失败的原因了,查找一下:
locate libdpstk
# 什么都没有
# 应该还需要个libdps.so.1 :
locate libdps
# 也什么都没有

# libdpstk 和 libdps 是 xorg-x11-libs (X Window System shared libraries)里:
http://rpm.pbone.net/index.php3/stat/3/srodzaj/1/search/libdpstk.so.1()(64bit)
http://rpm.pbone.net/index.php3/stat/3/srodzaj/1/search/libdps.so.1()(64bit)
# google到一个线索:http://gallery.menalto.com/node/31662
# 看来应该是CentOS的ImageMagick 6.2.8.0-3.el5.4 少装了几个库
# 看能不能“亡羊补牢”:
yum list xorg-x11-libs*
# 似乎libs不算yum套件,可能需要下载rpm来安装了
google了半天也没有找到centos5的xorg-x11-libs rpm,后来在IRC的centos频道里询问,有人提示我xorg-x11-libs是只存在于CentOS/RHEL4中,CentOS5里没有这个库。而Rubywords封装的rubygem-rmagick.x86_64其实是针对CentOS4的,"gem"命令被Rubyworks给覆盖了,所以"yum install rubygem-rmagick.x86_64"是和"gem install rmagick"(2. rmagick 1.15.9 (x86_64-linux)) 应该是一样,都是从Rubyworks里获取源包,所以才会有相同的错误。要使用rubyforge(ruby官方)的源就要指定一个URL:
gem install rmagick --source http://gems.rubyforge.org/

结果是要装RMagick 1.15.10 (相当于 "gem install rmagick" 然后选择1),同样还是出现同样的错误。rmagick 1.15.9 (x86_64-linux)这个版是CentOS4 only了,那只能从ruby版的入手,下面选定 rmagick 1.15.10 (ruby) 这个版了。
关键错误信息:
can't find header files for ruby
在rmagick的FAQ(http://rmagick.rubyforge.org/install-faq.html)里有说明:
You'll need to have the Ruby header files (ruby.h, etc.) installed. If you installed Ruby by compiling the source code you already have the header files. If Ruby was pre-installed on your system, or you installed Ruby from a pre-compiled package, you may need to install the Ruby header files separately.

# header files 会在哪里:
yum list ruby*
发现ruby-devel.x86_64还没装上,现在装上:
yum install ruby-devel.x86_64
这次不提示找不到header了,但却还是报错,关键提示:
Too many examples failed. Search for "Help!" at
            http://rmagick.rubyforge.org/install-faq.html.
post-setup.rb: RotateScale.rb example returned error code 256
make: *** [all] Error 1

FAQ(http://rmagick.rubyforge.org/install-faq.html#toomany)里有说明:
Help! Too many examples failed. What do I do?
As part of the installation process, the installer runs over 175 example scripts. These scripts serve two purposes. First, the scripts and the images they generate are used in the HTML documentation. Second, the scripts validate your installation and make sure that you have everything you need to use RMagick. When 5 or more examples fail, the installer determines that something is wrong and issues this message.

Look at the error messages issued by the failing examples. Usually the message will be one of the messages listed below. Refer to the help for that message to resolve your problem. If the message is not one of those listed below, first read the install HOWTO for your specific O/S (Windows, OS X, Linux and *BSD) and ensure that you've installed everything according to the instructions.

If you installed ImageMagick or GraphicsMagick or RMagick using a prebuilt package such as a .deb, .rpm, or .port, refer to the the installation instructions for that package. You might also try a web search engine such as Google. Searching for "RMagick install myosname" will often lead to web pages with advice about installing RMagick using your particular O/S's packaging system. (Yes, I know that sounds obvious but a lot of people don't think about doing it.)

仔细看回错误信息,很多是:
unable to read font `/usr/share/fonts/default/TrueType/verdana.ttf' (Magick::ImageMagickError)
之类的加载字体错误,查找一下:
ll /usr/share/fonts/default
total 16
drwxr-xr-x 2 root root 4096 Nov 13 17:58 ghostscript
drwxr-xr-x 2 root root 4096 Nov 13 17:58 Type1
没有TrueType这个目录
再细读FAQ,这些字体是由ImageMagick 或 GraphicsMagick 安装的
# 查看 ImageMagick/GraphicsMagick 的字体配置:
convert -list type
但并非所有列出来的字体都有装上,其中PostScript和TrueType 字体的安装路径不同,看"Path:"部分:
Path: /usr/lib64/ImageMagick-6.2.8/config/type-windows.xml
查看内容:
cat /usr/lib64/ImageMagick-6.2.8/config/type-windows.xml
...
<type
    name="Verdana"
    fullname="Verdana"
    family="Verdana"
    weight="400"
    style="normal"
    stretch="normal"
    glyphs="/usr/share/fonts/default/TrueType/verdana.ttf"
    />
...

显然TrueType字体ImageMagick默认没装,而FAQ里这样说:
FreeType and Ghostscript are prerequisites for ImageMagick/GraphicsMagick and RMagick. ImageMagick/GraphicsMagick prefers to use FreeType but will fall back to Ghostscript if FreeType is not available.
但现在是有Ghostscript,但并没有被代替FreeType来用(版本问题?)

手册提示:
http://rmagick.rubyforge.org/install-faq.html#imprereq
install the FreeType library and re-install ImageMagick/GraphicsMagick.
# 先装freetype:
yum install freetype

但安装完后freetype 发现并没有把TrueType字体放到 /usr/share/fonts/default/ 里:
http://rpm.pbone.net/index.php3/stat/4/idpl/4112683/com/freetype-2.2.1-17.el5.x86_64.rpm.html
(在Windows中可以用Winrar直接打开查看,freetype-2.2.1-17.el5.x86_64.rpm 文件才300多K,不像包含了字体)

根据手册提示重装ImageMagick:
# 卸载掉ImageMagick:
yum remove ImageMagick.x86_64
yum remove ImageMagick-devel.x86_64
# 又再安装:
yum install ImageMagick.x86_64 -y
yum install ImageMagick-devel.x86_64 -y

# 测试是否认出字体了:
convert label:abcdef test.gif
# 报错:
convert: unable to read font `/usr/share/fonts/default/TrueType/arial.ttf'.
# 难道 ImageMagick.x86_64 6.2.8.0-3.el5.4 这个版本不能使用libfreetype.so这种库文件

# 尝试安装gd-devel(包含freetype-devel):
yum install gd-devel
但还是没有字体:
# 直接查找:
find / -type f -iname verdana.ttf
# 也没有

# 到网上找了个truetype字体包(3MB),解压到对应目录:
wget http://www.osresources.com/files/centos-windows-fonts/msfonts.tbz
mkdir /usr/share/fonts/default/TrueType
tar xvjpf msfonts.tbz -C /usr/share/fonts/default/TrueType/

# 测试是否认出字体了:
convert label:abcdef test.gif
# 成功生成一个test.gif

# 再次尝试安装Rmagick:
gem install rmagick
1. rmagick 1.15.10 (ruby)
# Successfully installed rmagick-1.15.10

# 测试是否可在ruby中调用:
ruby -rrubygems -e "require 'RMagick'; puts Magick::Long_version;"
# 终于可以松口气:
This is RMagick 1.15.10 ($Date: 2007/06/09 16:45:25 $) Copyright (C) 2007 by Timothy P. Hunter
Built with ImageMagick 6.2.8 03/14/07 Q16 file:/usr/share/ImageMagick-6.2.8/doc/index.html
Built for ruby 1.8.6 (2007-06-07 patchlevel 36) [x86_64-linux]
Web page: http://rmagick.rubyforge.org
Email: rmagick@rubyforge.org

# 命令总结:
yum install ImageMagick.x86_64 -y
yum install ImageMagick-devel.x86_64 -y
yum install freetype
yum install gd-devel
wget http://www.osresources.com/files/centos-windows-fonts/msfonts.tbz
mkdir /usr/share/fonts/default/TrueType
tar xvjpf msfonts.tbz -C /usr/share/fonts/default/TrueType/
gem install rmagick
# test:
ruby -rrubygems -e "require 'RMagick'; puts Magick::Long_version;"
# at last:
echo CentOS 5 sucks!
# end


相关参考:
http://rubyforge.org/forum/forum.php?thread_id=2756&forum_id=1618
http://osresources.com/3_13_en.html
http://www.atmos.washington.edu/ImageMagick/install.html
http://rmagick.rubyforge.org/install-linux.html
http://www.javaeye.com/article/43228


类别:Ror||添加到搜藏 |分享到i贴吧|浏览(4688)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu