Linux程序包管理

时间:2023-02-14 18:20:34

(一)概述

API:Application Program Interface

ABI:Application Binary Interface

  • unix-like:ELF
  • windows:exe,msi

库级别的虚拟化:

  • Linux:WinE
  • Windows:Cywin

系统级开发

  • C/C++:httpd,vsftpd,nginx
  • go

应用级开发

  • java/python/perl/ruby/php
    • java:hadoop,hbase,依赖于jvm
    • Python:openstack,依赖于pvm
    • perl:依赖于perl解释器
    • ruby:依赖于ruby解释器
    • php:依赖于php解释器

C/C++程序格式

  • 源代码:文本格式的程序代码
    • 编译开发环境:编译器,头文件,开发库
  • 二进制格式:文本格式的程序代码 -->编译器-->二进制格式(二进制程序,库文件,配置文件,帮助文件)

Java/Python程序格式

  • 源代码:编译成能够在其虚拟机(jvm/pvm)上运行的格式
    • 编译开发环境:编译器,开发库
  • 二进制格式

项目构建工具

  • C/C++:make
  • java:maven

(二)程序包管理器

源代码-->目标二进制格式-->组织成一个或有限几个“包”文件

安装,升级,卸载,查询,校验

程序包管理器:

  • debian:dpt, dpkg, ".deb"
  • redhat:rpm, ".rpm"; redhat package manager/rpm is package manager
  • S.u.S.E:rpm,".rpm"; 文件路径与组织格式与redhat的rpm不兼容
  • Gentoo:ports
  • ArchLinux:

源代码:name-Version.tar.gz

  • Version: major.minor.release

rpm包命名格式:name-Version-release.os.arch.rpm

  • Version:源代码版本
  • release:rpm包的发行号
  • os:操作系统,如centos7;不一定有,有时候省略
  • arch:架构,如:i386,x64(amd64),ppc,noarch

拆包:主包和支包(不是官方叫法,自己叫的)

  • 主包:name-Version-release.arch.rpm
  • 支包:name-function-Version-release.arch.rpm
    • function:devel,utils,libs...

 依赖关系:

  • 前端工具:自动解决依赖关系
    • yum:rhel系列系统上rpm包管理器的前端工具
    • apt-get(apt-cache):deb包管理器的前端工具
    • zypper:suse的rpm包管理器的前端工具
    • dnf:Fedora 22+系统上rpm包管理器的前端工具

程序包管理器

  • 功能:将编译好的应用程序的各个组成文件打包成一个或几个程序包文件,从而更方便的实现程序包的安装、升级、卸载和查询等管理操作
  • 程序包的组成清单(每个程序包都单独实现)
    • 文件清单
    • 安装或卸载时运行的脚本
  • 数据库(公共)
    • 程序包的名称和版本
    • 依赖关系
    • 功能说明
    • 安装生成的各文件的文件路径及校验码信息
    • 等等等

获取程序包的途径

  • 系统发行版的光盘或官方的文件服务器(或镜像站点)
    • http://mirrors.aliyun.com
    • http://mirrors.sohu.com
    • http://mirrors.163.com
  • 项目的官方站点
  • 第三方组织
    • EPEL
    • 搜索引擎
      • http://pkgs.org
      • http://rpmfind.net
      • http://rpm.pbone.net
    • 自己动手制作
    • 建议:检查合法性和完整性
      • 来源合法性
      • 程序包的完整性

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

  • 安装、升级、卸载、查询和校验、数据库维护
  • rpm [OPTIONS] [PACKAGE_FILE]
    • 安装:-i,--install
    • 升级:-U,--upgrade;-F,--freshen
    • 卸载:-e,--erase
    • 查询:-q,--query
    • 校验:-V,--verify
    • 数据库维护:--builddb,--initdb
  • 安装:rpm {-i | --install} [general-options] [install-options] PACKAGE_FILES...
    • 常用:rpm -ivh PACKAGE_FILE...
    • general-options:
      • -v:verbose,输出详细信息
      • -vv:更详细的输出
    • install-options:
      • -h:hash marks输出进度条;每个#表示2%的进度
      • --test:测试安装,检查并报告依赖关系及冲突消息等
      • --nodeps:忽略依赖关系,不建议
      • --replacepkgs:重新安装
      • 注意,rpm可以自带脚本;脚本分为四类:
        • preinstall:安装过程开始之前运行的脚本,%pre;--nopre
        • postinstall:安装过程完成之后运行的脚本,%post;--nopost
        • preuninstall:卸载过程真正开始执行之前运行的脚本,%preun;--nopreun
        • postuninstall:卸载过程完成之后运行的脚本,%postun;--nopostun
        • --noscript都不执行
      • --nosignature:不检查包签名信息,即不检查来源合法性
      • --nodigest:不检查包完整性信息,即不检查md5信息