153 lines
4.6 KiB
Bash
153 lines
4.6 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# Write the server configuration
|
|
# call with ESSID and optionally a password
|
|
# when called without an ESSID, it will attempt
|
|
# to reconnect to a previously chosen network
|
|
function connect () {
|
|
SERVER="${1}"
|
|
CURRENT_SERVER_FILE=/home/pi/odoo-remote-server.conf
|
|
HOSTS=/root_bypass_ramdisks/etc/hosts
|
|
HOST_FILE=/root_bypass_ramdisks/etc/hostname
|
|
HOSTNAME="$(hostname)"
|
|
TOKEN_FILE=/home/pi/token
|
|
TOKEN="${3}"
|
|
IOT_NAME="${2}"
|
|
IOT_NAME="${IOT_NAME//[^[:ascii:]]/}"
|
|
IOT_NAME="${IOT_NAME//[^a-zA-Z0-9-]/}"
|
|
if [ -z "$IOT_NAME" ]
|
|
then
|
|
IOT_NAME="${HOSTNAME}"
|
|
fi
|
|
sudo mount -o remount,rw /
|
|
sudo mount -o remount,rw /root_bypass_ramdisks
|
|
if [ ! -z "${1}" ]
|
|
then
|
|
echo "${SERVER}" > ${CURRENT_SERVER_FILE}
|
|
echo "${TOKEN}" > ${TOKEN_FILE}
|
|
fi
|
|
if [ "${IOT_NAME}" != "${HOSTNAME}" ]
|
|
then
|
|
sudo sed -i "s/${HOSTNAME}/${IOT_NAME}/g" ${HOSTS}
|
|
echo "${IOT_NAME}" > /tmp/hostname
|
|
sudo cp /tmp/hostname "${HOST_FILE}"
|
|
|
|
echo "interface=wlan0" > /root_bypass_ramdisks/etc/hostapd/hostapd.conf
|
|
echo "ssid=${IOT_NAME}" >> /root_bypass_ramdisks/etc/hostapd/hostapd.conf
|
|
echo "channel=1" >> /root_bypass_ramdisks/etc/hostapd/hostapd.conf
|
|
|
|
sudo hostname "${IOT_NAME}"
|
|
fi
|
|
sudo mount -o remount,ro /
|
|
sudo mount -o remount,ro /root_bypass_ramdisks
|
|
|
|
WPA_PASS_FILE="/tmp/wpa_pass.txt"
|
|
PERSISTENT_WIFI_NETWORK_FILE="/home/pi/wifi_network.txt"
|
|
CURRENT_WIFI_NETWORK_FILE="/tmp/current_wifi_network.txt" # used to repair connection when we lose it
|
|
LOST_WIFI_FILE="/tmp/lost_wifi.txt"
|
|
ESSID="${4}"
|
|
PASSWORD="${5}"
|
|
PERSIST="${6}"
|
|
NO_AP="${7}"
|
|
|
|
sleep 3
|
|
|
|
sudo pkill -f keep_wifi_alive.sh
|
|
WIFI_WAS_LOST=$?
|
|
|
|
# make network choice persistent
|
|
if [ -n "${ESSID}" ] ; then
|
|
if [ -n "${PERSIST}" ] ; then
|
|
logger -t posbox_connect_to_server_wifi "Making network selection permanent"
|
|
sudo mount -o remount,rw /
|
|
echo "${ESSID}" > ${PERSISTENT_WIFI_NETWORK_FILE}
|
|
echo "${PASSWORD}" >> ${PERSISTENT_WIFI_NETWORK_FILE}
|
|
sudo mount -o remount,ro /
|
|
fi
|
|
else
|
|
logger -t posbox_connect_to_server_wifi "Reading configuration from ${PERSISTENT_WIFI_NETWORK_FILE}"
|
|
ESSID=$(head -n 1 "${PERSISTENT_WIFI_NETWORK_FILE}" | tr -d '\n')
|
|
PASSWORD=$(tail -n 1 "${PERSISTENT_WIFI_NETWORK_FILE}" | tr -d '\n')
|
|
fi
|
|
|
|
echo "${ESSID}" > ${CURRENT_WIFI_NETWORK_FILE}
|
|
echo "${PASSWORD}" >> ${CURRENT_WIFI_NETWORK_FILE}
|
|
|
|
logger -t posbox_connect_to_server_wifi "Connecting to ${ESSID}"
|
|
sudo service hostapd stop
|
|
|
|
sudo killall nginx
|
|
|
|
current_iotbox_version=$(cat "/var/odoo/iotbox_version")
|
|
# Above this version we need the NetworkManager
|
|
required_version="23.09"
|
|
if [[ "$current_iotbox_version" > "$required_version" ]]; then
|
|
logger -t posbox_connect_to_server_wifi "USING NETWORK MANAGER"
|
|
# Necessary when comming from the access point
|
|
sudo ip address del 10.11.12.1/24 dev wlan0
|
|
sudo nmcli g reload
|
|
if [ -z "${PASSWORD}" ] ; then
|
|
sudo nmcli d wifi connect "${ESSID}"
|
|
else
|
|
sudo nmcli d wifi connect "${ESSID}" password "${PASSWORD}"
|
|
fi
|
|
sudo service nginx restart
|
|
else
|
|
logger -t posbox_connect_to_server_wifi "USING WPA_SUPPLICANT"
|
|
sudo service nginx restart
|
|
sudo service dnsmasq stop
|
|
|
|
sudo pkill wpa_supplicant
|
|
sudo ifconfig wlan0 down
|
|
sudo ifconfig wlan0 0.0.0.0 # this is how you clear the interface's configuration
|
|
sudo ifconfig wlan0 up
|
|
|
|
if [ -z "${PASSWORD}" ] ; then
|
|
sudo iwconfig wlan0 essid "${ESSID}"
|
|
else
|
|
# Necessary in stretch: https://www.raspberrypi.org/forums/viewtopic.php?t=196927
|
|
sudo cp /etc/wpa_supplicant/wpa_supplicant.conf "${WPA_PASS_FILE}"
|
|
sudo chmod 777 "${WPA_PASS_FILE}"
|
|
sudo wpa_passphrase "${ESSID}" "${PASSWORD}" >> "${WPA_PASS_FILE}"
|
|
sudo wpa_supplicant -B -i wlan0 -c "${WPA_PASS_FILE}"
|
|
fi
|
|
|
|
sudo systemctl daemon-reload
|
|
sudo service dhcpcd restart
|
|
fi
|
|
|
|
# give dhcp some time
|
|
timeout 30 sh -c 'until ifconfig wlan0 | grep "inet " ; do sleep 0.1 ; done'
|
|
TIMEOUT_RETURN=$?
|
|
|
|
|
|
if [ ${TIMEOUT_RETURN} -eq 124 ] && [ -z "${NO_AP}" ] ; then
|
|
logger -t posbox_connect_to_server_wifi "Failed to connect, forcing Posbox AP"
|
|
sudo /home/pi/odoo/addons/point_of_sale/tools/posbox/configuration/wireless_ap.sh "force" &
|
|
else
|
|
if [ ${TIMEOUT_RETURN} -ne 124 ] ; then
|
|
rm -f "${LOST_WIFI_FILE}"
|
|
fi
|
|
|
|
if [ ! -f "${LOST_WIFI_FILE}" ] ; then
|
|
logger -t posbox_connect_to_server_wifi "Restarting odoo"
|
|
fi
|
|
|
|
if [ ${WIFI_WAS_LOST} -eq 0 ] ; then
|
|
touch "${LOST_WIFI_FILE}"
|
|
fi
|
|
|
|
logger -t posbox_connect_to_server_wifi "Starting wifi keep alive script"
|
|
/home/pi/odoo/addons/point_of_sale/tools/posbox/configuration/keep_wifi_alive.sh &
|
|
fi
|
|
|
|
if [ "${IOT_NAME}" != "${HOSTNAME}" ]
|
|
then
|
|
sudo reboot
|
|
else
|
|
sudo service odoo restart
|
|
fi
|
|
}
|
|
|
|
connect "${1}" "${2}" "${3}" "${4}" "${5}" "${6}" "${7}" &
|