autoNAS / README.md
Newer Older
d426b0e 3 months ago History
392 lines | 14.399kb
Bogdan Timofte authored 3 months ago
1
# AutoNAS v3.0 - Sistem de Montare Automată cu Unified Interface
2

            
3
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.
4

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

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

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

            
20
### Operațiuni Disponibile
21
```bash
22
# Operațiuni Diskuri
Bogdan Timofte authored 3 months ago
23
autonas attach <uuid|name|mount_point>   # Montează disk automat
24
autonas detach <uuid|name|mount_point>   # Demontează disk
Bogdan Timofte authored 3 months ago
25
autonas list                  # Listează diskurile configurate
26

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

            
32
# Utilități
33
autonas --help              # Ajutor complet
34
```
35

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

            
43
## 🚀 Instalare în Cluster
44

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

            
47
```bash
48
# Clonează repository-ul
49
git clone <repository-url> autoNAS
50
cd autoNAS
51
```
52

            
53
## 🌐 Deploy Remote
54

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

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

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

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

            
67
# Management servicii
68
./deploy.sh start      # Pornește serviciile
69
./deploy.sh restart    # Restartează serviciile
70
./deploy.sh stop       # Oprește serviciile
71
./deploy.sh status     # Verifică statusul
72
```
73

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

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

            
87
## 📋 Funcționalități Principale
88

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

            
94
### 🗂️ Trei Tipuri de Configurare
95

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

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

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

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

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

            
131
## 📊 Comenzi de Management Rapide
132

            
133
### Flux de Lucru Tipic
134
```bash
135
# 1. Detectează UUID-ul diskului conectat
136
autonas show
137

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

            
141
# 3. Verifică statusul
142
autonas list
143
autonas status
144

            
145
# 4. Monitorizează log-urile
146
journalctl -t autonas -f
147
```
148

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

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

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

            
170
## 📷 Camera Import Automation
171

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

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

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

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

            
195
## 🚨 Troubleshooting Rapid
196

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

            
204
### Probleme NFS
205
```bash
206
autonas status                 # Verifică configurația
207
showmount -e localhost         # Verifică export-urile
208
systemctl status nfs-kernel-server
209
```
210

            
211
### Probleme de Montare
212
```bash
213
autonas list                   # Verifică configurațiile
Bogdan Timofte authored 3 months ago
214
autonas test <uuid|name|mount_point>  # Testează configurația specifică
Bogdan Timofte authored 3 months ago
215
mount | grep autonas          # Verifică mount-urile active
216
```
217

            
218
## ⚙️ Arhitectura AutoNAS v3.0
219

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

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

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

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

            
247
## ⚙️ Note Importante
248

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

            
255
## 🎯 Use Cases Rapide
256

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

            
262
---
263

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

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

            
268
##  Camera Import Automation
269

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

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

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

            
289
### Format Configurație IMPORT
290
```
291
UUID:NAME:IMPORT:IMPORT:MOUNT_POINT:DESTINATION_PATH[:SCRIPT_PATH]
292
```
293

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

            
299
### Workflow Import Automat (Background Architecture)
300

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

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

            
316
### Configurare Camera Import
317

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

            
322
# Selectează UUID-ul camerei
323
# Input UUID: 1234-5678
324

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

            
328
# Setează numele camerei
329
# Input name: camera-garmin
330

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

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

            
338
### Script Import Personalizat
339

            
340
Poți crea propriul script de import:
341

            
342
```bash
343
#!/bin/bash
344
# /usr/local/bin/my-camera-import.sh
345

            
346
MOUNT_POINT="$1"
347
DESTINATION="$2"
348
DISK_NAME="$3"
349

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

            
354
echo "Import completed for $DISK_NAME"
355
exit 0
356
```
357

            
358
### Testare Configuration
359

            
360
```bash
361
# Listează configurațiile
362
autonas-config.sh list
363

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

            
367
# Monitorizează log-urile
368
journalctl -t autonas -f
369
```
370

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

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

            
381
```bash
382
# Manual import test
383
autonas-camera-import.sh /mnt/camera /dest/path camera-name --dry-run --verbose
384
```
385

            
386
---
387

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

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

            
Bogdan Timofte authored 3 months ago
392
*Dezvoltat pentru ecosistemul Proxmox/Debian cu focus pe automatizare și siguranța datelor*