软件包管理

一、软件运行环境

    API: Application Programming Interface

        POSIX: Portable OS

    程序源代码 –> 预处理 –> 编译 –> 汇编 –> 链接

        静态编译:.a

        共享编译:.so

    ABI: Application Binary Interface

        Windows与Linux不兼容

            ELF(Executable and Linkable Format)

            PE( Portable Executable)

        库级别的虚拟化:

            Linux: WINE

            Windows: Cywin

    开发语言

        系统级开发

            C

            C++

        应用级开发

            java

            delphi

            Python

            go

            php

            perl

            ruby

二、包管理器

    二进制应用程序的组成部分:

        二进制文件、库文件、配置文件、帮助文件

    程序包管理器:

        debian: deb文件, dpkg包管理器

        redhat: rpm文件, rpm包管理器

        rpm: Redhat Package Manager

            RPM Package Manager

    包命名

        源代码: name-VERSION.tar.gz|bz2|xz

            VERSION: major.minor.release

        rpm包命名方式:

            name-VERSION-release.arch.rpm

                例: bash-4.2.46-19.el7.x86_64.rpm

            VERSION: major.minor.release

            release: release.OS

            常见的arch:x86: i386, i486, i586, i686x86_64: x64, x86_64, amd64

            powerpc: ppc

            跟平台无关: noarch

    包命名和工具

        包:分类和拆包

            Application-VERSION-ARCH.rpm: 主包

            Application-devel-VERSION-ARCH.rpm 开发子包

            Application-utils-VERSION-ARHC.rpm 其它子包

            Application-libs-VERSION-ARHC.rpm 其它子包

        包之间:可能存在依赖关系,甚至循环依赖

            解决依赖包管理工具:

            yum: rpm包管理器的前端工具

            apt-get: deb包管理器前端工具

            zypper: suse上的rpm前端管理工具

            dnf: Fedora 18+ rpm包管理器前端管理工具

    库文件

        查看二进制程序所依赖的库文件:

            ldd /PATH/TO/BINARY_FILE

        管理及查看本机装载的库文件:

            ldconfig

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

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

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

    程序包管理器:

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

        包文件组成 (每个包独有)

            RPM包内的文件

            RPM的元数据,如名称,版本,依赖性,描述等

            安装或卸载时运行的脚本

        数据库(公共)

            程序包名称及版本

            依赖关系

            功能说明

            包安装后生成的各文件路径及校验码信息

    管理程序包的方式:

        使用包管理器: rpm

        使用前端工具: yum, dnf

    获取程序包的途径

        系统发版的光盘或官方的服务器;

            CentOS镜像:

            https://www.centos.org/download/

            http://mirrors.aliyun.com

            http://mirrors.sohu.com

            http://mirrors.163.com

        项目官方站点

        第三方组织:

            Fedora-EPEL:

                Extra Packages for Enterprise Linux

            Rpmforge:RHEL推荐,包很全

            搜索引擎:

                http://pkgs.org

                http://rpmfind.net

                http://rpm.pbone.net

                https://sourceforge.net/

        自己制作

            注意:检查其合法性: 来源合法性,程序包的完整性

三、rpm包管理

    CentOS系统上使用rpm命令管理程序包:

        安装、卸载、升级、查询、校验、数据库维护

        安装:

            rpm {-i|–install} [install-options] PACKAGE_FILE…

                -v: verbose安装过程

                -vv:

                -h: 以#显示程序包管理执行进度

            rpm -ivh PACKAGE_FILE …

        [install-options]

            –test: 测试安装,但不真正执行安装; dry run模式

            –nodeps:忽略依赖关系

            –replacepkgs 替换安装(当一个包丢失文件时使用,包名版本号一样)| replacefiles (包名版本号不一样,覆盖重复文件。)

            –nosignature: 不检查来源合法性

            –nodigest:不检查包完整性

            –noscipts:不执行程序包脚本片断

                %pre: 安装前脚本; –nopre

                %post: 安装后脚本; –nopost

                %preun: 卸载前脚本; –nopreun

                %postun: 卸载后脚本; –nopostun

    rpm包升级

        升级:

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

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

            upgrade:安装有旧版程序包,则“升级”

                如果不存在旧版程序包,则“安装”

            freshen:安装有旧版程序包,则“升级”

                如果不存在旧版程序包,则不执行升级操作

            rpm -Uvh PACKAGE_FILE …

            rpm -Fvh PACKAGE_FILE …

            –oldpackage:降级(配合-i选项)

            –force: 强行升级

    升级注意项:

        不要对内核做升级操作; Linux支持多内核版本并存,因此,对直接安装新版本内核。

        如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留

    包查询

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

        [select-options]

        -a: 所有包

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

        -p rpmfile:针对尚未安装的程序包文件做查询操作;

        –whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供

        –whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖

    rpm2cpio 包文件|cpio –itv 预览包内文件

    rpm2cpio 包文件|cpio –id “ *.conf” 释放包内文件

    [query-options]

        –changelog:查询rpm包的changelog

        -c: 查询程序的配置文件

        -d: 查询程序的文档

        -i: information

        -l: 查看指定的程序包安装后生成的所有文件;

        –scripts:程序包自带的脚本片断

        -R: 查询指定的程序包所依赖的CAPABILITY;

        –provides: 列出指定程序包所提供的CAPABILITY;

    查询用法:

        -qi PACKAGE, -qf FILE, -qc PACKAGE, -qlPACKAGE, -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

    公钥加密:

        对称加密:加密、解密使用同一密钥;

        非对称加密:密钥是成对儿的

            public key: 公钥,公开所有人

            secret key: 私钥, 不能公开

    导入所需要公钥:

        rpm -K|checksig rpmfile 检查包的完整性和签名

        rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

        CentOS 7发行版光盘提供: RPM-GPG-KEY-CentOS-7

        rpm -qa gpg-pubkey*

    rpm数据库

        数据库重建:

            /var/lib/rpm

        rpm {–initdb|–rebuilddb}

            initdb: 初始化

            如果事先不存在数据库,则新建之

            否则,不执行任何操作

            rebuilddb:重建

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

四、yum

    CentOS: yum, dnf

    YUM: Yellowdog Update Modifier, rpm的前端程序,用来解决软件包相关依赖性,可以在多个库之间定位软件包,up2date的替代工具

        yum repository: yum repo,存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下)

            文件服务器:

                ftp://

                http://

                file:///

    yum命令的用法:

        yum [options] [command] [package …]

    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

    enablegroups={1|0}

    failovermethod={roundrobin|priority}

        默认为: roundrobin,意为随机挑选;

        cost= 默认为1000

    yum-config-manager

        生成172.16.0.1_cobbler_ks_mirror_CentOS-Xx86_64_.repo

        yum-config-manager –add-repo=

        http://172.16.0.1/cobbler/ks_mirror/CentOS-Xx86_64/

        yum-config-manager –disable “仓库名" 禁用仓库

        yum-config-manager –enable “仓库名” 启用仓库

    显示仓库列表:

        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]

        yum history

        yum history info 6

        yum history undo 6

    日志 : /var/log/yum.log

    安装及升级本地程序包:

        * localinstall rpmfile1 [rpmfile2] […]

            (用install替代)

        * localupdate rpmfile1 [rpmfile2] […]

            (用update替代)

    包组管理的相关命令:

        groupinstall group1 [group2] […]

        groupupdate group1 [group2] […]

        grouplist [hidden] [groupwildcard] […]

        groupremove group1 [group2] […]

        groupinfo group1 […]

    如何使用光盘当作本地yum仓库:

        (1) 挂载光盘至某目录,例如/media/cdrom

            # mount /dev/cdrom /media/cdrom

        (2) 创建配置文件

            [CentOS7]

            name=名字

            baseurl=路径

            gpgcheck=检查

            enabled=\?

    yum的命令行选项:

        –nogpgcheck:禁止进行gpg check

        -y: 自动回答为“ yes”

        -q:静默模式

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

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

        –noplugins:禁用所有插件

    yum仓库

        yum的repo配置文件中可用的变量:

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

        $arch: 平台, i386,i486,i586,x86_64等

        $basearch:基础平台; i386

        $YUM0-$YUM9:自定义变量

    实例:

        http://server/centos/$releasever/$basearch/

        http://server/centos/7/x86_64

        http://server/centos/6/i384

    创建yum仓库:

        createrepo [options] <directory>

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

(0)
DYWDYW
上一篇 2016-08-22
下一篇 2016-08-23

相关推荐

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

    Linux上的文件管理类命令都有哪些?其常用的方法及其相关示例。     cp:将源文件或者目录复制到目标文件或者目录中。     mv:将文件或目录重新命名,或者将源文件从源目录移到目标目录中。     rm:删除指定的一个文件或者多个文件或者目录。       &n…

    Linux干货 2016-07-16
  • 重定向

    Linux下定义了三种I/O设备: 标准输入(STDIN):用0表示,默认的标准输入设备是键盘; 标准输出(STDOUT):用1表示,默认的标准输出设备是当前终端; 标准错误(STDERR):用2表示,默认的标准错误输出设备是当前终端; I/O重定向即改变默认的位置 1 标准输出重定向 (1)将标准输出重定向到其他终端 /dev/pts/1代表伪终端1,在伪…

    Linux干货 2017-07-31
  • Linux基础之shell脚本编程(三)

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现;   1 #!/bin/bash   2 #author:BaoZhang   3 #  …

    Linux干货 2016-11-20
  • 磁盘分区,文件系统的创建、修改和检测

        写博客,对我来说不仅是学习的过程,也是一个心理历练的过程,多说无益,开始吧!!!     博客是马哥视频里的博客作业:文件系统的创建、修改和检测。我就从磁盘管理开始把      环境:     创建的centos6.5虚拟机 &nb…

    Linux干货 2016-06-26
  • 关于shell脚本基础编程第四篇

                                    shell脚本基础编程第四篇本章主要内容:函数 函数 function:     &n…

    系统运维 2016-08-24
  • 第一周作业

    – 描述计算机的组成及其功能。 – 按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别。 – 描述Linux的哲学思想,并按照自己的理解对其进行解释性描述。 – 说明Linux系统上命令的使用格式;详细介绍ifconfig、echo、tty、startx、export、pwd、history、shu…

    Linux干货 2016-12-04