|
|
#!/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
|
|
|
while [[ $# -gt 0 ]]; do
|
|
|
declare -f ${1} &>/dev/null && FUNCTION+="; ${1}" && shift || { FUNCTION+=" ${1}" && shift; }
|
|
|
done
|
|
|
eval ${FUNCTION#*; }
|
|
|
fi
|
|
|
|