码迷,mamicode.com
首页 > 系统相关 > 详细

学习笔记之Linux程序包管理rpm、yum、编译

时间:2015-12-26 00:02:22      阅读:680      评论:0      收藏:0      [点我收藏+]

标签:软件程序   操作系统   软件包   linux   

无论是Windows系统还是Linux系统,我们用户想要在操作系统上获得更多的乐趣还是更多的功能的话,就需要在一个干净的系统上安装各式各样的软件程序,Linux上的是ELF格式的,目前比较常见的程序包管理器如:

Redhat软件包管理器---rpm

Debian软件包管理器---dpkg

 

一、1RPM

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

         -v: verbose,详细信息

         -vv: 更详细的输出

         -h: hashmarks输出进度条;每个#表示2%的进度;

技术分享

     

  注意:在使用rpm进行程序包安装时一定要指明包的绝对路径,如:rpm –ivh /mnt/cdrom/Packageszsh-5.0.2-7.el7.x86_64.rpm; 也可以先进入到程序包所在的路径下再执行安装,如上操作;


[install-options]

  --test:测试安装,但并不执行安装,只是帮助检测依赖关系及冲突;

技术分享


--nodeps: 忽略程序包的依赖关系,直接进行安装;

技术分享


--replacepkgs: 对程序包不卸载的情况下进行重新安装;

技术分享


在这里要说明一下,rpm在安装时可以自带脚本,分为安装前、安装后、卸载前、卸载后四个类别; preinstall: 安装过程开始之前运行的脚本,%pre,

不运行preinstall脚本:--nopre

postinstall: 安装过程完成之后运行的脚本,%post,

不运行postinstall脚本:--nopost

             preuninstall:卸载过程开始执行之前运行的脚本,%preun

不运行preuninstall脚本:--nopreun 

 postuninstall 卸载过程完成之后运行的脚本,%postun

不运行postuninstall脚本:--nopostun

 

注:如果都不安装脚本可使用参数:--noscripts

--nosignature:不检查包签名信息,不检查来源合法性;

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

 

  2、升级

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

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

         -U –upgrade: 表示有安装老版本程序时则升级,没有安装老版本程序时则进行安装;

         -F –freshen: 表示有安装老版本程序时刚升级,没有安装老版本程序时不执行安装;

注意:(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,直接安装新版本内核;

         (2) 如果某原程序包的配置文件安装后曾被修改过,升级后,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;

 

  3、卸载

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

   rpm –e zsh(注意卸载时不需要像安装时给出文件路径,卸载可以不用)

 

       --allmatches: 卸载所有匹配指定名称的程序包的各版本;

技术分享


 --nodeps: 忽略依赖关系;

技术分享

-test: 测试卸载;(同程序包安装)

 

4、查询

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

  [select-options]

   PACKAGE_NAME: 查询指定的程序包是否已经安装,及其版本;

技术分享

 -a,--all:查询所有已经安装过的包;

技术分享


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

技术分享

[query-options]

 --changelog: 查询rpm包的changelog;显示在什么时候做过更改;

技术分享

-l,--list: 程序包安装生成的所有文件列表;

技术分享

 -i,--info: 程序包相关的信息,版本号、大小、所属的包组,等;

技术分享

-c,--configfiles: 查询指定的程包提供的配置文件;

技术分享

 -d,--docfiles: 查询指定的程序包提供的文档;

技术分享

-p,--packagePACKAGE_FILE: 用于实现对未安装的程序包执行查询操作;技术分享

注意:由于程序未被安装,所以在查询时必须要指定全路径,否则会报错;我的是挂载在/mnt目录下,所以指定的为上面的路径;

-p选项还可以查询指定程序包的信息、版本、配置文件、安装文档具体实现方法同

上面类似,如:rpm –qpl /mnt/cdrom/Packages/zsh-5.0.2-7.el7.x86_64.rpm

              rpm –qpi /mnt/cdrom/Packages/zsh-5.0.2-7.el7.x86_64.rpm

                  rpm –qpf /mnt/cdrom/Packages/zsh-5.0.2-7.el7.x86_64.rpm

                  …

 

 5、校验

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

    

        -V: 如果程序包中的某个文件发生改变,该文件被改变的属性将被输出至屏幕;

技术分享

 S.5....T.:对应文件的属性值,共有9个字符串;

           S 文件大小是否改变

          M 文件权限是否改变

          5  md5码是否改变

          D  主次版本号是否不匹配

          L  readLink路径是否不匹配

         U 属主是否改变

         G 属组是否改变

           T 时间戳是否改变

               P 功能差异

6、包的验证

      每个程序包都是由某个机构或个人制作而出的,他们在程序包制作完成后都会在包的背后加盖上自己的印签,加盖的印签就叫做数字签名;数字签名是使用非对称加密方式实现的。在包制作完成后制作者会用自己的私钥对包进行加密,我们如果要验证包的合法性就要使用与制作者私钥相对应的公钥进行解密,如成功则包合法,不成功则包被修改过;

技术分享

如果带有私钥的包被作者以外的人修改,但没有拿包制作者的私钥重新加密的,使用者用公钥就不能把私钥解密;

如果是包制作者使用把包制作好后使用自己的私钥进行加密的,使用者就可以用公钥进行解密,从而可以放心使用;

 

获取并导入信任的包制作者的密钥:

 对于CentOS 7发行版来说: rpm--import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

 

验证:

 (1) 安装此组织签名的程序时,会自动执行验证;

   (2) 手动验证: rpm -K PACKAGE_FILE

技术分享

7、数据库重建

rpm {--initdb|--rebuilddb}

--initdb: 初始化数据库,当前无任何数据库可初始化创建一个新的;当前有时不执行任何操作;

  --rebuilddb: 重新构建,通过读取系统上所有已经安装过的程序包进行重新创建;

 

二、YUM命令

 yum是由yellow dog团队开发,它的全称为:YellowdogUpdate Modefieryumrpm包前端管理器,yum的架构基于C/S(C/S就是访问yum所依赖的文件服务器是C/S的,而yum本身不是),服务器端称为yum repository(简称 yum repo)而客户则是通过更改配置文件中的url来确定访问哪一台yum服务器的;yum repo存储了许多的rpm包,客户端安装包时会从yum repo里面下载并分析并解决依赖关系,方便程序包的安装;

要使用yum首先要做的就是对yum配置文件进行创建或修改成自己需要对应的仓库;yum配置文件有两个:/etc/yum.conf: 为所有仓库提供公共配置

                   /etc/yum.repos.d/*.repo: 为仓库的指向提供配置

仓库指向的定义:

   [repositoryID]

   name=Some name for this repository

   baseurl=url://path/to/repository/

   enabled={1|0}

   gpgcheck={1|0}

   gpgkey=URL(gpg的密钥文件)

   enablegroups={1|0}(是否允许组)

   failovermaethod={roundrobin|priority}(默认为:roundrobin,意为随机)

   cost(开销)=默认为1000

yum命令的使用方法

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

显示仓库列表:

  repolist [all|disabled|enabled]  

技术分享


 显示程序包List

  yumlist[all|glob_exp1] [glob_exp2]...

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

技术分享

安装程序包:

  install package1 [package2] [...]

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

技术分享

升级程序包:

   update[package1] [package2] [...]

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

例:yum update zsh

检查可用升级

  check-update

  例:yum check-update

卸载程序包:

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

  例:yum remove gcc

查看程序包information:

  info [...] 

  例:yum info gcc

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

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

  例:yum provides /bin/ls

清理本地缓存:

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

  例:yum clean all

构建缓存:

  Makecache

  例:yum makecache

搜索:模糊匹配

  search string1 [string2] [...]

  例:yum search bash

查看指定包所依赖的capabilities;

  deplist package1 [package2] [...]

  例:yum deplist gcc

查看yum事务历史:

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

  例:yum history summary    

yum history 

 yum history list

安装及升级本地程序包:(不是仓库中的包)

  * localinstall rpmfile1[rpmfile2] [...]

   (maintained for legacy reasonsonly - use install)

  * localupdate rpmfile1 [rpmfile2][...]

   (maintained for legacy reasons only - use update)

 

yum的命令行选项:

  --nogpgcheck: 禁止进行gpg check;

  例:yum --nogpgcheck installzsh

  -y: 自动回答为“yes

  -q, --quiet: 启用静默模式;

  例:yum –y -q install gcc

  --disablerepo=repoidglob: 临时禁用此处指定的repo

  --enablerepo=repoidglob: 临时启用此处指定的repo

  --noplugins: 禁用所有插件;

 

yumrepo配置文件中可用的变量;

  $releasever: 当前OS的发行版的主版本号;

  $arch: 平台;

      $basearch: 基础平台;

  $YUM0-$YUM9…

例:http://mirrors.magedu.com/centos/$releasever/$basearch/os

 

创建yum仓库;

  createrepo [options] <directory>

  例:yum install createrepo

      createrepo./



     有时候可能找不到合适的rpm包,或我们想需要更多的功能的时候就需要对程序包进行编译安装了。

     源码包里面有众多文件,在这些文件会存在依赖关系,我们不可能通过gcc的方式来手动进行编译,这时就需要用到makefile用于指导make命令调用相应处理器来处理这些事情,而make文件对用户而言并非是写死特定的,可以根据用户的需要自由生成,所以make文件并不是事先存在的,从头看一下,进入源码包后,在文件中有一个configure的文件,conofigure可以生成makefile.in模版,最后生成makefile文件;如图:

技术分享

编译安装主要分为三个步骤:

     第一步:

 ./configure

     选项:指定安装路径–prefix=/PATH/TO/SOMEWHERE

           配置文件路径–sysconfigdir=/PATH/TO/SOMEWHERE

           开启某些选项–enable-FEATURE

           关闭某些选项–disable-FEATURE

     第二步:make

     第三步:make install

   每三步过后,编译安装就结束了,剩下的就是去配置使用安装好的文件了!

学习笔记之Linux程序包管理rpm、yum、编译

标签:软件程序   操作系统   软件包   linux   

原文地址:http://519137.blog.51cto.com/509137/1728404

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!