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

Linux软件包管理

时间:2018-04-20 16:52:40      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:Linux软件包管理

  • 软件运行环境

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

               Windows与Linux不兼容

                       ELF

                       PE

         API:Application Progrmming Interface 应该程序编程接口

              POSIX

     C语言编程:程序源代码-->预处理-->编译-->汇编-->链接

            静态编译:.a

            动态编译:.so

    静态和动态链接

        链接主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接,各为静态链接和动态链接

      静态链接

        把程序对应的依赖库复制一份到包;libxxxx.a

        嵌入程序包;升级难,需要重新编译;占用较多空间,迁移容易

      动态链接

        只把依赖加做一个动态链接;libxxx.so

        指向一个库文件,临时调用运行;占用较少空间,升级方便

     库文件

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

                 ldd /PATH/TO/BINARY_FILE

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

               ldconfig  加载库文件

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

       配置文件:

              /etc/ld.so.conf

              /etc/ld.so.conf.d/*.conf

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

    Java程序:一次编译,到处运行。之所以有这样的特性是因为OS之上有JVM

    开发语言

        系统级开发:C,C++

        应用级开发:Java,delphi,Python,go,php,perl,ruby等

    • 软件包基础

    包管理器

        二进制应用程序组成部分:二进制文件,库文件,配置文件,帮助文件

        程序包管理器

              debian:deb文件,dpkg包管理器

              redhat:rpm文件,rpm包管理器

              RPM:Redhat Package Manager    早期:红帽包管理器

                         RPM Package Manager      RPM包管理器

        包命名 

           源代码: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

             19:打包次数

             el7:在rhel7上使用

             常见的arch:CPU架构

             x86: i386, i486, i586, i686

             x86_64: x64, x86_64, amd64

             跟平台无关:noarch

        分类和拆包:

           技术分享图片

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

      解决依赖包管理工具:

             yum:yum包管理器前端工具

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

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

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

       程序包管理器:

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

       包文件组成

           RPM包内的文件

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

           有的还带安装或卸载时运行的脚本

       数据库:/var/lib/rpm

           程序包名称及版本

           依赖关系

           功能说明

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

      管理程序包的方式:

            使用包管理器: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包管理

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

         安装        

             rpm {-i|--install} [install-options] PACKAGE_FILE ...

                           -i:安装

                          -v:显示详细信息

                          -h:以#为进度显示

                       --test:测试安装,不真正执行安装

                       --nodeps:忽略依赖性

                       --replacepkgs|replacefiles

                       --nodigest:不检查包完整性

                       --noscripts:不执行程序包脚本

             rpm -ivh Package_FILE

         升级        

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

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

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

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

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

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

                  rpm -Uvh Package_file

                  rpm -Fvh Package_file

                     --oldpackage:降级

                     --force:强制安装

       注意

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

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

         查询

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

                  -a:查询所有包

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

                  -i:详细信息information

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

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

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

                  -d:查询程序的文档

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

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

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

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

                  --changelog:查询rpm包的changelog

                  --scripts:查询程序包自带的脚本

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

           rpm2cpio 包文件 | cpio -idv ./somefile  释放包内文件              

         卸载         

             rpm {-e|--erase} [--allmatches] [--justdb] [--nodeps] [--noscripts]

               [--notriggers] [--test] PACKAGE_NAME ...

                       --allmatches:如果有多个版本全部删除

                       --nodeps:忽略依赖性

                       --noscripts:不卸载脚本

                       --test:卸载测试

         校验

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

                 S,M,5,D,L,U,G,T,P        

                -V:查询包里哪些文件的属性发生变化

            导入所需公钥:

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

               CentOS 发行版光盘提供:rpm --import RPM-GPG-KEY-CentOS-7|6

               rpm -K|checksig rpmfile 导入公钥后检查包的完整性和签名

             卸载公钥:

                  rpm -qa “gpg-pubkey*”

                  rpm -e gpg-pubkey*

         数据库维护               

             数据库重建:/var/lib/rpm

               rpm {--initdb|--rebuilddb}

                    initdb: 初始化      如果事先不存在数据库,则新建之;否则,不执行任何操作

                    rebuilddb:重建已安装的包头的数据库索引目录         

    • yum管理

          



    • 编译安装



    Linux软件包管理

    标签:Linux软件包管理

    原文地址:http://blog.51cto.com/10461810/2105808

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