heads/initrd/bin/network-init-recovery
Thierry Laurion ebe9db4350
initrd/bin/network-init-recovery: kill dropbear unconditionally prior of starting it
Signed-off-by: Thierry Laurion <insurgo@riseup.net>
2024-02-23 12:17:47 -05:00

149 lines
4.5 KiB
Bash
Executable File

#!/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