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)
上一篇 2016-07-26 01:22
下一篇 2016-07-26 10:00

相关推荐

  • 磁盘管理,软raid,脚本基础

    1、创建一个10G分区,并格式为ext4文件系统; (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; mke2fs -t ext4 -L MYDATA -m 2 /dev/sdb tune2fs -o acl /dev/sdb (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行…

    Linux干货 2017-10-25
  • 推荐-DNS BIND初探

    DNS BIND DNS BIND 正向解析 反向解析 从服务器 子域授权 转发 view DNS 什么是DNS? DNS是domain name system,域名系统的简写,负责实现域名与IP的转换。 DNS的功能是什么? DNS能够将IP地址与域名相互双向转换,能够实现域名访问。 DNS的历史:  1. 初期网络…

    2016-04-19
  • 实战演练su命令与sudo服务

    su和su- 切换方式 实例: sudo 提权 sudo的特色功能 sudo命令的常用参数 注意 案例1——允许zhanghe用户执行所有命令: 案例2——仅允许linuxprobe用户以root用户身份执行cat命令。 案例3——允许linuxprobe用户以任意身份执行命令,且每次都不需要密码验证。 su命令与sudo服务 在工作生产环境中不要去使用ro…

    Linux干货 2016-09-05
  • shell简单脚本

    Shell小脚本     一.       一. 简介 从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。在Linux GUI日益完善的今天,在系…

    Linux干货 2017-08-06
  • shell脚本——条件性执行操作符

    linux的shell脚本中条件性操作符包括:“&&“” ,“||”  两种。 1.&& 代表条件性的AND THEN。(短路与) 2.|| 代表条件性的OR ELSE。(短路或) 释例1:短路与(&&) (1)            cmd1 && cmd2 假设1:cmd1为true(1),…

    2018-08-05
  • N26-第八周

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。     网桥(birdge):工作于OSI模型中的数据链路层,是连接两个局域网的一种存储/转发设备,能将一个大的LAN分割为多个网段,或将两个以上的LAN互联为一个逻辑LAN,使LAN上的所有用户都可访问服务器,可以分割冲突域。   &nb…

    2017-03-08