-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathpxe_configure.sh
More file actions
executable file
·152 lines (139 loc) · 4.89 KB
/
pxe_configure.sh
File metadata and controls
executable file
·152 lines (139 loc) · 4.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#!/usr/bin/bash
# @Author: Aldo Sotolongo
# @Date: 2016-08-29T23:38:02-04:00
# @Email: aldenso@gmail.com
# @Last modified by: Aldo Sotolongo
# @Last modified time: 2016-09-01T19:38:48-04:00
# FILE: pxe_configure.sh
# DESCRIPTION: Script to automate a basic centos7 pxe
# REQUIREMENTS: centos7 OS, centos install image in $IMAGEDIR dir.
##############################
# Check Privileges
##############################
USER=$(id -u)
if [ "$USER" -eq 0 ]
then
echo "###############################"
echo "OK: running with root privileges"
else
echo "you are not root or have root privileges with sudo!"
exit 1
fi
##############################
# Configuration
##############################
TFTPDIR="/var/lib/tftpboot"
IMAGEDIR="/var/www/html/centos7"
IMAGEPXE="$IMAGEDIR/images/pxeboot"
DHCPDIR="/etc/dhcp"
TFTPCONF="/etc/xinetd.d"
DHCPSERVER="192.168.100.1"
DHCPSUBNETMASK="255.255.255.0"
DHCPSUBNET=$(ipcalc -n $DHCPSERVER $DHCPSUBNETMASK | cut -d "=" -f2)
DHCPBROADCAST=$(ipcalc -b $DHCPSERVER $DHCPSUBNETMASK | cut -d "=" -f2)
DHCPRANGEFIRSTIP="192.168.100.150"
DHCPRANGELASTIP="192.168.100.200"
SYSLINUXDIR="/usr/share/syslinux"
if ( [ -d "$IMAGEDIR" ] && [ -d "$IMAGEPXE" ] )
then
echo "OK: $IMAGEDIR and $IMAGEPXE exist"
else
echo "Make sure IMAGEDIR and IMAGEPXE exist and are properly configured.
IMAGEDIR: $IMAGEDIR
IMAGEPXE: $IMAGEPXE
"
exit 1
fi
##############################
# Install packages.
##############################
packages="dhcp syslinux tftp-server httpd xinetd"
echo "###############################"
echo "Installing packages $packages"
yum install -y $packages > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "Packages installed successfully"
else
echo "Failed to install Packages."
exit 1
fi
##############################
# enable tftp in xinetd
##############################
cp tftp $TFTPCONF/tftp
##############################
# configure dhcp server
##############################
cp $DHCPDIR/dhcpd.conf $DHCPDIR/dhcpd.conf_$(date +%F-%T)
cp dhcpd.conf-template dhcpd.conf-template-orig
sed -i s/"subnet 192.168.100.0 netmask 255.255.255.0"/"subnet $DHCPSUBNET netmask $DHCPSUBNETMASK"/g dhcpd.conf-template
sed -i s/"range 192.168.100.231 192.168.100.253;"/"range $DHCPRANGEFIRSTIP $DHCPRANGELASTIP;"/g dhcpd.conf-template
sed -i s/"option routers 192.168.100.1;"/"option routers $DHCPSERVER;"/g dhcpd.conf-template
sed -i s/"next-server 192.168.100.1;"/"next-server $DHCPSERVER;"/g dhcpd.conf-template
sed -i s/"option broadcast-address 192.168.100.254;"/"option broadcast-address $DHCPBROADCAST;"/g dhcpd.conf-template
mv dhcpd.conf-template dhcpd.conf-template-final
mv dhcpd.conf-template-orig dhcpd.conf-template
cp dhcpd.conf-template-final $DHCPDIR/dhcpd.conf
echo "###############################
DHCP configured.
DHCP IP: $DHCPSERVER
DHCP MASK: $DHCPSUBNETMASK
DHCP BROADCAST: $DHCPBROADCAST
DHCP RANGE: $DHCPRANGEFIRSTIP - $DHCPRANGELASTIP
###############################"
##############################
# update syslinux menu
##############################
sed -e "s|inst.repo=http://192.168.100.1|inst.repo=http://$DHCPSERVER|g" default_menu > default_menu-final
sed -ie "s|inst.ks=http://192.168.100.1|inst.ks=http://$DHCPSERVER|g" default_menu-final
##############################
# copy syslinux templates
##############################
cp $SYSLINUXDIR/menu.c32 $SYSLINUXDIR/pxelinux.0 $SYSLINUXDIR/memdisk $SYSLINUXDIR/mboot.c32 $SYSLINUXDIR/chain.c32 $TFTPDIR
cp $IMAGEPXE/vmlinuz $IMAGEPXE/initrd.img $TFTPDIR
mkdir $TFTPDIR/pxelinux.cfg
cp default_menu-final $TFTPDIR/pxelinux.cfg/default
echo "###############################
TFTPBOOT configured.
###############################"
##############################
# cofigure firewall
##############################
firewall-cmd --add-service=http --permanent --zone=public > /dev/null 2>&1
firewall-cmd --add-service=tftp --permanent --zone=public > /dev/null 2>&1
firewall-cmd --add-service=dhcp --permanent --zone=public > /dev/null 2>&1
firewall-cmd --reload > /dev/null 2>&1
echo "###############################
Firewall configured.
$(firewall-cmd --list-services --zone=public --permanent)
###############################"
##############################
# change selinux to permissive
##############################
setenforce 0
sed -i s/"^SELINUX=enforcing"/"SELINUX=permissive"/g /etc/selinux/config
echo "###############################
SElinux changed to permissive.
###############################"
##############################
# enable services.
##############################
services="dhcpd xinetd httpd"
for service in $services
do
systemctl start $service > /dev/null 2>&1
if [ $? -ne 0 ]
then
echo "Failed to start service: $service"
else
systemctl enable $service > /dev/null 2>&1
echo "Services $service running and enabled."
fi
done
##############################
# tell user basic pxe server is ready
##############################
echo "###############################
Basic PXE Server is Ready to use.
###############################"