#!/bin/bash . /etc/functions TRACE_FUNC mobile_tethering() { TRACE_FUNC #Tethering over USB for Mobile phones supporting CDC (Android Pixel 6a+, Librem phone, etc.) if [ -e /lib/modules/cdc_ether.ko ]; then #prompt user if he wants to enable USB tethering and skip if not echo "" echo "USB tethering support is available for mobile phones supporting CDC NCM/EEM tethering" read -p "Do you want to enable USB tethering now? (Y/n)" -n 1 -r REPLY echo "" if [[ $REPLY =~ ^[Nn]$ ]]; then echo "USB tethering not enabled, skipping..." return 0 fi #first enable USB controllers enable_usb echo "" echo "Please connect your mobile phone to a USB port and enable internet connection sharing." echo "* Android: Select the 'Charging this device via USB' notification and enable tethering." echo "* Linux: Set the wired connection's IPv4 method on the mobile phone to 'Shared to other computers'." echo "Heads supports CDC-NCM and CDC-EEM. Android phones using RNDIS and Apple phones are not supported." echo "" read -p "Press Enter to continue..." -n 1 -r network_modules="mii usbnet cdc_ether cdc_ncm cdc_eem" for module in $(echo $network_modules); do if [ -f /lib/modules/$module.ko ]; then insmod /lib/modules/$module.ko fi done if ! [ -e /sys/class/net/usb0 ]; then echo "" echo "No tethering network interface was found." echo "* Make sure the phone supports CDC-NCM or CDC-EEM. Many, but not all, Android and Linux phones support these." echo "* Android phones requiring RNDIS and Apple phones are not supported." echo "* Make sure the cable used works with data and that the phone has tethering enabled." echo "" read -p "Press Enter to continue..." -n 1 -r fi fi } ethernet_activation() { TRACE_FUNC #Prompt user if he wants to enable ethernet and skip if not read -p "Do you want to enable Ethernet now? (Y/n)" -n 1 -r REPLY echo "" if [[ $REPLY =~ ^[Nn]$ ]]; then echo "Ethernet not enabled, skipping..." return 0 fi echo "Loading Ethernet network modules..." network_modules="e1000 e1000e igb sfc mdio mlx4_core mlx4_en" for module in $(echo $network_modules); do if [ -f /lib/modules/$module.ko ]; then insmod /lib/modules/$module.ko fi done } # bring up the ethernet interface ifconfig lo 127.0.0.1 mobile_tethering ethernet_activation if [ -e /sys/class/net/usb0 ]; then dev=usb0 echo "USB tethering network interface detected as $dev" elif [ -e /sys/class/net/eth0 ]; then dev=eth0 echo "Ethernet network interface detected as $dev" else echo "No network interface detected, please check your hardware and board configuration" exit 1 fi if [ -n "$dev" ]; then #Randomize MAC address for maximized boards if echo "$CONFIG_BOARD" | grep -q maximized; then ifconfig $dev down echo "Generating random MAC address..." mac=$(generate_random_mac_address) echo "Assigning randomly generated MAC: $mac to $dev..." ifconfig $dev hw ether $mac ifconfig $dev up fi # Set up static IP if configured in board config if [ ! -z "$CONFIG_BOOT_STATIC_IP" ]; then echo "Setting static IP: $CONFIG_BOOT_STATIC_IP" ifconfig $dev $CONFIG_BOOT_STATIC_IP echo "No NTP sync with static IP: no DNS server nor gateway defined, set time manually" # Set up DHCP if no static IP elif [ -e /sbin/udhcpc ]; then echo "Getting IP from first DHCP server answering. This may take a while..." if udhcpc -T 1 -i $dev -q; then if [ -e /sbin/ntpd ]; then DNS_SERVER=$(grep nameserver /etc/resolv.conf | awk -F " " {'print $2'}) killall ntpd 2 &>1 >/dev/null echo "Attempting to sync time with NTP server: $DNS_SERVER..." if ! ntpd -d -N -n -q -p $DNS_SERVER; then echo "NTP sync unsuccessful with DNS server" echo "Attempting NTP time sync with pool.ntp.org..." if ! ntpd -d -d -N -n -q -p pool.ntp.org; then echo "NTP sync unsuccessful." else echo "NTP time sync successful." fi fi echo "Syncing hardware clock with system time in UTC/GMT timezone..." hwclock -w echo "" date=$(date "+%Y-%m-%d %H:%M:%S %Z") echo "Time: $date" fi fi fi if [ -e /bin/dropbear ]; then # Set up the ssh server, allow root logins and log to stderr if [ ! -d /etc/dropbear ]; then mkdir /etc/dropbear fi echo "Starting dropbear ssh server..." # Make sure dropbear is not already running killall dropbear > /dev/null 2>&1 || true # Start dropbear with root login and log to stderr # -B background # -R create host keys dropbear -B -R fi echo "" echo "Network setup complete:" ifconfig $dev fi