centos 6.5 编译安装 httpd-2.4.10
1. 小金子又来了,今天让我们折腾下编译httpd-2.4.10吧,废话不多,先看一下平台的基本环境
[root@jinyongri src]# uname -r 2.6.32-431.el6.i686 [root@jinyongri src]# uname -a Linux jinyongri.com 2.6.32-431.el6.i686 #1 SMP Fri Nov 22 00:26:36 UTC 2013 i686 i686 i386 GNU/Linux [root@jinyongri src]# gcc -v Using built-in specs. Target: i686-redhat-linux Thread model: posix gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
2. 下载相应的源码包
openssl-1.0.1i.tar.gz
apr-util-1.5.4.tar.bz2
apr-1.5.1.tar.gz
httpd-2.4.10.tar.bz2
源码包上传到 /root/src/ 目录下
确认一下目录:
[root@jinyongri src]# ll total 10916 -rw-r--r-- 1 root root 1020833 Sep 30 20:20 apr-1.5.1.tar.gz -rw-r--r-- 1 root root 694427 Sep 30 20:20 apr-util-1.5.4.tar.bz2 -rw-r--r-- 1 root root 5031834 Sep 30 20:20 httpd-2.4.10.tar.bz2 -rw-r--r-- 1 root root 4422117 Sep 30 20:20 openssl-1.0.1i.tar.gz
首先安装openssl, 安装之前请确认一定要有gcc编译器啊, 没有的话自行yum install gcc
[root@jinyongri src]# tar -xf openssl-1.0.1i.tar.gz [root@jinyongri src]# cd openssl-1.0.1i #这里我们把文件都安装到 /usr/local/openssl-1.0.1i ##注意如果是64位操作系统环境: [root@jinyongri openssl-1.0.1i]# ./config --prefix=/usr/local/openssl-1.0.1i -fPIC no-gost ##注意如果是32位操作系统环境: [root@jinyongri openssl-1.0.1i]# ./config --prefix=/usr/local/openssl-1.0.1i #####....此处省略1w字 making links in apps... make[1]: Entering directory `/root/src/openssl-1.0.1i/apps' make[1]: Nothing to be done for `links'. make[1]: Leaving directory `/root/src/openssl-1.0.1i/apps' making links in test... make[1]: Entering directory `/root/src/openssl-1.0.1i/test' make[1]: Nothing to be done for `links'. make[1]: Leaving directory `/root/src/openssl-1.0.1i/test' making links in tools... make[1]: Entering directory `/root/src/openssl-1.0.1i/tools' make[1]: Nothing to be done for `links'. make[1]: Leaving directory `/root/src/openssl-1.0.1i/tools' generating dummy tests (if needed)... make[1]: Entering directory `/root/src/openssl-1.0.1i/test' make[1]: Nothing to be done for `generate'. make[1]: Leaving directory `/root/src/openssl-1.0.1i/test' Configured for linux-elf. #出现这个信息的话, 就OK了, 如果报错可以Google下, 一定是缺了什么 #OK! 我们继续 [root@jinyongri openssl-1.0.1i]# make && make install ####....此处又省略1w字 installing libssl.a cp libcrypto.pc /usr/local/openssl-1.0.1i/lib/pkgconfig chmod 644 /usr/local/openssl-1.0.1i/lib/pkgconfig/libcrypto.pc cp libssl.pc /usr/local/openssl-1.0.1i/lib/pkgconfig chmod 644 /usr/local/openssl-1.0.1i/lib/pkgconfig/libssl.pc cp openssl.pc /usr/local/openssl-1.0.1i/lib/pkgconfig chmod 644 /usr/local/openssl-1.0.1i/lib/pkgconfig/openssl.pc #出现上面的信息就ok了, openssl安装完毕 #我们还需要安装pcre-devel [root@jinyongri openssl-1.0.1i]# yum -y install pcre-devel #即可完成安装 #下面开始安装apr-util-1.5.4 [root@jinyongri openssl-1.0.1i]# cd .. [root@jinyongri src]# ll total 10920 -rw-r--r-- 1 root root 1020833 Sep 30 20:20 apr-1.5.1.tar.gz -rw-r--r-- 1 root root 694427 Sep 30 20:20 apr-util-1.5.4.tar.bz2 -rw-r--r-- 1 root root 5031834 Sep 30 20:20 httpd-2.4.10.tar.bz2 drwxr-xr-x 22 root root 4096 Sep 30 20:27 openssl-1.0.1i -rw-r--r-- 1 root root 4422117 Sep 30 20:20 openssl-1.0.1i.tar.gz [root@jinyongri src]# tar -xf apr-1.5.1.tar.gz [root@jinyongri src]# cd apr-1.5.1 [root@jinyongri apr-1.5.1]# ./configure --prefix=/usr/local/apr-1.5.1 ####....此处又省略1w字 config.status: creating test/internal/Makefile config.status: creating include/arch/unix/apr_private.h config.status: executing libtool commands rm: cannot remove `libtoolT': No such file or directory config.status: executing default commands #出现以上信息即可 [root@jinyongri apr-1.5.1]# make && make install #开始安装 ####....此处又省略1w字 /usr/bin/install -c -m 755 /root/src/apr-1.5.1/build/mkdir.sh /usr/local/apr-1.5.1/build-1 for f in make_exports.awk make_var_export.awk; do \ /usr/bin/install -c -m 644 /root/src/apr-1.5.1/build/${f} /usr/local/apr-1.5.1/build-1; \ done /usr/bin/install -c -m 644 build/apr_rules.out /usr/local/apr-1.5.1/build-1/apr_rules.mk /usr/bin/install -c -m 755 apr-config.out /usr/local/apr-1.5.1/bin/apr-1-config #出现以上信息即可 #下面开始安装apr-util-1.5.4 [root@jinyongri src]# tar -xf apr-util-1.5.4.tar.bz2 [root@jinyongri src]# cd ./apr-util-1.5.4 [root@jinyongri apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util-1.5.4 \ > --with-apr=/usr/local/apr-1.5.1/ && make && make install ---------------------------------------------------------------------- Libraries have been installed in: /usr/local/apr-util-1.5.4/lib If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use the `-LLIBDIR' flag during linking and do at least one of the following: - add LIBDIR to the `LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the `LD_RUN_PATH' environment variable during linking - use the `-Wl,-rpath -Wl,LIBDIR' linker flag - have your system administrator add LIBDIR to `/etc/ld.so.conf' See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages. ---------------------------------------------------------------------- /usr/bin/install -c -m 644 aprutil.exp /usr/local/apr-util-1.5.4/lib /usr/bin/install -c -m 755 apu-config.out /usr/local/apr-util-1.5.4/bin/apu-1-config #OK apr-util-1.5.4 安装好了, #我们该安装httpd-2.4.10了 [root@jinyongri apr-util-1.5.4]# cd .. [root@jinyongri src]# ll total 10928 drwxr-xr-x 28 1000 1000 4096 Sep 30 20:34 apr-1.5.1 -rw-r--r-- 1 root root 1020833 Sep 30 20:20 apr-1.5.1.tar.gz drwxr-xr-x 20 1000 1000 4096 Sep 30 20:42 apr-util-1.5.4 -rw-r--r-- 1 root root 694427 Sep 30 20:20 apr-util-1.5.4.tar.bz2 -rw-r--r-- 1 root root 5031834 Sep 30 20:20 httpd-2.4.10.tar.bz2 drwxr-xr-x 22 root root 4096 Sep 30 20:27 openssl-1.0.1i -rw-r--r-- 1 root root 4422117 Sep 30 20:20 openssl-1.0.1i.tar.gz [root@jinyongri src]# tar -xf httpd-2.4.10.tar.bz2 [root@jinyongri src]# cd httpd-2.4.10 [root@jinyongri httpd-2.4.10]# ./configure --prefix=/usr/local/httpd24 \ --sysconfdir=/etc/httpd24 \ --enable-so \ --enable-ssl \ --enable-cgi \ --enable-rewrite \ --with-zlib \ --with-pcre \ --with-apr=/usr/local/apr-1.5.1/ \ --with-apr-util=/usr/local/apr-util-1.5.4/ \ --enable-modules=most \ --enable-mpms-shared=all \ --with-mpm=event \ --with-ssl=/usr/local/openssl-1.0.1i #..省略一万字 config.status: creating support/phf_abuse_log.cgi config.status: creating support/split-logfile config.status: creating build/rules.mk config.status: creating build/pkg/pkginfo config.status: creating build/config_vars.sh config.status: creating include/ap_config_auto.h config.status: executing default commands #这样就ok, 开始安装 [root@jinyongri httpd-2.4.10]# make && make install [root@jinyongri httpd-2.4.10]# ln -sv /usr/local/httpd24/include /usr/include/httpd #导出头文件 [root@jinyongri httpd-2.4.10]# vim /etc/profile.d/httpd.sh #添加下面这一行来加到环境变量中 export PATH=/usr/local/httpd24/bin:$PATH #然后我们再配置下启动脚本 [root@jinyongri httpd-2.4.10]# vim /etc/rc.d/init.d/httpd.24
启动脚本内容如下
Starting httpd: [ OK ] [root@jinyongri httpd-2.4.10]# cat /etc/rc.d/init.d/httpd.24 #!/bin/bash # # httpd Startup script for the Apache HTTP Server # # chkconfig: - 85 15 # description: The Apache HTTP Server is an efficient and extensible \ # server implementing the current HTTP standards. # processname: httpd # config: /etc/httpd/conf/httpd.conf # config: /etc/sysconfig/httpd # pidfile: /var/run/httpd/httpd.pid # ### BEGIN INIT INFO # Provides: httpd # Required-Start: $local_fs $remote_fs $network $named # Required-Stop: $local_fs $remote_fs $network # Should-Start: distcache # Short-Description: start and stop Apache HTTP Server # Description: The Apache HTTP Server is an extensible server # implementing the current HTTP standards. ### END INIT INFO # Source function library. . /etc/rc.d/init.d/functions if [ -f /etc/sysconfig/httpd ]; then . /etc/sysconfig/httpd fi # Start httpd in the C locale by default. HTTPD_LANG=${HTTPD_LANG-"C"} # This will prevent initlog from swallowing up a pass-phrase prompt if # mod_ssl needs a pass-phrase from the user. INITLOG_ARGS="" # Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server # with the thread-based "worker" MPM; BE WARNED that some modules may not # work correctly with a thread-based MPM; notably PHP will refuse to start. # Path to the apachectl script, server binary, and short-form for messages. apachectl=/usr/local/httpd24/bin/apachectl httpd=/usr/local/httpd24/bin/httpd prog=httpd pidfile=/usr/local/httpd24/logs/httpd.pid lockfile=${LOCKFILE-/var/lock/subsys/httpd} RETVAL=0 STOP_TIMEOUT=${STOP_TIMEOUT-10} # The semantics of these two functions differ from the way apachectl does # things -- attempting to start while running is a failure, and shutdown # when not running is also a failure. So we just do it the way init scripts # are expected to behave here. start() { echo -n $"Starting $prog: " LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS RETVAL=$? echo [ $RETVAL = 0 ] && touch ${lockfile} return $RETVAL } # When stopping httpd, a delay (of default 10 second) is required # before SIGKILLing the httpd parent; this gives enough time for the # httpd parent to SIGKILL any errant children. stop() { echo -n $"Stopping $prog: " killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd RETVAL=$? echo [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile} } reload() { echo -n $"Reloading $prog: " if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then RETVAL=6 echo $"not reloading due to configuration syntax error" failure $"not reloading $httpd due to configuration syntax error" else # Force LSB behaviour from killproc LSB=1 killproc -p ${pidfile} $httpd -HUP RETVAL=$? if [ $RETVAL -eq 7 ]; then failure $"httpd shutdown" fi fi echo } # See how we were called. case "$1" in start) start ;; stop) stop ;; status) status -p ${pidfile} $httpd RETVAL=$? ;; restart) stop start ;; condrestart|try-restart) if status -p ${pidfile} $httpd >&/dev/null; then stop start fi ;; force-reload|reload) reload ;; graceful|help|configtest|fullstatus) $apachectl $@ RETVAL=$? ;; *) echo $"Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}" RETVAL=2 esac exit $RETVAL
#给服务脚本执行权限 [root@diguojin ~]# chmod +x /etc/rc.d/init.d/httpd.24 #配置主机名信息 [root@jinyongri httpd-2.4.10]# vim /etc/httpd24/httpd.conf #添加如下内容 ServerName diguojin #注意这里第二段填写自己服务器的主机名
尝试启动服务
[root@jinyongri httpd-2.4.10]# service httpd.24 start Starting httpd: [ OK ] [root@jinyongri httpd-2.4.10]# service httpd.24 stop Stopping httpd: [ OK ]
用浏览器试试看