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
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包的依赖性
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
第二章 基础网络服务搭建
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
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
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
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
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