软件包管理

一、软件运行环境

    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

相关推荐

  • Linux文件压缩、解压、归档总结

    一、简介   压缩对我们来说通常意味着减小文件体积,节省硬盘空间。在Windows平台上处理大文件或目录中的文件很多时我们都需要对这些文件进行压缩处理,压缩格式多种多样,如:zip、rar、7z等格式,压缩方式也比较多样话,支持按最大压缩比例或者最快时间进行压缩等多种方式,而生成的压缩包就可以让我们更方便的进行拷贝及归档整理。解压缩顾名思义就是回归…

    Linux干货 2015-09-26
  • bash特性及bash脚本编程初步

    终端,附着在终端的接口程序: GUI:KDE, GNome, Xfce CLI:/etc/shells bash zsh fish   bash的特性: 命令行展开:~, {} 命令别名:alias, unalias 命令历史:history 文件名通配:glob 快捷键:Ctrl+a, e, u, k, l 命令补全:$PATH 路径补全: &n…

    Linux干货 2016-11-21
  • N25-第一周 总结

    一、描述计算机的组成及其功能     CPU:包括运算器、控制器、寄存器、缓存,计算枢纽,网络的包处理、磁盘读写、数学计算等。     内存:加载数据,提高计算速度,程序被加载到内存成为进程运行。     输入:键盘、鼠标     输出:打印机、显示器 二、按系列罗列linux的…

    Linux干货 2016-12-05
  • N25期–第十七周作业

    1、  结合图形描述LVS的工作原理; 针对高可伸缩、高可用网络服务的需求,给出了基于IP层和基于内容请求分发的负载平衡调度解决方法,并在Linux内核中实现了这些方法,将一组服务器构成一个实现可伸缩的、高可用网络服务的虚拟服务器。 虚拟服务器的体系结构如图所示,一组服务器通过高速的局域网或者地理分布的广域网相互连接,在它们的前端有一个负载调度器(…

    2017-05-08
  • PHP运行模式

    PHP运行模式有4钟: 1)cgi 通用网关接口(Common Gateway Interface))2) fast-cgi 常驻 (long-live) 型的 CGI3) cli  命令行运行   (Command Line Interface)4)web模块模式 (apache等web服务器运行的模块模式) 1.  CGI(…

    Linux干货 2015-04-10
  • 堡垒机-麒麟开源堡垒机内置SSL VPN使用指南

      一、安装 (一)确定服务器的操作系统位数 Windws xp、2000、2003系统,在我的电脑属性里,可以很明显地看到标识。如果没有注明是64位的,那么默认就是32位的 Windows 7 系统在控制面板,点击系统,在系统类型里,标注有操作系统位数 (二)安装VPN客户端 VPN客户端分为32位系统和64位系统二…

    Linux干货 2016-05-29