Linux程序软件包管理


       由于本人水平有限,以下学习总结内容不能保证准确无误,请自行鉴别。


一、概述

windows下安装一个软件很轻松,只要双击.exe的文件,安装提示连续下一步即可,然而linux系统下安装一个软件似乎并不那么轻松了,因为我们不是在图形界面下所以我们要学会如何在linux下安装一个软件

现在又会面临到一个问题,应用程序跨平台是很麻烦的,既要考虑OS平台,也要考虑硬件平台;例如:我们的AB两台服务器OS都为CentOS6-X86_64bit(软件级别),虽然他们都是CentOS6,但是CPU却很有可能不一样, A主机底层是X86系列的系统跑在PowerPC上面,B主机是Inter core2双核X86_64的系统(硬件级别),即便A和B都是CentOS6、glibc都一样,但是我们在A主机上面编译好的应用程序到B主机上面是不能跑起来的,他们对于正真的二进制应用程序的执行格式却是不尽相同的,说通俗点就是他们的汇编指令并不一样,很显然PowerPC与X86的指令集是不一样的,内核也是不一样的,因此我们到发行商那里去下载一个发行版的时候,我们一定要下载与平台架构相兼容的版本;
OS平台:应用程序必须为特定平台所支持的版本;硬件平台:应用程序必须为特定的CPU所支持。


1.1 软件包的组成:

       二进制程序它是已编译好,拿来就可以运行的,也是我系统中的核心组建,遵循FHS规范它们一般都存放在/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin,但是我们可以自定义二进制程序的存放位置,假如:安装nginx,/usr/local/nginx/后它会在这个特定的文件夹内生成bin,sbin,但是这样一来就会出现一个问题,由于在我们的系统上命令行当中所有可以执行的命令都是在环境变量PATH定义路径下的可执行程序才能找到,那解决办法是将程序生成的二进制程序的路径添加至环境变量PATH中或者使用绝对路径;

       库文件:与二进制相似,找库文件也是在特定的位置下面去找的/lib, /usr/lib, /lib64, /usr/lib64,/usr/local/lib, /usr/local/lib64,如果第三方程序安装后它的库文件也不是找不到的,因为系统到哪儿去找库文件是由系统默认的,当然我们也可以像去修改环境变量PATH那样从而能找额外二进制程序一样去修改系统查找库文件位置的,只不过这个查找是要通过修改/etc/ld.so.conf文件,也就是在程序制作过程当中的最后一步---预编译、编译、汇编、链接,链接过程中的链接程序所要查找动态格式的共享动态库时索要找的路径,很显然如果我们安装了许多的应用程序都安装在了特定的路径下,也就是说我们要在这个文件当中添加许许多多的内容,如果文件过多就会产生系统混乱,因此像/etc/profile一样在/etc/ld.so.conf.d目录下所有以.conf都是可以可以被识别成/etc/ld.so.conf组成部分的,那由此我们自己在修改库文件查找路径时并不建议修改/etc/ld.so.conf文件,而可以为某一特定应用程序专门在/etc/ld.so.conf.d 下创建一个文件,来专门配置这个应用程序,将来我们需要卸载时,找到特定的文件删除即可,这对我们的管理极其方便.我们可以通过ldd命令查看应用程序所依赖的共享库,用法:#ldd [options] FILE ….

       配置文件:这个也是遵循FHS规范,安装应用程序后的配置文件一般都存放在/etc或在它下面创建特定单独的目录来存放,但如果我们安装应用程序时,将它装到了特定的路径下,那这就意味着应用程序将会在特定的路径下创建/etc目录专门存放配置文件,所以只要自己指定路径这些配置文件也会改的,那么一旦配置文件的路径改了,系统会到哪儿去找呢?就像二进制程序跟库文件一样,我们必须要让系统知道到哪儿去找,但配置文件不需要,因为配置文件仅为当前一个程序所使用,配置文件一般是没法共享的,所以在编译程序时只要指定了编译安装路径,并告诉系统配置文件存放在什么地方,那么程序执行时它一定会知道去哪儿找配置文件的.此时跟我们的系统调用环境不在有任何的关系,所以配置文件无需额外配置.

       帮助文件:一般而言,一个应用程序有以下及部分组成:
man文件, info文件, README, INSTALL, ChangeLog
       man Command加上这个命令就可以查看它的帮助文档,man本身是到到某路径下查找与命令名同名的通常以.gz结尾的压缩文件的名字,然后它会使用类似于zcat.或者bz2cat这些方式不展开、不解压直接查看的,而查看时是调用less命令来显示的,那它到哪些路径下去找呢,通常在/usr/shared/man/这个路径下进行查找,但是如果我们在编译时指定了其他的安装路径,很有肯能它的man手册只会存在于他的安装路径下,很显然man命令又将找不到了,所以跟二进制程序和库文件一样,我们也需要告诉它到什么位置下去找程序man手册,man命令自身的配置文件/etc/man.conf,在此文件中有一个指令叫做MANPATH,用于指定到什么路径下去找man的,编译过后的程序我们将man的路径添加到此文件中就可以使用man命令获取程序的man手册了,如果不想修改这个文件,那可以通过man –M/path/to/man 命令,明确告诉它就到你指定的那个路径找就可以了.

       一般一个软件包安装完成后都由以上四类文件组成,这四类组成部分组成起来文件数量可能会多大十几个甚至上百个,这些文件安装以后就分散到了各路径下了,找起来就有点麻烦,因此为了便捷的管理这些文件,我们可以找一个专门的应用程序管理器;


1.2 应用程序管理器:
     1.2.1、数据库:(它有一定的冗余机制,如果数据库损坏可以通过备份结合安装后的程序重新构建)
        软件名和版本
        安装生成的各文件路径及校验码
        依赖关系
        提供功能性说明
     1.2.2、提供程序组成格式:
        文件清单
        安装卸载时运行的脚本(post)
        应用程序为了表示自己的状态,一般格式都如下:
        源代码:
name-major.release.tar.gz

        依赖关系: 在Linux哲学思想中,它使用有众多目的单一的小程序组合完成复杂任务,由于我们的应用程序为完成某一任务而依赖与其他另外的应用程序,而在实际生产中却有另外的问题,循环依赖A->B->C…….,版本依赖.

       在众多Linux系统中,例如常见的:
       Debian:它的程序包是以.deb结尾,对应的包管理器是dpkg.
       RedHat:它的程序包是以.rpm结尾,对应的包管理器是rpm(使用perl语言编写).
       (注:rpm:RedHat Package Manager,但是就在前不久Linux标准委员会已经将rpm吸纳为Linux上程序包的标准管理工具,所以rpm改名为:RPM is Package Manager )
无论是.deb还是.rpm包他们在管理时都有类似的功能.
      1.23、一个包管理器应该具有的基本功能:
打包(发行商完成)、安装、查询、升级、卸载、校验、数据库管理
为了解决依赖关系就有了软件包的前端管理器(依赖关系自动查询解决,进一步提升了应用程序的管理性)常用的:apt-get,yum.


二、rpm包的使用管理:

2.1 rpm包命名格式:

源程序:name-version.tar.{gz|bz2|xz}
        version: major.minor.release
rpm包:name-version-release.arch.rpm
release:通常包含rpm的制作发行号,还包含适用的OS
bash-4.3.2-2.el6.x86_64.rpm

前面提到过的:

注意:①OS平台:应用程序必须为特定平台所支持的版本;

      ②硬件平台:应用程序必须为特定的CPU所支持;

像这样的包python-routes.noarch.rpm没有底层的限制.一次制作,一次开发,到处使用.
比如一个源码包有10个功能,而我们只使用3个功能,那其他的7个都不知道谁用不用,这样一来对于我们的管理是非常麻烦的,于是出现了分包的概念.
分包:将一个大的程序包制作成单独功能的多个包;

[root@Gmq ~]# rpm -qa | grep httpd
httpd-2.2.15-26.el6.centos.x86_64 #→核心包
httpd-tools-2.2.15-26.el6.centos.x86_64 #→子包
httpd-devel-2.2.15-26.el6.centos.x86_64 #→子包

2.2 获取rpm包的途径:
①、发行商的光盘或站点服务器
       以CentOS为例:
       http://mirrors.163.com
       http://mirrors.sohu.com
②http://rpmfind.net
③http://rpm.pbone.net
注意:
①发行商,发行光盘中的包,需要升级时,官方释放出升级包;
②无论是Centos,还是Redhat他在光盘上提供的包并非完全包含我们能使用到的包,于是Fedora 在互联网上维护这一个叫EPEL额外的,分别面向各个版本的rpm包,所以有了发行商提供的光盘和EPEL就能够满足一般工作的需求了.但是如果对于应用场景比较严格的,还是尽量使用光盘中的包.实在不行才使用上面提供的网站去搜索相关的包.

2.3 rpm包管理:安装

[root@Gmq ~]#wget 包路径->获取rpm安装包
[root@Gmq ~]#rpm -i/path/to/rpm_packages…→install
#-v->显示安装信息,-vv,-vvv
#-h->以#的个数显示安装的进度,一个#表示2%的进度.
[root@Gmq ~]# rpm -ivh samba-3.6.9-151.el6.x86_64.rpm
Preparing...###########################################[100%]
1:samba########################################### [100%]
[root@Gmq ~]#rpm –ivh --test #→仅测试,不正真执行安装.
[root@Gmq ~]#rpm –ivh --nodeps/path/to/rpm_packages…→如果安装时提示有依赖关系,则解决依赖关系或者忽略依赖关系:
[root@Gmq ~]#rpm –ivh --replacepkgs /path/to/rpm_packages…#→ 重新安装;原来的配置文件不会被覆盖,新安装的配置文件将会被重命名以,rpmnew为后缀的文件.
[root@Gmq ~]#rpm –ivh --force /path/to/rpm_packages… #→强制执行安装

2.4 rpm包管理:卸载

[root@Gmq ~]#rpm -e --erase packages_name

如果一个包卸载时,被其他程序所依赖:则可以
①把依赖的一同卸载;
②忽略依赖关系;--nodeps
③不再卸载.

2.5 rpm包管理:查询

[root@Gmq ~]#rpm –qpackages_name #→查询单个指定的包是否安装.
[root@Gmq ~]#rpm –qa packages_name #→查询所有已安装的包.
[root@Gmq ~]#rpm –qi packages_name packages_name #→查询指定包的描述信息.
[root@Gmq ~]#rpm –ql packages_name #→查询包安装之后在当前系统上生成的文件的列表.
[root@Gmq ~]#rpm –qd packages_name #→查询安装后生成的帮助文档.
[root@Gmq ~]#rpm –qc packages_name #→查询安装后生成的配置文件.
[root@Gmq ~]#rpm –q --scripts packages_name #→查询安装后包相关的脚本.

脚本分类:
Preinstall   →安装后脚本   Postinstall   →安装后脚本
Preuninstall →卸载前脚本   Postuninstall →卸载后脚本
Postrans →事物

查询尚未安装的rpm包文件的相关信息只需在[options]中加入字母p即可.

[root@Gmq ~]#rpm –pql /path/to/packages_file →查询一下如果这个包安装后生成的文件会放到什么位置.
[root@Gmq ~]#rpm –qd packages_name →查询如果这个包安装后生成的帮助文档.

2.6 rpm包管理:升级

[root@Gmq ~]#rpm –Uvh /path/to/packages_file #→ 检查并升级系统中的某个软件包,若该包原来未安装,则等同于"-i"选项
[root@Gmq ~]#rpm–Fvh /path/to/packages_file #→ 检查并升级系统中的某个软件包,则放弃安装

2.7 rpm包管理:校验

#检查包安装后生成的文件是否被修改过;
[root@Gmq ~]#rpm -V package_name
S file Size differs #→文件大小是否被改变
M Mode differs (includes permissions andfile type) #→权限是否被改变
5 digest (formerly MD5 sum) differs #→MD5校验是否改变
D Device major/minor numbermismatch #→主设备号/次设备号
L readLink(2) path mismatch #→路径
U User ownership differs #→属主是否改变
G Group ownership differs #→属组是否被改变
T mTime differs #→时间戳是否被改变
P caPabilities differ #→能力

2.8 rpm包管理:检查来源合法性和软件包完整性
源程序:通过md5或sha1校验码验正;
rpm包:发行商提供的合法性是可信的
包完整性:通过单向加密机制(md5|sha1)
来源合法性:通过公钥加密机制(RSA)
命令:gpg, gpg是pgp的实现.
导入制作者的公钥,CentOS发行版的公钥在iso文件中;

[root@Gmq ~]#rpm --import /path/to/gpg-key-file →导入命令:
[root@Gmq ~]#rpm–K[--checksig] /path/to/package_file →检查
#--nosignature: 不检查来源合法性
#--nodigest: 不检查完整性

2.9 rpm包管理:维护RPM数据库
数据库存放位置:/var/lib/rpm

[root@Gmq ~]#rpm -- initdb →初始化(如果实现不存在一个数据库,则新建)
[root@Gmq ~]#rpm --rebuild →重建(直接重建数据库,会覆盖原有的库)

三、yum程序包管理前端工具:

3.1什么是yum
yum是rpm的补充,他的工作依赖于rpm;能够自动解决依赖关系.
文件服务器(共享rpm包):通过yum所支持的文件共享机制将各rpm包通过文件服务共享;
repository: 仓库
①各rpm包;
每个rpm包相互间的依赖关系、程序包安装后所能够生成文件列表等元数据文件;


3.2 yum客户端:
①配置文件:指定各可用的yum仓库;
缓存元数据:yum会到各可用yum仓库获取元数据,并缓存至本地;
分析元数据:根据具体操作请求完成元数据分析, 可能包括检查依赖关系、文件列表等信息;
④执行具体操作:


3.3 文件服务器:
支持的协议:ftp,http,nfs,file…
客户端配置文件指定对服务器访问方式:

①ftp    ftp://server/path/to/repo
②http   http://server/path/to/repo
③nfs    nfs://server/nfs_path
④file   file:///path/to/repository

3.4 yum管理应用程序的使
要使用yum管理应用程序,首先得配置其可用的yum仓库,保存在配置文件中:
/etc/yum.conf
/etc/yum.repos.d/*.repo
配置文件格式:由两段组成,类似windows的ini配置文件
[main] :主配置段
[repo] :仓库配置段→可配置多个段
置段repo:

[repo_ID]
name=String
baseurl=仓库的访问路径
enabled={1|0}是否启用此yum仓库
gpgcheck={1|0}是否检查程序来源和发性以及完整性
gpgkey=公钥文件(可以在本地,也可是服务器端路径)
cost=定义此仓库开销,默认为1000,值越小,优先级别越高

3.5 yum命令的使用:

格式[root@Gmq ~]# yum [options] [command] [package ...]

[root@Gmq ~]# yum repolist [all|enable|available] -> 显示列出所有以配置好的可用yum repo
[root@Gmq ~]# yum clean[all|packages|metadata|expire-cache|rpmdb|plugins] ->清除缓存
[root@Gmq ~]# yum [list|installed|available] ->显示所有安装过或可用而未安装但是存储在指定yum仓库中的包
[root@Gmq ~]# yum info packages_name →列出rpm包的描述
[root@Gmq ~]# yum grouplist –>列出所有包组
[root@Gmq ~]# yum groupinfo "Packages_group_name" →显示包组信息(包组名称中含有空格需要加引号)
[root@Gmq ~]# yum install package_name ...  → 安装指定的程序包
[root@Gmq ~]# yum reinstall package_name ... -> 重新安装指定的程序包
[root@Gmq ~]# yum check-update package_name  →检查可升级的包
[root@Gmq ~]# yum update package_name ... → 升级指定的程序包(若要明确升级到指定的版本,需指定版本号)
[root@Gmq ~]# yum downgrade package_name → 降级
[root@Gmq ~]# yum erase|removepackage_name ... → 卸载
[root@Gmq ~]# yum whatprovides|provides /path/to/somefile:查询某文件是由哪个包安装生成的;与rpm –qf 类似
[root@Gmq ~]# yum groupinstall "group_name" →安装指定的包组
[root@Gmq ~]# yum groupremove"group_name" →卸载指定的包组

安装本地包:

[root@Gmq ~]# yum install /path/to/package_file

手动禁止检查来源及完整性.

[root@Gmq ~]# yum install /tmp/samba-3.6.9-151.el6.x86_64.rpm--nogpgcheck

提示:

如果系统为CentOS 5,常用的开发包组为“Development Tools”和“Development Libraries”
CentOS 6,常用的开发包组为“Development Tools”和“Server PlatformDevelopament”“Desktop Platform Development”(有图形程序时需安装此组)

3.6 yum配置文件中可用的四个宏:

$releasever:程序的版本,对Yum而言指的是redhat-release版本;只替换为主版本号,如RedHat 6.5,则替换为6;
$arch:系统架构
$basearch:系统基本架构,如i686,i586等的基本架构为i386;
$YUM0-9:在系统中定义的环境变量,可以在yum中使用;

获取当前系统相应宏替换结果的办法:

# python
Python 2.6.6 (r266:84292, Nov 22 2013,12:16:22)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)]on linux2
Type "help","copyright", "credits" or "license" for moreinformation.
>>> import yum,pprint
>>> yb = yum.YumBase()
>>> pprint.pprint(yb.conf.yumvar,width=1)
Loaded plugins: fastestmirror,refresh-packagekit
{'arch': 'ia32e',
'basearch': 'x86_64',
'releasever': '6',
'uuid':'ea249181-2f82-4c40-8c42-d51b3fce319a'}
>>> quit()

2.7 本地创建yum仓库

       在发行版的光盘当中就有元数据,所以我们可以直接以光盘为yum仓库源,但是如果我们用不了光驱或者自己搭建一个文件服务源又该如何做呢,所以只能手动创建元数据信息.步骤如下:
将所需要的rpm包拷贝至本地rpm包存放位置,这里我以我系统上以file文件协议为例创建本地yum仓库:

[root@Gmq ~]#mkdir /data/rpmdata  #→rpm包存放位置
[root@Gmq ~]#cp /media/Pakages/*/data/rpmdata #→这个文件夹内只存放了rpm包,元数据稍后创建
[root@Gmq ~]# cd /etc/yum.repos.d/ #→配置yum客户端:
[root@Gmq yum.repos.d]# tar -cjf yumrepo.tar.gzCentOS-Base.repo.bak CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo #→我们将这四个文件打包并删除,自行创建.
[root@Gmq yum.repos.d]#ls
yumrepo.tar.gz
[root@Gmq ~]# vim base.repo #→后缀一定是以.repo结尾
[base-CentOS6] ->repoID
name=Cent0S6.4-x86_64_Yumrepo #→自定义的
baseurl=file:///data/rpmdata/ #->以file协议访问
enabled=1 #→开启此yum仓库
gpgcheck=0 #→关闭检查其程序来源性和完整性
[root@Gmq yum.repos.d]# rpm -q createrepo #→首先要确保createrepo这个包已经安装
createrepo-0.9.9-17.el6.noarch
[root@Gmq yum.repos.d]# createrepo /data/rpmdata  #→开始创建元数据
Spawning worker 0 with 6111 pkgs
Workers Finished
Gathering worker results
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[root@Gmq rpmdata]# ls -ld repodata
drwxr-xr-x 2 root root 4096 Feb 23 08:40repodata #→完成之后在/data/rpmdata/目录下将会创建这个文件夹,里面存放的就是在本地rpm包的元数据信息.
[root@Gmq rpmdata]#yum repolist
[root@Gmq ~]# yum repolist  #→通过repolist我们可以得知该本地yum源可以正常使用
Loaded plugins: fastestmirror,refresh-packagekit, security
Loading mirror speeds from cachedhostfile
repoidreponamestatus
base-CentOS6Cent0S6.4-x86_64_Yumrepo6,111
[root@Gmq ~]# yum install –y samba #->我们尝试安装一下samba是否能够执行成功.
…………………
…………………
…………………
…………………
Complete!
[root@Gmq ~]# rpm -q samba
samba-3.6.9-151.el6.x86_64
[root@Gmq ~]#

四、源码包编译安装:

4.1 什么是源码包软件:
       在文章开始前已经说到了rpm以及yum安装和管理程序软件的方法,而yum安装的是二进制包,只需安装上就可以使用,并且yum的安装过程,人为无法干预,不能按需安装.源里面有什么就安装什么,安装的版本也比较低.但是除了rpm和yum之外还有一种安装软件的方式———源码包编译安装,何为源码包呢,它们是由我们常见的c,c++、perl源码、或者python来开发的,编译安装过程,软件根据用户的需要加以定制;按照需求,可以设定参数,进行安装,并且安装的版本,软件功能定制性、灵活性都比较大.

4.2 怎样安装以源码包打包的软件:

       在安装之前我们需要了解几个概念:
       autoconf是用来产生configure文件的,.configure是一个脚本,它能设置源程序来适应各种不同的操作系统平台,检查编译环境是否满足编译需求,并定义当前程序编译时启用哪个特性或功能,以及安装路径的定义等等;
       automake是用于结合configure脚本生成makefile文件,而makefile文件是make命令的配置文件.

4.2.1 编译安装的步骤

[root@Gmq ~]#tar zx package_version.tar.{gz|bz2|xz} #->拿到源码包,并解压(展开后的目录名通常为package-version)
[root@Gmq ~]#cd packages_version #->切换到源码包目录下
[root@Gmq ~]#./configure ->执行脚本
[root@Gmq ~]#make #->编译
[root@Gmq ~]#make install #->安装

configure脚本的通用功能;我们需要定义的配置:

①安装路径:
--prefix=/usr/local/package_name #→程序安装路径
--sysconfdir=/etc/package_name #→配置文件存放路径
②指定启用/禁用的特性:
--enable-feature: 例如--enable-fpm
--disable-feature: 例如 --disable-socket
③指定所依赖功能、程序或文件
--with-function:启用某功能
--without-function:禁用某功能
不同的程序,其configure脚本功能不同,要获取帮助
./configure --help

4.3 实验案例:源码编译安装httpd服务:

         实验系统版本:CentOS6.4-X86-64

4.3.1 检查实验环境(开发环境的支持):  

[root@Gmq data]# yum grouplist "Server Platform Development" "Development Tools"
Loaded plugins: fastestmirror,refresh-packagekit, securit
Setting up Group Process
Loading mirror speeds from cachedhostfile
Installed Groups:
Development tools
Server Platform Development
Done
[root@Gmq data]# gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat4.4.7-3)
Copyright (C) 2010 Free SoftwareFoundation, Inc.
This is free software; see thesource for copying conditions.There isNO
warranty; not even forMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[root@Gmq data]#

4.3.2 获得httpd源码包

[root@Gmq data]# wget ftp://172.16.0.1/pub/Sources/sources/httpd/httpd-2.2.25.tar.bz2
[root@Gmq data]# ls
httpd-2.2.25.tar.bz2
[root@Gmq data]#

4.3.3 解压源码包,进入已解压源码包文件夹:

[root@Gmq data]# tar xf httpd-2.2.25.tar.bz2
[root@Gmq data]# ls
httpd-2.2.25httpd-2.2.25.tar.bz2
[root@Gmq data]#cd httpd-2.2.25
[root@Gmq httpd-2.2.25]# ls
ABOUT_APACHE  config.layout  httpd.dep       libhttpd.dsp  modules.o         srclib
acinclude.m4  config.log     httpd.dsp       libhttpd.mak  NOTICE            support
Apache.dsw    config.nice    httpd.mak       LICENSE       NWGNUmakefile     test
build         config.status  httpd.spec      Makefile      os                VERSIONING
BuildAll.dsp  configure      include         Makefile.in   README
BuildBin.dsp  configure.in   INSTALL         Makefile.win  README.platforms
buildconf     docs           InstallBin.dsp  modules       README-win32.txt
buildmark.o   emacs-style    LAYOUT          modules.c     ROADMAP
CHANGES       httpd          libhttpd.dep    modules.lo    server
[root@Gmq httpd-2.2.25]#

4.3.4  ./configure执行脚本并指定安装路径:

[root@Gmq httpd-2.2.25]# ./configure--prefix=/usr/local/apache
#………执行过程中屏幕输出省略……
[root@Gmq httpd-2.2.25]#

4.3.5 如果上面执行完成没有报错那么就可以执行编译操作了

[root@Gmq httpd-2.2.25]# make
#………执行过程中屏幕输出省略……
[root@Gmq httpd-2.2.25]#

4.3.6 如果编译操作也没有问题那就执行最后一步安装

[root@Gmq httpd-2.2.25]# make install

4.3.7 安装完成,找到http的二进制程序启动服务即可

[root@Gmq httpd-2.2.25]# cd /usr/local/apache/bin
[root@Gmq bin]# ./apachectl start
[root@~ bin]# netstat -antl | grep :80
tcp    0    0      :::80              :::*      LISTEN
[root@~ bin]#

4.3.8 验证测试通过,实验告一段落

Linux系统基础-管理之软件包管理【附http源码安装实例】_YUM


       由于我们前面说到过源码包的安装路径可以安装到自定义的目录下,软件功能定制性、灵活性都比较大.而Apache又是支持二次开发的,所以它的二进制文件、库文件、头文件以及帮助文件都在/usr/local/apache/目录下,要想让系统找到这些文件,那我们还要做一下操作,让它更加的完善一些.

将源码安装的apache的二进制文件的路径加入环境变量中,并通过source对文件重读:

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

将源码安装的apache的头文件导入到系统找得到的位置:

[root@Gmq include]# mkdir /usr/include/httpd
[root@Gmq ~]# ln –sv /usr/local/apache/include /usr/include/apache

将源码安装的apache的库文件导出给系统找得到的位置

[root@Gmq ~]# vim /etc/ld.so.conf.d/httpd.conf
/usr/local/apache/lib #→在/etc/ld.so.conf.d中新建与apache服务同名的文件并添加此行
[root@Gmq ~]# ldconfig #→通知系统重读新生成缓存
/usr/local/apache/lib #→可以看到库文件已经加进去了
libaprutil-1.so.0 → libaprutil-1.so.0.5.2
libapr-1.so.0 → libapr-1.so.0.4.8
libexpat.so.0 → libexpat.so.0.5.0
……………………………………

将源码安装的apacheman手册的导入系统找得到的位置

[root@Gmq ~]# vim /etc/man.config
MANPATH/usr/local/apache/man →添加此行
[root@Gmq ~]#

至此,源码安装httpd服务基本完善!