#!/usr/bin/env bash

NETWORK=${NETWORK:-yes}
NETWORK_EC2=${NETWORK_EC2:-no}
SERVICES=${SERVICES:-one-context-local one-context}

rm -f /etc/udev/rules.d/70-persistent-cd.rules
rm -f /etc/udev/rules.d/70-persistent-net.rules

# Reload udev rules
udevadm control --reload >/dev/null 2>&1 || :


### Enable services ########################################

if which systemctl >/dev/null 2>&1 && \
    [ -d /etc/systemd ] && \
    [ -f /usr/lib/systemd/system/one-context.service ];
then
    systemctl daemon-reload >/dev/null 2>&1 || :

    for S in ${SERVICES}; do
        systemctl enable "${S}.service" >/dev/null 2>&1
    done
fi

if which chkconfig >/dev/null 2>&1; then
    for S in ${SERVICES}; do
        chkconfig --add "${S}" >/dev/null 2>&1
    done

    # EL6: refresh initramfs via dracut for growroot module
    if [ -f /usr/share/dracut/modules.d/50growroot/install ]; then
        for I in $(find /boot -name 'initramfs-*.img'); do
            KERNEL_VERS=$(echo "${I}" | sed -e 's/.*initramfs-\(.*\)\.img/\1/')
            dracut -f "${I}" "${KERNEL_VERS}" || :
        done
    fi

elif which update-rc.d >/dev/null 2>&1; then
    for S in ${SERVICES}; do
        update-rc.d "${S}" enable   >/dev/null 2>&1
        update-rc.d "${S}" defaults >/dev/null 2>&1
    done

elif which rc-update >/dev/null 2>&1; then
    for S in ${SERVICES}; do
        rc-update add "${S}" boot >/dev/null 2>&1
    done

elif [ -x /bin/freebsd-version ]; then
    :

else
    echo 'WARNING: Contextualization service not enabled automatically' >&2
fi


### Cleanup network configuration ##########################

if [ "${NETWORK}" != 'yes' ]; then
    exit
fi

# Debian based distros
if [ -d /etc/network ]; then
    # Prepare network files
    cp /etc/network/interfaces /etc/network/interfaces.$(date "+%s")
    rm -rf /etc/network/interfaces.d
    rm -rf /etc/netplan/*

    if [ "${NETWORK_EC2}" = 'yes' ]; then
        cat > /etc/network/interfaces <<EOT
# The loopback network interface
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
EOT
    else
        cat > /etc/network/interfaces <<EOT
# The loopback network interface
auto lo
iface lo inet loopback
EOT
    fi

    # Do not reconfigure network interfaces on boot
#    if [ -f /etc/default/networking ]; then
#        if ! grep -q ^CONFIGURE_INTERFACES /etc/default/networking; then
#            echo 'CONFIGURE_INTERFACES=no' >> /etc/default/networking
#        fi
#    fi
fi

# RedHat based distros
if [ -d /etc/sysconfig/network-scripts ]; then
    # Prepare network files
    find /etc/sysconfig/network-scripts -type f \
        -name 'ifcfg-*' ! -name 'ifcfg-lo' \
        -exec rm -f {} \;

    if [ "${NETWORK_EC2}" = 'yes' ]; then
        cat >/etc/sysconfig/network-scripts/ifcfg-eth0 <<EOT
DEVICE="eth0"
BOOTPROTO="dhcp"
ONBOOT="yes"
TYPE="Ethernet"
USERCTL="yes"
PEERDNS="yes"
IPV6INIT="no"
NM_CONTROLLED="no"
PERSISTENT_DHCLIENT="1"
EOT
    fi
fi

# openSUSE based distros
if [ -d /etc/sysconfig/network ]; then
    # Prepare network files
    find /etc/sysconfig/network -type f \
        \( -name 'ifcfg-*' -o -name 'ifroute-*' -o -name 'ifsysctl-*' \) \
        ! -name 'ifcfg-lo' ! -name 'ifroute-lo' ! -name 'ifsysctl-lo' \
        -exec rm -f {} \;

    rm -f /etc/sysconfig/network/routes /etc/sysconfig/network/ifsysctl

    sed -i '/^NETCONFIG_DNS_STATIC_SERVERS=/ s/=.*$/="/' /etc/sysconfig/network/config
    sed -i '/^NETCONFIG_DNS_STATIC_SEARCHLIST=/ s/=.*$/=""/' /etc/sysconfig/network/config

    if [ "${NETWORK_EC2}" = 'yes' ]; then
        cat >/etc/sysconfig/network/ifcfg-eth0 <<EOT
DEVICE=eth0
BOOTPROTO=dhcp4
STARTMODE=auto
USERCONTROL=yes
EOT
    fi
fi

# FreeBSD based distros
#TODO: pfsense paths?
if [ -x /bin/freebsd-version ]; then
    rm -f /etc/rc.conf.d/network /etc/rc.conf.d/routing

    if [ -f /etc/rc.conf ]; then
        sed -i '' \
            -e '/^ifconfig_/d' \
            -e '/^route_/d' \
            -e '/^static_routes/d' \
            -e '/^defaultrouter/d' \
            /etc/rc.conf
    fi
fi