71 lines
2.2 KiB
Python
71 lines
2.2 KiB
Python
from pyinfra.operations import apt, server, systemd
|
|
from pyinfra import host
|
|
|
|
# Extract variables with proper defaults
|
|
SSID = host.data.get('SSID')
|
|
PASSWORD = host.data.get('PASSWORD')
|
|
BAND = host.data.get('BAND', '2.4GHz')
|
|
CHANNEL = host.data.get('CHANNEL') # Optional
|
|
AP_IP = host.data.get('AP_IP')
|
|
CONNECTION_NAME = host.data.get('CONNECTION_NAME')
|
|
|
|
# Determine band configuration
|
|
if BAND == '5GHz':
|
|
BAND = 'a'
|
|
default_channel = 36 if not CHANNEL else CHANNEL
|
|
else: # 2.4GHz
|
|
BAND = 'bg'
|
|
default_channel = 6 if not CHANNEL else CHANNEL
|
|
|
|
# Install NetworkManager if not present
|
|
apt.packages(
|
|
name='Install NetworkManager',
|
|
packages=['network-manager'],
|
|
update=True,
|
|
_sudo=True
|
|
)
|
|
|
|
# Ensure NetworkManager is running
|
|
systemd.service(
|
|
name='Ensure NetworkManager is running',
|
|
service='NetworkManager',
|
|
running=True,
|
|
enabled=True,
|
|
_sudo=True
|
|
)
|
|
|
|
# Check if connection already exists and delete it
|
|
server.shell(
|
|
name='Delete existing AP connection if present',
|
|
commands=[f'nmcli connection delete {CONNECTION_NAME} || true'],
|
|
_sudo=True
|
|
)
|
|
|
|
# Add Wifi AP connection
|
|
server.shell(
|
|
name='Detect WiFi interface',
|
|
commands=[
|
|
f'sudo nmcli con add type wifi con-name {CONNECTION_NAME} ifname wlan0 mode ap ssid {SSID} ipv4.method shared wifi-sec.key-mgmt wpa-psk wifi-sec.psk "{PASSWORD}"',
|
|
# CRITICAL: Force WPA2 (rsn) instead of WPA (wpa)
|
|
f'sudo nmcli connection modify {CONNECTION_NAME} wifi-sec.proto rsn',
|
|
|
|
f'sudo nmcli connection modify {CONNECTION_NAME} ipv4.addresses {AP_IP}/24',
|
|
|
|
# Use AES encryption (CCMP) instead of TKIP
|
|
f'sudo nmcli connection modify {CONNECTION_NAME} wifi-sec.pairwise ccmp',
|
|
f'sudo nmcli connection modify {CONNECTION_NAME} wifi-sec.group ccmp',
|
|
|
|
# Set band
|
|
f'sudo nmcli connection modify {CONNECTION_NAME} 802-11-wireless.band {BAND}',
|
|
|
|
# Enable autostart
|
|
f'sudo nmcli connection modify {CONNECTION_NAME} connection.autoconnect yes',
|
|
f'sudo nmcli connection modify {CONNECTION_NAME} connection.autoconnect-priority 10',
|
|
|
|
# Start the AP
|
|
f'sudo nmcli connection up {CONNECTION_NAME}'
|
|
],
|
|
_sudo=True
|
|
)
|
|
|