这段时间需要部署tensorflow到linux上,由于堡垒机不能连外网,所以pip、apt-get、wget、git统统不能用,然后就是各种调试了,下面整理了一些遇到的问题和解决方案,供大家参考(CentOS/Python3.4),有什么遗漏的问题还望大家补充。
1、Putty、XShell、SecureCRT、SSH Secure Shell Slient的优缺点 现在大多是用的xshell,因为xshell有一款个人免费的,还是中文界面,对于这种四级都是勉强过的,真心不错。 putty因为太小了,所以常常有很多功能不能满足。 securecrt在功能上跟xshell(XManager中文版网站)差不多,但是securecrt是英文版的还要收费,所以就果断抛弃了 SSH Secure Shell Slient,这款软件使用的不太多,一般使用最多的就是securecrt和xshell了,介于免费的原因,所以推荐使用xshell。
2、查看本机MAC cmd->ipconfig/all->物理地址
3、root身份登录 ssh root@XXX
4、安装gcc 首先需要安装gcc,如果可以联网,可以apt-get install build-essential或yum -y install gcc,如果不能就去这里下载:http://mirrors-usa.go-parts.com/gcc/releases/gcc-4.8.4/gcc-4.8.4.tar.gz 下载下来之后,执行: tar zxvf gcc-4.8.4.tar.gz cd gcc-4.8.4 ./contrib/download_prerequisites ./configure --enable-checking=release --disable-multilib(后面两项option必须加,不加会报错(也可能只是其中一项起作用)) make -j4 make install
5、没有bizp2 如果没有bizip,安装gcc依赖的时候会报错 解决: 运行yum install -y bzip2安装bzip2
6、gcc版本不更新 更新完gcc后需要断开xshell重新连接后再输入gcc -v才显示最新版本(不需要修改环境变量)
7、没有git yum install git-core 要是不能联网有没有git都一样,所有包都需要手动下载
8、安装binutils 从以下目录下载binutils:ftp.gnu.org/gnu/binutils/binutils-2.28.tar.bz2 tar jxvf binutils-2.28.tar.bz2 mkdir binutils-build cd binutils-build ../binutils-2.28/configure make -j4 make install
9、安装bazel(大坑) 下载地址1:git clone https://github.com/bazelbuild/bazel(非常之慢) 下载地址2:git clone https://github.com/CStzdong/bazel 发现报错: INFO: You can skip this first step by providing a path to the bazel binary as second argument: INFO: ./compile.sh compile /path/to/bazel ?? Building Bazel from scratch ERROR: Must specify PROTOC if not bootstrapping from the distribution artifact
-------------------------------------------------------------------------------- NOTE: This failure is likely occuring if you are trying to bootstrap bazel from a developer checkout. Those checkouts do not include the generated output of the protoc compiler (as we prefer not to version generated files).
* To build a developer version of bazel, do
bazel build //src:bazel
* To bootstrap your first bazel binary, please download a dist archive from our release page at https://github.com/bazelbuild/bazel/releases and run compile.sh on the unpacked archive.
The full install instructions to install a release version of bazel can be found at https://docs.bazel.build/install-compile-source.html For a rationale, why the bootstrap process is organized in this way, see https://bazel.build/designs/2016/10/11/distribution-artifact.html 进入错误信息中提到的https://github.com/bazelbuild/bazel/releases网站,选择最近版本的链接,进去后发现有一堆安装包。选择其中的一个直接下载https://github.com/bazelbuild/bazel/releases/download/0.5.3/bazel-0.5.3-installer-linux-x86_64.sh运行安装成功,执行时报错: /usr/local/bin/bazel: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.19' not found (required by /usr/local/bin/bazel) 这个错误会在下文提到 重新运行./compile.sh 运行到一半报错 再执行一次,发现两次运行./compile.sh出现的错误不一致!疑似安装程序bug 尝试低版本bazel0.5.2,仍出现错误 尝试更低版本0.4.5,下载解压缩运行./compile.sh后安装成功!!! 下载地址:https://github.com/bazelbuild/bazel/releases/download/0.4.5/bazel-0.4.5-dist.zip 然后执行: mkdir bazel-0.4.5-dist cd bazel-0.4.5-dist unzip ../bazel-0.4.5-dist.zip ./compile.sh cp ./output/bazel /usr/local/bin(复制bazel的Binary文件至/usr/local/bin,使得全局都能找到该文件)
10、关于手动离线安装bazel 不建议完全手动安装bazel,全程有100多个包的依赖,。,,,,,,
11、ERROR: Cannot determine JDK version, please set $JAVA_HOME.\n $JAVAC_VERSION is "javac 1.6.0_25" 安装GCC时如果遇到以上问题,说明java版本过低了(最低需要jdk8) 解决方法:https://jingyan.baidu.com/article/48a42057f238a9a92425042c.html jdk8下载地址:https://pan.baidu.com/s/1kUBT7Vp
12、手动安装numpy和scipy 依赖的包: scipy-0.11.0 numpy-1.6.2 nose-1.2.1 lapack-3.4.2 atlas-3.10.0 参考:http://blog.chinaunix.net/uid-22488454-id-3978860.html
13、pip 如果没有pip,就到PIP官网下载get-pip.py。 参考链接:http://www.jianshu.com/p/81b648b1d572 最后从python官网下载p3安装包就好了 如果公司有自己的镜像,可以修改pip的配置文件: cd ~/.pip/pip.conf(如果没有,就自己建一个;如果不能保存,说明没有.pip目录,需要进入~目录mkdir .pip) 然后加入下面的内容 [global] index-url = XXX trusted-host = pypi.douban.com disable-pip-version-check = true timeout = 120 注:XXX为国内或企业内部镜像,国内用https://pypi.douban.com/simple,公司内部就用自己的。
14、找不到Glibc2.XX(ImportError: /lib64/tls/libc.so.6: version `GLIBC_2.14' not found) glibc是GNU发布的libc库,即c运行库。 glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。 glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。 由此可见,问题的根源是系统不兼容,ubuntu上用的libc 版本较高,而 CentOS 上用的版本太低导致不能执行。。 解决这个问题有三种方法: 第一种:升级Glibc,这个风险非常大,很多时候升完了发现好多东西都不能用了; 第二种:外链Glibc,也就是在其他目录建一个Glibc,然后添加一个环境变量,这个在网上看貌似是可行的,但我这么做的时候依然报错。 第三种:更换linux系统,这个问题很多时候是CentOS安装tf环境时候造成的,可以尝试更换容器
15、查看glibc支持的版本 strings /lib64/libc.so.6 |grep GLIBC_ (结果一般会显示只支持到Glibc2.12)
16、找不到readelf 依据链接http://www.jianshu.com/p/308a4e803c81的说法,先用readelf -s 文件路径|grep GLIBC_2.14查看so里到底哪部分依赖了glibc2.14,发现readelf: command not found,没有readelf命令。。。 (readelf用来显示一个或多个elf格式的目标文件信息) 依据链接http://pkgs.loginroot.com/errors/notFound/readelf,需要添加环境变量:export PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
17、直接升级glibc(风险比较大) yum install gcc wget http://ftp.gnu.org/pub/gnu/glibc/glibc-2.17.tar.xz xz -d glibc-2.17.tar.xz tar -xvf glibc-2.17.tar cd glibc-2.17 mkdir build cd build ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin make && make install 需要等大概10分钟
18、外链安装Glibc2 下载Glibc2.14: http://ftp.gnu.org/gnu/glibc/或者http://www.gnu.org/software/libc/ 安装: xz -d glibc-2.14.tar.xz tar -xvf glibc-2.14.tar 进入源码目录 建立构建目录,并cd进入构建目录: cd glibc-2.14 mkdir build 配置: ../configure --prefix=/opt/glibc-2.14 编译安装: make -j4 sudo make install 临时修改环境变量: LD_LIBRARY_PATH=/opt/glibc-2.14/lib:$LD_LIBRARY_PATH
19、外链安装导致的严重后果 安装过程中,因为修改/etc/ld.so.conf文件,ldconfig后导致输入命令后,连最基本的命令也会报错: ls ls: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument 解决方法: 千万不要断开ssh,不然就远程不上去了 vi /etc/profile 加入 export LD_LIBRARY_PATH=/usr/lib:/usr/lib64:/lib:/lib64:/usr/local/lib:/usr/local/lib64 链接完了之后,Glibc2的问题是没有了,但import tensorflow的时候出现 Segmentation fault (core dumped)
20、Segmentation fault (core dumped) 直接强制退出Python了 根据链接https://github.com/tensorflow/tensorflow/issues/8197的解释,原因是gcc的版本过低,更新gcc在前文已经提过了。 还有文章提到是scipy和tensorflow冲突 根据http://blog.csdn.net/shouwangzhelv/article/details/51851155提到的解决方案,重新手工编译了scipy,依然不行。
21、glibc3找不到(version `GLIBCXX_3.4.21' not found) 参考http://blog.csdn.net/rznice/article/details/51090966 其实和找不到glibc2的性质差不多
22、glibc: LD_LIBRARY_PATH shouldn't contain the current directory LD_LIBRARY_PATH不能包含当前目录,需要修改环境变量并重新执行configure echo $LD_LIBRARY_PATH export LD_LIBRARY_PATH= echo $LD_LIBRARY_PATH ./glibc-2.14/configure
23、输入所有命令后都没反应了。。。 因为升级了Glibc,导致系统出问题了,把环境变量改回去就可以了。
24、安装anaconda 参考:http://www.jianshu.com/p/03d757283339 如果机器不能联网,anaconda基本就废掉了。。。
如果不能用ananconda,只好自己下载包然后上传了,单台机器就rz和sz,多台机器之间传文件就scp xxx root@abc:url
BY:YasselBing