Linux 软件管理

[TOC]

1. RPM 红帽软件包管理工具

1. RPM 工具的概述

RPM : Red Hat Package Manager

由红帽开发用于软件包的安装升级与卸载,查询。

不同系统的包管理工具

软件包管理

适用系统

对应的软件包管理命令

自动解决依赖

rpm

红帽系列

rpm

yum

deb

Debian/Ubuntu

dpkg

apt

常见的软件包类型

分类

安装

版本

依赖

rpm

预先编译打包,安装简单

软件版本偏低

依赖可自动解决

源码包

手动编译打包,安装繁琐

软件版本随意,自行选择

依赖需手动解决

二进制包

解压即可使用,安装简单

不能修改源码

依赖需手动解决

RPM软件包的命名规则


版本号: 主版本号. 重大更新. 次版本. 子功能更新. 修订号. 修复bug

el7: 给哪个版本操作系统使用 el7 el6 等等,查看本机系统版本 hostnamectl

RPM包组成

  1. 安装释放的文件
  2. 软件包的源数据(版本, 发布号, 架构, 描述, 要求, 更改日志, 等等)
  3. 脚本: 安装前执行的脚本和安装后执行的脚本

2. RPM 工具的使用

RPM 
  -i     #安装
  -v     #显示过程
  -h     #显示安装进度
  -e     #删除软件包
  -q     #查询软件包信息
  -e     #删除软件包
  --test  #测试是否能安装成功	
  --force  #强制重新安装
  --nodeps #忽略依赖关系安装
1. 使用RPM进行安装
#安装软件包需要指定软件包的绝对路径
[root@localhost Packages]# rpm -ivh wget-1.14-18.el7_6.1.x86_64.rpm 
Preparing...                          ################################# [100%]
	package wget-1.14-18.el7_6.1.x86_64 is already installed

#安装samba服务需要依赖其他组件, 使用--nodeps可重新强制安装
[root@localhost Packages]# rpm -ivh samba-4.10.16-5.el7.x86_64.rpm  --nodeps
Preparing...                          ################################# [100%]
Updating / installing...
   1:samba-0:4.10.16-5.el7            ################################# [100%]
warning: group printadmin does not exist - using root
2. 查询已经安装的RPM包

选项

描述

备注

rpm -q

查询指定软件包是否安装

query

rpm -qa

查询系统中已安装的所有rpm软件包列表

all

rpm -qi

查询指定软件的详细信息

information

rpm -ql

查询指定软件包所安装的文件目录,文件列表,已安装的

list

rpm -qc

查询指定软件包的配置文件

configuare

rpm -qd

查询指定软件包的帮助文档

document

rpm -qf

查询文件或目录属于哪个RPM软件

find

rpm -q –scripts

查询RPM安装前后所执行的脚本


rpm -qip

查询未安装的RPM包详细信息

package

rpm -qlp

查询未安装的RPM包会产生哪些文件

package

3. RPM包升级

选项

描述

rpm -U

如果老版本不存在则全新安装,如果存在则有新版本即升级

# wget  https://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-agent-3.0.9-1.el7.x86_64.rpm
# wget  https://mirrors.aliyun.com/zabbix/zabbix/4.2/rhel/7/x86_64/zabbix-agent-4.2.0-1.el7.x86_64.rpm

#1.先安装低版本
[root@www.xuliangwei.com ~]# rpm -ivh zabbix-agent-3.0.9-1.el7.x86_64.rpm
        
#2.尝试安装高版本(会出现错误)
[root@www.xuliangwei.com ~]# rpm -ivh zabbix-agent-4.2.0-1.el7.x86_64.rpm
        
#3.使用升级的方式,完美解决替换
[root@www.xuliangwei.com ~]# rpm -Uvh zabbix-agent-4.2.0-1.el7.x86_64.rpm
4. RPM包卸载

选项

描述

rpm -e

卸载前要先卸载依赖,如果依赖是系统必须的,那么就不能卸载了

#卸载要用全部名称,要先查询再卸载	
[root@localhost package]# rpm -qa | grep zabbix
zabbix-agent-4.2.0-1.el7.x86_64
[root@localhost package]# rpm -e zabbix-agent-4.2.0-1.el7.x86_64
5. RPM包校验

参数

描述

S

文件容量的大小是否改变

M

文件的类型或者文件的属性是否改变

5

MD5 这一种加密的内容是否已经不同

L

路径已经被改变

U

文件的属主已经被改变

G

文件的属组已经被改变

T

文件的创建时间已经被改变

#软件相关的数据库存放在 /var/lib/rmp/目录下
[root@www.xuliangwei.com ~]# rpm -V vsftpd
S.5....T.  c /etc/pam.d/vsftpd
.......T.  c /etc/vsftpd/ftpusers
S.5....T.  c /etc/vsftpd/vsftpd.conf
.M.......    /var/ftp/pub

2. YUM 软件包管理工具

YUM : Yellow Dog Update Moditied 黄狗软件包

能够从互联网下载.rpm包,并且安装,并可以自动处理依赖关系,无需繁琐地一次次下载,安装。

1. Yum源基础

简单来说就是 Yum的软件包仓库,这个源,可以是本地的,网络的,都可以。

常见的Yum源,阿里源,清华源,网易,百度等等。

Yum源的配置文件

#Yum源的配置文件在/etc/yum.repos.d/ 目录下,以.repo结尾
[root@localhost yum.repos.d]# cat local.repo
[Local]            #源的名字
name=Local               #源的描述
#mirrorlist=             #指定多个源地址
baseurl=file:///mnt/      #只指定一个源地址
gpgcheck=0           #自动检查  开启需指定密钥位置 gpgkey= PATH
enabled=1                 #此源是否启用

Yum源的分类

base源: 也就是基础源,是系统常用源

epel源 : extra Packages for Enterprise Linux 企业级Linux软件包。

使用: yum install epel-release 即可下载 epel源配置文件

2. Yum 软件管理命令

### Yum 安装必备工具 bash-completion bash-completion-extras(增强版)
### 增强版 需要使用epel源
### vim +2 /etc/passwd   打开passwd文件并自动进入第2行
### echo $?    查看上个命令的执行结果 { 0正确  非0错误}
1. 搜索软件包命令
yum list #列出软件仓库中可用的软件
yum info ftp  #查看ftp的详细信息

############# Yum 必备技能  #########
yum provider xxx  #根据文件,命令,库文件,搜索对应的软件包
yum search  xxx   # 比provider 搜索的更全
2. 安装软件包指令
yum install traceroute -y  #安装软件只需要给出软件包名称
#安装本地的 rpm 包,如有依赖关系,会自动从软件仓库中下载所需依赖(并不是来自.repo定义的软件仓库)

[root@localhost yum.repos.d]# yum localinstall /mnt/Packages/traceroute-2.0.22-2.el7.x86_64.rpm         # 安装本地的rpm软件包,会自动解决依赖
 
[root@localhost yum.repos.d]# yum install https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm      #直接下载并安装网络的rpm包
3. 更新软件包指令
yum check-update   #对比Linux中已安装的软件 和 yum仓库中的软件那些需要升级
yum update samba -y  #更新samba软件
yum update    #代表更修整个系统所有的软件,包括内核,
   #使用很久,稳定的服务器千万不要更新,一般刚安装系统之后可以更新
4. 重新安装软件
yum reinstall xxxx 
#如果有配置文件丢失,可重新安装,配置文件就会恢复默认
5. 删除软件
yum remove samba  # 会删除依赖
 yum erase  samba # 和remove一样
 
 #企业应用,yum负责安装,rpm负责卸载,尽量不要删除,关闭后放着就可以。
6. 仓库相关指令
#列出软件源中可用的软件仓库 
yum repolist

#列出全部yum源,可用和禁用的都列出来
yum repolist all
7. 缓存相关指令
#Linux 中缓存无处不在
yum clean all #清空缓存
yum makecache #缓存yum源软件仓库,xml元数据文件

## yum 在安装软件的时候,会先将软件缓存到本地,在进行安装,安装完之后会把缓存到本地的软件包进行删除
#修改配置文件安装完成后不删除软件包
vim /etc/yum.conf
  [main]
    cachedir = /var/cache/yum/$basearch/$releasever  #缓存位置
    keepcache =  1  #改为1 即可
    
    
    
##########另一种缓存方式################

#2.缓存rpm包方式二,只下载不安装
[root@www.xuliangwei.com ~]# yum install -y yum-plugin-downloadonly #插件
[root@www.xuliangwei.com ~]# yum install httpd -y --downloadonly --downloaddir=/tmp

#3.清除所有yum缓存的软件包以及元数据
[root@www.xuliangwei.com ~]# yum clean all

#4.只清除缓存的软件包
[root@www.xuliangwei.com ~]# yum clean packages
8. 组包相关命令
[root@localhost tmp]# yum groups list
                        #列出已经安装和所有可使用的软件组
[root@localhost tmp]# yum groups install  Development Tools \
>  Compatibility Libraries
                     #安装一整个组的软件
[root@localhost tmp]# yum groups remove -y Development\ Tools 
                    # 删除一整个软件组
9. 历史纪录指令
#1.查看历史执行yum命令
[root@www.xuliangwei.com ~]# yum history

#2.查询历史执行yum命令ID详细信息
[root@www.xuliangwei.com ~]# yum history info N

#3.撤销历史执行过的yum命令
[root@www.xuliangwei.com ~]# yum history undo N

3. Yum 的配置文件

[root@localhost tmp]# vim /etc/yum.conf 
[main]
cachedir=/var/cache/yum/$basearch/$releasever  #缓存目录
keepcache=0           #缓存软件包  1启动 0关闭
debuglevel=2          #调试级别
logfile=/var/log/yum.log          #日志记录位置
exactarch=1                #检查平台是否兼容
obsoletes=1             #检查软件包是否废弃
gpgcheck=1          #检查来源是否违法,需要有制作者的公钥信息
plugins=1      #是否启用查询
installonly_limit=5      #同时下载软件包的数量
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
# metadata_expire=90m                #缓存默认的删除时间
# in /etc/yum.repos.d        #包含repos.d 目录中的文件

4. Yum 签名机制

红帽在构建RPM包时,使用私钥 private key 对 rpm包进行签名,客户端在使用rpm为了验证其合法性,可以使用 红帽 提供的公钥 Public Key 进行签名检查。

指定公钥的位置

[root@xuliangwei ~]# vim /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base 
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7   #指定公钥的位置

提前导入公钥

[root@xuliangwei ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7         #导入公钥
[root@xuliangwei ~]# vim /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base 
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1

不进行签名验证

# 不验证软件包的合法性
[root@xuliangwei ~]# yum install httpd --nogpgcheck

3. 搭建本地仓库

1. 单机模式

#方式一: vim /etc/yum.repos.d/local.repo ,写这个文件

##方式二:
yum-config-manager --add-repo="file:///mnt"  
            #一条命令即可,真牛逼

2.联机模式

很多时候不仅仅是一台机器无法上网,而是很多机器都无法上网,但都有联网下载软件的需求,这个时候难道每台机器都挂在光盘吗? 当然可以,但如果软件出现了更新怎么办?

本地光盘提供基础软件包: Base yum缓存提供常用软件包: nginx, zabbix, docker

环境准备

系统

IP

角色

CentOS7

10.0.0.99

服务端

CentOS7

10.0.0.98

客户端

服务端进行yum仓库的搭建准备工作

#1.关闭防火墙、与selinux
[root@yum_server ~]# systemctl stop firewalld
[root@yum_server ~]# setenforce 0

#2.安装ftp服务,启动并加入开机启动
[root@yum_server ~]# yum -y install vsftpd 
[root@yum_server ~]# systemctl start vsftpd 
[root@yum_server ~]# systemctl enable vsftpd

#3.开启yum缓存功能
[root@yum_server ~]# vim /etc/yum.conf
[main] cachedir=/var/cache/yum/$basearch/$releasever 
keepcache=1
[root@yum_server ~]# yum clean all

#4.提供基础base软件包
[root@yum_server ~]# mkdir /var/ftp/centos7
[root@yum_server ~]# mount /dev/cdrom /mnt
[root@yum_server ~]# cp -rp  /mnt/Packages/*.rpm /var/ftp/centos7/

#5.提供第三方源
[root@yum_server ~]# mkdir /var/ftp/ops
[root@yum_server ~]# yum -y install nginx docker

#6.复制已缓存的 Nginx docker 及依赖包 到自定义 YUM 仓库目录中
[root@yum_server_69_112 ~]# find /var/cache/yum/x86_64/7/ \
-iname "*.rpm" -exec cp -rf {} /var/ftp/ops \;

#7.安装createrepo并创建 reopdata仓库
[root@yum_server_ ~]# yum -y install createrepo
[root@yum_server_ ~]# createrepo /var/ftp/ops

#PS: 如果此仓库每次新增软件则需要重新生成一次

客户端配置yum源指向服务端

#1.客户端配置并使用 base 基础源
[root@yum_client ~]# gzip /etc/yum.repos.d/*
[root@yum_client ~]# vim /etc/yum.repos.d/centos7.repo 
[centos7]
name=centos7_base
baseurl=ftp://10.0.0.99/centos7
gpgcheck=0

#2.客户端配置并使用 ops 源
[root@yum_client ~]# vim /etc/yum.repos.d/ops.repo 
[ops]
name=local ftpserver
baseurl=ftp://10.0.0.99/ops
gpgcheck=0

4. 源码包管理实战

1. 源码包是什么

源码包是指开发编写好的程序源代码,但并没有将其编译。

2. 为什么要学习源码包

  1. 部分软件官网仅提供源码包,需要自行编译安装
  2. 部分软件在新版本有一些特性,还没来的及制作成rpm包时,可以自行编译安装使用。

3. 源码包的优缺点

优点

  1. 可以自行修改源代码
  2. 可以定制需要的功能
  3. 新版软件优先更新源码

缺点

  1. 相对yum安装软件会复杂很多
  2. 标准化实施困难,自动化无法落地

4. 将源码包编译成二进制执行文件

安装三部曲

PS: 此方法不是百分百通用于所有源码包,建议拿到源码包解压后,进入到目录找相关的README帮助文档

5. 源码编译示例

通过编译安装 nginx 来了解编译过程

#1.基础环境准备
[root@node1 ~]# yum install -y gcc make wget 

#2.下载源码包
[root@node1 ~]# wget http://nginx.org/download/nginx-1.15.12.tar.gz

#3.解压源码包, 并进入相应目录
[root@node1 ~]# tar xf nginx-1.15.12.tar.gz
[root@node1 ~]# cd nginx-1.15.12

#4.配置相关的选项,并生成Makefile
[root@node1 nginx-1.15.12]# ./configure --prefix=/soft/nginx-1.12.2

#5.将Makefile文件编译可执行二进制程序
[root@node1 nginx-1.15.12]# make

#6.将二进制文件拷贝至对应的目录中
[root@node1 nginx-1.15.12]# make install

源码编译报错信息处理

### 这些只是nginx的依赖库

checking for C compiler ... not found ./configure: error: C compiler cc is not found 
# yum -y install gcc gcc-c++ make


./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.
# yum install -y pcre-devel


./configure: error: the HTTP gzip module requires the zlib library.
You can either disable the module by using --without-
http_gzip_module option, or install the zlib library into the
system, or build the zlib library statically from the source with
nginx by using --with-zlib=<path> option. 
# yum -y install zlib-devel


./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL 
library into the system, or build the OpenSSL library statically
from the source with nginx by using --with-openssl=<path> option.
# yum -y install openssl-devel