rpm和yum整理

rpm和yum整理

Linux程序包管理:
    API:Application programing Interface
程序编译需要通过以下的几个步骤:
程序源代码-->预处理-->编译-->目标代码-->汇编-->链接
编译有分成2种:
    静态编译:
    动态编译:.so

二进制应用程序的组成部分:
    二进制文件,库文件,配置文件,帮助文件:

程序包管理器:
    debian:deb,dpt
    redhat:rpm,rpm
    rpm:redhat package manager
    RPM is package manager

rpm的命名方式:
    name_VERSION_release.arch.rpm
VERSION: major.minor.release
    对应主版本号.次版本号.修订号
release.arch:
    release: 包的发行号和对应的操作系统
    arch表示适用的平台
    X86: i386 i486 i586 i686
    X86_64: x86 x86_64 amd64
    noarch:表示此包可以安装到所有的平台上

例如:zsh-5.0.2-7.el7.x86_64.rpm:
    zsh:软件名称
    5.0.2:软件版本
    7.el7:软件包发行商版本,7表示发行号,el7表示RHEL7
    x86_64:适用的平台

注意:软件包中包和包之间存在着依赖关系;

RPM中的管理工具:
    yum:rpm包管理器的前端工具;
    apt-get:deb包管理器前端工具;
    zypper: suse上的rpm前端管理工具;
    dnf: Fedora 22+ rpm包管理器前端管理工具;  

查看二进制程序所依赖的库文件:
    ldd /PATH/TO/BINARY_FILE

以及查看本机装载的库文件:
    ldconfig 
/sbin/ldconfig -p: 显示本机已经缓存的所以可用库文件名及文件路径映射关系;

配置文件为:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf

[root@localhost ~]# cat /etc/ld.so.conf.d/*.conf
# This directive teaches ldconfig to search in nosegneg subdirectories
# and cache the DSOs there with extra bit 1 set in their hwcap match
# fields.  In Xen guest kernels, the vDSO tells the dynamic linker to
# search in nosegneg subdirectories and to match this extra hwcap bit
# in the ld.so.cache file.
hwcap 1 nosegneg
/usr/lib64/mysql
/usr/lib64/qt-3.3/lib
/usr/lib64/xulrunner-2

缓存文件:/etc/ld.so.cache

程序包管理: 
    功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷的实现程序包的安装、卸载、查询、升级和校验等管理操作;

1,程序的组成组成清单(每个包独有)
    文件清单
    安装或卸载时运行的脚本

2,数据库(公共)
    程序包名称及版本
    依赖关系:
    功能说明:
    安装生成的各文件的文件路径及效验码信息:

管理程序包的方式:
    使用包管理器:rpm
    使用前端工具:yum,dnf

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

rpm命令的分解:
    安装:
        rpm {-i|--install} [install-options] PACKAGE_FILE ...
            -v:显示详细信息
            -vv:显示更多丑陋的调试信息
            -h:以#显示程序包管理执行进度,每个#表示2%的进度

        rpm -ivh packge——file。。。

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

    升级:
        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)后保留;


    查询:
        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;

        用法:
        -qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
        -qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ...
        -qa

    卸载:
        rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
         [--notriggers] [--test] PACKAGE_NAME ...

    校验:
        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

    包来源合法性验正及完整性验正:
        完整性验正:SHA256
        来源合法性验正:RSA

导入所需要公钥:
    rpm --import /PATH/FROM/GPG-PUBKEY-FILE

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

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

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

安装没依赖关系的软件包:
[root@localhost Packages]# pwd 
/media/cdrom/Packages
[root@localhost Packages]# rpm -ivh tree-1.5.3-2.el6.x86_64.rpm 
warning: tree-1.5.3-2.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]
package tree-1.5.3-2.el6.x86_64 is already installed

安装有依赖关系的软件包:
[root@localhost Packages]# rpm -ivh tomcat6-6.0.24-49.el6.noarch.rpm 
warning: tomcat6-6.0.24-49.el6.noarch.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
error: Failed dependencies:
jakarta-commons-collections is needed by tomcat6-0:6.0.24-49.el6.noarch
jakarta-commons-daemon is needed by tomcat6-0:6.0.24-49.el6.noarch
jakarta-commons-dbcp is needed by tomcat6-0:6.0.24-49.el6.noarch
jakarta-commons-logging is needed by tomcat6-0:6.0.24-49.el6.noarch
jakarta-commons-pool is needed by tomcat6-0:6.0.24-49.el6.noarch
log4j is needed by tomcat6-0:6.0.24-49.el6.noarch
mx4j is needed by tomcat6-0:6.0.24-49.el6.noarch
tomcat6-lib = 0:6.0.24-49.el6 is needed by tomcat6-0:6.0.24-49.el6.noarch

查询一个已安装的软件包:
    [root@localhost Packages]# rpm -qa | grep tree
    tree-1.5.3-2.el6.x86_64


Linux程序包管理:
    CentOS上用的rpm前置工具:yum与dnf
    yum repository: yum repo
    存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录下:repodata);

    在编写yum中需要指定文件服务器:
    我们常用的文件服务器有如下的几种方式可以进行下载:
        ftp://
        http://
        nfs://
        file:///

yum相当于一个众多的rpm包的一个仓库:
    配置文件放在如下几个位置:
        /etc/yum.conf:为所有仓库提供公共配置
        /etc/yum.repos.d/*.repo:为仓库的指向提供配置

设定yum的库的定义:
    [repositoryID]
    name=Some name for this repository
    baseurl=url://path/to/repository/
    enabled={1|0}
    gpgcheck={1|0}
    gpgkey=URL
    enablegroups={1|0}
    failovermethod={roundrobin|priority}
    默认为:roundrobin,意为随机挑选;
    cost=
    默认为1000


yum命令的用法:
    * install package1 [package2] [...]安装指定的包:
    * update [package1] [package2] [...]指定更新包:
    * update-to [package1] [package2] [...]更新指定包组到目标包
    * remove | erase package1 [package2] [...]对指定包重命名:
    * list [...]查看已安装的包:
    *  clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]清除指定的缓存:
    *  groupinstall group1 [group2] [...]安装指定的包组
    * groupupdate group1 [group2] [...]指定更新包组
    * grouplist [hidden] [groupwildcard] [...]查看已安装的包组
    * groupremove group1 [group2] [...]对指定包组重命名
    * 以及以下几个命令:
    * groupinfo group1 [...]
    * search string1 [string2] [...]
    * shell [filename]
    * resolvedep dep1 [dep2] [...]
    * localinstall rpmfile1 [rpmfile2] [...](maintained for legacy reasons only - use install)
    * localupdate rpmfile1 [rpmfile2] [...](maintained for legacy reasons only - use update)
    * reinstall package1 [package2] [...]
    * downgrade package1 [package2] [...]
    * deplist package1 [package2] [...]
    * repolist [all|enabled|disabled]
    * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
    * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
    * check
    * help [command]


显示仓库列表:
repolist [all|enabled|disabled]

显示仓库列表:
repolist [all|enabled|disabled]

显示程序包:
        list
            # yum list [all | glob_exp1] [glob_exp2] [...]
            # yum list {available|installed|updates} [glob_exp1] [...]

    安装程序包:
        install package1 [package2] [...]

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

    升级程序包:
        update [package1] [package2] [...]

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

    检查可用升级:
        check-update

    卸载程序包:
        remove | erase package1 [package2] [...]

    查看程序包information:
        info [...]

    查看指定的特性(可以是某文件)是由哪个程序包所提供:
        provides | whatprovides feature1 [feature2] [...]

    清理本地缓存:
        clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

    构建缓存:
        makecache

    搜索:
        search string1 [string2] [...]

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


查看指定包所依赖的capabilities:
    deplist package1 [package2] [...]



查看yum事务历史:
    history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

安装及升级本地程序包:
    * localinstall rpmfile1 [rpmfile2] [...]
           (maintained for legacy reasons only - use install)
    * localupdate rpmfile1 [rpmfile2] [...]
           (maintained for legacy reasons only - use update)


包组管理的相关命令:
    * groupinstall group1 [group2] [...]
    * groupupdate group1 [group2] [...]
    * grouplist [hidden] [groupwildcard] [...]
    * groupremove group1 [group2] [...]
    * groupinfo group1 [...]

如何使用光盘当作本地yum仓库:
(1) 挂载光盘至某目录,例如/media/cdrom
    # mount -r -t iso9660 /dev/cdrom /media/cdrom
(2) 创建配置文件
    [CentOS7]=定义ID
    name=对yum源起名:
    baseurl=定义yum源的地址可以使用网址,ftp,本地目录
    gpgcheck=
    enabled=

yum的命令行选项:
    --nogpgcheck:禁止进行gpg check;
    -y: 自动回答为“yes”;
    -q:静默模式;
    --disablerepo=repoidglob:临时禁用此处指定的repo;
    --enablerepo=repoidglob:临时启用此处指定的repo;
    --noplugins:禁用所有插件;

yum的repo配置文件中可用的变量:
    $releasever: 当前OS的发行版的主版本号;
    $arch: 平台;
    $basearch:基础平台;
    $YUM0-$YUM9

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

创建本地的yum源:
    必须要先安装createrepo
createrepo [options] <directory>

程序包的编译安装:

源代码 --> 预处理 --> 编译(gcc) --> 汇编 --> 链接 --> 执行

源代码组织格式:C或C++要使用到make
make(configure --> Makefile.in --> makefile)

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


开发工具:
    autoconf: 生成configure脚本
    automake:生成Makefile.in



编译C源代码:
    前提:提供开发工具及开发环境
    开发工具:make, gcc等
    开发环境:开发库,头文件
    glibc:标准库

使用yum grouplist查看已有的可以安装的包组:
[root@localhost ~]# yum grouplist
已加载插件:fastestmirror, langpacks
Repository base is listed more than once in the configuration
Loading mirror speeds from cached hostfile
* base: mirrors.163.com
* c7-media: 
* extras: centos.ustc.edu.cn
* updates: mirrors.163.com
可用的环境分组:
   最小安装
   基础设施服务器
   计算节点
   文件及打印服务器
   基本网页服务器
   虚拟化主机
   带 GUI 的服务器
   GNOME 桌面
   KDE Plasma Workspaces
   开发及生成工作站
已安装的组:
   CIFS 文件服务器
   MySQL 数据库客户端
   MySQL 数据库服务器
   基于网页的企业级管理
   开发工具
可用组:
   Eclipse
   FCoE 存储客户端
   NFS 文件服务器
   SNMP 支持
   TeX 支持
   TurboGear 应用程序框架
   iSCSI 存储客户端
   传统 UNIX 兼容性
   兼容性程序库
   可扩展文件系统
   图形管理工具
   存储可用性工具
   安全性工具
   客户端管理工具
   控制台互联网工具
   智能卡支持
   服务器平台
   服务器平台开发
   桌面
   桌面平台
   桌面平台开发
   短信客户端支持
   科学记数法支持
   系统管理
   系统管理工具
   系统管理消息服务器支持
   网络存储服务器
   虚拟化
   通用桌面
   高可用性管理

CentOS6上要安装:
    "Development Tools", 
    "Server Platform Development",


第一步: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
以上我就不一一演示了:在安装完成以后需要到特定的目录下使用bin/文件进行

由于本地的bin文件以及man文件都没有系统默认的需要加入到系统默认当中:

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

原创文章,作者:wostop,如若转载,请注明出处:http://www.178linux.com/25823

(0)
wostopwostop
上一篇 2016-07-26
下一篇 2016-07-26

相关推荐

  • 马哥教育网络班20期+第2周课程练习

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。   答:文件操作     ls 列出目录下的文件名      ls -l /     touch 文件不存在时生成该文件      touch a.txt   &…

    Linux干货 2016-06-23
  • keepalived实战之小试牛刀

    keepalived是什么 keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。 keepalived工作原理 keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。 虚拟路由冗余协议,可以认为是实现路…

    Linux干货 2017-06-24
  • 12.http学习与应用实现

    1、请描述一次完整的http请求处理过程; 1)建立或处理连接:客户端发送http请求报文,服务器端接收或拒绝请求; 2)接收请求:服务器端接收来自客户端对某些资源的请求; 3)处理请求:服务器端解析客户端请求报文,获取客户端请求的资源及请求方法等信息; 4)访问资源:服务器端获取客户端请求的资源; 5)构建响应报文; 6)发送响应报文; 7)日志记录; 2…

    2017-09-20
  • Nginx反向代理原理、压测及模块功能的实现

    基本架设 反向代理模块 缓存功能的实现 修改报文首部IP 向后端转发时是否让客户端知道 在http中定义缓存基本属性 定义当后端服务宕机时过期缓存生效条件 报文首部模块,自定义报文首部 负载均衡模块1 负载均衡模块2 负载均衡模块的常用调度方法1 负载均衡常用调度方法2 与http想等的动态负载均衡模块1 与http想等的动态负载均衡模块2 这里让我们对之前…

    2016-10-30
  • scp和rsync的使用

    通过一些简单需求了解scp和rsync的使用

    2017-09-18
  • 笔记二、如何在VMWare WorkStations安装CentOS6.8

    一、准备工作     1.安装VMWare WorkStatrion     2.准备好CentOS 6.8 镜像包     http://www.centoscn.com/CentosSoft/iso/    CenO…

    Linux干货 2017-02-14