Linux程序包管理

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

API:Application Programming Interface
    POSIX:Portable OS


程序源代码-->预处理--> 编译-->汇编-->链接
  静态编译:
  共享编译:.so
ABI:Application Binary Interface
  Windows与Linux不兼容
  库级别的虚拟化:
    Linux:WiNE
    Windows:Cywin
系统级开发
  C++
应用级开发
  java
  Python
  php

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

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

 

程序包管理器

  debian:deb, dpt

  redhat:rpm, rpm
    rpm:Redhat Package Manager
      RPM is Package Manager
Gentoo
Archlinux
I
源代码:name-VERSION. tar. gz
  VERSION:major minor. release
rpm包命名方式:
  name -VERSION-ARCH.rpm

  VERSION:major,minor.release

  ARCH:release.os.arch

testapp:拆包

  testapp-VERSION-ARCH.RPM主包

  testapp-devel-VERSION-ARCH.RPM支包

  testapp-testing-VERSION-ARCH.RPM

包之间存在依赖关系

 

 

查看二进制程序所依赖的库文件:
  ldd /PATH/T0/BINARY FILE
管理及查看本机装载的库文件:
  ldconfig
    /sbin/ldconfig -p:显示本机已经缓存的所有可用库文件名及文件路径映射关系:

  配置文件为:/etc/1d.so. conf, /etc/ld. so. conf .d/* . conf
  缓存文件:/etc/ld. so. cache
程序包管理:
  功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作:

1、程序的组成组成清单(每个包独有)
  文件清单
  安装或卸载时运行的脚本
2、数据库(公共)
  程序包名称及版本
  依赖关系:
  功能说明:
  安装生成的各文件的文件路径及校验码信息:

管理程序包的方式:
  使用包管理器:rpm
  使用前端工具:yum, dnf
获取程序包的途径:
  (1)系统发版的光盘或官方的服务器:
    CentOS镜像:
    http://mirrors . aliyun. com
    http://mirrors . sohu. com
    http://mirrors .163. com
  (2)项目官方站点
  (3)第三方组织:
    Fedora-EPEL I
    搜素引擎:
    http://pkgs .org
    http://rpmf ind . net
    http://rpm. pbone . net

  (4)自己制作

 

Cent0S系统上rpm命令管理程序包:
  安装、卸载、升级、查询、校验、数据库维护
安装:
  rpm {-1|--instal1} 【install-options】 PACKAGE FILE
    -V:verbose
    -VV :
    -h:以#显示程序包管理执行进度:每个#表示2%的进度
    rpm -ivh PACKAGE FILE
      【install-opt ions 】
      --test:测试安装,但不真正执行安装过程:dry run模式:
      --nodeps:忽略依赖关系:

      --replacepkgs:重新安装:
      --nosignature:不检查来源合法性:
      --nodigest:不检查包完整性:
      --noscipts:不执行程序包脚本片断:
        %pre:安装前脚本:-- nopre
        %post:安装后脚本:-- nopost
        %preun:卸载前脚本:--nopreun
        %postun:卸载后脚本:.--nopostun

 

升级:
  rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
  rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
    upgrage:安装有旧版程序包,则“升级”:如果不存在旧版程序包,则“安装”;
    freeshen:安装有旧版程序包,则“升级”:如果不存在旧版程序包,则不执行升级操作:

    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所有包
      -f:查看指定的文件由哪个程字包安装生成
      -p package_filename:针对尚未安装的程序包做查询操作
      --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供:
      --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖:

    [query-options]
      --changelog 查询rpm包的changlog
      -c:查询程序的配置文件
      -d:查询程序的文档
      -i:information
      -1:查看指定的程序包安装后生成的所有文件:
      --scripts:程序包自带的脚本片断
      -R:查询指定的程序包所依赖的CAPABILITM
      --provides;列出指定程序包所提供的CAPABILITM

卸载
  rpm {-e|--erase} [--allmatches] [--justdb] [--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

 

导入所需要公钥:
   rpm -- import /PATH/FROM/GPG PUBKEY-FILE
    CentOS 7发行版光盘提供的密钥文件:RPM-GPG-KEY-Cent0S-7
数据库重建:
  rpm {--initdb| -- rebui lddb}
    initdb:初始化
      如果事先不存在数据库,则新建之:香则,不执行任何操作:
    rebuilddb:重建
      无论当前存在与否,直接重新创建数据库:

 

linux 程序包管理(2)

linux 程序包管理(2)
yum repository:yum repo
存储了众多rpm包,以及包的相关元数据文件(放置于特定目录下:repodata);
文件服务器:
ftp://
http://
nfs://
file://
yum客户端:
配置文件:
/etc/yum.conf:为所有仓库提供公共配置
/etc/yum.repos.d/*.repo:为仓库的指向提供配置信息
仓库的定义
[repository] OPTIONS
[repositoryid]
name=Some name for this repository
baseurl=url://server1/path/to/repository/
enbled=(1|0):启用或不启用此仓库
gpgcheck:检验包的完整性