80 lines
2.5 KiB
Bash
80 lines
2.5 KiB
Bash
#!/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 |