美文网首页
linux程序包管理

linux程序包管理

作者: 麟之趾a | 来源:发表于2020-05-21 11:42 被阅读0次

程序包管理

API: 应用程序接口
ABI:应用二进制接口

unix-like: ELF 的形式
windows:exe,msi形式

库级别虚拟化

使用windows可以有linux的库,或linux可以有windows的库
linux: wine
windows: cywin

开发语言

系统级开发: C/C++,go
应用级开发: java/python/perl/ruby/php

程序格式

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

java/python 程序格式

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

项目构建工具

C/C++:make
java:maven

程序包管理器

源代码--->目标二进制格式--->组织成为一个或有限几个'包'文件
程序包管理器
debian: dpt ,dpkg ".deb"
redhat: rpm,".rpm"
S.u.S.E: rpm,".rpm" 格式与redhat一样,但其内部组织格式已经改变。两个系统的rpm包不能通用

源代码名字

name-VERSION.tar.gz
VERSION:marjor.minjor.release 主版本号.次版本号.版本

rpm命名格式

name-VERSION-release.arch.rpm
VERSION: major.minjor.release
release.arch:rpm包的发行号
arch: 为架构 i386,x64(amd64)
release.os
rpm包分为主包和支包
主包: name-VERSION-release.arch.rpm
支包: name-function-VERSION-release.arch.rpm
function:devel,utils,lib

rpm包存在的依赖关系

前端工具: 自动解决依赖关系
yum: rhel 系列rpm管理工具
agt-get(agt-cahce): dep 包管理工具,agt-cache查询功能
zypper: SUSE的rpm管理器的前端工具
dnf: fedora 22+ 系统上的rpm包管理工具

程序包管理器

功能: 将编译好的应用程序各组件打包成一个或几个程序包文件,从而更方便实现程序包的安装,升级,卸载,和查询等功能

1 .程序包的组成清单(每个程序包都要单独实现)
文件清单
安装或卸载运行的脚本

  1. 数据库(公共)
    程序包的名称和版本
    依赖关系
    功能说明
    安装生成的各文件的文件路径,及校验码信息
    /var/lib/rpm rpm包的数据路径

获取程序包方式

1)系统发行版的光盘或官方的文件服务器(或镜像站点)
2) 项目的官方站点
3) 第三方组织 epel
4) 搜索引擎 https://pkgs.org/ http://rpmfind.net/
5)自制rpm包
建议:
检查其合法性
来源合法性
程序包的完整性

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

安装,升级,卸载,查询,和效验,数据库维护

rpm 命令:rpm [options] [package_file]
安装:-i,--install
升级:-U,--update  -F,--freshen
卸载: -e,--erase
查询:-q,--query
效验:-V,--verify
数据库维护:--buiddb ,--initdb

安装

 rpm [--install] [installoptions] [package_file]+
-v 
-vvv
installoptions:
  -h: 以hash标记输出进度条
--test: 测试安装
--nodeps:忽略依赖关系
--replacepkgs: 重新安装
--noscripts: 不执行安装脚本
注:rpm可以自带脚本
四类:
preinstall:安装过程开始之前运行的脚本%pre,--nopre
postinstall:安装过程完成之后运行的脚本%post,--nopost
preuninstall:卸载过程中,真正开始之前运行的脚本,%preun,--nopreun
postuninstall:卸载过程完成之后,运行的脚本%postun,--nopostun
--nosignature: 不检查签名信息,不检查来源的合法性
--nodigest: 不检查包完整性,md5信息

升级

rpm -U [install-options] <package_file>+
rpm [-F|--freshen] [install-options] <package_file>+
-U: 升级或安装(没有旧的包,会把新的安装上去)
-F:升级 (无包时不安装)
rpm -Uvh
rpm -Fvh
install-options:与上述安装的时参数一样
注意:
1) 不要对内核做升级操作,linux支持多内核版本共存,因此直接安装新版本内核
2)如果某原程序包,的配置文件安装后曾经修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后保留

卸载

   rpm [--uninstall|-e] [uninstalloptions] [package]+
uninstalloptions:
--allmatches:卸载所有匹配的指定名称的程序包的各版本
--nodeps: 忽略依赖关系
--test: 测试卸载,dry run 模式

查询

 rpm -q [query-options]
query-options
-a,--all,查询所有已安装包
rpm -qa |grep '^z'   查询所有已z开头的程序包
-f,--file:  查询指定文件有哪个程序包提供
rpm -qf 文件名
-g,--group  查询指定包组中包含了哪些包
-p,--package PACKAGE_FILE:对未安装的程序包执行查询操作
--whatprovides <capability> 查询所有需要<capability>才能提供适当功能的包.
--whatprovides <virtual> 查询所有提供<virtual>功能的包
--changelog 查询rpm包的changelog
rpm -q --changelog bash
-l,--list。列出一个程序包生成的文件列表
rpm -ql bash
-i,--info:查询程序包相关的信息,版本号,大小,所属的包组等
rpm -qi bash
-c,--configfiles  查询指定包的配置文件
-d,--docfiles:查询指定程序包所提供的文档
--provides:列出指定程序性包所提供的capability
rpm -q --provides bash
-R,--reuese,查询指定程序包依赖的capability
--scripts:查询程序包自带的脚本
用法
rpm -qpi  包的完整名字     查询未安装程序包的信息

效验

rpm -V|-y|--verify [verify-options]
包来源合法性和完整性验证
来源合法性:数字签名
完整性验证:rpm --import 公钥文件
rpm -k 包名   是手动认证、获取并导入信任的包
centos7
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
验证:
1)安装此组织签名的程序时,会自动执行验证
2)手动验证:rpm -k 包名

数据库重建

/var/lib/rpm rpm管理数据库的路径

[root@db02 ~]# ls /var/lib/rpm
Basenames     __db.001  __db.003  Group       Name          Packages     Requirename  Sigmd5
Conflictname  __db.002  Dirnames  Installtid  Obsoletename  Providename  Sha1header   Triggername

cenots7: man rpmdb
centos6: man  rpm
 rpm {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY] [--root DIRECTORY]
--initdb: 初始化数据库,当前无任何数据时,可初始化成一个新的,当前不执行任何操作
--rebuiddb:重新构建,通过读取当前系统上已经安装的程序包进行重新构建
[root@db02 ~]# rpm --initdb --dbpath /tmp/rpm
[root@db02 ~]# ls /tmp/rpm/
Basenames     __db.001  __db.003  Group       Name          Packages     Requirename  Sigmd5
Conflictname  __db.002  Dirnames  Installtid  Obsoletename  Providename  Sha1header   Triggername

[root@db02 ~]# rpm --rebuilddb --dbpath /tmp/rpm
[root@db02 ~]# ls /tmp/rpm/
Basenames     Dirnames  Installtid  Obsoletename  Providename  Sha1header  Triggername
Conflictname  Group     Name        Packages      Requirename  Sigmd5

yum

image.png
  1. client 将yum server URL指向本地
    2 .clinet 请求URL,得到yum 文件(包含yum仓库所有包的元数据,和包的依赖关系)
    3 .并将其文件缓存到本地
    4 . 当需要安装包时,yum 会根据自己当地缓存的文件,查找所需要的包及其依赖关系下载下来
    当server 端yum仓库里面发生改变时,client已经把文件yum 元数据缓存到本地了,如何知道server端的数据已经改变了。 yum 元数据文件里有效验码,每次yum请求安装包时,都会对比本地缓存的元数据效验码和服务器的是否一致,如果不一致则更新本地缓存文件。但安装后会被删除
    createrepo 创建元数据文件

yum repository

存储了众多rpm包,及包相关的元数据文件(放置于特定目录底下 repodata),因此yum 配置文件的URL所指向的路径,及repodata所在的路径
yum 仓库首先是个文件服务器
file:/// 本地磁盘 最后一个/代表根路径
http://
nfs://

仓库配置文件

[repositorID]
name=
baseurl=URL 仓库的访问路径及repodata所在的路径 可以指明多个
enabled={1|0}
gpgcheck={1|0}
gpgkey={URL}  gpg的秘钥文件
enablegroups={roundrobin|priority} 如果定义了多个baseurl,roundrobin 是轮询,从多个baseurl中任选一个,priority 优先级,从第一个开始,随后第二个... 默认: roundrobin
cost=  开销数字,默认1000

$releaserver: 当前OS发行的主版本号
$arch: 平台
$basearch: 基础平台(当前有i386,586,786) 通通理解为i386
$yum0-$yum9 自定义yum变量,创建yum仓库

createrepo

createrepo  [options]  <directory>
--basedir  指定repodata的路径

yum 客户端

配置文件
/etc/yum.conf:只提供yum指向的公共配置
/etc/yum.repos.d/*.repo 提供一个或多个仓库指向

yum命令用法

yum [options]  [command]  [package]
help: 查看帮助
repolist: [all|enabled| disabled] 显示仓库列表
yum repolist all
yum repolist disabled
list:  显示程序包
yum list  [all|glob_exp1 glob_exp2....]
yum list php* 先php格式的包
yum list [available|installed|updates]  [glob_exp1]
available: 所有可用的
installed: 所有安装的
updates: 所有可升级的

安装程序包: 
install package1
install package-版本号  指定安装程序包的版本号,yum默认安装的是仓库中的最新版本

升级程序包
update  [package1] [package2]

检查可用升级
check-update

卸载程序包
remove|erase  package1  其他依赖包也会被卸载

查看程序包 information
yum info gcc

查看指定的特性(可以是某文件)由哪个程序包提供
yum provides /bin/ls

清理本地缓存
clean [packages|metadata|expire-cache|rpmdb|plugins|all]
clean packages 清理程序包
all   代表清理全部

构建缓存
makecache

搜索
search  string  已关键字搜索程序包以及summary信息
yum search bash   搜索bash关键字的包

重新安装
reinstall packages

降级
downgrade  packages 

查询包的依赖关系的capabilities
deplist packages

查看历史事务
yum history
每次yum安装和卸载都称为一次事务
yum history  [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|status]
yum history list(默认)
yum history status(查看统计信息)

安装升级本地程序包
localinstall  rpmfile
localupdate rpmfile1
可用install 替代

包组相关的命令
yum  groupinstall   "组名"
     groupunpdate  "组名"
      grouplist  "组名"
    groupinfo  "组名"

--nogpgcheck: 禁止gpgcheck
 -y:自动回答为yes
-q:启用静默模式
--disablerepo=  临时禁用此处指定的repo
--enablerepo=  临时启用此处指定的repo
--noplugins: 禁用所有插件

相关文章

网友评论

      本文标题:linux程序包管理

      本文链接:https://www.haomeiwen.com/subject/qagaohtx.html