问题描述
在RedHat OpenShift服务器上,无法编译node.js模块画布,因为缺少linux的cairo库以及相关的必需库。
On RedHat OpenShift servers it is not possible to compile node.js module canvas, because there are missing cairo libraries for the linux, and related required libraries as well.
推荐答案
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条目:
To use these libraries in the node.js server, you need to add custom LD_LIBRARY_PATH entry which points to them:
在OpenShift git项目中添加目录:。 openshift / markers
在此目录中创建名为的空文件:use_npm
In the OpenShift git project add directory: .openshift/markersIn this directory create empty file named: use_npm
在package.json文件中添加此条目:
In the package.json file add this entry:
"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模块。
This usually works, but sometimes there are happening npm update activities which start to rebuild canvas module.
有时候bcrypt模块也不会生成。
Sometimes bcrypt module does not build too.
解决方案是创建一个齿轮,其中一切正常工作,然后使tar.gz文件与$ OPENSHIFT_DATA_DIR / usr /
的内容,并将此文件传输到您的服务器,它可以通过http://
The solution is to create one gear, where everything just works, and then to make tar.gz file with the contents of $OPENSHIFT_DATA_DIR/usr/and to transfer this file to your server where it is accessible via http://
对于node_modules / canvas,node_modules / bcrypt和其他易受攻击的条目,应该这样做。
That same should be done for node_modules/canvas, node_modules/bcrypt and other vulnerable entries.
然后,可以使用OpenShift应用程序钩子(build等)来下载这些文件的内容,并在正确的位置将这些文件的内容额外添加。
Then, it is possible to use OpenShift app hooks (build, etc) to download and extraxt the contents of these files in the right places.
在CentOS 6.6上编译许多node_modules / xxxxx,然后在服务器上的正确位置复制这些内容,它运行RHEL 6.6
(与rpm包安装一样,是二进制兼容性的东西)
Also, you can compile many node_modules/xxxxx on the CentOS 6.6, and then to copy these in the right places on the server, which runs RHEL 6.6(binary compatibility stuff, just like with rpm package installation)
这样就可以创建git仓库和可下载的tar.gz文件,这将允许自动启动新的RedHat OpenShift齿轮。
This way it is possible to create git repository and downloadable tar.gz files which would allow to automatically launch new RedHat OpenShift gears.
当然,如果有一些系统升级,tar.gz文件内容也必须升级。
Of course, if there will be some system upgrades, tar.gz files contents must be upgraded too.
这篇关于如何在RedHat OpenShift服务器上编译node.js模块画布?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!