Mu2_Deploy/Makefile

234 lines
9.7 KiB
Makefile

# Makefile for installation of echomav_deploy on EchoPilot AI hardware
# This is installation of mavlink-router, cockpit, and network setup
# Spiri modified to install additional features
.DEFAULT_GOAL := default
SHELL := /bin/bash
SUDO := $(shell test $${EUID} -ne 0 && echo "sudo")
.EXPORT_ALL_VARIABLES:
CURDIR := $(shell pwd)
SYSCFG = /etc/mavlink-router
CONFIG ?= /var/local
LIBSYSTEMD=/lib/systemd/system
SERVICES=mavlink-router.service temperature.service wifibroadcast@drone fpv-camera.service
DRY_RUN=false
LOCAL=/usr/local
LOCAL_SCRIPTS=temperature.sh cockpitScript.sh
.PHONY: enable install see uninstall static default no-static verify_spir0 interactive set_network_manager_config configure_wifibroadcast
default: interactive install static set_network_manager_config configure_wifibroadcast
interactive:
@clear
@echo " "
@echo " _____ _____ _____ _____ _____ "
@echo " / ____|| __ \|_ _|| __ \ |_ _| "
@echo " | (___ | |__) | | | | |__) | | | "
@echo " \___ \ | ___/ | | | _ / | | "
@echo " ____) || | _| |_ | | \ \ _| |_ "
@echo " |_____/ |_| __|_____||_|__\_\|_____| "
@echo " | \/ || | | ||__ \ "
@echo " | \ / || | | | ) | "
@echo " | |\/| || | | | / / "
@echo " | | | || |__| | / /_ "
@echo " |_| |_| \____/ |____| "
@echo " "
@echo "Installing Mu2 Default Settings/Programs "
@echo ""
@read -p "Do you want to set a static IP address? (Y/N): " set_ip; \
if [ "$$set_ip" = "Y" ] || [ "$$set_ip" = "y" ]; then \
echo ""; \
echo "Please enter the last segment of the IP address for this setup (between 15-250)"; \
read -p "IP Address: 192.168.10. " ip_address; \
$(MAKE) explicit-ip ip=192.168.10.$$ip_address; \
else \
echo "Proceeding without setting a static IP address."; \
fi
explicit-ip:
@$(MAKE) --no-print-directory install
$(SUDO) chmod +x $(CURDIR)/static-network.sh
@$(SUDO) ./static-network.sh -i eth0 -a $(ip)
# New target to configure NetworkManager to ignore spir0
set_network_manager_config:
@echo ""
@echo "Configuring NetworkManager to ignore SpiriLink interface (spir0)..."
@echo ""
@$(SUDO) mkdir -p /etc/NetworkManager
@$(SUDO) touch /etc/NetworkManager/NetworkManager.conf
@if ! grep -q "\[keyfile\]" /etc/NetworkManager/NetworkManager.conf; then \
echo "[keyfile]" | $(SUDO) tee -a /etc/NetworkManager/NetworkManager.conf > /dev/null; \
fi
@if ! grep -q "unmanaged-devices=interface-name:spir0" /etc/NetworkManager/NetworkManager.conf; then \
echo "unmanaged-devices=interface-name:spir0" | $(SUDO) tee -a /etc/NetworkManager/NetworkManager.conf > /dev/null; \
fi
@$(SUDO) systemctl restart NetworkManager
@echo "NetworkManager has been configured to ignore spir0."
# New target to configure wifibroadcast settings
configure_wifibroadcast:
@echo ""
@echo "Configuring /etc/default/wifibroadcast with interface spir0..."
@echo ""
@$(SUDO) bash -c "echo 'WFB_NICS=\"spir0\"' > /etc/default/wifibroadcast"
@echo "Configuration updated: /etc/default/wifibroadcast has been set with WFB_NICS=\"spir0\"."
@echo "Reboot Mu2 to get new wireless settings"
no-static:
@$(MAKE) --no-print-directory install
disable:
@( for c in stop disable ; do $(SUDO) systemctl $${c} $(SERVICES) ; done ; true )
enable:
@( for c in stop disable ; do $(SUDO) systemctl $${c} $(SERVICES) ; done ; true )
@( for s in $(SERVICES) ; do $(SUDO) install -Dm644 $${s%.*}.service $(LIBSYSTEMD)/$${s%.*}.service ; done ; true )
@if [ ! -z "$(SERVICES)" ]; then $(SUDO) systemctl daemon-reload; fi
@( for s in $(SERVICES) ; do $(SUDO) systemctl enable $${s%.*}; done; true )
@echo ""
@echo "Service is installed. To run now use sudo systemctl start mavlink-router and sudo systemctl start cockpit.socket"
@echo "Inspect output with sudo journalctl -fu mavlink-router"
@echo ""
static:
# set up static ip address on eth0
$(SUDO) chmod +x $(CURDIR)/static-network.sh
@$(SUDO) ./static-network.sh -i eth0 -a auto
install: verify_spir0
# install helper apps
$(SUDO) apt update
$(SUDO) apt install -y nano nload htop picocom sshpass python3-msgpack
# install mavlink-router if not already installed
@if [ -d ~/tmp/mavlink-router-source ]; then \
read -p "Mavlink-router source already exists. Do you want to reinstall? (Y/N): " reinstall; \
if [ "$$reinstall" = "Y" ] || [ "$$reinstall" = "y" ]; then \
echo "Reinstalling Mavlink-router..."; \
cd ~/tmp/mavlink-router-source && git submodule update --init --recursive && \
$(SUDO) apt -y install git ninja-build pkg-config gcc g++ systemd && \
$(SUDO) apt -y install python3-pip && \
$(SUDO) pip3 install meson smbus && \
meson setup build . && $(SUDO) ninja -C build install; \
else \
echo "Skipping Mavlink-router installation."; \
fi; \
else \
rm -rf ~/tmp/mavlink-router-source && \
git clone https://github.com/EchoMAV/mavlink-router-src ~/tmp/mavlink-router-source && \
cd ~/tmp/mavlink-router-source && git submodule update --init --recursive && \
$(SUDO) apt -y install git ninja-build pkg-config gcc g++ systemd && \
$(SUDO) apt -y install python3-pip && \
$(SUDO) pip3 install meson smbus && \
meson setup build . && $(SUDO) ninja -C build install; \
fi
# install the config file
$(SUDO) mkdir -p $(SYSCFG)
$(SUDO) cp main.conf $(SYSCFG)/.
# make ensure-cockpit.sh executable and run it
$(SUDO) chmod +x $(CURDIR)/ensure-cockpit.sh
if [ -x "$(CURDIR)/ensure-cockpit.sh" ]; then \
$(SUDO) $(CURDIR)/ensure-cockpit.sh; \
else \
echo "Error: ensure-cockpit.sh not found or not executable"; \
exit 1; \
fi
# set up cockpit files if not already done
@if [ ! -d /usr/share/cockpit/general ]; then \
$(SUDO) mkdir -p /usr/share/cockpit/general/ && \
$(SUDO) cp -rf ui/general/* /usr/share/cockpit/general/; \
fi
@if [ ! -d /usr/share/cockpit/branding/ubuntu ]; then \
$(SUDO) mkdir -p /usr/share/cockpit/branding/ubuntu && \
$(SUDO) cp -rf ui/branding-ubuntu/* /usr/share/cockpit/branding/ubuntu/; \
fi
$(SUDO) cp -rf ui/static/* /usr/share/cockpit/static/
$(SUDO) cp -rf ui/base1/* /usr/share/cockpit/base1/
@[ -d $(LOCAL)/echopilot ] || $(SUDO) mkdir $(LOCAL)/echopilot
@for s in $(LOCAL_SCRIPTS); do $(SUDO) install -Dm755 $${s} $(LOCAL)/echopilot/$${s}; done
# install modified 8812EU drivers if not already installed
@if [ -d ~/tmp/rtl88x2eu ]; then \
read -p "8812EU drivers source already exists. Do you want to reinstall? (Y/N): " reinstall; \
if [ "$$reinstall" = "Y" ] || [ "$$reinstall" = "y" ]; then \
echo "Reinstalling 8812EU drivers..."; \
cd ~/tmp/rtl88x2eu && git submodule update --init --recursive && \
$(SUDO) sed -i 's/CONFIG_PLATFORM_I386_PC = y/CONFIG_PLATFORM_I386_PC = n/g' Makefile && \
$(SUDO) sed -i 's/CONFIG_PLATFORM_ARM64_RPI = n/CONFIG_PLATFORM_ARM64_RPI = y/g' Makefile && \
$(SUDO) apt -y install dkms && \
$(SUDO) chmod +x ./dkms-install.sh && \
$(SUDO) ./dkms-install.sh; \
else \
echo "Skipping 8812EU drivers installation."; \
fi; \
else \
git clone https://github.com/libc0607/rtl88x2eu-20230815 ~/tmp/rtl88x2eu && \
cd ~/tmp/rtl88x2eu && git submodule update --init --recursive && \
$(SUDO) sed -i 's/CONFIG_PLATFORM_I386_PC = y/CONFIG_PLATFORM_I386_PC = n/g' Makefile && \
$(SUDO) sed -i 's/CONFIG_PLATFORM_ARM64_RPI = n/CONFIG_PLATFORM_ARM64_RPI = y/g' Makefile && \
$(SUDO) apt -y install dkms && \
$(SUDO) chmod +x ./dkms-install.sh && \
$(SUDO) ./dkms-install.sh; \
fi
# Install WFB-NG dependencies and compile deb if not already installed
@if [ -d ~/tmp/wfb-ng ]; then \
read -p "WFB-NG source already exists. Do you want to reinstall? (Y/N): " reinstall; \
if [ "$$reinstall" = "Y" ] || [ "$$reinstall" = "y" ]; then \
echo "Reinstalling WFB-NG..."; \
cd ~/tmp/wfb-ng && \
$(SUDO) apt -y install python3-all libpcap-dev libsodium-dev python3-pip python3-pyroute2 python3-future python3-twisted python3-serial python3-all-dev iw virtualenv debhelper dh-python build-essential && \
$(SUDO) make deb && \
$(SUDO) dpkg -i ~/tmp/wfb-ng/deb_dist/wfb*.deb; \
else \
echo "Skipping WFB-NG installation."; \
fi; \
else \
git clone -b stable https://github.com/svpcom/wfb-ng.git ~/tmp/wfb-ng && \
cd ~/tmp/wfb-ng && \
$(SUDO) apt -y install python3-all libpcap-dev libsodium-dev python3-pip python3-pyroute2 python3-future python3-twisted python3-serial python3-all-dev iw virtualenv debhelper dh-python build-essential && \
$(SUDO) make deb && \
$(SUDO) dpkg -i ~/tmp/wfb-ng/deb_dist/wfb*.deb; \
fi
# create initial WFB-NG config file if not already exists
@if [ ! -f /etc/wifibroadcast.cfg ]; then \
$(SUDO) cp wifibroadcast.cfg /etc/; \
else \
echo "WFB-NG configuration already exists, skipping creation."; \
fi
# move drone encryption key to /etc/
@$(SUDO) cp drone.key /etc/
# stop any running services we care about
@for c in stop disable; do $(SUDO) systemctl $${c} $(SERVICES); done; true
# install and enable services
@for s in $(SERVICES); do $(SUDO) install -Dm644 $${s%.*}.service $(LIBSYSTEMD)/$${s%.*}.service; done
@if [ ! -z "$(SERVICES)" ]; then $(SUDO) systemctl daemon-reload; fi
@for s in $(SERVICES); do $(SUDO) systemctl enable $${s%.*}; done
# set up the system permissions, stop/disable nvgetty etc
@$(SUDO) systemctl stop nvgetty
@$(SUDO) systemctl disable nvgetty
@$(SUDO) usermod -aG dialout $${USER}
@$(SUDO) usermod -aG tty $${USER}
@echo ""
see:
$(SUDO) cat $(SYSCFG)/main.conf
serial:
-@$(SUDO) python3 serial_number.py 0 || true
-@$(SUDO) python3 serial_number.py 1 || true
uninstall:
@$(MAKE) --no-print-directory disable
@for s in $(SERVICES); do $(SUDO) rm $(LIBSYSTEMD)/$${s%.*}.service; done; true
@if [ ! -z "$(SERVICES)" ]; then $(SUDO) systemctl daemon-reload; fi