一、 RPM

RPM的全名为“RedHat Package Manager”,是由RedHat公司开发的。Rpm是以一种数据库记录的方式将所需要的套件安装到linux主机的一套管理程序。 

1、安装


rpm {-i|--install} [install-options] PACKAGE_FILE ...

-v: verbose

-vv: 

-h: 以#显示程序包管理执行进度;每个#表示2%的进度


rpm -ivh PACKAGE_FILE ...


[install-options]

--test: 测试安装,但不真正执行安装过程;dry run模式;

--nodeps:忽略依赖关系;

--replacepkgs: 重新安装;


--nosignature: 不检查来源合法性;

--nodigest:不检查包完整性;


--noscipts:不执行程序包脚本片断;

%pre: 安装前脚本; --nopre

%post: 安装后脚本; --nopost

%preun: 卸载前脚本; --nopreun

%postun: 卸载后脚本;  --nopostun

常用例子: 

(1)安装一个包的命令是:  rpm -ivh 包名

(2)强制安装一个包的名:  rpm --nodeps -ivh 包名


2、升级

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

rpm {-F|--freshen} [install-options] PACKAGE_FILE ...


upgrage:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则“安装”;

freeshen:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则不执行升级操作;


rpm -Uvh PACKAGE_FILE ...

rpm -Fvh PACKAGE_FILE ...


--oldpackage:降级;

--force: 强行升级;


3、查询:

rpm {-q|--query} [select-options] [query-options]


[select-options]

-a: 所有包

-f: 查看指定的文件由哪个程序包安装生成


-p /PATH/TO/PACKAGE_FILE:针对尚未安装的程序包文件做查询操作;


--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供;

--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;


[query-options]

--changelog:查询rpm包的changlog

-c: 查询程序的配置文件

-d: 查询程序的文档

-i: information

-l: 查看指定的程序包安装后生成的所有文件;

--scripts:程序包自带的脚本片断

-R: 查询指定的程序包所依赖的CAPABILITY;

--provides: 列出指定程序包所提供的CAPABILITY;


用法:

-qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE

-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ...

-qa


例如:  查询系统上已经安装的所有的包 :  rpm -qa 

        查询pwd命令所属的rpm包是什么: rpm -qf /bin/pwd 

      查询httpd 包里面有什么: rpm -ql httpd

        查询httpd包里面的信息:   rpm -qi httpd

  

4、卸载:

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]

           [--notriggers] [--test] PACKAGE_NAME ...


5、校验:

    rpm {-V|--verify} [select-options] [verify-options]


      S file Size differs

      M Mode differs (includes permissions and file type)

      5 digest (formerly MD5 sum) differs

      D Device major/minor number mismatch

      L readLink(2) path mismatch

      U User ownership differs

      G Group ownership differs

      T mTime differs

      P caPabilities differ


例如: 对已经修改过的httpd的配置文件进行校验:

[root@test1 ~]# rpm -V httpd

S.5....T.  c /etc/httpd/conf/httpd.conf

S.5....T.  c /etc/sysconfig/httpd



6、数据库重建:

rpm {--initdb|--rebuilddb}

initdb: 初始化

如果事先不存在数据库,则新建之;否则,不执行任何操作;


rebuilddb:重建

无论当前存在与否,直接重新创建数据库;


二、YUM 管理

YUM(Yellow dog Updater, Modified)为多个Linux发行版的前端软件包管理器,例如 Redhat RHEL, CentOS & Fedora.  YUM通过调用RPM的软件包信息让用户更方便地进行软件安装,升级,卸载等软件包管理操作。

使用了yum,我们不用考虑包与包之间的关系,yum会自动帮我们解决依赖。

yum repository :yum仓库

       存储了众多rpm包,以及包的相关元数据的文件(放在repodata目录中)服务器

yum客户端:

       配置文件:指向仓库的位置以及各种配置信息,每个yum客户可以有多个可用的yum仓库:

       yum的公共配置文件 /etc/yum.conf 

       yum repository仓库的配置文件/etc/yum.repos.d/*.repo


定义一个仓库指向:
    [REPO_ID]
    name=仓库描述信息
    baseurl=仓库访问路径
    # mirrorlist=SCHEME://HOSTNAME/PATH/TO/MIRROR_LIST_FILE
    enabled={1|0}是否生效
    gpgcheck={1|0}是否校验
    gpgkey=公钥文件(可以放在本地也可放在远程服务器)
    cost=定义次仓库的开销默认为1000

   定义仓库指向可用变量:
    $releasever: 引用当前系统的主版本号;
    $basearch: 当前系统的基本架构;
     i386, i486, i586, i686: i386


例如: 将本地光驱配上yum源的配置如下:

[centos6.6]

name=centos6.6

baseurl=file:///media/cdrom/

enabled=1

gpgcheck=0


  yum 命令

yum [options] [command] [package(包) ...]

        安装:install,reinstall

        卸载:erase|remove(都可以使用)

        升级:update,downgrade(卸载),check-update(可用升级)

        查询:list,info,search(模糊匹配),provides(指定路径)

        包组:grouplist(所有包组),groupinfo "包组名称",groupinstall(安装)"GROUP_NAME",yum install @GROUP_NAME,remove@(卸载),groupremove(卸载)

        选项:--enablerepo=,--disablerepo=,-y:自动回答为yes,--nogpgcheck

        构建仓库:createrepo


1. yum help 将显示使用信息

2. yum list 显示已安装和可用的软件包

3. yum search KEYWORD 按关键字列出软件包

4. yum info PACKAGENAME 列出有关软件包的详细信息

5. yum install PACKAGENAME 获取并安装软件包,包括所有依赖项

6. yum remove PACKAGENAME 删除安装的软件包,包括所有受支持的包

7. yum update PACKAGENAME 获取并安装更新版本的软件包,包括所有依赖项。 如果未指定软件包名称 ,它将安装所有相关更新

8. yum provides PATHNAME 可显示与指定的路径名相匹配的软件包(通常包括通配符)


若要安装、更新和删除 httpd 软件包:

[root@serverX ~]# yum install httpd

[root@serverX ~]# yum update httpd

[root@serverX ~]# yum remove httpd

注意: yum remove 将删除列出的软件包和与要删除软件包有依赖性的所有软件包,这会导致意外删除软件

因此请仔细检查要删除的软件包的列表。


接下来介绍一下yum组件组,其实yum组件组和用yum处理单个软件包是非常相像的,基本上就是在参数前边加上group

yum grouplist    列出所有可用组

yum groupinstall GROUPNAME  获取并安装组件组,包括所有依赖项

yum groupinfo GROUPNAME   列出有关组件组的详细信息

yum groupremove GROUPNAME    删除安装的组件组,包括所有受支持的包

yum groupupdate GROUPNAME     获取并安装更新版本的组件组,包括所有的依赖项


三、程序包编译安装

(1)C代码编译安装三步骤:

前提:提供开发工具及开发环境

开发工具:make, gcc等

开发环境:开发库(glibc:标准库),头文件,通过“包组”提供开发组件

  CentOS 6: "Development Tools", "Server Platform Development"



第一步:configure脚本

   选项:通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile;检查依赖到的外部环境

   --help: 获取其支持使用的选项


选项分类:

安装路径设定:

    --prefix=/PATH/TO/SOMEWHERE: 指定默认安装位置;默认为/usr/local/

    --sysconfdir=/PATH/TO/SOMEWHERE:配置文件安装位置;



System types:

Optional Features: 可选特性


    --disable-FEATURE

    --enable-FEATURE[=ARG]



Optional Packages: 可选包

    --with-PACKAGE[=ARG]

    --without-PACKAGE



第二步:make:根据makefile文件,构建应用程序

第三步:make install :复制安装



(2)安装后的配置:

   (1) 导出二进制程序目录至PATH环境变量中-----/etc/profile.d/NAME.sh

    export PATH=/PATH/TO/BIN:$PATH

   (2) 导出库文件路径-----/etc/ld.so.conf.d/NAME.conf

    添加新的库文件所在目录至此文件中,然后让系统重新生成缓存:ldconfig [-v]

    (3) 导出头文件-----基于链接的方式实现:ln -sv 

    (4) 导出帮助手册-----编辑/etc/man.config文件,添加一个MANPATH



 (3) 示例:在centos6.5系统中编译安装httpd,并测试

   

12345678910111213141516171819202122232425262728293031 [root@localhost ~]# yum install gcc              #安装gcc编译器 

[root@localhost ~]# yum groupinstall "Development tools" "Server Platform Development" 

[root@localhost ~]# tar xf httpd-2.2.29.tar.bz2    #解压httpd 

[root@localhost ~]# cd httpd-2.2.29 

[root@localhost httpd-2.2.29]# ./configure --prefix=/usr/local/apache2 --sysconfdir=/etc/httpd                             # 

[root@localhost httpd-2.2.29]# make && make install  #编译安装 

[root@localhost ~]# vim /etc/profile.d/apache2.sh   #创建二进制程序目录至PATH环境变量中 

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

[root@localhost ~]# cd /etc/profile.d/ 

[root@localhost profile.d]# chmod +x apache2.sh  #给脚本执行权限 

[root@localhost profile.d]# ./apache2.sh     

[root@localhost ~]# echo $PATH     

/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/apache2/bin:/root/bin

[root@localhost ~]# vim /etc/ld.so.conf.d/apache2.conf  #添加库文件 

/usr/local/apache2/lib/   

[root@localhost ~]# ldconfig -v     #系统重新生成缓存 

ldconfig: /etc/ld.so.conf.d/kernel-2.6.32-504.23.4.el6.x86_64.conf:6: duplicate hwcap 1 nosegneg 

ldconfig: Path `/usr/local/lib' given more than once 

/usr/local/apache2/lib: 

    libexpat.so.0 -> libexpat.so.0.5.0 

    libaprutil-1.so.0 -> libaprutil-1.so.0.5.3 

    libapr-1.so.0 -> libapr-1.so.0.5.1 

[root@localhost ~]# ln -sv /usr/local/apache2/include /usr/include/apache2  #导出头文件 

`/usr/include/apache2' -> `/usr/local/apache2/include'

[root@localhost ~]# vim /etc/man.config    #导出帮助手册 

MANPATH /usr/local/apache2/man

[root@localhost ~]# apachectl start      #启动apache 

[root@localhost ~]# netstat -tnlp     #查看apache是否启动 

Active Internet connections (only servers) 

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name    

tcp        0      0 :::80                       :::*                        LISTEN      57852/httpd 


//测试成功 


至此apache服务器配置完成!!!