#!/bin/bash # Script de vérification et création des dossiers Bitcoin pour 4NK_node # Usage: ./scripts/setup-bitcoin-dirs.sh # # Ce script s'assure que tous les dossiers nécessaires existent # avant le démarrage des services Bitcoin et dépendants. set -euo pipefail # Configuration SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" BITCOIN_DATA_DIR="$PROJECT_ROOT/modules/bitcoin/data" BITCOIN_CONF_DIR="$PROJECT_ROOT/modules/bitcoin/conf" BITCOIN_LOGS_DIR="$PROJECT_ROOT/modules/bitcoin/logs" # Couleurs pour les messages RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Fonction de logging log() { echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1" } log_success() { echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] ✓${NC} $1" } log_warning() { echo -e "${YELLOW}[$(date +'%Y-%m-%d %H:%M:%S')] ⚠${NC} $1" } log_error() { echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] ✗${NC} $1" } # Fonction pour créer un dossier s'il n'existe pas ensure_directory() { local dir="$1" local description="$2" if [[ ! -d "$dir" ]]; then log "Création du répertoire $description: $dir" mkdir -p "$dir" log_success "Répertoire $description créé: $dir" else log_success "Répertoire $description existe déjà: $dir" fi # Vérifier les permissions if [[ ! -r "$dir" ]] || [[ ! -w "$dir" ]]; then log_warning "Correction des permissions pour: $dir" chmod 755 "$dir" fi } # Fonction pour vérifier et créer les fichiers de configuration ensure_config_files() { local conf_dir="$1" local example_file="$2" local target_file="$3" if [[ -d "$target_file" ]]; then log_warning "Suppression du répertoire incorrect: $target_file" rm -rf "$target_file" fi if [[ ! -f "$target_file" ]]; then if [[ -f "$example_file" ]]; then log "Création du fichier de configuration à partir de l'exemple: $target_file" cp "$example_file" "$target_file" log_success "Fichier de configuration créé: $target_file" else log_error "Fichier exemple manquant: $example_file" return 1 fi else log_success "Fichier de configuration existe: $target_file" fi } main() { log "=== Setup des dossiers Bitcoin pour 4NK_node ===" # Vérifier que nous sommes dans le bon répertoire if [[ ! -f "$PROJECT_ROOT/docker-compose.yml" ]]; then log_error "Fichier docker-compose.yml non trouvé. Êtes-vous dans le bon répertoire ?" exit 1 fi log "Répertoire du projet: $PROJECT_ROOT" # Créer les dossiers principaux Bitcoin ensure_directory "$BITCOIN_DATA_DIR" "données Bitcoin" ensure_directory "$BITCOIN_LOGS_DIR" "logs Bitcoin" # Créer les sous-dossiers spécifiques Bitcoin ensure_directory "$BITCOIN_DATA_DIR/wallets" "dossier wallets Bitcoin" ensure_directory "$BITCOIN_DATA_DIR/signet" "dossier signet Bitcoin" ensure_directory "$BITCOIN_DATA_DIR/blocks" "dossier blocks Bitcoin" ensure_directory "$BITCOIN_DATA_DIR/chainstate" "dossier chainstate Bitcoin" # Vérifier les fichiers de configuration if [[ -d "$BITCOIN_CONF_DIR" ]]; then ensure_config_files "$BITCOIN_CONF_DIR" "$BITCOIN_CONF_DIR/bitcoin.conf.exemple" "$BITCOIN_CONF_DIR/bitcoin.conf" else log_warning "Répertoire de configuration Bitcoin manquant: $BITCOIN_CONF_DIR" fi # Vérifier les dossiers des autres services qui pourraient avoir des problèmes similaires log "=== Vérification des autres services ===" # Vérifier les fichiers de configuration des relay for relay_num in 1 2 3; do relay_conf_dir="$PROJECT_ROOT/modules/sdk_relay${relay_num}/conf" if [[ -d "$relay_conf_dir" ]]; then ensure_config_files "$relay_conf_dir" "$relay_conf_dir/sdk_relay${relay_num}.conf.exemple" "$relay_conf_dir/sdk_relay${relay_num}.conf" fi done # Vérifier le fichier de configuration ihm_client ihm_conf_dir="$PROJECT_ROOT/modules/ihm_client/conf" if [[ -d "$ihm_conf_dir" ]]; then ensure_config_files "$ihm_conf_dir" "$ihm_conf_dir/.env.exemple" "$ihm_conf_dir/.env" fi log_success "=== Setup terminé avec succès ===" log "Tous les dossiers et fichiers de configuration Bitcoin sont prêts." log "Vous pouvez maintenant lancer: docker compose up -d" return 0 } # Exécution du script if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then main "$@" fi