linux程序包管理:

        为了更好的实现程序的安装、升级、卸载、查询、校验以及数据库的维护,所以把将编译好的程序的各个组成文件打包成一个或者多个程序包文件。

       软件包的获取途径:

            1、到各个镜像网站获取:

                    比如:mirrors.aliyun.com   mirrors.163.com   mirrors.souhu.com

            2、到各个程序官网获取

                    比如:apache.org  nginx.org

            3、通过第三方组织

                    比如:epel、搜索引擎

  1、rpm包管理  :  不能处理依赖关系

        RPM 是以一种数据库记录的方式来将你所需要的套件安装到你的Linux 主机的一套管理程序,系统中存在着一个rpm数据库来记录包与包之间以及安装的包的依赖关系,安装快捷,缺点是得先解决包之间的依赖条件。

          rpm命令:

                         -i:安装

                        -U:升级     --oldpackage   降级

                        -e:卸载

                        -q:查询

                        -V:检验

                        --buliddb或者--initdb:数据库维护

                         -v:详细信息,可视化

                         -h:输出进度条

                        --nosignature:忽略包的签名的合法性

      每一个rpm包的名称都由”-“和”.”分成了若干部分,拿nginx-1.8.1-1.el7.ngx.x86_64.rpm这个包来解释一下,nginx 为包d的名称;1.8.1则为版本信息;1.el7.ngx为发布版本号;x86_64为运行平台。有的包后面写了个noarch,表示不限制平台。

      示例:  安装              

[root@magedu src]# rpm -ivh nginx-1.8.1-1.el7.ngx.x86_64.rpm warning: nginx-1.8.1-1.el7.ngx.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEYPreparing...                          ################################# [100%]Updating / installing...   1:nginx-1:1.8.1-1.el7.ngx          ################################# [100%]

         升级

[root@magedu src]# rpm -Uvh nginx-1.8.1-1.el7.ngx.x86_64.rpm warning: nginx-1.8.1-1.el7.ngx.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEYPreparing...                          ################################# [100%]	package nginx-1:1.8.1-1.el7.ngx.x86_64 is already installed

rpm包的查询命令:

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

           -q  查询指定的程序包是否安装,会显示详细信息

                     -a  查询所有已安装的包

                      -f file|/path/to/somefile  查询指定的文件由哪个程序包安装生成的

                      -p package  用于实现查询未安装的包 

                       -i  提供软件包的相关信息

                         --whatprovides  查询指定的capability由哪个程序包提供

                          --whatrequires  查询指定的capability被哪个包提供

                       -l 软件安装生成的所有文件列表

                       -c  配置文件

                       -d 提供的文档

                         --provides  列出指定的程序包提供所有的功能

                        -R --requires 查询指定软件包的依赖关系       

[root@magedu src]# rpm  -qa nginx   //查询程序是有那个包提供的nginx-1.8.1-1.el7.ngx.x86_64[root@magedu src]# rpm  -ql nginx   //查询包安装的文件列表/etc/logrotate.d/nginx/etc/nginx/etc/nginx/conf.d[root@magedu src]# rpm  -qf /etc/nginx  //根据路径来查找是哪个包提供的 nginx-1.8.1-1.el7.ngx.x86_64
[root@magedu src]# rpm  -qi nginx   //查询包信息Name        : nginxEpoch       : 1Version     : 1.8.1Release     : 1.el7.ngxArchitecture: x86_64Install Date: Sat 19 Mar 2016 02:56:36 AM CST

 rpm包的卸载:

          rpm -e               

        --allmatches   卸载匹配所有指定名称的软件包的所有版本  (不建议)

               --nodeps  忽略依赖关系

               --test   测试卸载

[root@magedu src]# rpm -evh nginxPreparing...                          ################################# [100%]Cleaning up / removing...   1:nginx-1:1.8.1-1.el7.ngx          ################################# [100%]

数据库重建: 在安装卸载或升级程序包时怎么都出错,切报错run recovery之类的,这时需要重建。

            rpm --initdb  --dbpath=/path/to/somefile

            rpm --rebuilddb --dbpath=/path/to/somefile         

[root@magedu src]# rpm --initdb --dbpath=/tmp/rpmwarning: Generating 12 missing index(es), please wait...

              注意:rpm的数据库存放在/var/lib/rpm

2、yum管理程序包   :   能自动处理依赖关系

        yum(全称为 Yellow dog Updater, Modified),yum最大的优势在于可以联网去下载所需要的rpm包,然后自动安装,在这个工程中如果要安装的rpm包有依赖关系,yum会帮你解决掉这些依赖关系依次安装所有rpm包,非常的方便。

   yum配置文件:

                     /etc/yum.conf:为所有仓库提供公共配置

                     /etc/yum.repos.d/*.repo:配置一个或多个仓库文件

      显示yum所安装的程序包:

                     yum list (all |glob-expr)   :支持通配符搜索

                     yum grouplist :显示包组

              

       安装程序包:

                    yum install :安装程序包      -y:表示自动回答为yes,直接安装

                    yum reintsall:                     

[root@magedu yum]# yum -y install vimLoaded plugins: fastestmirrorbase                                                                          | 3.6 kB  00:00:00     epel                                                                          | 4.3 kB  00:00:00     Loading mirror speeds from cached hostfilePackage 2:vim-enhanced-7.4.160-1.el7.x86_64 already installed and latest versionNothing to do

       检查可用升级:                    check-update

       卸载程序包   :                     remove       

[root@magedu yum]# yum remove httpdLoaded plugins: fastestmirrorNo Match for argument: httpdNo Packages marked for removal

   检查程序包的信息:                 info    

[root@magedu yum]# yum info nginxLoaded plugins: fastestmirrorLoading mirror speeds from cached hostfileAvailable PackagesName        : nginxArch        : x86_64Epoch       : 1Version     : 1.6.3

 查看指定的特性(可以是某文件)是由那个程序包提供的

             provides

      yum provides /bin/bash

[root@magedu yum]# yum provides ifconfigLoaded plugins: fastestmirrorLoading mirror speeds from cached hostfilenet-tools-2.0-0.17.20131004git.el7.x86_64 : Basic networking toolsRepo        : @baseMatched from:Filename    : /usr/sbin/ifconfig

       centos7上面ifconfig命令是需要安装的,这时可以用yum查看ifconfig是有哪个包提供的,由net-tools提供。

   清理本地缓存 :       clean all

   生成缓存       :       makecache 

             遇到yum安装程序包时,会报错error之类的,这时就可以yum clean all下,然后生成本地缓存makecache.

 搜索:模糊搜索  :          search string|路径   

[root@magedu yum]# yum search nginxLoaded plugins: fastestmirrorLoading mirror speeds from cached hostfile======================================== N/S matched: nginx =========================================collectd-nginx.x86_64 : Nginx plugin for collectdmunin-nginx.noarch : Network-wide graphing framework (cgi files for nginx)nginx-filesystem.noarch : The basic directory layout for the Nginx serverowncloud-nginx.noarch : Nginx integration for ownCloudpcp-pmda-nginx.x86_64 : Performance Co-Pilot (PCP) metrics for the Nginx Webservernginx.x86_64 : A high performance web server and reverse proxy server  Name and summary matches only, use "search all" for everything.

yum仓库配置文件是放在/etc/yum.repos.d/下以.repo结尾的文件 。

      仓库的配置文件定义:

                            [repositoryID]  

                            name=          //仓库的名称

                            baseurl=       //下载rpm包的路径

                            enabled={1|0}   //是否应用此仓库,默认为1启用

                            gpgcheck={1|0}  //检查包签名的合法性

                            gpgkey=URL    //检查密钥

                            enablegroups={1|0}                              

              failovermethod={roundrobin|priority}

                                                            轮询   | 优先级

[base]name=localbaseurl=  //ftp仓库         http://mirrors.163.com/centos/7/os/x86_64/                 //镜像仓库                                                     //本地光盘仓库 gpgcheck=0

配置完成后可以通过yum repolist查看yum配置的源  :

[root@magedu yum.repos.d]# yum repolistLoaded plugins: fastestmirrorLoading mirror speeds from cached hostfilerepo id                                      repo name                                         statusbase                                         local                                             9,007epel                                         Fedora epel                                       8,508repolist: 17,515

            

程序包编译安装:

       安装一个源码包,是需要我们自己把源代码编译成二进制的可执行文件使用源码包的好处除了可以自定义修改源代码外还可以定制相关的功能,因为源码包在编译的时候是可以附加额外的选项的,比如扩展模块等。

       安装过程:源代码 --> 预处理 --> 编译(gcc)-->链接 -->执行

     源码的安装需要用到编译器,而linux上C、C++语言的编译器就是gcc,通过gcc吧源码编译成可执行的二进制文件,如果系统没装的话可以yum -y install gcc.

        源码安装的三步骤:

               1、./configure                     

                             1、通过选项传递参数,指定启用特性、安装路径等

                                  执行时会参考用户的指定及makefile.in生成makefile

                             2、检查依赖到的外部环境; 

               2、make   

                            根据makefile文件来构建应用程序,gcc在工作。

               3、make install  

                             安装步骤,生成相关的软件存放目录和配置文件的过程。

  示例:已nginx-1.8.0.tar.gz为例安装nginx.           

[root@magedu src]# tar -xvf nginx-1.8.0.tar.gz ^C[root@magedu src]# lsnginx-1.8.0  nginx-1.8.0.tar.gz
[root@magedu nginx-1.8.0]# ./configgure --prefix=/usr/local/nginxchecking for OS + Linux 3.10.0-229.el7.x86_64 x86_64checking for C compiler ... found + using GNU C compiler + gcc version: 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC) checking for gcc -pipe switch ... foundchecking for gcc builtin atomic operations ... foundchecking for C99 variadic macros ... foundchecking for gcc variadic macros ... found

  --prefix表示指定nginx的安装路径,还有其他选择,比如--with、--with-module等。可以通过./configure --help查看。

     按回车执行check操作,检查完后生成Makefile文件。  

creating objs/Makefile[root@magedu nginx-1.8.0]# lsauto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  Makefile  man  objs  README  src

   看到这个就表示生成了Makefile,如果缺少其它库没安装的话就会报错,安装nginx时如果报错  ./configure: error: the HTTP rewrite module requires the PCRE library.可以下载一个pcre包然后编译安装下,如果还报错  ./configure: error: the HTTP gzip module requires the zlib library.则yum -y install zlib-devel.

  make完成后执行make install 

sed -e "s|%%PREFIX%%|/usr/local/nginx|" \	-e "s|%%PID_PATH%%|/usr/local/nginx/logs/nginx.pid|" \	-e "s|%%CONF_PATH%%|/usr/local/nginx/conf/nginx.conf|" \	-e "s|%%ERROR_LOG_PATH%%|/usr/local/nginx/logs/error.log|" \	< man/nginx.8 > objs/nginx.8make[1]: Leaving directory `/usr/local/src/nginx-1.8.0'[root@magedu nginx-1.8.0]# make install

 至此nginx源码安装完成,测试nginx是否安装成功

[root@magedu sbin]# /usr/local/nginx/sbin/nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@magedu sbin]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf[root@magedu sbin]# ps -ef |grep nginxroot     44644     1  0 05:18 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.confnobody   44645 44644  0 05:18 ?        00:00:00 nginx: worker processroot     44647 21932  0 05:19 pts/1    00:00:00 grep --color=auto nginx

   启动nginx并查看nginx进程。

   安装后的配置:

                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