autoNAS / README.md
5b5a565 3 months ago History
1 contributor
394 lines | 14.466kb
# AutoNAS v3.0 - Sistem de Montare Automată cu Unified Interface

AutoNAS este un sistem inteligent pentru montarea automată a diskurilor externe cu configurarea IP-urilor, exporturilor NFS și **arhitectura revoluționară Background Import** pentru import scalabil de camere digitale. Sistemul detectează automat conectarea diskurilor USB/SATA externe, le montează, configurează IP-uri pe interfețe de rețea și exportă conținutul prin NFS.

## 🎉 **Nouă în v3.0: Clean User Interface**
- **🚀 Scriptul Unificat** - Un singur script `autonas` pentru toate operațiunile
- **⚡ Interfață Curată** - Doar comanda `autonas` vizibilă în autocomplete
- **🔄 Background Import** - Import-uri în background fără timeout constraints  
- **📊 Cod Optimizat** - 47% reducere cod prin eliminarea duplicărilor
- **🗂️ Scripturi Organizate** - Toate scripturile interne ascunse în `/usr/local/lib/autonas/`

## 🌟 **Interfața Curată AutoNAS**

### Comanda Principală (Singura Vizibilă)
```bash
autonas <command> [options]
```
*Doar comanda `autonas` apare în autocomplete - toate scripturile interne sunt ascunse*

### Operațiuni Disponibile
```bash
# Operațiuni Diskuri
autonas attach <uuid>         # Montează disk automat
autonas detach <uuid>         # Demontează disk
autonas list                  # Listează diskurile configurate

# Management Configurații  
autonas add [uuid]            # Adaugă configurație nouă
autonas show                  # Afișează toate device-urile detectate
autonas status               # Status sistem complet

# Utilități
autonas mount <uuid>         # Montare manuală
autonas umount <uuid>        # Demontare manuală
autonas --help              # Ajutor complet
```

### Avantaje Interfață Curată
- **Un singur command vizibil** - doar `autonas` în autocomplete
- **Interfață consistentă** pentru toate operațiunile
- **Cod optimizat** cu 47% reducere prin eliminarea duplicărilor
- **Scripturi organizate** - toate utilitarele interne în `/usr/local/lib/autonas/`
- **Logging unificat** cu tag-uri comune

## 🚀 Instalare în Cluster

AutoNAS este destinat exclusiv pentru instalare pe cluster de servere prin sistemul de deploy remote:

```bash
# Clonează repository-ul
git clone <repository-url> autoNAS
cd autoNAS
```

## 🌐 Deploy Remote

AutoNAS folosește exclusiv deploy remote pentru instalarea și managementul pe nodurile cluster-ului:

```bash
# Instalare completă pe toate serverele (192.168.2.91-93)
./deploy.sh install

# Dezinstalare completă de pe toate serverele
./deploy.sh uninstall

# Instalare doar pe server specific
./deploy.sh install 192.168.2.91

# Management servicii
./deploy.sh start      # Pornește serviciile
./deploy.sh restart    # Restartează serviciile
./deploy.sh stop       # Oprește serviciile
./deploy.sh status     # Verifică statusul
```

### Caracteristici Deploy:
- ✅ **Instalare exclusiv cluster** - destinat doar pentru noduri multiple
- ✅ **Verificare host status** - testează disponibilitatea cu ping
- ✅ **Conectivitate SSH** - validează accesul prin chei SSH
- ✅ **Transfer eficient** - sincronizare cu rsync
- ✅ **Error handling** - management robust al erorilor
- ✅ **Logging colorat** - feedback clar pentru fiecare operație

### Pregătirea pentru Deploy:
1. **Configurează cheile SSH** pe serverele țintă
2. **Testează conectivitatea**: `./deploy.sh status`
3. **Deploy complet**: `./deploy.sh install`

## 📋 Funcționalități Principale

### 🔌 Detectare Automată
- **Detectare prin udev** pentru diskuri USB, SATA externe și USB-to-SATA bridges
- **Suport pentru multiple tipuri** de device-uri (removable, ATA cu USB properties)
- **Detectare inteligentă** bazată pe UUID filesystem

### 🗂️ Trei Tipuri de Configurare

#### 1. **NFS Share Complet** (acces de rețea)
```bash
autonas add <uuid>  # Selectează [1] - NFS share complet
```
- Montare automată + configurare IP + export NFS
- Acces complet de rețea pentru alte mașini
- Perfect pentru backup servere și storage partajat

#### 2. **Montare Locală Simplă** (doar local)  
```bash
autonas add <uuid>  # Selectează [2] - Montare locală
```
- Doar mount point local, fără IP și NFS
- Ideal pentru storage local rapid
- Perfect pentru backup-uri și scratch space

#### 3. **Import Cameră Automat** (procesare media)
```bash
autonas add <uuid>  # Selectează [3] - Import cameră
```
- Mount → import media files → unmount automat
- Organizare automată cu EXIF și UTC conversion
- Background processing fără timeout constraints

### 🌐 Configurație NFS Optimizată
```
*(rw,all_squash,insecure,async,no_subtree_check,anonuid=0,anongid=0)
```

### 🔄 Management Inteligent
- **Configurare prin UUID** pentru identificare precisă
- **Protecția configurațiilor** utilizatorului la reinstalare
- **Logging detaliat** pentru debugging și monitorizare
- **Error handling robust** cu mesaje informative

## 📊 Comenzi de Management Rapide

### Flux de Lucru Tipic
```bash
# 1. Detectează UUID-ul diskului conectat
autonas show

# 2. Configurează diskul (interactiv)
autonas add <uuid>

# 3. Verifică statusul
autonas list
autonas status

# 4. Monitorizează log-urile
journalctl -t autonas -f
```

### Configurare Rapidă Exemplu
```bash
# Conectează diskul și detectează UUID
$ autonas show
Available storage devices:
[1] /dev/sdb1 → UUID: 920fe1b7-4091-4d6a-bab8-2f48d8d704bc (ext4, 1.8TB)

# Configurează pentru NFS
$ sudo autonas add 920fe1b7-4091-4d6a-bab8-2f48d8d704bc
Input name: backup-disk
Configuration type: [1] NFS share complet
Input IP: 192.168.10.25  
Input interface: thunderbridge
✓ Configuration added and disk mounted!

# Verifică rezultatul
$ autonas list
Configured disks:
[1] backup-disk (920fe1b7-4091-4d6a-bab8-2f48d8d704bc) → NFS: 192.168.10.25
```

## 📷 Camera Import Automation

AutoNAS v3.0 introduce arhitectura revoluționară **Background Import** pentru import automat scalabil de camere digitale:

### 🔄 Background Import Architecture
- **Service-Based Import** - Separare completă mount/import prin systemd services
- **Unlimited Duration** - Import-uri fără timeout constraints (testat cu 300+ files)
- **Auto-Unmount** - Workflow complet automat mount → import → unmount
- **UTC Conversion** - Conversie perfectă UTC → Local Time pentru EXIF

### Configurare Camera Import
```bash
# Configurează camera pentru import automat
autonas add <camera-uuid>
# Selectează [3] - Import cameră automat
# Setează destinația: /mnt/storage/photos
```

### Workflow Automat Camera
1. **Conectare cameră** → AutoNAS detectează UUID-ul configurat ca IMPORT
2. **Montare temporară** → Mount point temporar creat automat
3. **Background Import** → Service separat procesează fișiere fără timeout
4. **Organizare EXIF** → Sortare automată pe date din metadate
5. **Auto-Cleanup** → Demontare automată după finalizare

## 🚨 Troubleshooting Rapid

### Disk nu se detectează
```bash
journalctl -t autonas -f                    # Monitorizează log-urile
autonas show                                # Verifică device-urile detectate
udevadm monitor --subsystem-match=block     # Debug udev
```

### Probleme NFS
```bash
autonas status                 # Verifică configurația
showmount -e localhost         # Verifică export-urile
systemctl status nfs-kernel-server
```

### Probleme de Montare
```bash
autonas list                   # Verifică configurațiile
autonas test <uuid>           # Testează configurația specifică
mount | grep autonas          # Verifică mount-urile active
```

## ⚙️ Arhitectura AutoNAS v3.0

### 📁 Organizarea Scripturilor
```
/usr/local/bin/
├── autonas -> autonas.sh          # Singura comandă vizibilă utilizatorului
├── autonas.sh                     # Script principal CLI (1,208 linii)
└── autonas-core.sh                # Biblioteca centrală (1,044 linii)

/usr/local/lib/autonas/            # Scripturi interne (ascunse din autocomplete)
├── autonas-boot-scan.sh           # Scanner la bootare
├── autonas-disk-handler.sh        # Handler evenimente disk
├── autonas-media-importer.sh      # Importer automat media
├── autonas-network-handler.sh     # Handler eventi rețea
├── autonas-udev-wrapper.sh        # Wrapper pentru udev
└── autonas-uninstall.sh           # Uninstaller sistem
```

### 🎯 Single Source of Truth
- **Zero duplicare cod** - toate funcțiile în `autonas-core.sh`
- **Interfață unificată** - toate operațiunile prin comanda `autonas`
- **Scripturi ascunse** - experiență utilizator curată

### 📊 Realizări v3.0
- **47% reducere cod** - ~2,300 linii eliminate prin refactorizare completă
- **Comandă unică vizibilă** - doar `autonas` în autocomplete
- **Organizare profesională** - toate utilitarele ascunse dar funcționale
- **Integrare completă** - toate serviciile și regulile actualizate

## ⚙️ Note Importante

1. **Rulează ca root**: Toate comenzile AutoNAS necesită `sudo`
2. **Configurații persistente**: Diskurile configurate se montează automat la conectare
3. **Cleanup automat**: Demontarea curăță automat mount points, IP-uri și export-uri NFS
4. **Siguranță date**: Dezinstalarea păstrează toate datele și configurațiile
5. **Script organizare**: Doar `autonas` vizibil - toate utilitarele în `/usr/local/lib/autonas/`

## 🎯 Use Cases Rapide

- **🌐 NFS Backup Server**: Disk extern → detectare automată → export NFS instant
- **📁 Storage Local**: Backup-uri locale rapide fără configurare rețea
- **📷 Import Camere**: Conectare cameră → import automat → organizare EXIF
- **🔧 Development**: Mixed storage (local + NFS) pentru workflow-uri complexe

---

**AutoNAS v3.0 - Clean Command Interface pentru Montare Automată** 🚀

*Doar comanda `autonas` vizibilă - interfață profesională și curată*

##  Camera Import Automation

AutoNAS v3.0 introduce arhitectura revoluționară **Background Import** pentru import automat scalabil de camere digitale cu workflow complet `mount → import → unmount`.

### 🚀 **NOUĂ ARHITECTURĂ BACKGROUND IMPORT**
- **🔄 Service-Based Architecture** - Separare completă mount/import prin systemd services
- **⚡ Unlimited Duration** - Import-uri fără timeout constraints (comprobat cu 300+ files)
- **🛠️ Auto-Unmount** - Demontare automată după finalizarea import-ului
- **📊 Production Tested** - Validat cu camere reale Garmin (302 files, 100% success rate)

### Caracteristici Camera Import
- **🎯 Background Services** - Import rulează în servicii systemd separate fără timeout
- **Detectare automată** a structurilor de foldere pentru camere (DCIM, PRIVATE, MP_ROOT)
- **Import cu EXIF** - organizare automată pe baza metadatelor temporale cu UTC conversion
- **Multiple formate suportate**: MP4, MOV, JPG, JPEG, PNG, ARW, DNG, MP4, AVI, MKV
- **Organizare automată pe date** din EXIF/QuickTime tags cu conversie UTC → Local Time
- **Dry-run mode** pentru testare fără modificarea fișierelor
- **Progress tracking** cu statistici detaliate
- **Cleanup GLV files** pentru camerele Garmin
- **Scalabilitate Production** - Testat cu sute de fișiere fără probleme

### Format Configurație IMPORT
```
UUID:NAME:IMPORT:IMPORT:MOUNT_POINT:DESTINATION_PATH[:SCRIPT_PATH]
```

**Exemplu configurație:**
```
1234-5678:camera-garmin:IMPORT:IMPORT:/mnt/autonas/camera-garmin:/mnt/storage/photos:/usr/local/bin/autonas-camera-import.sh
```

### Workflow Import Automat (Background Architecture)

1. **Conectare cameră** → AutoNAS detectează UUID-ul configurat ca IMPORT
2. **Montare temporară** → Attach service montează în mount point temporar
3. **Background Import Launch** → Manager lansează direct `run_background_import()` process
4. **Import nelimitat** → Background service procesează fișiere fără timeout constraints
5. **Organizare EXIF** → Fișierele sunt sortate pe date din metadate (UTC → Local Time)
6. **Auto-Cleanup** → Background service apelează detach după finalizare
7. **Demontare automată** → Camera este demontată automat
8. **Mount cleanup** → Mount point temporar este curățat

**Avantaje Arhitectură Background:**
- ✅ **Scalabilitate infinită** - Nu există timeout-uri systemd pentru import
- ✅ **Robustețe** - Service separation previne crash-uri în mount operations
- ✅ **Monitorizare** - Log-uri separate pentru fiecare etapă
- ✅ **Production Ready** - Testat cu 302 fișiere, import complet în 36 minute

### Configurare Camera Import

```bash
# Adaugă configurație pentru cameră
autonas-config.sh add

# Selectează UUID-ul camerei
# Input UUID: 1234-5678

# Selectează tipul de configurare
# [3] - Import cameră automat

# Setează numele camerei
# Input name: camera-garmin

# Setează destinația pentru import
# Input destination: /mnt/storage/photos

# Script personalizat (opțional, default: autonas-camera-import.sh)
# Input script: [ENTER pentru default]
```

### Script Import Personalizat

Poți crea propriul script de import:

```bash
#!/bin/bash
# /usr/local/bin/my-camera-import.sh

MOUNT_POINT="$1"
DESTINATION="$2"
DISK_NAME="$3"

# Exemplu: Import specific pentru Canon
find "$MOUNT_POINT" -name "*.CR3" -exec cp {} "$DESTINATION/RAW/" \;
find "$MOUNT_POINT" -name "*.JPG" -exec cp {} "$DESTINATION/JPEG/" \;

echo "Import completed for $DISK_NAME"
exit 0
```

### Testare Configuration

```bash
# Listează configurațiile
autonas-config.sh list

# Testează configurația IMPORT
autonas-config.sh test camera-uuid

# Monitorizează log-urile
journalctl -t autonas -f
```

### Camera Import Script (autonas-camera-import.sh)

Script-ul default oferă:
- **Auto-detectare** structuri DCIM, PRIVATE, MP_ROOT
- **EXIF processing** cu exiftool pentru date precise
- **Organizare automată** în foldere YYYY-MM-DD
- **Redenumire intelligentă** cu timestamp-uri
- **Multiple opțiuni**: --dry-run, --verbose, --limit N
- **Error handling** robust cu logging detaliat

```bash
# Manual import test
autonas-camera-import.sh /mnt/camera /dest/path camera-name --dry-run --verbose
```

---

**AutoNAS v3.0 - Clean Command Interface pentru Montare Automată** 🚀

*Doar comanda `autonas` vizibilă - interfață profesională și curată*

*Dezvoltat pentru ecosistemul Proxmox/Debian cu focus pe automatizare și siguranța datelor*