generated from ztimson/template
Compare commits
17 Commits
ztimson-pa
...
ztimson-pa
| Author | SHA1 | Date | |
|---|---|---|---|
| 14b8eefb77 | |||
| d1e1842052 | |||
| ca3f2d15a8 | |||
| 1107712e75 | |||
| bd19cc87e3 | |||
| 1e4b9394db | |||
| b83210d0eb | |||
| 9d2987323e | |||
| b319455ef3 | |||
| 825fe96dee | |||
| 8859375919 | |||
| 66b4cedd39 | |||
| 3243309bbb | |||
| 8b7702e90c | |||
| ed20d616f5 | |||
| 0180f81420 | |||
| a47fea04fb |
@@ -14,19 +14,12 @@ set -e
|
|||||||
# and stays as plain constants.
|
# and stays as plain constants.
|
||||||
|
|
||||||
CONFIG_FILE="/etc/fallback-ap.conf"
|
CONFIG_FILE="/etc/fallback-ap.conf"
|
||||||
|
if [ -f "$CONFIG_FILE" ]; then source "$CONFIG_FILE"; fi
|
||||||
# Load persisted settings from a previous install, if any. These are stored
|
|
||||||
# under SAVED_* names (not FALLBACK_AP_*) specifically so that sourcing this
|
|
||||||
# file can never clobber an explicit environment-variable override below.
|
|
||||||
if [ -f "$CONFIG_FILE" ]; then
|
|
||||||
# shellcheck disable=SC1090
|
|
||||||
source "$CONFIG_FILE"
|
|
||||||
fi
|
|
||||||
|
|
||||||
WLAN0_IFACE="${FALLBACK_AP_IFACE:-${SAVED_IFACE:-wlan0}}"
|
WLAN0_IFACE="${FALLBACK_AP_IFACE:-${SAVED_IFACE:-wlan0}}"
|
||||||
|
|
||||||
AP_NAME="${FALLBACK_AP_SSID:-${SAVED_SSID:-$HOSTNAME}}"
|
AP_NAME="${FALLBACK_AP_SSID:-${SAVED_SSID:-$HOSTNAME}}"
|
||||||
AP_PASSWORD="${FALLBACK_AP_PASSWORD:-${SAVED_PASSWORD:-guesswhatitis}}"
|
AP_PASSWORD="${FALLBACK_AP_PASSWORD:-${SAVED_PASSWORD:-abcd1234}}"
|
||||||
AP_ENCRYPTION="${FALLBACK_AP_ENCRYPTION:-${SAVED_ENCRYPTION:-wpa-psk}}" # none | wpa-psk | sae
|
AP_ENCRYPTION="${FALLBACK_AP_ENCRYPTION:-${SAVED_ENCRYPTION:-wpa-psk}}" # none | wpa-psk | sae
|
||||||
|
|
||||||
FALLBACK_AP_CIDR="${FALLBACK_AP_CIDR:-${SAVED_CIDR:-10.10.10.1/24}}"
|
FALLBACK_AP_CIDR="${FALLBACK_AP_CIDR:-${SAVED_CIDR:-10.10.10.1/24}}"
|
||||||
@@ -52,10 +45,10 @@ RECOVERY_WINDOW=20
|
|||||||
STATE_SETTLE_DELAY=1
|
STATE_SETTLE_DELAY=1
|
||||||
|
|
||||||
CONNECTION_NAME="Fallback AP"
|
CONNECTION_NAME="Fallback AP"
|
||||||
SERVICE_NAME="pi-fallback-ap"
|
SERVICE_NAME="fallback-ap"
|
||||||
SERVICE_FILE="/etc/systemd/system/$SERVICE_NAME.service"
|
SERVICE_FILE="/etc/systemd/system/$SERVICE_NAME.service"
|
||||||
|
|
||||||
STATE_DIR="/var/lib/pi-fallback-ap"
|
STATE_DIR="/var/lib/fallback-ap"
|
||||||
LAST_WIFI_FILE="$STATE_DIR/last-wifi"
|
LAST_WIFI_FILE="$STATE_DIR/last-wifi"
|
||||||
LOCK_FILE="$STATE_DIR/lock"
|
LOCK_FILE="$STATE_DIR/lock"
|
||||||
STATE_FILE="$STATE_DIR/state"
|
STATE_FILE="$STATE_DIR/state"
|
||||||
@@ -214,16 +207,6 @@ stop_ap() {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# ==========================================================================
|
|
||||||
# One tick of the control loop. Called once per second, always while
|
|
||||||
# holding the wlan0 lock, so everything here runs to completion before
|
|
||||||
# the next tick starts - there is no interleaving to race against.
|
|
||||||
#
|
|
||||||
# `last_attempt` is intentionally not declared `local` here: it lives in
|
|
||||||
# run()'s scope and this function updates it directly (bash resolves it
|
|
||||||
# via the caller's scope as long as nothing else shadows it).
|
|
||||||
# ==========================================================================
|
|
||||||
tick() {
|
tick() {
|
||||||
local now="$1"
|
local now="$1"
|
||||||
|
|
||||||
@@ -252,8 +235,6 @@ tick() {
|
|||||||
clients="$(get_client_count)"
|
clients="$(get_client_count)"
|
||||||
|
|
||||||
if [ "$clients" -gt 0 ]; then
|
if [ "$clients" -gt 0 ]; then
|
||||||
# Someone is using the AP right now. Leave it alone and push the
|
|
||||||
# next recovery attempt back so we don't kick them off.
|
|
||||||
last_attempt="$now"
|
last_attempt="$now"
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
@@ -264,9 +245,6 @@ tick() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# Stop the AP, give NetworkManager a window to autoconnect to any known
|
|
||||||
# network it can see, and bring the AP back if that doesn't happen.
|
|
||||||
attempt_recovery() {
|
attempt_recovery() {
|
||||||
log "No AP clients, checking for known Wi-Fi (AP down for up to ${RECOVERY_WINDOW}s)"
|
log "No AP clients, checking for known Wi-Fi (AP down for up to ${RECOVERY_WINDOW}s)"
|
||||||
|
|
||||||
@@ -303,7 +281,6 @@ attempt_recovery() {
|
|||||||
|
|
||||||
save_config() {
|
save_config() {
|
||||||
mkdir -p "$(dirname "$CONFIG_FILE")"
|
mkdir -p "$(dirname "$CONFIG_FILE")"
|
||||||
|
|
||||||
cat > "$CONFIG_FILE" <<EOF
|
cat > "$CONFIG_FILE" <<EOF
|
||||||
SAVED_IFACE="$WLAN0_IFACE"
|
SAVED_IFACE="$WLAN0_IFACE"
|
||||||
SAVED_SSID="$AP_NAME"
|
SAVED_SSID="$AP_NAME"
|
||||||
@@ -313,8 +290,6 @@ SAVED_CIDR="$FALLBACK_AP_CIDR"
|
|||||||
SAVED_DHCP_START_OCTET="$FALLBACK_AP_DHCP_START_OCTET"
|
SAVED_DHCP_START_OCTET="$FALLBACK_AP_DHCP_START_OCTET"
|
||||||
SAVED_DHCP_END_OCTET="$FALLBACK_AP_DHCP_END_OCTET"
|
SAVED_DHCP_END_OCTET="$FALLBACK_AP_DHCP_END_OCTET"
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# Contains the AP passphrase - keep it out of reach of other users.
|
|
||||||
chmod 600 "$CONFIG_FILE"
|
chmod 600 "$CONFIG_FILE"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -539,13 +514,6 @@ run() {
|
|||||||
|
|
||||||
log "Fallback AP service started"
|
log "Fallback AP service started"
|
||||||
log "Script: $SCRIPT_PATH"
|
log "Script: $SCRIPT_PATH"
|
||||||
|
|
||||||
# Open the lock fd once for the life of the process. Using `flock`
|
|
||||||
# directly against this fd (instead of wrapping each tick in its own
|
|
||||||
# `( ... ) 9>"$LOCK_FILE"` subshell) matters: any variable a tick
|
|
||||||
# updates - like last_attempt below - has to survive into the next
|
|
||||||
# loop iteration, and a subshell would silently throw those updates
|
|
||||||
# away when it exits.
|
|
||||||
exec 9>"$LOCK_FILE"
|
exec 9>"$LOCK_FILE"
|
||||||
|
|
||||||
flock 9
|
flock 9
|
||||||
|
|||||||
27
install.sh
27
install.sh
@@ -13,17 +13,28 @@ fi
|
|||||||
|
|
||||||
prompt() {
|
prompt() {
|
||||||
local __var="$1" __question="$2" __default="$3" __answer=""
|
local __var="$1" __question="$2" __default="$3" __answer=""
|
||||||
if [ -e /dev/tty ]; then
|
read -r -p "$__question [$__default]: " __answer < /dev/tty || __answer=""
|
||||||
read -r -p "$__question [$__default]: " __answer 2>/dev/null < /dev/tty > /dev/tty || __answer=""
|
|
||||||
fi
|
|
||||||
printf -v "$__var" '%s' "${__answer:-$__default}"
|
printf -v "$__var" '%s' "${__answer:-$__default}"
|
||||||
}
|
}
|
||||||
|
|
||||||
[ -z "${FALLBACK_AP_SSID:-}" ] && prompt FALLBACK_AP_SSID "Access point SSID" "$(hostname)"
|
EXISTING_CONFIG="/etc/fallback-ap.conf"
|
||||||
[ -z "${FALLBACK_AP_PASSWORD:-}" ] && prompt FALLBACK_AP_PASSWORD "Access point passphrase" "guesswhatitis"
|
|
||||||
[ -z "${FALLBACK_AP_CIDR:-}" ] && prompt FALLBACK_AP_CIDR "Access point subnet (CIDR)" "10.10.10.1/24"
|
if [ -f "$EXISTING_CONFIG" ]; then
|
||||||
[ -z "${FALLBACK_AP_DHCP_START_OCTET:-}" ] && prompt FALLBACK_AP_DHCP_START_OCTET "DHCP range start (last octet)" "100"
|
# shellcheck disable=SC1090
|
||||||
[ -z "${FALLBACK_AP_DHCP_END_OCTET:-}" ] && prompt FALLBACK_AP_DHCP_END_OCTET "DHCP range end (last octet)" "250"
|
source "$EXISTING_CONFIG"
|
||||||
|
fi
|
||||||
|
|
||||||
|
DEFAULT_SSID="${SAVED_SSID:-$(hostname)}"
|
||||||
|
DEFAULT_PASSWORD="${SAVED_PASSWORD:-abcd1234}"
|
||||||
|
DEFAULT_CIDR="${SAVED_CIDR:-10.10.10.1/24}"
|
||||||
|
DEFAULT_DHCP_START_OCTET="${SAVED_DHCP_START_OCTET:-100}"
|
||||||
|
DEFAULT_DHCP_END_OCTET="${SAVED_DHCP_END_OCTET:-250}"
|
||||||
|
|
||||||
|
[ -z "${FALLBACK_AP_SSID:-}" ] && prompt FALLBACK_AP_SSID "Access point SSID" "$DEFAULT_SSID"
|
||||||
|
[ -z "${FALLBACK_AP_PASSWORD:-}" ] && prompt FALLBACK_AP_PASSWORD "Access point passphrase" "$DEFAULT_PASSWORD"
|
||||||
|
[ -z "${FALLBACK_AP_CIDR:-}" ] && prompt FALLBACK_AP_CIDR "Access point subnet (CIDR)" "$DEFAULT_CIDR"
|
||||||
|
[ -z "${FALLBACK_AP_DHCP_START_OCTET:-}" ] && prompt FALLBACK_AP_DHCP_START_OCTET "DHCP range start (last octet)" "$DEFAULT_DHCP_START_OCTET"
|
||||||
|
[ -z "${FALLBACK_AP_DHCP_END_OCTET:-}" ] && prompt FALLBACK_AP_DHCP_END_OCTET "DHCP range end (last octet)" "$DEFAULT_DHCP_END_OCTET"
|
||||||
|
|
||||||
export FALLBACK_AP_SSID FALLBACK_AP_PASSWORD FALLBACK_AP_CIDR FALLBACK_AP_DHCP_START_OCTET FALLBACK_AP_DHCP_END_OCTET
|
export FALLBACK_AP_SSID FALLBACK_AP_PASSWORD FALLBACK_AP_CIDR FALLBACK_AP_DHCP_START_OCTET FALLBACK_AP_DHCP_END_OCTET
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user