PXE 自动化部署 SHELL 脚本

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

#!/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 回帖 • 2 关注

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    24879 引用 • 102384 回帖
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖 • 1 关注
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    5 引用 • 16 回帖 • 2 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    21 引用 • 245 回帖 • 230 关注
  • 区块链

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

    92 引用 • 752 回帖 • 1 关注
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    239 引用 • 224 回帖 • 1 关注
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    22 引用 • 148 回帖 • 7 关注
  • Solo

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

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

    1441 引用 • 10068 回帖 • 494 关注
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 665 关注
  • 分享

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

    247 引用 • 1794 回帖 • 2 关注
  • 国际化

    i18n(其来源是英文单词 internationalization 的首末字符 i 和 n,18 为中间的字符数)是“国际化”的简称。对程序来说,国际化是指在不修改代码的情况下,能根据不同语言及地区显示相应的界面。

    8 引用 • 26 回帖
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    90 引用 • 59 回帖 • 6 关注
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    21 引用 • 204 回帖
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 735 关注
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 75 关注
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    210 引用 • 2040 回帖
  • SEO

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

    35 引用 • 200 回帖 • 20 关注
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖 • 1 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    116 引用 • 54 回帖 • 3 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 27 关注
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖 • 1 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    88 引用 • 122 回帖 • 621 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    9447 引用 • 43020 回帖 • 108 关注
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    5 引用 • 7 回帖
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    99 引用 • 367 回帖 • 1 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖 • 1 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    20 引用 • 7 回帖 • 1 关注