源代码

     源代码人类能够看懂的且未经处理的,但是计算机并不能识别的纯文本文件。

库:library

     库是用于开发软件的子程序集合。库不是独立程序,他们是向其他程序提供服务的代码。

     库链接库链接是指把一个或多个库包括到程序中。有两形式种链接:静态链接和动态链接,相应的,前者链接的库叫做静态库后者的叫做动态库。

autoconf和automake

     autoconf是一个用于生成可以自动地配置软件源码包,便于生成脚本。

     configure脚本:检查编译环境是否满足编译需要,为下一步的编译做准备,你可以通过在 configure 后加上参数来对安装进行控制,定义当前程序编译时启动哪个特×××或功能,以及安装路径等。结果:会根据Makefile.in文件生成Makefile文件,该文件带来的好处就是自动化编译

     automake是一个从Makefile.am文件自动生成Makefile.in的工具。用于结合configure脚本生成Makefile文件,该文件是make命令的配置文件

     GNU提供的这两套工具来协助我们自动产生 makefile文件,并且让开发出来的软件可以像大多数源码包那样,只需"./configure", "make","make install" 就可以把源程序安装到系统中。      

yum:Yellowdog Update Modifier。

     基于RPM包管理的前端软件包管理器,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。配置yum


编译安装的步骤:

     1.拿到源代码,并解压到特定目录下

#tar xf package-version.tar.{gz|bz2xz}

     2.切换至源代码目录中

#cd package-version

     3.执行configure脚本

#./configure

     4.编译

#make

     5.安装 make install


   注意如果 在 make 过程中出现 error ,你就要记下错误代码(注意不仅仅是最后一 行),然后你可以向开发者提交 bugreport(一般在 INSTALL 里有提交地址),或者你的系统少了一些依赖库等,这些需要自己仔细研究错误代码。


configure脚本的通用功能:

编译时我们需要定义的配置:


           1.指定安装路径:

--prefisx=/usr/local/package_name

                   --sysconfdir=/etc/package_name

           2.指定启用的特性或禁用的特性

--enabled-feature 启用特性

                           例:--enabled-fpm

--disable-feature 禁用特性

                           例:--disable-socket

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

--with-function    启用某功能

--without-function 禁用某功能

           不同的程序,其configure脚本的功能不同,要获取帮助则使用:

                       ./configure --help

   在编译安装之前先安装2个开发包组:

       CentOS 5:“Development tools”和“Development Libraries”

       CentOS 6:“Development tools”和“Server Platform Development”


编译安装httpd:


   1.通过ftp下载源程序代码发现lfpt并没有安装,安装lftp工具

root@localhost ~]# yum install ftp
........
........
Is thisok [y/N]: y
Downloading Packages:
ftp-0.17-53.el6.i686.rpm                                                          |  56kB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : ftp-0.17-53.el6.i686                                                                  1/1
  Verifying  : ftp-0.17-53.el6.i686                                                                  1/1
Installed:
  ftp.i686 0:0.17-53.el6                                                                        
Complete!2.

   2.登录ftp服务器下载httpd的源代码至本地目录下(可以去开源的网站下载源代码)

[root@localhost /]# lftp 172.16.0.1
lftp 172.16.0.1:~> cd pub/Sources/sources/httpd/
lftp 172.16.0.1:/pub/Sources/sources/httpd> ls -l
-rwxr--r--    1500      500        785724Mar 11  2012apr-1.4.6.tar.bz2
-rwxr--r--    1500      500        992859Aug 08  2012apr-iconv-1.2.1.tar.bz2
-rwxr--r--    1500      500        635000Mar 11  2012apr-util-1.4.1.tar.bz2
-rwxr--r--    1500      500        693258Apr 11  2013apr-util-1.5.2.tar.bz2
-rwxr--r--    1500      500       5524905Jul 25  2013httpd-2.2.25.tar.bz2
-rwxr--r--    1500      500       4949897Aug 20  2013httpd-2.4.6.tar.bz2
-rwxr--r--    1500      500         18739Mar 09  2012mod_bw-0.7.tgz
lftp 172.16.0.1:/pub/Sources/sources/httpd> gethttpd-2.2.25.tar.bz2
5524905bytes transferred                     
lftp 172.16.0.1:/pub/Sources/sources/httpd> bye

   3.解压源代码当前目录下  

[root@localhost /]# tar xf httpd-2.2.25.tar.bz2
[root@localhost /]#


   4.切换至源码目录中

[root@localhost /]# cd httpd-2.2.25
[root@localhost httpd-2.2.25]#

[root@localhost httpd-2.2.25]# 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


   5.查看帮助文档

./configure --help 或用cat命令打开README文件


   6.执行configure脚本,检查编译环境是否满足需求

[root@localhost httpd-2.2.25]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so
checking for chosen layout... Apache
checking for working mkdir -p... yes
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
........
........
Configuring APR librarycreating modules/aaa/Makefile
creating modules/arch/win32/Makefile
creating modules/cache/Makefile
creating modules/database/Makefile
Platform: i686-pc-linux-gnu
checking for working mkdir -p... yes
APR Version: 1.4.8
........
........
creating modules/aaa/Makefile
creating modules/arch/win32/Makefile
creating modules/cache/Makefile
creating modules/database/Makefile
........
........
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


   7.使用make命令进行编译(注意在此过程时是否出现ERROR)

[root@localhost httpd-2.2.25]# make
Making all insrclib
make[1]: Entering directory `/httpd-2.2.25/srclib'
Making all inapr
make[2]: Entering directory `/httpd-2.2.25/srclib/apr'
.........
.........
  -o httpd  modules.lo buildmark.o -export-dynamicserver/libmain.la modules/aaa/libmod_authn_file.la modules/aaa/libmod_authn_default.la modules/aaa/libmod_authz_host.la modules/aaa/libmod_authz_groupfile.la modules/aaa/libmod_authz_user.la modules/aaa/libmod_authz_default.la modules/aaa/libmod_auth_basic.la modules/filters/libmod_include.la modules/filters/libmod_filter.la modules/loggers/libmod_log_config.la modules/metadata/libmod_env.la modules/metadata/libmod_setenvif.la modules/metadata/libmod_version.la modules/http/libmod_http.la modules/http/libmod_mime.la modules/generators/libmod_status.la modules/generators/libmod_autoindex.la modules/generators/libmod_asis.la modules/generators/libmod_cgi.la modules/mappers/libmod_negotiation.la modules/mappers/libmod_dir.la modules/mappers/libmod_actions.la modules/mappers/libmod_userdir.la modules/mappers/libmod_alias.la modules/mappers/libmod_so.la server/mpm/prefork/libprefork.la os/unix/libos.la -lm /httpd-2.2.25/srclib/pcre/libpcre.la /httpd-2.2.25/srclib/apr-util/libaprutil-1.la /httpd-2.2.25/srclib/apr-util/xml/expat/libexpat.la /httpd-2.2.25/srclib/apr/libapr-1.la -lrt -lcrypt -lpthread
make[1]: Leaving directory `/httpd-2.2.25'
[root@localhost httpd-2.2.25]#

   8.将编译好的源程序进行安装使用 make install

[root@localhost httpd-2.2.25]# make install
Making install insrclib
make[1]: Entering directory `/httpd-2.2.25/srclib'
Making install inapr
make[2]: Entering directory `/httpd-2.2.25/srclib/apr'
make[3]: Entering directory `/httpd-2.2.25/srclib/apr'
make[3]: Nothing to be done for`local-all'.
make[3]: Leaving directory `/httpd-2.2.25/srclib/apr'
/httpd-2.2.25/srclib/apr/build/mkdir.sh /usr/local/httpd/lib /usr/local/httpd/bin /usr/local/httpd/build \
             /usr/local/httpd/lib/pkgconfig /usr/local/httpd/include
mkdir /usr/local/httpd
mkdir /usr/local/httpd/lib
mkdir /usr/local/httpd/bin
mkdir /usr/local/httpd/build
mkdir /usr/local/httpd/lib/pkgconfig
mkdir /usr/local/httpd/include
................
mkdir /usr/local/httpd/man/man1
mkdir /usr/local/httpd/man/man8
mkdir /usr/local/httpd/manual
make[1]: Leaving directory `/httpd-2.2.25'
[root@localhost httpd-2.2.25]#


   9.查看安装之后的文件

[root@localhost httpd-2.2.25]# ls  /usr/local/httpd/
bin  build  cgi-bin  error  htdocs  icons  include  lib  logs  man  manual  modules
[root@localhost httpd-2.2.25]# ls /etc/httpd/
extra  httpd.conf  magic  mime.types  original


启动和停止httpd服务:

[root@localhost ~]# service httpd start
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
                                                           [  OK  ]
[root@localhost ~]# service httpd stop
Stopping httpd:                                            [  OK  ]
[root@localhost ~]# service httpd start



服务安装完成之后需要作如下操作


   1.将二进制应用程序添加至环境变量中:编辑配置文件"/etc/profile.d/httpd.sh"

[root@localhost /]# vim /etc/profile.d/httpd.sh
PATH=/usr/local/httpd/bin:$PATH
export PATH

   2.使系统重读二进制文件(source /etc/profile.d/httpd.sh )

[root@localhost /]# . /etc/profile.d/httpd.sh
[root@localhost /]#


   3.头文件输出给系统:为/usr/local/httpd/include创建符号链接

root@localhost /]# ln -s /usr/local/httpd/include  /usr/include/httpd


   4.库文件输出:编辑配置文件:/etc/ld.so.conf.d/httpd.conf

[root@localhost /]# vim /etc/ld.so.conf.d/httpd.conf
/usr/local/httpd/lib

   5.让系统重新生成库文件并缓存:使用ldconfid命令

[root@localhost /]# ldconfig -v | grep "^[^[:space:]]"
/usr/lib/atlas:
/usr/local/httpd/lib:
/usr/lib/mysql:
/usr/lib/qt-3.3/lib:
/lib:
/usr/lib:
/lib/tls: (hwcap: 0x8000000000000000)
/lib/i686: (hwcap: 0x0008000000000000)
/usr/lib/sse2: (hwcap: 0x0000000004000000)
/usr/lib/tls: (hwcap: 0x8000000000000000)
/lib/i686/nosegneg: (hwcap: 0x0028000000000000)

  6.导出man文件:在/etc/man.config中添加"MANPATH  /usr/local/httpd/man"

[root@localhost /]# vim /etc/man.config
# MANPATH       /opt/*/man
# MANPATH       /usr/lib/*/man
# MANPATH       /usr/share/*/man
# MANPATH       /usr/kerberos/man
  MANPATH       /usr/local/httpd/man


启动httptd服务:

           在没用将/usr/local/httpd/bin加入含金变量中也可用/usr/local/httpd/bin/apachectl start启动httpd服务

[root@localhost /]# netstat -ntl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      00.0.0.0:111                 0.0.0.0:*                   LISTEN
tcp        0      00.0.0.0:22                  0.0.0.0:*                   LISTEN
tcp        0      0127.0.0.1:631               0.0.0.0:*                   LISTEN
tcp        0      00.0.0.0:50711               0.0.0.0:*                   LISTEN
tcp        0      0127.0.0.1:25                0.0.0.0:*                   LISTEN
tcp        0      0127.0.0.1:6010              0.0.0.0:*                   LISTEN
tcp        0      0127.0.0.1:6011              0.0.0.0:*                   LISTEN
tcp        0      0:::111                      :::*                        LISTEN
tcp        0      0:::33363                    :::*                        LISTEN
tcp        0      0:::22                       :::*                        LISTEN
tcp        0      0::1:631                     :::*                        LISTEN
tcp        0      0::1:25                      :::*                        LISTEN
tcp        0      0::1:6010                    :::*                        LISTEN
tcp        0      0::1:6011                    :::*                        LISTEN
[root@localhost /]# apachectl start
httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain forServerName
httpd (pid 18929) already running
[root@localhost /]# netstat -ntl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      00.0.0.0:111                 0.0.0.0:*                   LISTEN
tcp        0      00.0.0.0:22                  0.0.0.0:*                   LISTEN
tcp        0      0127.0.0.1:631               0.0.0.0:*                   LISTEN
tcp        0      00.0.0.0:50711               0.0.0.0:*                   LISTEN
tcp        0      0127.0.0.1:25                0.0.0.0:*                   LISTEN
tcp        0      0127.0.0.1:6010              0.0.0.0:*                   LISTEN
tcp        0      0127.0.0.1:6011              0.0.0.0:*                   LISTEN
tcp        0      0:::111                      :::*                        LISTEN
tcp        0      0:::80                       :::*                        LISTEN
tcp        0      0:::33363                    :::*                        LISTEN