Linux软件包管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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笔记 - 软件包管理

Linux笔记 - 软件包管理

linux 从入门到跑路 - rpm ,yum , dnf (软件包管理三兄弟)

golang包管理解决之道——go modules初探

Linux安装杀毒软件和防火墙

Linux 安装svn服务器