#!/bin/bash # ## Get connected to a network # 1. Checks if already online; skips if so # 2. If no wired devices are present then reload kernel modules # 3. If wireless devices are present, and we're still offline, then connect to WiFi die () { echo "$0:" "$@" >&2 exit 1 } function test_connection() { if ip a | grep -Eq '(10.[0-9]+|172.(1[6-9]|2[0-9]|3[0-1]).[0-9]+|192.168).[0-9]+.[0-9]+'; then return 0 else return 1 fi } # Load settings if [[ -f "/run/archiso/bootmnt/arch/arch.conf" ]]; then source "/run/archiso/bootmnt/arch/arch.conf" || \ die "ERROR: failed to load arch.conf (from /run/archiso/bootmnt/arch/)" else source "/usr/local/bin/arch.conf" || \ die "ERROR: failed to load arch.conf (from /usr/local/bin/)" fi # Init WIFI_SSID="${WIFI_SSID}" WIFI_PASS="${WIFI_PASS}" # Connect to network if ! test_connection; then # LAN if ! ip l | grep -Eq '[0-9]+: +en'; then ## Reload the tg3/broadcom driver (known fix for some Dell systems) echo "No wired network adapters found; reloading drivers..." sudo modprobe -r tg3 sudo modprobe broadcom sudo modprobe tg3 sleep 5s fi # WiFi if ip l | grep -Eq '[0-9]+: +wl'; then ## Skip if we're already connected (i.e. the code above worked) if ! test_connection; then echo "Attempting to connect to ${WIFI_SSID}..." nmcli dev wifi connect "${WIFI_SSID}" password "${WIFI_PASS}" sleep 5s fi fi fi # Done if test_connection; then exit 0 else exit 1 fi