You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ublinux-init/ublinux/rc.network.d/10-network

111 lines
5.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/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/os-config; [[ -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