当前位置: 首页 > news >正文

第22章 软件安装 RPM/ YUM

        上章节是用源代码来编译完成;

        发商编译好之后直接把可执行文件发布给用户来安装也是一种方法,类似于windows下的安装;

       客户端取得这个文件后,只要通过特定的指令来安装, 那么该软件文件就会依照内部的脚本来检测相依的前驱软件是否存在,若安装的环境符合需求,那就会开始安装;

dbkg与 RPM

        

  • dpkg
    这个机制最早是由 Debian Linux 社群所开发出来的,通过 dpkg 的机制, Debian 提供的软件就能够简单的安装起来,同时还能提供安装后的软件信息,实在非常不错。 只要是衍生于 Debian 的其他 Linux distributions 大多使用 dpkg 这个机制来管理软件的, 包括 B2D, Ubuntu 等等。
     
  • RPM:RedHat Package Manager 
    这个机制最早是由 Red Hat 这家公司开发出来的,后来实在很好用,因此很多 distributions 就使用这个机制来作为软件安装的管理方式。 包括 Fedora, CentOS, SuSE 等等知名的开发商都是用这咚咚。
  • ----

 Centos是使用用RPM机制来进行安装的,本章着重讲这种;

RPM

        优点:

1 RPM 内含已经编译过的程式与设定档等资料,可以让使用者免除重新编译的困扰;
2 RPM 在被安装之前,会先检查系统的硬碟容量、作业系统版本等,可避免档案被错误安装;
3 RPM 档案本身提供软体版本资讯、相依属性软体名称、软体用途说明、软体所含档案等资讯,便于瞭解软体;
4 RPM 管理的方式使用资料库记录 RPM 档案的相关参数,便于升级、移除、查询与验证。

        注意:

  1. 软件档案安装的环境必须与打包时的环境需求一致或相当;
  2. 需要满足软件的相依属性需求;
  3. 反安装时需要特别小心,最底层的软件不可先移除,否则可能造成整个系统的问题!

-

SRPM

        Source RPM 的意思,也就是这个 RPM 文件里面含有源代码; 

        SRPM 的扩展名是以 ***.src.rpm 这种格式来命名的

优点

         SRPM 虽然内容是源代码, 但是他仍然含有该软件所需要的依赖软件说明、以及所有 RPM 文件所提供的资料

        我们就可以通过修改 SRPM 内的参数配置文件,然后重新编译产生能适合我们 Linux 环境的 RPM 文件

  • 先将该软件以 RPM 管理的方式编译,此时 SRPM 会被编译成为 RPM 文件;
  • 然后将编译完成的 RPM 文件安装到 Linux 系统当中

文件格式代表着-

xxxxxxxxx.rpm   <==RPM 的格式,已经经过编译且包装完成的 rpm 档案;
xxxxx.src.rpm   <==SRPM的格式,包含未编译的原始码资讯。

如:rp-pppoe-3.11-5.el7.x86_64.rpm

--
rp-pppoe -        3.11   -     5        .el7.x86_64  .rpm
軟體名稱   軟體的版本資訊 釋出的次數 適合的硬體平台 副檔名

软件相互依赖问题

        通过YUM服务器获取软件清单,安装时一一比较;

        当客户端有升级、安装的需求时, yum 会向软件库要求列表的更新,等到清单更新到本机的 /var/cache/yum 里面后, 等一下更新时就会用这个本机清单与本机的 RPM 数据库进行比较,这样就知道该下载什么软件。 接下来 yum 会跑到软件库服务器 (yum server) 下载所需要的软件 (因为有记录软件所在的网址),然后再通过 RPM 的机制开始安装软件

 

删除清单缓存

     /var/cache/yum 

     当本地清单列表与YUM服务器内容不一致时,可能出现差错;

[root@study ~]# yum clean [packages|headers|all] 
選項與參數:
 packages:將已下載的軟體檔案刪除
 headers :將下載的軟體檔頭刪除
 all     :將所有軟體庫資料都刪除!

软件文件信息存放问题

该软件相关的信息就会被写入 /var/lib/rpm/ 目录下的数据库文件中了

软件内的文件存放到:

 

rpm命令*

安装:

[root@study ~]# rpm -ivh package_name
選項與參數:
-i :install 的意思
-v :察看更細部的安裝資訊畫面
-h :以安裝資訊列顯示安裝進度

        另外,如果我们在安装的过程当中发现问题,或者已经知道会发生的问题, 而还是'执意'要安装这个软件时,可以使用如下的参数'强制'安装上去

 升级与更新


-Uvh	后面接的软件即使没有安装过,则系统将予以直接安装; 若后面接的软件有安装过旧版,则系统自动更新至新版;
-Fvh	如果后面接的软件并未安装到你的 Linux 系统上,则该软件不会被安装; 亦即只有已安装至你 Linux 系统内的软件会被'升级'!

查询*(重点)

查询软件整体

[root@study ~]# rpm -qa                              <==已安装软体
[root@study ~]# rpm -q[licdR] 已安装的软体名称       <==已安装软体
[root@study ~]# rpm -qf 存在于系统上面的某个档名     <==已安装软体
[root@study ~]# rpm -qp[licdR] 未安装的某个文件名称  <==查阅RPM档案
选项与参数:
查询已安装软体的资讯:
-q  :仅查询,后面接的软体名称是否有安装;
-qa :列出所有的,已经安装在本机 Linux 系统上面的所有软体名称;
-qi :列出该软体的详细资讯 (information),包含开发商、版本与说明等;
-ql :列出该软体所有的档案与目录所在完整档名 (list);
-qc :列出该软体的所有设定档 (找出在 /etc/ 底下的档名而已)
-qd :列出该软体的所有说明档 (找出与 man 有关的档案而已)
-qR :列出与该软体有关的相依软体所含的档案 (Required 的意思)
-qf :由后面接的档案名称,找出该档案属于哪一个已安装的软体;
-q --scripts:列出是否含有安装后需要执行的脚本档,可用以 debug 喔!
查询某个 RPM 档案内含有的资讯:

查询RPM文件内的信息

-------------------------
-qp  [icdlR]:注意 -qp 后面接如上的所有参数。
        但用途仅在于找出某个 RPM 文件内的信息,而非已安装的软体信息

验证修改过/数字签名

        验证是否修改过:

[root@study ~]# rpm -Va
[root@study ~]# rpm -V  已安装的软体名称
[root@study ~]# rpm -Vp 某个 RPM 档案的档名
[root@study ~]# rpm -Vf 在系统上面的某个档案
选项与参数:
-V  :后面加的是软体名称,若该软体所含的档案被更动过,才会列出来;
-Va :列出目前系统上面所有可能被更动过的档案;
-Vp :后面加的是档案名称,列出该软体内可能被更动过的档案;
-Vf :列出某个档案是否被更动过~

     参数:

[root@study ~]# rpm -V logrotate
..5....T.  c /etc/logrotate.conf

 

        验证数字签名

 

  1. 首先你必须要先安装原厂释出的公钥档案;
  2. 实际安装原厂的 RPM 软件时, rpm 指令会去读取 RPM 文件的签名信息,与本地系统内的签名信息比对,
  3. 若签章相同则予以安装,若找不到相关的签名信息时,则给予警告并且停止安装喔。

       

-

        安装数字签名:

[root@study ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

卸载 与 清除数据记录

卸载

rpm -e 软件名

        '解安装的过程一定要由最上层往下解除'

重建数据库

        RPM 数据库 /var/lib/rpm/ 内的文件

 rpm --rebuilddb   <==重建資料庫

YUM

         yum 是透过分析 RPM 的标头资料后, 根据各软体的相关性制作出属性相依时的解决方案,然后可以自动处理软体的相依属性问题,以解决软体安装或移除与升级的问题;

查询:

[root@study ~]# yum [option] [查询工作项目] [相关参数]
选项与参数:
[option]:主要的选项,包括有:
  -y :当 yum 要等待使用者输入时,这个选项可以自动提供 yes 的回应;
  --installroot=/some/path :将该软体安装在 /some/path 而不使用预设路径
[查询工作项目] [相关参数]:这方面的参数有:
  search  :搜寻某个软体名称或者是描述 (description) 的重要关键字;
  list    :列出目前 yum 所管理的所有的软体名称与版本,有点类似 rpm -qa;
  info    :同上,不过有点类似 rpm -qai 的执行结果;
  provides:从档案去搜寻软体!类似 rpm -qf 的功能!

安装与升级

[root@study ~]# yum [option] [安裝與升級的工作項目] [相關參數]
選項與參數:
  install :後面接要安裝的軟體!
  update  :後面接要升級的軟體,若要整個系統都升級,就直接 update 即可

群组安装功能

[root@study ~]# yum [群组功能] [软体群组]
选项与参数:
   grouplist   :列出所有可使用的‘软体群组组’,例如 Development Tools 之类的;
   groupinfo   :后面接 group_name,则可瞭解该 group 内含的所有软体名;
   groupinstall:这个好用!可以安装一整组的软体群组,相当的不错用!
   groupremove :移除某个软体群组;

        默认安装所有群组软件

        修改yum配置文件/etc/yum.conf

[root@study ~]# vim /etc/yum.conf
.....(前面省略).....
distroverpkg=centos-release   # 找到這一行,底下新增一行!
group_package_types=default, mandatory, optional
.....(底下省略).....

卸载

[root@study ~]# yum remove pam-devel

yum配置文件

vim /etc/yum.repos.d/

        当需要换软件源url地址时,可以到里面去修改;

文件内容解析

 

[base]:代表软件库的名字! 中括号一定要存在,里面的名称则可以随意取。 但是不能有两个相同的软件库名称, 否则 yum 会不晓得该到哪里去找软件库相关软件列表文件。

name:只是说明一下这个软件库的意义而已,重要性不高!

mirrorlist=:列出这个软体库可以使用的映射站台,如果不想使用,可以注解到这行;

baseurl=:这个最重要,因为后面接的就是软体库的实际网址! mirrorlist 是由 yum 程式自行去捉映射站台, baseurl 则是指定固定的一个软体库网址!我们刚刚找到的网址放到这裡来啦!

enable=1:就是让这个软体库被启动。如果不想启动可以使用 enable=0 喔!

gpgcheck=1:还记得 RPM 的数位签章吗?这就是指定是否需要查阅 RPM 档案内的数位签章!

gpgkey=:就是数位签章的公钥档所在位置!使用预设值即可

相关文章:

  • 手把手教你如何使用YOLOV5训练自己的数据集
  • 公众号网课搜题接口
  • 八、创建JWT工具类
  • 这家公司只有1个人,年赚一个亿
  • 【前端攻城师之JS基础】02JS对象基础
  • 【C/C++】程序环境,探索程序的执行过程(习得无上内功《易筋经》的第一步)
  • 计算机网络——基于UDP与TCP网络编程
  • 中兴设备18种命令模式总结大全,全网第一篇,强烈建议收藏!
  • 【学生管理系统】权限管理
  • NLP学习之:Bert 模型复现(1)任务分析 + 训练数据集构造
  • 【PTA】《数据结构与算法》线性结构复习题
  • Java利用工具类提升写报表效率
  • RFSoC应用笔记 - RF数据转换器 -14- RFSoC自动增益控制与NCO跳频功能
  • 大数据Hadoop之——Apache Hudi 数据湖实战操作(Spark,Flink与Hudi整合)
  • 智能机器人项目,安装人脸识别face_recognition报错解决
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • emacs初体验
  • Laravel 实践之路: 数据库迁移与数据填充
  • Lucene解析 - 基本概念
  • PHP的Ev教程三(Periodic watcher)
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • REST架构的思考
  • uni-app项目数字滚动
  • vue:响应原理
  • Web Storage相关
  • WePY 在小程序性能调优上做出的探究
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 前端之Sass/Scss实战笔记
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 算法系列——算法入门之递归分而治之思想的实现
  • 转载:[译] 内容加速黑科技趣谈
  • Linux权限管理(week1_day5)--技术流ken
  • #《AI中文版》V3 第 1 章 概述
  • #includecmath
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (javascript)再说document.body.scrollTop的使用问题
  • (Note)C++中的继承方式
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (论文阅读11/100)Fast R-CNN
  • (篇九)MySQL常用内置函数
  • (七)Knockout 创建自定义绑定
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (转)shell调试方法
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .NET 4.0中的泛型协变和反变
  • .Net Web窗口页属性
  • .net 获取url的方法
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NET文档生成工具ADB使用图文教程
  • @NestedConfigurationProperty 注解用法
  • @Responsebody与@RequestBody
  • [ Linux ] git工具的基本使用(仓库的构建,提交)
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码