#!/bin/bash set -eu set -o noglob fatal() { local MSG="${1}" >&2 echo "[!] ${MSG}" exit 1 } info() { local MSG="${1}" echo "[-] ${MSG}" } usage() { echo "$(basename $0) backup-directory" echo " backup-directory - path to backup directory" exit 1 } move() { local FILE="${1}" local DIRNAME=$(dirname ${FILE}) [[ -f $FILE || -L $FILE ]] || return 0 mkdir -p "${BACKUP_DIR}/${DIRNAME##/}/" mv ${FILE} "${BACKUP_DIR}/${DIRNAME##/}/" info "Original file ${FILE} was moved to ${BACKUP_DIR}/${DIRNAME##/}/" } write() { local FILE="${1}" local CONTENT="${2}" local CHMOD="${3:-}" info "Creating file ${FILE}" move ${FILE} echo "${CONTENT}" > ${FILE} [[ -n ${CHMOD} ]] && chmod ${CHMOD} ${FILE} || : } declare -r BACKUP_DIR=$(realpath -sm "${1:-}" -q || :) [[ -z ${BACKUP_DIR} ]] && usage [[ -e ${BACKUP_DIR} ]] || fatal "Does not exist: ${BACKUP_DIR}" [[ -d ${BACKUP_DIR} ]] || fatal "Is not a directory: ${BACKUP_DIR}" [[ -z "$(ls -A1 ${BACKUP_DIR})" ]] || fatal "Directory is not empty: ${BACKUP_DIR}" declare -r ENI_IFUP_DIR="/etc/network/if-up.d" declare -r ENI_IFDOWN_DIR="/etc/network/if-down.d" declare -r ENI_IFUP_FILE="${ENI_IFUP_DIR}/phoenix-ga-netinit" declare -r ENI_IFDOWN_FILE="${ENI_IFDOWN_DIR}/phoenix-ga-netinit" declare -r ENI_IFUP_CONTENT=$(cat <<'EOF' #!/bin/sh set -u /usr/sbin/phoenix-ga netinit --configure-iface $IFACE exit 0 EOF ) declare -r ENI_IFDOWN_CONTENT=$(cat <<'EOF' #!/bin/sh set -u /usr/sbin/phoenix-ga netinit --deconfigure-iface $IFACE exit 0 EOF ) configure_eni () { [[ -d ${ENI_IFUP_DIR} && -d ${ENI_IFDOWN_DIR} ]] && info "ifupdown detected" || return 0 write "${ENI_IFUP_FILE}" "${ENI_IFUP_CONTENT}" 750 write "${ENI_IFDOWN_FILE}" "${ENI_IFDOWN_CONTENT}" 750 } declare -r SYSCONFIG_NS_DIR="/etc/sysconfig/network-scripts" declare -r SYSCONFIG_ETH0_CFG_FILE="${SYSCONFIG_NS_DIR}/ifcfg-eth0" declare -r SYSCONFIG_ETH1_CFG_FILE="${SYSCONFIG_NS_DIR}/ifcfg-eth1" declare -r SYSCONFIG_NETINIT_FILE="${SYSCONFIG_NS_DIR}/phoenix-ga-netinit" declare -r SYSCONFIG_IFUP_LOCAL_FILE="/sbin/ifup-local" declare -r SYSCONFIG_IFDOWN_LOCAL_FILE="/sbin/ifdown-local" declare -r SYSCONFIG_FLOPPY_MODULES_FILE="/etc/sysconfig/modules/floppy.modules" declare -r SYSCONFIG_ETH0_CFG_CONTENT=$(cat <<'EOF' DEVICE=eth0 ONBOOT=yes NM_CONTROLLED=no EOF ) declare -r SYSCONFIG_ETH1_CFG_CONTENT=$(cat <<'EOF' DEVICE=eth1 ONBOOT=yes NM_CONTROLLED=no EOF ) declare -r SYSCONFIG_NETINIT_CONTENT=$(cat <<'EOF' #!/bin/sh set -u case "$1" in 'up') /usr/sbin/phoenix-ga netinit --configure-iface "$2" ;; 'down') /usr/sbin/phoenix-ga netinit --deconfigure-iface "$2" ;; esac exit 0 EOF ) declare -r SYSCONFIG_IFUP_LOCAL_CONTENT=$(cat <<'EOF' #!/bin/sh set -u exec /etc/sysconfig/network-scripts/phoenix-ga-netinit "up" "$1" EOF ) declare -r SYSCONFIG_IFDOWN_LOCAL_CONTENT=$(cat <<'EOF' #!/bin/sh set -u exec /etc/sysconfig/network-scripts/phoenix-ga-netinit "down" "$1" EOF ) declare -r SYSCONFIG_FLOPPY_MODULES_CONTENT=$(cat <<'EOF' #!/bin/sh set -u /sbin/modprobe floppy exit 0 EOF ) configure_sysconfig () { [[ -d ${SYSCONFIG_NS_DIR} ]] && info "CentOS-based sysconfig detected" || return 0 write "${SYSCONFIG_ETH0_CFG_FILE}" "${SYSCONFIG_ETH0_CFG_CONTENT}" write "${SYSCONFIG_ETH1_CFG_FILE}" "${SYSCONFIG_ETH1_CFG_CONTENT}" write "${SYSCONFIG_NETINIT_FILE}" "${SYSCONFIG_NETINIT_CONTENT}" 750 write "${SYSCONFIG_IFUP_LOCAL_FILE}" "${SYSCONFIG_IFUP_LOCAL_CONTENT}" 750 write "${SYSCONFIG_IFDOWN_LOCAL_FILE}" "${SYSCONFIG_IFDOWN_LOCAL_CONTENT}" 750 write "${SYSCONFIG_FLOPPY_MODULES_FILE}" "${SYSCONFIG_FLOPPY_MODULES_CONTENT}" } declare -r SYSCONFIG_SUSE_ETH0_CFG_FILE="/etc/sysconfig/network/ifcfg-eth0" declare -r SYSCONFIG_SUSE_ETH1_CFG_FILE="/etc/sysconfig/network/ifcfg-eth1" declare -r SYSCONFIG_SUSE_NETINIT_FILE="/etc/sysconfig/network/scripts/phoenix-ga-netinit" declare -r SYSCONFIG_SUSE_ETH0_CFG_CONTENT=$(cat <<'EOF' DEVICE=eth0 STARTMODE=auto NM_CONTROLLED=no POST_UP_SCRIPT="compat:suse:phoenix-ga-netinit" POST_DOWN_SCRIPT="compat:suse:phoenix-ga-netinit" EOF ) declare -r SYSCONFIG_SUSE_ETH1_CFG_CONTENT=$(cat <<'EOF' DEVICE=eth1 STARTMODE=auto NM_CONTROLLED=no POST_UP_SCRIPT="compat:suse:phoenix-ga-netinit" POST_DOWN_SCRIPT="compat:suse:phoenix-ga-netinit" EOF ) declare -r SYSCONFIG_SUSE_NETINIT_CONTENT=$(cat <<'EOF' #!/bin/sh set -u # The script is executed as # $script $interface $interface -o $action # with the pre-up, post-up, pre-down, post-down actions # corresponding with the variable name. # # See details in 'man 5 ifcfg' >/dev/null 2>&1 blockdev --flushbufs /dev/fd0 case "$4" in 'post-up') /usr/sbin/phoenix-ga netinit --configure-iface "$1" ;; 'post-down') /usr/sbin/phoenix-ga netinit --deconfigure-iface "$1" ;; esac exit 0 EOF ) configure_sysconfig_opensuse() { [[ -d "/etc/sysconfig/network/scripts/" ]] && info "openSUSE-based sysconfig detected" || return 0 write "${SYSCONFIG_SUSE_ETH0_CFG_FILE}" "${SYSCONFIG_SUSE_ETH0_CFG_CONTENT}" write "${SYSCONFIG_SUSE_ETH1_CFG_FILE}" "${SYSCONFIG_SUSE_ETH1_CFG_CONTENT}" write "${SYSCONFIG_SUSE_NETINIT_FILE}" "${SYSCONFIG_SUSE_NETINIT_CONTENT}" 750 } configure_eni configure_sysconfig configure_sysconfig_opensuse