源代码
源代码人类能够看懂的且未经处理的,但是计算机并不能识别的纯文本文件。
库: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