You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

76 lines
2.7 KiB

\section*{Appendix: Postinstall Scripts and Cloud-Init Configuration}
\addcontentsline{toc}{section}{Appendix: Postinstall Scripts and Cloud-Init Configuration}
This appendix includes the scripts and cloud-init configuration used to automate the setup of the farmer portal environment, including USB mounting and Wi-Fi hotspot broadcasting. Noted, this file can only be supported with Ubuntu Core OS.
\subsection*{postinstall.sh}
This script is designed to be executed on the host device (e.g., Raspberry Pi or Linux box) after the system is installed. It mounts a USB device labeled \texttt{MINIO\_USB} and starts a Wi-Fi hotspot using NetworkManager.
\begin{lstlisting}[language=bash, caption={Postinstall Script for Mounting USB and Broadcasting Hotspot}]
#!/bin/bash
# === Mount USB Drive ===
USB_LABEL="MINIO_USB"
MOUNT_PATH="/mnt/usb2/minio-data"
DEVICE=$(lsblk -o LABEL,NAME | grep "$USB_LABEL" | awk '{print "/dev/" $2}')
if [ -z "$DEVICE" ]; then
echo "❌ USB with label $USB_LABEL not found."
exit 1
fi
echo "✅ Found USB device: $DEVICE"
sudo mkdir -p "$MOUNT_PATH"
sudo mount "$DEVICE" "$MOUNT_PATH"
sudo chown -R $USER:$USER "$MOUNT_PATH"
# === Setup Wi-Fi Hotspot ===
SSID="FarmerPortal"
PASSWORD="farmer123"
INTERFACE="wlan0"
echo "Starting Wi-Fi hotspot on $INTERFACE..."
nmcli device wifi hotspot ifname $INTERFACE ssid $SSID password $PASSWORD
echo "✅ Postinstall complete. Portal available at http://192.168.50.1:8080 or http://localhost:8080"
\end{lstlisting}
\subsection*{cloud-init.yaml}
This file automates the postinstall process on first boot. It installs required packages, mounts the USB device, and enables the Wi-Fi hotspot automatically.
\begin{lstlisting}[language=yaml, caption={Cloud-Init Configuration for Automated Setup}]
#cloud-config
package_update: true
package_upgrade: true
packages:
- network-manager
- dnsmasq
- wireless-tools
- net-tools
write_files:
- path: /usr/local/bin/postinstall.sh
permissions: '0755'
content: |
#!/bin/bash
USB_LABEL="MINIO_USB"
MOUNT_PATH="/mnt/usb2/minio-data"
DEVICE=$(lsblk -o LABEL,NAME | grep "$USB_LABEL" | awk '{print "/dev/" $2}')
if [ -n "$DEVICE" ]; then
mkdir -p "$MOUNT_PATH"
mount "$DEVICE" "$MOUNT_PATH"
chown -R ubuntu:ubuntu "$MOUNT_PATH"
fi
SSID="FarmerPortal"
PASSWORD="farmer123"
INTERFACE="wlan0"
nmcli dev wifi hotspot ifname $INTERFACE ssid $SSID password $PASSWORD
runcmd:
- [ bash, /usr/local/bin/postinstall.sh ]
\end{lstlisting}
This setup ensures that the system is accessible both over Ethernet and via a self-hosted Wi-Fi hotspot, and that persistent object storage is available to services like MinIO on the mounted USB drive.