首页 > 其他 > 详细

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

时间:2015-09-01 00:03:03      阅读:404      评论:0      收藏:0      [点我收藏+]

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显示下仓库列表         
           



本文出自 “fante” 博客,请务必保留此出处http://8755097.blog.51cto.com/8745097/1690280

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

原文:http://8755097.blog.51cto.com/8745097/1690280

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!