Linux shell编写脚本部署pxe网络装机

人工安装配置,Linux PXE无人值守网络装机  https://www.cnblogs.com/yuzly/p/10582254.html

脚本实现PXE无人值守网络装机

1.运行脚本:

2.查看dhcp配置文件,看脚本是否成功执行

3.查看/var/lib/tftpboot目录下是否有如下文件

  

4.虚拟机新建一个虚拟机,不加载光盘,取消dhcp自动获取,然后开启

  

5.下图可以看到,正在加载位于远端的tftp站点的内核,引导程序等

  

源码如下:

#!/bin/bash
#该脚本用于自动化部署pxe网络装机
#作者:雨中落叶
#博客:https://www.cnblogs.com/yuzly/
#关闭防火墙,selinux安全机制
service iptables stop &>/dev/null
setenforce &>/dev/null
#获得当前主机的IP地址
IP=$(ifconfig | head - | grep "inet addr" | awk '{print $2}'|awk -F: '{print $2}')
#获得当前主机的网络号
NETIP=$(echo $IP |awk -F. '{print $1"."$2"."$3}')
#获得当前主机的子网掩码
MASK=$(ifconfig |head - | tail - |awk '{print $4}'|awk -F: '{print $2}')
#挂载光盘
mount /dev/sr0 /mnt &>/dev/null
n=$(ls /mnt/$Date |wc -l)
if [ $n -eq ]
then
echo "没有挂载光盘,请挂载光盘,退出脚本执行状态!"
exit
fi
#配置本地yum仓库
rm -fr /etc/yum.repos.d/*
cat >>/etc/yum.repos.d/yuzly.repo<<OK
[yuzly]
name=yuzly
baseurl=file:///mnt
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
OK
yum clean all &>/dev/null #搭建ftp站点
if [ -d /etc/vsftpd ]
then
#把光盘文件复制到ftp站点下
mkdir /var/ftp/redhat6
echo "正在复制光盘文件........"
cp -rf /mnt/* /var/ftp/redhat6
echo "完成复制......."
#启动ftp服务
service vsftpd restart &>/dev/null
else
echo "该系统没有安装ftp服务,正在安装,请稍等....."
yum install -y vsftpd &>/dev/null
if [ ! -d /etc/vaftpd ]
then
echo "安装ftp失败,退出脚本执行状态!"
exit
fi
#把光盘文件复制到ftp站点下
mkdir /var/ftp/redhat6
echo "正在复制光盘文件........"
cp -rf /mnt/* /var/ftp/redhat6
echo "完成复制......."
#启动ftp服务
service vsftpd start &>/dev/null
fi
#搭建tftp站点
if [ -f /etc/xinetd.d/tftp ]
then
#修改tftp配置文件,tftp默认是禁用,开启tftp功能
tftp_status=$(grep disable /etc/xinetd.d/tftp |awk -F= '{print $2}')
sed -i "s/$tftp_status/no/" /etc/xinetd.d/tftp
#启动tftp服务
service xinetd restart &>/dev/null
else
echo "该系统没有安装tftp服务,正在安装,请稍等....."
yum install -y tftp-server &>/dev/null
if [ ! -f /etc/xinetd.d/tftp ]
then
echo "安装tftp失败,退出脚本执行状态!"
exit
fi
#修改tftp配置文件,tftp默认是禁用,开启tftp功能
tftp_status=$(grep disable /etc/xinetd.d/tftp |awk -F= '{print $2}')
sed -i "s/$tftp_status/no/" /etc/xinetd.d/tftp
#启动tftp服务
service xinetd start &>/dev/null
fi
#部署客户端主机无盘启动时所需的Linux内核、初始化镜像文件
cd /mnt/images/pxeboot
cp vmlinuz initrd.img /var/lib/tftpboot
#准备客户端主机无盘启动时所需的PXE引导程序(pxelinux.0)、启动菜单文件
#安装syslinux软件包(支持PXE功能)
yum -y install syslinux &>/dev/null
if [ ! -d /usr/share/syslinux ]
then
echo "没有安装成功syslinux,退出脚本执行状态!"
exit
fi
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
#建立启动菜单文件
mkdir /var/lib/tftpboot/pxelinux.cfg
cat >>/var/lib/tftpboot/pxelinux.cfg/default<<OK
default auto
prompt 0
label auto
kernel vmlinuz
append ks=ftp://$IP/redhat6/ks.cfg initrd=initrd.img devfs=nomount ramdisk_size=8192
label linux text
kernel vmlinuz
append text initrd=initrd.img devfs=nomount ramdisk_size=8192
label linux rescue
kernel vmlinuz
append rescue initrd=initrd.img devfs=nomount ramdisk_size=8192
OK
#修改default文件权限
chmod 644 /var/lib/tftpboot/pxelinux.cfg/default
#配置DHCP服务
if [ -f /etc/dhcp/dhcpd.conf ]
then
cat >/etc/dhcp/dhcpd.conf<<OK
subnet $NETIP.0 netmask $MASK {
range $NETIP.50 $NETIP.100;
option domain-name-servers ns1.internal.example.org;
option domain-name "internal.example.org";
option routers $IP;
default-lease-time 600;
max-lease-time 7200;
next-server $IP;
filename "pxelinux.0";
}
OK
#启动dhcp服务
service dhcpd restart &>/dev/null
else
echo "该系统没有安装dhcp服务,正在安装,请稍等....."
yum install -y dhcp &>/dev/null
if [ ! -f /etc/dhcp/dhcpd.conf ]
then
echo "安装dhcp失败,退出脚本执行状态!"
exit
fi
cat >/etc/dhcp/dhcpd.conf<<OK
subnet $NETIP.0 netmask $MASK {
range $NETIP.50 $NETIP.100;
option domain-name-servers ns1.internal.example.org;
option domain-name "internal.example.org";
option routers $IP;
default-lease-time 600;
max-lease-time 7200;
next-server $IP;
filename "pxelinux.0";
}
OK
#启动dhcp服务
service dhcpd start &>/dev/null
fi
#配置实现客户端无人值守安装系统
#安装system-config-kickstart软件包
echo "正在安装system-config-kickstart软件包"
yum -y install system-config-kickstart &>/dev/null
echo "安装system-config-kickstart软件包完成!"
#配置ks.cfg文件
cat >/var/ftp/redhat6/ks.cfg<<OK
#platform=x86, AMD64, 或 Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
install
# Use network installation
url --url="ftp://$IP/redhat6"
# Root password
rootpw --iscrypted $1$EdNye4v8$k9lKFbLL44WbEYorBFU/S1
# System authorization information
auth --useshadow --passalgo=sha512
# Use graphical install
graphical
firstboot --disable
# System keyboard
keyboard us
# System language
lang zh_CN
# SELinux configuration
selinux --enforcing
# Installation logging level
logging --level=info
OK
echo "pxe服务端部署完成!"

----------------------------------------------------------------------------------------------------------------------------------

人工安装配置,Linux PXE无人值守网络装机  https://www.cnblogs.com/yuzly/p/10582254.html

Linux shell编写脚本部署pxe网络装机的更多相关文章

  1. 十六.部署PXE网络装机

    PXE组件及过程分析 • 需要哪些服务组件? – DHCP服务,分配IP地址.定位引导程序 – TFTP服务,提供引导程序下载 – HTTP服务,提供yum安装源 • 客户机应具备的条件 – 网卡芯片 ...

  2. Linux shell编写端口扫描脚本

    Linux shell编写端口扫描脚本 需求: 扫描特定主机 扫描特定主机的特定端口 扫描特定网段 扫描特定网段中哪些主机开放了特定的端口 源码如下: #/bin/bash #该脚本用于对特定目标主机 ...

  3. linux 下shell 编写脚本

    linux 下shell 编写脚本: 1.程序结构练习:编写一个脚本,给定一个正整数,计算出这个数所有位的数字之和. 例如:程序给定输入123,那么应该返回1+2+3=6. 2.程序结构练习:编写一个 ...

  4. Service系统服务(五):PXE基础装机环境、配置并验证DHCP服务、配置PXE引导、验证PXE网络装机、PXE+kickstart自动装机

    一.PXE基础装机环境 目标: 本例要求为后续的PXE服务器构建提供RHEL7软件仓库,完成下列任务: 1> 在CentOS真机部署Web目录/var/www/html/rh7dvd   2&g ...

  5. PXE网络装机

    PXE网络装机配置 安装CentOS 6.5系统 1.配置服务端IP地址和yum源 略 2.安装配置VSFTP服务 vsftpd 的作用:为客户端提供FTP服务,便于客户端下载操作系统 (1)安装vs ...

  6. dos2unix Linux解决编写脚本出现“%0D

    ## Linux解决编写脚本出现“%0D”# 安装# yum install -y dos2unix# 然后进行转化一下脚本,将其中的install_mysql.sh换成你的脚本# dos2unix ...

  7. YUM仓库服务与PXE网络装机

    1.yum:基于RPM包构建软件更新机制自动解决依赖关系,软件包由软件包库提供 提供方式:ftp服务:ftp://IP地址/仓库目录 Http服务:http ://  IP地址/仓库目录 本地目录:f ...

  8. [转] Linux下编写脚本实现Daemon

    在Linux(以Redhat Linux Enterprise Edition 5.3为例)下,有时需要编写Service.Service也是程序,一般随系统启动用户不干预就不退出的程序,可以称为Se ...

  9. linux pxe网络装机无人值守

    项目分析远程装机的实现:配置DHCP+HTTP+TFTP提供通过vesamenu.c32模块实现图形PXE菜单为不同系统分别提供ks应答文件将第三方rpm包以yum源的方式提供:集中提供ntfs-3g ...

随机推荐

  1. 巡风源码阅读与分析--querylogic函数

    文件位置:views/lib/QueryLogic.py Querylogic() # 搜索逻辑 def querylogic(list): query = {} if len(list) > ...

  2. JS异步解析

    同步和异步 举个

  3. Python内置函数(65)——type

    英文文档: class type(object) class type(name, bases, dict) With one argument, return the type of an obje ...

  4. 【java提高】---java反射机制

    java反射机制 一.概述 1.什么是反射机制 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态 ...

  5. 如何写好css系列之button

    现代前端行业的发展,如果你在css的时候,还没有利用一些预编译工具,是否觉得自己太low了.但你是否考虑过搭建一套自己前端框架.可能你会想这是否有必要,因为基础有boostrap,组件库有:easyu ...

  6. CSRF攻击原理及防御

    一.CSRF攻击原理 CSRF是什么呢?CSRF全名是Cross-site request forgery,是一种对网站的恶意利用,CSRF比XSS更具危险性.想要深入理解CSRF的攻击特性我们有必要 ...

  7. 解决Springboot 的ajax跨域问题-动静分离

    @SpringBootApplication public class FsSysApiApp { public static void main(String[] args) { SpringApp ...

  8. LeetCode专题-Python实现之第21题:Merge Two Sorted Lists

    导航页-LeetCode专题-Python实现 相关代码已经上传到github:https://github.com/exploitht/leetcode-python 文中代码为了不动官网提供的初始 ...

  9. 如何热更新线上的Java服务器代码

    一.前言 1.热更新代码的场景 (1)当线上服务器出现问题时,有些时候现有的手段不足以发现问题所在,可能需要追加打印日志或者增加一些调试代码,如果我们去改代码重新部署,会破坏问题现场,可以通过热部署的 ...

  10. Java 学习笔记 IO流与File操作

    可能你只想简单的使用,暂时不想了解太多的知识,那么请看这里,了解一下如何读文件,写文件 读文件示例代码 File file = new File("D:\\test\\t.txt" ...