secubox-openwrt/secubox-tools/deploy-module-template.sh
CyberMind-FR 403283419c docs: Reorganize documentation structure and add architecture diagrams
Major documentation improvements and restructuring for better maintainability
and navigation.

## Structural Changes

### New Documentation Organization
- Move all documentation to DOCS/ directory for better organization
- Create DOCS/archive/ for historical documents
- Move deployment scripts to secubox-tools/ directory

### Archived Documents
- COMPLETION_REPORT.md → archive/ (project milestone)
- MODULE-ENABLE-DISABLE-DESIGN.md → archive/ (feature implemented)
- BUILD_ISSUES.md → archive/ (issues resolved)
- Add archive/README.md with archiving policy and document index

## Documentation Enhancements

### Version Standardization
- Add version headers to CLAUDE.md (v1.0.0)
- Add version headers to BUILD_ISSUES.md (v1.0.0)
- Standardize date format to YYYY-MM-DD across all docs

### Cross-References & Navigation
- Add "See Also" sections to PERMISSIONS-GUIDE.md
- Add "See Also" sections to VALIDATION-GUIDE.md
- Link quick references to detailed guides
- Improve documentation discoverability

### Architecture Diagrams (Mermaid)
Add 3 professional diagrams to DEVELOPMENT-GUIDELINES.md:

1. **System Architecture Diagram** (§2)
   - Complete data flow: Browser → LuCI → RPCD → ubus → System
   - Color-coded components by layer
   - Shows JavaScript, RPC, RPCD daemon, UCI, system services

2. **Deployment Workflow Diagram** (§9)
   - Step-by-step deployment process with validation checkpoints
   - Error recovery paths for common issues (403, 404, -32000)
   - Local validation, file transfer, permission fixes, service restarts

3. **Component Hierarchy Diagram** (§1)
   - Standard page structure and CSS class relationships
   - Page → Header → Stats → Content → Cards → Buttons
   - Shows design system component organization

## New Files

### TODO-ANALYSE.md
- Comprehensive documentation improvement roadmap
- Tasks categorized: Immediate, Short-term, Long-term, Optional
- Progress tracking with acceptance criteria
- Covers testing, security, performance guides
- Documentation automation plans

## Benefits

 Cleaner project structure (docs in DOCS/, tools in secubox-tools/)
 Better documentation navigation with cross-references
 Visual understanding through architecture diagrams
 Historical documents archived but accessible
 Standardized versioning across all documentation
 Clear roadmap for future documentation improvements

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-28 09:52:15 +01:00

271 lines
8.1 KiB
Bash
Executable File

#!/bin/bash
# Template de déploiement standardisé pour modules SecuBox/System Hub
# Usage: ./deploy-module-template.sh <module-name>
#
# Exemple: ./deploy-module-template.sh system-hub
set -e # Exit on error
# === Configuration ===
ROUTER="${ROUTER:-root@192.168.8.191}"
MODULE_NAME="${1}"
BASE_DIR="$(cd "$(dirname "$0")" && pwd)"
# Chemins
LOCAL_RESOURCES="$BASE_DIR/luci-app-$MODULE_NAME/htdocs/luci-static/resources"
LOCAL_ROOT="$BASE_DIR/luci-app-$MODULE_NAME/root"
REMOTE_RESOURCES="/www/luci-static/resources"
REMOTE_ROOT=""
# Couleurs pour output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# === Functions ===
print_header() {
echo ""
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${BLUE} 📦 Déploiement: $MODULE_NAME${NC}"
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo ""
}
print_step() {
echo -e "${GREEN}${NC} $1"
}
print_error() {
echo -e "${RED}${NC} $1"
}
print_success() {
echo -e "${GREEN}${NC} $1"
}
print_warning() {
echo -e "${YELLOW}${NC} $1"
}
check_prerequisites() {
print_step "Vérification des prérequis..."
# Vérifier que le module existe
if [ ! -d "luci-app-$MODULE_NAME" ]; then
print_error "Module luci-app-$MODULE_NAME non trouvé!"
exit 1
fi
# Vérifier connectivité routeur
if ! ssh -o ConnectTimeout=5 "$ROUTER" "exit" 2>/dev/null; then
print_error "Impossible de se connecter à $ROUTER"
exit 1
fi
print_success "Prérequis OK"
}
backup_remote() {
print_step "Création backup sur le routeur..."
BACKUP_DIR="/root/luci-backups/$(date +%Y%m%d-%H%M%S)"
ssh "$ROUTER" "mkdir -p $BACKUP_DIR"
# Backup view files
if ssh "$ROUTER" "[ -d $REMOTE_RESOURCES/view/$MODULE_NAME ]" 2>/dev/null; then
ssh "$ROUTER" "cp -r $REMOTE_RESOURCES/view/$MODULE_NAME $BACKUP_DIR/"
fi
# Backup module files
if ssh "$ROUTER" "[ -d $REMOTE_RESOURCES/$MODULE_NAME ]" 2>/dev/null; then
ssh "$ROUTER" "cp -r $REMOTE_RESOURCES/$MODULE_NAME $BACKUP_DIR/"
fi
# Backup RPCD
if ssh "$ROUTER" "[ -f /usr/libexec/rpcd/luci.$MODULE_NAME ]" 2>/dev/null; then
ssh "$ROUTER" "cp /usr/libexec/rpcd/luci.$MODULE_NAME $BACKUP_DIR/"
fi
print_success "Backup créé: $BACKUP_DIR"
}
deploy_js_files() {
print_step "Déploiement fichiers JavaScript..."
if [ -d "$LOCAL_RESOURCES/view/$MODULE_NAME" ]; then
ssh "$ROUTER" "mkdir -p $REMOTE_RESOURCES/view/$MODULE_NAME"
scp -q "$LOCAL_RESOURCES/view/$MODULE_NAME/"*.js "$ROUTER:$REMOTE_RESOURCES/view/$MODULE_NAME/" 2>/dev/null || true
print_success "Fichiers JS vues déployés"
fi
if [ -d "$LOCAL_RESOURCES/$MODULE_NAME" ]; then
if ls "$LOCAL_RESOURCES/$MODULE_NAME"/*.js >/dev/null 2>&1; then
ssh "$ROUTER" "mkdir -p $REMOTE_RESOURCES/$MODULE_NAME"
scp -q "$LOCAL_RESOURCES/$MODULE_NAME/"*.js "$ROUTER:$REMOTE_RESOURCES/$MODULE_NAME/" 2>/dev/null || true
print_success "Scripts JS partagés déployés"
fi
fi
}
deploy_css_files() {
print_step "Déploiement fichiers CSS..."
if [ -d "$LOCAL_RESOURCES/$MODULE_NAME" ]; then
ssh "$ROUTER" "mkdir -p $REMOTE_RESOURCES/$MODULE_NAME"
scp -q "$LOCAL_RESOURCES/$MODULE_NAME/"*.css "$ROUTER:$REMOTE_RESOURCES/$MODULE_NAME/" 2>/dev/null || true
print_success "Fichiers CSS déployés"
fi
}
deploy_rpcd() {
print_step "Déploiement backend RPCD..."
RPCD_FILE="$LOCAL_ROOT/usr/libexec/rpcd/luci.$MODULE_NAME"
if [ -f "$RPCD_FILE" ]; then
scp -q "$RPCD_FILE" "$ROUTER:/usr/libexec/rpcd/" 2>/dev/null || true
print_success "RPCD backend déployé"
else
print_warning "Pas de backend RPCD trouvé"
fi
}
deploy_menu_acl() {
print_step "Déploiement menu et ACL..."
# Menu
MENU_FILE="$LOCAL_ROOT/usr/share/luci/menu.d/luci-app-$MODULE_NAME.json"
if [ -f "$MENU_FILE" ]; then
ssh "$ROUTER" "mkdir -p /usr/share/luci/menu.d"
scp -q "$MENU_FILE" "$ROUTER:/usr/share/luci/menu.d/" 2>/dev/null || true
print_success "Menu déployé"
fi
# ACL
ACL_FILE="$LOCAL_ROOT/usr/share/rpcd/acl.d/luci-app-$MODULE_NAME.json"
if [ -f "$ACL_FILE" ]; then
ssh "$ROUTER" "mkdir -p /usr/share/rpcd/acl.d"
scp -q "$ACL_FILE" "$ROUTER:/usr/share/rpcd/acl.d/" 2>/dev/null || true
print_success "ACL déployé"
fi
}
fix_permissions() {
print_step "Correction des permissions..."
# RPCD = 755
ssh "$ROUTER" "chmod 755 /usr/libexec/rpcd/luci.$MODULE_NAME 2>/dev/null" || true
# CSS/JS = 644
ssh "$ROUTER" "chmod 644 $REMOTE_RESOURCES/$MODULE_NAME/*.css 2>/dev/null" || true
ssh "$ROUTER" "chmod 644 $REMOTE_RESOURCES/$MODULE_NAME/*.js 2>/dev/null" || true
ssh "$ROUTER" "chmod 644 $REMOTE_RESOURCES/view/$MODULE_NAME/*.js 2>/dev/null" || true
print_success "Permissions corrigées"
}
clear_cache() {
print_step "Nettoyage du cache LuCI..."
ssh "$ROUTER" "rm -f /tmp/luci-indexcache /tmp/luci-modulecache/* 2>/dev/null" || true
print_success "Cache nettoyé"
}
restart_services() {
print_step "Redémarrage des services..."
ssh "$ROUTER" "/etc/init.d/rpcd restart" >/dev/null 2>&1
sleep 1
ssh "$ROUTER" "/etc/init.d/uhttpd restart" >/dev/null 2>&1
sleep 1
print_success "Services redémarrés"
}
verify_deployment() {
print_step "Vérification du déploiement..."
# Vérifier ubus object
if ssh "$ROUTER" "ubus list | grep -q luci.$MODULE_NAME" 2>/dev/null; then
print_success "ubus object 'luci.$MODULE_NAME' détecté"
else
print_warning "ubus object 'luci.$MODULE_NAME' non trouvé"
fi
# Vérifier fichiers
FILE_COUNT=$(ssh "$ROUTER" "find $REMOTE_RESOURCES -name '*$MODULE_NAME*' -type f | wc -l" 2>/dev/null)
print_success "$FILE_COUNT fichiers déployés"
}
print_summary() {
echo ""
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${GREEN}✓ Déploiement terminé avec succès!${NC}"
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo ""
echo -e "${YELLOW}📋 Prochaines étapes:${NC}"
echo ""
echo "1. Tester en mode privé (Ctrl+Shift+N):"
echo -e " ${BLUE}https://192.168.8.191/cgi-bin/luci/${NC}"
echo ""
echo "2. Vérifier console navigateur (F12):"
echo " - Onglet Console: pas d'erreurs"
echo " - Onglet Network: tous fichiers chargent (200)"
echo ""
echo "3. Tester fonctionnalités:"
echo " - Navigation entre pages"
echo " - Chargement des données"
echo " - Actions (boutons, formulaires)"
echo ""
echo "4. Tester responsive:"
echo " - Mode mobile (F12 > Toggle device toolbar)"
echo " - Dark/Light mode"
echo ""
echo -e "${YELLOW}🔧 Debug (si problème):${NC}"
echo ""
echo "# Vérifier ubus"
echo "ssh $ROUTER 'ubus list | grep $MODULE_NAME'"
echo "ssh $ROUTER 'ubus call luci.$MODULE_NAME getStatus'"
echo ""
echo "# Vérifier logs"
echo "ssh $ROUTER 'logread | grep -i error | tail -20'"
echo ""
echo "# Rollback (si nécessaire)"
echo "ssh $ROUTER 'ls -la /root/luci-backups/'"
echo ""
}
# === Main Execution ===
main() {
# Vérifier argument
if [ -z "$MODULE_NAME" ]; then
echo "Usage: $0 <module-name>"
echo ""
echo "Exemples:"
echo " $0 system-hub"
echo " $0 secubox"
echo " $0 netdata-dashboard"
exit 1
fi
print_header
check_prerequisites
backup_remote
deploy_js_files
deploy_css_files
deploy_rpcd
deploy_menu_acl
fix_permissions
clear_cache
restart_services
verify_deployment
print_summary
}
# Run main
main