我希望能够在 heroku 上的 rails 应用程序中使用命令行版本的 inkscape ( http://inkscape.org/ ) 进行一些图像处理。不,imagemagick 等不会这样做。
所以我开始在我自己的 buildpack 中使用inkscape 作为包含的二进制文件。
为此,我安装了 vulcan,下载了 inkscape 源代码,并尝试像这样构建:
curl -L -O http://downloads.sourceforge.net/inkscape/inkscape-0.48.4.tar.gz
tar -xzvf inkscape-0.48.4.tar.gz
cd inkscape-0.48.4
vulcan build -v -c './configure && make && make install'
现在,如果生活很简单,这将是“Just Work”,但由于“intltool”的版本太旧,它会出错。
./configure: line 5371: intltool-update: command not found
checking for intltool >= 0.22... found
configure: error: Your intltool is too old. You need intltool 0.22 or later.
好的,好的,所以我尝试使用 vulcan 构建该二进制文件以包含为 --deps。现在失败了,因为我需要一个 perl 模块 XML::Parser。我将如何安装这个 perl 模块?
我四处逛逛,离得更近了,我使用 cpanminus 安装了 XML::Parser:
vulcan build -v -c 'curl -LO http://xrl.us/cpanm && chmod +x cpanm && ./cpanm -v XML::Parser && ./configure && make && make install'
这让我将 XML::Parser 安装到 /app/perl5,但是我如何让 intltool 配置在那里找到它?
非常令人沮丧。许多牦牛被剃光。有什么建议吗?
更新
我得到了 intltool 来构建,并被 inkscapeconfigure
脚本识别,这就是最终奏效的方法:
vulcan build -p /tmp/intltool -v -c 'curl --silent -L http://cpanmin.us | perl - -l ~/perl5 App::cpanminus local::lib && eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib` && cpanm -n XML::Parser && ./configure --prefix=/tmp/intltool && make && make install'
之后,gettext 是下一个依赖项,我也必须构建它:
wget ftp://ftp.gnu.org/gnu/gettext/gettext-0.18.2.1.tar.gz
tar -xzvf gettext-0.18.2.1.tar.gz
cd gettext-0.18.2.1.tar.gz
vulcan build -p /tmp/gettext -v -c './configure --prefix=/tmp/gettext && make && make install'
现在,当我去构建inkscape 时,事情似乎顺理成章——我什至找到了multiple 的正确语法,--deps
但后来在使用这个gettext 二进制文件时停滞不前。这是我正在尝试的编译命令:
vulcan build -p /tmp/inkscape -v -c './configure --prefix=/tmp/inkscape && make && make install' --deps=intltool-build.herokuapp.com/output/1a0ef36b-f134-497d-b970-06896d90f936 gettext-build.herokuapp.com/output/9b9853c0-dfcc-47c8-9d8b-f48e1453026d
但是当 configure 开始检查 gettext 可执行文件时,它声称libgettextsrc-0.18.2.so
找不到,但我查看了二进制文件,它就在正确的 lib 目录中
这是错误(您可以看到 configure 正确找到 intltool 二进制文件,并且一些 gettext 二进制文件在 using 上失败xgettext
):
checking for intltool >= 0.22... 0.50.2 found
checking for intltool-update... /tmp/d20130529-2-9gtra6/deps/bin/intltool-update
checking for intltool-merge... /tmp/d20130529-2-9gtra6/deps/bin/intltool-merge
checking for intltool-extract... /tmp/d20130529-2-9gtra6/deps/bin/intltool-extract
checking for xgettext... /tmp/d20130529-2-9gtra6/deps/bin/xgettext
checking for msgmerge... /tmp/d20130529-2-9gtra6/deps/bin/msgmerge
checking for msgfmt... /tmp/d20130529-2-9gtra6/deps/bin/msgfmt
checking for gmsgfmt... /tmp/d20130529-2-9gtra6/deps/bin/msgfmt
/tmp/d20130529-2-9gtra6/deps/bin/xgettext: error while loading shared libraries: libgettextsrc-0.18.2.so: cannot open shared object file: No such file or directory
/tmp/d20130529-2-9gtra6/deps/bin/msgmerge: error while loading shared libraries: libgettextsrc-0.18.2.so: cannot open shared object file: No such file or directory
/tmp/d20130529-2-9gtra6/deps/bin/msgfmt: error while loading shared libraries: libgettextsrc-0.18.2.so: cannot open shared object file: No such file or directory
configure: error: GNU gettext tools not found; required for intltool
也许我的进步会帮助其他人使用 vulcan 来获得这种乐趣。关于 gettext 二进制文件的任何想法?也许有人已经在 heroku/vulcan 上进行了这项工作?