前言:
脚本里面的源是基于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