CentOS软件包管理详解

在Linux操作系统中软件包有两种形式

一种形式是压缩包的形式;例如qq.tar.gz,这里面就是qq的源码,种形式的软件包的安装需要编译再安装。

另外一种形式是rpm的形式:redhat package manager,原来是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用,已经成为行业标准。例如qq.rpm里面是二进制,它是通过把源码qq.tar.gz编译而来,编译就是把你写的字符串转换成计算机可以认识的二进制,rpm的软件包可以直接安装。

rmp包是怎么来的?

软件包的最原始的 形式肯定是源码的形式,rmp包是把别人写好的源码包编译好了存放成rpm这种格式了,这样做有什么好处能,下次你要安装的时候直接安装rpm包就行,不用去重新编码源码包了。那么通常都是谁来做源码包转换成rpm包这个工作呢,一般都是各Linux发行版的官方,例如CentOS的官方,Redhat的官方,他们去把一些运行比较稳定的,bug比较少的源码包给你编译成二进制形式的rpm包,以后有人要想使用这个软件的时候,直接安装rpm包就可以了。

我们经常看到官方发行的rpm版本都会比最新的源码包的版本滞后,为什么会滞后,因为官方都图稳定,他们会把一些稳定的发布到自己的平台上。如果你要使用最新最强大的功能,你只能去找源码包,但是需要注意的是,最新的源码包可能有许多bug。其实你自己也可以把源码包转化成rpm包。

rpm包的管理

在你的Linux系统中有个命令就叫rpm,

安装rpm软件包:

存放软件包的位置都有哪些,一个是网络的,一个是本地的(比如系统安装虚拟光盘中就有rpm包),

CentOS软件包管理详解_第1张图片

我们到挂载点查看

CentOS软件包管理详解_第2张图片

注意:64位的CPU是可以装32位软件包的,但是32位的CPU不能装64位的软件包的

例如:389-ds-base-1.2.11.15-46.el6.x86_64.rpm 

第一部分是name,表示这个rpm软件包的名称:389-ds-base

第二部分是version,表示这个rpm软件包的版本编号:1.2.11.15,如果最后的编号是偶数就是稳定版本,如果是奇数表示测试版本,这里15是奇数,说明这个软件包是测试版本,即不稳定版本。

第三部分是release,表示这个rpm软件包版本发布次数 -46

第四部分是architectures,表示这个rpm软件包适用哪些平台el6.x86_64,el6表示适合的操作系统,x86_64表示适合的CPU架构

 

下面我们来安装一下dhcp-4.1.1-43.P1.el6.centos.x86_64.rpm这个软件包

[root@book Packages]# rpm -ivh  dhcp-4.1.1-43.P1.el6.centos.x86_64.rpm

-i 表示安装install

-v表示显示正在安装的文件信息

-h表示安装过程中显示安装进度

[root@book Packages]# rpm -ivh dhcp-4.1.1-43.P1.el6.centos.x86_64.rpm 
error: Failed dependencies:             失败的依赖
        portreserve is needed by dhcp-12:4.1.1-43.P1.el6.centos.x86_64  意思是你得先安装portreserve包才能去安装 dhcp-12:4.1.1-43.P1.el6.centos.x86_64

解决方法:在安装包后面加上两个参数,

[root@book Packages]# rpm -ivh dhcp-4.1.1-43.P1.el6.centos.x86_64.rpm --nodeps --force
Preparing...                ########################################### [100%]
   1:dhcp                   ########################################### [100%]

加上这两个参数的意义就在于,安装时不再分析包之间的依赖关系而直接安装,也就不会再提示error: Failed dependencies:   这样的错误了。 --force叫覆盖安装,--nodeps表示忽略依赖性

[root@book Packages]# rpm -ivh dhcp-4.1.1-43.P1.el6.centos.x86_64.rpm --nodeps    忽略依赖性安装
Preparing...                ########################################### [100%]
        package dhcp-12:4.1.1-43.P1.el6.centos.x86_64 is already installed

注意:可以同时安装多个软件包

rpm -ivh 软件包1 软件包2 ...

 

删除rpm软件包

rpm -e dhcp 把软件包名写出来就行了 -e(--erase)

rpm -e dhcp-4.1.1-43.P1.el6.centos.x86_64 也行,但是千万不要把扩展名.rpm写出来,因为dhcp-4.1.1-43.P1.el6.centos.x86_64.rpm 安装到操作系统里面后是没有扩展名的。

删除操作中如果提示依赖关系可以通过后面加--nodeps来删除。

 

查询rpm软件包

rpm -qa  查看系统的所有已经安装的rpm包,-q (--query)  -a(--all)

rpm -qa | grep 'dhcp' 查看系统是否安装了dhcp软件包

[root@book Packages]# rpm -q dhcp  查询系统是否安装了dhcp,注意软件包名要写全
dhcp-4.1.1-43.P1.el6.centos.x86_64

[root@book data]# rpm -ql perf  查询软件包的安装路径 -l(location)

 

[root@book data]# rpm -qi perf  查询软件包的信息 -i(information)
Name        : perf                         Relocations: (not relocatable)
Version     : 3.10.0                            Vendor: CentOS
Release     : 957.1.3.el7.centos.plus       Build Date: Mon Dec  3 01:14:49 2018
Install Date: Wed Jul 10 16:16:19 2019         Build Host: kbuilder.bsys.centos.org
Group       : Development/System            Source RPM: kernel-plus-3.10.0-957.1.3.el7.centos.plus.src.rpm
Size        : 5711723                          License: GPLv2
Signature   : RSA/8, Tue Dec  4 00:58:10 2018, Key ID 24c6a8a7f4a80eb5
Packager    : CentOS BuildSystem
URL         : http://www.kernel.org/
Summary     : Performance monitoring for the Linux kernel
Description :
This package contains the perf tool, which enables performance monitoring
of the Linux kernel.

 

基于网络去安装软件包

第一步当然是能够联网,可以直接在线安装,先查一下自己系统的版本

[root@book Packages]# cat /etc/redhat-release 
CentOS release 6.6 (Final)

[root@book Packages]# rpm -ivh http://...xxx.rpm 在线安装rpm包

例如安装perf-3.10.0-957.1.3.el7.centos.plus.x86_64.rpm

[root@book Packages]# rpm -ivh https://mirrors.aliyun.com/centos/7/centosplus/x86_64/Packages/perf-3.10.0-957.1.3.el7.centos.plus.x86_64.rpm --nodeps
Retrieving https://mirrors.aliyun.com/centos/7/centosplus/x86_64/Packages/perf-3.10.0-957.1.3.el7.centos.plus.x86_64.rpm
warning: /var/tmp/rpm-tmp.RJ8NMl: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing...                ########################################### [100%]
   1:perf                   ########################################### [100%]

也可以下载后再安装,通过wget命令来下载,下载到本目录下面

[root@book data]# wget https://mirrors.aliyun.com/centos/7/centosplus/x86_64/Packages/perf-3.10.0-957.1.3.el7.centos.plus.x86_64.rpm
--2019-07-10 16:18:15--  https://mirrors.aliyun.com/centos/7/centosplus/x86_64/Packages/perf-3.10.0-957.1.3.el7.centos.plus.x86_64.rpm
Resolving mirrors.aliyun.com... 120.241.32.212, 183.240.224.121, 183.240.224.114, ...
Connecting to mirrors.aliyun.com|120.241.32.212|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 8914876 (8.5M) [application/x-redhat-package-manager]
Saving to: `perf-3.10.0-957.1.3.el7.centos.plus.x86_64.rpm'

100%[===========================================================================>] 8,914,876   10.8M/s   in 0.8s    

2019-07-10 16:18:16 (10.8 MB/s) - `perf-3.10.0-957.1.3.el7.centos.plus.x86_64.rpm' saved [8914876/8914876]

[root@book data]# ls
oldboy.sh  perf-3.10.0-957.1.3.el7.centos.plus.x86_64.rpm  scripts

 

rpm包的缺点,如果解决这个问题

1. rpm包有依赖关系,安装的时候非常烦。你在装一个软件包的时候,你根本就不知道这个软件包依赖于哪个软件包存在。

2.用rpm安装是指向一个安装源的,本地比如光盘里面就是rpm的安装源(软件包仓库)。找路径通过cd到那个目录的方法找到安装源。

3. 要解决rpm包的依赖性问题,你有什么思路?

          人为的建立好这个依赖性关系,然后存到一个文件里面就可以了,再去装软件包的时候,先去读这个文件(比如叫repo.txt),打开这个文件来扫描,扫描你装软件包的包名叫a, 把这个依赖性关系找出来,a ->b ->c ->d,到时候就会先装d、c,b,
a这是内部的处理过程,给用户的感官是yum install a就可以了,至于后端的依赖关系全部由yum命令自己理解就可以了。

所有核心是你人为的编写好了依赖性关系,

3. 用yum来解决依赖的问题,yum也是一个命令,也指向一个安装源。找安装源的原理和rpm一样的,但是我们可以把源的路径写到配置文件里面,

yum安装介绍

1.yum是用python写的。

2.yum是一个安装命令,不仅rpm需要安装源,yum也要对应一个安装源。

3. 本地yum源,比如这个虚拟安装光盘就是。

4. 我们把yum找路径这个操作放在配置文件里面。

我们把yum源的配置文件放在这个路径下

[root@book ~]# ls /etc/yum.repos.d/
CentOS-Base.repo               CentOS-Debuginfo.repo  CentOS-Vault.repo      local.repo
CentOS-Base.repo.tao.20180829  CentOS-Media.repo      CentOS-fasttrack.repo

local.repo代表本地的yum源,

local.repo格式:

  1 [local]  中括号是固定格式,中括号里面字符可以随便写,代表仓库的ID ,必须独一无二
  2 name=local yum  对于[local]的具体描述,可以根据情况来描述,随便取即可
  3 baseurl=file:///mnt/  指定yum源在哪里?告诉yum程序到哪里去取软件包,基于file协议

                                    还可以支持ftp协议,http协议。

                   file://代表告诉yum程序,你使用的是file协议,本地源

                   http://这个是网络源
  4 enabled=1    为1代表开启,
  5 gpgcheck=0   为0代表不检测gpg,

 

你可能感兴趣的:(linux)