PXE 自动化部署 SHELL 脚本

本贴最后更新于 1395 天前,其中的信息可能已经时移世异

#!/bin/bash
#
#********************************************************************
#Author:zhangzhuo
#QQ: 1191400158
#Date: 2021-02-08
#FileName:install_pxe_centos8.sh
#URL: https://www.zhangzhuo.ltd
#Description:The test script
#Copyright (C): 2021 All rights reserved
#********************************************************************
. /etc/init.d/functions
#系统镜像位置确定
os_file(){
#请设置系统镜像位置写绝对路径,否则无法安装
os_centos6_file=/root/CentOS-6.10-x86_64-bin-DVD1.iso
os_centos7_file=/root/CentOS-7-x86_64-Everything-2003.iso
os_centos8_file=/root/CentOS-8.2.2004-x86_64-dvd1.iso
if [ ! -e $os_centos6_file ];then
    action "centos6镜像文件不存在" false;exit
fi
if [ ! -e $os_centos7_file ];then
    action "centos8镜像文件不存在" false;exit
fi
if [ ! -e $os_centos8_file ];then
    action "centos8镜像文件不存在" false;exit  
fi
}

#镜像挂载
os_mount(){
mkdir -p /var/www/html/centos/{6,7,8}/x86_64/
mount $os_centos6_file /var/www/html/centos/6/x86_64/ &>/dev/null
mount $os_centos7_file /var/www/html/centos/7/x86_64/ &>/dev/null
mount $os_centos8_file /var/www/html/centos/8/x86_64/ &>/dev/null
action "系统镜像挂载成功"
}

#准备内核启动文件
centos_isolinux(){
mkdir -p /var/lib/tftpboot/centos{6,7,8}
cp /var/www/html/centos/6/x86_64/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos6/
cp /var/www/html/centos/7/x86_64/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos7/
cp /var/www/html/centos/8/x86_64/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos8/
cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot/
cp /var/www/html/centos/8/x86_64/isolinux/{ldlinux.c32,libcom32.c32,libutil.c32} /var/lib/tftpboot/
mkdir /var/lib/tftpboot/pxelinux.cfg/
cat <<EOF >/var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
timeout 600
menu title PXE INSTALL MENU
label linux8
  menu label Auto Install Centos Linux ^8
  kernel centos8/vmlinuz
  append initrd=centos8/initrd.img ks=http://${IP}/ks/ks-centos8.cfg

label linux7
  menu label Auto Install Centos Linux ^7
  kernel centos7/vmlinuz
  append initrd=centos7/initrd.img ks=http://${IP}/ks/ks-centos7.cfg

label linux6
  menu label Auto Install Centos Linux ^6
  kernel centos6/vmlinuz
  append initrd=centos6/initrd.img ks=http://${IP}/ks/ks-centos6.cfg




label manual
  menu label  ^Manual Install CentOS Linux 8
  kernel centos8/vmlinuz
  append initrd=centos8/initrd.img inst.repo=http://${IP}/centos/8/x86_64/


label rescue
 menu label ^Rescue a CentOS Linux system 8
 kernel centos8/vmlinuz
 append initrd=centos8/initrd.img inst.repo=http://${IP}/centos/8/x86_64/ rescue


label local
  menu default
  menu label ^Boot from local drive
  localboot 0xffff
EOF
action "PXE启动文件准备完成"
}

#安装
install_pxe(){
    os_file

    yum -y install wget dhcp-server tftp-server httpd syslinux-nonlinux
    if [ $? = 0 ];then
        action "安装成功"
    else
        action "安装错误,请检查YUM源" false ; exit
    fi
    systemctl enable --now httpd.service tftp.service &>/dev/null
    systemctl is-active tftp.service &>/dev/null && action "TFTP服务启动成功" || action "TFTP服务启动失败" false
    systemctl is-active httpd.service &>/dev/null && action "HTTP服务启动成功" || action "HTTP服务启动失败" false
  
    dhcp_conf_file
  
    os_mount
  
    ks_file
  
    centos_isolinux  
    action "PXE服务安装完成,如无法正常自动部署系统请检查脚本中键入的参数是否错误"
    action "系统部署后root密码默认123456"  
}

#DHCP配置文件设置
dhcp_conf_file(){
echo -e "\033[1;31m以下输入的参数没有限制请正确输入,否则会导致dhcp无法启动!\033[0m"
read -p "请输入dhcp分配的网络地址:" NETWORK
read -p "请输入子网掩码:" MASK
read -p "请输入地址池范围(2个地址使用空格分割):" start stop
read -p "请输入网关:" GATEWAY
read -p "请输入本机IP地址:" IP
cat <<EOF >/etc/dhcp/dhcpd.conf
option domain-name "zhangzhuo.ltd";
option domain-name-servers 180.76.76.76,223.6.6.6;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet ${NETWORK} netmask ${MASK} {
    range ${start} ${stop};
    option routers ${GATEWAY};
    next-server ${IP};
    filename "pxelinux.0";
}
EOF
systemctl enable --now dhcpd &>/dev/null
systemctl is-active dhcpd.service &>/dev/null && action "DHCP服务启动成功" || action "DHCP服务启动失败请检查配置文件参数是否正确" false
}

#ks应答文件创建
ks_file(){
mkdir /var/www/html/ks
read -p "请输入本机IP地址:" IP
cat <<EOF >/var/www/html/ks/ks-centos6.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --iscrypted \$1\$NxU3dKmV\$fRJv0NpyNJv6sQSK2SEh//
# System language
lang en_US.UTF-8
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use text mode install
text
# SELinux configuration
selinux --disabled
# Do not configure the X Window System

authconfig --enableshadow --passalgo=sha512
# Firewall configuration
firewall --disabled
# Network information
network --onboot yes  --bootproto=dhcp --device=eth0 --noipv6
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# Use network installation
url --url="http://${IP}/centos/6/x86_64"
# System bootloader configuration
bootloader --append="crashkernel=auto rhgb quiet" --location=mbr --driveorder=sda
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --fstype="ext4" --size=2048
part / --fstype="ext4" --size=10240
part /data --fstype="ext4" --size=2048
part swap --fstype="swap" --size=1024

%post
%end

%packages
@development
@mail-server

%end
EOF
cat <<EOF >/var/www/html/ks/ks-centos7.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --iscrypted \$1\$NxU3dKmV\$fRJv0NpyNJv6sQSK2SEh//
# System language
lang en_US
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use text mode install
text
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx


# Firewall configuration
firewall --disabled
# Network information
network  --bootproto=dhcp --device=eth0
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# Use network installation
url --url="http://${IP}/centos/7/x86_64"
# System bootloader configuration
bootloader --append="net.ifnames=0" --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --fstype="ext4" --size=2048
part / --fstype="ext4" --size=10240
part /data --fstype="ext4" --size=2048
part swap --fstype="swap" --size=1024  

%post
%end

%packages
@development
@mail-server

%end
EOF
cat <<EOF >/var/www/html/ks/ks-centos8.cfg
#version=RHEL8
ignoredisk --only-use=sda
# Partition clearing information
# Use graphical install
text
zerombr
reboot
clearpart --all --initlabel
selinux --disabled
firewall --disabled
# Use CDROM installation media
url --url="http://${IP}/centos/8/x86_64"
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8

# Network information
bootloader --append="net.ifnames=0" --location=mbr --boot-drive=sda
network  --bootproto=dhcp --device=eth0 --ipv6=auto --activate
network  --hostname=localhost.localdomain
# Root password
rootpw --iscrypted \$6\$q76Q7kMy.HLaa0Jc\$pN1iBqDhYaNZNqLxV.8Qz8QwxgRYB3NXt7/1ikn4buFXhI8GrYUj3hzYhN5Bdw5LzmmZAbXEg9KNx8cC67J73.
# Run the Setup Agent on first boot
firstboot --enable
# Do not configure the X Window System
skipx
# System services
services --disabled="chronyd"
# System timezone
timezone Asia/Shanghai --isUtc --nontp
#Disk partitioning information
part /boot --fstype="ext4" --size=2048
part / --fstype="ext4" --size=10240
part /data --fstype="ext4" --size=2048
part swap --fstype="swap" --size=1024  


%packages
@^minimal-environment
vim
tree
wget
curl
%end

%addon com_redhat_kdump --disable --reserve-mb='auto'

%end

%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end

%post
%end
EOF
action "ks应答文件准备完毕"
}

install_pxe

注意事项:

  • 使用脚本前需要先准备 centos6,7,8 系统镜像并写入到脚本变量中 os_centos{6.7.8}_file 中,否则无法运行
  • 脚本需要在 centos8 系统中使用
  • 执行完毕后可以同时部署 centos6,7,8 系统
  • ks 应答文件可以自己进行自定义
  • 脚本执行过程中需要键入的参数需正确填写否则会导致服务无法启动尤其 dhcp 服务
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    123 引用 • 74 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    105 引用 • 127 回帖 • 377 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    6 引用 • 63 回帖 • 4 关注
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    15 引用 • 7 回帖
  • 电影

    这是一个不能说的秘密。

    121 引用 • 604 回帖
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 354 关注
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖 • 1 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    36 引用 • 35 回帖 • 2 关注
  • V2Ray
    1 引用 • 15 回帖 • 1 关注
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖 • 1 关注
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    75 引用 • 258 回帖 • 624 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    90 引用 • 899 回帖
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖 • 2 关注
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 768 关注
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 24 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    48 引用 • 25 回帖 • 3 关注
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 97 关注
  • 创业

    你比 99% 的人都优秀么?

    84 引用 • 1399 回帖
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 683 关注
  • 分享

    有什么新发现就分享给大家吧!

    248 引用 • 1794 回帖 • 1 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    408 引用 • 1246 回帖 • 582 关注
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    11 引用 • 5 回帖 • 609 关注
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 24 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 216 关注