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>
271 lines
8.1 KiB
Bash
Executable File
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
|