Linux虚拟机系统化部署母盘流程
为什么要系统化部署母盘?
为了后续使用更加方便(直接克隆母盘即可得一台新虚拟机),省时间,好管理。
实验母盘目标:
- vim个性化
- 软件仓库要配好(本地、网络、第三方、源码)
- 网络配置(后续节点实验机IP平凡变动,用脚本配)
- selinux、firewalld要关闭
1. vim个性化
[root@server ~]# vim /usr/bin/my_script/vimset.sh
#!/bin/bash # 在vim全局配置文件中追加个性化设置 cat >> /etc/vimrc <<EOF set tabstop=4 set softtabstop=4 set shiftwidth=4 set backspace=2 set nu set hlsearch set selection=exclusive set selectmode=mouse,key EOF
[root@server ~]# chmod +x /usr/bin/my_script/vimset.sh
2. 软件仓库配置
配置思路:
1.使用mount命令挂载本地光盘映像(临时挂载、开机自启动挂载、开机执行一下mount命令),不建议弄开机自启动挂载,即写再/etc/fstab里面写mount,写错了开机还会起不来
2.编写自动配置仓库文件脚本(测试好后可以把/etc/yum.repos.d/下所有仓库配置文件删了,母盘能省空间就尽量省空间,克隆出去的节点不会有赘余文件)
开机后挂载光盘映像
[root@localhost ~]# vim /etc/rc.d/rc.local mount /dev/cdrom /media [root@localhost ~]# chmod +x /etc/rc.d/rc.local [root@localhost ~]# vim /usr/bin/my_script/swset.sh
配置仓库脚本
能运行的脚本
#!/bin/bash
# 本脚本只做了本地光盘映像和阿里云的软件仓库
# 使用方式:脚本 Local/Aliyun
[ $1 -ne "Local" ]
grep $1 -r /etc/yum.repos.d/ | awk -F : '{system("rm -rf " $1)}'
cat > /etc/yum.repos.d/$1.repo <<EOF
[$1AppStream]
name=$1.appstream
baseurl=file:///media/AppStream
gpgcheck=0
enable=1
[$1BaseOS]
name=$1.baseos
baseurl=file:///media/BaseOS
gpgcheck=0
enable=1
EOF
:
grep $1 -r /etc/yum.repos.d/ | awk -F : '{system("rm -rf " $1)}'
cat > /etc/yum.repos.d/$1.repo <<EOF
[$1AppStream]
name=$1.appstream
baseurl=https://mirrors.aliyun.com/centos-stream/9-stream/AppStream/x86_64/os/
gpgcheck=0
enable=1
[$1BaseOS]
name=$1.baseos
baseurl=https://mirrors.aliyun.com/centos-stream/9-stream/BaseOS/x86_64/os/
gpgcheck=0
enable=1
EOF
dnf repolist修改后比较直观的脚本
#!/bin/bash
# 本脚本用于配置本地光盘和阿里云的软件仓库,要想再配其他的软件仓库在更改脚本
# 使用方式:“脚本名 Local” 或 “脚本名 Aliyun”
# 这个函数用于判断参数并返回对应标识
judge_sw() {
local judgment="$1"
if [ "$judgment" = "Local" ]; then
return 0
elif [ "$judgment" = "Aliyun" ]; then
return 1
else
# 其他无效参数返回2(后续要增加仓库再改)
return 2
fi
}
# 此函数用于生成仓库文件
software_warehouse() {
local repo_name="$1"
local appstream_url="$2"
local baseos_url="$3"
# 安全删除旧的同名仓库文件(避免误删其他文件)
if [ -f "/etc/yum.repos.d/${repo_name}.repo" ]; then
rm -f "/etc/yum.repos.d/${repo_name}.repo"
fi
# 生成新的仓库文件
cat > "/etc/yum.repos.d/${repo_name}.repo" <<EOF
[${repo_name}AppStream]
name=${repo_name}.appstream
baseurl=${appstream_url}
gpgcheck=0
enabled=1
[${repo_name}BaseOS]
name=${repo_name}.baseos
baseurl=${baseos_url}
gpgcheck=0
enabled=1
EOF
}
# 主逻辑:调用判断函数,根据返回值执行对应分支
# 传递脚本的第一个参数给判断函数
judge_sw "$1"
# 根据$?来取出judge_sw函数的返回值
case $? in
0)
# Local分支
software_warehouse "Local" \
"file:///media/AppStream" \
"file:///media/BaseOS"
;;
1)
# Aliyun分支
software_warehouse "Aliyun" \
"https://mirrors.aliyun.com/centos-stream/9-stream/AppStream/x86_64/os/" \
"https://mirrors.aliyun.com/centos-stream/9-stream/BaseOS/x86_64/os/"
;;
*)
echo "This Software warehouse is not set"
exit 1
;;
esac
# 验证仓库配置
dnf repolist收尾
[root@localhost ~]# chmod +x /usr/bin/my_script/swset.sh [root@localhost ~]# rm -rf /etc/yum.repos.d/*
3. 自动配置网络
配置思路(rhel9):
- 先使用
grubby --update-kernel ALL --args net.ifnames=0禁用默认命名规则,实现可预测命名规则(作用是启动时网卡名称会变成eth0,再添加一个网卡时添加的网卡名称会是eth1,有规律的添加网卡名;不使用这个命令它后面添加的网卡名不好推测,写脚本也不怎么顺畅.如:ens160再添加一个网卡后会变成ens不知名数字) - 编写自动配置网络脚本(测试好后可以把
/etc/NetworkManager/system-connections/下所有网络配置文件删了,母盘能省空间就尽量省空间
禁用默认命名规则
[root@localhost ~]# grubby --update-kernel ALL --args net.ifnames=0 [root@localhost ~]# vim /usr/bin/my_script/nmset.sh
配置网络脚本
#!/bin/bash
# 本脚本用于修改以存在的网卡设备中的IP地址和主机名
# 使用方式:脚本 网卡设备名 IP地址(不加掩码) 主机名
# 检测网卡设备有没有:“ifconfig 网卡名”,报错就没有,没报错就有(网卡设备得在虚拟机自定义硬件里面添加)
ifconfig $1 &> /dev/null || {
echo "net device $1 is not exited"
exit
}
# 检查IP是否存在
ping -c1 -w1 $2 &> /dev/null && {
echo "$2 is exited,please use new IP"
exit
}
# 确定网卡在设备中是否用配置文件,有就删了重新写入新IP信息和设备名称,没有就直接写
grep $1 -r /etc/NetworkManager/system-connections/ | awk -F : '{system("rm -rf " $1)}'
cat > /etc/NetworkManager/system-connections/$1.nmconnection <<EOF
[connection]
id=$1
type=ethernet
interface-name=$1
[ipv4]
method=manual
address1=$2/24,192.168.126.2
dns=8.8.8.8
EOF
# 修改权限,和重新加载文件并启动网卡会议名
chmod 600 /etc/NetworkManager/system-connections/$1.nmconnection
nmcli connection reload
nmcli connection up $1
# 修改主机名,做本地解析
hostnamectl hostname $3
grep -e "$2\t$3" /etc/hosts || {
echo -e "$2\t$3" >> /etc/hosts
}后续
[root@localhost ~]# chmod +x /usr/bin/my_script/nmset.sh [root@localhost ~]# rm -rf /etc/NetworkManager/system-connections/*
4. 基本实验环境
关防火墙、selinux内核
[root@localhost ~]# grubby --update-kernel ALL --args selinux=0 [root@localhost ~]# systemctl disable --now firewalld.service
到此系统化部署母盘结束啦,尽情克隆节点去玩吧
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
解决CentOS7虚拟机无法上网并设置CentOS7虚拟机使用静态IP上网
这篇文章主要介绍了解决CentOS7虚拟机无法上网并设置CentOS7虚拟机使用静态IP上网,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-02-02
腾讯云ubuntu服务器tomcat访问慢的原因分析及解决方法
在腾讯云上配了个一元的学生云,开始一切正常,直到配置tomcat开始出现各种莫名其妙的问题。最终找到问题的原因。下面小编通过本教程给大家介绍下腾讯云ubuntu服务器tomcat访问慢的原因分析及解决方法,一起看看吧2016-10-10
关于Apache shiro实现一个账户同一时刻只有一个人登录(shiro 单点登录)
今天和同事在一起探讨shiro如何实现一个账户同一时刻只有一session存在的问题,下面小编把核心代码分享到脚本之家平台,需要的朋友参考下2017-09-09


最新评论