在离线的centos6.5服务器上搭建tensorflow

现状

  前段时间实现了一个深度学习检测模块,但产品所在环境为Centos6.5 64位版本,其环境软件版本(glibc, glibc++, python, python包)过低。但是由于产品部署环境为离线状态,所以各种包只能先下载好,然后制作成升级包,最终进行产品升级。

预备知识

1.Centos, RedHat, Fedora之间的关系如下图所示,具体可参考链接(https://danielmiessler.com/study/fedora_redhat_centos/):
在离线的centos6.5服务器上搭建tensorflow
  所以Centos的rpm安装包可以到Fedora的网站上去寻找。其中centos6.5注意版本号包含el6。

升级

升级glibc版本

  glibc是GNU发布的c运行库,几乎所有的进程和命令都会依赖于它,所以安装过程必须要谨慎(最好做好备份)。
  依次安装下列包,具体地址为:https://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/

  • rpm -Uvh glibc-2.17-55.el6.x86_64.rpm
  • rpm -Uvh glibc-common-2.17-55.el6.x86_64.rpm
  • rpm -Uvh glibc-devel-2.17-55.el6.x86_64.rpm
  • rpm -Uvh glibc-headers-2.17-55.el6.x86_64.rpm

升级glibcxx版本

  经过实验发现,glibcxx不需要安装,只需替换so库即可。下载地址可参考(https://blog.csdn.net/herosunly/article/details/88894241)

  1. cp libstdc++.so.6.0.22 /usr/lib64
  2. rm -rf libstdc++.so.6
  3. ln -s libstdc++.so.6.0.22 libstdc++.so.6

升级Python(python2.7.10)

  由于Centos6.5自带的是python2.6,所以需要重新安装2.7。经过实验安装2.7.10即可。
  先说明之前给自己挖的一个坑:升级包并没有在官方网站上面下载,而是搜索下载了python-2.7.10.zip,导致后续出现各种bug。正确下载地址为:https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tar.xz
  正确安装命令如下所示:

./configure --enable-unicode=ucs4  --enable-shared(编译动态库)                 --prefix=/usr/local/python27(指定安装目录)
make all
make install

  --enable-unicode=ucs4指定unicode编码为4位,如果不指定默认就为2位,后续就会出现相关错误。–enable-shared会生成动态库,它是c语言调用python的接口。

升级安装各种Python包

  由于为离线状态,无法直接pip安装包,只能下载好依赖包,然后进行安装。
1.rpm -ivh python-argparse-1.2.1-2.1.el6.noarch.rpm

2.pip install -r requirements.txt,其中requirements.txt的内容如下所示:

distribute-0.7.3.zip
androguard-3.0.tar.gz
requests-2.5.1.tar.gz
typing-3.6.4.tar.gz
future-0.16.0.tar.gz
M2Crypto-0.27.0.tar.gz
setuptools-38.4.0.zip
pefile-master.zip
Pillow-2.1.0.zip
enum34-1.1.6.tar.gz
numpy-1.15.1.zip
python_dateutil-2.8.0-py2.py3-none-any.whl
pytz-2018.9-py2.py3-none-any.whl
pandas-0.23.4.tar.gz
six-1.11.0-py2.py3-none-any.whl
protobuf-3.4.0.tar.gz
html5lib-0.9999999.tar.gz
bleach-1.5.0-py2.py3-none-any.whl
Markdown-2.6.8.tar.gz
futures-3.1.1-py2-none-any.whl
wheel-0.26.0-py2.py3-none-any.whl
Werkzeug-0.13-py2.py3-none-any.whl
tensorflow_tensorboard-1.5.0-py2-none-any.whl
backports.weakref-1.0rc1-py2-none-any.whl
pbr-1.0.0-py2.py3-none-any.whl
funcsigs-1.0.2-py2.py3-none-any.whl
mock-2.0.0-py2.py3-none-any.whl
absl-py-0.1.10.tar.gz
tensorflow-1.5.0-cp27-none-linux_x86_64.whl
esprima-4.0.1.tar.gz

bug记录

  1.在之前的代码模块中有一句代码为from PIL import Image,而在新加的依赖包(tensorflow中也包括了Image),在c调取Python代码过程中,就会出现hash collisions(哈希冲突)。修改办法为把原有模块中的代码修改为import PIL。