Improve RPi image scripts
- flash-image.sh: Add optional device argument to bypass auto-detection - flash-image.sh/pull-image.sh: Remove bc dependency, use bash integer math - sanitize-for-image.sh: Add better debugging and verification for wizard setup 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -3,8 +3,10 @@
|
||||
# Flash Stegasoo image to SD card
|
||||
# Auto-detects SD card, decompresses and writes with progress
|
||||
#
|
||||
# Usage: ./flash-image.sh <image.img.xz>
|
||||
# ./flash-image.sh <image.img>
|
||||
# Usage: ./flash-image.sh <image.img.xz> [device]
|
||||
# ./flash-image.sh <image.img> [device]
|
||||
#
|
||||
# If device is specified, skips auto-detection (useful for large drives)
|
||||
#
|
||||
|
||||
set -e
|
||||
@@ -32,15 +34,16 @@ fi
|
||||
|
||||
# Check for image argument
|
||||
if [ -z "$1" ]; then
|
||||
echo -e "${RED}Usage: $0 <image.img.xz|image.img>${NC}"
|
||||
echo -e "${RED}Usage: $0 <image.img.xz|image.img> [device]${NC}"
|
||||
echo ""
|
||||
echo "Examples:"
|
||||
echo " $0 stegasoo-rpi-20260103.img.xz"
|
||||
echo " $0 stegasoo-rpi-20260103.img"
|
||||
echo " $0 stegasoo-rpi-20260103.img.xz # auto-detect SD card"
|
||||
echo " $0 stegasoo-rpi-20260103.img.xz /dev/sdb # specify device"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
IMAGE="$1"
|
||||
MANUAL_DEVICE="$2"
|
||||
|
||||
if [ ! -f "$IMAGE" ]; then
|
||||
echo -e "${RED}Error: Image file not found: $IMAGE${NC}"
|
||||
@@ -86,6 +89,19 @@ if [ "$COMPRESSED" = true ]; then
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Use manual device or auto-detect
|
||||
if [ -n "$MANUAL_DEVICE" ]; then
|
||||
# Manual device specified
|
||||
if [ ! -b "$MANUAL_DEVICE" ]; then
|
||||
echo -e "${RED}Error: $MANUAL_DEVICE is not a block device${NC}"
|
||||
exit 1
|
||||
fi
|
||||
SELECTED="$MANUAL_DEVICE"
|
||||
echo -e "Using specified device: ${YELLOW}$SELECTED${NC}"
|
||||
echo ""
|
||||
lsblk "$SELECTED" -o NAME,SIZE,TYPE,MODEL
|
||||
echo ""
|
||||
else
|
||||
# Auto-detect SD card candidates
|
||||
echo -e "${BOLD}Scanning for SD cards...${NC}"
|
||||
echo ""
|
||||
@@ -111,19 +127,12 @@ while IFS= read -r line; do
|
||||
continue
|
||||
fi
|
||||
|
||||
# Parse size to bytes for comparison
|
||||
SIZE_NUM=$(echo "$SIZE" | sed 's/[^0-9.]//g')
|
||||
SIZE_UNIT=$(echo "$SIZE" | sed 's/[0-9.]//g')
|
||||
|
||||
case $SIZE_UNIT in
|
||||
G) SIZE_GB=$SIZE_NUM ;;
|
||||
T) SIZE_GB=$(echo "$SIZE_NUM * 1024" | bc) ;;
|
||||
M) SIZE_GB=$(echo "scale=2; $SIZE_NUM / 1024" | bc) ;;
|
||||
*) SIZE_GB=0 ;;
|
||||
esac
|
||||
# Get size in bytes for reliable comparison
|
||||
SIZE_BYTES=$(lsblk -b -d -o SIZE -n "/dev/$DEV" 2>/dev/null | tr -d ' ')
|
||||
SIZE_GB_INT=$((SIZE_BYTES / 1073741824)) # 1024^3
|
||||
|
||||
# Check if size is in SD card range (8GB - 128GB)
|
||||
if (( $(echo "$SIZE_GB >= 8" | bc -l) )) && (( $(echo "$SIZE_GB <= 128" | bc -l) )); then
|
||||
if [ "$SIZE_GB_INT" -ge 8 ] && [ "$SIZE_GB_INT" -le 128 ]; then
|
||||
CANDIDATES+=("/dev/$DEV")
|
||||
CANDIDATE_INFO+=("$SIZE $TYPE ${TRAN:-???} $MODEL")
|
||||
fi
|
||||
@@ -135,6 +144,8 @@ if [ ${#CANDIDATES[@]} -eq 0 ]; then
|
||||
echo ""
|
||||
echo "Available disks:"
|
||||
lsblk -d -o NAME,SIZE,TYPE,TRAN,MODEL
|
||||
echo ""
|
||||
echo -e "${YELLOW}Tip: Specify device manually: $0 $IMAGE /dev/sdX${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -158,6 +169,7 @@ else
|
||||
fi
|
||||
SELECTED="${CANDIDATES[$((REPLY-1))]}"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Show current partitions
|
||||
echo ""
|
||||
|
||||
@@ -76,19 +76,12 @@ while IFS= read -r line; do
|
||||
continue
|
||||
fi
|
||||
|
||||
# Parse size to bytes for comparison
|
||||
SIZE_NUM=$(echo "$SIZE" | sed 's/[^0-9.]//g')
|
||||
SIZE_UNIT=$(echo "$SIZE" | sed 's/[0-9.]//g')
|
||||
|
||||
case $SIZE_UNIT in
|
||||
G) SIZE_GB=$SIZE_NUM ;;
|
||||
T) SIZE_GB=$(echo "$SIZE_NUM * 1024" | bc) ;;
|
||||
M) SIZE_GB=$(echo "scale=2; $SIZE_NUM / 1024" | bc) ;;
|
||||
*) SIZE_GB=0 ;;
|
||||
esac
|
||||
# Get size in bytes for reliable comparison
|
||||
SIZE_BYTES=$(lsblk -b -d -o SIZE -n "/dev/$DEV" 2>/dev/null | tr -d ' ')
|
||||
SIZE_GB_INT=$((SIZE_BYTES / 1073741824)) # 1024^3
|
||||
|
||||
# Check if size is in SD card range (8GB - 128GB)
|
||||
if (( $(echo "$SIZE_GB >= 8" | bc -l) )) && (( $(echo "$SIZE_GB <= 128" | bc -l) )); then
|
||||
if [ "$SIZE_GB_INT" -ge 8 ] && [ "$SIZE_GB_INT" -le 128 ]; then
|
||||
CANDIDATES+=("/dev/$DEV")
|
||||
CANDIDATE_INFO+=("$SIZE $TYPE ${TRAN:-???} $MODEL")
|
||||
fi
|
||||
|
||||
@@ -90,7 +90,22 @@ echo " Stegasoo instance data cleared"
|
||||
echo -e "${GREEN}[5/9]${NC} Setting up first-boot wizard..."
|
||||
# Find stegasoo install directory
|
||||
STEGASOO_DIR=$(ls -d /home/*/stegasoo 2>/dev/null | head -1)
|
||||
echo " Looking for stegasoo in: $STEGASOO_DIR"
|
||||
|
||||
if [ -z "$STEGASOO_DIR" ]; then
|
||||
echo -e " ${RED}ERROR: Could not find stegasoo directory in /home/*/stegasoo${NC}"
|
||||
echo " Checking common locations..."
|
||||
for dir in /home/*/stegasoo /root/stegasoo /opt/stegasoo; do
|
||||
if [ -d "$dir" ]; then
|
||||
STEGASOO_DIR="$dir"
|
||||
echo " Found at: $STEGASOO_DIR"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
STEGASOO_USER=$(stat -c '%U' "$STEGASOO_DIR" 2>/dev/null || echo "pi")
|
||||
echo " Stegasoo user: $STEGASOO_USER"
|
||||
|
||||
if [ -n "$STEGASOO_DIR" ] && [ -f "$STEGASOO_DIR/rpi/stegasoo-wizard.sh" ]; then
|
||||
# Install the profile.d hook
|
||||
@@ -126,8 +141,21 @@ WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl daemon-reload
|
||||
echo " Reset service to defaults"
|
||||
|
||||
# Verify files were created
|
||||
if [ -f /etc/stegasoo-first-boot ] && [ -f /etc/profile.d/stegasoo-wizard.sh ]; then
|
||||
echo -e " ${GREEN}✓ Wizard setup verified${NC}"
|
||||
else
|
||||
echo " ${YELLOW}Warning: Stegasoo not found, skipping wizard setup${NC}"
|
||||
echo -e " ${RED}✗ Wizard files missing after setup!${NC}"
|
||||
fi
|
||||
else
|
||||
echo -e " ${RED}ERROR: Could not set up wizard${NC}"
|
||||
echo " STEGASOO_DIR: $STEGASOO_DIR"
|
||||
echo " Wizard script exists: $([ -f "$STEGASOO_DIR/rpi/stegasoo-wizard.sh" ] && echo 'yes' || echo 'NO')"
|
||||
echo ""
|
||||
echo " You may need to manually run:"
|
||||
echo " sudo touch /etc/stegasoo-first-boot"
|
||||
echo " sudo cp $STEGASOO_DIR/rpi/stegasoo-wizard.sh /etc/profile.d/"
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}[6/9]${NC} Clearing logs..."
|
||||
|
||||
Reference in New Issue
Block a user