Linux虚拟机系统化部署母盘流程

 更新时间:2026年02月24日 09:56:10   作者:feng68_  
文章介绍了系统化部署母盘的原因和方法,包括配置vim个性化软件仓库、自动挂载光盘映像、配置网络和关闭SELinux及防火墙

为什么要系统化部署母盘?

为了后续使用更加方便(直接克隆母盘即可得一台新虚拟机),省时间,好管理。

实验母盘目标:

  • 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

到此系统化部署母盘结束啦,尽情克隆节点去玩吧

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

最新评论