如何在RedHat OpenShift服务器上编译node.js模块画布?

时间:2015-04-19 09:49:45

标签: node.js canvas openshift cairo

在RedHat OpenShift服务器上,无法编译node.js模块画布,因为缺少linux的cairo库以及相关的必需库。

1 个答案:

答案 0 :(得分:3)

This is how to make it compile:

export PATH=/sbin:$PATH:$OPENSHIFT_DATA_DIR/usr/local/bin
export LD_LIBRARY_PATH=$OPENSHIFT_DATA_DIR/usr/local/lib:/opt/rh/nodejs010/root/usr/lib64:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=$OPENSHIFT_DATA_DIR/usr/local/lib/pkgconfig
cd $OPENSHIFT_DATA_DIR
curl -L http://sourceforge.net/projects/libpng/files/libpng16/1.6.17/libpng-1.6.17.tar.gz/download -o libpng.tar.gz
curl -L http://www.ijg.org/files/jpegsrc.v9a.tar.gz -o jpegsrc.tar.gz
curl -L http://www.cairographics.org/releases/pixman-0.32.6.tar.gz -o pixman.tar.gz  
curl -L http://public.p-knowledge.co.jp/Savannah-nongnu-mirror//freetype/freetype-2.5.5.tar.gz -o freetype.tar.gz
curl -L http://www.cairographics.org/releases/cairo-1.14.2.tar.xz -o cairo.tar.xz  
curl -L http://ftp.gnome.org/pub/GNOME/sources/pango/1.35/pango-1.35.3.tar.xz -o pango.tar.xz
curl -L http://www.freedesktop.org/software/fontconfig/release/fontconfig-2.11.1.tar.gz -o fontconfig.tar.gz
curl -L http://www.freedesktop.org/software/harfbuzz/release/harfbuzz-0.9.37.tar.bz2 -o harfbuzz.tar.bz2
curl -L http://ftp.gnome.org/pub/GNOME/sources/glib/2.34/glib-2.34.3.tar.xz -o glib.tar.xz
curl -L http://ftp.gnome.org/pub/GNOME/sources/pango/1.35/pango-1.35.3.tar.xz -o pango.tar.xz
cd $OPENSHIFT_DATA_DIR
gunzip libpng.tar.gz
tar -xvf libpng.tar
cd libpng-1.6.17/
./configure --prefix=$OPENSHIFT_DATA_DIR/usr/local
make
make install
cd $OPENSHIFT_DATA_DIR
tar -zxf jpegsrc.tar.gz && cd jpeg-9a/
./configure --disable-dependency-tracking --prefix=$OPENSHIFT_DATA_DIR/usr/local 
make
make install
cd $OPENSHIFT_DATA_DIR
tar -zxf pixman.tar.gz && cd pixman-0.32.6/  
./configure --prefix=$OPENSHIFT_DATA_DIR/usr/local  
make
make install
cd $OPENSHIFT_DATA_DIR
tar -zxf freetype.tar.gz && cd freetype-2.5.5/
./configure --prefix=$OPENSHIFT_DATA_DIR/usr/local  
make
make install
cd $OPENSHIFT_DATA_DIR
tar --xz -xvf cairo.tar.xz && cd cairo-1.14.2/
./configure --disable-dependency-tracking --without-x --prefix=$OPENSHIFT_DATA_DIR/usr/local
make
make install
cd $OPENSHIFT_DATA_DIR
tar -xvf fontconfig.tar.gz && cd fontconfig-2.11.1/
./configure --prefix=$OPENSHIFT_DATA_DIR/usr/local
make
make install
cd $OPENSHIFT_DATA_DIR
bunzip2 harfbuzz.tar.bz2
tar -xvf harfbuzz.tar && cd harfbuzz-0.9.37/
./configure --prefix=$OPENSHIFT_DATA_DIR/usr/local
make
make install
cd $OPENSHIFT_DATA_DIR
tar --xz -xvf glib.tar.xz && cd glib-2.34.3/
./configure --prefix=$OPENSHIFT_DATA_DIR/usr/local
make
make install
cd $OPENSHIFT_DATA_DIR
tar --xz -xvf pango.tar.xz && cd pango-1.35.3/
./configure --prefix=$OPENSHIFT_DATA_DIR/usr/local
make
make install
cd $OPENSHIFT_REPO_DIR
scl enable nodejs010 v8314 'npm install canvas'   
rm -rf "${OPENSHIFT_NODEJS_DIR}/tmp/saved.node_modules"

要在node.js服务器中使用这些库,您需要添加指向它们的自定义LD_LIBRARY_PATH条目:

在OpenShift git项目中添加目录:.openshift / markers 在此目录中创建名为:use_npm

的空文件

在package.json文件中添加以下条目:

  "scripts": {
    "start": "export LD_LIBRARY_PATH=$OPENSHIFT_DATA_DIR/usr/local/lib:/opt/rh/nodejs010/root/usr/lib64:$LD_LIBRARY_PATH; supervisor server.js"
  }

这通常有效,但有时会发生npm更新活动,这些活动开始重建canvas模块。

有时候bcrypt模块也不会构建。

解决方案是创建一个齿轮,其中一切正常,然后制作内容为$ OPENSHIFT_DATA_DIR / usr /的tar.gz文件 并将此文件传输到您可通过http://

访问的服务器

对于node_modules / canvas,node_modules / bcrypt和其他易受攻击的条目也应该这样做。

然后,可以使用OpenShift app hooks(build等)在适当的位置下载和提取这些文件的内容。

此外,您可以在CentOS 6.6上编译许多node_modules / xxxxx,然后将它们复制到运行RHEL 6.6的服务器上的正确位置 (二进制兼容性的东西,就像rpm包的安装一样)

这样就可以创建git存储库和可下载的tar.gz文件,这些文件可以自动启动新的RedHat OpenShift传输。

当然,如果有一些系统升级,tar.gz文件内容也必须升级。