|
\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.
|