build:hermes-runtime — Portable Hermes Agent package for USB
Build scripts, configuration, and launch scripts for the Hermes Portable Rescue runtime. Includes: - build-hermes-runtime.sh — Main build script (venv, config, tools) - bootstrap-venv.sh — Standalone Python venv builder - config.yaml — Agent configuration for rescue mode - launch.sh/launch.ps1 — Linux and Windows entry points - agent/hermes — Entry point for autorun.sh compatibility - tool-manifest.json — Tool registry for diagnostic binaries - scripts/ — check-env.sh, mount-storage.sh helpers - autorun.inf — Windows USB auto-launch - README — Build and runtime documentation Part of the Hermes Portable Rescue project board. Task: t_c816e37d
This commit is contained in:
Executable
+85
@@ -0,0 +1,85 @@
|
||||
#!/usr/bin/env bash
|
||||
# =============================================================================
|
||||
# Hermes Portable Rescue — Storage Mount Helper
|
||||
# =============================================================================
|
||||
# Mounts NTFS/BTRFS/ext4 partitions for diagnostic access.
|
||||
# Usage: ./scripts/mount-storage.sh [--all | --probe]
|
||||
# =============================================================================
|
||||
set -euo pipefail
|
||||
|
||||
MOUNT_BASE="/mnt/hermes-data"
|
||||
PROBE_ONLY=false
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--probe) PROBE_ONLY=true; shift ;;
|
||||
--all) PROBE_ONLY=false; shift ;;
|
||||
*) echo "Usage: $0 [--all | --probe]"; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
mkdir -p "$MOUNT_BASE"
|
||||
|
||||
echo "[hermes:mount] Probing storage devices…"
|
||||
|
||||
# List all block devices
|
||||
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT,LABEL 2>/dev/null | grep -v loop | head -20
|
||||
|
||||
if [[ "$PROBE_ONLY" = true ]]; then
|
||||
echo ""
|
||||
echo "[hermes:mount] Probe complete — use --all to mount"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Mount all unmounted NTFS, ext4, btrfs partitions (excluding live system)
|
||||
echo ""
|
||||
echo "[hermes:mount] Mounting accessible partitions…"
|
||||
echo ""
|
||||
|
||||
MOUNT_COUNT=0
|
||||
while IFS= read -r line; do
|
||||
DEVICE=$(echo "$line" | awk '{print $1}')
|
||||
FSTYPE=$(echo "$line" | awk '{print $2}')
|
||||
MOUNTPOINT=$(echo "$line" | awk '{print $3}')
|
||||
LABEL=$(echo "$line" | awk '{print $4}')
|
||||
|
||||
# Skip: already mounted, swap, live system root
|
||||
if [[ "$MOUNTPOINT" != "(not mounted)" ]]; then continue; fi
|
||||
if [[ "$FSTYPE" = "swap" ]]; then continue; fi
|
||||
if [[ "$DEVICE" =~ (sr|loop|ram) ]]; then continue; fi
|
||||
|
||||
MOUNT_PATH="$MOUNT_BASE/$DEVICE"
|
||||
mkdir -p "$MOUNT_PATH"
|
||||
|
||||
case "$FSTYPE" in
|
||||
ntfs)
|
||||
if command -v ntfs-3g &>/dev/null; then
|
||||
ntfs-3g -o ro,noatime "/dev/$DEVICE" "$MOUNT_PATH" 2>/dev/null && \
|
||||
echo " [✓] /dev/$DEVICE (NTFS${LABEL:+: $LABEL}) → $MOUNT_PATH" && \
|
||||
((MOUNT_COUNT++)) || \
|
||||
echo " [✗] /dev/$DEVICE mount failed"
|
||||
else
|
||||
echo " [ ] /dev/$DEVICE (NTFS — ntfs-3g not available)"
|
||||
fi
|
||||
;;
|
||||
ext4|ext3|ext2|xfs|btrfs)
|
||||
mount -o ro,noatime "/dev/$DEVICE" "$MOUNT_PATH" 2>/dev/null && \
|
||||
echo " [✓] /dev/$DEVICE (${FSTYPE}${LABEL:+: $LABEL}) → $MOUNT_PATH" && \
|
||||
((MOUNT_COUNT++)) || \
|
||||
echo " [✗] /dev/$DEVICE mount failed"
|
||||
;;
|
||||
vfat|exfat)
|
||||
mount -o ro,noatime,uid=1000 "/dev/$DEVICE" "$MOUNT_PATH" 2>/dev/null && \
|
||||
echo " [✓] /dev/$DEVICE (${FSTYPE}${LABEL:+: $LABEL}) → $MOUNT_PATH" && \
|
||||
((MOUNT_COUNT++)) || \
|
||||
echo " [✗] /dev/$DEVICE mount failed"
|
||||
;;
|
||||
*)
|
||||
echo " [ ] /dev/$DEVICE ($FSTYPE — unsupported)"
|
||||
;;
|
||||
esac
|
||||
done < <(lsblk -nlo NAME,FSTYPE,MOUNTPOINT,LABEL 2>/dev/null)
|
||||
|
||||
echo ""
|
||||
echo "[hermes:mount] $MOUNT_COUNT partitions mounted under $MOUNT_BASE"
|
||||
echo "[hermes:mount] Use 'umount $MOUNT_BASE/*' when done"
|
||||
Reference in New Issue
Block a user