ubuntu自动部署pxe脚本

前言:
脚本里面的源是基于ubuntu20.04的,如果是其他版本请更换源地址
默认用户和密码都是ubuntu

#/bin/bash
#ubuntu 下pxe自动部署

function rely_on(){
	# 检查源
	echo "正在检查依赖环境"
	if [[ ! `grep -o "http://mirrors.aliyun.com/ubuntu/" /etc/apt/sources.list` ]]
	then
		cp -f /etc/apt/sources.list /etc/apt/sources.list.bak
		cat >/etc/apt/sources.list<<EOF
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
EOF
		echo "正在更新源"
		apt update -y &>/dev/null
	fi
}

function install_software(){
	software=(tftpd-hpa apache2 isc-dhcp-server whois wget)
	for i in ${software[@]}
	do
		if [[ !`command -v $i` ]]
		then
			echo "正在安装$i......"
			apt-get install $i -y > /dev/null 2> /dev/null 
		fi
	done
}

function config_tftp(){
	# 配置tftp
	echo "正在配置tftp......"
	if [[ ! -d '/var/lib/tftpboot' ]]
	then
		mkdir -p /var/lib/tftpboot
	fi
	cat > /etc/apache2/conf-available/tftp.conf <<EOF
<Directory /var/lib/tftpboot>
        Options +FollowSymLinks +Indexes
        Require all granted
</Directory>
Alias /tftp /var/lib/tftpboot
EOF
	cp -f /etc/default/tftpd-hpa /etc/default/tftpd-hpa.bak
	cat >//etc/default/tftpd-hpa<<EOF
# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"
EOF
	a2enconf tftp
	
}


function config_dhcp(){
	echo "正在配置dhcp服务器,请按要求填写信息......"
	cp -f /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
	read -p "输入网络地址: " network_ipaddress
	read -p "输入掩码(如255.255.255.0): " netmask
	read -p "输入路由地址:" route_address
	read -p "输入pxe下发地址:" pxe_address
	read -p "输入pxe下发起始地址:" pxe_start_ipaddress
	read -p "输入pxe终止地址:" pxe_ternubate_address
			cat >/etc/dhcp/dhcpd.conf <<EOF
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp-server/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
#default-lease-time 600;
#max-lease-time 7200;
#ddns-update-style none;
option space pxelinux;
option pxelinux.magic code 208 = string;
option pxelinux.configfile code 209 = text;
option pxelinux.pathprefix code 210 = text;
option pxelinux.reboottime code 211 = unsigned integer 32;
option architecture-type code 93 = unsigned integer 16;
option domain-name-servers 114.114.114.114;


shared-network 10.0{
    subnet $network_ipaddress netmask $netmask {
            option routers $route_address;
            range $pxe_start_ipaddress $pxe_ternubate_address;
           
        class "pxeclients" {
	        match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
	        next-server $pxe_address;

	        if option architecture-type = 00:07 {
	            filename "uefi/BOOTX64.EFI";
	        } 
            else {
	            filename "pxelinux/pxelinux.0";
	        }
	    }
    }

}
EOF
	echo "请确认信息"
	echo "----------------------------------"
	echo "1、$network_ipaddress"
	echo "2、$netmask"
	echo "3、$route_address"
	echo "4、$pxe_address"
	echo "5、$pxe_start_ipaddress"
	echo "6、$pxe_ternubate_address"
	echo "----------------------------------"
}

function config_pxe(){
	mkdir -p /var/lib/tftpboot/images
	mkdir -p /var/lib/tftpboot/uefi
	mkdir -p /var/lib/tftpboot/pxelinux
	mkdir -p /var/lib/tftpboot/grub
	mkdir -p /var/lib/tftpboot/ubuntu20-04-5
	ip=`cat /etc/dhcp/dhcpd.conf | grep next-server  | awk '{print $2}' | head -c-2`
	echo "正在下载预配置ubuntu镜像请稍后预计5分钟"
	wget https://repo.huaweicloud.com/ubuntu-releases/20.04/ubuntu-20.04.5-live-server-amd64.iso -P /var/lib/tftpboot/images > /dev/null 2> /dev/null 
	mount /var/lib/tftpboot/images/ubuntu-20.04.5-live-server-amd64.iso /var/lib/tftpboot/ubuntu20-04-5
	cp -r /var/lib/tftpboot/ubuntu20-04-5/EFI/BOOT/* /var/lib/tftpboot/uefi
	cat >/var/lib/tftpboot/grub/grub.cfg <<EOF
set default="0"
set timeout=20

menuentry 'Ubuntu 20.04.5' {
  linuxefi ubuntu20-04-5/casper/vmlinuz root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url=http://172.16.20.17/tftp/images/ubuntu-20.04.5-live-server-amd64.iso autoinstall ds=nocloud-net\;s=http://172.16.20.17/tftp/ubuntu20-04-5/ ---
  initrdefi ubuntu20-04-5/casper/initrd
}
EOF

		cat > /var/lib/tftpboot/ubuntu20-04-5/meta-data <<EOF
instance-id: focal-autoinstall
EOF
	cat >/var/lib/tftpboot/ubuntu20-04-5/user-data<<EOF
#cloud-config
autoinstall:
  version: 1
  identity:
    hostname: ubuntu-server
    password: "$6$exDY1mhS4KUYCE/2$zmn9ToZwTKLhCw.b4/b.ZRTIZM30JZ4QrOQ2aOXJ8yk96xpcCof0kxKwuX1kqLG/ygbJ1f8wxED22bTL4F46P0"
    username: ubuntu
EOF
}

function check_all_service()
{
    systemctl restart tftpd-hpa
    systemctl restart apache2
    systemctl restart isc-dhcp-server
	systemctl enable tftpd-hpa
    systemctl enable apache2
    systemctl enable isc-dhcp-server
    echo "==============================="
    echo "==="
    echo "===   All service OK"
    echo "==="
    echo "==============================="
}




function main(){
	stty  erase  ^h
	rely_on
	install_software
	config_tftp
	config_dhcp
	config_pxe
	check_all_service
	ip=`cat /etc/dhcp/dhcpd.conf | grep next-server  | awk '{print $2}' | head -c-2`
	echo "--------------------------------------"
	echo ""
	echo "         自动pxe部署完毕         "
	echo "tftp文件地址存在/var/lib/tftpboot"
	echo "apache2地址:http://$ip/tftp/"
	echo "默认下发ubuntu账号/密码:ubutnu/ubuntu"
	echo ""
	echo "--------------------------------------"

}

main
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱哭的猫!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值