编译安装
为什么要编译安装?
源文件编译安装成为二进制程序对于初学者来说还是有难度的。rpm这个程序包管理器能为我们解决绝大多数软件管理的需求,yum程序甚至能够帮我们有效解决包之间的依赖问题,那么为什么我们还要大费周章的去学习编译安装呢?
大多数软件的发行版都会带有rpm包管理器,然而有些程序是没有rpm包的,所以针对这些程序我们就必须要通过源码手动编译安装了。
此外,rpm包安装出来的软件各种配置已经被制定好了,通过rpm包安装的软件可能会有我们用不到的功能那么这样安装必然会造成空间资源的浪费。而且有些时候你要用的功能rpm包装出来的软件并不能满足,这种情况也是会有的。
最后编译安装还可以针对特定的硬件进行优化,以获得更好的性能表现。
总结起来可以这样理解:
通过rpm包安装软件是for全球的服务器
编译安装的软件for你自己的服务器
C语言源代码编译安装三步骤:
绝大多数linux上需要源码安装的程序可以通过./configure;make;make install这三步来实现安装,而最困难的一步往往都在./configure这一步,那后面的几步是可以很轻松的完成的。
1、./configure
(1) 通过选项传递参数,指定启用特性、安装路径等;执 行时会参考用户的指定以及makefile.in文件生成makefile
(2) 检查依赖到的外部环境,如依赖的软件包
2、make 根据makefile文件,构建应用程序
3、make install 复制文件到相应路径
注:通常解压后的源代码都会生成congfigure脚本和makefile.in 文件,如果没有那就需要利用开发工具手动创建了。
开发工具:
autoconf: 生成configure脚本
automake:生成Makefile.in
下面我们来通过实验体验一下真正的源码编译安装的过程吧!
实验:编译安装httpd
基于CentOS6.9的httpd源码编译安装。
准备工作:
- 建议安装之前查看并删除相同的软件。
rpm -qa "httpd*"
yum remove httpd - 一般编译安装各种源文件都会用到一个开发包组
Development tools ,所以我们开始之前把他装好。
[root@CentOS6 ~]#yum groupinstall "Development tools"
Loaded plugins: fastestmirror, refresh-packagekit, security
Total download size: 77 M
Installed size: 227 M
Is this ok [y/N]: y
...过程省略...
Complete! 完成!
注:编译安装的过程当中有可能还会有依赖的程序需要安装,到时候缺哪个一一安装就好了。
步骤:
1. 下载源码,一般习惯性将源码下载至/usr/local/src目录下
2. 解压源码tar xvf httpd-2.2.34.tar.bz2 在当前目录
[root@CentOS6 httpd-2.2.34]#pwd
/usr/local/src/httpd-2.2.34
[root@CentOS6 httpd-2.2.34]#ls
ABOUT_APACHE configure.in LAYOUT os
acinclude.m4 docs libhttpd.dep README
Apache.dsw emacs-style libhttpd.dsp README.platforms
build httpd.dep libhttpd.mak README-win32.txt
BuildAll.dsp httpd.dsp LICENSE ROADMAP
BuildBin.dsp httpd.mak **Makefile.in** server
buildconf httpd.spec Makefile.win srclib
CHANGES include modules support
config.layout INSTALL NOTICE test
**configure** InstallBin.dsp NWGNUmakefile VERSIONING
3. 建议安装之前查看readme和install这两个文档,初步了解自己即将安装的程序。
[root@CentOS6 httpd-2.2.34]# cat INSTALL
APACHE INSTALLATION OVERVIEW
CAUTION
This package represents a legacy version of the Apache HTTP Server software 文档开始就介绍这个程序是一个阿帕奇HTTP服务器软件,可不是武装直升机哦~~
and is not current.
...
虽然是英文的文档,英语水品差的朋友可能看起来比较吃力哦,但是还是稍微了解一下吧。
4. 生成Makefile:
利用源文件解压以后生成的configure脚本自定义生成Makefile文件
运行configure --help 观察这个脚本的用法
[root@CentOS6 httpd-2.2.34]#./configure --help
`configure' configures this package to adapt to many kinds of systems.
Usage: ./configure [OPTION]... [VAR=VALUE]...
...
--prefix=PREFIX (这个就是指定安装目录的选项) install architecture-independent files in PREFIX 如果不指定的话就会默认安装在这个目录:[/usr/local/apache2]
...
这个脚本光是用法就写了229行呢,脚本本身更是写了两万多行,所以功能还是相当强大的,其中大致包括指定程序的安装目录,相关配置文件的安装目录,和启用禁用相关服务等。为了展示我们加三个选项:
(1)指定安装目录--prefix=/app/httpd22/
注:如果不添加这个选项软件会被装在[/usr/local/apache2] 这个默认目录下,但是一般简易自定安装目录,这里我们指定把程序安装在/app/httpd22目录下,这个目录不需要手动去创建,运行脚本以后会自动生成。
(2)指定配置文件安装目录--sysconfdir=/etc/httpd22/
(3)启用加密服务--enable-ssl
好啦,添加你想要自定义的选型以后就可以愉快的运行configre脚本啦!
输入:./configure --prefix=/app/httpd22/ --sysconfdir=/etc/httpd22/ --enable-ssl
...自动脑补画面
貌似安装好了,echo $? 看一下
[root@CentOS6 httpd-2.2.34]#echo $?
1 失败哦!
看一下错误提示:configure: error: ...No recognized SSL/TLS toolkit detected
原来是刚刚启用加密服务但是没有安装加密程序的开发包导致了安装失败,那么很好解决,把相应的开发包装上就好了:yum install openssl-devel
注:这个中错误安装过程可能会出现多次,解决办法也很简单就是缺什么补什么。
ok,再来一次:./configure --prefix=/app/httpd22/ --sysconfdir=/etc/httpd22/ --enable-ssl
5. make && make install
HTTP是一个较小的软件编译过程会比较快,如果是大型软件,我们就可以用上边的命令把编译和安装合为一步。
到此就可以说这个软件的编译安装已经完成了,但是仅仅编译安装过的软件是不能用的,我们还需要进一步去配置这个软件,才能让他成功运行。
接下来继续以配置HTPPD软件为例向大家展示如何进行软件配置。
6. 软件配置:
- 准备环境变量:
echo 'export PATH=/app/httpd22/bin:$PATH' > /etc/profile.d/httpd22.sh
2.运行配置文件: . /etc/profile.d/httpd22.sh
[root@CentOS6 ~]#echo $PATH
/app/httpd22/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
- apachectl start 运行服务器
- ss -ntl 确认80端口开启。
[root@CentOS6 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 :::45477 :::*
LISTEN 0 128 :::111 :::*
LISTEN 0 128 *:111 *:*
LISTEN 0 128 :::80 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 128 *:22 *:*
LISTEN 0 128 127.0.0.1:631 *:*
LISTEN 0 128 ::1:631 :::*
LISTEN 0 128 *:42359 *:*
LISTEN 0 100 ::1:25 :::*
LISTEN 0 100 127.0.0.1:25 *:*
- 配置man帮助配置文件:
vim /etc/man.config
加一行
MANPATH /app/httpd22/man
完成!
一键安装httpd脚本
我安装完httpd以后又自己写了一个对于httpd的一键安装脚本,如果你有多台服务器有这样一个脚本就不用到每台机器上去编译安装一边啦。
因为是为了让大家参考,所以脚本里的一些选项基本还都是参照上边实验写的。
下边就是脚本的具体写法以及下载地址: