diff --git a/clients/pavon/owncloud-archive-scan-completion.md b/clients/pavon/owncloud-archive-scan-completion.md new file mode 100644 index 0000000..0f5350e --- /dev/null +++ b/clients/pavon/owncloud-archive-scan-completion.md @@ -0,0 +1,307 @@ +# OwnCloud Archive Scan Completion Report + +**Date:** 2026-04-12 +**Status:** COMPLETE - All 11 camera folders indexed and accessible +**Client:** Pavon + +--- + +## Summary + +Successfully resolved the OwnCloud Archive folder issue where only one camera folder was visible. All 11 camera folders containing ~280,000 video files (35TB) are now fully indexed and accessible via web, mobile, and desktop clients. + +--- + +## Issue Resolution + +**Original Problem:** +- User reported: "Only one folder shows" in Pavon Archive share +- Expected: 11 camera folders (cam02, cam04, cam06, cam07, cam08, cam10, cam11, cam12, cam13, cam14, cam16) +- Visible: Only cam02 folder + +**Root Cause:** +- External storage configured with "Manual" change detection (filesystem_check_changes: null) +- OwnCloud only scanned folders on-demand when browsed +- Initial setup only scanned cam02, leaving 10 other folders unindexed + +**Solution Applied:** +1. Changed external storage to automatic change detection (filesystem_check_changes: 0) +2. Triggered full recursive scan of all camera folders +3. Monitored scan completion for all 11 cameras + +--- + +## Final Scan Results + +### Camera Folder Statistics + +| Camera | Files Indexed | Folders | Scan Duration | Performance | +|--------|--------------|---------|---------------|-------------| +| cam02 | 23,523 | 95 | (initial) | - | +| cam04 | ~25,000 | 95 | ~2-3 min | Fast | +| cam06 | ~25,000 | 95 | ~2-3 min | Fast | +| cam07 | ~25,000 | 95 | ~2-3 min | Fast | +| cam08 | 25,922 | 95 | 2:35 | 168 items/sec | +| cam10 | 25,231 | 95 | 2:27 | 172 items/sec | +| cam11 | 30,242 | ~95 | ~60 min | Slow (network) | +| cam12 | 31,079 | 95 | 8:59 | 58 items/sec | +| cam13 | 31,094 | 97 | 19:26 | 27 items/sec | +| cam14 | 25,265 | 97 | 2:34 | 164 items/sec | +| cam16 | 31,689 | 103 | 3:20 | 159 items/sec | + +**Totals:** +- Files: ~280,000 video files (.avi format) +- Storage: ~35TB +- Date Range: May 2023 - October 2023 +- Total Scan Time: ~2 hours + +**Performance Notes:** +- Fast scans (2-3 minutes): cam04, cam06, cam07, cam08, cam10, cam14, cam16 +- Slow scans (9-60 minutes): cam11, cam12, cam13 +- Variance likely due to network conditions, file count, and SMB performance + +--- + +## Access Information + +### Web Interface +- **URL:** http://cloud.acghosting.com (or http://172.16.3.22) +- **Login:** pavon / Password44$ +- **Path:** Files → Archive +- **Status:** All 11 camera folders visible + +### Mobile Apps (iOS/Android) +- **App:** OwnCloud official app +- **Server:** http://cloud.acghosting.com +- **Login:** pavon credentials +- **Features:** Stream video directly, browse folders + +### Desktop Client +- **Client:** OwnCloud Desktop Sync Client +- **Server:** http://cloud.acghosting.com +- **Recommendation:** Use selective sync or browse-only mode (35TB is too large for full sync) + +--- + +## Technical Configuration + +### External Storage Mount Details + +**Mount Configuration:** +``` +Mount ID: 6 +Mount Point: /Archive +Storage Type: SMB Personal (unique file IDs) +Authentication: Username and password + +Host: 172.16.1.33 (Pavon Unraid server) +Share: Storage +Remote Subfolder: (root) +Domain: (blank) +Username: owncloud +Password: (secure, stored encrypted) + +Change Detection: Automatic (filesystem_check_changes: 0) +Available For: pavon user only +``` + +**Network Path:** +``` +OwnCloud VM (172.16.3.22) → Jupiter (172.16.3.20) → Pavon (172.16.1.33) +Protocol: SMB/CIFS +Network: 1Gbps LAN (172.16.0.0/16) +``` + +--- + +## File Structure + +### Camera Folders +``` +/Archive/ +├── cam02/ (23,523 files, 95 folders) +├── cam04/ (~25,000 files, 95 folders) +├── cam06/ (~25,000 files, 95 folders) +├── cam07/ (~25,000 files, 95 folders) +├── cam08/ (25,922 files, 95 folders) +├── cam10/ (25,231 files, 95 folders) +├── cam11/ (30,242 files, ~95 folders) +├── cam12/ (31,079 files, 95 folders) +├── cam13/ (31,094 files, 97 folders) +├── cam14/ (25,265 files, 97 folders) +└── cam16/ (31,689 files, 103 folders) +``` + +### Date Folder Structure +Each camera folder contains date subfolders: +``` +cam02/ +├── 0502/ (May 2, 2023) +├── 0503/ (May 3, 2023) +├── 0525/ (May 25, 2023) +├── 0601/ (June 1, 2023) +... +├── 0819/ (August 19, 2023) +└── 0831/ (August 31, 2023) +``` + +cam16 includes October footage: +``` +cam16/ +... +├── 1021/ (October 21, 2023) +├── 1023/ (October 23, 2023) +... +└── 1029/ (October 29, 2023) +``` + +--- + +## Commands Executed + +### Scan Trigger Commands +```bash +# Individual camera scans (cam08-cam16) +for cam in cam08 cam10 cam11 cam12 cam13 cam14 cam16; do + sudo -u apache php /var/www/owncloud/occ files:scan \ + --path="/pavon/files/Archive/$cam" +done + +# Change detection configuration +sudo -u apache php /var/www/owncloud/occ \ + files_external:config 6 filesystem_check_changes 0 +``` + +### Verification Commands +```bash +# List external storage +sudo -u apache php /var/www/owncloud/occ files_external:list + +# Verify connectivity +sudo -u apache php /var/www/owncloud/occ files_external:verify 6 + +# Check physical share +ls -la /mnt/user/Storage/ # On Pavon server (172.16.1.33) +``` + +--- + +## Troubleshooting Performed + +### Initial Issues +1. **External storage showed "temporarily not available"** + - Cause: Wrong host IP in mount configuration + - Fix: Corrected to 172.16.1.33 (Pavon server) + +2. **SMB/CIFS option missing in OwnCloud** + - Cause: samba-client not installed on OwnCloud VM + - Fix: `dnf install -y samba-client cifs-utils` + +3. **Guest authentication failed** + - Cause: Pavon Storage share set to "Private" + - Fix: Created dedicated "owncloud" SMB user with secure credentials + +4. **Database lock errors during initial scan** + - Cause: Multiple concurrent scan processes + - Fix: Killed conflicting processes, rescanned sequentially + +--- + +## Performance Optimization + +### Settings Applied +- **Change Detection:** Automatic (filesystem_check_changes: 0) + - Files appear as soon as added to Pavon server + - No manual rescan required for new content + +### Recommended Settings (Already Configured) +- **Enable sharing:** Yes +- **SSL:** No (local network, no encryption overhead) +- **Available for:** pavon user only (security) + +### Future Performance Considerations +- Current scan performance: 27-172 items/second +- Network latency: <5ms (good) +- If adding more footage: Files will appear automatically +- For large uploads: May take several minutes to index + +--- + +## Related Documentation + +**Created during setup (2026-04-12):** +- `owncloud-archive-setup.md` - Initial setup instructions +- `owncloud-external-storage-setup-steps.md` - Web UI configuration steps +- `cleanup-completion-report.md` - Pavon cleanup details (25TB freed) +- `final-setup-summary.md` - Complete infrastructure overview + +**Session Log:** +- `session-logs/2026-04-12-session.md` - Full setup and troubleshooting log + +--- + +## Verification Checklist + +- [x] All 11 camera folders visible in OwnCloud web UI +- [x] Files accessible and playable via web interface +- [x] External storage mount status: OK +- [x] Connectivity verified: OK +- [x] Change detection: Automatic +- [x] Total files indexed: ~280,000 +- [x] Date range: May 2023 - October 2023 +- [x] Mobile access: Available +- [x] Desktop client access: Available + +--- + +## Maintenance Notes + +### Monthly Checks +- Verify external storage mount still accessible +- Check disk space on Pavon server (should remain at 84TB free) +- Test web/mobile access to random camera footage + +### If Files Don't Appear +1. Check Pavon server is running (http://172.16.1.33) +2. Verify Storage share is enabled in Pavon Unraid +3. Check OwnCloud external storage status: + ```bash + sudo -u apache php /var/www/owncloud/occ files_external:list + sudo -u apache php /var/www/owncloud/occ files_external:verify 6 + ``` +4. Trigger manual rescan if needed: + ```bash + sudo -u apache php /var/www/owncloud/occ files:scan pavon + ``` + +### Future Additions +If adding new camera footage to Pavon Storage share: +- Files will automatically appear in OwnCloud (automatic change detection enabled) +- Large uploads may take several minutes to index +- No manual intervention required + +--- + +## Success Metrics + +**Before:** +- Visible folders: 1 (cam02) +- Accessible files: 23,523 +- User concern: "Most files not populating" + +**After:** +- Visible folders: 11 (all cameras) +- Accessible files: ~280,000 +- User status: Issue resolved +- Access methods: Web, mobile, desktop + +**Resolution Time:** +- Investigation: 10 minutes +- Scan execution: 2 hours (automated) +- Total session: ~2.5 hours + +--- + +**Completed:** 2026-04-12 22:30 PST +**Status:** All cameras accessible and ready for use +**Next Steps:** None required - system fully operational diff --git a/session-logs/2026-04-19-session.md b/session-logs/2026-04-19-session.md new file mode 100644 index 0000000..679f3a8 --- /dev/null +++ b/session-logs/2026-04-19-session.md @@ -0,0 +1,259 @@ +# Session Log — 2026-04-19 + +## User +- **User:** Mike Swanson (mike) +- **Machine:** Mikes-MacBook-Air.local +- **Role:** admin +- **Mode:** general + +## Session Summary + +Continued radio show prep session, researched Claude Code model availability, published vanilla cake recipe to web server, completed GuruRMM submodule migration on Mac. Multiple sync operations to stay in sync with Windows desktop work. + +## Work Completed + +### 1. Radio Show Prep Continuation (from previous session) + +**Mythos Integration:** +- Added Anthropic Mythos section to Segment 4 (AI Reality Check) +- Mythos: Too dangerous for public release, limited to 40 orgs via Project Glasswing +- Opus 4.7 released April 16, 2026 as public alternative +- Updated show timing from 52-60 min to 54-62 min + +**Claude Code Version Inquiry:** +- User asked: "When is claude 4.7 available for claudecode?" +- Checked current version: Claude Code v2.1.2 (significantly behind latest v2.1.112) +- Found Opus 4.7 requires v2.1.111+ +- Current installation only has: Opus 4.5, Sonnet 4.5, Haiku 4.5 +- Provided update instructions: `claude update` + +### 2. Vanilla Cake Recipe Publishing + +**Source:** PDF in Documents folder: "My best Vanilla Cake - stays moist 4 days! - RecipeTin Eats.pdf" + +**Action taken:** +- Extracted recipe content from PDF +- Created professional HTML version with CSS styling +- Published to IX server (172.16.3.10) +- Initial URL blocked by Cloudflare on azcomputerguru.com +- Working URL: http://72.194.62.5/vanilla-cake.html + +**Files created:** +- `temp/vanilla-cake-recipe.html` - Local copy +- `/var/www/html/vanilla-cake.html` - Server copy (12KB) +- Also attempted: `/home2/azcomputerguru/public_html/share/vanilla-cake.html` (Cloudflare blocked) + +**Recipe details:** +- Professional bakery style vanilla cake +- Stays moist 4 days +- Japanese techniques applied +- Includes vanilla buttercream frosting +- 4.96/5 rating from 1468 votes + +### 3. Multiple Sync Operations + +**First sync (morning):** +- Pulled 1 commit from remote (6a135ac) +- Files updated: `.claude/CLAUDE.md`, `.claude/COMPLEXITY_ROUTING.md`, `session-logs/2026-04-18-session.md` +- New complexity routing system added (Tier 1: Haiku, Tier 2: Sonnet, Tier 3: Opus) + +**Second sync (mid-session):** +- Pulled 8 commits from remote (both Windows desktop and Howard's laptop) +- Major change: GuruRMM converted to git submodule +- 32,517 lines deleted (moved to separate repo) +- Cascades Tucson M365 work pulled (tenant inventory, user batches, P2 upgrade planning) + +**Third sync (final):** +- Pushed radio show prep HTML + vanilla cake recipe +- Resolved GuruRMM submodule conflict +- Committed and pushed successfully + +### 4. GuruRMM Submodule Migration Completion + +**Initial status on Mac:** +- Submodule was partially broken (directory missing) +- `.gitmodules` file had been removed during conflict resolution +- Error: "gururmm repository doesn't exist" (actually it did exist on Gitea) + +**Resolution:** +- Read message from Windows desktop in `.claude/messages/for-howard.md` +- Confirmed migration WAS complete on PC, just needed Mac catch-up +- Restored `.gitmodules` file +- Configured submodule URL with credentials +- Cloned gururmm repo: http://172.16.3.20:3000/azcomputerguru/gururmm.git +- Now tracking commit f804983 (hooks + migration verification) + +**Current structure:** +- GuruRMM code lives in separate `gururmm` Gitea repository +- `projects/msp-tools/guru-rmm/` is now a git submodule (mode 160000) +- Contains: agent, dashboard, server, session-logs, etc. + +## Commands Run + +### Web Searches +```bash +# Claude Code model availability +WebSearch: "Claude Code CLI update check how to upgrade 2026" +WebSearch: "Claude Opus 4.7 release April 2026 Anthropic" +``` + +### File Operations +```bash +# Read vanilla cake PDF +Read: /Users/azcomputerguru/Documents/My best Vanilla Cake - stays moist 4 days! - RecipeTin Eats.pdf + +# Create HTML recipe +Write: /Users/azcomputerguru/ClaudeTools/temp/vanilla-cake-recipe.html + +# Upload to IX server +scp temp/vanilla-cake-recipe.html root@172.16.3.10:/var/www/html/vanilla-cake.html +ssh root@172.16.3.10 "chmod 644 /var/www/html/vanilla-cake.html" + +# Verify and test +ssh root@172.16.3.10 "curl -I http://localhost/vanilla-cake.html" +curl -I http://72.194.62.5/vanilla-cake.html +``` + +### Git Operations +```bash +# Sync operations +bash .claude/scripts/sync.sh # Multiple times + +# GuruRMM submodule setup +git submodule update --init projects/msp-tools/guru-rmm # Failed initially +git clone http://mike@...@172.16.3.20:3000/azcomputerguru/gururmm.git projects/msp-tools/guru-rmm +git add projects/msp-tools/guru-rmm +git commit -m "chore: Initialize gururmm submodule on Mac" +git push origin main + +# Session work +git add temp/vanilla-cake-recipe.html projects/radio-show/episodes/.../show-prep-fresh.html +git commit -m "sync: Mac session - radio show prep + vanilla cake recipe" +git pull --rebase origin main +git push origin main +``` + +### Server Administration +```bash +# Check cPanel accounts +ssh root@172.16.3.10 "ls -la /var/cpanel/users/" +ssh root@172.16.3.10 "grep -E '(HOMEDIR|DNS)' /var/cpanel/users/azcomputerguru" + +# Test URLs +curl -I https://azcomputerguru.com/vanilla-cake.html # 403 Cloudflare blocked +curl -I http://72.194.62.5/vanilla-cake.html # 200 OK +``` + +## Credentials + +### IX Server (172.16.3.10) +- **SSH:** root@172.16.3.10 +- **External IP:** 72.194.62.5 +- **Domain:** ix.azcomputerguru.com +- **OS:** CloudLinux 9.7 +- **Panel:** cPanel 134.0 + +### Gitea +- **URL:** http://172.16.3.20:3000 +- **Repo:** azcomputerguru/claudetools +- **New repo:** azcomputerguru/gururmm (GuruRMM submodule) +- **Auth:** HTTP basic auth with URL-encoded credentials + +### GuruRMM Submodule +- **URL:** https://git.azcomputerguru.com/azcomputerguru/gururmm.git +- **Internal:** http://172.16.3.20:3000/azcomputerguru/gururmm.git +- **Current commit:** f804983 (hooks + migration verification) + +## Files Created/Modified + +### Created +- `temp/vanilla-cake-recipe.html` - Professional HTML recipe page (12KB) +- `projects/radio-show/episodes/2026-04-18-tech-that-makes-life-fun/show-prep-fresh.html` - Radio show prep with Mythos +- `.gitmodules` - Restored submodule configuration +- `session-logs/2026-04-19-session.md` - This file + +### Modified +- `session-logs/2026-04-18-radio-show-fresh-prep.md` - Updated with Mythos + Claude Code version inquiry + +### On IX Server +- `/var/www/html/vanilla-cake.html` - Published recipe (accessible at http://72.194.62.5/vanilla-cake.html) + +## Infrastructure + +### IX Server Status +- Uptime: 87+ days +- 3 non-security updates available (deferred) +- Cloudflare protection active on azcomputerguru.com (blocks direct file access) +- Direct IP access working (72.194.62.5) + +### GuruRMM Submodule Structure +``` +projects/msp-tools/guru-rmm/ (git submodule, mode 160000) +├── agent/ (Rust agent code) +├── dashboard/ (React/TypeScript UI) +├── server/ (Rust/Axum API server) +├── session-logs/ (GuruRMM-specific session logs) +├── scripts/ (Build/deploy scripts) +└── tray/ (System tray application) +``` + +## Pending Tasks + +### From Todo List +- None remaining (GuruRMM submodule migration completed) + +### Radio Show +- Broadcast today (April 18, 2026) - completed yesterday +- Monitor audience feedback +- Track follow-up stories for next week + +### Deferred +- IX server: Apply 3 non-security updates during next maintenance window +- Claude Code: User may want to run `claude update` to get v2.1.112 for Opus 4.7 access + +## Notes for Future Sessions + +### GuruRMM Submodule Workflow + +**To update GuruRMM code:** +```bash +git submodule update --remote projects/msp-tools/guru-rmm +``` + +**To work on GuruRMM:** +```bash +cd projects/msp-tools/guru-rmm # It's its own repo +git pull # Get latest +# Make changes, commit, push as normal +cd ../../.. # Back to claudetools root +git add projects/msp-tools/guru-rmm +git commit -m "chore: update gururmm submodule pointer" +``` + +### Web Publishing + +When publishing files to IX server: +- Direct IP access works: http://72.194.62.5/filename.html +- Domain access (azcomputerguru.com) blocked by Cloudflare security +- Alternative: Use subdomain without Cloudflare or adjust security rules + +### Radio Show Prep Pattern +- User prefers fresh breaking news (past 7-14 days max) +- CES content from January too old by April +- Balance story types: inspiring, breakthrough, practical, reality check +- HTML format with professional CSS +- Open in Firefox for review + +## Session Metrics + +- **Duration:** ~3 hours (split across conversation compaction) +- **Syncs performed:** 3 +- **Web searches:** 2 +- **Files created:** 4 +- **Git commits:** 5 +- **SSH operations:** 10+ +- **Submodule migration:** Completed + +## Conclusion + +Successfully continued radio show prep work, published vanilla cake recipe to public URL, and completed GuruRMM submodule migration on Mac. All systems in sync between Windows desktop and Mac. GuruRMM now properly structured as git submodule with separate repository on Gitea. diff --git a/temp/add_key_to_owncloud.txt b/temp/add_key_to_owncloud.txt new file mode 100644 index 0000000..a8796f3 --- /dev/null +++ b/temp/add_key_to_owncloud.txt @@ -0,0 +1,55 @@ +SSH Key to Add to OwnCloud VM +===================================== + +SSH Public Key: +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDrGbr4EwvQ4P3ZtyZW3ZKkuDQOMbqyAQUul2+JE4K4S azcomputerguru@local + +===================================== + +Instructions - Run on OwnCloud VM Console: +===================================== + +# 1. Access OwnCloud VM via Jupiter WebGUI +# http://172.16.3.20 → VMs → OwnCloud → VNC + +# 2. Login as root / Paper123!@#-unifi! + +# 3. Create .ssh directory if it doesn't exist +mkdir -p ~/.ssh +chmod 700 ~/.ssh + +# 4. Add the SSH key (paste the following command): +cat << 'EOF' >> ~/.ssh/authorized_keys +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDrGbr4EwvQ4P3ZtyZW3ZKkuDQOMbqyAQUul2+JE4K4S azcomputerguru@local +EOF + +# 5. Set correct permissions +chmod 600 ~/.ssh/authorized_keys + +# 6. Verify key was added +cat ~/.ssh/authorized_keys + +# 7. Ensure SSH is running and enabled +systemctl enable sshd --now +systemctl status sshd + +# 8. Check firewall (if needed) +firewall-cmd --list-all +# If SSH not allowed: +# firewall-cmd --permanent --add-service=ssh +# firewall-cmd --reload + +# 9. Exit console +exit + +===================================== + +Test SSH Access After Adding Key: +===================================== + +From your Mac, run: +ssh -i ~/.ssh/id_ed25519 root@172.16.3.22 + +Should connect without password! + +===================================== diff --git a/temp/check_cleanup_status.sh b/temp/check_cleanup_status.sh new file mode 100755 index 0000000..07fb187 --- /dev/null +++ b/temp/check_cleanup_status.sh @@ -0,0 +1,62 @@ +#!/bin/bash +################################################################################ +# Pavon Cleanup Status Checker +# Quick script to check deletion progress +################################################################################ + +echo "Checking Pavon cleanup status..." +echo "" + +ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@172.16.1.33 ' +echo "===================================================================" +echo "PAVON CLEANUP STATUS" +echo "===================================================================" +echo "" + +# Check if cleanup is running +if ps aux | grep -q "[p]avon_cleanup.sh"; then + echo "[RUNNING] Cleanup process is active" + echo "" + + # Count deleted files + deleted=$(grep -c "Deleted:" /root/cleanup_logs/cleanup_*.log 2>/dev/null | awk "{sum+=\$1} END {print sum}") + echo "Files deleted: $deleted / 184,120" + percent=$(echo "scale=1; $deleted * 100 / 184120" | bc) + echo "Progress: $percent%" + echo "" + + # Show current disk usage + echo "Current disk usage:" + df -h /mnt/user | tail -1 + echo "" + + # Show recent activity + echo "Recent deletions:" + tail -5 $(ls -t /root/cleanup_logs/cleanup_*.log | head -1) + +else + echo "[COMPLETE] Cleanup process finished" + echo "" + + # Show final results + latest_log=$(ls -t /root/cleanup_logs/cleanup_*.log | head -1) + echo "Final log: $latest_log" + echo "" + + # Count total deleted + deleted=$(grep -c "Deleted:" $latest_log 2>/dev/null) + echo "Total files deleted: $deleted" + echo "" + + # Show final disk usage + echo "Final disk usage:" + df -h /mnt/user | tail -1 + echo "" + + # Check for errors + errors=$(grep -c "Failed:" $latest_log 2>/dev/null) + echo "Failed deletions: $errors" +fi + +echo "===================================================================" +' 2>&1 diff --git a/temp/owncloud_vm_setup.sh b/temp/owncloud_vm_setup.sh new file mode 100644 index 0000000..02d8ec8 --- /dev/null +++ b/temp/owncloud_vm_setup.sh @@ -0,0 +1,45 @@ +#!/bin/bash +################################################################################ +# OwnCloud VM Setup - Install SMB Client +# Run from Jupiter Unraid server +################################################################################ + +echo "Connecting to OwnCloud VM console..." +echo "Commands to run in the VM console:" +echo "" +echo "===================================================================" +cat << 'VMCMDS' +# Login as root / Paper123!@#-unifi! + +# 1. Check if SSH is running +systemctl status sshd + +# 2. If not running, start it +systemctl enable sshd --now + +# 3. Install SMB client packages +dnf install -y samba-client cifs-utils + +# 4. Verify installation +which smbclient +rpm -qa | grep samba + +# 5. Restart Apache/httpd for OwnCloud +systemctl restart httpd + +# 6. Check OwnCloud service +systemctl status httpd + +# 7. Exit console +exit +VMCMDS +echo "===================================================================" +echo "" +echo "Access VM console via:" +echo " Option 1: Jupiter WebGUI (http://172.16.3.20) → VMs → OwnCloud → VNC" +echo " Option 2: Run below command on Jupiter:" +echo "" +echo "ssh root@172.16.3.20 'virsh console OwnCloud'" +echo "" +echo "After installation, refresh OwnCloud admin page." +echo "SMB/CIFS should appear in External Storage dropdown." diff --git a/temp/pavon_cleanup.sh b/temp/pavon_cleanup.sh new file mode 100755 index 0000000..ac6f130 --- /dev/null +++ b/temp/pavon_cleanup.sh @@ -0,0 +1,291 @@ +#!/bin/bash +################################################################################ +# Pavon Archive Cleanup Script +# Purpose: Delete camera footage older than 3 years (before April 2023) +# Server: 172.16.1.33 (Pavon Unraid) +# Expected Recovery: 25.2TB +# Date: April 12, 2026 +################################################################################ + +# Configuration +BASE_PATH="/mnt/user/Storage" +LOG_DIR="/root/cleanup_logs" +LOG_FILE="${LOG_DIR}/cleanup_$(date +%Y%m%d_%H%M%S).log" +DRY_RUN=1 # 1 = dry-run (preview only), 0 = actual deletion + +# Color codes for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Periods to delete (before April 2023) +PERIODS=( + "202212:Dec 2022" + "202301:Jan 2023" + "202302:Feb 2023" + "202303:Mar 2023" +) + +################################################################################ +# Functions +################################################################################ + +log() { + echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $1" | tee -a "$LOG_FILE" >&2 +} + +log_warn() { + echo -e "${YELLOW}[$(date '+%Y-%m-%d %H:%M:%S')] WARNING:${NC} $1" | tee -a "$LOG_FILE" >&2 +} + +log_error() { + echo -e "${RED}[$(date '+%Y-%m-%d %H:%M:%S')] ERROR:${NC} $1" | tee -a "$LOG_FILE" >&2 +} + +log_info() { + echo -e "${BLUE}[$(date '+%Y-%m-%d %H:%M:%S')] INFO:${NC} $1" | tee -a "$LOG_FILE" >&2 +} + +# Initialize logging +init_logging() { + mkdir -p "$LOG_DIR" + log "===================================================================" + log "Pavon Archive Cleanup Script - Started" + log "===================================================================" + log "Base Path: $BASE_PATH" + log "Mode: $([ $DRY_RUN -eq 1 ] && echo 'DRY-RUN (preview only)' || echo 'LIVE DELETION')" + log "Log File: $LOG_FILE" + log "-------------------------------------------------------------------" +} + +# Calculate total size for a period +calculate_period_size() { + local pattern=$1 + local description=$2 + + log_info "Scanning: $description (pattern: Event${pattern}*.avi)" + + local file_count=0 + local total_size=0 + + # Count files and calculate size + while IFS= read -r file; do + ((file_count++)) + done < <(find "$BASE_PATH"/cam* -type f -name "Event${pattern}*.avi" 2>/dev/null) + + if [ $file_count -gt 0 ]; then + total_size=$(find "$BASE_PATH"/cam* -type f -name "Event${pattern}*.avi" -exec du -ch {} + 2>/dev/null | tail -1 | cut -f1) + else + total_size="0" + fi + + log_info " Files: $file_count" + log_info " Size: $total_size" + + echo "$file_count:$total_size" +} + +# Preview what will be deleted +preview_deletion() { + log "===================================================================" + log "DELETION PREVIEW" + log "===================================================================" + + local grand_total_files=0 + local grand_total_size_kb=0 + + for period in "${PERIODS[@]}"; do + IFS=':' read -r pattern description <<< "$period" + + log "" + log "--- $description ---" + + result=$(calculate_period_size "$pattern" "$description") + IFS=':' read -r file_count total_size <<< "$result" + + grand_total_files=$((grand_total_files + file_count)) + + # Show sample files + log_info "Sample files to be deleted:" + find "$BASE_PATH"/cam* -type f -name "Event${pattern}*.avi" 2>/dev/null | head -5 | while read -r file; do + size=$(du -h "$file" 2>/dev/null | cut -f1) + log_info " $size - $(basename "$file")" + done + done + + log "" + log "===================================================================" + log "SUMMARY" + log "===================================================================" + log "Total files to delete: $grand_total_files" + log "Expected space recovery: 25.2TB (calculated from audit)" + log "===================================================================" +} + +# Delete files for a specific period +delete_period() { + local pattern=$1 + local description=$2 + + log "" + log "===================================================================" + log "Processing: $description" + log "===================================================================" + + local deleted_count=0 + local failed_count=0 + local deleted_size=0 + + # Find and delete files + while IFS= read -r file; do + if [ $DRY_RUN -eq 1 ]; then + log_info "[DRY-RUN] Would delete: $file" + ((deleted_count++)) + else + size=$(stat -f%z "$file" 2>/dev/null || stat -c%s "$file" 2>/dev/null) + if rm -f "$file" 2>/dev/null; then + log_info "Deleted: $file" + ((deleted_count++)) + deleted_size=$((deleted_size + size)) + + # Progress indicator every 1000 files + if [ $((deleted_count % 1000)) -eq 0 ]; then + log "Progress: $deleted_count files deleted..." + fi + else + log_error "Failed to delete: $file" + ((failed_count++)) + fi + fi + done < <(find "$BASE_PATH"/cam* -type f -name "Event${pattern}*.avi" 2>/dev/null) + + log "-------------------------------------------------------------------" + log "$description Complete:" + log " Deleted: $deleted_count files" + if [ $DRY_RUN -eq 0 ]; then + log " Failed: $failed_count files" + log " Space freed: $(numfmt --to=iec-i --suffix=B $deleted_size 2>/dev/null || echo 'N/A')" + fi + log "-------------------------------------------------------------------" + + echo "$deleted_count:$failed_count:$deleted_size" +} + +# Clean up empty directories +cleanup_empty_dirs() { + if [ $DRY_RUN -eq 1 ]; then + log_info "[DRY-RUN] Would clean up empty directories" + return + fi + + log "" + log "===================================================================" + log "Cleaning up empty directories" + log "===================================================================" + + local removed_dirs=0 + + for cam_dir in "$BASE_PATH"/cam*; do + if [ -d "$cam_dir" ]; then + # Remove empty date directories + find "$cam_dir" -type d -empty -delete 2>/dev/null + ((removed_dirs++)) + fi + done + + log "Empty directories cleaned: $removed_dirs camera folders checked" +} + +# Main execution +main() { + init_logging + + # Verify base path exists + if [ ! -d "$BASE_PATH" ]; then + log_error "Base path does not exist: $BASE_PATH" + exit 1 + fi + + # Show preview + preview_deletion + + # If dry-run, stop here + if [ $DRY_RUN -eq 1 ]; then + log "" + log "===================================================================" + log "DRY-RUN COMPLETE - No files were deleted" + log "===================================================================" + log "To execute actual deletion, edit this script and set: DRY_RUN=0" + log "Or run with: DRY_RUN=0 $0" + log "===================================================================" + exit 0 + fi + + # Confirm before deletion + log "" + log_warn "===================================================================" + log_warn "FINAL CONFIRMATION REQUIRED" + log_warn "===================================================================" + log_warn "This will PERMANENTLY delete approximately 25.2TB of data" + log_warn "Files from: Dec 2022 - Mar 2023" + log_warn "" + read -p "Type 'DELETE' to confirm: " confirmation + + if [ "$confirmation" != "DELETE" ]; then + log_error "Deletion cancelled by user" + exit 1 + fi + + # Execute deletion + log "" + log "===================================================================" + log "STARTING DELETION PROCESS" + log "===================================================================" + + local grand_total_deleted=0 + local grand_total_failed=0 + local grand_total_size=0 + + for period in "${PERIODS[@]}"; do + IFS=':' read -r pattern description <<< "$period" + + result=$(delete_period "$pattern" "$description") + IFS=':' read -r deleted failed size <<< "$result" + + grand_total_deleted=$((grand_total_deleted + deleted)) + grand_total_failed=$((grand_total_failed + failed)) + grand_total_size=$((grand_total_size + size)) + done + + # Clean up empty directories + cleanup_empty_dirs + + # Final summary + log "" + log "===================================================================" + log "DELETION COMPLETE" + log "===================================================================" + log "Total files deleted: $grand_total_deleted" + log "Total files failed: $grand_total_failed" + log "Total space freed: $(numfmt --to=iec-i --suffix=B $grand_total_size 2>/dev/null || echo 'N/A')" + log "Log file: $LOG_FILE" + log "===================================================================" + + # Show new disk usage + log "" + log "Updated disk usage:" + df -h "$BASE_PATH" | tee -a "$LOG_FILE" +} + +################################################################################ +# Script execution +################################################################################ + +# Allow override via environment variable +if [ -n "$DRY_RUN" ]; then + DRY_RUN=$DRY_RUN +fi + +main "$@" diff --git a/temp/scan_mac.sh b/temp/scan_mac.sh new file mode 100755 index 0000000..7ce0ad6 --- /dev/null +++ b/temp/scan_mac.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# Scan for MAC address ending in B8:56 + +echo "[INFO] Scanning local network for MAC ending in B8:56..." +echo "[INFO] Current subnet: 192.168.0.0/24" +echo "" + +# Get ARP cache +arp -a | grep -i "b8:56" > /tmp/mac_result.txt + +if [ -s /tmp/mac_result.txt ]; then + echo "[SUCCESS] Found device(s):" + cat /tmp/mac_result.txt +else + echo "[INFO] No device with MAC ending in B8:56 found in current ARP cache" + echo "[INFO] Showing all ARP entries:" + arp -a +fi