20-networking.sh
189 lines
| 7.0 KiB
| application/x-sh
|
BashLexer
/ bootstrap.d / 20-networking.sh
Filip Pytloun
|
r56 | # | ||
Jan Wagner
|
r67 | # Setup Networking | ||
Filip Pytloun
|
r56 | # | ||
Jan Wagner
|
r67 | # Load utility functions | ||
Filip Pytloun
|
r56 | . ./functions.sh | ||
Jan Wagner
|
r71 | # Install and setup hostname | ||
drtyhlpr
|
r94 | install_readonly files/network/hostname "${ETC_DIR}/hostname" | ||
Unknown
|
r384 | sed -i "s/^RaspberryPI/${HOSTNAME}/" "${ETC_DIR}/hostname" | ||
Jan Wagner
|
r67 | |||
Jan Wagner
|
r71 | # Install and setup hosts | ||
drtyhlpr
|
r94 | install_readonly files/network/hosts "${ETC_DIR}/hosts" | ||
Unknown
|
r384 | sed -i "s/RaspberryPI/${HOSTNAME}/" "${ETC_DIR}/hosts" | ||
Filip Pytloun
|
r56 | |||
Bobberty
|
r748 | # Ensure /etc/systemd/network directory is available | ||
mkdir -p "${ETC_DIR}/systemd/network" | ||||
Jan Wagner
|
r71 | # Setup hostname entry with static IP | ||
Unknown
|
r732 | if [ "$NET_ETH_ADDRESS" != "" ] ; then | ||
NET_IP=$(echo "${NET_ETH_ADDRESS}" | cut -f 1 -d'/') | ||||
drtyhlpr
|
r94 | sed -i "s/^127.0.1.1/${NET_IP}/" "${ETC_DIR}/hosts" | ||
Filip Pytloun
|
r56 | fi | ||
Jan Wagner
|
r71 | # Remove IPv6 hosts | ||
if [ "$ENABLE_IPV6" = false ] ; then | ||||
drtyhlpr
|
r94 | sed -i -e "/::[1-9]/d" -e "/^$/d" "${ETC_DIR}/hosts" | ||
Filip Pytloun
|
r56 | fi | ||
Jan Wagner
|
r71 | # Install hint about network configuration | ||
drtyhlpr
|
r94 | install_readonly files/network/interfaces "${ETC_DIR}/network/interfaces" | ||
Filip Pytloun
|
r56 | |||
Jan Wagner
|
r71 | # Install configuration for interface eth0 | ||
Unknown
|
r732 | install_readonly files/network/eth0.network "${ETC_DIR}/systemd/network/eth0.network" | ||
Jan Wagner
|
r71 | |||
Unknown
|
r571 | if [ "$RPI_MODEL" = 3P ] ; then | ||
Unknown
|
r732 | printf "\n[Link]\nGenericReceiveOffload=off\nTCPSegmentationOffload=off\nGenericSegmentationOffload=off" >> "${ETC_DIR}/systemd/network/eth0.network" | ||
Unknown
|
r571 | fi | ||
Unknown
|
r250 | # Install configuration for interface wl* | ||
Unknown
|
r732 | install_readonly files/network/wlan0.network "${ETC_DIR}/systemd/network/wlan0.network" | ||
Unknown
|
r250 | |||
#always with dhcp since wpa_supplicant integration is missing | ||||
Unknown
|
r732 | sed -i -e "s/DHCP=.*/DHCP=yes/" -e "/DHCP/q" "${ETC_DIR}/systemd/network/wlan0.network" | ||
Unknown
|
r250 | |||
Unknown
|
r732 | if [ "$ENABLE_ETH_DHCP" = true ] ; then | ||
Jan Wagner
|
r71 | # Enable DHCP configuration for interface eth0 | ||
Unknown
|
r732 | sed -i -e "s/DHCP=.*/DHCP=yes/" -e "/DHCP/q" "${ETC_DIR}/systemd/network/eth0.network" | ||
Unknown
|
r250 | |||
Jan Wagner
|
r70 | # Set DHCP configuration to IPv4 only | ||
Jan Wagner
|
r67 | if [ "$ENABLE_IPV6" = false ] ; then | ||
Unknown
|
r732 | sed -i "s/DHCP=.*/DHCP=v4/" "${ETC_DIR}/systemd/network/eth0.network" | ||
sed '/IPv6PrivacyExtensions=true/d' "${ETC_DIR}/systemd/network/eth0.network" | ||||
Jan Wagner
|
r67 | fi | ||
Jan Wagner
|
r70 | |||
Unknown
|
r732 | else # ENABLE_ETH_DHCP=false | ||
Jan Wagner
|
r71 | # Set static network configuration for interface eth0 | ||
Unknown
|
r732 | if [ -n NET_ETH_ADDRESS ] && [ -n NET_ETH_GATEWAY ] && [ -n NET_ETH_DNS_1 ] ; then | ||
sed -i\ | ||||
-e "s|DHCP=.*|DHCP=no|"\ | ||||
-e "s|Address=\$|Address=${NET_ETH_ADDRESS}|"\ | ||||
-e "s|Gateway=\$|Gateway=${NET_ETH_GATEWAY}|"\ | ||||
-e "0,/DNS=\$/ s|DNS=\$|DNS=${NET_ETH_DNS_1}|"\ | ||||
-e "0,/DNS=\$/ s|DNS=\$|DNS=${NET_ETH_DNS_2}|"\ | ||||
-e "s|Domains=\$|Domains=${NET_ETH_DNS_DOMAINS}|"\ | ||||
-e "0,/NTP=\$/ s|NTP=\$|NTP=${NET_ETH_NTP_1}|"\ | ||||
-e "0,/NTP=\$/ s|NTP=\$|NTP=${NET_ETH_NTP_2}|"\ | ||||
"${ETC_DIR}/systemd/network/eth0.network" | ||||
fi | ||||
Filip Pytloun
|
r56 | fi | ||
Jan Wagner
|
r71 | |||
Unknown
|
r384 | if [ "$ENABLE_WIRELESS" = true ] ; then | ||
Bobberty
|
r748 | mkdir -p "${ETC_DIR}/wpa_supplicant" | ||
Unknown
|
r732 | if [ "$ENABLE_WIFI_DHCP" = true ] ; then | ||
# Enable DHCP configuration for interface eth0 | ||||
sed -i -e "s/DHCP=.*/DHCP=yes/" -e "/DHCP/q" "${ETC_DIR}/systemd/network/wlan0.network" | ||||
# Set DHCP configuration to IPv4 only | ||||
if [ "$ENABLE_IPV6" = false ] ; then | ||||
sed -i "s/DHCP=.*/DHCP=v4/" "${ETC_DIR}/systemd/network/wlan0.network" | ||||
sed '/IPv6PrivacyExtensions=true/d' "${ETC_DIR}/systemd/network/wlan0.network" | ||||
fi | ||||
else # ENABLE_WIFI_DHCP=false | ||||
# Set static network configuration for interface eth0 | ||||
if [ -n NET_WIFI_ADDRESS ] && [ -n NET_WIFI_GATEWAY ] && [ -n NET_WIFI_DNS_1 ] ; then | ||||
sed -i\ | ||||
-e "s|DHCP=.*|DHCP=no|"\ | ||||
-e "s|Address=\$|Address=${NET_WIFI_ADDRESS}|"\ | ||||
-e "s|Gateway=\$|Gateway=${NET_WIFI_GATEWAY}|"\ | ||||
-e "0,/DNS=\$/ s|DNS=\$|DNS=${NET_WIFI_DNS_1}|"\ | ||||
-e "0,/DNS=\$/ s|DNS=\$|DNS=${NET_WIFI_DNS_2}|"\ | ||||
-e "s|Domains=\$|Domains=${NET_WIFI_DNS_DOMAINS}|"\ | ||||
-e "0,/NTP=\$/ s|NTP=\$|NTP=${NET_WIFI_NTP_1}|"\ | ||||
-e "0,/NTP=\$/ s|NTP=\$|NTP=${NET_WIFI_NTP_2}|"\ | ||||
"${ETC_DIR}/systemd/network/wlan0.network" | ||||
fi | ||||
fi | ||||
Bobberty
|
r747 | if [ ! -z "$NET_WIFI_SSID" ] && [ ! -z "$NET_WIFI_PSK" ] ; then | ||
chroot_exec printf " | ||||
Unknown
|
r732 | ctrl_interface=/run/wpa_supplicant | ||
update_config=1 | ||||
eapol_version=1 | ||||
ap_scan=1 | ||||
fast_reauth=1 | ||||
Bobberty
|
r748 | " > "${ETC_DIR}/wpa_supplicant/wpa_supplicant-wlan0.conf" | ||
Unknown
|
r732 | |||
#Configure WPA_supplicant | ||||
Bobberty
|
r748 | chroot_exec wpa_passphrase "$NET_WIFI_SSID" "$NET_WIFI_PSK" >> "${ETC_DIR}/wpa_supplicant/wpa_supplicant-wlan0.conf" | ||
Unknown
|
r732 | |||
chroot_exec systemctl enable wpa_supplicant.service | ||||
chroot_exec systemctl enable wpa_supplicant@wlan0.service | ||||
fi | ||||
# Remove empty settings from wlan configuration | ||||
sed -i "/.*=\$/d" "${ETC_DIR}/systemd/network/wlan0.network" | ||||
# If WLAN is enabled copy wlan configuration too | ||||
mv -v "${ETC_DIR}/systemd/network/wlan0.network" "${LIB_DIR}/systemd/network/11-wlan0.network" | ||||
drtyhlpr
|
r92 | fi | ||
Unknown
|
r732 | |||
# Remove empty settings from network configuration | ||||
sed -i "/.*=\$/d" "${ETC_DIR}/systemd/network/eth0.network" | ||||
# Move systemd network configuration if required by Debian release | ||||
mv -v "${ETC_DIR}/systemd/network/eth0.network" "${LIB_DIR}/systemd/network/10-eth0.network" | ||||
#Clean up | ||||
Unknown
|
r384 | rm -fr "${ETC_DIR}/systemd/network" | ||
drtyhlpr
|
r92 | |||
Filip Pytloun
|
r56 | # Enable systemd-networkd service | ||
chroot_exec systemctl enable systemd-networkd | ||||
Jan Wagner
|
r71 | # Install host.conf resolver configuration | ||
drtyhlpr
|
r94 | install_readonly files/network/host.conf "${ETC_DIR}/host.conf" | ||
Jan Wagner
|
r71 | |||
Filip Pytloun
|
r56 | # Enable network stack hardening | ||
if [ "$ENABLE_HARDNET" = true ] ; then | ||||
Jan Wagner
|
r71 | # Install sysctl.d configuration files | ||
drtyhlpr
|
r94 | install_readonly files/sysctl.d/82-rpi-net-hardening.conf "${ETC_DIR}/sysctl.d/82-rpi-net-hardening.conf" | ||
Filip Pytloun
|
r56 | |||
Jan Wagner
|
r71 | # Setup resolver warnings about spoofed addresses | ||
drtyhlpr
|
r94 | sed -i "s/^# spoof warn/spoof warn/" "${ETC_DIR}/host.conf" | ||
Filip Pytloun
|
r56 | fi | ||
Stephen A. Brandli
|
r85 | |||
# Enable time sync | ||||
Unknown
|
r336 | if [ "$NET_NTP_1" != "" ] ; then | ||
Stephen A. Brandli
|
r85 | chroot_exec systemctl enable systemd-timesyncd.service | ||
fi | ||||
drtyhlpr
|
r94 | |||
# Download the firmware binary blob required to use the RPi3 wireless interface | ||||
if [ "$ENABLE_WIRELESS" = true ] ; then | ||||
Unknown
|
r336 | if [ ! -d "${WLAN_FIRMWARE_DIR}" ] ; then | ||
drtyhlpr
|
r398 | mkdir -p "${WLAN_FIRMWARE_DIR}" | ||
drtyhlpr
|
r94 | fi | ||
drtyhlpr
|
r142 | # Create temporary directory for firmware binary blob | ||
Petter Reinholdtsen
|
r174 | temp_dir=$(as_nobody mktemp -d) | ||
drtyhlpr
|
r142 | |||
r724 | # Fetch firmware binary blob for RPI3B+ or Pi4 | |||
Unknown
|
r665 | if [ "$RPI_MODEL" = 3P ] || [ "$RPI_MODEL" = 4 ] ; then | ||
drtyhlpr
|
r398 | # Fetch firmware binary blob for RPi3P | ||
as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.bin" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.bin" | ||||
as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.txt" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.txt" | ||||
as_nobody wget -q -O "${temp_dir}/brcmfmac43455-sdio.clm_blob" "${WLAN_FIRMWARE_URL}/brcmfmac43455-sdio.clm_blob" | ||||
Unknown
|
r437 | |||
# Move downloaded firmware binary blob | ||||
mv "${temp_dir}/brcmfmac43455-sdio."* "${WLAN_FIRMWARE_DIR}/" | ||||
# Set permissions of the firmware binary blob | ||||
chown root:root "${WLAN_FIRMWARE_DIR}/brcmfmac43455-sdio."* | ||||
chmod 600 "${WLAN_FIRMWARE_DIR}/brcmfmac43455-sdio."* | ||||
Unknown
|
r289 | elif [ "$RPI_MODEL" = 3 ] || [ "$RPI_MODEL" = 0 ] ; then | ||
drtyhlpr
|
r398 | # Fetch firmware binary blob for RPi3 | ||
as_nobody wget -q -O "${temp_dir}/brcmfmac43430-sdio.bin" "${WLAN_FIRMWARE_URL}/brcmfmac43430-sdio.bin" | ||||
as_nobody wget -q -O "${temp_dir}/brcmfmac43430-sdio.txt" "${WLAN_FIRMWARE_URL}/brcmfmac43430-sdio.txt" | ||||
Unknown
|
r437 | |||
# Move downloaded firmware binary blob | ||||
mv "${temp_dir}/brcmfmac43430-sdio."* "${WLAN_FIRMWARE_DIR}/" | ||||
# Set permissions of the firmware binary blob | ||||
chown root:root "${WLAN_FIRMWARE_DIR}/brcmfmac43430-sdio."* | ||||
chmod 600 "${WLAN_FIRMWARE_DIR}/brcmfmac43430-sdio."* | ||||
Unknown
|
r250 | fi | ||
drtyhlpr
|
r142 | # Remove temporary directory for firmware binary blob | ||
rm -fr "${temp_dir}" | ||||
drtyhlpr
|
r94 | fi | ||