国产服务器操作系统PXE安装脚本 可重复执行(rc08版本)

执行效果如下:
在这里插入图片描述

#!/bin/bash
#Date:2023/12/25
#Func:一键部署pxe服务器
#Author:Zhanghaodong
#Version:2023.12.25.05
#Note:仅适用x86架构uefi安装
#     1.此脚本可多次重复执行。
#     2.如遇到某个服务异常退出,检查响应状态码排错后,再次执行脚本即可。
#     3.此脚本仅仅适用于CRITC-HongAn-Server-x86_64-V1.0-rc08.iso或CRITC-HongAn-Server-aarch-V1.0-rc08.iso
#     4.在填写以下参数时,请注意:x86架构可用uefi或leagcy引导,其对应的filename分别是grubx64.efi和pxelinux.0
#       arm只能用uefi引导且filename只能是grubaa64.efi#Manually Writing Basic Information
PXE_SERVER="11.0.1.181"
ISO="/root/CRITC-HongAn-Server-x86_64-V1.0-rc08.iso"
CLIENT_ARCH="x86" #x86 or arm
CLIENT_BOOT_MODE="uefi" #uefi or leagcy 
#PXE_FILE_NAME="pxelinux.0" #x86下uefi对应的grubx64.efi,leagcy对应pxelinux.0;arm对应的只有grubaa64.efi
ROOT_PASSWORD="qwer1234!@#$"#Dhcp Config Information
SUBNET="11.0.1.0" #子网
NETMASK="255.255.255.0" #掩码
GATEWAY="11.0.1.1" #网关
RANGE_IP_LOW="11.0.1.200" #ip范围
RANGE_IP_HIGH="11.0.1.230" #ip范围function Log {local log_level=$1local log_info=$2local line=$3local script_name=$(basename $0)case ${log_level} in"INFO")echo -e "\033[32m$(date "+%Y-%m-%d %T.%N") [INFO]: ${log_info}\033[0m";;"WARN")echo -e "\033[33m$(date "+%Y+%m+%d %T.%N") [WARN]: ${log_info}\033[0m";;"ERROR")echo -e "\033[31m$(date "+%Y-%m-%d %T.%N") [ERROR ${script_name} ${FUNCNAME[1]}:$line]: ${log_info}\033[0m";;*)echo -e "${@}";;esac
}function MOUNT_ISO {[ -d /tmpmnt ] || mkdir /tmpmntumount /tmpmntmount -o loop ${ISO} /tmpmnt &> /dev/nullif [ $? -eq 0 ];thenLog INFO "${ISO}镜像已挂载到/tmpmnt目录下!"elseLog ERROR "${ISO}镜像挂载失败!"exit 2fi	
}function STOP_FIREWALLD {iptables -F && Log INFO "防火墙规则已清空!" || Log WARN "防火墙规则清空失败,请重试!"systemctl stop firewalld && systemctl disable firewalld &> /dev/null && Log INFO "防火墙及SELINUX已关闭!"#本系统seLinux缺省disabled,无需做修改操作#sed  -i.bak 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
}function CONFIG_LOCAL_YUM {[ -d /etc/yum.repos.d/repo_bak ] || mkdir /etc/yum.repos.d/repo_bakmv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repo_bakcat > /etc/yum.repos.d/local.repo <<-EOF[local]name = local media for ${ISO}baseurl = file:///tmpmntgpgcheck = 0enabled = 1EOFLog INFO "本地YUM源配置完成!"
}function CONFIG_HTTPD {rpm -qa | grep httpd &>/dev/null || yum -y install httpd &> /dev/null[ -d /var/www/html/hy ] && rm -rf /var/www/html/hy[ -d /var/www/html/ks ] && rm -rf /var/www/html/ksmkdir /var/www/html/{hy,ks}chmod -R 755 /var/www/html/{hy,ks}Log INFO "正在拷贝ISO文件到/var/www/html/hy,大约需1分钟左右......"rsync -a /tmpmnt/ /var/www/html/hyif [ $? -eq 0 ];thenLog INFO "ISO文件拷贝完毕!"elseLog ERROR "ISO文件拷贝失败,请检查后重试!"exit 3fisystemctl restart httpdif [ $? -eq 0 ];thenLog INFO "重新启动HTTPD服务完毕!"systemctl enable httpd &>/dev/nullelseLog ERROR "启动HTTPD服务异常,请检查后重试!"exit 4fi
}function CONFIG_KS {
cat > /tmp/rootpw.py <<-EOF
#!/usr/bin/python2
import crypt
print(crypt.crypt("$ROOT_PASSWORD"))
EOFROOTPW="rootpw --iscrypted `python2 /tmp/rootpw.py | sed 's/\$/\\\$/g' | sed 's/.$//'`"rm -rf /tmp/rootpw.py
cat > /var/www/html/ks/hy-ks.cfg <<-EOF
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
#cdrom
install
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --disabled
ignoredisk --only-use=nvme0n1
# Keyboard layouts
keyboard --vckeymap=cn --xlayouts='cn'
# System language
lang zh_CN.UTF-8eula --agreed
#skipx 安装完成后开机不启动图形
#skipx
# Network information
network	 --bootproto=static --device=ens33 --ip=11.0.1.23 --netmask=255.255.255.0 --gateway=11.0.1.1 --nameserver=114.114.114.114,8.8.8.8 --noipv6
network  --bootproto=dhcp --device=eno1 --onboot=off --ipv6=auto --no-activate
network  --bootproto=dhcp --device=eno2 --onboot=off --ipv6=auto
network  --bootproto=dhcp --device=eno3 --onboot=off --ipv6=auto
network  --bootproto=dhcp --device=eno4 --onboot=off --ipv6=auto
network  --bootproto=dhcp --device=ens1f0 --onboot=off --ipv6=auto
network  --bootproto=dhcp --device=ens1f1 --onboot=off --ipv6=auto
network  --hostname=localhost.localdomain# Root password
${ROOTPW}
# System services
#services --enabled="ntpd" #注意此处如果设置失败,将会在安装完之后报错,导致pxe自动安装程序无法进行
# SELinux configuration
selinux --disabled
# Firewall configuration
firewall --disabled
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai --isUtc
#user --name=hy --password=.CvWNQ/ --iscrypted --gecos="hy"
# X Window System configuration information
xconfig  --startxonboot
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=nvme0n1
# Partition clearing information
clearpart --all --initlabel
autopart --type=lvm#######################################################################
#分区情况案例如下
# Disk partitioning information
#标准分区如下操作
#part swap --asprimary --fstype="swap" --ondisk=nvme0n1 --size=4096
#part /boot --asprimary --fstype="xfs" --ondisk=nvme0n1 --size=1024
#part /boot/efi --asprimary --fstype="vfat" --ondisk=nvme0n1 --size=1024
#part / --asprimary --fstype="xfs" --grow --ondisk=nvme0n1 --size=1 #将剩下的分区都给/
##########################################################################################
#lvm分区如下
#后续待更新###################################
%packages
#@^Server with UKUI GUI
@^Minimal Install
wget
chrony
kexec-tools
%end%post
systemctl distable chronyd
systemctl disable firstboot-graphical.service
%end#%addon com_redhat_kdump --enable --reserve-mb='auto'
%addon ADDON_placeholder --enable --reserve-mb=1024M
%end
EOF
}function CONFIG_DHCP_FILENAME {rpm -qa | grep dhcp  &> /dev/null|| yum -y install dhcp &>/dev/nullcase ${CLIENT_BOOT_MODE} in "uefi")case ${CLIENT_ARCH} in"x86")filename=grubx64.efi;;"arm")filename=grubaa64.efi;;"*")Log ERROR "您填写的${CLIENT_ARCH}不符合${CLIENT_BOOT_MODE}引导,请检查后重试!"exit 7;;esac;;"leagcy")case ${CLIENT_ARCH} in"x86")filename=pxelinux.0;;"arm")Log ERROR "您填写的${CLIENT_ARCH}不符合${CLIENT_BOOT_MODE}引导,请检查后重试!"exit 8;;"*")Log ERROR "您填写的${CLIENT_ARCH}不符合${CLIENT_BOOT_MODE}引导,请检查后重试!"exit 9;;esac;;"*")Log ERROR "客户端引导方式只能是UEFI或LEAGCY模式,请检查后重试!"exit 10;;esac}
function CONFIG_DHCP {rpm -qa | grep dhcp  &> /dev/null|| yum -y install dhcp &>/dev/null
cat > /etc/dhcp/dhcpd.conf <<-EOF
ddns-update-style interim;
ignore client-updates;
filename "${filename}";
next-server ${PXE_SERVER};subnet ${SUBNET} netmask ${NETMASK} {option routers ${GATEWAY};option subnet-mask ${NETMASK};range dynamic-bootp ${RANGE_IP_LOW} ${RANGE_IP_HIGH};default-lease-time 21600;max-lease-time 43200;
}
EOFsystemctl restart dhcpdif [ $? -eq 0 ];thenLog INFO "DHCP服务已正常启动!"systemctl enable dhcpd &>/dev/nullelseLog ERROR "DHCP服务异常,请检查参数是否正确!"exit 3fi
}function CONFIG_TFTP_X86_ARM_UEFI_GRUB_CFG {rpm -qa | grep -q tftp || yum install tftp -y > /dev/nullrpm -qa | grep -q tftp-server || yum install tftp-server -y > /dev/null#rpm -qa | grep -q xinetd || yum install xinetd -y > /dev/nullcat > /etc/xinetd.d/tftp <<-EOF
service tftp
{socket_type		= dgramprotocol		= udpwait			= yesuser			= rootserver			= /usr/sbin/in.tftpdserver_args		= -s /var/lib/tftpbootdisable			= noper_source		= 11cps			= 100 2flags			= IPv4
}
EOFrm -rf /var/lib/tftpboot/*cp -rf /tmpmnt/images/pxeboot/* /var/lib/tftpboot/cp -rf /tmpmnt/EFI/BOOT/grub*.efi /var/lib/tftpboot/chmod -R 755 /var/lib/tftpboot
cat > /var/lib/tftpboot/grub.cfg <<-EOF
set default="0"function load_video {if [ x$feature_all_video_module = xy ]; theninsmod all_videoelseinsmod efi_gopinsmod efi_ugainsmod ieee1275_fbinsmod vbeinsmod vgainsmod video_bochsinsmod video_cirrusfi
}load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2set timeout=10### BEGIN INSTALL CRITC-HongAn-Server ###
menuentry 'PXE INSTALL FOR Install CRITC-HongAn-Server-x86_64-V1.0-rc08' --class red --class gnu-linux --class gnu --class os {set root=(tftp,${PXE_SERVER})linux /vmlinuz ip=dhcp inst.repo=http://${PXE_SERVER}/hy inst.ks=http://${PXE_SERVER}/ks/hy-ks.cfginitrd /initrd.img
}
EOFsystemctl restart tftp  && Log INFO "TFTP服务启动完毕!"if [ $? -eq 0 ];thenLog INFO "TFTP服务已正常启动!"systemctl enable tftp &>/dev/nullelseLog ERROR "TFTP服务异常,请检查后重试!"exit 4fi
}function CONFIG_TFTP_X86_LEAGCY_GRUB_CFG {
rpm -qa | grep -q tftp || yum install tftp -y > /dev/nullrpm -qa | grep -q tftp-server || yum install tftp-server -y > /dev/null#rpm -qa | grep -q xinetd || yum install xinetd -y > /dev/nullcat > /etc/xinetd.d/tftp <<-EOF
service tftp
{socket_type             = dgramprotocol                = udpwait                    = yesuser                    = rootserver                  = /usr/sbin/in.tftpdserver_args             = -s /var/lib/tftpbootdisable                 = noper_source              = 11cps                     = 100 2flags                   = IPv4
}
EOFrm -rf /var/lib/tftpboot/*cp -rf /tmpmnt/isolinux/* /var/lib/tftpboot/cp -rf /tmpmnt/images/pxeboot/* /var/lib/tftpboot/[ -d /var/lib/tftpboot/pxelinux.cfg ] || mkdir /var/lib/tftpboot/pxelinux.cfg &> /dev/nullrm -rf /var/lib/tftpboot/pxelinux.cfg/*chmod -R 755 /var/lib/tftpboot
cat > /var/lib/tftpboot/pxelinux.cfg/default <<-EOF
default vesamenu.c32
timeout 100
display boot.msg# Clear the screen when exiting the menu, instead of leaving the menu displayed.
# For vesamenu, this means the graphical background is still displayed without
# the menu itself for as long as the screen remains in graphics mode.
menu clear
menu background splash.png
menu title CRITC-HongAn-Server-x86_64-V1.0-rc08
menu vshift 8
menu rows 18
menu margin 8
#menu hidden
menu helpmsgrow 15
menu tabmsgrow 13
# Border Area
menu color border * #00000000 #00000000 none
# Selected item
menu color sel 0 #ffffffff #00000000 none
# Title bar
menu color title 0 #ff7ba3d0 #00000000 none
# Press [Tab] message
menu color tabmsg 0 #ff3a6496 #00000000 none
# Unselected menu item
menu color unsel 0 #84b8ffff #00000000 none
# Selected hotkey
menu color hotsel 0 #84b8ffff #00000000 none
# Unselected hotkey
menu color hotkey 0 #ffffffff #00000000 none
# Help text
menu color help 0 #ffffffff #00000000 none
# A scrollbar of some type? Not sure.
menu color scrollbar 0 #ffffffff #ff355594 none
# Timeout msg
menu color timeout 0 #ffffffff #00000000 none
menu color timeout_msg 0 #ffffffff #00000000 none
# Command prompt text
menu color cmdmark 0 #84b8ffff #00000000 none
menu color cmdline 0 #ffffffff #00000000 none
# Do not display the actual menu unless the user presses a key. All that is displayed is a timeout message.
menu tabmsg Press Tab for full configuration options on menu items.
menu separator # insert an empty line
menu separator # insert an empty linelabel httpmenu label ^PXE INSTALL FOR CRITC-HongAn-Server-x86_64-V1.0-rc08menu defaultkernel vmlinuzappend initrd=initrd.img ip=dhcp inst.repo=http://${PXE_SERVER}/hy inst.ks=http://${PXE_SERVER}/ks/hy-ks.cfg
menu end
EOFcp -rf /tmpmnt/Packages/syslinux-nonlinux-* /tmprm -rf /tmp/usr &> /dev/nullrpm2cpio /tmp/syslinux-nonlinux-* | cpio -idm --quiet -D /tmp/ cp -rf /tmp/usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/chmod -R 755 /var/lib/tftpbootsystemctl restart tftp  && Log INFO "TFTP服务启动完毕!"if [ $? -eq 0 ];thenLog INFO "TFTP服务已正常启动!"systemctl enable tftp &>/dev/nullelseLog ERROR "TFTP服务异常,请检查后重试!"exit 4fi
}function CHOOSE_BOOT_MODE {
case ${CLIENT_BOOT_MODE} in"uefi")CONFIG_TFTP_X86_ARM_UEFI_GRUB_CFG;;"leagcy")CONFIG_TFTP_X86_LEAGCY_GRUB_CFG;;"*")Log ERROR "CLIENT_BOOT_MODE选择有误,请重试!"exit 5;;
esac
}function MAIN {MOUNT_ISOSTOP_FIREWALLDCONFIG_LOCAL_YUMCONFIG_DHCP_FILENAMECONFIG_DHCPCHOOSE_BOOT_MODECONFIG_HTTPDCONFIG_KS
}
MAIN######################
#状态码错误排查
#2:镜像挂载失败
#3:拷贝ISO文件到/var/www/html/hy下失败
#4:启动HTTPD服务异常
#5:选择CLIENT_BOOT_MODE有误
#6:选择PXE_FILE_NAME有误
#7:您填写的${CLIENT_ARCH}不符合UEFI引导,请检查后重试!
#8:您填写的${CLIENT_ARCH}不符合LEAGCY引导,请检查后重试!
#9:您填写的${CLIENT_ARCH}不符合LEAGCY引导,请检查后重试!此处用户填写的是非x86
#10:${CLIENT_BOOT_MODE}填写错误有误,此处只能UEFI或LEAGCY模式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/599143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VINS-MONO拓展2----更快地makeHessian矩阵

1. 目标 完成大作业T2 作业提示&#xff1a; 多线程方法主要包括以下几种(参考博客)&#xff1a; MPI(多主机多线程开发),OpenMP(为单主机多线程开发而设计)SSE(主要增强CPU浮点运算的能力)CUDAStream processing, 之前已经了解过std::thread和pthread&#xff0c;拓展1…

工作中人员离岗识别摄像机

工作中人员离岗识别摄像机是一种基于人工智能技术的智能监控设备&#xff0c;能够实时识别员工离岗状态并进行记录。这种摄像机通常配备了高清摄像头、深度学习算法和数据处理系统&#xff0c;可以精准地监测员工的行为&#xff0c;提高企业的管理效率和安全性。 工作中人员离岗…

在Go语言中处理HTTP请求中的Cookie

在Web开发中&#xff0c;Cookie是一种常用的技术&#xff0c;用于在客户端存储数据&#xff0c;并在随后的请求中发送回服务器。Go语言的标准库提供了强大的支持来处理HTTP请求中的Cookie。 首先&#xff0c;让我们了解如何在Go语言中设置Cookie。以下是一个简单的示例&#x…

MySQL基础笔记(4)DQL数据查询语句

DQL用于查找数据库中存放的记录~ 目录 一.语法 二.基础查询 1.查询多个字段 2.设置别名 3.去除重复记录 三.条件查询 1.基础语法 2.常见条件 四.分组查询 1.聚合函数 2.语法 五.排序查询 六.分页查询 附注&#xff1a;DQL执行顺序 1.编写顺序 2.执行顺序 ​​​…

安装阿里云CLI之配置阿里云凭证信息

有时候需要再主机上通过 OpenAPI 的调用访问阿里云&#xff0c;并完成控制&#xff0c;此时就需要在服务器上安装阿里云CLI&#xff0c;并完成账号的设置。 1. 登录阿里云创建账号 1.1 点击阿里云头像 ——》 控制访问 ——》创建一个拥有DNS权限的用户 这个用户不用太多权限…

小程序购物商城搭建开发分析

小程序商城作为现代商业模式的重要组成部分&#xff0c;具有巨大的发展潜力和商业价值。通过搭建一个功能完善、用户友好的小程序商城&#xff0c;您将能够提供便捷的购物体验&#xff0c;吸引更多的用户并实现商业增长。在进行小程序商城开发搭建之前&#xff0c;我们需要对项…

抽象工厂模式(Abstract Factory)

文章目录 定义与类型适用场景优点缺点产品等级结构与产品族抽象工厂代码示例 定义与类型 定义&#xff1a;抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口&#xff0c;无须指定它们具体的类。 类型&#xff1a;创建型。 适用场景 客户端&#xff08;应用层&#…

AI提示工程指南

简述: 当今互联网行业对于AI提示工程的需求日益增长,而《AI提示工程指南》是一本旨在满足这种需求的宝贵指南。本指南由一位对AI提示工程充满热情并自学而来的互联网从业者撰写,旨在为行业人员提供一个全面、易懂的参考手册。 这本指南将引领您踏上AI提示工程的旅程,深入探…

DevOps(3)

目录 11.描述root账户&#xff1f; 12.如何在发出命令时打开命令提示符&#xff1f; 14.Linux系统下交换分区的典型大小是多少&#xff1f; 15.什么是符号链接&#xff1f; 11.描述root账户&#xff1f; root账户就像一个系统管理员账户&#xff0c;允许你完全控制系统。 …

经常戴耳机有什么危害呢?一文读懂长时间使用耳机都有哪些危害

经常佩戴耳机可能会出现滋生细菌、引起炎症反应、损伤听力等危害。 1、滋生细菌&#xff1a;长时间戴耳机&#xff0c;会导致耳道堵塞&#xff0c;从而导致耳内潮湿&#xff0c;容易滋生细菌。 2、引起炎症反应&#xff1a;长时间戴耳机&#xff0c;会对耳道口造成机械性的压…

多线程和JVM

一&#xff0c;多线程实现的四种方式 1. 实现Runnable接口 普通实现&#xff1a; public class MyRunnable implements Runnable {Overridepublic void run() {System.out.println("线程执行中...");} }public class Main {public static void main(String[] arg…

vmware workstation的三种网络模式通俗理解

一、前言 workstations想必很多童鞋都在用&#xff0c;经常会用来在本机创建不同的虚拟机来做各种测试&#xff0c;那么对于它支持的网络模式&#xff0c;在不同的测试场景下应该用哪种网络模式&#xff0c;你需要做下了解&#xff0c;以便可以愉快的继续测&#xff08;搬&…

全年重磅!《2023年度TikTok电商行业趋势白皮书》发布!

2023年&#xff0c;似乎所有的东西都往相反的方向发展。疫情消退后经济没有明朗&#xff0c;局部冲突愈演愈烈没有消停&#xff0c;打工人辛苦工作工资没有涨&#xff0c;疯狂买买买的双十一也开始变得冷清... 似乎是不友好的一年&#xff0c;那你有听到“增长的声音”吗&…

uniCloud 云函数

相对于云函数&#xff0c;官方更推荐使用 云对象 新建云函数 编辑云函数 uniCloud-aliyun/cloudfunctions/hello_func/index.js use strict; exports.main async (event, context) > {let {name} eventreturn 你好&#xff0c;${name}! };云函数接收的参数从event中解构获…

ARM+FPGA多通道信号采集与处理模块开发方案

多通道信号采集与处理模块开发方案 开发一套多通道光电信号采集与处理模块&#xff0c;实现对64通道传感信号采集、处理与存储功能。主要包括数据采集与处理电路&#xff0c;系统控制软件&#xff0c;信号处理算法实现及数据存储。其中包括8通道ADC&#xff0c;每一路ADC采样数…

CTFHub | 存储型

0x00 前言 CTFHub 专注网络安全、信息安全、白帽子技术的在线学习&#xff0c;实训平台。提供优质的赛事及学习服务&#xff0c;拥有完善的题目环境及配套 writeup &#xff0c;降低 CTF 学习入门门槛&#xff0c;快速帮助选手成长&#xff0c;跟随主流比赛潮流。 0x01 题目描述…

js逆向第9例:猿人学第2题-js混淆-动态cookie1

题目2:提取全部5页发布日热度的值,计算所有值的加和,并提交答案 (感谢蔡老板为本题提供混淆方案) 既然题目已经给出了cookie问题,那就从cookie入手,控制台找到数据请求地址 可以看到如下加密字符串m类似md5,后面跟着时间戳 m=45cc41dcdb15159ebb50564635f8e362|1704301…

智能视频监控技术在旅游业中如何发挥最大作用,助力旅游业发展

随着“南方小土豆勇闯哈尔滨”的词条霸榜热搜&#xff0c;大众旅游热情再次点燃。最近哈尔滨游客爆满的情况&#xff0c;极易发生游客迷路、景区瘫痪、交通堵塞等情况&#xff0c;当地有关部门的压力不言而喻。对于节假日或者“破天富贵”、“报复性旅游”的情况&#xff0c;景…

webrtc报文记录

tcp.port 10443 || tcp.port 6080 || udp.port 8000 https://download.csdn.net/download/dualvencsdn/88706745

如何使用ArcGIS Pro转换单个点坐标

坐标转换作为基础的功能&#xff0c;一般的GIS软件都支持&#xff0c;大多数情况下&#xff0c;我们是转换整个图层&#xff0c;如果想要转换单个坐标点&#xff0c;在ArcGIS Pro内也是支持的&#xff0c;这里为大家介绍一下转换方法&#xff0c;希望能对你有所帮助。 拾取坐标…