CentOS下的编译源代码安装软件( 以安装python3为例 )
在CentOS下安装软件,可以使用rpm软件包、yum工具、自行下载源代码进行编译安装,其中编译安装的定制性较高
对于一些在软件,自行下载源代码进行编译安装较为方便
程序:源代码 --> 编译 --> 链接 --> 运行
执行编译安装步骤:
- 获取源代码并解压
#tar xf xxx.tar.gz //或者: #tar xf xxx.tar.bz2
- 在解压完的源代码目录下执行configure脚本
#./configure [options] 选项: --help 查看该脚本帮助信息,各个软件的选项存在差异,下面是通常情况下 --prefix=PATH 定义应用程序的安装路径,--prefix=/usr/local/APP_NAME --sbin-path=PATH 定义应用程序的二进制命令的路径 --conf-path=PATH 定义应用程序配置文件路径,--conf-path=/etc/APP_NAME --enable-XXXX 开启某项功能(XXXX),应用程序支持该功能,但默认不安装 --disable--XXXX 关闭某项功能(XXXX),应用程序支持该功能,默认安装,但用户不需要 --with--XXXX 开启某项功能(XXXX),应用程序支持该功能,但默认不安装 --without--XXXX 关闭某项功能(XXXX),应用程序支持该功能,默认安装,但用户不需要
如果./configure时遇到依赖性的错误信息,可以用下列方法解决
- 用without关闭该项功能(不推荐)
- 安装所需的环境,安装所需的环境的devel包
- make:定义Makefile按照哪种顺序去编译源程序
make -j N 多个线程一起编译,N为线程数量,make会自动按照当前目录下makefile文件中的编译顺序对文件进行编译
- make install:安装应用程序
make install
编译安装完成后的工作:
- 添加所安装的应用程序命令文件到系统路径:(把应用程序的命令文件添加的PATH变量中)
第一种方法:在/etc/bin目录下做命令文件(bin文件)的链接
#ln -s /usr/local/APP_NAME/bin/* /usr/bin //为所有文件做链接,会产生大量的inode节点,不推荐 //或者: #ln -s /usr/local/APP_NAME/bin /usr/bin/APP_ANME //为目录做链接
第二种方法:修改/etc/profile文件中的PATH变量( /etc/profile文件在shell启动时会自动执行)
#vim /etc/profile export PATH="$PATH:/APP_PATH" //在文末后面加上该行语句 #source /etc/profile //重新加载该文件,使修改生效
第三种方法:在/etc/profile.d/目录中建立.sh文件(在 /etc/profile.d 目录中存放的是一些应用程序所需的启动脚本,会被自动执行)
#vim /etc/profile.d/APP_NAME.sh PATH=$PATH:/usr/local/APP_NAME/bin //重启,使修改生效
- 添加所安装的应用程序库文件到系统库文件路径( /usr/lib 或 /usr/lib64 )中
第一种方法:为库文件做链接文件( lib对于32bits系统,lib64对应64bits系统 )
#ln -s /usr/local/APP_NAME/lib/* /usr/lib //或: #ln -s /usr/local/APP_NAME/lib /usr/lib/APP_NAME
第二种方法:在/etc/ld.so.conf.d目录下建立APP_NAME.conf,把应用程序的库文件位置添加进去( /etc/ld.so.conf.d 用来加载Linux系统中的动态库文件的)
#ldconfig -v: 加载修改后的配置,使之生效,并显示加载库文件过程,可以查看添加的应用程序库文件能否被成功加载
- 添加应用程序的头文件到系统头文件路径(/usr/include ):
做链接文件
#ln -s /usr/local/APP_NAME/include/* /usr/include //或: #ln -s /usr/local/APP_NAME/include /usr/include/APP_NAME
- 添加应用程序的帮助信息
第一种方法:使用man时指定帮助信息文件的路径
man -M APP_PATH bin_name //-M指定帮助信息的位置
第二种方法:修改man配置文件(CentOS7下man配置文件:/etc/amn_db.conf)
#vim /etc/man_db.conf MANPATH_MAP APP_PATH(命令所在的路径) HELP_PATH(帮助信息文件的路径) //在对应的位置添加该行信息
重启,使修改生效
举例:在CentOS7下安装Python3
在CentOS7下预装的Python版本还是python2
#python -V //查看python版本
下载wget工具
#yum -y install wget
下载python3源代码包( wget download_url,即可以把down_url链接对应的资源下载到当前目录下)
在Python官网源代码包下载页面(https://www.python.org/downloads/source/ )可以找对应源代码包的下载链接
#wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0b3.tgz
对python3的源代码包进行解压
#tar xf Python-3.7.0b3.tgz
如果tar文件没有报错,就进入解压得到的源代码目录里;如果报错,可能是python源代码包下载不完整导致的,建议重新下载,或者更换下载链接
#cd Python-3.7.0b3 # ls // aclocal.m4 configure.ac install-sh Mac Objects Programs setup.py // config.guess Doc Lib Makefile.pre.in Parser pyconfig.h.in Tools // config.sub Grammar LICENSE Misc PC Python // configure Include m4 Modules PCbuild README.rst //可以看到有可执行文件configure,没有makefie文件 //可以通过./configure --help查看该软件源代码configure的帮助信息
安装编译
#./configure --prefix=/usr/local/python3 //把python3安装到/usr/local/python3目录下 //执行./configure后可以ls,发现在当前目录下已经生成Makefile文件 #make -j 20 //可以省略Makefile,因为make会自动寻找该目录下的Makefile或makefile文件进行编译 #make install //安装python3 //发现报错: // zipimport.ZipImportError: can't decompress data; zlib not available // make: *** [install] Error 1 //原因是依赖性问题,下载zlibr软件包和zlib的devel包 #yum -y install zlib zlib-devel #make install //重试 //发现又报错: //ModuleNotFoundError: No module named '_ctypes' //原因是3.7版本需要一个新的包libffi-devel #yum install libffi-devel -y #make install //重试 //successfully installed pip-9.0.3 setuptools-39.0.1 成功安装
安装完后的配置
bin文件:
#vim /etc/profile.d/python3.sh PATH=$PATH:/usr/local/python3/bin //重启,使修改生效
库文件:
#vim /etc/ld.so.conf.d/python.conf /usr/local/python #ldconfig -v //加载修改后的配置,并检查python3库文件是否被加载进去
头文件:
#ln -s /usr/local/python3/include /usr/include/python3 //为库文件做链接
帮助信息:
#vim /etc/man_db.conf MANPATH_MAP /usr/local/python3/bin /usr/local/python3/share/man //重启,使修改生效
检测:
#vim test.py #!/usr/bin/env python3 print("test successful!") #chmod +x test.py #./test.py >>>test successful!