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

相关推荐

  • Nginx 负载均衡多个nmmp主机

    设计拓扑图 一、Memcache简介 cache(缓存系统) 高性能分布式缓存服务器,缓存所有的“可流式化”数据:livejournal旗下Danga Interacive公司 程序=指令+数据 指令:程序 数据:IO操作 文件系统: 特征:协议简单  基于libevent的事件处理  内置内存存储方式  memcached 不…

    2016-06-14
  • Python的安装

    安装Python 3还是2目前,Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的。由于3.x版越来越普及,3中的特性越来越要求企业用3来开发,所以更加推荐python3作为安装学习的版本。可以在哪些操作系统下安装python安装Python的平台因为Python是跨平台的,它可以运行在Windows、Mac和各种Linux/Uni…

    2017-09-18
  • 脚本练习

    注:以下脚本练习实验都是以root用户身份执行的,若普通用户运行需要另加相应的权限 1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小。 [root@fengl bin]# vim systeminfo.sh [roo…

    Linux干货 2016-08-15
  • n25 第三周作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。   2、取出最后登录到当前系统的用户的相关信息。   3、取出当前系统上被用户当作其默认shell的最多的那个shell。   4、将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxus…

    Linux干货 2016-12-20
  • LVM详情

    lvm 原理 用法

    Linux笔记 2018-03-29
  • DNS原理详解

    1、DNS概述   domain name service  区域名称服务或者domain named system 区域名称系统,是互联网最基础的服务,分为正向域名解析(将域名解析为IP地址)和反向域名解析(将IP地址解析为域名)两部分。 2、bind   bind(Berkeley Internet Name Domain)…

    Linux干货 2016-08-26