Files
training-labs/labs/osbash/scripts/pxe_server/install_pxeserver.sh
Roger Luethi 74765e0858 Silence error message
In most cases, the check for a TOP_DIR file finds nothing (which is
perfectly fine), resulting in a confusing error message "cat:
../TOP_DIR: No such file or directory" at the top of the log files.

This patch removes the error message by redirecting the output for the
command to /dev/null.

Change-Id: Ifd771621b584c429c211a4c6aaab7d92f981cb72
2017-11-08 08:56:47 +01:00

145 lines
4.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# This script executes on the pxeserver and installs the PXE services
set -o errexit -o nounset
TOP_DIR=$(cd $(cat "../TOP_DIR" 2>/dev/null||echo $(dirname "$0"))/.. && pwd)
source "$TOP_DIR/config/paths"
source "$CONFIG_DIR/credentials"
source "$CONFIG_DIR/openstack"
source "$LIB_DIR/functions.guest.sh"
source "$CONFIG_DIR/config.pxeserver"
exec_logfile
indicate_current_auto
PXE_NET_IP=$(get_node_ip_in_network "$(hostname)" "mgmt")
echo "IP on the management network: $PXE_NET_IP."
# IP minus the last octet, something like "10.0.0"
PXE_NET_PREFIX=$(remove_last_octet "$PXE_NET_IP")
# Network interface on the network of the default gateway
PXE_NET_IFACE=$(ip route | grep "$PXE_NET_PREFIX" | awk '{print $3}')
echo "Network interface on the network of the default gateway: $PXE_NET_IFACE."
echo "Editing /etc/hosts to include pxeserver"
echo "$PXE_NET_IP pxeserver" | sudo tee -a /etc/hosts
#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
echo "Installing the dhcp server."
sudo apt install -y isc-dhcp-server
echo "Setting dhcp server interface to $PXE_NET_IFACE."
sudo sed -i "s/^INTERFACES=.*/INTERFACES='$PXE_NET_IFACE'/" /etc/default/isc-dhcp-server
TMPF=/etc/dhcp/dhcpd.conf
echo "Editing $TMPF."
cat << DHCPD | sudo tee -a "$TMPF"
subnet ${PXE_NET_PREFIX}.0 netmask 255.255.255.0 {
range ${PXE_NET_PREFIX}.230 ${PXE_NET_PREFIX}.240;
option routers $PXE_GATEWAY;
option domain-name-servers $PXE_GATEWAY;
option broadcast-address ${PXE_NET_PREFIX}.255;
}
allow booting;
allow bootp;
option option-128 code 128 = string;
option option-129 code 129 = text;
next-server $PXE_NET_IP;
filename "pxelinux.0";
DHCPD
sudo sed -i 's/^#authoritative;/authoritative;/' "$TMPF"
echo "Restarting dhcp server."
sudo service isc-dhcp-server restart
#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Setup the tftp server with inetd and apache
echo "Installing apache, tftpd, and inetd."
sudo apt install -y apache2 tftpd-hpa inetutils-inetd
TMPF=/etc/default/tftpd-hpa
echo "Editing $TMPF."
echo 'RUN_DAEMON="yes"' | sudo tee -a "$TMPF"
echo 'OPTIONS="-l -s /var/lib/tftpboot"' | sudo tee -a "$TMPF"
echo "Enabling tftpd in /etc/inetd.conf."
echo "tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot" | sudo tee -a /etc/inetd.conf
echo "Restarting tftpd server."
sudo service tftpd-hpa restart
#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
echo "Extracting and configuring the Ubuntu boot image."
ISO_NAME=$(echo $IMG_DIR/ubuntu-*.iso | tail -1)
sudo mount -o loop "$ISO_NAME" /mnt/
sudo cp -fr /mnt/install/netboot/* /var/lib/tftpboot/
sudo mkdir -p /var/www/html/ubuntu
sudo cp -fr /mnt/* /var/www/html/ubuntu/
sudo rm -f /var/lib/tftpboot/pxelinux.cfg/default
#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
echo "Configuring DNS server."
sudo apt -y install bind9
sudo cp /etc/bind/named.conf.options /etc/bind/named.conf.options.BK
sudo sed -i 's|// forwarders {|forwarders {\n\
\t\t8.8.8.8;\n\
\t\t8.8.4.4;\n\
\t};\n|' /etc/bind/named.conf.options
echo "Restarting DNS server."
sudo service bind9 restart
#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
set_iface_list
IFACE_0=$(ifnum_to_ifname 0)
IFACE_1=$(ifnum_to_ifname 1)
echo "Creating a VLAN IP as gateway (interfaces $IFACE_0, $IFACE_1)."
sudo apt -y install vlan
sudo modprobe 8021q
sudo vconfig add "$IFACE_1" 10
sudo su -c 'echo "8021q" >> /etc/modules'
cat << VLAN_IP | sudo tee -a /etc/network/interfaces
auto $IFACE_1.10
iface $IFACE_1.10 inet static
address $PXE_GATEWAY
netmask 255.255.255.0
vlan-raw-device $IFACE_1
VLAN_IP
sudo ifup "$IFACE_1".10
# Forward traffic from eth0.10 to eth0 and eth1
echo "Editing /etc/sysctl.conf: enabling IPv4 forwarding."
sudo sed -i 's/.*net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
# Reload changed file
sudo sysctl -p /etc/sysctl.conf
echo 1 | sudo tee -a /proc/sys/net/ipv4/ip_forward
#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
echo "Configuring iptables."
sudo iptables -F
sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -X
sudo iptables --table nat --append POSTROUTING --out-interface $IFACE_0 -j MASQUERADE
sudo iptables --append FORWARD --in-interface $IFACE_0 -j ACCEPT
sudo iptables --append FORWARD --in-interface $IFACE_1 -j ACCEPT
echo "Making iptable rules persistent."
echo iptables-persistent iptables-persistent/autosave_v4 boolean true | sudo debconf-set-selections
echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections
sudo apt -y install iptables-persistent