#!/usr/bin/env bash ENABLED=yes [[ ${ENABLED} == yes ]] || exit 0 DEBUGMODE=no SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/network; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null FILE_NETWORK="${SYSCONF}/network" debug_mode "$0" "$@" # mount ublinux-server ## Переделать authselect и связать с опциями домена # Name Service Switch Win Avahi nsswitch.conf # if [[ ${NSSWITCHAVAHI,,} == "yes" ]]; then # file_nss=$(grep hosts /etc/nsswitch.conf) # grep -q "mdns4_minimal" <<< "${file_nss}" || sed "/^hosts: /s/ resolve/ mdns4_minimal [NOTFOUND=return] resolve/" -i /etc/nsswitch.conf # grep -q "mdns4" <<< "${file_nss}" || sed "/^hosts: /s/ dns/ dns mdns4/" -i /etc/nsswitch.conf # fi # if [[ ${NSSWITCHWINS,,} == "yes" ]]; then # [[ -z ${file_nss} ]] && file_nss=$(grep hosts /etc/nsswitch.conf) # grep -q "wins" <<< "${file_nss}" || sed "/^hosts:/s/ dns/ dns wins/" -i /etc/nsswitch.conf # fi exec_network(){ # Network configuration if [[ -n ${NETWORK[@]} ]]; then NMCLI_UP_DEVICE=() NMCLI_UP_UUID=() IFS=$'\n'; declare -a NETWORK_ORDER=($(sed -E '/^\s*NETWORK\[/!d;s/^\s*NETWORK\[(.*)\]=.*/\1/' ${FILE_NETWORK})); unset IFS #' for NETWORK_ITEM in "${NETWORK_ORDER[@]}"; do NETWORK_NAME=${NETWORK_ITEM%%@*} NETWORK_TYPE=${NETWORK_ITEM#*@} #NETWORK_DEVICE_ALL=$(nmcli --mode tabular -g GENERAL.DEVICE,GENERAL.TYPE,GENERAL.CONNECTION,GENERAL.CON-UUID device show | sed -E ':a;N;$!ba;s/\n/,/g;s/[,]{2,}/\n/g' | grep '\S') NETWORK_DEVICE_ALL="$(nmcli -m multiline -f GENERAL.DEVICE,GENERAL.TYPE,GENERAL.CONNECTION,GENERAL.CON-UUID,GENERAL.HWADDR device show | sed -E "s/.*:\s{4,}//" | sed -E ':a;N;$!ba;s/\n/|/g;s/[|]{2,}/|\n/g')|" NETWORK_DEVICE_ALL+=$'\n'$(nmcli -m tabular -t -f device,type,name,uuid connection show | sed 's/$/|/;s/:/|/g;s/802-3-ethernet/ethernet/g;s/802-11-wireless/wireless/g') NETWORK_DEVICE_ALL=$(sort --field-separator='|' -u -k 1,1 <<< ${NETWORK_DEVICE_ALL}) # echo "${NETWORK_NAME}@${NETWORK_TYPE}=${NETWORK[${NETWORK_ITEM}]}" if [[ ${NETWORK_TYPE,,} == "nmcli" ]]; then eval "nmcli ${NETWORK[${NETWORK_ITEM}]}" &>/dev/null elif [[ ${NETWORK_TYPE,,} == "wifi" ]]; then eval "nmcli device wifi ${NETWORK[${NETWORK_ITEM}]}" &>/dev/null elif [[ ${NETWORK_TYPE,,} == "imp-ovpn" ]]; then eval "nmcli connection import type openvpn file ${NETWORK[${NETWORK_ITEM}]}" &>/dev/null elif [[ ${NETWORK_TYPE,,} == "add-pptp" ]]; then eval "nmcli connection add connection.id ${NETWORK_NAME} connection.type vpn vpn.service-type pptp ${NETWORK[${NETWORK_ITEM}]}" &>/dev/null elif [[ ${NETWORK_TYPE,,} == "add-l2tp" ]]; then eval "nmcli connection add connection.id ${NETWORK_NAME} connection.type vpn vpn.service-type l2tp ${NETWORK[${NETWORK_ITEM}]}" &>/dev/null else [[ ${NETWORK_NAME,,} =~ "all"|"any" ]] && UNIT_DEVICE_FIND=${NETWORK_DEVICE_ALL} \ || UNIT_DEVICE_FIND=$(grep "${NETWORK_NAME}|" <<< ${NETWORK_DEVICE_ALL}) # echo "UNIT_DEVICE_FIND=${UNIT_DEVICE_FIND}" while read UNIT_DEVICE; do # echo "UNIT_DEVICE=${UNIT_DEVICE}" DEVICE=${UNIT_DEVICE%%|*}; UNIT_DEVICE_TRIM=${UNIT_DEVICE#*|} TYPE=${UNIT_DEVICE_TRIM%%|*}; UNIT_DEVICE_TRIM=${UNIT_DEVICE_TRIM#*|} CONNECTION=${UNIT_DEVICE_TRIM%%|*}; UNIT_DEVICE_TRIM=${UNIT_DEVICE_TRIM#*|} UUID=${UNIT_DEVICE_TRIM%%|*} # echo "DEVICE=${DEVICE}:TYPE=${TYPE}:CONNECTION=${CONNECTION}:UUID=${UUID}" if [[ -n ${DEVICE} ]]; then [[ ${NETWORK_TYPE,,} == "devmod" ]] && NMCLI_UP_DEVICE+=("${DEVICE}") && eval "nmcli device modify ${DEVICE} ${NETWORK[${NETWORK_ITEM}]}" &>/dev/null [[ ${NETWORK_TYPE,,} == "devup" ]] && nmcli device up ${DEVICE} &>/dev/null [[ ${NETWORK_TYPE,,} == "devdown" ]] && nmcli device down ${DEVICE} &>/dev/null fi if [[ -n ${UUID} && ${UUID} != "--" ]]; then [[ ${NETWORK_TYPE,,} == "connmod" ]] && NMCLI_UP_UUID+=("${UUID}") && eval "nmcli connection modify ${UUID} ${NETWORK[${NETWORK_ITEM}]}" &>/dev/null [[ ${NETWORK_TYPE,,} == "connup" ]] && nmcli connection up uuid ${UUID} &>/dev/null [[ ${NETWORK_TYPE,,} == "conndown" ]] && nmcli connection down uuid ${UUID} &>/dev/null fi done <<< "${UNIT_DEVICE_FIND}" fi done #nmcli networking off && nmcli networking on # Переподнятие устройств/подключений, для применения изменений if [[ -n ${NMCLI_UP_DEVICE} ]]; then while read -r ITEM_DEVICE; do nmcli device show ${ITEM_DEVICE} | grep -q GENERAL.STATE && nmcli device up ${ITEM_DEVICE} &>/dev/null done < <(printf '%s\n' "${NMCLI_UP_DEVICE[@]}") fi if [[ -n ${NMCLI_UP_UUID} ]]; then while read -r ITEM_UUID; do nmcli connection show uuid ${ITEM_UUID} | grep -q GENERAL.STATE && nmcli connection up uuid ${ITEM_UUID} &>/dev/null done < <(printf '%s\n' "${NMCLI_UP_UUID[@]}") fi sed "/password/d" -i ${FILE_NETWORK} fi } ################ ##### MAIN ##### ################ # Если файл подключен как ресурс с функциями, то выйти return 0 2>/dev/null && return 0 if [[ -z $@ ]]; then while read -r FUNCTION; do $"${FUNCTION##* }" done < <(declare -F | grep "declare -f exec_") else FUNCTION= while [[ $# -gt 0 ]]; do [[ -z ${1} ]] || { declare -f ${1} &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'"; } shift done eval ${FUNCTION#*; } fi