软件包管理

  软件运行环境 

     API:Application Programming Interface

        POSIX :Portable OS

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

     静态编译:

     共享编译:.so

     ABI:Application Binary Interface

        Windows与Linux 不兼容

           ELF(Executable and Linkable Format)

           PE(Portable Executable)

       库级别的虚拟化:

           Linux: WINE

           Windows: Cywin

C程序编译过程图

blob.png

   Java程序运行过程图

blob.png

blob.png

    开发语言 

系统级开发:C,C++

      应用级开发:jav,a,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, i686

            x86_64: x64, x86_64, amd64

            powerpc: ppc

       跟平台无关:noarch

库文件

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

               ldd /PATH/TO/BINARY_FILE

blob.png

bash所以来的库文件

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

        ldconfig

        /sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件

      名及文件路径映射关系:

        配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf,在/etc/ld.so.conf.d中创建.conf后缀的文件

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

blob.png

包管理器

    程序包管理器

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

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

          RPM包内的文件

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

          安装或卸载时运行的脚本

       2数据库(公共)

          程序包名称及版本

          依赖关系

          功能说明

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

程序包的来源

      管理程序包的方式

             使用包管理器:rpm

             使用前端工具:yum, dnf

        获取程序包的途径

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

               CentOS 镜像:

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

                   http://mirrors.aliyun.com

                   http://mirrors.sohu.com

                   http://mirrors.163.com

            (2)项目官方站点

            (3)第三方组织:

                Fedora-EPEL:

                    Extra Packages for Enterprise Linux

                Rpmforge:RHEL推荐,包很全

                搜索引擎:

                    http://pkgs.org

                    http://rpmfind.net

                    http://rpm.pbone.net

                    https://sourceforge.net/

             (4) 自己制作

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

rpm包管理

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

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

     安装:

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

            -v: verbose显示详细过程

            -vv:

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

            -q:查询安装包是否装上,后面加包名必须是正确的或已安装的

        rpm -ivh PACKAGE_FILE …  安装某包,显示详细过程,并且以#显示程序包管理执行进度 后面要跟路径

实验安装:ftp服务

blob.png

rpm包安装

    [install-options]   -i选项的配合选项

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

blob.png

当然,之前已经安装过此包,所以会提示已经安装

        –nodeps:忽略依赖关系

        –replacepkgs覆盖安装rpm包 | replacefiles如果两个安装包有相同的文件,安装时发生冲突,此命令可强行安装rpm包

blob.png

        –nosignature: 不检查来源合法性

        –nodigest:不检查包完整性

        –noscripts:不执行 程序包脚本

            %pre:安装前运行脚本; –nopre

            %post:安装后运行脚本; –nopost

            %preun:卸载前运行脚本; –nopreun

            %postun:卸载后运行脚本; –nopostun

rpm包升级

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

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

        -U -F选项会删除原程序

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

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

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

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

            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: 所有包,模糊搜索可配合其他命令查询

blob.png

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

blob.png

    -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: 查看指定的程序包安装后生成的所有文件;

blob.png

    –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

blob.png

blob.png

    包来源合法性验正及完整性验正

        完整性验正: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*

    数据库重建:

        /var/lib/rpm

blob.png

     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 客户端配置文件:

        /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源

    教室里的yum 源

        http://172.16.0.1/cobbler/ks_mirror/CentOS-X-x86_64/

    CentOS epel:

        http://172.16.0.1/fedora-epel/7/x86_64/

    yum命令的用法:

        yum [options] [command] [package …]

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

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

    显示仓库列表

        yum repolist [all|enabled|disabled]

    显示程序包

        yum list

        yum list [all | glob_exp1] [glob_exp2] […]

        yum list {available|installed|updates} [glob_exp1] […]

    安装程序包

        yum install package1 [package2] […]

        yum reinstall package1 [package2] […] (

    升级程序包

        yum update [package1] [package2] […]

        yum downgrade package1 [package2] […] ( 降级)

    检查可用升级

        yum check-update

    卸载程序包

        yum remove | erase package1 [package2] […]

    查看程序包information

        yum info […]

    查看指定的特性( 可以是某文件) 是由哪个程序包所提供

        yum provides | whatprovides feature1 [feature2] […]

    清理本地缓存

        yum clean [ packages | metadata | expire-cache |

        rpmdb | plugins | all ]

    构建缓存

        yum makecache

         搜索:yum search string1 [string2] […]

         以指定的关键字搜索程序包名及summary 信息

    查看指定包所依赖的capabilities: :

        yum deplist package1 [package2] […]

    查看yum 事务历史

        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

    安装及升级本地程序包

        yum localinstall rpmfile1 [rpmfile2] […]

            (用install 替代)

        yum localupdate rpmfile1 [rpmfile2] […]

            (用update 替代)

    包组管理的相关命令

        yum groupinstall group1 [group2] […]

        yum groupupdate group1 [group2] […]

        yum grouplist [hidden] [groupwildcard] […]

        yum groupremove group1 [group2] […]

        yum 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

   程序包编译

       程序包编译安装

        Application-VERSION-release.src.rpm –> 安装后,使用rpmbuild 命令制作成二进制格式的rpm包,而后再安装源代码–> 预处理–> 编译–> 汇编–> 链接–> 执行

       源代码组织格式

            多文件:文件中的代码之间,很可能存在跨文件依赖关系

            C 、C++ :make ( 项目管理器,configure –>Makefile.in –> makefile)

            java: maven

    C 代码编译安装三步骤

        1 、./configure: :

          (1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及makefile.in 文件生成makefile

          (2) 检查依赖到的 外部环境,如依赖的软件包

        2 、make :根据makefile 文件,构建应用程序

        3 、make install: 复制文件到相应路径

    开发工具

        autoconf: 生成configure 脚本

        automake:生成Makefile.in

注意:安装前查看INSTALL ,README

    开源程序源代码的获取:

        官方自建站点:

            apache.org (ASF :Apache Software Foundation)

            mariadb.org

            …

    代码托管:

        SourceForge.net

        Github.com

        code.google.com

        c/c++ 编译器: gcc (GNU C Complier)

编译安装

    编译C源代码

      准备:提供开发工具及开发环境

        开发工具:make, gcc等 等

        开发环境:开发库,头文件

        glibc :标准库

      实现:通过 “包组”提供开发组件

        CentOS 6:

          Development Tools

          Server Platform Development

        CentOS 7:

          Development Tools

          Development and Creative Workstation

    第一步:configure 脚本

         选项:指定安装位置、指定启用的特性

         –help: 获取其支持使用的选项

     选项分类:

        安装路径设定

        –prefix=/PATH: 指定默认安装位置, 默认为/usr/local/

        –sysconfdir=/PATH :配置文件安装位置

        System types: 支持交叉编译

      Optional Features: 可选特性

        –disable-FEATURE

        –enable-FEATURE[=ARG]

      Optional Packages: 可选包,

        –with-PACKAGE[=ARG], 依赖包

        –without-PACKAGE, 禁用依赖关系

     第二步:make

     第三步:make install

    安装后的配置

        (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|man_db.conf 文件

            添加一个MANPATH

原创文章,作者:旧城以西,如若转载,请注明出处:http://www.178linux.com/37725

(0)
旧城以西旧城以西
上一篇 2016-08-29
下一篇 2016-08-29

相关推荐

  • ps查看进程

    ps命令 ps [OPTION]支持三种选项UNIX选项 如-A -eBSD选项 如aGNU选项 如–help选项:默认显示当前终端中的进程a 选项包括所有终端中的进程x 选项包括不连接终端的进程u 选项显示进程所有者的信息f 选项显示进程树,相当于 –forestk|–sort 属性 对属性排序,属性前加- 表示倒序o …

    2017-12-19
  • Linux中一些常用的命令(一)

    ls命令 ls命令:用来列出当前目录的内容或指定目录,是使用频率较高的命令 -l:以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等 -a:列出所有隐藏文件和目录 -h:以人类可读的方式将文件或者目录大小显示出来 -R:把当前目录下的目录的所有内容列出来(递归) -d:显示…

    Linux干货 2017-03-30
  • 私人定制—linux系统

    自制Linux系统: 1、分区并创建文件系统 [root@localhost6 ~]# fdisk  /dev/sdb 分两个必要的分区 /dev/sdb1对应/boot /dev/sdb2对应根/ 创建文件系统: [root@localhost6 ~]# mkfs.ext4 /dev/s…

    Linux干货 2016-09-26
  • LVS

    一 LVS工作原理 1. lvs-nat模型 lvs-nat:多目标的DNAT, 通过将请求报文中的目标地址和目标端口修改为挑选出的某RS的RIP和PORT 实现转发。 (1) RIP和DIP必须在同一IP网络,且应该使用私有地址,RS的网络要指向DIP(保证响应报文必须由VS); (2) 请求报文和响应报文都经由Director转发,较…

    Linux干货 2016-12-06
  • 编程命名中的7+1个提示

    前几天Neo写过《编程中的命名设计那点事》,这里也有另外一篇和程序命名的文章,可以从另一个角度看看。 1.- 变量应该是尽可能的望文知意。千万不要使用教材中的命名方式。 好的变量: daysDateRange, flightNumber, carColor. 坏的变量: days, dRange, temp, data, aux… 在我们…

    Linux干货 2015-04-03
  • bash 循环语句for、while、until

    循环执行 循环执行     定义:将某段代码有次数或无次数循环执行多次。     构成要素:退出条件和进入条件     循环的三种语句:for、while、until for循环:      &nbs…

    Linux干货 2016-08-21