
Some networks may not allow 8.8.8.8 Google DNS servers. This patch allows this to be specified in the variables file or to pull the value from the systems resolv.conf file. Change-Id: I494ab82c41bcd59ea85404d49cb2696029353a0e
182 lines
6.9 KiB
Bash
Executable File
182 lines
6.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -eu
|
|
# Copyright [2016] [Kevin Carter]
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
# Load all functions
|
|
source functions.rc
|
|
|
|
# bring in variable definitions if there is a variables.sh file
|
|
[[ -f variables.sh ]] && source variables.sh
|
|
|
|
# The default image for VMs, change it to 16.04 if you want to use xenial as operation system.
|
|
DEFAULT_IMAGE="${DEFAULT_IMAGE:-"$(lsb_release -sd | awk '{print $2}')"}"
|
|
|
|
# Install cobbler
|
|
wget -qO - http://download.opensuse.org/repositories/home:/libertas-ict:/cobbler26/xUbuntu_14.04/Release.key | apt-key add -
|
|
add-apt-repository "deb http://download.opensuse.org/repositories/home:/libertas-ict:/cobbler26/xUbuntu_14.04/ ./"
|
|
apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y --force-yes install cobbler dhcp3-server debmirror isc-dhcp-server ipcalc tftpd tftp fence-agents iptables-persistent
|
|
|
|
# Basic cobbler setup
|
|
sed -i 's/^manage_dhcp\:.*/manage_dhcp\: 1/g' /etc/cobbler/settings
|
|
sed -i 's/^restart_dhcp\:.*/restart_dhcp\: 1/g' /etc/cobbler/settings
|
|
sed -i 's/^next_server\:.*/next_server\: 10.0.0.200/g' /etc/cobbler/settings
|
|
sed -i 's/^server\:.*/server\: 10.0.0.200/g' /etc/cobbler/settings
|
|
sed -i 's/^http_port\:.*/http_port\: 5150/g' /etc/cobbler/settings
|
|
sed -i 's/^INTERFACES.*/INTERFACES="br-dhcp"/g' /etc/default/isc-dhcp-server
|
|
|
|
# Move Cobbler Apache config to the right place
|
|
cp -v /etc/apache2/conf.d/cobbler.conf /etc/apache2/conf-available/
|
|
cp -v /etc/apache2/conf.d/cobbler_web.conf /etc/apache2/conf-available/
|
|
|
|
# Fix Apache conf to match 2.4 configuration
|
|
sed -i "/Order allow,deny/d" /etc/apache2/conf-available/cobbler*.conf
|
|
sed -i "s/Allow from all/Require all granted/g" /etc/apache2/conf-available/cobbler*.conf
|
|
sed -i "s/^Listen 80/Listen 5150/g" /etc/apache2/ports.conf
|
|
sed -i "s/\:80/\:5150/g" /etc/apache2/sites-available/000-default.conf
|
|
|
|
# Enable the above config
|
|
a2enconf cobbler cobbler_web
|
|
|
|
# Enable Proxy modules
|
|
a2enmod proxy
|
|
a2enmod proxy_http
|
|
|
|
# Fix TFTP server arguments in cobbler template to enable it to work on Ubuntu
|
|
sed -i "s/server_args .*/server_args = -s \$args/" /etc/cobbler/tftpd.template
|
|
|
|
mkdir_check "/tftpboot"
|
|
|
|
chown www-data /var/lib/cobbler/webui_sessions
|
|
|
|
# when templated replace \$ with $
|
|
# Copy dhcp template and replace with DNS var
|
|
cp -v templates/dhcp.template /etc/cobbler/dhcp.template
|
|
sed -i "s|__DNS_NAMESERVER__|${DNS_NAMESERVER}|g" /etc/cobbler/dhcp.template
|
|
|
|
# Create a sources.list file
|
|
if [[ $DEFAULT_IMAGE == "14.04."* ]]; then
|
|
cp -v templates/trusty-sources.list /var/www/html/trusty-sources.list
|
|
else
|
|
cp -v templates/xenial-sources.list /var/www/html/xenial-sources.list
|
|
fi
|
|
|
|
# Set the default preseed device name.
|
|
# This is being set because sda is on hosts, vda is kvm, xvda is xen.
|
|
DEVICE_NAME="${DEVICE_NAME:-vda}"
|
|
|
|
# This is set to instruct the preseed what the default network is expected to be
|
|
DEFAULT_NETWORK="${DEFAULT_NETWORK:-eth0}"
|
|
|
|
# Set SSH key to root user's public key
|
|
SSHKEY="${SSHKEY:-$(cat /root/.ssh/id_rsa.pub)}"
|
|
|
|
# Template the seed files
|
|
for seed_file in $(ls -1 templates/pre-seeds); do
|
|
cp -v "templates/pre-seeds/${seed_file}" "/var/lib/cobbler/kickstarts/${seed_file#*'/'}"
|
|
sed -i "s|__DEVICE_NAME__|${DEVICE_NAME}|g" "/var/lib/cobbler/kickstarts/${seed_file#*'/'}"
|
|
sed -i "s|__SSHKEY__|${SSHKEY}|g" "/var/lib/cobbler/kickstarts/${seed_file#*'/'}"
|
|
sed -i "s|__DEFAULT_NETWORK__|${DEFAULT_NETWORK}|g" "/var/lib/cobbler/kickstarts/${seed_file#*'/'}"
|
|
done
|
|
|
|
# Restart services again and configure autostart
|
|
service cobblerd restart
|
|
service apache2 restart
|
|
service xinetd restart
|
|
update-rc.d cobblerd defaults
|
|
|
|
# Update Cobbler Signatures
|
|
cobbler signature update
|
|
|
|
# Get ubuntu server image md5 hash file
|
|
wget -qO /tmp/MD5SUMS http://releases.ubuntu.com/"${DEFAULT_IMAGE:0:5}"/MD5SUMS
|
|
|
|
# Get ubuntu server image, if the server image exists, compare the md5, rm and download new image if the hash is not
|
|
# the same.
|
|
mkdir_check "/var/cache/iso"
|
|
pushd /var/cache/iso
|
|
if [ -f "/var/cache/iso/ubuntu-"${DEFAULT_IMAGE}"-server-amd64.iso" ]; then
|
|
md5=`md5sum ubuntu-"${DEFAULT_IMAGE}"-server-amd64.iso | awk '{ print $1 }'`
|
|
if ! grep -q ${md5} /tmp/MD5SUMS ; then
|
|
rm /var/cache/iso/ubuntu-"${DEFAULT_IMAGE}"-server-amd64.iso
|
|
wget http://releases.ubuntu.com/"${DEFAULT_IMAGE:0:5}"/ubuntu-"${DEFAULT_IMAGE}"-server-amd64.iso
|
|
fi
|
|
else
|
|
wget http://releases.ubuntu.com/"${DEFAULT_IMAGE:0:5}"/ubuntu-"${DEFAULT_IMAGE}"-server-amd64.iso
|
|
fi
|
|
popd
|
|
|
|
# import cobbler image
|
|
if ! cobbler distro list | grep -qw "ubuntu-"${DEFAULT_IMAGE}"-server-x86_64"; then
|
|
mkdir_check "/mnt/iso"
|
|
mount -o loop /var/cache/iso/ubuntu-"${DEFAULT_IMAGE}"-server-amd64.iso /mnt/iso
|
|
cobbler import --name=ubuntu-"${DEFAULT_IMAGE}"-server-amd64 --path=/mnt/iso
|
|
umount /mnt/iso
|
|
fi
|
|
|
|
# Create cobbler profile
|
|
for seed_file in /var/lib/cobbler/kickstarts/ubuntu*"${DEFAULT_IMAGE:0:5}"*.seed; do
|
|
if ! cobbler profile list | grep -qw "${seed_file##*'/'}"; then
|
|
cobbler profile add \
|
|
--name "${seed_file##*'/'}" \
|
|
--distro ubuntu-"${DEFAULT_IMAGE}"-server-x86_64 \
|
|
--kickstart "${seed_file}"
|
|
fi
|
|
done
|
|
|
|
# sync cobbler
|
|
cobbler sync
|
|
|
|
# Get Loaders
|
|
cobbler get-loaders
|
|
|
|
|
|
# Create cobbler systems
|
|
for node_type in $(get_all_types); do
|
|
for node in $(get_host_type ${node_type}); do
|
|
if cobbler system list | grep -qw "${node%%':'*}"; then
|
|
echo "removing node ${node%%':'*} from the cobbler system"
|
|
cobbler system remove --name "${node%%':'*}"
|
|
fi
|
|
echo "adding node ${node%%':'*} from the cobbler system"
|
|
cobbler system add \
|
|
--name="${node%%':'*}" \
|
|
--profile="ubuntu-server-"${DEFAULT_IMAGE:0:5}"-unattended-cobbler-${node_type}.seed" \
|
|
--hostname="${node%%":"*}.openstackci.local" \
|
|
--kopts="interface=${DEFAULT_NETWORK} net.ifnames=0 biosdevname=0" \
|
|
--interface="${DEFAULT_NETWORK}" \
|
|
--mac="52:54:00:bd:81:${node:(-2)}" \
|
|
--ip-address="10.0.0.${node#*":"}" \
|
|
--subnet=255.255.255.0 \
|
|
--gateway=10.0.0.200 \
|
|
--name-servers="${DNS_NAMESERVER}" \
|
|
--static=1
|
|
done
|
|
done
|
|
|
|
# sync cobbler
|
|
cobbler sync
|
|
|
|
# Restart XinetD
|
|
service xinetd stop
|
|
service xinetd start
|
|
|
|
# Remove the expired key and opensuse repo, no need after the cobbler being set up.
|
|
aptkey_mesg=$(apt-key list)
|
|
if [[ $(contains "$aptkey_mesg" "expired") -gt 0 ]]; then
|
|
expired_key=$(echo "$aptkey_mesg" | awk /expired/'{print $ sub(".*\/", "")}')
|
|
apt-key del $expired_key
|
|
add-apt-repository --remove "deb http://download.opensuse.org/repositories/home:/libertas-ict:/cobbler26/xUbuntu_14.04/ ./"
|
|
fi
|