mirror of
https://github.com/linuxboot/heads.git
synced 2025-01-22 04:18:02 +00:00
5f8cb5a159
Also remove output of attempted module loading since DEBUG will show if needed Remove timeout after 30 seconds to unify UX and block Change UX wording Should address all PR review comments Signed-off-by: Thierry Laurion <insurgo@riseup.net>
144 lines
4.3 KiB
Bash
Executable File
144 lines
4.3 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..."
|
|
dropbear -B -R
|
|
fi
|
|
echo ""
|
|
echo "Network setup complete:"
|
|
ifconfig $dev
|
|
fi
|