一、源程序

   autoconf:configure脚本

      软件项目组会使用autoconf这个工具来生成configure脚本,检查编译环境编译需求,并定义当前程序编译时启用哪个特性或功能,以及安装路径的定义等等。

      结果:会根据Makefile.in文件生成makefile文件

   auto:Makefile.ini文件

      用于结合configure脚本生成Makefile文件,makefile文件是make命令的配置文件。

二、编译安装的前提

   编译安装时需要准备好开发环境。有三个跟开发相关的包组:

   1)Desktop Platform Development(有图形程序时需安装此包组)

   2)Server Platform Development

   3)Development Tools

   我们的服务是安装在命令行下的,所以不需要有图形,因此我们只需要安装第2个和第3个包组就可以了。我们需要使用yum工具来进来安装,而如果你的/etc/yum.repos.d/*.repo下的yum源中所对应的yum仓库(repository)是网络站点的话,可能有点慢,如果能把yum仓库配置到本地服务器的话,那安装这两个包组也就是分分钟的事了。既然需要用到yum,那就不得不提一提yum的用法了。

三、yum 命令

 yum [-y]

   1)repolist[all|enabled|disabled]

      列出所有可用yum repo,默认只显示已启用的

   2)clean[all|packages|metadata|expire-cache|rpmdb|plugins]

      清理缓存,metadata:元数据,expire-cache:过期缓存

   3)list[all|installed|available]

      列出rpm包,installed:已安装的,available:可安装的。

   4)info package_name

      列出包的描述信息      相关命令:rpm -qi

   5)groupinfo "packge_group_name"

      显示包组信息,包组加引号是其可能中间有空格

   6)grouplist

      列出所有包组

   7)install package_name...

      安装指定的程序包

   8)reinstall package_name...

      重新安装指定的程序     相关命令:rpm -ivh --replacepkgs

   9)check-update

      检查可升级的包

   10)update package_name...

       升级指定的程序包

       如:现在是X-1.1,更新包有X-1.2,X-1.3,可指定一个

   11)erase|remove package_name

       卸载包,卸载一个包时,依赖此包的包也一定补卸载

   12)whatprovides|provides /path/to/somefile

       查询某文件是由哪个包安装生成的     相关命令:rpm -qf

   13)downgrade package_name

       降级

   14)groupinstall "group_name"

       安装指定包组

   15)groupremove "group_name"

       卸载指定包组

   16)history

       可以查看历史做了哪些操作

四、编译安装的步骤

1、拿到源代码,并解压

  #tar xf package-vertion.tar{gz|bz|xz}

   展开后的目录名通常为package-vertion。

2、切换到源码目录中

  #cd package-vertion

3、执行configure脚本

  #./configure

4、编译

  #make

5、安装

  #make install

  第4步和第5步也可合并:make && make install,make执行成功则执行make install。

configure脚本的通用功能

    1)指定安装路径

           --prefix=/usr/local/package_name   指定程序安装位置

           --sysconfidir=/etc/package_name    指定专门的目录保存配置文件

    2)指定启用/禁用的特性

           --enable-feature   如:--enable-fpm

           --disable-feature  如:--disable-socket

    3)指定所依赖的功能、程序或文件

           --with-function    启用某特×××

           --without-function  禁用某功能

        不同的程序其configure脚本功能不同,要获取帮助,  ./configure  --help|less

五、源码编译安装httpd服务

   1)下载httpd源码包到自己电脑指定的路径,解压该源码包,会出现一个与之同名的httpd目录,我们要执行的源码安装的./configure脚本就在此目录中。

wKiom1MLS5iAw10vAABHId00JJA604.png

   2)在执行源码安装之前,还是看一下我们的开发环境有没有安装:"Development Tools"和"Server Platform Development",这里主要需要的就是"Development Tools",如果此包组没有安装,那么我们的httpd服务还是安装不上的。可以使用命令yum groupinstall "Development Tools"和yum groupinstall "Server Platform Development"进行安装,安装完成后,最好再用yum grouplist命令确认一下。

wKioL1MLS4SRZ9MAAABq_uDzNgk612.png

  3)使用./configure执行源码安装,并指定我们的安装目录在/usr/local/httpd,面config目录则独立出来,不与之在同一目录,我们把他放在/etc/httpd下。

wKioL1MLS5zQWWDaAABUwrz9KLA231.png

  4)使用make命令进行编译。

wKiom1MLThjhDf4HAABvaJDi4hQ742.png

  5)make install安装。第4步和第5步可直接写成一步:make && make install 。

wKiom1MLS-fgWSRaAABThg48cB0709.png

  6)没报错,安装成功。

wKiom1MLS_fCuMYFAAA6KSn0qkY712.png

六、httpd服务测试

  1)安装路径测试:我们在./configure时,指定安装路径在/usr/local/httpd,配置文件目录独立到/etc/http/下,结果与指定相同。

wKioL1MLT4OAwGKuAAAh5hXp678632.png

  2)在httpd启动之前,先使用netstat -antl查看是否有否端口,在启动apachectl之后,再重新查看netstat -antl,出现80端口,说明httpd服务启动成功。

wKiom1MLU9DB3wx9AABwFx4hG0E712.png

   3)网页测试,输入本机IP,Apache服务启动成功,源码编译安装httpd服务成功!

wKiom1MLVHiys1GdAAAZYyukE8E077.png

七、编译安装后的输出

   因为我们在编译安装的第一步执行configure脚本的时候,我们指定了默认的安装目录到/usr/local/httpd和配置文件到/etc/httpd,所以,系统按照其默认的执行规范就不会找到我们的二进制程序、库文件、头文件、和man文件。

1)二进制程序

  我们能够在系统上直接执行命令而不用输入绝对路径需得益于我们的PATH环境变量,因此,我们要想直接执行apachectl start来启动httpd服务,需要在PATH环境变量中加入apachctl命令的绝对路径:vim /etc/profile.d/httpd.sh

PATH=/usr/local/httpd/bin:$PATH
export PATH

wKiom1MMuzHiuOYAAABt5KNqd_s951.png

把aparchctl命令的绝对路径写入PATH变量后,再执行一次脚本文件或重启一下shell,就可以使环境变量生效了,使用aparchctl start启动httpd服务后,查看80端口,确实已经可以开启。

2)头文件输出

  我们安装在/usr/local/httpd/中的include头文件也不会被系统读到,所以我们最好能把这个地方的头文件的整个目录链接到系统默认的/usr/include下,并新建个httpd。

wKioL1MMwvTA-ABwAAAux8GsGqg464.png

3)库文件输出

  库文件也和头文件一样,处在此目录中依然不会被系统找到,所以不得不再修改一下库文件的输出。在修改之前,我们先查看一下系统所以读的库文件,在我们vim /etc/ld.so.conf.d/http.conf后,再使用ldconfig -v | grep "^[^[:space:]]"查看一下库文件,就会惊喜的发现我们的/usr/local/httpd/lib也出现在其中了。

wKioL1MMxdbwmH4ZAABuWwOhpuw167.png

4)man文件的输出

  既然我们装了httpd这个服务,那他的man我们是一定需要查看的,可是还是上面说到的,系统默认的地方找不到,所以我们还是需要自己手动修改一下。vim /etc/man.config,增加下面一条,保存退出。

wKiom1MMysagyc-uAAA2-wBk3LQ621.png