码迷,mamicode.com
首页 > 系统相关 > 详细

Linux系统程序包管理

时间:2016-08-20 14:45:43      阅读:344      评论:0      收藏:0      [点我收藏+]

标签:linux   应用程序   软件包   仓库   运行环境   

概述:

     本章内容:软件的运行环境,软件包基础,rpm包管理,yum管理,定制yum仓库,编译安装


一、软件运行环境

     1.□API:Application Programming Interface (应用程序开发接口)

              POSIX:Portable OS(国际标准)

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

              静态编译:

              共享编译:.so

       ABI:Application Binary Interface(应用二进制程序接口)

           Windows与Linux不兼容

                linux:文件格式:ELF(Executable and Linkable Format)

                win:文件格式:exe,msl PE(Portable Executable)

        □库级别的虚拟化

              Linux: WINE(提供模拟windows的库,运行win环境)

              Windows: Cywin(提供linux的运行环境)

      2.开发语言

        □系统级开发

            C/C++(依赖于c库);

            httpd,nginx,vsftpd,go

           应用级开发

            java(依赖于jvm虚拟机)

            Python(openstack云站),php,perl(依赖于per解释器),ruby

      3.程序格式

       c/c++

          源代码:文本格式的程序代码;

          编译开发环境:编译器,头文件,开发库

          二进制格式:文本格式的程序代码-->编译器-->二进制格式(二进制程序、库文件、配置文件、帮助文件)

      java/Python

           源代码:编译能够在其虚拟机(jvm/pvm)运行的格式;

           开发环境:编译器、开发库

           二进制

      项目构建工具

             c/c++:make      jave:maven


二、包管理

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

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

    2.程序包管理

        源代码-->目标二进制格式(二进制程序、库文件、配置文件、帮助文件)-->组织成为一个或有限几个“包文件”(安装,升级,卸载,查询,校验)

       程序包管理器:

            deblan: dpt,dpkg  以".deb"后缀

            redhat: rpm (redhat package manager) 以 ".rpm"后缀 

            S.u.S.E:rpm, ".rpm"命令

      3.包命令格式

         □源代码

        name-VERSION.tar.gz|bz2|xz

             VERSION: major(主版本号).minor(次版本号).release(发行号)

         □rpm包命名格式

             name-VERSION-release.arch.rpm

             VERSION: major.minor.release(rpm包发行号)

             changelog文档(内容修复改进的相关文档)

技术分享

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

               release:release.OS

             常见的arch:

               x86: i386, i486, i586, i686

               x86_64: x64, x86_64, amd64powerpc: ppc

               跟平台无关:noarch (适用于所有平台)

     4.包:分类和拆包

             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包管理器前端管理工具

     5.库文件

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

             ldd /PATH/TO/BINARY_FILE

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

             ldconfig

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

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

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

     6.包管理器

      □程序包管理器

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

      程序包的组成清单(每个程序包单独实现)

             RPM包内的文件清单

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

             安装或卸载时运行的脚本

      数据库(公共)  路径:/var/lib/rpm 

             程序包名称及版本

             依赖关系

             功能说明

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

   7.程序包的来源

      □管理程序包的方式:

            使用包管理器: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) 自己制作

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


三、CentOS 系统上rpm命令管理程序包

  1.安装、升级、卸载、查询和校验、数据库维护(都是通过rpm命令来实现的)

      rpm命令rpm [OPTIONS] [PACKAGE_FILE]

            安装:-i,--install

            升级:-U,--update,-F,--freshen

            卸载:-e,--erase

            查询:-q,--query

            校验:-V,--verify

            数据库维护:--builddb,--initdb

     2.安装

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

              -v: verbose 显示详细信息

              -vv: 更详细的输出

         rpm -ivh PACKAGE_FILE(真正安装执行操作使用的命令)

技术分享

     □[install-options]

             -h: hash marks 输出进度条;每个#号表示2%的进度

             --test: 测试安装,检查并报告依赖关系及冲突关系,但不真正执行安装;称为dry run(干跑)模式

技术分享

             --nodeps:忽略依赖关系,不建议;

             --replacepkgs:替代原来的包,重新安装(先把由原来的包删除再重装)

             --nosignature: 不检查包签名信息,不检查来源合法性

             --nodigest:不检查包完整性

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

                 注意:rpm自带四类脚本

                     %pre:安装前脚本;   --nopre

                     %post:安装后脚本;  --nopost

                     %preun:卸载前脚本; --nopreun

                     %postun:卸载后脚本;--nopostun

    3.升级

      □rpm {-U|--upgrade} [install-options] PACKAGE_FILE...

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

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

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

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

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

      □升级命令:

         rpm -Uvh PACKAGE_FILE ...

      rpm -Fvh PACKAGE_FILE ...

              --oldpackage:降级(回滚操作)

              --force: 强行升级

      注意:

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

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


   4.卸载

       移除已安装的程序包

       rmp {-e|--erase}[--allmatches][--nodeps][--test] PACKAGE_NAME

      (注意:卸载和查询是包的名,因为包已经存在了;而安装和升级,包是不存在的,所以是包的文件路径)

       简单用法:rpm -e PACKAGE_NAME...

            --allmatches:卸载所有匹配名称的程序包各版本

            --nodeps:忽略依赖关系

            --test:测试卸载,dry run 模式


      5.查询

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

       □[select-options]

              -q PACKAGE_NAME :查询某包或某些包是否安装

              -qa: 查询已安装的所有包

技术分享

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

技术分享

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

              --whatprovides CAPABILITY(能力):查询指定的CAPABILITY由哪个包所提供

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


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

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


     □[query-options]查询选项

          --changelog:查询rpm包的changelog(变更记录)

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

技术分享

          -d: 查询程序包安装完成后所生成的帮助文档

技术分享

          -qi,-info:程序包相关的信息,版本号,大小,所属的包组等

技术分享

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

         --scripts:查看程序包自带的脚本片断

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

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

技术分享

    □用法:

          -qi PACKAGE; -qf FILE; -qc PACJAGE; -ql PACKAGE; -qd PACKAGE

          -qpi PACKAGE_FILE; -qpl PACKAGE_FILE; -qpc PACKAGE_FILE,.. 


    6.校验:     

     rpm {-V|--verify} [select-options] [verify-options]

      常见用法:rpm -V PACHAGE_NAME

       当没有输出结果时表示软件包完整ok,当有相应的结果输出表明对应的内容有修改,及具体如下:

          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:mTimediffers 文件的创建时间已被改变

          P:capabilities differ 

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

           完整性验正:SHA256

           来源合法性验正:RSA

      获取并导入信任的包制作者的秘钥

             对于CentOS发行版来说:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 

      验证:

           (1)安装此组织签名的程序时,会自动执行验证;

           (2)手动验证:rpm -K PACKAGE_FILE

技术分享

    公钥加密:

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

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

                public key: 公钥,公开所有人

                secret key: 私钥, 不能公开

     导入所需要公钥:

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

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

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

           rpm -qagpg-pubkey*


     7.数据库重建

      rpm数据库路经:/var/lib/rpm

            查询操作:通过此处得到数据库进行

        rpm {--initdb|--rebuilddb}

技术分享

        获取帮助:CentOS6 man rpm

                    CentOS7 man rpmdb 

        --initdb: 初始化数据库。当前无任何数据库,则新建之;当前有时不执行任何操作。

        --rebuilddb:重新构建。无论当前存在与否,都会直接重新创建数据库。






     

              





   


                

 




Linux系统程序包管理

标签:linux   应用程序   软件包   仓库   运行环境   

原文地址:http://1992tao.blog.51cto.com/11606804/1840542

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!