diff --git a/ublinux/rc.network.d/10-network b/ublinux/rc.network.d/10-network index 5cbf4b3..5a97e6a 100755 --- a/ublinux/rc.network.d/10-network +++ b/ublinux/rc.network.d/10-network @@ -1,7 +1,7 @@ #!/usr/bin/env bash ENABLED=yes -[ "$ENABLED" != "yes" ] && exit 0 +[[ ${ENABLED} == yes ]] || exit 0 DEBUGMODE=no SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 @@ -9,9 +9,11 @@ SOURCE=/usr/lib/ublinux/os-config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null 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 +# mount ublinux-server ## Переделать authselect и связать с опциями домена # Name Service Switch Win Avahi nsswitch.conf @@ -25,25 +27,84 @@ debug_mode "$0" "$@" # grep -q "wins" <<< "${file_nss}" || sed "/^hosts:/s/ dns/ dns wins/" -i /etc/nsswitch.conf # fi +exec_network(){ # Network configuration - while read CONNECTION; do - CON_DEVICE=${CONNECTION%%:*}; CONNECTION=${CONNECTION#*:} - CON_UUID=${CONNECTION%%:*}; CONNECTION=${CONNECTION#*:} - CON_NAME=${CONNECTION%%:*} - CON_TYPE=${CONNECTION#*:} - for NETWORK_ITEM in "${!NETWORK[@]}"; do - unset NETWORK_DEVICE NETWORK_CONNECTION - NETWORK_NAME=${NETWORK_ITEM%%:*} - NETWORK_TYPE=${NETWORK_ITEM#*:} - if [[ ${NETWORK_TYPE,,} == "device" || ${NETWORK_TYPE,,} == "dev" ]]; then - [[ ${NETWORK_NAME,,} == ${CON_DEVICE,,} ]] && nmcli device modify "${CON_DEVICE}" ${NETWORK[${NETWORK_ITEM}]} + 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" || ${NETWORK_NAME,,} == "any" \ - || ${NETWORK_NAME,,} == "connection" || ${NETWORK_NAME,,} == "con" \ - || ${NETWORK_NAME,,} == ${CON_DEVICE,,} || ${NETWORK_NAME,,} == ${CON_UUID,,} \ - || ${NETWORK_NAME,,} == ${CON_NAME,,} || ${NETWORK_NAME,,} == ${CON_TYPE,,} ]] \ - && nmcli connection modify "${CON_UUID}" ${NETWORK[${NETWORK_ITEM}]} - systemctl restart NetworkManager.service + [[ ${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 - done < <(nmcli -g device,uuid,name,type connection show) + #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 + diff --git a/ublinux/rc.preinit.d/13-release b/ublinux/rc.preinit.d/13-release index 28ae374..c005eab 100755 --- a/ublinux/rc.preinit.d/13-release +++ b/ublinux/rc.preinit.d/13-release @@ -7,16 +7,18 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || exit 0 - -PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin DEBUGMODE=no -[ -d ${ROOTFS}usr/lib/ublinux ] || ROOTFS=/ -. ${ROOTFS}usr/lib/ublinux/functions +PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin +unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" -PATH_LIB_UBBOOT="${ROOTFS}usr/lib/ubboot" +SYSCONF="${ROOTFS}/${SYSCONF}" +SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null + +PATH_LIB_UBBOOT="${ROOTFS}/usr/lib/ubboot" #Profile updating OS_RELEASE_PRETTY_NAME="UBLinux 0000 Unknown (x)" @@ -24,6 +26,6 @@ PATH_VERSION=$(ls /memory/layer-base/0/VERSION* 2>/dev/null | head -1) [[ -n "${PATH_VERSION}" ]] || PATH_VERSION="$(ls /VERSION* 2>/dev/null | head -1)" [[ -n "${PATH_VERSION}" ]] && OS_RELEASE_PRETTY_NAME=$(head -1 "${PATH_VERSION}" 2>/dev/null ) -echo "${OS_RELEASE_PRETTY_NAME}" > ${ROOTFS}etc/ublinux-release -${PATH_LIB_UBBOOT}/ubdistconv -l ${OS_RELEASE_PRETTY_NAME} > ${ROOTFS}etc/lsb-release -${PATH_LIB_UBBOOT}/ubdistconv -o ${OS_RELEASE_PRETTY_NAME} > ${ROOTFS}usr/lib/os-release +echo "${OS_RELEASE_PRETTY_NAME}" > ${ROOTFS}/etc/ublinux-release +${PATH_LIB_UBBOOT}/ubdistconv -l ${OS_RELEASE_PRETTY_NAME} > ${ROOTFS}/etc/lsb-release +${PATH_LIB_UBBOOT}/ubdistconv -o ${OS_RELEASE_PRETTY_NAME} > ${ROOTFS}/usr/lib/os-release diff --git a/ublinux/templates/ublinux-data.ini b/ublinux/templates/ublinux-data.ini index e118cdc..6932582 100644 --- a/ublinux/templates/ublinux-data.ini +++ b/ublinux/templates/ublinux-data.ini @@ -498,30 +498,66 @@ GRUB_BOOT_SILENT="splash" ## Рабочая группа samba #SAMBADOMAIN=SMBGROUP -## Network configuration -## Настройка сетевого интерфейса -## NETWORK[all|any|name_connection|name_device|name_uuid|type_connection]="optional_1 optional_2 optional_n" -## all|any # All device and connection -## name_device # enp3s0, ens192, wlan0 -## or name_connection # Проводное соединение 1, WIFI_WORK -## or name_uuid # 6c90739a-5b5f-3b4a-9b42-11aa89c419bc -## or type_connection # 802-3-ethernet, 802-11-wireless -## optional: -## ipv4.ignore-auto-dns yes -## ipv4.method manual -## ipv6.method disabled -## ipv4.addr 192.168.1.2/24,10.10.1.5/8 -## ipv4.gateway 192.168.1.1 -## ipv4.dns 192.168.1.1,8.8.8.8 -## wifi.cloned-mac-address random -## ethernet.cloned-mac-address 00:22:68:1c:59:b1 -## ethernet.cloned-mac-address stable -## ethernet.cloned-mac-address random -## NETWORK[Проводное соединение 1]="ipv4.method manual ipv4.addr 192.168.1.2/24,10.10.1.5/8 ipv4.gateway 192.168.1.1 ipv4.dns 192.168.1.1,8.8.8.8" -## NETWORK[Проводное соединение 1]="ethernet.cloned-mac-address 00:22:68:1c:59:b1" -## NETWORK[HotelWifiName]="wifi.cloned-mac-address 70:48:f7:1a:2b:3c" -## NETWORK[all]="+ipv4.dns 192.168.1.1,8.8.8.8 ipv4.ignore-auto-dns yes" -## NETWORK[all]="ipv6.method disabled" +## Network configuration NetworkManager +## Настройка сетевого интерфейса через NetworkManager. Соблюдается очерёдность выполнения. CLI интерфейс nmtui +##NETWORK[@]= +## : # Сетевой юнит +## all|any # Все устройства и все подключения +## # Устройство, пример: enp3s0, ens192, wlan0 +## # Тип устройства, пример: ethernet, wireless, vpn, wireless, bridge +## # Подключение, пример: Проводное соединение 1, WIFI_WORK +## # UUID подключения, пример: 6c90739a-5b5f-3b4a-9b42-11aa89c419bc +## # MAC адрес устройста, пример: 70:48:f7:1a:2b:3c +## : +## nmcli # Выполняет: nmcli +## wifi # Выполняет: nmcli device wifi +## imp-ovpn # Выполняет: nmcli connection import type openvpn file +## add-pptp # Выполняет: nmcli connection add connection.id connection.type vpn vpn.service-type pptp +## add-l2tp # Выполняет: nmcli connection add connection.id connection.type vpn vpn.service-type l2tp +## devmod # Выполняет: nmcli device modify +## devup # Выполняет: nmcli device up +## devdown # Выполняет: nmcli device down +## connmod # Выполняет: nmcli connection modify +## connup # Выполняет: nmcli connection up uuid +## conndown # Выполняет: nmcli connection down uuid +## : # Перечень опции для команды nmcli +## # Перечень доступных опций: nmcli -p connection show | nmcli -p device show +## : # Для команды wifi +## connect # Имя SSID +## password # Пароль подключения +## hiden yes # Подключаться к скрытой сети +## rescan # Пересканировать частоты для поиска сетей +## : # Для команд add-pptp | add-l2tp +## vpn.data gateway= # Имя/IP сервера VPN, обязательный +## vpn.user-name # Имя пользователя, обязательный +## vpn.secrets password= # Пароль пользователя, обязательный +## connection.interface-name # Имя интерфейса через которое подключать VPN соединение, необязательный +## connection.permissions user:, # Имя пользователя для которого предназначено VPN соединение, необязательный +## # Указанный пользователь будет видеть подключение в плагине, остальным будет скрыто +## : # Для команд devmod +## ethernet.cloned-mac-address # Сменить MAC на устройство, формат: 00:00:00:00:00:00 +## ethernet.cloned-mac-address stable +## ethernet.cloned-mac-address random # Назначить случайный MAC на ethernet интерфейс +## wifi.cloned-mac-address random # Назначить случайный MAC на WiFi интерфейс +## : # Для команд connmod +## connection.secondaries # Имя соединения, которое будет подключено после текущего +## ipv4.method manual # Переключить метод получения IP адреса, значения auto*|manual +## ipv4.addr 192.168.1.1/24,10.10.1.1/8 # Назначить IP адреса, перечисляются через запятую, с указанием маски через / +## ipv4.gateway 192.168.1.254 # Назначить шлюз +## ipv4.dns 192.168.1.254,8.8.8.8 # Назначить DNS сервера, перечисляются через запятую +## +ipv4.dns 8.8.8.8 # Добавить к существующим адресам новый DNS сервера, перечисляются через запятую +## ipv4.ignore-auto-dns yes # Отключить автоматическое получение DNS +## ipv6.method disabled # Отключить получение IPv6 +## NETWORK[myopenvpn@imp-ovpn]="/home/superadmin/vpn/myopenvp.ovpn" +## NETWORK[wifi@wifi]="connect MyWiFi password 1234567890 hidden yes" +## NETWORK[PPTP_VPN@add-pptp]="vpn.data gateway=192.168.215.254 vpn.user-name vpn.test-1 vpn.secrets password=1234567890 connection.permissions user:superadmin" +## NETWORK[enp3s0@connmod]="connection.secondaries PPTP_VPN" +## NETWORK[L2TP_IPSEC_VPN@add-l2tp]='connection.autoconnect no ipv4.method auto vpn.data "gateway = , ipsec-enabled = yes, ipsec-psk = 0s"$(base64 <<< '' | rev | cut -c2- | rev)"=, mru = 1400, mtu = 1400, password-flags = 0, refuse-chap = yes, refuse-mschap = yes, refuse-pap = yes, require-mppe = yes, user = " vpn.secrets password=' +## NETWORK[all@devup]=yes +## NETWORK[enp3s0@devdown]=yes +## NETWORK[Проводное соединение 1@connmod]="ipv4.method manual ipv4.addr 192.168.1.2/24,10.10.1.5/8 ipv4.gateway 192.168.1.254 ipv4.dns 192.168.1.254,8.8.8.8" +## NETWORK[Проводное соединение 2@connmod]="802-3-ethernet.cloned-mac-address 00:22:22:22:22:22" +## NETWORK[wlan0@connmod]="wifi.cloned-mac-address 70:70:70:70:70:70" ## ublinux-server ip addres ## Адрес сервера по умолчанию @@ -815,7 +851,7 @@ NSSWITCHWINBIND=yes ## ## POLKIT[org.freedesktop.udisks2.]=yes:storage ## POLKIT[org.manjaro.pamac.]=yes:wheel -## POLKIT[ru.ublinux.pkexec.ubl-settings-datetime.exec]=yes:users +## POLKIT[com.ublinux.ubl-settings-datetime.run]=yes:users ## POLKIT[org.manjaro.pamac.]=yes:users [/etc/ublinux/kiosk] @@ -1027,8 +1063,8 @@ NSSWITCHWINBIND=yes #THEME=ublinux ## Выбор обоев рабочего стола: XFCE4, Plasma -## BACKGROUND_DE=none|| -## none # Отключить сборку векторных фирменных обоев /usr/share/backgrounds/background.jpg +## BACKGROUND_DE=none|no|disable|| +## none|no|disable # Отключить сборку векторных фирменных обоев /usr/share/backgrounds/background.jpg ## # Выбранный файл установить как обои ## # Из каталога, выбрать случайную картинку для обоев ## '#002d55' # Установить сплошным цветом выбранный шестнадцатеричный код цвета @@ -1042,8 +1078,8 @@ NSSWITCHWINBIND=yes ## BACKGROUND_DE_MODE=0 ## Выбор обоев экранного менеджера Display Manager: Lightdm -## BACKGROUND_DM=none|| -## none # Отключить сборку векторных фирменных обоев /usr/share/backgrounds/dm.jpg +## BACKGROUND_DM=none|no|disable|| +## none|no|disable # Отключить сборку векторных фирменных обоев /usr/share/backgrounds/dm.jpg ## # Выбранный файл установить как обои ## # Из каталога, выбрать случайную картинку для обоев ## '#002d55' # Установить сплошным цветом выбранный шестнадцатеричный код цвета @@ -1134,73 +1170,6 @@ NSSWITCHWINBIND=yes ################################################################################ #STATD_OPTIONS="--port 4000" -[/etc/ublinux/network-scripts/ifcfg-Default_WIFI] -# Подключение к точке доступа My WIFI с паролем Password -################################################################################ -#NAME=Default_WIFI -#MODE=Managed -#TYPE=Wireless -#BOOTPROTO=dhcp -#DEFROUTE=yes -#IPV4_FAILURE_FATAL=yes -#IPV6INIT=no -#ONBOOT=yes -#PEERDNS=yes -#PEERROUTES=yes -#MAC_ADDRESS_RANDOMIZATION=default -# Название точки доступа -#ESSID="My WIFI" -# Если точка бесплатная (аэропорт или кафе) - закомментировать ключ, секция с паролем тогда не нужна -#KEY_MGMT=WPA-PSK - -[/etc/ublinux/network-scripts/keys-Default_WIFI] -################################################################################ -#WPA_PSK='Password' - -[/etc/ublinux/network-scripts/ifcfg-eth0] -################################################################################ -#DEVICE=eno1 -# Автоподнятие сетевого интерфейса -#ONBOOT=yes -# Альтернативный DHCP клиент -#DHCP_CLIENT=udhcpc -# Пример настройки постоянного адреса -# =none|static — No boot-time protocol should be used. -# =bootp — The BOOTP protocol should be used. -# =dhcp — The DHCP protocol should be used. -#BOOTPROTO=static -#IPADDR=192.168.1.32 -#NETMASK=255.255.255.0 -#GATEWAY=192.168.1.1 -#MII_NOT_SUPPORTED=no -#DNS1=192.168.1.1 - -[/etc/ublinux/network-scripts/ifcfg-wlan0] -################################################################################ -#ONBOOT=yes -# Set it empty for autodetection -# При указании пустого значения будет выполнен поиск доступных сетей -#WIRELESS_ESSID= -# Для создания точки доступа используйте такие параметры -# (необходимо также включить службу hostapd dhcpd, -# открыть в межсетевом экране 67 порт UDP, а также, возможно, включить ROUTER) -#ONBOOT=yes -#MII_NOT_SUPPORTED=yes -#USERCTL=no -#BOOTPROTO=static -#IPADDR=192.168.2.31 -#NETMASK=255.255.255.0 -# При подключении через ad-hoc нужно задать постоянные адреса -#WIRELESS_MODE=ad-hoc -#WIRELESS_ESSID=ublinux -#WIRELESS_CHANNEL=1 -#BOOTPROTO=static -#IPADDR=192.168.2.32 -#NETMASK=255.255.255.0 -#GATEWAY=192.168.2.1 -#MII_NOT_SUPPORTED=yes -#DNS1=192.168.2.1 - [/etc/polipo/config] ################################################################################ ## В настройках прокси сервера polipo можно перенаправить весь поток на другой сервер @@ -1209,8 +1178,8 @@ NSSWITCHWINBIND=yes #socksProxyType=socks5 [/etc/hostapd/hostapd.conf] -# Настройки wifi карты в режиме точки доступа ################################################################################ +# Настройки wifi карты в режиме точки доступа #driver=nl80211 #ssid=ublinux #country_code=RU