PXE 自动化部署 SHELL 脚本

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

#!/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 下的命令。

    124 引用 • 74 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 305 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖 • 1 关注
  • 电影

    这是一个不能说的秘密。

    121 引用 • 607 回帖 • 1 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    286 引用 • 248 回帖 • 32 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 5 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 633 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 614 关注
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    62 引用 • 289 回帖
  • Netty

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

    49 引用 • 33 回帖 • 30 关注
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1437 引用 • 10064 回帖 • 488 关注
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    92 引用 • 752 回帖
  • JSON

    JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。

    52 引用 • 190 回帖
  • OneDrive
    2 引用
  • DevOps

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

    55 引用 • 25 回帖 • 5 关注
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 697 关注
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    36 引用 • 37 回帖 • 540 关注
  • 反馈

    Communication channel for makers and users.

    124 引用 • 928 回帖 • 260 关注
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3455 回帖 • 174 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 375 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    345 引用 • 724 回帖
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 83 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    315 引用 • 547 回帖 • 1 关注
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 377 关注
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 331 关注
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    197 引用 • 541 回帖 • 2 关注
  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖