diff --git a/extra/wifi.yml b/extra/wifi.yml index b191bff..66eb773 100644 --- a/extra/wifi.yml +++ b/extra/wifi.yml @@ -12,7 +12,12 @@ services: # - ../.envs/.production/.pihole #command: /start volumes: - - ../../mistborn_volumes/extra/wifi/wificfg.json:/cfg/wificfg.json - network_mode: host - privileged: true + - ../../mistborn_volumes/extra/wifi/hostapd.conf:/etc/hostapd/hostapd.conf + - ../../mistborn_volumes/extra/wifi/dnsmasq.conf:/etc/dnsmasq.conf + # - ../../mistborn_volumes/extra/wifi/wificfg.json:/cfg/wificfg.json + network_mode: bridge #host + cap_add: + - NET_ADMIN + - NET_RAW + #privileged: true diff --git a/scripts/services/Mistborn-wifi.service b/scripts/services/Mistborn-wifi.service index 37ddeac..7404215 100644 --- a/scripts/services/Mistborn-wifi.service +++ b/scripts/services/Mistborn-wifi.service @@ -10,14 +10,19 @@ Group=docker PermissionsStartOnly=true # Shutdown container (if running) when unit is stopped EnvironmentFile=/opt/mistborn/.env -ExecStartPre=/usr/local/bin/docker-compose -f /opt/mistborn/extra/wifi.yml down +ExecStartPre=/usr/local/bin/docker-compose -f /opt/mistborn/extra/wifi.yml down +ExecStartPre=/opt/mistborn/scripts/services/wifi/init.sh ExecStartPre=/usr/local/bin/docker-compose -f /opt/mistborn/extra/wifi.yml build # Start container when unit is started ExecStart=/usr/local/bin/docker-compose -f /opt/mistborn/extra/wifi.yml up + +ExecStartPost=/opt/mistborn/scripts/services/wifi/start.sh + # Stop container when unit is stopped ExecStop=/usr/local/bin/docker-compose -f /opt/mistborn/extra/wifi.yml down # Post stop +ExecStopPost=/opt/mistborn/scripts/services/wifi/stop.sh [Install] WantedBy=multi-user.target diff --git a/scripts/services/wifi/init.sh b/scripts/services/wifi/init.sh new file mode 100755 index 0000000..4bd3297 --- /dev/null +++ b/scripts/services/wifi/init.sh @@ -0,0 +1,75 @@ +#!/bin/bash + +# Colors +MAGENTA='\e[0;35m' +RED='\e[0;31m' +GREEN='\e[0;32m' +BLUE='\e[0;34m' +NC='\e[0m' + +# Check that the interface exists and its not in use. Returns iface phy +iface_check (){ + IFACE="$1" + + # Check that the requested iface is available + if ! [ -e /sys/class/net/"$IFACE" ] + then + echo -e "${RED}[ERROR]${NC} The interface provided does not exist. Exiting..." + exit 1 + fi + + # Check that the given interface is not used by the host as the default route + if [[ $(ip r | grep default | cut -d " " -f5) == "$IFACE" ]] + then + echo -e "${BLUE}[INFO]${NC} The selected interface is configured as the default route, if you use it you will lose internet connectivity" + exit 1; + fi + + # Find the physical interface for the given wireless interface + PHY=$(cat /sys/class/net/"$IFACE"/phy80211/name) + echo $PHY +} + +hostapd_setup() { + ### Check if hostapd is running in the host + hostapd_pid=$(pgrep hostapd) + if [ ! "$hostapd_pid" == "" ] + then + echo -e "${BLUE}[INFO]${NC} hostapd service is already running in the system, make sure you use a different wireless interface..." + #kill -9 "$hostapd_pid" + fi + + # Unblock wifi and bring the wireless interface up + echo -e "${BLUE}[INFO]${NC} Unblocking wifi and setting ${IFACE} up" + rfkill unblock wifi + ip link set "$IFACE" up + + # Check if a wlan config file exists, else take wlan parameters by default + if [ -e "$PATHSCRIPT"/"$CONF_FILE" ] + then + echo -e "${BLUE}[INFO]${NC} Found WLAN config file" + # Parse the wlan config file + IFS="=" + while read -r name value + do + case $name in + ''|\#* ) continue;; # Skip blank lines and lines starting with # + "SSID" ) + SSID=${value//\"/} + echo -e "${BLUE}"[INFO]"${NC}" SSID: "${MAGENTA}""$SSID""${NC}";; + "PASSPHRASE" ) + PASSPHRASE=${value//\"/};; + "HW_MODE" ) + HW_MODE=${value//\"/};; + "CHANNEL" ) + CHANNEL=${value//\"/};; + * ) + echo Parameter "$name" in "$PATHSCRIPT"/"$CONF_FILE" not recognized + esac + done < "$PATHSCRIPT"/"$CONF_FILE" + else + echo -e "${BLUE}[INFO]${NC} WLAN config file not found. Setting default WLAN parameters" + echo -e "${BLUE}"[INFO]"${NC}" SSID: "${MAGENTA}""$SSID""${NC}" + fi + +} \ No newline at end of file diff --git a/scripts/services/wifi/start.sh b/scripts/services/wifi/start.sh new file mode 100755 index 0000000..e69de29 diff --git a/scripts/services/wifi/stop.sh b/scripts/services/wifi/stop.sh new file mode 100755 index 0000000..e69de29 diff --git a/scripts/subinstallers/wifi.sh b/scripts/subinstallers/wifi.sh index e6d4e06..63e461a 100755 --- a/scripts/subinstallers/wifi.sh +++ b/scripts/subinstallers/wifi.sh @@ -1,11 +1,3 @@ #!/bin/bash -# wpa_supplicant -sudo systemctl stop wpa_supplicant.service -sudo systemctl disable wpa_supplicant.service -sudo systemctl mask wpa_supplicant.service -sudo pkill wpa_supplicant - -# create wificfg.json -sudo mkdir -p /opt/mistborn_volumes/extra/wifi -sudo cp /opt/mistborn/scripts/conf/wificfg.json /opt/mistborn_volumes/extra/wifi/ +sudo apt-get install -y bridge-utils iw rfkill \ No newline at end of file