模块8Linux的软件包管理

1.软件包管理介绍

Linux软件包管理(操作系统的软件包管理)

软件包管理的地位
软件包的管理在企业中是非常重要的,因为对于企业来说,可能需要频繁的安装软件,升级软件。
通过windows的软件管理来引出我们的Linux的软件管理.
windows安装软件,正确的渠道是从软件的官方网站下载软件包安装,(建议)
360安全卫士,腾讯电脑管家这种方式也可以安装软件。(给了一个所谓的软件仓库)
windows商店(建议)
Linux安装软件,正确的渠道是从软件的官方网站下载软件包安装(强烈建议)
涉及到一个开发相关的问题。开发一个软件就是写代码,写完代码将代码打包,就成为了一个软件的源码包,软件的源码是不能直接使用的,需要使用对应语言的编译器去将源代码编译成计算机能懂的语言(机器语言),一般就是二进(01010100101)
软件的发布者,或者说软件的发布厂商,都是将编译好的软件放到平台上,提供下载。这样的好处就是用户得到软件之后可以直接安装,不需要对软件的源码进行编译。
这样的好处就是用户不需要自己编译,因为编译软件对于普通用户来说难度太高,极容易出错。安装个qq需要2分钟,但是如果编译qq的源码可能需要超过2小时。

2.Linux的软件包管理概述

Linux的软件包管理,因为Linux的操作对象基本上都是专业人员,肯定比普通用户更了解软件。所以呢,我们在Linux.上进行软件安装,可以选择源码包的安装方式或者二进制的安装方式
源码包安装软件的好处就在于你可以更改源码,改成适合你的环境。另外一个源码包安装的好处就是源码包相比于现有的编译好的二进制包更新,功能更多。一般在生产环境,特别是功能类服务器用的多。

windows的二进制包的后缀名,最常见的就是exe ,msi,setup
我们的课程内容讲的是Linux的二进制包的安装方法
我从哪下载Linux的二进制包(官方)
我们的Linux分为多个发行版本,不同的发型版本对于软件包的管理命令或者管理方式是不同的。但是本质上几乎都是管理二进制的软件包。

Linux所有发行版本里面最流行的三个:
RHEL, CentOS, Fedora: 二进制包后缀名是以rpm结尾(RPM) yum( dnf)
openSUSE, SELS: 二进制包的后缀名是以rpm结尾(RPM) zypper
Debian, Ubuntu: 二进制包的后缀名是以deb结尾(dpkg) apt
RHEL能安装deb结尾的二进制包吗?
Ubntu能安装rpm结尾的二进制包吗?
本质上只要软件包的架构和cpu架构匹配就可以安装,而且都是二进制包。唯一不一样的就是可能需要额外安装匹配的软件包管理工具。
既然我们学习的是RHEL, CentOS, Fedora系列, 我们的主要课程之一就是学会使用rpm命令管理我们的软件包。

3.RPM包名称详解

学会看RPM包

当第一眼看见rpm包的时候就应该能了解到一些表面的信息.
我们的系统安装光盘就能看到rpm包
xfsprogs-4.19.0-2.el8.i686.rpm
xfsprogs-4.19.0-2.el8.x86_64.rpm
xfsprogs-devel-4.19.0-2.el8.i686.rpm
xfsprogs-devel-4.19.0-2.el8.x86_64.rpm
我们通过rpm包的名字来了解这个软件包的一些基础信息。
一般来说软件的名字就是第一个字段。
第二个字段表示版本号,版本号之前的,全是软件包的名字。
我们判断软件包的名字,是从版本号往前推算的。
所以看rpm包,是先看版本号,再看名字。
一般来说xfsprogs是rpm的主包(主要包),一定要安装主包,像是xfsprogs-devel就是rpm的辅包(辅助包)。辅助包要不要安装取决于主包是否依赖于辅助包。如果主包依赖辅助包里面的内容,那么如果想安装主包,就一定要安装辅助包。当然如果一个主包有N多个辅助包,那么如果安装主包,对于主包没有依赖的辅助包,就可以选择安装。
版本号后面的数字表示该软件的发行次数。
发行次数后面的“.el8”就表示该rpm包适用于哪个操作系统平台. (但并不绝对)
i686或者i386或者x86_64,这表示该软件包的位数。
一般软件包都是分为32位或64位的软件。
i686或者i386就表示这是32位的软件,
x86_64就表示这是64位的软件

如果只是x86,没有带后面的64,指的就是32位.
64位的操作系统能安装32位的软件和64位的软件
32位的操作系统只能安装32位的软件

yum-4.0.9.2-5.el8.noarch.rpm
noarch适用于任何cpu的架构,基本上其它的Linux发行版本也可以装上noarch就表示适用于任何架构

4.RPM包的安装和卸载

虚拟机挂载好光盘默认在sr0设备下cdrom快捷方式
ls -l /dev/cdrom 
lrwxrwxrwx 1 root root 3 7月  17 23:18 /dev/cdrom -> sr0
mkdir /iso
mount /dev/sr0 /iso/
ls /iso/BaseOS/Packages/ | wc -l
ls /iso/AppStream/Packages/ | wc -l
cd /iso/BaseOS/Packages/ && ls | grep xz
rpm -ivh xz-5.2.4-3.el8.x86_64.rpm

rpm的包安装
-i参数表示install安装
-v参数表示安装显示详细信息
-h参数表示显示进度
[root@localhost Packages]# rpm -ivh xz-5.2.4-3.el8.x86_64.rpm
Verifying...                          ################################# [100%]
准备中...                          ################################# [100%]
    软件包 xz-5.2.4-3.el8.x86_64 已经安装

卸载软件
-e参数表示卸载
-v参数表示详细信息
-h参数表示进度
[root@localhost Packages]# rpm -evh  xz
错误:依赖检测失败:
    xz 被 (已安裝) dracut-049-133.git20210112.el8.x86_64 需要
    xz 被 (已安裝) libreport-2.9.5-15.el8.x86_64 需要
    xz 被 (已安裝) libvirt-daemon-driver-qemu-6.0.0-29.module_el8.4.0+547+a85d02ba.x86_64 需要
    xz 被 (已安裝) sos-4.0-6.el8.noarch 需要
    /usr/bin/xz 被 (已安裝) file-roller-3.28.1-3.el8.x86_64 需要

5.RPM包的依赖介绍

rpm包是有依赖性的
安装的依赖性
树状依赖(从最底层开始安装)
装A软件,需要B软件,装B软件需要C软件
装C,装B,装A
环形依赖
装A软件,需要B软件,装B软件需要C软件,装C软件要求你装A软件
ABC-起装,就可以解决环型依赖
模块依赖
装A软件,需要B软件 里面的某个模块或函数,或函数库

卸载也有依赖
装A软件,需要B软件,装B软件需要C软件
装C,装B,装A
如果卸载C软件,会失败,他会提示你B软件需要C软件,所以C软件不能卸载.
依赖性问题是rpm包管理最恶心的问题,所以为了解决这个问题,我们有自动解决依赖的包管理工具。
yum (centos或rhel)
yellow dog updater manager

6.RPM命令基本操作

rpm的包名和包全名
包全名就是xz-5.2.4-3.el8.x86_ 64.rpm
包名就是xz
当rpm包被安装之后,rpm命令操作的都是包名
当rpm包没被安装,rpm命令操作的都是包全名

rpm -qi 包名    能查看已经安装的软件包的信息
rpm -qpi包全名  能查看未安装的软件包的信息

-q表示query查询
-i表示information
-p表示package 

rpm -qa   列出所有安装在系统中的rpm包
rpm -qa | grep name 筛选系统中是否有你想查看的软件包

[root@localhost Packages]# rpm -qa | grep net-tools
net-tools-2.0-0.52.20160912git.el8.x86_64

-1参数能列出rpm包安装后的文件路径
rpm -ql   包名
rpm -qpl  包全名
[root@localhost Packages]# rpm -ql xz
/etc/profile.d/colorxzgrep.csh
/etc/profile.d/colorxzgrep.sh
/usr/bin/unxz
/usr/bin/xz
/usr/bin/xzcat

-f参数表示根据文件的名字反推出该文件是由哪个rpm包装出来的
rpm -qf  包名所在路径位置

[root@localhost ~]# which rm
alias rm=‘rm -i‘
    /usr/bin/rm
[root@localhost ~]# ls -ld /usr/bin/rm
-rwxr-xr-x. 1 root root 72216 4月  26 2020 /usr/bin/rm
[root@localhost ~]# rpm -qf /usr/bin/rm
coreutils-8.30-8.el8.x86_64
[root@localhost ~]# rm -rf /usr/bin/rm
[root@localhost Packages]# cd /iso/BaseOS/Packages && rpm -ivh coreutils-8.30-8.el8.x86_64.rpm --force
Verifying...                          ################################# [100%]
准备中...                          ################################# [100%]
正在升级/安装...
   1:coreutils-8.30-8.el8             ################################# [100%]
[root@localhost Packages]# ls -ld /usr/bin/rm
-rwxr-xr-x 1 root root 72216 4月  26 2020 /usr/bin/rm

7.软件仓库的概念

yum管理rpm包

yellow dog updater manager
yum是一个工具,可以理解成是一个数据库客户端工具
yum的底层仍然是rpm,如果没有rpm的功能,那么yum也是个废物。
yum诞生的目的就是能自动的解决rpm的依赖性关系
库概念(repository->repo)
如何提高库的查找效率? (solution)
所谓软件仓库,包含两部分,第一部分 就是所有的软件包(rpm) ,第二部分指的就是所有的软件包的元数据。
元数据相当于所有软件包的名字和所有软件包的依赖关系。元数据文件远远小于整个仓库的文件大小。
yum就是访问软件仓库的元数据,进而根据元数据里面的记录自动解决软件包的依赖关系。

8.本地yum仓库搭建

yum并没有从0创建一个仓库的能力。仓库的本质是rpm包+repodata元数据
必须要现有rpm包和repodata元数据。yum才能所谓的“搭建”一个软件仓库
条件1: rpm包
条件2: repodata

光盘里自带了rpm包和repodata,所以我们可以通过光盘搭建软件仓库,所谓搭建软件仓库,就是将rpm包和repodata放到一个位置,然后yum指定repodata的路径。
yum的的配置文件是/etc/yum.conf
yum.conf做代理“绿色上网”需要配置
yum的仓库文件所在目录是/etc/yum.repos.d/
该目录是存放仓库文件的,仓库文件就是指向repodata所在路径的文件,仓库文件必须以.repo结尾.

[root@localhost ~]# df -hT | grep sr0
/dev/sr0            iso9660   9.2G  9.2G     0  100% /iso
[root@localhost ~]# ls /iso/
AppStream  BaseOS  EFI  images  isolinux  LICENSE  media.repo  TRANS.TBL

仓库文件的语法本地的软件仓库(可以分成两个.repo仓库来写)
[root@localhost yum.repos.d]# cd /etc/yum.repos.d/ && mkdir bk && mv *.repo  bk/
[root@localhost yum.repos.d]# cat local.repo 
[ergou]
name = ergou‘S repo
enable = yes
gpgcheck = 0
baseurl = file:///iso/BaseOS
#baseurl is a repodata localtion
#baseurl is not a repodata path

[goudan]
name = goudan‘S repo
enable = yes
gpgcheck = 0
baseurl = file:///iso/AppStream

查看仓库
[root@localhost yum.repos.d]# yum repolist 
仓库 id                                                  仓库名称
ergou                                                    ergou‘S repo
goudan                                                   goudan‘S repo

列出当前所有仓库里面的所有软件,并同时创建cache(缓存)
有cache之后,yum安装软件就可以补全
[root@localhost yum.repos.d]# yum list

清空yum的cache
[root@localhost yum.repos.d]# yum clean all
13 文件已删除

按Tab键不能补全
[root@localhost yum.repos.d]# yum install -y cor

手工生成cache
[root@localhost yum.repos.d]# yum makecache
ergou‘S repo                                                                           143 MB/s | 2.3 MB     00:00    
goudan‘S repo                                                                          155 MB/s | 6.5 MB     00:00    
元数据缓存已建立。

有cache,可以补全
[root@localhost yum.repos.d]# yum install -y coreutils-single.x86_64 

yum不指定仓库的情况下就是搜索所有仓库
搜索带有core关键字的rpm
[root@localhost yum.repos.d]# yum search core

搜索哪个rpm包提供rm命令
[root@localhost yum.repos.d]# yum provides rm

前提是你的仓库足够完善,你才能搜索到想要的东西

安装
yum install pkg- name

卸载
yum remove pkg- name

9.使用Internet上的软件仓库

前提虚拟机能上网ping www.baidu.com能通
百度搜索清华大学镜像站
红帽RHEL操作系统需要红帽订阅subscription-manager收费
rhel系统虽然能连接internet.上的软件仓库,但是安装会有问题。
rhel正解还是使用订阅命令去连接到红帽RHN,访问红帽的官方软件仓库
EPELCextra packages for enterprise linux) fedora的源


安装yum-utils使用yum-config-manager命令
[root@localhost yum.repos.d]# yum install -y yum-utils
[root@localhost yum.repos.d]# yum-config-manager --add-repo=https://mirrors.tuna.tsinghua.edu.cn/centos/8/cloud/x86_64/openstack-train/

1.第一种添加网络仓库
[root@localhost yum.repos.d]# cat qinghua.repo
[qinghua]
name = qinghua
enable = yes
gpgcheck = 0
baseurl = https://mirrors.tuna.tsinghua.edu.cn/centos/8/BaseOS/x86_64/os/

2.第二种添加网络仓库
下载完成需要添加一行gpgcheck=0
[root@localhost yum.repos.d]# cat mirrors.tuna.tsinghua.edu.cn_centos_8_cloud_x86_64openstack-train.repo
[mirrors.tuna.tsinghua.edu.cn_centos_8_cloud_x86_64openstack-train]
name=created by dnf config-manager from https://mirrors.tuna.tsinghua.edu.cn/centos/8/cloud/x86_64/openstack-train/
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/8/cloud/x86_64/openstack-train/
enabled=1
gpgcheck=0

[root@localhost yum.repos.d]# yum repolist
仓库 id 仓库名称
ergou ergou‘S repo
goudan goudan‘S repo
mirrors.tuna.tsinghua.edu.cn_centos_8_cloud_x86_64openstack-train created by dnf config-manager from https://mirrors.tuna.tsinghua.edu.cn/centos/8/cloud/x86_64/openstack-train/
qinghua

3.添加epel源
[root@localhost yum.repos.d]# yum-config-manager --add-repo=https://mirrors.tuna.tsinghua.edu.cn/epel/8/Everything/x86_64/ qinghua
添加仓库自:https://mirrors.tuna.tsinghua.edu.cn/epel/8/Everything/x86_64/

下载完成添加一行gpgcheck=0
[root@localhost yum.repos.d]# cat mirrors.tuna.tsinghua.edu.cn_epel_8_Everything_x8664.repo
[mirrors.tuna.tsinghua.edu.cn_epel_8_Everything_x8664]
name=created by dnf config-manager from https://mirrors.tuna.tsinghua.edu.cn/epel/8/Everything/x86_64/
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/8/Everything/x86_64/
enabled=1
gpgcheck=0

[root@localhost yum.repos.d]# yum repolist
仓库 id 仓库名称
ergou ergou‘S repo
goudan goudan‘S repo
mirrors.tuna.tsinghua.edu.cn_centos_8_cloud_x86_64openstack-train created by dnf config-manager from https://mirrors.tuna.tsinghua.edu.cn/centos/8/cloud/x86_64/openstack-train/
mirrors.tuna.tsinghua.edu.cn_epel_8_Everything_x8664 created by dnf config-manager from https://mirrors.tuna.tsinghua.edu.cn/epel/8/Everything/x86_64/
qinghua qinghua

## 10.局域网搭建YUM仓库并创建仓库元数据
**局域网软件仓库的搭建的必要性**
>订阅命令[root@localhost ~]# subscription-manager -h

```bash
同步internet上的软件仓库
1.搭建一个internet上的软件仓库
[root@localhost yum.repos.d]# cat train.repo 
[train]
name=train
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/8/cloud/x86_64/openstack-train/
enabled=1
gpgcheck=0

--rep指的是repo的名字
-p参数指的是同步的路径
[root@localhost ~]# mkdir /openstack-train
root@localhost ~]# reposync --repo train -p /openstack-train
[root@localhost openstack-train]# find ./ -name *.rpm -exec mv {} . \;

自己根据rpm包创建repodata

[root@localhost yum.repos.d]# yum install -y createrepo
[root@localhost ~]# createrepo -v /openstack-train/
[root@localhost ~]# ls /openstack-train/
repodata
XStatic-Angular-common-1.5.8.0-10.el8.noarch.rpm
XStatic-Magic-Search-common-0.2.5.1-12.el8.noarch.rpm

通过一个网络服务将repo共享出去
搭建web服务器

[root@localhost ~]# yum install -y httpd
[root@localhost conf.d]# vi /etc/httpd/conf.d/repo.conf 
<Virtualhost *:80>
     Servername 192.168.1.38
     DocumentRoot /openstack-train
<Directory /openstack-train>
Require all granted
Options Indexes FollowSymLinks
</Directory>
</Virtualhost>
[root@localhost conf.d]# mv welcome.conf welcome.conf.bak
[root@localhost conf.d]# systemctl restart httpd

模块8Linux的软件包管理

11.yum操作详解

装一些软件teamviewer
[root@localhost ~]# wget https://download.teamviewer.com/download/linux/teamviewer.x86_64.rpm
[root@localhost ~]# 
[root@localhost ~]# rpm  -ivh teamviewer.x86_64.rpm 
警告:teamviewer.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 0c1289c0: NOKEY
错误:依赖检测失败:
    libXss.so.1()(64bit) 被 teamviewer-15.19.3-0.x86_64 需要
    libminizip.so.1()(64bit) 被 teamviewer-15.19.3-0.x86_64 需要
    libxcb-icccm.so.4()(64bit) 被 teamviewer-15.19.3-0.x86_64 需要
    libxcb-image.so.0()(64bit) 被 teamviewer-15.19.3-0.x86_64 需要
    libxcb-keysyms.so.1()(64bit) 被 teamviewer-15.19.3-0.x86_64 需要
    libxcb-render-util.so.0()(64bit) 被 teamviewer-15.19.3-0.x86_64 需要

[root@localhost ~]# yum install -y teamviewer
上次元数据过期检查:3:43:44 前,执行于 2021年07月24日 星期六 13时54分36秒。
未找到匹配的参数: teamviewer
错误:没有任何匹配: teamviewer
[root@localhost ~]# yum list | grep -i qt
[root@localhost ~]# yum-config-manager --add-repo=https://mirrors.tuna.tsinghua.edu.cn/epel/8/Everything/x86_64/
添加仓库自:https://mirrors.tuna.tsinghua.edu.cn/epel/8/Everything/x86_64/
加一行gpgcheck=0
[root@localhost yum.repos.d]# yum repolist
[root@localhost ~]# mount /dev/sr0 /iso/
[root@localhost ~]# yum install -y teamviewer.x86_64.rpm
即使rpm包不在仓库里面,我们也可以通过yum安装,而且yum可以使用仓库中现有的rpm包解决不在库中的rpm包的依赖性

模块8Linux的软件包管理

yum安装本地的rpm包(rpm包不在软件仓库中)
[root@localhost ~]# yum install -y teamviewer.x86_64.rpm
[root@localhost ~]# yum history
ID     | 命令行                                                           | 日期和时间       | 操作           | 更改   
-----------------------------------------------------------------------------------------------------------------------
     8 | install -y teamviewer.x86_64.rpm                                 | 2021-07-24 17:58 | Install        |    7 EE
     7 | install -y httpd                                                 | 2021-07-24 13:29 | Install        |    9   
     6 | install -y createrepo                                            | 2021-07-24 13:25 | Install        |    3   
     5 | install -y yum-utils                                             | 2021-07-18 12:54 | I, U           |    3   
     4 | install -y nginx                                                 | 2021-07-17 23:19 | Install        |    8   
     3 | install ncurses-compat-libs                                      | 2021-07-17 12:32 | I, U           |    4   
     2 | install -y libaio-devel                                          | 2021-07-17 12:24 | Install        |    1   
     1 |                                                                  | 2021-01-31 16:48 | Install        | 1375 EE
[root@localhost repodata]# yum history info 8
事务 ID: 8
起始时间    : 2021年07月24日 星期六 17时58分27秒
起始 RPM 数据库     : 1380:a45100415c9ae75a96d2a5585ce4038be69a1d6e
结束时间       : 2021年07月24日 星期六 17时58分40秒 (13 秒)
结束 RPM 数据库      : 1387:4aa66608d85ff3156a58464b045b26beeead945b
用户           : root <root>
返回码    : 成功
Releasever     : 8
命令行   : install -y teamviewer.x86_64.rpm
注释        : 
已改变的包:
    安装 minizip1.2-1.2.11-24.el8.x86_64         @mirrors.tuna.tsinghua.edu.cn_epel_8_Everything_x86_64_
    安装 libXScrnSaver-1.2.3-1.el8.x86_64        @goudan
    安装 xcb-util-image-0.4.0-9.el8.x86_64       @goudan
    安装 xcb-util-keysyms-0.4.0-7.el8.x86_64     @goudan
    安装 xcb-util-renderutil-0.3.9-10.el8.x86_64 @goudan
    安装 xcb-util-wm-0.4.1-12.el8.x86_64         @goudan
    安装 teamviewer-15.19.3-0.x86_64             @@commandline
Scriptlet 输出:
   1 gtk-update-icon-cache: Cache file created successfully.

卸载不建议
[root@localhost repodata]# yum remove teamviewer
[root@localhost ~]# rpm -qa | grep team
teamd-1.31-2.el8.x86_64
libteam-1.31-2.el8.x86_64
NetworkManager-team-1.30.0-0.7.el8.x86_64
teamviewer-15.19.3-0.x86_64
[root@localhost ~]# rpm -evh teamviewer
准备中...                          ################################# [100%]
Removed /etc/systemd/system/multi-user.target.wants/teamviewerd.service.
Clearing assignments ...
done
正在清理/删除...
   1:teamviewer-15.19.3-0             ################################# [100%]
gtk-update-icon-cache: Cache file created successfully.
[root@localhost ~]# rpm -qa | grep team
teamd-1.31-2.el8.x86_64
libteam-1.31-2.el8.x86_64
NetworkManager-team-1.30.0-0.7.el8.x86_64
[root@localhost ~]# rpm -ivh teamviewer.x86_64.rpm
警告:teamviewer.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 0c1289c0: NOKEY
Verifying...                          ################################# [100%]
准备中...                          ################################# [100%]
正在升级/安装...
   1:teamviewer-15.19.3-0             ################################# [100%]
gtk-update-icon-cache: Cache file created successfully.
包不在仓库里面
[root@localhost ~]# yum remove teamviewer -y
[root@localhost ~]# yum history undo 9
上次元数据过期检查:0:33:24 前,执行于 2021年07月24日 星期六 17时58分23秒。
撤销事务 9,从 2021年07月24日 星期六 18时30分59秒
    Removed libXScrnSaver-1.2.3-1.el8.x86_64        @@System
    Removed minizip1.2-1.2.11-24.el8.x86_64         @@System
    Removed teamviewer-15.19.3-0.x86_64             @@System
    Removed xcb-util-image-0.4.0-9.el8.x86_64       @@System
    Removed xcb-util-keysyms-0.4.0-7.el8.x86_64     @@System
    Removed xcb-util-renderutil-0.3.9-10.el8.x86_64 @@System
    Removed xcb-util-wm-0.4.1-12.el8.x86_64         @@System
没有可用的软件包 teamviewer-15.19.3-0.x86_64。
错误:没有能够与之匹配的软件包

[root@localhost yum.repos.d]# yum-config-manager --add-repo=file:///teamviewer
添加仓库自:file:///teamviewer
[root@localhost yum.repos.d]# ls
bk  epel.repo  local.repo  qinghua.repo  reposync.sh  teamviewer.repo  train.repo

安装就可以
[root@localhost yum.repos.d]# yum history undo 9

如果某条命令被删除可以通过重新安装被解决
[root@localhost ~]# yum -y reinstall coreutils

更新软件
yum update

更新操作系统   
yum upgrade

yum group list

yum group install "Server with GUI"

[root@localhost yum.repos.d]# yum group install "Graphical Administration Tools"

yum问题

yum只能单线程安装软件
如果当前yum在安装软件(处于未完成状态),你就不能再另一个终端继续使用yum

因为linux是一个多用户的操作系统,你在yum操作,别人也可能也在yum操作。就有可能出现软件包安装冲突问题
A用户要安装AA软件-<C
B用户要安装BB软件-<C

在早期的RHEL版本,我们使用的yum命令是真正的yum操作
在RHEL8版本,我们使用所谓的yum命令,实际上是dnf命令 
[root@localhost ~]# ll -d /bin/yum
lrwxrwxrwx. 1 root root 5 1月  19 2021 /bin/yum -> dnf-3

模块8Linux的软件包管理

第二章 基础网络服务搭建

2-1 vnc服务器搭建

[root@localhost ~]# yum install -y tigervnc-server tigervnc
[root@localhost ~]# rpm -ql tigervnc-server

启动vncserver服务
[root@localhost ~]# vncpasswd 
Password: 123456
Verify: 123456
Would you like to enter a view-only password (y/n)? n
A view-only password is not used

https://www.realvnc.com/download/file/viewer.files/VNC-Viewer-6.21.406-Windows.exe

[root@localhost system]# vncserver 

WARNING: vncserver has been replaced by a systemd unit and is about to be removed in future releases.
Please read /usr/share/doc/tigervnc/HOWTO.md for more information.

New ‘localhost:4 (root)‘ desktop is localhost:4

Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/localhost:4.log

[root@localhost ~]# netstat -anpt |grep Xvnc
tcp        0      0 0.0.0.0:5901            0.0.0.0:*               LISTEN      7057/Xvnc           
tcp6       0      0 :::5901                 :::*                    LISTEN      7057/Xvnc      
[root@localhost ~]# netstat -anpt | grep 59

模块8Linux的软件包管理

模块8Linux的软件包管理

模块8Linux的软件包管理

2-2.web服务器搭建

[root@localhost ~]# yum install -y httpd
修改配置文件
[root@localhost ~]# echo "test" >> /var/www/html/index.html
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# systemctl enable httpd
[root@localhost ~]# curl 192.168.1.38
test

为什么是index.html
httpd的主配置文件是/etc/httpd/conf/httpd.conf 
 166 <IfModule dir_module>
    167     DirectoryIndex index.html
    168 </IfModule>

将上面的部分改成下面的内容,就可以让默认网页文件变成goudan.html
<IfModule dir_module>
    DirectoryIndex goudan.html
</IfModule>

[root@localhost html]# mv index.html goudan.html
当我们访问web服务器的根的时候
http://192.168.1.38
会默认检索web服务器根下面的默认网页文件,由于我们将默认网页文件更改成了goudan.html,所以如果web服务器的根下没有goudan.html就不会显示默认网页内容.

配置文件中
DocumentRoot "/var/www/html"
上面参数指定的就是web服务器的根目录

如果你想让你的web服务器提供一个下载文件的功能有Indexes参数
145     # for more information.
146     #
147     Options Indexes FollowSymLinks

模块8Linux的软件包管理

2-3 ftp服务器搭建

vsftpd -> ftp 默认21端口,20
[root@localhost html]# yum install -y vsftpd
配置文件所在位置/etc/vsftpd/vsftpd.conf 
12 anonymous_enable=YES
开启匿名用户连接
[root@localhost html]# systemctl restart vsftpd
[root@localhost pub]# pwd
/var/ftp/pub
[root@localhost pub]# touch 11 

模块8Linux的软件包管理

2-4 tftp服务器搭建

tftp 69 udp
生产环境中tftp是必备服务,tftp+dhcp+ftp/http/nfs
pxe+kickstart批量自动部署服务器操作系统
服务端:192.168.1.38
[root@localhost ~]# yum install -y tftp-server xinetd
[root@localhost ~]# rpm -ql tftp-server
[root@localhost ~]# systemctl restart tftp
[root@localhost ~]# netstat -anupt | grep 69
udp6       0      0 :::69                   :::*                                1/systemd 
[root@localhost tftpboot]# cat /usr/lib/systemd/system/tftp.service
[Unit]
Description=Tftp Server
Requires=tftp.socket
Documentation=man:in.tftpd

[Service]
ExecStart=/usr/sbin/in.tftpd -s /var/lib/tftpboot
StandardInput=socket

[Install]
Also=tftp.socket

[root@localhost tftpboot]# pwd
/var/lib/tftpboot
[root@localhost tftpboot]# touch 123

客户端:192.168.1.42客户端安装tftp
[root@localhost ~]# yum install -y tftp
[root@localhost system]# tftp 192.168.1.38
tftp> connect
(to) 192.168.1.38
tftp> get 123
tftp> quit

tftp不是用来传大文件的,适用于传输小文件

2-5.dhcp服务器搭建

安装DHCP服务
[root@localhost ~]# yum install -y dhcp-server
DHCP配置文件
[root@localhost ~]# vi /etc/dhcp/dhcpd.conf 
DHCP配置文件模板
[root@localhost ~]# rpm -ql dhcp-server| grep example
/usr/share/doc/dhcp-server/dhcpd.conf.example
/usr/share/doc/dhcp-server/dhcpd6.conf.example
[root@localhost ~]# cp /usr/share/doc/dhcp-server/dhcpd.conf.example /etc/dhcp/dhcpd.conf 
cp:是否覆盖‘/etc/dhcp/dhcpd.conf‘? y
[root@localhost ~]# cat /etc/dhcp/dhcpd.conf
subnet 1.1.1.0 netmask 255.255.255.0 {
  range 1.1.1.100 1.1.1.200;
  option domain-name-servers 114.114.114.114;
  option routers 1.1.1.1;
  default-lease-time 600;
  max-lease-time 7200;
}
[root@localhost ~]# ip a a 1.1.1.1/24 dev ens37
[root@localhost ~]# ip a show ens37
5: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:f8:f8:d0 brd ff:ff:ff:ff:ff:ff
    inet 1.1.1.1/24 scope global ens37
       valid_lft forever preferred_lft forever
[root@localhost ~]# systemctl restart dhcpd
[root@localhost ~]# netstat -anupt |grep 67
udp        0      0 0.0.0.0:67              0.0.0.0:*                           16482/dhcpd         
udp        0      0 0.0.0.0:67              0.0.0.0:*                           2486/dnsmasq 

另一台机器动态获取ip
[root@localhost ~]# nmcli connection add con-name dhcp ifname ens37  type ethernet
连接 "dhcp" (19d2c888-b1ce-4e0f-9440-c848e4bd68b5) 已成功添加。
[root@localhost ~]# nmcli connection up dhcp
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/5)
[root@localhost ~]# ip a show ens37 
5: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:81:f1:5b brd ff:ff:ff:ff:ff:ff
    inet 1.1.1.100/24 brd 1.1.1.255 scope global dynamic noprefixroute ens37
       valid_lft 570sec preferred_lft 570sec
    inet6 fe80::5427:2310:bb1e:90b1/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

在dhcp-server端
[root@localhost ~]# cat /var/lib/dhcpd/dhcpd
cat: /var/lib/dhcpd/dhcpd: 没有那个文件或目录
[root@localhost ~]# cat /var/lib/dhcpd/dhcpd.leases
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.3.6

# authoring-byte-order entry is generated, DO NOT DELETE
authoring-byte-order little-endian;

lease 1.1.1.100 {
  starts 1 2021/07/26 04:06:52;
  ends 1 2021/07/26 04:16:52;
  cltt 1 2021/07/26 04:06:52;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 00:0c:29:81:f1:5b;
  uid "\001\000\014)\201\361[";
}

第三章PXE+Kickstart

3-1.pxe介绍

预启动执行环境(Preboot Execution Environment, PXE) 也被称为预执行环境,提供了一种使用网络接口(Network Interface) 启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统。

3-2 pxe服务器上提供dhcp服务

rhel8-clone-test两块网卡,一块网卡桥接到我的物理网络,用作管理,可以ssh登录,地址是192.168.1.38
另一块网卡通过vmware的仅主机(vmnet1)连接,且vmnet1的dhcp关闭,这个网卡的地址是1.1.1.1/24

1.挂载光盘配置软件仓库
[root@localhost yum.repos.d]# mount /dev/sr0 /iso/
[root@localhost yum.repos.d]# df -hT /iso
文件系统       类型     容量  已用  可用 已用% 挂载点
/dev/sr0       iso9660  9.2G  9.2G     0  100% /iso
[root@localhost yum.repos.d]# cat local.repo 
[ergou]
name = ergou‘S repo
enable = yes
gpgcheck = 0
baseurl = file:///iso/BaseOS
#baseurl is a repodata localtion
#baseurl is not a repodata path
[goudan]
name = goudan‘S repo
gpgcheck = 0 
baseurl = file:///iso/AppStream
[root@localhost yum.repos.d]# yum repolist
2.安装dhcp服务端软件
[root@localhost ~]# yum install -y dhcp-server
3.编辑dhcp-server的配置文件
[root@localhost ~]# rpm -ql dhcp-server |grep example
[root@localhost ~]# cp /usr/share/doc/dhcp-server/dhcpd.conf.example /etc/dhcp/dhcpd.conf 
cp:是否覆盖‘/etc/dhcp/dhcpd.conf‘? y
[root@localhost ~]# cat /etc/dhcp/dhcpd.conf 
subnet 1.1.1.0 netmask 255.255.255.0 {
  range 1.1.1.100 1.1.1.200;
  option domain-name-servers 114.114.114.114;
  option routers 1.1.1.1;
  default-lease-time 600;
  max-lease-time 7200;
}
4.重启dhcp服务
[root@localhost ~]# systemctl restart dhcpd
[root@localhost ~]# systemctl enable dhcpd
[root@localhost ~]# netstat -anupt | grep dhcp
udp        0      0 0.0.0.0:67              0.0.0.0:*                           18406/dhcpd
5.关闭防火墙关闭selinux
[root@localhost ~]# systemctl disable firewalld --now
[root@localhost ~]# setenforce 0   
开启另外一台服务器,该服务器没有操作系统(有没有硬盘都可以),且只有一块网卡,该网卡接到vmware的vmnet1上

[root@localhost isolinux]# pwd
/iso/isolinux
[root@localhost isolinux]# ls
boot.cat  grub.conf   isolinux.bin  ldlinux.c32   libutil.c32  splash.png  vesamenu.c32
boot.msg  initrd.img  isolinux.cfg  libcom32.c32  memtest      TRANS.TBL   vmlinuz

模块8Linux的软件包管理

模块8Linux的软件包管理

模块8Linux的软件包管理

3-3pxe服务器提供tftp服务

搭建tftp服务器
1.安装tftp-server软件
[root@localhost isolinux]# yum install -y tftp-server
2.启动tftp服务器
[root@localhost isolinux]# systemctl enable tftp --now
[root@localhost isolinux]# netstat -anupt | grep 69
udp6       0      0 :::69                   :::*                                1/systemd 
[root@localhost isolinux]# rpm -ql tftp-server
根目录在/var/lib/tftpboot
[root@localhost ~]# cat /usr/lib/systemd/system/tftp.service
[Unit]
Description=Tftp Server
Requires=tftp.socket
Documentation=man:in.tftpd

[Service]
ExecStart=/usr/sbin/in.tftpd -s /var/lib/tftpboot
StandardInput=socket

[Install]
Also=tftp.socket

安装syslinux
[root@localhost ~]# yum install -y syslinux
[root@localhost ~]# find / -name pxelinux.0
/usr/share/syslinux/pxelinux.0
3.找到pxelinux.0文件,将这个文件放入/var/lib/tftpboot
[root@localhost ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
[root@localhost ~]# ls /var/lib/tftpboot/
pxelinux.0
4.修改dhcp服务器的配置文件
[root@localhost ~]cat /etc/dhcp/dhcpd.conf
subnet 1.1.1.0 netmask 255.255.255.0 {
  range 1.1.1.100 1.1.1.200;
  option domain-name-servers 114.114.114.114;
  option routers 1.1.1.1;
  default-lease-time 600;
  max-lease-time 7200;
  next-server 1.1.1.1;
  filename "pxelinux.0";
}
[root@localhost ~]# systemctl restart dhcpd
[root@localhost ~]# nmcli connection add con-name static ifname ens37 type ethernet ipv4.addresses 1.1.1.1/24 ipv4.method manual
[root@localhost ~]# nmcli connection up static 
[root@localhost ~]# ip a show ens37
5: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:f8:f8:d0 brd ff:ff:ff:ff:ff:ff
    inet 1.1.1.1/24 brd 1.1.1.255 scope global noprefixroute ens37
       valid_lft forever preferred_lft forever
    inet6 fe80::a1a4:a54c:2470:9621/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
dhcp服务器告诉dhcp客户端,如果你是pxe引导,那么tftp服务器的地址是1.1.1.1,你可以到tftp服务器上的根目录上下载pxelinux.0
[root@localhost ~]# cp /usr/share/syslinux/ldlinux.c32 /var/lib/tftpboot
5.创建pxelinux.cfg
该目录是pxe客户端在执行完pxelinux.0后会自动请求的一个目录,会请求该目录下的boot menu。
[root@localhost ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
[root@localhost ~]# cp -rf /usr/share/syslinux/* /var/lib/tftpboot/
cp:是否覆盖‘/var/lib/tftpboot/ldlinux.c32‘? y
cp:是否覆盖‘/var/lib/tftpboot/pxelinux.0‘? y
上一篇:c# post body文件上传 并下载文件


下一篇:【ASP.NET Web API教程】3.4 HttpClient消息处理器