程序rpm包管理的示例分析-创新互联

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

濠江网站建设公司创新互联,濠江网站设计制作,有大型网站制作公司丰富经验。已为濠江1000+提供企业网站建设服务。企业网站搭建\成都外贸网站建设公司要多少钱,请找那个售后服务好的濠江做网站的公司定做!

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

  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包管理的示例分析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


标题名称:程序rpm包管理的示例分析-创新互联
转载源于:http://csdahua.cn/article/dssedc.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流