千家信息网

程序rpm包管理的示例分析

发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,程序rpm包管理的示例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。程序是什么?指令+数据也好,算法+数据结构也罢。它的存在形式有两
千家信息网最后更新 2025年01月16日程序rpm包管理的示例分析

程序rpm包管理的示例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

程序是什么?指令+数据也好,算法+数据结构也罢。它的存在形式有两种:

1.源代码:包含了整个应用程序的编程语言的所有代码的文本文件

2.二进制:将源代码经过一系列转换之后得到的直接执行的文件

其中,使用源代码安装的过程如下:

预处理(用到预处理器) --> 编译(编译器) --> 字节码Bitcode 进行汇编(汇编器) --> systemcall直接运行;libcall需要链接(链接器);最终得到可执行的二进制程序文件

汇编时,不一样的硬件往往不能兼容互通。因此诞生了一个国际化标准:

POSIX:Portable Operating System 可移植操作系统。至于IX是向unix致敬一下下

最终二进制文件到底能不能执行,取决于计算机的ABI接口。在不同OS上有着明显的差异,类unix系统上,ABI往往是ELF格式,如果是Windows系列 ;一般是exe或者msi格式.

我们再来回顾一下编程语言的分类

应用级编程语言:

Java(做应用程序很强,做系统菜鸡)

hadoop2-大数据处理平台,hbase-数据库,ELK-日志查询和分析检索系统

这些软件运行环境需要专有的一个环境叫:JVM

Python(离底层硬件距离太远,刚开始太消耗系统资源。现在来说,消耗已经可以忽略了 )

Openstack--云栈,saltstack--自动化运维管理工具 运行环境:PVM

perl、ruby(日本流行,开发很多曾经的经典游戏。)

PHP、go

而JVM PVM 和其他应用级语言所需要的解释器,都是由C语言开发的;

系统级编程语言:

C/C++

Linux、Unix的内核编程语言

编译开发环境:预处理器、编译器、头文件、开发库文件(能够让编译库运行的库)

(而像Java或者Python等应用级语言的开发环境:预处理器、编译器、开发库文件;)

通常情况下,源代码文件有多个,这些文件之间存在着一定的关联关系;我们称之为依赖关系;

软件项目构建工具:

C/C++:make

Java:maven

Python:buildout

尽管有了这些构建工具,编译源代码还是十分困难,因此有一些人把常用的代码打包封装成程序包,发布开源社区,方便使用

程序包的管理器:

不同的linux发行版本,有着不同的程序包管理器

Debian:dpt-Debian Package Toolkits。所有软件包封装成.deb后缀名的包文件,命令行工具 dpkg

Redhat:rpm-Redhat Package Manager ,rpm工具,.rpm后缀名

rpm称为linux的程序包管理器的行业标准

开始使用的是perl语言编写,后来用C语言重写了rpm,公布后改名为rpm is package manager。

Slackware(S.u.S.e):用的是rpm,但是对rpm进行了修改,以至于得到Redhat认可

Gentoo:从内核开始,可以供用户任意选择挑选软件;

采用的包管理器 : FreeBSD 的 portage的程序包管理机制,emerge工具

Archlinux:pacman

以CentOS为例,介绍下rpm程序包管理器的相关内容:

1.程序包的命名规则:

源代码包:software_name-VERSION.tar.gz

VERSION:major.minor.release

major:主版本号,通常代表重大功能改进的版本分支;

minor:次版本号,代表在某个版本的分支中的某个功能发生变化;

release:发行版本号,修复了某些BUG或者对某段代码进行了优化;

rpm程序包:

源代码包:software_name-VERSION.src.rpm

二进制文件包:

software_name-VERSION-[release].[os].arch.rpm

VERSION:major.minor.release

[release]:rpm包的发行版本号

[os]:软件所支持的操作系统版本信息,el6、el7、suse11、fedora22...

arch:硬件架构类型:i386 i686 x64(amd64) ppc sparc noarch...

例如 gcc-4.8.5-4.el7.x86_64.rpm

在制作rpm程序包的时候,通常其制作者会采用分包技术来构建rpm程序包:根据程序的不同功能,构建多个程序包;被分包的一般分为两类

1.主程序包:

software_name-VERSION-[release].[os].arch.rpm

2.附属功能包:

software_name-function-VERSION-[release].[os].arch.rpm

一般来讲,主程序包和附属功能包具有相同版本号 发行版本号 操作系统要求和硬件架构类型

所以 主程序包往往被所有的附属程序包所依赖;依赖关系:A --> B -->C D --> A 构成一个依赖黑洞 因此rpm存在着诸多'不与人为善'的弊端

获取程序包的途径:

1.系统发行版的光盘,或镜像

2.官方的文件服务器或者镜像站点:

http://mirrors.aliyun.com

http://mirrors.sohu.com

http://mirrors.163.com

http://mirrors.tuna.tsinghua.edu.cn

http://mirrors.hust.edu.cn

...

3.某项目的官方站点 例如apache

4.第三方组织制作的rpm程序包站点

Fedora EPEL:红帽官方的社区组织,在镜像站点中也包含EPEL镜像

搜索引擎:

http://pkgs.org 基本可以搜索到所有

http://rpmfind.net 法国的一个站点

http://rpm.pbone.net

5.自己制作 咯

建议:在获得程序包之后实施校验,完整性检查:

1.来源合法性

通过程序提供者的数字签名加密的数据,我们可以通过其公钥进行解密验证;

2.程序包完整性

sha-1校验码

rpm命令行工具:

安装 卸载 升级(降级) 查询 文件校验

【通用选项】:

-v --verbose:显示安装历程详情,仅仅显示安装软件名

-vv 显示非常详细的操作信息

安装:

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

[install-options]

-h --hash 用50个"#"来表示安装进度

--test: 并不是真正的安软件包,仅仅是测试是否在安装时能够正常完成,dry run

--nodeps : 忽略因为依赖关系导致的安装错误,不建议使用

--replacefiles 安装软件包时,软件包中的文件会直接将原来安装的文件替换

--replacepkgs 不卸载软件包 而是重新装一遍

--noscripts 不运行任何脚本

--nopre

--nopost

--nosignature 不考虑软件包的来源是否合法

--nodigest 不考虑软件包是否完整

升级:

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

可以升级也可以全新安装

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

仅仅是对已经安装的低版本的程序包进行升级安装

常用选项与安装相同

特殊的选项:

--oldpackage 降级安装

--force 强制升级

注意:

1.强烈建议:不要对内核进行升级操作;linux支持多内核

2.升级后带来文件的变化,系统默认不会直接更改之前的配置文件,新程序包的配置文件会被重命名,通常是:FILENAME.rpmnew

卸载:

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...

--allmatches:卸载所有匹配指定名称的程序包的各个版本

--nodeps:忽略依赖关系

--test:测试卸载

--nopreun

--nopostun

查询:

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

[select-options]

-a,--all:查询所有已安装的程序包名

-f,--file FILE 查找指定的文件是由哪个程序包提供的

-p,--package PACKAGE_FILE : 对还没安装的程序包文件中执行查询操作

--whatprovided CAPABILITY 查询指定的 CAPABILITY是由哪个程序包提供的

--whatrequires CAPABILITY

[query-options]

-c,--configfiles: 查看相关配置文件

-i,--info 查询程序包相关信息,包括版本号,发行号,等等

-l,--list 列表显示安装程序包会生成哪些文件

--providers: 列出指定程序包提供的所有的 CAPABILITY;

-R,--requires 查询指定的程序包的依赖关系

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

校验:

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

[select-options] 与查询的[select-options]相同

认证:

--import PUBKEY ...导入相应的/PATH/TO/KEY_FILE

{-K|--checksig} [--nosignature] [--nodigest] PACKAGE_FILE ...

手动测试 验证软件包的合法性

数据库管理:

数据库的初始化和重建:/var/lib/rpm

rpm {--initdb|--rebuilddb}

[--dbpath DIRECTORY]

看完上述内容,你们掌握程序rpm包管理的示例分析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

0