# Centos7 软件包的管理与安装

## 软件包的管理
软件包的类型

rpm 二进制包------》已经使用GCC 编译后的 

tar 源码包-----》需要编译

RPM 概述：RPM 是 RPM Package Manager（RPM 软件包管理器）的缩写，这一文件格式名称虽然打上了 RedHat 的标志，但是其原始设计理念是开放式的，现在包括 OpenLinux、SUSE 以及 Turbo Linux 等 Linux 的 分发版本都有采用，可以算是公认的行业标准了。

## rpm 软件包的管理 rpm 包的获取方式

1)、Centos 系统镜像光盘

2)、网站 rpmfind.net

3)、比如安装 mysql、nginx 软件，我们可以去它的官方网站下载：http://www.mysql.com rpm 包格式的说明

    [root@exercise1 ~]# ls /mnt/Packages/zsh-5.0.2-28.el7.x86_64.rpm
    /mnt/Packages/zsh-5.0.2-28.el7.x86_64.rpm
    
    zsh     -5.        0.         2-        28.                       el7.             x86_64.rpm 
    
    软件名  主版本号   次版本号    修订      release(第几次发布版本)   操作系统版本     软件包是64位包
    #修订  指是第几次修改bug。   
    #发布  指的是：第几次发布。发布时，可能只是对软件安装的默认参数做了修改而没有其它改动。

## 安装 rpm 软件
RPM 工具使用分为安装、查询、验证、更新、删除等操作 

命令格式：rpm [参数] 软件包

参数：

-i     是install的意思， 安装软件包
-v   显示附加信息，提供更多详细信息 
-V   校验，对已经安装的软件进行校验 
<font color='red'>
-h   --hash   安装时输出####标记
</font>



**互动：rpm 使用时，什么情况下使用软件包全名(有.rpm)，什么时候使用软件包名？（无.rpm）**

<font color='red'>全名：在==安装和更新升级==时候使用</font>
<font color='red'>包名：对==已经安装过==的软件包进行操作时，比如查找已经安装的某个包，卸载包等  ，使用包名。它默认是去目录/var/lib/rpm下面进</font><font color='red'>行搜索。当一个rpm包安装到系统上之后,==安装信息通常会保存在本地的/var/lib/rpm/目录==下。</font>



## 从本地安装    

1.需要进行挂载(mount)

    [root@exercise1 ~]# mount /dev/cdrom /mnt/
    mount: /dev/sr0 写保护，将以只读方式挂载
    [root@exercise1 ~]# 
    
    或者
    
    [root@exercise1 ~]# mount /dev/sr0 /mnt/
    mount: /dev/sr0 写保护，将以只读方式挂载
    [root@exercise1 ~]# 
## 永久挂载与卸载临时挂载

    方法一：卸载挂载源
    [root@exercise1 ~]# umount /dev/cdrom   
    
    或
    
    [root@exercise1 ~]# umount /dev/sr0
    
    方法二：卸载挂载点
    [root@exercise1 ~]# umount /mnt

  



​    永久：
​    [root@exercise1 ~]# vim /etc/fstab
​    #添加如下：
​    /dev/cdrom /mnt iso9660 defaults        0 0



![mount1.png](https://s2.loli.net/2022/01/16/ILHFm43udy65xpQ.png)
![mount2.png](https://s2.loli.net/2022/01/16/UKEQYcOCzln5ADB.png)

2.开始安装

    [root@exercise1 ~]# rpm -ivh /mnt/Packages/zsh-5.0.2-28.el7.x86_64.rpm
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:zsh-5.0.2-28.el7                 ################################# [100%]
    [root@exercise1 ~]# cat /etc/shells 
    /bin/sh
    /bin/bash
    /sbin/nologin
    /usr/bin/sh
    /usr/bin/bash
    /usr/sbin/nologin
    /bin/zsh
    [root@exercise1 ~]# 

## 从网上下载直接安装 centos epel 扩展源
**安装 centos epel 扩展 yum 源**

    [root@exercise1 ~]# rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
    获取http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
    警告：/var/tmp/rpm-tmp.8hZUGV: 头V4 RSA/SHA256 Signature, 密钥 ID 352c64e5: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:epel-release-7-14                ################################# [100%]
    [root@exercise1 ~]# 


​    

<font color='red'>**注：epel 源是对 centos7 系统中自带的 base 源的扩展。**</font>
    

## rpm 查询功能

用法：rpm  -q （query） 常与下面参数组合使用

-a（all）   查询所有已安装的软件包

-f（file）系统文件名（查询系统文件所属哪个软件包），反向查询

-i   显示已经安装的 rpm 软件包信息，后面直接跟包名  

-l（list）   查询软件包中文件安装的位置

-p   <font color='red'>查询未安装软件包的相关信息 ，后面要跟软件的命名</font> 

-R 查询软件包的依赖性

    [root@exercise1 ~]# rpm -q zsh      --->查询指定的包是否安装
    zsh-5.0.2-28.el7.x86_64         


​    
​    [root@exercise1 ~]# rpm -qa         --->查询所有已安装包
​    open-vm-tools-10.1.5-3.el7.x86_64
​    grub2-common-2.02-0.64.el7.centos.noarch
​    kexec-tools-2.0.14-17.el7.x86_64
​    ……


​    
​    [root@exercise1 ~]# rpm -qa | grep vim      --->查询所有已安装包中带 vim 关键字的包
​    vim-filesystem-7.4.629-8.el7_9.x86_64
​    vim-enhanced-7.4.629-8.el7_9.x86_64
​    vim-common-7.4.629-8.el7_9.x86_64
​    vim-minimal-7.4.160-2.el7.x86_64
​    [root@exercise1 ~]# 


​    [root@exercise1 ~]# which find      #查看 find 命令的路径
​    /usr/bin/find
​    [root@exercise1 ~]# rpm -qf /usr/bin/find      #查询文件或命令属于哪个安装包
​    findutils-4.5.11-5.el7.x86_64
​ 


**查询已经安装的 rpm 包的详细信息或作用   <font color='red'>rpm -qi rpm包名</font>**

    [root@exercise1 ~]# rpm -qi vim-common-7.4.629-8.el7_9.x86_64
    Name        : vim-common
    Epoch       : 2
    Version     : 7.4.629
    Release     : 8.el7_9
    Architecture: x86_64
    Install Date: 2022年01月10日 星期一 08时49分49秒
    Group       : Applications/Editors
    Size        : 22155744
    License     : Vim
    Signature   : RSA/SHA256, 2020年12月18日 星期五 04时37分20秒, Key ID 24c6a8a7f4a80eb5
    Source RPM  : vim-7.4.629-8.el7_9.src.rpm
    Build Date  : 2020年12月16日 星期三 00时44分28秒
    Build Host  : x86-01.bsys.centos.org
    Relocations : (not relocatable)
    Packager    : CentOS BuildSystem <http://bugs.centos.org>
    Vendor      : CentOS
    URL         : http://www.vim.org/
    Summary     : The common files needed by any version of the VIM editor
    Description :
    VIM (VIsual editor iMproved) is an updated and improved version of the
    vi editor.  Vi was the first real screen-based editor for UNIX, and is
    still very popular.  VIM improves on vi by adding new features:
    multiple windows, multi-level undo, block highlighting and more.  The
    vim-common package contains files which every VIM binary will need in
    order to run.
    
    If you are installing vim-enhanced or vim-X11, you'll also need
    to install the vim-common package.



**针对没有安装的 RPM 包，要加参数：   -p**

    [root@home Packages]# rpm -qpi zip-3.0-11.el7.x86_64.rpm 
    警告：zip-3.0-11.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    Name        : zip
    Version     : 3.0
    Release     : 11.el7
    Architecture: x86_64
    Install Date: (not installed)
    Group       : Applications/Archiving
    Size        : 815173
    License     : BSD
    Signature   : RSA/SHA256, 2016年11月21日 星期一 05时04分58秒, Key ID 24c6a8a7f4a80eb5
    Source RPM  : zip-3.0-11.el7.src.rpm
    Build Date  : 2016年11月06日 星期日 00时49分55秒
    Build Host  : worker1.bsys.centos.org
    Relocations : (not relocatable)
    Packager    : CentOS BuildSystem <http://bugs.centos.org>
    Vendor      : CentOS
    URL         : http://www.info-zip.org/Zip.html
    Summary     : A file compression and packaging utility compatible with PKZIP
    Description :
    The zip program is a compression and file packaging utility.  Zip is
    analogous to a combination of the UNIX tar and compress commands and
    is compatible with PKZIP (a compression and file packaging utility for
    MS-DOS systems).
    
    Install the zip package if you need to compress files using the zip
    program.


​    
​    
    [root@exercise1 ~]# rpm -qpl   /mnt/Packages/zip-3.0-11.el7.x86_64.rpm      #查看 rpm 安装后， 将生成哪些文件
    /usr/bin/zip
    /usr/bin/zipcloak
    /usr/bin/zipnote
    /usr/bin/zipsplit
    /usr/share/doc/zip-3.0
    /usr/share/doc/zip-3.0/CHANGES
    /usr/share/doc/zip-3.0/LICENSE
    /usr/share/doc/zip-3.0/README
    /usr/share/doc/zip-3.0/README.CR
    /usr/share/doc/zip-3.0/TODO
    /usr/share/doc/zip-3.0/WHATSNEW
    /usr/share/doc/zip-3.0/WHERE
    /usr/share/doc/zip-3.0/algorith.txt
    /usr/share/man/man1/zip.1.gz
    /usr/share/man/man1/zipcloak.1.gz
    /usr/share/man/man1/zipnote.1.gz
    /usr/share/man/man1/zipsplit.1.gz
    [root@exercise1 ~]# rpm -qR yum-3.4.3-154.el7.centos.noarch      #查询软件包的依赖性
    /usr/bin/python
    config(yum) = 3.4.3-154.el7.centos
    cpio
    diffutils
    pygpgme
    pyliblzma
    python >= 2.4
    python(abi) = 2.7
    python-iniparse
    python-sqlite
    python-urlgrabber >= 3.10-8
    pyxattr
    rpm >= 0:4.11.3-22
    rpm-python
    rpmlib(CompressedFileNames) <= 3.0.4-1
    rpmlib(FileDigests) <= 4.6.0-1
    rpmlib(PayloadFilesHavePrefix) <= 4.0-1
    yum-metadata-parser >= 1.1.0
    yum-plugin-fastestmirror
    rpmlib(PayloadIsXz) <= 5.2-1
    [root@exercise1 ~]# 

## 查看软件包内容是否被修改

rpm -V 包名         

rpm -Vf 文件路径 

    [root@exercise1 ~]# which find
    /usr/bin/find
    [root@exercise1 ~]# rpm -qf /usr/bin/find
    findutils-4.5.11-5.el7.x86_64
    [root@exercise1 ~]# rpm -Vf /usr/bin/find      #检查具体文件，没问题所以没有结果输出
    [root@exercise1 ~]# echo aaa >> /usr/bin/find
    [root@exercise1 ~]# rpm -Vf /usr/bin/find
    S.5....T.    /usr/bin/find
    [root@exercise1 ~]# rpm -V findutils      #检查包
    S.5....T.    /usr/bin/find


注：如果出现的全是点，表示测试通过 出现下面的字符代表某测试的失败:

5 — MD5 校验和是否改变，你也看成文件内容是否改变

S — 文件长度，大小是否改变     

L — 符号链接，文件路径是否改变 

T — 文件修改日期是否改变         

D — 设备

U — 用户，文件的属主 G — 用户组

M — 模式 (包含讲可和文件类型) 

? — 不可读文件

再后面的 c 文件名,它表示的是文件类型

c 配置文件 

d 普通文件

g 不该出现的文件，意思就是这个文件不该被这个包所包含l 授权文件（license file） r 描述文件

---
实战：<font color='red'>查看系统中所有的 rpm 包及安装的文件有没有被黑客修改</font>

    [root@exercise1 ~]# rpm -Va > /opt/rpm_check.txt
    [root@exercise1 ~]# cat /opt/rpm_check.txt 
    .......T.  c /etc/bashrc
    S.5....T.  c /root/.bashrc
    S.5....T.  c /etc/sysconfig/authconfig
    S.5....T.    /usr/bin/find
    ....L....  c /etc/pam.d/fingerprint-auth
    ....L....  c /etc/pam.d/password-auth
    ....L....  c /etc/pam.d/postlogin
    ....L....  c /etc/pam.d/smartcard-auth
    ....L....  c /etc/pam.d/system-auth
    遗漏     /var/run/wpa_supplicant
    [root@exercise1 ~]# 

\> # 这个> 表示标准输出重定向。 将 rpm -qa 输出到屏幕上的信息重定向到 rpm_check.txt 文件中。 在文件中加一下这个参数描述
注： 检验时参考了 <font color='red'>/var/lib/rpm </font> 目录下的 rpm 数据库信息

## rpm 包卸载和升级

用法：rpm -e (erase) 包名

    [root@exercise1 ~]# rpm -qa zsh
    zsh-5.0.2-28.el7 .x86 64
    [root@exercise1 ~]# rpm -e zsh 
    [root@exercise1 ~]#
    [root@exercise1 ~]# rpm -qa zsh
    参数： --nodeps 忽略依赖，建议在卸载时不要用 rpm 去卸载有依赖关系的包，应该用yum 
    [root@exercise1 ~]# rpm -e --nodeps lrzsz
    
    升级：
    [root@exercise1 ~]# rpm -Uvh /mnt/Packages/lrzsz-0.12.20-36.el7.x86_64.rpm      #因为升级时
    会有一些依赖包要解决。 所以一般我们使用yum update 包   来升级。
     
    例：解决 rpm 依赖关系：
    [root@exercise1 ~]# rpm -ivh vim-common-7.4.160-2.el7.x86_64.rpm
    警告：vim-common-7.4.160-2.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    错误：依赖检测失败：
    	vim-filesystem 被 vim-common-2:7.4.160-2.el7.x86_64 需要
    [root@exercise1 ~]# rpm -ivh vim-filesystem-7.4.160-2.el7.x86_64.rpm
    [root@exercise1 ~]# rpm -ivh vim-common-7.4.160-2.el7.x86_64.rpm

## YUM的使用
yum （全称为 Yellow dog Updater, Modified）是一个前端软件包管理器。基于 RPM 包管理，能够从指定 的服务器自动下载 RPM 包并且安装，可以<font color='red'>自动处理依赖性关系，并且一次安装所有依赖的软体包 </font>，无须繁琐地一次
次下载、安装。yum 提供了查找、安装、删除某一个、一组甚至全部软件包的命令，而且命令简洁而又好记

YUM ：解决依赖关系问题，自动下载软件包，它是基于 C/S 架构

    C=client           S=ftp\http\file

**yum工具运行的日志     /var/log/yum.log**

## 配置本地yum源

**1.挂载镜像：**

先确定虚拟机光驱中有加载系统镜像
![yum.png](https://s2.loli.net/2022/01/16/HGNkVKPBwc1bXh6.png)
![yum2.png](https://s2.loli.net/2022/01/16/VWjqufxsvbXJy4N.png)


    [root@exercise1 ~]# mount /dev/cdrom /mnt/ 
    [root@exercise1 ~]# ls /mnt/
    CentOS_BuildTag  EULA  images    LiveOS    repodata              RPM-GPG-KEY-CentOS-Testing-7
    EFI              GPL   isolinux  Packages  RPM-GPG-KEY-CentOS-7  TRANS.TBL
    [root@exercise1 ~]# 

**2.配置 yum 源文件：**

    [root@exercise1 ~]# mkdir /etc/yum.repos.d/bak   
    [root@exercise1 ~]# mv /etc/yum.repos.d/* /etc/yum.repos.d/bak   #把原来的.repo文件放在同一个目录下
    [root@exercise1 ~]# ll /etc/yum.repos.d/bak/
    总用量 36
    -rw-r--r--. 1 root root 1664 8月  30 2017 CentOS-Base.repo
    -rw-r--r--. 1 root root 1309 8月  30 2017 CentOS-CR.repo
    -rw-r--r--. 1 root root  649 8月  30 2017 CentOS-Debuginfo.repo
    -rw-r--r--. 1 root root  314 8月  30 2017 CentOS-fasttrack.repo
    -rw-r--r--. 1 root root  630 8月  30 2017 CentOS-Media.repo
    -rw-r--r--. 1 root root 1331 8月  30 2017 CentOS-Sources.repo
    -rw-r--r--. 1 root root 3830 8月  30 2017 CentOS-Vault.repo
    -rw-r--r--. 1 root root 1358 9月   5 01:37 epel.repo
    -rw-r--r--. 1 root root 1457 9月   5 01:37 epel-testing.repo
    [root@exercise1 ~]# 


​    
​    [root@exercise1 ~]# vim /etc/yum.repos.d/local.repo   #必须以.repo结尾，插入以下内容
​    [local]
​    name=local
​    baseurl=file:///mnt
​    enable=1
​    gpgcheck=0
​    gpgkey=file:///mnt/RPM-GPG-KEY-CentOS-7
​    
​    [root@exercise1 ~]# yum clean all  #清空一下 yum 缓存
​    [root@exercise1 ~]# yum list       #查看列表
​    [root@exercise1 ~]# yum repolist   #显示仓库，统计各个仓库安装包数量
​    已加载插件：fastestmirror
​    Loading mirror speeds from cached hostfile
​    源标识                                                        源名称                                                       状态
​    loacl                                                         local                                                        3,894
​    repolist: 3,894

**==注:==**

[local]                       <font color='red'>#yum 源名称，在本服务器上唯一的，用来区分不同的 yum 源</font>

name= local            <font color='red'>#对 yum 源描述信息</font>

baseurl=file:///mnt      <font color='red'>#yum 源的路径,提供方式包括 FTP(ftp://...)、 HTTP(http://...)、本地(file:///...光盘挂载目录所在的位置）</font>

enabled=1                     <font color='red'>#为 1 ，表示启用 yum 源；0 为禁用，若不设置，默认开启</font>

gpgcheck=0                  <font color='red'>#为 1 ，使用公钥检验 rpm 包的正确性；0 为不校验</font>

gpgkey=file:///mnt/RPM-GPG-KEY-CentOS-7   <font color='red'>#指定进行 rpm 校验的公钥文件地址</font>



安装vim 

```
[root@home yum.repos.d]# yum install vim
```







## 下载命令

wget、curl

rz、sz

```
wget下载资源，并且指定路径，同时指定文件名称 				#如果下载时慢，可用迅雷下载完后，再上传liunx
-O：另存为：

curl是用来获取网页的源码信息的
-o:另存为；
```



sz下载刚才的文件

```
语法：
sz  文件的绝对路径，或相对路径；
只可以是文件，不可以是文件夹；
问题：
1.不支持超过4个G的文件；
2.不支持断点续传；
3.如果必须需要文件夹下载到本地，需要先压缩
```

rz是将windows的内容上传到liunx服务器；

```
1.直接将文件拖进去；
2.同样只可以是文件，不可以是文件夹 
3.如果必须需要文件夹下载到本地，需要先压缩
```





## 网络 yum 源

repo文件是Linux中yum源（软件仓库）的配置文件，通常一个repo文件定义了一个或者多个软件仓库的细节内容，例如我们将从哪里下载需要安装或者升级的软件包，repo文件中的设置内容将被yum读取和应用！

Centos 7 配置网络 yum 源

下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/

可以选择[网易](http://mirrors.163.com/.help/CentOS7-Base-163.repo)的镜像源:http://mirrors.163.com/.help/CentOS7-Base-163.repo 或者是[阿里源](https://mirrors.aliyun.com/repo/Centos-7.repo)镜像 https://mirrors.aliyun.com/repo/Centos-7.repo
![centos.png](https://s2.loli.net/2022/01/16/ckyNi8lWCew4I1d.png)

    [root@exercise1 ~]# wget -O /etc/yum.repos.d/Centos-7.163.repo  http://mirrors.163.com/.help/CentOS7-Base-163.repo
    
    或者


​    
​    [root@exercise1 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
​    --2022-01-16 13:51:47--  https://mirrors.aliyun.com/repo/Centos-7.repo
​    正在解析主机 mirrors.aliyun.com (mirrors.aliyun.com)... 119.147.41.242, 121.9.246.111, 113.113.101.248, ...
​    正在连接 mirrors.aliyun.com (mirrors.aliyun.com)|119.147.41.242|:443... 已连接。
​    已发出 HTTP 请求，正在等待回应... 200 OK
​    长度：2523 (2.5K) [application/octet-stream]
​    正在保存至: “/etc/yum.repos.d/CentOS-Base.repo”
​    
​    100%[===================================================================================================================>] 2,523       --.-K/s 用时 0s      
​    
​    2022-01-16 13:51:47 (898 MB/s) - 已保存 “/etc/yum.repos.d/CentOS-Base.repo” [2523/2523])
​    
    [root@exercise1 ~]# ll /etc/yum.repos.d/
    总用量 8
    drwxr-xr-x. 2 root root  229 1月  16 13:31 bak
    -rw-r--r--. 1 root root 2523 12月 26 2020 CentOS-Base.repo
    -rw-r--r--. 1 root root   99 1月  16 13:40 local.repo
    [root@exercise1 ~]# 
    
    #wget下载文件，-O 将wget下载的文件，保存到指定的位置，保存时可以重新起一个名字，或者直接写一个要保存的路径，这样还用原来的文件名。需要yum安装一下wget


​    
​    #查看/etc/yum.repos.d/CentOS-Base.repo
​    [root@exercise1 ~]# vim /etc/yum.repos.d/CentOS-Base.repo
​    会看到其中一个仓库baseurl：
​    baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
​        http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
​        http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
​        
​    #注：$releasever 系统的版本的值等于操作系统版本
​    [root@exercise1 ~]# cat /etc/centos-release
​    CentOS Linux release 7.4.1708 (Core) 
​    [root@exercise1 ~]# 

$basearch 等于：x86_64

排错： 如果下载 Centos-7.repo 后，不能用

解决：打开阿里云链接：http://mirrors.aliyun.com/centos/ 找到 centos7 最新版本号，如：

    找到  7/ or 7.4.1708(本人使用系统版本) ==> x86_64 ==> Packages ==> 把需要的rpm包下载放进之前/etc/yum.repos.d/bak/下
    
    [root@localhost ~]# yum clean all  #清空一下 yum 缓存
    [root@localhost ~]# yum list          #查看列表

## yum 使用

**请记住我们的世界里只有<font color='red'>upgrade!!!</font>**

**yum 常用操作：**

    [root@localhost ~]# yum list         #罗列各个仓库安装包
    [root@localhost ~]# yum repolist      #统计各个仓库安装包数量    
    [root@localhost ~]# yum install -y httpd     #安装软件包， -y 安装过程需要询问的都默认为yes
    [root@localhost ~]# yum -y update      #升级软件包，改变软件设置和系统设置,系统版本内核都升级(高危操作，慎用)
    [root@localhost ~]# yum -y upgrade     #升级软件包，不改变软件设置和系统设置，系统版本升级，内核不改变 
    [root@localhost ~]# yum provides /usr/bin/find   #查看命令是哪个软件包安装的
    [root@localhost ~]# yum -y remove   包名      #卸载包
    [root@localhost ~]# yum search keyword     #按关键字搜索软件包
    [root@localhost ~]# yum info   httpd      #查询 rpm 包作用
    [root@localhost ~]# yum history              #查看历史

**yum 报错，注意的几个小问题：**

**1、确定光盘是否链接，光盘是否挂载**

**2、配置文件中格式是否正确，字母，符号有没有少写,挂载点和配置文件中设置的是否一致**

**3、网络源需要联网，操作和 RPM 类似，只是会自动安装依赖项。**



## yum 安装开发工具软件包组

    # yum grouplist     #查看有哪些软件包组 
    语法：yum groupinstall  groupname
    yum grouplist   #显示中文，如果想变成英文，则执行以一下命令 
    [root@localhost ~]# echo $LANG
    zh CN . UTF-8
    [root@localhost ~]# LANG=en_US.UTF-8 
    [root@localhost ~]# yum grouplist
     
    测试：
    [root@localhost ~]# yum remove gcc   -y      #卸载开发工具软件组中的 gcc 包
    [root@localhost ~]# yum groupinstall 'Development tools'   -y   #安装开发工具软件包组，安装这
    组软件包时，把 gcc 再安装上了



## 实战：创建本地yum仓库    

#### 下载rpm包到本地

#### 使用阿里云的镜像仓库来同步到本地

**1.使用reposync来进行同步阿里云镜像**

reposync命令是一个python脚本。包含在yum-utils包中。

因此，我们如果要使用reposync命令的时候，需要安装yum-utils包。

使用以下命令：yum install  -y  yum-utils

reposync -r 仓库名（举例为base） -p 目标目录



    #在主机exercise1操作
    [root@exercise1 opt]# yum install  -y  yum-utils
    [root@exercise1 ~]# yum repolist   # 来查看各仓库名
    已加载插件：fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirrors.aliyun.com
     * extras: mirrors.aliyun.com
     * updates: mirrors.aliyun.com
    源标识                                           源名称                                                                   状态
    base/7/x86_64                                    CentOS-7 - Base - mirrors.aliyun.com                                     10,072
    extras/7/x86_64                                  CentOS-7 - Extras - mirrors.aliyun.com                                      500
    loacl                                            local                                                                     3,894
    updates/7/x86_64                                 CentOS-7 - Updates - mirrors.aliyun.com                                   3,295
    repolist: 17,761
    [root@exercise1 ~]# 
    
    [root@exercise1 ~]# mkdir /opt/yum   # 本地仓库目录
    [root@exercise1 ~]# reposync -r extras -p /opt/yum/   #此时，就将镜像仓库extras(500个rpm)下载到了本地

![extras.png](https://note-1308251438.cos.ap-guangzhou.myqcloud.com/typora/202207051231089.png)


**2.可以只把需要的rpm包下载到本地**

使用yum命令加上参数

--downloadonly：只下载

--downloaddir：指定下载目录

    #在主机exercise1操作
    [root@teach opt]#yum install zlib-devel.i686  --downloadonly --downloaddir=/opt/yum/extras/Packages/

#### 生成yum仓库数据文件信息(repodata信息)

**1.createrepo生成repodata信息**
    

    #在主机exercise1操作
    [root@exercise1 yum]# yum install -y createrepo   #需要yum安装creatrrepo
    [root@exercise1 yum]# createrepo /opt/yum/   #使用完成后会在/opt/yum/目录里面生成repodata，这个文件里面存放的就是仓库的各项信息

**2.检查本地仓库信息是否正常**

1)： 配置本地yum仓库

    #在主机exercise1操作
    [root@exercise1 yum]# vim /etc/yum.repos.d/local.repo    #在原来的基础上添加多一个local2仓库
    [local2]
    name=local2
    baseurl=file:///opt/yum
    enabled=1
    gpgcheck=0
    
    [root@exercise1 ~]# yum clean all   #清缓存
    [root@exercise1 ~]# yum list   #罗列各个仓库安装包
    [root@exercise1 ~]# yum repolist   #统计各个仓库安装包数量  

2)： 检查本地仓库信息

    [root@exercise1 ~]# yum repoinfo local   # 输出正常表示可以进行正常使用

#### 配置ftp服务，提供局域网下载

    #在主机exercise1操作
    [root@exercise1 ~]# yum install -y vsftpd
    [root@exercise1 ~]# systemctl stop firewalld   #关闭防火墙
    [root@exercise1 ~]# systemctl disable firewalld		#关闭开机自启
    [root@exercise1 ~]# setenforce 0   #临时关闭selinux安全策略
    [root@home ~]# vim /etc/selinux/config			#永久关闭selinux安全策略
    修改：SELINUX=enforcing 
    为：SELINUX=disabled
    [root@exercise1 ~]# systemctl start vsftpd
    [root@exercise1 ~]# mv /opt/yum/ /var/ftp/

<font color='red'>默认主目录/var/ftp=ftp://主机IP</font>

#### 测试局域网其他机器是否能够访问

在另一台机上执行exercise2

    [root@exercise2 ~]# vim /etc/yum.repos.d/local.repo 
    #在原来的基础上添加多一个local3仓库
    [local3]
    name=local3
    baseurl=ftp://192.168.119.142/yum
    enabled=1
    gpgcheck=0
    
    [root@exercise2 ~]# yum repolist
    已加载插件：fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirrors.aliyun.com
     * extras: mirrors.aliyun.com
     * updates: mirrors.aliyun.com
    源标识                                           源名称                                                                   状态
    base/7/x86_64                                    CentOS-7 - Base - mirrors.aliyun.com                                     10,072
    extras/7/x86_64                                  CentOS-7 - Extras - mirrors.aliyun.com                                      500
    local                                            local                                                                     3,894
    local3                                           local3                                                                      500
    updates/7/x86_64                                 CentOS-7 - Updates - mirrors.aliyun.com                                   3,295
    repolist: 18,261
    [root@exercise2 ~]# 
    #可以连通，证明可以正常使用

**<font color='red'>ftp://ip地址/yum  ==> /var/ftp/yum</font>**

#### 本地yum仓库更新

当本地仓库有其他包加入或者同步网络yum源的时候有变动，就需要更新本地yum仓库

在exercise1执行：

reposync -r 仓库名 -p /opt/yum # 同步并更新 

createrepo --update /opt/yum  # 更新repodata信息 

yum clean all && yum repolist # 更新缓存

在exercise2执行：

yum clean all && yum repolist # 更新缓存







​    

## 源码安装 nginx

1. 编译环境如 gcc 和 gcc-c++编译器，make


    yum -y install gcc gcc-c++ make zlib-devel pcre pcre-devel openssl-devel      #pcre: 支持正则表达式，地址重写 rewrite

2. 准备软件   ： nginx1.18  去官网(http://nginx.org/en/download.html)复制对应版本的下载链接
   

    [root@localhost ~]# cd /opt
    [root@exercise1 opt]# wget https://nginx.org/download/nginx-1.18.0.tar.gz
    [root@exercise1 opt]# tar -zxvf nginx-1.18.0.tar.gz
    [root@exercise1 opt]# cd nginx-1.18.0


3. 部署 Nginx

    **安装路径为--prefix                /usr/local/nginx**
    
    **用户组为  --user  --group      nginx**
    
    **指定配置文件 --conf-path       /etc/nginx/nginx.conf**
    
    **指定错误日志路径--error-log-path    /var/log/nginx/error.log**
    
    **指定访问日志路径--http-log-path    /var/log/nginx/access.log**
    
    **--with-threads                     enable thread pool support**
    
    **--with-http_ssl_module 启用ngx_http_ssl_module支持（使支持https请求）**
    
    **--with-http_realip_module 启用ngx_http_realip_module支持（这个模块允许从请求标头更改客户端的IP地址值，默认为关）**
    
    **--with-http_image_filter_module 启用ngx_http_image_filter_module支持（传输JPEG/GIF/PNG 图片的一个过滤器）**
    
    **--with-http_sub_module 启用ngx_http_sub_module支持（允许用一些其他文本替换nginx响应中的一些文本）**
    
    **--with-http_flv_module 启用ngx_http_flv_module支持（提供寻求内存使用基于时间的偏移量文件）**
    
    **--with-http_gzip_static_module 启用ngx_http_gzip_static_module支持（在线实时压缩输出数据流）**
    
    **--with-http_gunzip_module          enable ngx_http_gunzip_module**
    
    **--with-http_stub_status_module 启用ngx_http_stub_status_module支持（获取nginx自上次启动以来的工作状态）**
    
    **--with-http_v2_module              enable ngx_http_v2_module**    
    
    #根据官网对应文档(http://nginx.org/en/docs/configure.html)来查看对应参数进行预编译
    [root@exercise1 nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-threads --with-http_ssl_module --with-http_realip_module --with-http_image_filter_module --with-http_sub_module --with-http_flv_module --with-http_gzip_static_module --with-http_gzip_static_module --with-http_gunzip_module --with-http_stub_status_module --with-http_v2_module

其中需要解决依赖，当不知道依赖包完整名称是什么的时候可以来这里找一下 https://pkgs.org/  ==> 宝藏网站，利用它查找包

    [root@exercise1 nginx-1.18.0]# make -j 4   #使用-j 4 指定 4 核心 CPU 编译，提升速度
    [root@exercise1 nginx-1.18.0]# make install

**<font color='red'>详解源码安装 3 把斧</font>**

    # ./configure
    ./configure --help      #可以提供预编译支持帮助
    a. 指定安装路径，例如 --prefix=/usr/local/nginx
    b. 启用或禁用某项功能, 例如 --enable-ssl, --disable-filter  --with-http_ssl_module
    c. 和其它软件关联，例如--with-pcre
    d. 检查安装环境，例如是否有编译器 gcc ，是否满足软件的依赖需求 
    最终生成：Makefile
    #make -j 4          #按 Makefile 文件编译，可以使用-j 4 指定 4 核心 CPU 编译，提升速度
    #make install     #按 Makefile 定义的文件路径安装
    #make   uninstall  #按 Makefile 定义的文件路径删除
    # make clean //清除上次的 make 命令所产生的 object 和 Makefile 文件。使用场景：当需要重新执行 configure 时，需要执行 make clean

## 删除源码包

安装完，删除：   <font color='red'>make   uninstall</font>

有时删除不干净，所以建议大家安装时，在 configure 步骤添加一个： --prefix   参数。这样删除或备份时， 直接对删除--prefix 指定的安装目录操作就可以了。

**实战 2 ：源码编译出错的 5 种完美解决方法**
常见解决方法：

共==5==种方法

    方法 1：[root@exercise1 ~]# rpm -ivh gcc^C     #按两下 tab 键。 一般情况，ext2fs 就是 要安装的软件包的名字开头。如果存在 自动补全
    方法 2：[root@exercise1 ~]# ls *gcc*     #查找完整关键字 
    方法 3：[root@exercise1 ~]# ls *cc*      #查找部分关键字
方法 4:   终极大招
https://pkgs.org/
![pkgs.png](https://s2.loli.net/2022/01/16/j1gC5YJLMyn2Xew.png)

    方法 5:   使用 yum 去搜索
    [root@exercise1 ~]# yum search gcc 

**总结,软件安装方法特点：**                                                                                                                 
**rpm ＋yum ：方便，软件版本低。稳定性好、管理方便。性能稍差。**

**源码编译安装：麻烦，软件版本新，可以定制。稳定性稍差、管理稍差。性能好。**

**源码编译安装：主要是安装 LAMP 或 LNMP 架构时，我们会用**

