secubox-openwrt/secubox-tools/setup-extroot.sh
2026-01-27 06:42:55 +01:00

177 lines
4.7 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# SecuBox Extroot Setup Script
# Configures overlay on mmcblk0p3 for expanded storage
# Run after fresh install or upgrade
ROUTER_IP="${1:-192.168.255.1}"
ROUTER_USER="${2:-root}"
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
info() { echo -e "${BLUE} $*${NC}"; }
success() { echo -e "${GREEN}$*${NC}"; }
warn() { echo -e "${YELLOW}⚠️ $*${NC}"; }
error() { echo -e "${RED}$*${NC}"; }
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " SecuBox Extroot Setup"
echo " Target: $ROUTER_USER@$ROUTER_IP"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
info "Connecting to router..."
ssh "$ROUTER_USER@$ROUTER_IP" '
#!/bin/sh
# Extroot setup script - runs on router
set -e
OVERLAY_DEV="/dev/mmcblk0p3"
OVERLAY_MOUNT="/mnt/extroot"
echo "=== Checking current setup ==="
echo "Root filesystem:"
df -h /
echo ""
# Check if overlay already mounted
if mount | grep -q "overlay on / "; then
echo "Overlay already active!"
df -h /overlay
exit 0
fi
# Check if partition exists
if [ ! -b "$OVERLAY_DEV" ]; then
echo "ERROR: Partition $OVERLAY_DEV not found"
exit 1
fi
# Get partition info
FSTYPE=$(blkid "$OVERLAY_DEV" -s TYPE -o value 2>/dev/null || echo "unknown")
echo "Partition: $OVERLAY_DEV"
echo "Filesystem: $FSTYPE"
echo ""
# Install required packages if not present
echo "=== Checking required packages ==="
opkg update 2>/dev/null || true
if [ "$FSTYPE" = "f2fs" ]; then
if ! opkg list-installed | grep -q "^kmod-fs-f2fs"; then
echo "Installing f2fs support..."
opkg install kmod-fs-f2fs f2fs-tools 2>/dev/null || true
fi
elif [ "$FSTYPE" = "ext4" ]; then
if ! opkg list-installed | grep -q "^kmod-fs-ext4"; then
echo "Installing ext4 support..."
opkg install kmod-fs-ext4 e2fsprogs 2>/dev/null || true
fi
fi
# Ensure block-mount is installed
if ! opkg list-installed | grep -q "^block-mount"; then
echo "Installing block-mount..."
opkg install block-mount 2>/dev/null || true
fi
echo ""
echo "=== Preparing overlay partition ==="
# Mount partition temporarily
mkdir -p "$OVERLAY_MOUNT"
mount -t "$FSTYPE" "$OVERLAY_DEV" "$OVERLAY_MOUNT" || {
echo "ERROR: Cannot mount $OVERLAY_DEV"
exit 1
}
# Create overlay directories
mkdir -p "$OVERLAY_MOUNT/upper"
mkdir -p "$OVERLAY_MOUNT/work"
# Copy existing overlay data if any
if [ -d /overlay/upper ]; then
echo "Copying existing overlay data..."
cp -a /overlay/upper/* "$OVERLAY_MOUNT/upper/" 2>/dev/null || true
fi
# Sync
sync
# Unmount
umount "$OVERLAY_MOUNT"
echo ""
echo "=== Configuring fstab ==="
# Get block info
eval $(block info "$OVERLAY_DEV" | grep -o "UUID=\S*")
echo "UUID: $UUID"
# Configure fstab using UCI
uci -q delete fstab.extroot 2>/dev/null || true
uci set fstab.extroot=mount
uci set fstab.extroot.target="/overlay"
uci set fstab.extroot.uuid="$UUID"
uci set fstab.extroot.enabled="1"
if [ "$FSTYPE" = "f2fs" ]; then
uci set fstab.extroot.fstype="f2fs"
uci set fstab.extroot.options="rw,noatime"
fi
uci commit fstab
echo ""
echo "=== Updated fstab ==="
cat /etc/config/fstab
echo ""
echo "=== Setup complete! ==="
echo ""
echo "IMPORTANT: Reboot to activate the overlay"
echo "After reboot, /overlay will be mounted on the 14GB partition"
echo ""
echo "Run: reboot"
'
if [ $? -eq 0 ]; then
success "Extroot configuration complete!"
echo ""
warn "REBOOT REQUIRED to activate overlay"
echo ""
read -p "Reboot router now? [y/N] " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
info "Rebooting router..."
ssh "$ROUTER_USER@$ROUTER_IP" "reboot" 2>/dev/null || true
echo ""
info "Waiting for router to come back online..."
sleep 60
# Wait for router to come back
for i in {1..30}; do
if ssh -o ConnectTimeout=5 "$ROUTER_USER@$ROUTER_IP" "echo ok" 2>/dev/null; then
success "Router is back online!"
echo ""
ssh "$ROUTER_USER@$ROUTER_IP" '
echo "=== Overlay status ==="
mount | grep overlay || echo "No overlay (yet)"
echo ""
echo "=== Disk usage ==="
df -h / /overlay 2>/dev/null
'
break
fi
echo "Waiting... ($i/30)"
sleep 5
done
fi
else
error "Setup failed"
fi