femtofox/scripts/luckfox-install.sh

151 lines
No EOL
7.3 KiB
Bash
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

echo "*** $(date "+%H:%M:%S %Z"): Starting Femtofox install script. \e[1;31mNETWORK CONNECTIVITY REQUIRED! ***\e[0m\n"
read -p "Enter wifi SSID: " SSID
echo -n "Enter wifi password: "
stty -echo # Disable terminal echo
read PASSWORD
stty echo # Re-enable terminal echo
echo "\n*** SSID saved. Wifi requires adapter ***\e[0m\n"
sudo mount -t tmpfs tmpfs /run -o remount,size=32M,nosuid,noexec,relatime,mode=755 #Embiggen tmpfs - prevents problems.
sudo sh -c 'echo "tmpfs /run tmpfs size=32M,nosuid,noexec,relatime,mode=755 0 0" >> /etc/fstab' #Embiggen tmpfs - for future boots.
echo "*** $(date "+%H:%M:%S %Z"): Enlarged tmpfs ***\e[0m\n"
sudo chmod +x buttonservice.sh
sudo mv buttonservice.sh /usr/local/bin
sudo mv button.service /etc/systemd/system
sudo usermod -aG input femto
echo "femto ALL=(ALL) NOPASSWD: /sbin/reboot" | sudo tee -a /etc/sudoers
sudo systemctl daemon-reload
sudo systemctl enable button.service
echo "*** $(date "+%H:%M:%S %Z"): Added reboot on BOOT button press ***\e[0m\n"
sudo timedatectl set-timezone UTC #Set timezone to UTC.
date -d "$(wget --method=HEAD -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f4-10)" #Set time/date.
echo "*** $(date "+%H:%M:%S %Z") Changed timezone to UTC and got network time ***\e[0m\n"
#update system and install dependencies
echo "*** $(date "+%H:%M:%S %Z"): Updating and upgrading Ubuntu... ***\e[0m\n"
sudo DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" -y update && sudo DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" -y upgrade
echo "*** $(date "+%H:%M:%S %Z"): Ubuntu upgrade / update complete ***\e[0m\n"
echo "*** $(date "+%H:%M:%S %Z"): Installing necessary packages... ***\e[0m\n"
sudo apt-get install linux-firmware wireless-tools git python3.10-venv libgpiod-dev libyaml-cpp-dev libbluetooth-dev openssl libssl-dev libulfius-dev liborcania-dev evtest -y
echo "*** $(date "+%H:%M:%S %Z"): Necessary packages installed ***\e[0m\n"
echo "*** $(date "+%H:%M:%S %Z"): Installing pip packages... ***\e[0m\n"
pip3 install pytap2 meshtastic pypubsub
echo "*** $(date "+%H:%M:%S %Z"): Pip packages installed ***\e[0m\n"
#get latest meshtasticd beta
echo "*** $(date "+%H:%M:%S %Z"): Getting latest Meshtasticd beta... ***\e[0m\n"
URL=$(wget -qO- https://api.github.com/repos/meshtastic/firmware/releases/latest | grep -oP '"browser_download_url": "\K[^"]*armhf\.deb' | head -n 1); FILENAME=$(basename $URL); wget -O /tmp/$FILENAME $URL && sudo apt install /tmp/$FILENAME -y && sudo rm /tmp/$FILENAME
echo "*** $(date "+%H:%M:%S %Z"): Installed latest Meshtasticd beta ***\e[0m\n"
echo "*** $(date "+%H:%M:%S %Z"): Getting custom FemtoFox files... ***\e[0m\n"
sudo cp ../liborcania_2.3_armhf/* /usr/lib/arm-linux-gnueabihf/
sudo mv /etc/meshtasticd/config.yaml /etc/meshtasticd/config.yaml.bak
sudo cp ../meshtasticd/config.yaml /etc/meshtasticd/
sudo cp /etc/update-motd.d/00-header /etc/update-motd.d/00-header.bak
sudo mv 00-header /etc/update-motd.d/
sudo chmod +x /etc/update-motd.d/00-header
sudo mv /etc/update-motd.d/10-help-text /etc/update-motd.d/10-help-text.bak
sudo mv /etc/update-motd.d/60-unminimize /etc/update-motd.d/60-unminimize.bak
echo "*** $(date "+%H:%M:%S %Z"): Copied custom FemtoFox files ***\e[0m\n"
sudo mv usbconfig.sh /usr/local/bin/
echo "*** $(date "+%H:%M:%S %Z"): Added USB configuration tool ***\e[0m\n"
#serial port permissions
sudo usermod -a -G tty $USER
sudo usermod -a -G dialout $USER
echo "*** $(date "+%H:%M:%S %Z"): Set serial port permissions ***\e[0m\n"
#disable redundant services
echo "*** $(date "+%H:%M:%S %Z"): Disabling redundant services... ***\e[0m\n"
sudo systemctl disable vsftpd.service
sudo systemctl disable ModemManager.service
sudo systemctl disable polkit.service
sudo systemctl disable getty@tty1.service
sudo systemctl disable alsa-restore.service
echo "*** $(date "+%H:%M:%S %Z"): Disabled redundant services ***\e[0m\n"
#change luckfox system config
echo "*** $(date "+%H:%M:%S %Z"): Changing Luckfox system config ***\e[0m\n"
sudo mv luckfox.cfg /etc/
sudo luckfox-config load
echo "*** $(date "+%H:%M:%S %Z"): Set and loaded Luckfox system config ***\e[0m\n"
sudo hostname femtofox
echo "*** $(date "+%H:%M:%S %Z"): Set hostname to femtofox ***\e[0m\n"
#replace /etc/rc.local
sudo cp /etc/rc.local /etc/rc.local.bak
sudo cp ./rc.local /etc/rc.local
sudo chmod +x /etc/rc.local
echo "*** $(date "+%H:%M:%S %Z"): Replaced /etc/rc.local ***\e[0m\n"
#replace /etc/issue
sudo cp /etc/issue /etc/issue.bak
sudo cp ./issue /etc/issue
echo "*** $(date "+%H:%M:%S %Z"): Replaced /etc/issue ***\e[0m\n"
#add daily reboot to cron
echo -e "# reboot pi every 7. Default timezone is GMT. To change timezone run \`sudo tzselect\`\n0 6 * * * /sbin/reboot\n\n# restart bbs server script every odd hour\n#0 23/2 * * * sudo systemctl restart mesh-bbs.service" | sudo tee -a /var/spool/cron/crontabs/root > /dev/null
echo "*** $(date "+%H:%M:%S %Z"): Scheduled daily reboot at 06:00 UTC ***\e[0m\n"
echo "*** $(date "+%H:%M:%S %Z"): Configuring networking... ***\e[0m\n"
# Replace the existing configuration for eth0 in /etc/network/interfaces
current_mac=$(cat /sys/class/net/eth0/address)
config="# interfaces(5) file used by ifup(8) and ifdown(8)
# Include files from /etc/network/interfaces.d:
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
# static mac address for onboard ethernet (castellated pins)
allow-hotplug eth0
iface eth0 inet dhcp
hwaddress ether $current_mac
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf"
sudo sed -i "/iface eth0 inet/d" /etc/network/interfaces
echo "$config" | sudo tee /etc/network/interfaces > /dev/null
echo "*** $(date "+%H:%M:%S %Z"): Replaced /etc/network/interfaces and made current ethernet MAC address ($current_mac) permanent ***\e[0m"
#wifi support
echo "*** $(date "+%H:%M:%S %Z"): Adding wifi support... ***\e[0m\n"
sudo mkdir /lib/modules
sudo mkdir /lib/modules/5.10.160
sudo find /oem/usr/ko/ -name '*.ko' ! -name 'ipv6.ko' -exec cp {} /lib/modules/5.10.160/ \;
sudo touch /lib/modules/5.10.160/modules.order
sudo touch /lib/modules/5.10.160/modules.builtin
sudo depmod -a 5.10.160
# Append to wpa_supplicant.conf
sudo tee -a /etc/wpa_supplicant/wpa_supplicant.conf > /dev/null <<EOF
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=US # Change to your country code
network={
ssid="$SSID"
psk="$PASSWORD"
key_mgmt=WPA-PSK
priority=10
}
EOF
echo 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?", ATTR{type}=="1", KERNEL=="wl*", NAME="wlan%n"' | sudo tee /etc/udev/rules.d/70-network.rules > /dev/null
sudo ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
sudo udevadm control --reload-rules
sudo udevadm trigger
sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager
echo "*** $(date "+%H:%M:%S %Z"): Added wifi support ***\e[0m\n"
echo "*** $(date "+%H:%M:%S %Z"): Cleaning up... ***\e[0m\n"
sudo rm -rf ~/femtofox
echo "*** $(date "+%H:%M:%S %Z"): Configuration complete, rebooting... ***\e[0m\n"
sudo sleep 5 && sudo reboot