Linux程序包管理rpm与yum

 Linux程序包管理rpm与yum


Linux程序包管理

Linux中软件的安装主要有两种形式:一种是直接下载源代码包自行编译后安装,另一种直接获取rpm软件包进行安装。

程序的组成部分:

二进制程序:程序的主体文件,比如我们运行一个ls命令就是一个二进制程序。

库文件:程序的公用功能模块,比如A程序需要用一个打印机,B程序也需要一个打印机就可以公用这一个模块了。在window下库文件为.dll格式,linux下为/lib/*so格式的文件。

配置文件:通过设置配置文件来改变程序启动时的运行特征。

帮助手册:使用的帮助文档。

 
软件的默认安装路径:
除了自行下载源码编译安装的软件可以自定义安装路径之外,rpm包的安装都是按照自身预设的安装路径进行安装,主要有以下几类
1./:系统根目录,在此安装的文件通常是os在运行时需要调用到的程序
2./usr:此目录下一般情况下是提供基本服务的软件
3./usr/local:此目录下一般情况下是用户自行安装的第三方软件
1、系统相关:
配置文件路径:/etc
二进制文件路径:/bin 、/sbin
库文件路径:/lib
2、系统提供功能服务相关
配置文件路径:/etc
二进制文件路径:/usr/bin   /usr/sbin
库文件:/usr/lib
3、第三方软件:
配置文件路径/usr/local/etc
二进制文件路径:/usr/local/bin  /usr/local/sbin
库文件:/usr/local/lib
4、帮助手册
主要都存放在/usr/share/man和/usr/local/share/man
在生产环境下: usr可以单独分区或者放到另一块硬盘上,软件和相关文件放在usr下重做系统或者换到另一台主机时可以直接运行。
注意:有些特殊的应用程序放置于libexec目录下
有些第三方程序安装在/opt目录中。
 
 
程序包管理器的功能:
在linux系统下安装程序时,需要将程序的不同文件放置在以上路径里面,或者更改相关系统配置文件指定到程序的目录下,如果有很多程序,配置文件有很多就大大降低了系统效率。手动安装到系统指定的目录下,就会很麻烦。所以程序包管理器的功能就是 将编译好的程序打包成一个文件或有限的几个文件,可用于实现便捷地安装、卸载、升级、查询、校验等程序管理功能;
现在程序包管理器主要有2种: rpm和deb。
程序包管理器也必须有以下功能:
1、程序的组成清单(每个程序包独有):例如windows下很多软件管理器里面的程序列表。
文件清单:例如程序的安装有哪些文件。
安装卸载时运行的脚本:例如在windows下的软件卸载程序。
2、数据库(公共)
程序名及版本   
程序包之间依赖关系:程序间少了一个都运行不了。
功能说明:对应包基本功用是什么。例如windows下,QQ程序是聊天(功用)的,酷狗是听音乐的。
安装生产的各文件的文件路径及校验码信息:效验码信息是提示某某文件已经改变,防止文件给莫名篡改。
 
程序包命名:
        程序包的版本命名:
            testapp-VERSION
              程序包-版本号
               VERSION:major.minor. release
                    major:主版本号:( 有重大更新,比如win xp ,win 7,win 8等等)
                    minor:次版本号:(修复一些漏洞,功能等等)
                release:发行号,修订号  (修复小BUG,修订一些小小的东西)  
        rpm包的命名:name-Major.Minor.Release-release.arch.rpm
                例:bash-4.3.2-1.X86_64.rpm
                -Release:rpm包自己的发行号,与源代码的发行号无关;仅用于标识对rpm自身的修订,有时候,此release可能还会包含适用的OS,例如bash-4.3.2-1.centos6.X86_64.rpm
                arch:使用的硬件平台
                   x86:i386,i486,i586,i686等;
                   x86_64:amd64:X86_64
                   powerpc:ppc
                   noarch:跟硬件平台无关;
 
 
获取程序包的途径:
1、系统原发行光盘或者官方站点服务器;
镜像:http://mirrours.sohu.com
2、程序项目官方站点;
如redhat官方网站
3、知名的有信誉的第三方组织或者搜索引擎;
搜索引擎:http://rpmfind.net,http://rpm.pbone.net,http://pkgs.org  
4、自己制作;
 
建议:包安装之前要合法性验证
来源合法性
包的完整性
 
 
程序包管理器RPM和Yum的关系:
RPM(全称为 RedhatPackage Manager)是由redhat公司提供的软件包管理器 ,可以实现软件包的安装、查询、卸载、升级以及校验等但是rpm不能很好的解决软件之间的依赖关系
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
 
 
系统程序包管理rpm的应用:
安装:-ivh,--nodeps,--replacepkgs
卸载:-e,--nodeps
升级:-Uvh,-Fvh,--nodeps,--oldpackage
查询:-q,-qa,-ql,-qf,-qi,-qc,-qd,-q --changelogs,-q --provides,-q --requires
校验:-v 来源合法性、完整性:--import,-K,--nodigest,--nosignature
数据库重建:--initdb,--rebuilddb
 
安装: -ivh,--nodeps,--replacepkgs
  1. 1
    2
    3
    4
    5
    6
    rpm {-i|--install}[install-options] PACKAGE_FILE ...
    {-i|--install} # -i或者长选项--install 安装
    [install-options] # 安装选项,可省略的,需要用到就调用
    PACKAGE_FILE: # rpm包文件
    .... # 可以为多个
    [install-options]: --replacepkgs: # 重新安装 <br>    <br>--nodeps: # 忽略依赖关系 <br>--test: # 测试安装,而不执行真正的安装过程;dry run模式;
 
安装:-ivh,--nodeps,--replacepkgs
  1. 1
    2
    3
    4
    5
    -ivh # 以进度条显示详细的安装信息
    -v # 显示详细信息,可以用vv表示,多个v表示越多的详细信息
    -h # 以进度条显示安装过程。
    --nodeps # 忽略依赖关系。
    --replacepsgs # 重新安装软件
卸载: -e,--nodeps
  1. 1
    2
    3
    4
    5
    rpm {-e|--erase}[--nodeps][--test] PACKAGE_NAME ...
    rpm -e PACKAGE_NAME... # 直接卸载操作会卸载相应的依赖程序。
    --nodeps # 忽略依赖关系
    --test # 卸载测试可以先测试下会卸载哪些东西
    注意:如果包的配置文件安装后曾被改动过,卸载时,此文件将不会删除,而是被重命名(源文件加.rpmsave后缀)并保留;
升级:-Uvh,-Fvh,--nodeps,--oldpackage
  1. 1
    2
    3
    4
    5
    6
    7
    8
    rpm {-U|--upgrade}[install-options] PACKAGE_FILE ... # 直接升级安装,系统没有这软件也会安装
    rpm {-F|--freshen}[install-options] PACKAGE_FILE ... # 升级安装,如果系统没有这软件就不会安装,只升级时一般用这个命令
     
    [install-options]
    --oldpackage # 降级安装
    --force # 忽略冲突,强制执行过程;
    注意:不要对内核包执行升级操作,可能重启导致不兼容而挂掉;linux支持多版本内核并存,因此,建议对新版本内核可直接安装;有些程序在升级时会有冲突。
    注意:如果原程序包的配置文件安装后曾被改动,升级时,新版本的文件并不会直接覆盖老版本的文件,而是把新版本的文件重命(加后缀.rpmnew)名后保留;
查询:-q,-qa,-ql,-qf,-qi,-qc,-qd,-q --changelogs,-q --provides,-q --requires
  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    rpm {-q|--query}[ select -options][query-options]
    [ select -options]
    1、rpm -q PACKAGE_NAME # 查询某包(程序)是否安装:
    2、rpm -qa # 查询已安装的所有包
    3、rpm -qf /path/to/somefile # 查询某文件是由哪个包安装生成
    4、rmp -qpl PACKAGE_NAME # 查询尚未安装包的相关信息:
    rmp -qpi PACKAGE_NAME # 查询尚未安装包的相关信息:
    .....
    [query-options]
    1、rpm -qi PACKAGE_NAME # 查询某包的简要说明信息
    2、rpm -ql PACKAGE_NAME # 查询某包安装后生成的所有文件的列表
    3、rpm -qc PACKAGE_NAME # 查询某包安装后生成的所有配置文件的列表
    4、rpm -qd PACKAGE_NAME # 查询某包安装后生成的所有帮助文件的列表
    5、rpm -q --changelog PACKAGE_NAME # 查询某rpm包制作时随版本变化的changelog列表信息
    6、rpm -q --provides PACKAGE_NAME # 查询某包提供的capabilities
    7、rpm -q --requires PACKAGE_NAME # 查询某包所依赖的capabilities <br>8、rpm -q --scripts # 查询某包安装卸载时的脚本 <br>      安装卸载脚本有四种: <br>          preinstall: 安装前执行的脚本 <br>          postinstall: 安装后执行的脚本 <br>          preuninstall: 卸载前执行的脚本 <br>          postuninstall: 卸载后执行的脚本
校验:-v 来源合法性、完整性:--import,-K,--nodigest,--nosignature
  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    检查包安装之后生成的文件是否发生了改变
    rpm {-V|--verify}[ select -options][verify-options]
    常用用法:rpm -V PACKAGE_NAME
    显示信息:
    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 # caPabilities发生改变
    包来源合法性及完整性验证(安装或卸载时常用): <br>    rpm --import PUBKEY ... # 导入公钥文件,必须先导入公钥文件才能完成校验 <br>    rpm {-K|--checksig} [--nosignature] [--nodigest] PACKAGE_FILE ... <br>    --nosignature:不检查来源合法性 <br>    --nodigest:不检查完整性
数据库重建:--initdb,--rebuilddb
  1. 1
    2
    3
    rpm {--initdb|--rebuilddb}
    --initdb # 初始化:如果事先不存在数据,则会更新,否则,不执行任何操作
    --rebuilddb # 重建构建:无论当前是否已经存在的数据库,都会直接重建并覆盖现有数据库
 
 
系统程序包管理yum的应用:
yum是YellowdogUpdater Modified的缩写,它是一种基于自身软件库的安装,它可以通过查询软件库的连接ftp://   http://  
 file:///(本地,最后一斜线是本地根路径)在远程服务器或者指定的本地文件库中获取要安装的软件包,可见软件库的配置在yum的使用中是非常重要的一环。并且yum是基于rpm的一个管理工具,它能自动解决安装rpm包产生的依赖关系。
 
yum repository :yum仓库
       存储了众多rpm包,以及包的相关元数据的文件(放在repodata目录中)服务器
yum客户端:
       配置文件:指向仓库的位置以及各种配置信息,每个yum客户可以有多个可用的yum仓库:
       yum的公共配置文件 /etc/yum.conf 
       yum repository仓库的配置文件/etc/yum.repos.d/*.repo
 
  yum的公共配置文件 /etc/yum.conf 描述: 参考 http://www.cnblogs.com/mchina/archive/2013/01/04/2842275.html
  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    vim /etc/yum.conf
    [main]
    #[]表示对哪一段生效,main表示对所有的生效
    cachedir=/ var /cache/yum/$basearch/$releasever
    #cachedir:yum缓存的目录,yum在此存储下载的rpm包和数据库,一般是/var/cache/yum/$basearch/$releasever
    keepcache=0
    #保存缓存,为0不保存,为1就会保存
    debuglevel=2
    #debuglevel:除错级别,0──10,默认是2 貌似只记录安装和删除记录
    logfile=/ var /log/yum.log
    #日志文件
    exactarch=1
    #exactarch,有两个选项1和0,代表是否只升级和你安装软件包cpu体系一致的包,如果设为1,则如你安装了一个i386的rpm,则yum不会用1686的包来升级。 
    obsoletes=1
    #这是一个update 的参数,具体请参阅yum(8),简单的说就是相当于upgrade,允许更新陈旧的RPM包。
    gpgcheck=1
    #gpgchkeck= 有1和0两个选择,分别代表是否是否进行gpg校验,如果没有这一项,默认是检查的。
    plugins=1
    #是否启用插件,默认1为允许,0表示不允许。我们一般会用yum-fastestmirror这个插件。
    installonly_limit=5
    bugtracker_url=http: //bugs.centos.org/set_project.php?project_id=19&ref=http://bugs.centos.org/bug_report_page.php?category=yum
    distroverpkg=centos-release
    # PUT YOUR REPOS HERE OR IN separate files named file.repo
    #如果需要自定义仓库,可以添加在本配置文件中 <br># in /etc/yum.repos.d
    #或者放在/etc/yum.repos.d/目录下后缀名为.repo的文件  
yum repository仓库的配置文件/etc/yum.repos.d/*.repo描述:
  1. 1
    2
    3
    4
    5
    6
    [ base -debuginfo] # 仓库名
    name=CentOS-6-Debuginfo # 描述信息
    baseurl=http: //debuginfo.centos.org/6/$basearch/ # 访问路径,可以指向多个
    gpgcheck=1 # 检查此仓库文件完整性和来源合法性
    gpgkey=file: ///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Debug-6 # 指向密钥路径
    enabled=0 # 是否启用此仓库
yum仓库相关的命令:
仓库查看:repolist(所有仓库),list(程序包),grouplist(所有包组)        
  1. 1
    2
    3
    4
    5
    6
    7
    yum repolist # 列出所有可用仓库
    yum list {all|installed|available} # 列出所有程序包:可以使用通配符globbing
    yum grouplist # 列出所有包组
    缓存管理:
        缓存文件: var /cache/yum
            yum clean {all|packages}
            yum makecache 生成缓存

     

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
 
安装:install,reinstall
  1. 1
    2
    3
    yum install PACKAGE_NAME # 安装语法
    yum install PUBKEY_VERSION # 如果要安装指定版本的程序
    yum reinstall PACKAGE_NAME # 重装指定的程序包
 卸载:erase|remove(都可以使用)
  1. 1
    yum erase | remove PACKAGE_NAME #依赖于指定程序包的其他包,会被一并卸载; 
  升级:update,downgrade(卸载),check-update(可用升级)
  1. 1
    2
    3
    4
    yum update PACKAGE_NAME # 默认格式,直接升级
    yum update PUBKEY_VERSION # 如果有多个版本的升级包可用,可以升级到指定版本
    yum downgrade PACKAGE_NAME # 可以降级到指定版本
    yum check-update # 检查可用升级 
查询:list,info,search(模糊匹配),provides(指定路径)
  1. 1
    2
    3
    4
    yum list # yum仓库内所有可安装程序包,可以使用通配符globbing
    yum info PACKAGE_NAME # 显示指定程序包的摘要信息
    yum search KEYWORD # 根据关键字模糊查询报名或包的sumary信息包含此KEYWORD的相关列表
    yum provides|whatprovides /path/to/somefile # 查看文件是由哪个包生成的。
 包组:grouplist,groupinfo,groupinstall,remove,groupremove
  1. 1
    2
    3
    4
    5
    6
    7
    8
    yum grouplist # 显示所有的包组
    yum groupinfo  "GROUP_NAME" # 显示某包组的相关信息:
    安装包组:
        yum groupinstall  "GROUP_NAME"
        yum install @GROUP_NAME
    卸载包组:
        yum groupremove  "GROUP_NAME"
        yum remove @GROUP_NAME
 yum 命令安装本地rpm包文件,也可以自动解决包的依赖关系。
  1. 1
    2
    3
    4
    5
    6
    7
    8
    yum localinstall /path/to/rpm_package_file...
    yum install /path/to/rpm_package_file...
    选项:--enablerepo=,--disablerepo=,-y:自动回答为yes,--nogpgcheck
         --enablerepo=# 启用指定的yum仓库
         --disablerepo=# 禁用指定的yum仓库
    注意:优先级高于/etc/yum.repos.d/*.repo配置文件中定义的属性;
    -y # 自动回答为yes,
    --nogpgcheck # 不要检查包来源性和合法性
构建仓库:createrepo
  1. 1
    2
    3
    createrepo [options]<directory>
    -g:给创建的包分组
    createrepo <directory>可以直接安装
yum客户端配置的高级用法:
        1、在yum客户定义仓库时可使用cost定义仓库的使用开销,默认为1000;
        2、baseurl中指定路劲时可使用变量
            $releaserver:基于OS发行版的主版本号
            $arch:平台
            $basearch:基础平台,例如i686,i586,i486,i386i系列的基础平台都是i386:
            $YUM0-YUM9
            例如:http://mirrors.sohu.com/centos/$releaserver/os/$basearch
        3、可以使用mirrorlist指定替换baseurl;
            指向一个url,此url是一个文本文件,其中保存了大量镜像服务器列表;用户使用yum仓库时,会获取此列表文件,而后通过fastestmirror插件判断哪一个镜像为访问速度最快的服务器,并以之作为本次访问的baserul;
 
 
软件包安装之tar源码包编译安装
这里以C源程序为例:
编译安装源程序的前提:
                   提供开发环境:开发工具和开发库
                   包组:Development Tools、Server Platform Development、Desktop Platform Development、Debug Tools
  1. 1
    2
    3
    4
    5
    yum -y install @DevelopmentTools
    ...
    yum -y install @ServerPlatformDevelopment
    ...
    注:本人在centos6.6测试,如这命令不行可以使用yum groupinstall  "GROUP_NAME"
编译C源程序的步骤:
               1、./configure   检查编译环境,并根据指定的选项确定编译特性、安装路径等;
               2、make:调用所需要的编译器根据makefile配置文件定义执行编译过程。
               3、make install:安装程序
以编译安装httpd-2.2.25.tar.bz为例
首先解压缩
  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    [root@localhost ~]# tar -jxf httpd-2.2.25.tar.bz2 # 解压缩源码包文件到当前目录下
    [root@localhost ~]# cd httpd-2.2.25# 进入到该目录下
    [root@localhost httpd-2.2.25]# ll # 列出改文件目录
    total 1152
    -rw-r--r--150050014882Nov222004 ABOUT_APACHE
    -rw-r--r--150050018613Jul62012 acinclude.m4
    -rw-r--r--150050056952Oct62010Apache.dsw
    drwxr-xr-x 65005004096Jun292013 build
    -rw-r--r--15005002644Aug242007BuildAll.dsp
    -rw-r--r--15005002692Jul302009BuildBin.dsp
    -rwxr-xr-x 15005005786Sep192012 buildconf
    -rw-r--r--1500500130367Jun282013 CHANGES
    -rw-r--r--150050011701Feb282012 config.layout
    -rwxr-xr-x 1500500572978Jun292013 configure # 检查编译环境的文件
    -rw-r--r--150050024665Jun282013 configure. in
    drwxr-xr-x 95005004096Jun292013 docs
    -rw-r--r--1500500403Nov222004 emacs-style
    -rw-r--r--15005001248May72011 httpd.dep
    -rw-r--r--15005004124Jun122008 httpd.dsp
    -rw-r--r--15005008994May72011 httpd.mak
    -rw-r--r--150050012053Jun292013 httpd.spec
    drwxr-xr-x 25005004096Jun292013 include
    -rw-r--r--15005004372Jan182012 INSTALL
    -rw-r--r--15005002909Dec82006InstallBin.dsp
    -rw-r--r--15005005145Nov292005 LAYOUT
    -rw-r--r--150050030119May72011 libhttpd.dep
    -rw-r--r--150050017039Jan122007 libhttpd.dsp
    -rw-r--r--150050028503May72011 libhttpd.mak
    -rw-r--r--150050028690Jan192008 LICENSE
    -rw-r--r--15005008739Nov262008Makefile. in
    -rw-r--r--150050034725Oct62010Makefile.win
    drwxr-xr-x 205005004096Jun292013 modules
    -rw-r--r--1500500828Jan62013 NOTICE
    -rw-r--r--150050012894Mar162012NWGNUmakefile
    drwxr-xr-x 95005004096Jun292013 os
    -rw-r--r--15005005954Jan102007 README
    -rw-r--r--15005005332Oct142009 README.platforms
    -rw-r--r--15005002553Dec212010 README-win32.txt
    -rw-r--r--150050010183Mar142005 ROADMAP
    drwxr-xr-x 35005004096Jun292013 server
    drwxr-xr-x 55005004096Jun292013 srclib
    drwxr-xr-x 45005004096Jun292013 support
    drwxr-xr-x 25005004096Jun292013 test
    -rw-r--r--15005008183Oct182005 VERSIONING
    [root@localhost httpd-2.2.25]#./configure # 检查编译环境 
  1. 1
    2
    3
    4
    ./configure --help #脚本获取帮助
    常用的选项:
    --prefix=# 指定安装路径,多数程序都有默认安装路径;
    --sysconfdir=# 指定配置文件安装路径;
  1. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    [root@localhost httpd-2.2.25]#./configure --prefix=/opt/httpd --sysconfdir=/etc/httpd.conf
    # 指定安装路径为/opt/httpd 配置文件路径为/etc/httpd.conf
    checking  for  ANSI C header files... yes # 编译环境检测成功
    checking  for  sys/types.h... yes
    checking  for  sys/stat.h... yes
    checking  for  stdlib.h... yes
    checking  for  string .h... yes
    .....
    config.status: creating build/pkg/pkginfo
    config.status: creating build/config_vars.sh
    config.status: creating include/ap_config_auto.h
    config.status: executing  default  commands
    [root@localhost httpd-2.2.25]#make # 在当前目录开始编译
    .....
    [root@localhost httpd-2.2.25]#make install # 编译成功后开始安装
    .....
    [root@localhost httpd-2.2.25]# cd /opt/httpd/bin # 进入到安装好了的目录下
    [root@localhost ~]#./httpd # 运行该进程,因为没有将该路径导入到PATH环境中,所以是这样子运行。
Linux程序包管理rpm与yum_第1张图片
输入本地IP,已经安装好了。
 
如果源程序下不存在脚本文件可以参考下列方法
编译安装源程序方法:
      1、展开源代码,找INSTALL、README:不存在此类文件时,找项目官方文档;
      2、根据安全说明执行安装操作;
程序安装于专用目录时,安装后的配置:
               1、导出二进制程序所在路径至PATH环境中
                   export PATH=/usr/local/niginx/sbin:$PATH
                   实现永久有效的办法:
                    /etc/profile.d/*.sh

你可能感兴趣的:(Linux程序包管理rpm与yum)