博客9:程序包的管理,以及软件的安装和管理

1.对于二进制应用程序的认识
  (1)组成部分:
       二进制文件,库文件,配置文件,帮助文件(前两项是由源代码组成的)
  (2)程序包管理器:
       debian:deb,dpt
       redhat:rpm,rpm
  (3)源代码的命名方式
       name-VERSION.tar.gz
       其中VERSION:major.minor.release

2.查看二进制程序所依赖的库文件
  

 # ldd /PATH/TO/BINARY_FILE

  管理以及查看本机装载的库文件

   # ldconfig -p:显示本机已经缓存的所有可用库文件名及文件路径映射关系
  配置文件为:/etc/ld.so.conf,  /etc/ld.so.conf.d/*.conf
  缓存文件为:/etc/ls.so.cache


3.程序包管理
  功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷的实现程序包的安装,卸载,查询,升级和校验等功能
  (1)程序的组成清单(每个包独有)
       文件清单
       安装或卸载时运行的脚本
  (2)数据库(公共)
       程序包名称及版本
       依赖关系
       功能说明
       安装生成的各文件的文件路径及校验码信息


4.CentOS系统上rpm命令管理程序包
   功能:安装,卸载,升级,查询,校验,数据库维护
  (1)安装

       rpm {-i|--install} [install-option] PACKAGE_FILE
             -v:verbose
             -vv
             -h:以#显示程序包管理执行进度,每个#表示2%的进度

            例:rpm -ivh PACKAGE_FILE

         [install-options]
            --test:测试安装,但不真正执行安装过程,又称dry run模式
            --nodeps:忽略依赖关系
            --replacepkgs:重新安装
            --nosignature:不检查来源合法性
            --nodigest:不检查包的完整性
            --noscripts:不执行程序包脚本片段
                     %pre:安装前脚本,--nopre
                     %post:安装后脚本,--nopost
                     %preun:卸载前脚本,--nopreun
                     %postun:卸载后脚本,--nopostun

   (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: 强行升级;

    注意:(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,对直接安装新版本内核;
            (2) 如果原程序包的配置文件安装后曾被修改,长级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留;
   
   (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;

 
  

   (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:


  (6)数据库重建
       

 rpm {--initdb|--rebuilddb}

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

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


  (7)导入所需要的公钥
 

 rpm --import /PATH/FROM/GPG-PUBKEY-FILE

       CentOS7发行版光盘提供的密钥文件,RPM-GPG-KEY-CentOS-7    
         

5.yum管理命令(yum是rpm的前端管理工具)
  (1)一个yum仓库的组成部分
       1)仓库的描述文件
          文件包括元数据信息,即相关的描述性信息,包括名字,版本,包与包的依赖关系等
       2)校验码文件
          记录了每一个仓库文件的校验码,目的是节约带宽
       3)rpm包
  (2)yum repository:yum repo,yun仓库
         存储了众多的rpm包,以及包相关的元数据文件(放置于特定的目录下:repodata)
         这个yum仓库是一个文件服务器
  (3)createrepo命令(用于在有众多rpm包的目录下进行整理):
          createrepo [OPTION] <directory>
        此命令用于分析一个指定路径下有哪些rpm包的,以及包与包之间的依赖关系,并抽取形成文件,且制作出其中的特征码文件


6.yum的客户端
  (1)配置文件

       /etc/yum.conf:提供指向众多仓库的公共选项,为所有仓库提供公共配置
       /etc/yum.repo.d/*.repo:为仓库的指向提供配置信息

  (2)仓库的定义(可通过man yum.conf查询帮助)

       [repository ID]
       name=Some name for this repository
       baseurl=url://PATH/TO/REPOSITORY/(要求此目录下有repodata这个目录,也就是                                          yum源应该指向这个路径)
       enabled={1|0}
       gpgcheck={1|0}
       gpgkey=URL
       enablegroups={1|0}
       failovermethod={roundrobin|priority} 
            默认为:roundrobin,意为随机挑选;
       cost=
            默认为1000

                   

7.yum命令的用法

     yum [options] [command] [package ...]


      (1)显示仓库列表:

        repolist [all|enabled|disabled]

      (2)显示程序包:

        list
        # yum list [all | glob_exp1] [glob_exp2] [...]
        # yum list {available|installed|updates} [glob_exp1] [...]

      (3)安装程序包:
 

       install package1 [package2] [...]
       reinstall package1 [package2] [...]  (重新安装)

      (4)升级程序包:

        update [package1] [package2] [...]
        downgrade package1 [package2] [...] (降级)

      (5)检查可用升级:

        check-update

      (6)卸载程序包:

        remove | erase package1 [package2] [...]

      (7)查看程序包information:

        info [...]

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

        provides | whatprovides feature1 [feature2] [...]

      (9)清理本地缓存:

       clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

      (10)构建缓存:

        makecache

      (11)搜索:

        search string1 [string2] [...]


           以指定的关键字搜索程序包名及summary信息;

      (12)查看指定包所依赖的capabilities:

        deplist package1 [package2] [...]

      (13)查看yum事务历史:

        history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

      (14)安装及升级本地程序包:

     * localinstall rpmfile1 [rpmfile2] [...]
             (maintained for legacy reasons only - use install)
     * localupdate rpmfile1 [rpmfile2] [...]
             (maintained for legacy reasons only - use update)

      (15)包组管理的相关命令:

           * groupinstall group1 [group2] [...]           
           * groupupdate group1 [group2] [...]          
           * grouplist [hidden] [groupwildcard] [...]          
           * groupremove group1 [group2] [...]           
           * groupinfo group1 [...]

8.yum的repo配置文件中可用的变量

      $releasever:当前OS的发行版的主版本号
      $arch:平台类型
      $basearch:基础平台
      $YUM0-YUM9:

    例:http://mirrors.mageedu.com/centod/$releaserver/$basearch/os


9.程序包的编译安装
  (1)源代码组织格式
         多文件:文件中的代码之间,很可能存在跨文件依赖关系;
       
       

  C、C++: make (configure --> Makefile.in --> makefile

         C代码编译安装三步骤:
       ./configure:
        (1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile;
        (2) 检查依赖到的外部环境;
       make:
        根据makefile文件,构建应用程序;
       make install

      开发工具:
       autoconf: 生成configure脚本
       automake:生成Makefile.in模板
      建议:安装前查看INSTALL,README文件
 
  (2)前提:提供开发工具及开发环境
       开发工具:make, gcc等
       开发环境:开发库,头文件
        glibc:标准库
            通过“包组”的方式提供开发组件
                在CentOS6上用到的开发组件有:Development Tools,  Server Platform Development   

  (3)源码编译的三个步骤
         第一步:configure脚本
       选项:指定安装位置、指定启用的特性
                --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

         第三步:make install


10.安装后的配置
     (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


11.下面我们实战演示如何在CentOS6上编译安装apache
    (1)首先我们先将yum源指向本教室的服务器

           [root@localhost /]# cd /etc/yum.repos.d/


        下一步将原来的yum源设定为失效,改了名字就好了

    [root@localhost yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.sak


         接着我们创建自己的yum仓库文件

     [root@localhost yum.repos.d]# vim centos-local.repo  
         [base]
         name=Base Repo On 172.16.0.1
         baseurl=http://172.16.0.1/cobbler/ks_mirror/CentOS-6.6-x86_64/
         gpgcheck=0
          
         [epel]   
         name=Fedora EPEL for EL6 x86_64
         baseurl=http://172.16.0.1/fedora-epel/6/x86_64
         gpgcheck=0

         查看查找到的yum仓库
     

       [root@localhost yum.repos.d]# yum repolist

         当出现了我们设定的yumID时,我们的操作就成功了
     (2)这时我们应该安装自己的开发环境,也就是开发包组

       [root@localhost yum.repos.d]# yum repolist


          在这个列表中找到两个开发包组,安装上就可以了

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

     (3)接着我们就可以从服务器上下载http的压缩包,然后本地解包,解压缩,编译安装就完成了    

     [root@localhost ~]# lftp 172.16.0.1
     lftp 172.16.0.1:~> mget httpd.2.2.29.tar.gz

          本地解压缩
           

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

          查看http的configure脚本有多少选项可以用
           

 [root@localhost httpd-2.2.29]# ./configure --help

          指定安装位置
          

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

      
          接着就是安装了

  [root@localhost httpd-2.2.29]# make;make install

          这时可以查看一下安装的结果:
           

[root@localhost httpd-2.2.29]# cd /usr/local/apache2/

 
         给其启动控制脚本传递一个命令,apache就能起动了
           

 [root@localhost bin]# apachectl start

 
         这时可以通过查看端口的开启状态证实其确实已经启动
           

[root@localhost bin]# netstat -tan


12.将光盘作为yum源
     (1)首先将光驱与vaware连接
          然后创建挂载目录
           

[root@localhost ~]# mkdir /media/cdrom

     (2)将光盘镜像挂载到指定目录上
           

[root@localhost ~]# mount -r /dev/cdrom /media/cdrom

     (3)接着创建一个yum源,指向本地镜像
           

[root@localhost yum.repos.d]# vim local.repo 
                    [base]
                    name=CentOS7 Rebase 7.1.150
                    baseurl=file:///media/cdrom
                    enable=1
                    gpgcheck=0

     (4)查看yum仓库是否被识别
           

[root@localhost yum.repos.d]# yum repolist

     (5)查看包组信息,安装好开发环境
           

 [root@localhost yum.repos.d]# yum grouplist  
 [root@localhost yum.repos.d]# yum groupinstall "开发工具"

13.创建本地yum仓库
     (1)如果在本目录下有众多的rpm文件,那么可以用命令createrepo创建yum仓库
            

[root@localhost ~]# createrepo ./

          创建完成后有repodata目录
     (2)切换到repodata目录中后会有几个以UUID开头的文件,即元数据文件。此目录下
          还有以.xml格式的存储校验码信息的文件,专门用于检验是否有更新。若要远程访问
          可将此目录作为url的访问路径
     (3)此时可在/etc/yum.repo.d/*.repo文件中添加本地路径即可
           

 [Xen4centos]
         name=
         baseurl=file:///yum/repo/
         gpgcheck=0

     (4)显示仓库列表
           

[root@localhost yum.repos.d]# yum repolist

           
 注意:如果你修改了yum仓库,那么首先要清理一下缓存的内容,然后再用yum repolist显示下仓库列表         
           



你可能感兴趣的:(数据库,源代码,配置文件,应用程序,命名方式)