第五部分  linux  软件安装RPM    SRPM与YUM

 
软件管理员简介
RPM与DPKG两大主流
rpm: redhat       centos     suse    命令:yum
redhat package manager 将软件先编译   再打包成rpm机制
包中记录的安装的时候必须具备的相依赖属性   当安装时候    rpm会先依照软件里的资料查询linux主机的相依赖属性软件是否满足    如果满足则安装   如果不满足  则不安装     。
1. rpm软件管理存在的问题
软件安装环境必须与打包时候的环境要求一致或相当
需要满足软件的相依赖属性
卸载时,底层的软件不可以先卸载 否则会造成整个系统的问题
2. 如果需要其他发行版的rpm软件   则需要srpm这个文件   source rpm的意思   即就是这个RPM文件里面包含未经过编译的原始代码   
仍然包含该关键需要的相依性说明以及所有rpm文件提供的资料    
与rpm不同的地方:提供了参数设置文件   也就是configure   与makefile
通常此文件的扩展文件名是***.src.rpm
安装此文件时  需要
先将该软件以RPM管理的方式编译   此时SRPM会被编译成为RPM文件
再将编译完成的RPM文件安装到linux系统当中
所以就可以通过修改srpm内的参数配置文件 然后重新编译生成能适合我们linux环境的rpm文件
 
3.rpm在打包软件的时候,同时加入一些信息登陆的功能,这些信息包括软件的版本,作者,依赖关系,软件功能说明,软件的所有文件记录等等,然后在linux系统上面也建立一个rpm软件资料库,当安装的时候,rpm会检验一下资料库里面是否已经存在相关的软件了。
4.克服依赖关系 可以用yum线上安装的方式
原理:在rpm包内会有记录相依赖关系的文件,在安装此软件的时候 与系统内已经安装的软件相比较,没有安装的相依赖软件一同安装,就会解决相依赖关系的问题 此种机制就是YUM
centos 1 将软件放在yum服务器上
2.分析这些软件的依赖关系 形成软件依赖的清单列表 这些信息与软件所在的本机或网络位置称为容器或者软件仓库
3.客户端有安装的需求时,用户端主动的向yum服务器下载依赖的清单列表,然后通过此表与本机的rpm数据库 已存在的软件比较,就能够一起安装需要的相依赖的软件了

默认清单会更新到本地的/var/cache/yum里面   利用此清单与本地的rpm数据库进行比较    这样就知道应该安装什么
然后yum会在yum server下载所有需要的软件 (因为清单里面含有详细的地址),然后再通过rpm机制安装下载下来的软件。
yum服务器提供的软件内容差异:
原版文件           更新的文件      特殊的文件(例如第三方软件)这三类不同的软件需要软件库的概念来处理    不同类型的软件放在不同的位置。

dpkg: b2d ubuntu 命令:apt-get

 
rpm软件管理程序:rpm
软件安装完毕后
相关信息会写到/var/lib/rpm/目录下面的数据库文件中,此文件比较重要,比较版本和查询都需要此文件
安装软件的相关目录
/etc 配置文件
/usr/bin 可执行文件
/usr/lib 动态函数库
/usr/share/doc 软件使用手册与说明
/usr/share/man man page文件
 
1.rpm安装   install
root身份   
rpm -ivh  /mnt/packages/****.rpm
-i install
-v verbose  详细
-h 显示安装进度
光盘:
rpm -ivh /mnt/Packages/rp***.rpm
安装多个软件
rpm -ivh a.rpm   b.rpm   *.rpm
网络安装
rpm -ivh http://website.name/pkgname.rpm
 
可以利用参数强制安装
--nodeps 不考虑依赖
--replacefiles 覆盖安装  当出现已安装或者版本不合适     无法还原
--replacepkgs 重复安装  只适合已经安装过的软件
--force 是上面两个的综合   
--test 尝试安装  测试软件是否有依赖关系的问题
--justdb rpm数据库出现错误时   利用此参数来更新数据库中的相关信息
--nosignature 忽略数字签名
--prefix 新路径 将软件安装到其他的非正规目录   安装到/usr/local   或者其他的目录   而非/bin  /etc等
--noscripts 不让改软件在安装过程中 自动执行某些系统脚本命令
 
举例:光盘安装
挂载: mount /dev/sr0 /mnt
找文件的实际路径: find /mnt -name 'pam-devel*'
测试相依性: rpm -ivh pam-devel... --test
直接安装: rpm -ivh pam-devel...
卸载光盘: umount  /mnt
2.RPM升级与更新
-Uvh 软件未安装过   则直接安装    ;如果是旧版   则自动更新到新版
-Fvh 如果未安装过   则不会安装   也就是只有安装过的软件才会被升级
尽量使用Fvh   避免不需要的软件被安装进系统
3.RPM 查询 query
查询的数据库文件为/var/lib/rpm/这个目录下的文件    rpm也可以查询未安装的rpm文件内的信息   
-qa 已经安装的软件
-q[licdR]已安装的软件的名称
-qf 存在于系统上面的某个文件名
-qp[licdR]未安装的某个文件的名称    
q后面跟的参数
a 列出所有 all
i 详细信息 information
l 所有文件与目录所在的完整文件名 list
c 列出配置文件 config
d 列出说明 description
R 相依赖软件的有关文件 required
f 后面接的文件名称  找出该文件属于哪一个已经安装的软件
--scripts 列出是否有安装后需要执行的脚本文件,可以用debug
-qp 找出某个未安装的软件的信息   packages   这里需要加上完整的文件名    版本号等
范例:
rpm -q logrotate   
rpm -ql logrotate  列出属于该软件提供的所有目录与文件   可以用于追踪
rpm -qR logrotate   如果成功安装软件  还需要什么文件的帮忙
rpm -qpR  filename.i386.rpm   找出该文件需求的文件
 
RPM验证与数字签名    verify/signature    侧重于安全方面
使用/var/lib/rpm下面的rpm数据库来比对目前linux系统的环境下的软件,当不小心遗失文件时或错误修改文件时,可以用此方法来验证原来的文件系统,了解修改哪些文件了
语法:
rpm -Va   列出所有可能更动过的文件
rpm -V 已经安装的软件名称   该软件包含的文件被更动过  才会列出来
rpm -Vp 某个RPM文件的文件名
rpm -Vf  在系统上面的某个文件  某个文件是否被更动过
范例
rpm -V logrotate
软件是否被更动过
rpm -Vf /etc/crontab 查询一下此文件是否被更动过
查询更动过的内容
rpm -V logrotate
出现..5....T.  c  /etc/logrotate.conf
c 代表的是configuration
S 文件的容量大小
M   文件的类型或属性
5 MD5这个指纹码的内容不同
T 文件的建立的时间
........
所以上面例子中的 md5值和建立的时间已经改变了
SM5DLUGTP     c     filename    对应的位置
例子中的c   代表配置文件
d 数据文件
g ghost file    
l license file 授权文件
r read me  读我文件
 
数字签名   GNU的gpg   签名系统
先安装厂商提供的公钥文件
再安装rpm软件的时候,rpm指令会去读取RPM文件的数字签名   与本机的签名比对
如果相同则安装     否则不安装
cat /etc/pki/rpm-gpg/RPM-GPG-KEY-cENTos-7
内容为乱数
安装公钥系统软件
安装方式:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-Centos-7   
寻找此文件的命令:locate GPG-KEY
或者
find /etc -name '*GPG-KEY*'
查看某软件的公钥文件
rpm-qa | grep pubkey
rpm -qi gpg-pubkey-f4a8.......
出现的内容就是厂商提供的公钥信息
 
RPM反安装与重建数据库(erase/rebuilddb)
卸载的过程必须由上层忘下层卸载   先拆第6层楼   再拆第5层  最后到地基
语法:
rpm -e pam
卸载   安装  升级过程中可能会导致rpm数据库被破坏   可以利用--rebuilddb选项来重建rpm数据库
命令:rpm  --rebuilddb
yum线上升级机制
 
yum查询、安装、升级与删除功能
查询
yum  [list|info|search|provides|whatprovides]
yum [option][查询工作项目][相关参数]
 
-y yes   去掉交互
--installroot=/some/path    将软件安装到后面的额路径  而不是默认的路径
search 搜寻某个软件名称或者是秒数的重要关键字
list 类似于rpm -qa    列出目前yum 所管理的所有软件名称与版本
info 类似rpm -qai
provides 根据文件去搜索软件    查询是哪个软件提供的     很有用

第五部分 linux 软件安装RPM SRPM与YUM的更多相关文章

  1. 软件安装 RPM SRPM YUM

    RPM介绍 RPM是已经编译好的软件安装库.编译是有相应环境相适应的,包括系统,版本等相关信息都要跟编译版本一致才行,否则肯定会出现安装不成功的情况,强制安装的话,也会出现各种各样的问题. 在这种情况 ...

  2. Linux学习笔记(13)linux软件安装rpm与yum--理论篇

    该文章linux知识点如下 1.linux中 软件包介绍 2.linux源码软件安装 3.linux二进制软件安装 4.linux rpm软件包管理 5.linux yum软件包管理 1.linux中 ...

  3. linux软件安装(rpm,源码编译)

    1.rpm(redhat package manager)管理器主要目的在于解决软件的安装.卸载.升级.查询.验证等,例如升级过程中,保留软件的配置文件,安装过程中,检查软件依赖的库文件,以及卸载过程 ...

  4. 鸟哥的linux私房菜学习记录之软件安装RPM,SRPM,YUM

  5. Linux软件安装-RPM安装

    RPM是RPM Package Manager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux.         S ...

  6. Linux软件安装,RPM与YUM

    为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/3843955.html ...

  7. Linux软件安装中RPM与YUM 区别和联系

    .tc-nav-row{ height:38px; margin: 8px 15px; } .tc-nav-tab{ text-align: center; color:#333333; line-h ...

  8. Linux软件安装管理之——dpkg与apt-*详解 apt命令(dpkg和apt代替rpm)

    apt list *python* Nosee123关注赞赏支持   Linux软件安装管理之--dpkg与apt-*详解 [Linux软件安装管理系列]- - 传送门: - -<Linux软件 ...

  9. Linux软件安装管理:rpm与yum

    目录 1. rpm包的管理 1.1 介绍 1.2 rpm包的简单查询指令 1.3 rpm 包名的基本格式 1.4 rpm其它指令 1.5 卸载rpm包 1.6 安装rpm包 2. yum 2.1 说明 ...

随机推荐

  1. Css Hack 大全(IE6、IE7、IE8、IE9 css hack)

    一.IE6 css hack: 1. *html Selector {} /* Selector 表示 css选择器 下同 */ 2. Selector { _property: value; } / ...

  2. Spring的DI(Dependency Injection)

    写在之前,作为正在学习的程序员,对于Spring理解比较差,给两个简单的定义大家看一下. 控制反转(Inversion of Control),是一个重要的面向对象编程的法则来削减计算机程序的耦合问题 ...

  3. python中的getcwd

    Help on built-in function getcwd in module posix: getcwd(...)    getcwd() -> path        Return a ...

  4. 如何检查SQL Server索引填充因子

    假如您有一个盛满水的玻璃杯,您要尝试再向这个玻璃杯中加水.结果会怎样呢?水会溢出来. SQL Server 的情况也是如此.当索引页填充满时,如果尝试添加新行,则 SQL Server 会将大约一半的 ...

  5. guruguru

    6576: guruguru 时间限制: 1 Sec  内存限制: 128 MB提交: 28  解决: 12[提交] [状态] [讨论版] [命题人:admin] 题目描述 Snuke is buyi ...

  6. python_81_标准库_时间模块

    ''' 标准库: 1.time 时间的三种表示方法:a:时间戳(timestamp) b:格式化的时间字符串 c:元组(struct_time)共九个元素 time.struct_time(tm_ye ...

  7. Python socket 粘包

    目录 1 TCP的三次握手四次挥手 0 1.1 三次握手 1 1.2 四次挥手 2 2 粘包现象 3 2.1 基于TCP制作远程执行命令操作(win服务端) 4 2.1 基于TCP制作远程执行命令操作 ...

  8. 数据库-SQL语法:把一个字段的值设为随机整数

     update test2 set zuig = (cast ( ceiling (rand()*9) as int))  

  9. vue入坑教程(三)vue父子组件之间互相调用方法以及互相传递数据

    1.父组件调用子组件的方法 父组件: <template> <div> <button v-on:click="clickParent">点击& ...

  10. Dojo的on函数(以前的dojo.connect)

    ​同jQuery的on函数: require(["esri/map", "dojo/on"], function(Map, on) { // ... on(my ...