软件包管理

一、软件运行环境

    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)
上一篇 2016-08-22 19:49
下一篇 2016-08-23 14:50

相关推荐

  • 常用大数据词汇中英文对照表

    A 聚合(Aggregation) – 搜索、合并、显示数据的过程 算法(Algorithms) – 可以完成某种数据分析的数学公式 分析法(Analytics) – 用于发现数据的内在涵义 异 常检测(Anomaly detection) – 在数据集中搜索与预期模式或行为不匹配的数据项。除了“Anomalies”,用来表示异常的词有以下几种:outlie…

    Linux干货 2015-03-10
  • fdisk命令

    fdisk命令用于观察硬盘实体使用情况,也可对硬盘分区。

    2017-12-05
  • Linux发展史

    1、Linux是什么     Linux 是一套 Unix-like 的作业系统,是 Unix 的一种,它控制整个系统基本服务的核心程式 (kernel) 是由 Linus 带头开发出来的,「Linux」这个名称便是以「Linus's Minix」来命名,Linus 选择用「大众公有版权」 (GPL)的方式来发行这份程…

    Linux干货 2016-10-19
  • N25-第五周博客作业

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; [root@localhost ~]# grep "^[[:space:]]\+" /boot/grub/grub.conf      root (hd0,0)…

    Linux干货 2017-01-06
  • Linux ssh安全远程登录

                   Linux ssh安全远程登录 本章内容:     构建SSH远程登录系统     SSH(secure shell)是标准的网络协议,主要用于实现字符界面的远程登录管理…

    Linux干货 2016-10-10
  • ansible学习笔记之2 ad-hoc篇

    ansible学习笔记之2 ad-hoc篇 ansible学习笔记之2 ad-hoc篇 ansible 学习笔记 ad-hoc ansible学习笔记之2 ad-hoc篇 使用ansible ad-hoc搭建lnmp/lamp 编辑host文件,通过秘钥认证ssh连接主机 前期环境准备 在lnmp上安装lnmp 其中 ad-hoc搭建mysql主从 配置文件…

    2016-11-21