setup for new NetworkManager

This commit is contained in:
2026-03-06 14:32:00 -05:00
parent 27e33de641
commit bad2f5cd1c

View File

@@ -7,35 +7,36 @@
# SPDX-License-Identifier: GPL-2.0 # SPDX-License-Identifier: GPL-2.0
# Wireless Access Point Raspberry Pi Setup # Wireless Access Point Raspberry Pi Setup
function get_ap_params() { function get_ap_params() {
echo "" echo ""
wapssidok=0 wapssidok="no"
while [ "$wapssidok" -ne 1 ] while [[ "$wapssidok" == "no" ]]
do do
echo "This access point will need an SSID. This is what will appear" echo "This access point will need an SSID. This is what will appear"
echo "as the name of this terminal when other devices connect." echo "as the name of this terminal when other devices connect."
echo -n "Please enter the desired SSID for this access point: " echo -n "Please enter the desired SSID for this access point: "
read wapssid read wapssid
if [ "$wapssid" = "" ] if [[ "$wapssid" = "" ]]
then then
echo "SSID cannot be blank. Try again." echo "SSID cannot be blank. Try again."
else else
wapssidok=1 wapssidok="yes"
fi fi
done done
wappassok=0 wappassok="no"
while [ "$wappassok" -ne 1 ] while [[ "$wappassok" == "no" ]]
do do
echo "You will need to set a passphrase for this access point. It should" echo "You will need to set a passphrase for this access point. It should"
echo "be at least 8 characters in length and cannot be blank." echo "be at least 8 characters in length and cannot be blank."
echo -n "Please enter the desired passphrase for this access point: " echo -n "Please enter the desired passphrase for this access point: "
read wappass read wappass
wappasslen=`echo -n $wappass | wc -m` wappasslen=$(echo -n $wappass | wc -m)
if [ "$wappass" = "" -o "$wappasslen" -lt 8 ] if [[ "$wappass" == "" || $wappasslen -lt 8 ]]
then then
echo "Passphrase doesn't satisfy requirements above. Try again." echo "Passphrase doesn't satisfy requirements above. Try again."
else else
wappassok=1 wappassok="yes"
fi fi
done done
# Save parameters in config file # Save parameters in config file
@@ -43,8 +44,76 @@ function get_ap_params() {
sed -i 's,'wappass=.*','wappass="\"$wappass\""',' /etc/piwifiap.conf sed -i 's,'wappass=.*','wappass="\"$wappass\""',' /etc/piwifiap.conf
} }
current_user=`whoami` function config_systemd-networkd() {
if [ "$current_user" != "root" ] echo "Configuring as wireless access point using systemd-networkd."
get_ap_params
# Save network system in config file
sed -i 's,'network_system=.*','network_system="\"systemd-networkd\""',' /etc/piwifiap.conf
apt install hostapd
systemctl unmask hostapd
systemctl enable hostapd
echo "[NetDev]" >/etc/systemd/network/bridge-br0.netdev
echo "Name=br0" >>/etc/systemd/network/bridge-br0.netdev
echo "Kind=bridge" >>/etc/systemd/network/bridge-br0.netdev
echo "[Match]" >/etc/systemd/network/br0-member-eth0.network
echo "Name=eth0" >>/etc/systemd/network/br0-member-eth0.network
echo "" >>/etc/systemd/network/br0-member-eth0.network
echo "[Network]" >>/etc/systemd/network/br0-member-eth0.network
echo "Bridge=br0" >>/etc/systemd/network/br0-member-eth0.network
systemctl enable systemd-networkd
mv /etc/dhcpcd.conf /etc/dhcpcd.conf.old
echo "denyinterfaces wlan0 eth0" >/etc/dhcpcd.conf
cat /etc/dhcpcd.conf.old >>/etc/dhcpcd.conf
echo "interface br0" >>/etc/dhcpcd.conf
rfkill unblock wlan
echo "country_code=US" >/etc/hostapd/hostapd.conf
echo "interface=wlan0" >>/etc/hostapd/hostapd.conf
echo "bridge=br0" >>/etc/hostapd/hostapd.conf
echo "ssid=$wapssid" >>/etc/hostapd/hostapd.conf
echo "hw_mode=g" >>/etc/hostapd/hostapd.conf
echo "channel=7" >>/etc/hostapd/hostapd.conf
echo "macaddr_acl=0" >>/etc/hostapd/hostapd.conf
echo "auth_algs=1" >>/etc/hostapd/hostapd.conf
echo "ignore_broadcast_ssid=0" >>/etc/hostapd/hostapd.conf
echo "wpa=2" >>/etc/hostapd/hostapd.conf
echo "wpa_passphrase=$wappass" >>/etc/hostapd/hostapd.conf
echo "wpa_key_mgmt=WPA-PSK" >>/etc/hostapd/hostapd.conf
echo "wpa_pairwise=TKIP" >>/etc/hostapd/hostapd.conf
echo "rsn_pairwise=CCMP" >>/etc/hostapd/hostapd.conf
if dpkg -l|grep webmin >/dev/null 2>&1
then
wget -c http://github.com/pjz/webmin-modules/releases/download/v1.0/hostap.wbm.gz
gzip -d hostap.wbm.gz
/usr/share/webmin/install-module.pl hostap.wbm
fi
echo ""
echo ""
}
function config_NetworkManager() {
echo "Configuring as wireless access point using NetworkManager."
rfkill unblock wlan
get_ap_params
# Clean up a possible failed previous attempt
nmcli con del piwifi-ap >/dev/null 2>&1
nmcli con del piwifi-ethernet >/dev/null 2>&1
nmcli con del piwifi-apbridge >/dev/null 2>&1
# Save network system in config file
sed -i 's,'network_system=.*','network_system="\"NetworkManager\""',' /etc/piwifiap.conf
nmcli device wifi hotspot ssid $wapssid password $wappass
nmcli connection add type bridge con-name 'Bridge' ifname bridge0
nmcli connection add type ethernet slave-type bridge con-name 'Ethernet' ifname eth0 master bridge0
nmcli connection modify 'Hotspot' master bridge0
nmcli connection up Bridge
nmcli connection up Hotspot
}
current_user=$(whoami)
if [[ "$current_user" != "root" ]]
then then
echo "You must have root privileges to run this setup." echo "You must have root privileges to run this setup."
echo "Try 'sudo $0'" echo "Try 'sudo $0'"
@@ -56,7 +125,7 @@ echo "If this terminal connects to a network using ethernet, it can be configure
echo "as a wireless access point for other terminals. Would you like to configure" echo "as a wireless access point for other terminals. Would you like to configure"
echo -n "this terminal as an access point? [y/N]: " echo -n "this terminal as an access point? [y/N]: "
read wapconf read wapconf
if [ "$wapconf" = "Y" -o "$wapconf" = "y" ] if [[ "$wapconf" == "Y" || "$wapconf" == "y" ]]
then then
# Determine if we are using NetworkManager or systemd-networkd # Determine if we are using NetworkManager or systemd-networkd
echo "" echo ""
@@ -66,89 +135,10 @@ then
cp -Rv apsetup/etc/* /etc cp -Rv apsetup/etc/* /etc
if systemctl status dhcpcd.service|grep -q "Active: active (running)" if systemctl status dhcpcd.service|grep -q "Active: active (running)"
then then
echo "Configuring as wireless access point using systemd-networkd." config_systemd-networkd
get_ap_params
# Save network system in config file
sed -i 's,'network_system=.*','network_system="\"systemd-networkd\""',' /etc/piwifiap.conf
apt install hostapd
systemctl unmask hostapd
systemctl enable hostapd
echo "[NetDev]" >/etc/systemd/network/bridge-br0.netdev
echo "Name=br0" >>/etc/systemd/network/bridge-br0.netdev
echo "Kind=bridge" >>/etc/systemd/network/bridge-br0.netdev
echo "[Match]" >/etc/systemd/network/br0-member-eth0.network
echo "Name=eth0" >>/etc/systemd/network/br0-member-eth0.network
echo "" >>/etc/systemd/network/br0-member-eth0.network
echo "[Network]" >>/etc/systemd/network/br0-member-eth0.network
echo "Bridge=br0" >>/etc/systemd/network/br0-member-eth0.network
systemctl enable systemd-networkd
mv /etc/dhcpcd.conf /etc/dhcpcd.conf.old
echo "denyinterfaces wlan0 eth0" >/etc/dhcpcd.conf
cat /etc/dhcpcd.conf.old >>/etc/dhcpcd.conf
echo "interface br0" >>/etc/dhcpcd.conf
rfkill unblock wlan
echo "country_code=US" >/etc/hostapd/hostapd.conf
echo "interface=wlan0" >>/etc/hostapd/hostapd.conf
echo "bridge=br0" >>/etc/hostapd/hostapd.conf
echo "ssid=$wapssid" >>/etc/hostapd/hostapd.conf
echo "hw_mode=g" >>/etc/hostapd/hostapd.conf
echo "channel=7" >>/etc/hostapd/hostapd.conf
echo "macaddr_acl=0" >>/etc/hostapd/hostapd.conf
echo "auth_algs=1" >>/etc/hostapd/hostapd.conf
echo "ignore_broadcast_ssid=0" >>/etc/hostapd/hostapd.conf
echo "wpa=2" >>/etc/hostapd/hostapd.conf
echo "wpa_passphrase=$wappass" >>/etc/hostapd/hostapd.conf
echo "wpa_key_mgmt=WPA-PSK" >>/etc/hostapd/hostapd.conf
echo "wpa_pairwise=TKIP" >>/etc/hostapd/hostapd.conf
echo "rsn_pairwise=CCMP" >>/etc/hostapd/hostapd.conf
if dpkg -l|grep webmin >/dev/null 2>&1
then
wget -c http://github.com/pjz/webmin-modules/releases/download/v1.0/hostap.wbm.gz
gzip -d hostap.wbm.gz
/usr/share/webmin/install-module.pl hostap.wbm
fi
echo ""
echo ""
elif systemctl status NetworkManager.service|grep -q "Active: active (running)" elif systemctl status NetworkManager.service|grep -q "Active: active (running)"
then then
echo "Configuring as wireless access point using NetworkManager." config_NetworkManager
rfkill unblock wlan
get_ap_params
# Clean up a possible failed previous attempt
nmcli con del piwifi-ap >/dev/null 2>&1
nmcli con del piwifi-ethernet >/dev/null 2>&1
nmcli con del piwifi-apbridge >/dev/null 2>&1
# Save network system in config file
sed -i 's,'network_system=.*','network_system="\"NetworkManager\""',' /etc/piwifiap.conf
nmcli con add type bridge \
con-name piwifi-apbridge \
ifname bridge0
nmcli con add type ethernet \
slave-type bridge \
con-name piwifi-ethernet \
ifname eth0 \
master bridge0
nmcli con add type wifi \
ifname wlan0 \
con-name piwifi-ap \
autoconnect yes \
ssid "$wapssid" \
slave-type bridge \
master bridge0 \
wifi-sec.key-mgmt wpa-psk \
wifi-sec.psk "$wappass" \
802-11-wireless.mode ap \
802-11-wireless.band bg
nmcli con up piwifi-apbridge
nmcli con up piwifi-ethernet
nmcli con up piwifi-ap
else else
echo "Unable to determine what type of network configuration (systemd-networkd" echo "Unable to determine what type of network configuration (systemd-networkd"
echo "or NetworkManager) your system uses. Automatic setup cannot continue." echo "or NetworkManager) your system uses. Automatic setup cannot continue."