diff --git a/usr/bin/overlayfs.sh b/usr/bin/overlayfs.sh new file mode 100644 index 0000000..dd26703 --- /dev/null +++ b/usr/bin/overlayfs.sh @@ -0,0 +1,80 @@ +#!/bin/sh +# Raspberry Pi OverlayFS Initialization Script with NFS Logging +# Version: 1.2 + +set -e + +echo "Starting OverlayFS and NFS logging setup..." + +# Mount root filesystem as read-only +mount -o remount,ro / + +# Start the DHCP client to get the hostname +dhclient eth0 -1 # Wait for DHCP to complete + +# Get the hostname from DHCP +DHCP_HOSTNAME=$(cat /var/lib/dhcp/dhclient.* | grep "option host-name" | awk '{print $3}' | tr -d '";') +if [ -n "$DHCP_HOSTNAME" ]; then + echo "Setting hostname to $DHCP_HOSTNAME" + hostnamectl set-hostname "$DHCP_HOSTNAME" +else + echo "No DHCP hostname found, using default hostname." + DHCP_HOSTNAME="default" +fi + +# Set up OverlayFS for /tmp +OVERLAY_BASE=/overlay +mkdir -p ${OVERLAY_BASE}/{tmp_upper,tmp_work,varlog_work} + +# Mount /tmp as an overlay filesystem +mkdir -p /tmp +mount -t overlay overlay \ + -o lowerdir=/tmp,upperdir=${OVERLAY_BASE}/tmp_upper,workdir=${OVERLAY_BASE}/tmp_work \ + /tmp + +# Mount /var/log via NFS +NFS_SERVER="192.168.12.239" +NFS_PATH="/clients/$DHCP_HOSTNAME" +LOCAL_MOUNT_POINT="/var/log" + +echo "Creating local mount point: $LOCAL_MOUNT_POINT" +mkdir -p $LOCAL_MOUNT_POINT + +# Ensure NFS utilities are available +if ! command -v mount.nfs > /dev/null; then + echo "NFS utilities not found! Installing nfs-common..." + sudo apt-get update + sudo apt-get install -y nfs-common +fi + +echo "Mounting NFS: $NFS_SERVER:$NFS_PATH to $LOCAL_MOUNT_POINT" +mount -t nfs "$NFS_SERVER:$NFS_PATH" $LOCAL_MOUNT_POINT || { + echo "NFS mount failed, using OverlayFS for /var/log." + # If NFS fails, use OverlayFS for /var/log + mkdir -p ${OVERLAY_BASE}/varlog_upper + mount -t overlay overlay \ + -o lowerdir=/var/log,upperdir=${OVERLAY_BASE}/varlog_upper,workdir=${OVERLAY_BASE}/varlog_work \ + /var/log +} + +# Mount Chromium user data directory as an overlay +mkdir -p /home/loginuser/.config/chromium +mount -t overlay overlay \ + -o lowerdir=/home/loginuser/.config/chromium,upperdir=${OVERLAY_BASE}/chromium_upper,workdir=${OVERLAY_BASE}/chromium_work \ + /home/loginuser/.config/chromium + +# Fix permissions for loginuser +chown -R loginuser:loginuser /home/loginuser/.config/chromium +chmod 700 /home/loginuser/.config/chromium + +# Ensure that /var/log and /tmp are set up for the next boot +echo "Adding NFS /var/log mount to /etc/fstab" +if ! grep -q "$NFS_SERVER:$NFS_PATH" /etc/fstab; then + echo "$NFS_SERVER:$NFS_PATH $LOCAL_MOUNT_POINT nfs defaults 0 0" | sudo tee -a /etc/fstab +fi + +echo "OverlayFS and NFS logging setup completed successfully." +echo "Starting system..." + +# Continue with the regular boot process +exec /sbin/init \ No newline at end of file