#!/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 UUID_GEN_KERNEL_PATH="/proc/sys/kernel/random/uuid" [[ -e ${UUID_GEN_KERNEL_PATH} ]] || fatal "UUID generator does not exist: ${UUID_GEN_KERNEL_PATH}" [[ -f ${UUID_GEN_KERNEL_PATH} ]] || fatal "UUID generator is not a regular: ${UUID_GEN_KERNEL_PATH}" declare -r NM_DISPATCHER_DIR="/usr/lib/NetworkManager/dispatcher.d" declare -r NM_CONNECTIONS_DIR="/usr/lib/NetworkManager/system-connections" declare -r NM_CFG_DIR="/usr/lib/NetworkManager/conf.d" declare -r NM_CFG_DNS_FILE="${NM_CFG_DIR}/zz-disable-dns-updating.conf" declare -r NM_DISPATCHER_NETINIT_FILE="/usr/lib/NetworkManager/dispatcher.d/phoenix-ga-netinit" declare -r NM_WAN_CFG_FILE="${NM_CONNECTIONS_DIR}/netangels-wan.nmconnection" declare -r NM_LAN_CFG_FILE="${NM_CONNECTIONS_DIR}/netangels-lan.nmconnection" declare -r UUID_WAN=$(cat ${UUID_GEN_KERNEL_PATH}) declare -r NM_WAN_CFG_CONTENT=$(cat </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 exit 0 } # Важен порядок вызова функций. configure_sysconfig должен вызываться после configure_networkmanager # Если схема настройки найдена, то каждая функция выполняет exit 0 после сохранения конфигов. configure_networkmanager configure_eni configure_sysconfig configure_sysconfig_opensuse