Fix restore script permissions handling with sudo

Add sudo usage for data directory operations to handle Docker-created files
owned by UID 1000. The restore script now properly cleans and extracts data
with correct permissions, preventing "Permission denied" errors when restoring
backups.

Changes:
- Use sudo rm for cleaning existing data directory
- Use sudo tar for extracting backup data
- Add sudo chown to restore proper file ownership (1000:1000)
- Remove redundant success message from Makefile restore target

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
BeauTroll
2025-12-17 05:56:58 +01:00
parent 9ad3cbe0d7
commit e7d3b6cf16
2 changed files with 18 additions and 14 deletions

View File

@@ -78,7 +78,6 @@ restore: ## Restaure depuis une sauvegarde (usage: make restore FILE=backups/git
fi fi
@echo -e "$(BLUE)Restauration depuis $(FILE)...$(NC)" @echo -e "$(BLUE)Restauration depuis $(FILE)...$(NC)"
@bash scripts/restore.sh "$(FILE)" @bash scripts/restore.sh "$(FILE)"
@echo -e "$(GREEN)Restauration terminée$(NC)"
## Mise à jour et maintenance ## Mise à jour et maintenance

View File

@@ -227,32 +227,37 @@ log "${YELLOW}[5/6] Restauration des données Gitea...${NC}"
# Arrêter Gitea s'il tourne # Arrêter Gitea s'il tourne
docker compose stop gitea 2>/dev/null || true docker compose stop gitea 2>/dev/null || true
# Nettoyer les données existantes de manière sécurisée # Nettoyer les données existantes de manière sécurisée avec les bonnes permissions
DATA_DIR="./data" DATA_DIR="./data"
if [ -d "$DATA_DIR" ]; then if [ -d "$DATA_DIR" ]; then
# Vérifier que c'est bien le bon répertoire log "Suppression des anciennes données avec sudo..."
if [ "$DATA_DIR" = "./data" ]; then # Utiliser sudo pour supprimer les fichiers appartenant à l'utilisateur Docker
log "Suppression des anciennes données..." if ! sudo rm -rf "$DATA_DIR"/* 2>> "$LOG_FILE"; then
# Utiliser find pour une suppression plus sûre log "${YELLOW}Avertissement: Échec du nettoyage${NC}"
find "$DATA_DIR" -mindepth 1 -delete 2>> "$LOG_FILE" || { log "Vous pouvez exécuter manuellement: sudo rm -rf $DATA_DIR/*"
log "${YELLOW}Avertissement: Échec du nettoyage partiel${NC}" read -p "Continuer quand même? (oui/non) " -r
} if [[ ! $REPLY =~ ^[Oo][Uu][Ii]$ ]]; then
else
log "${RED}Erreur: Répertoire de données invalide: $DATA_DIR${NC}"
exit 1 exit 1
fi fi
fi
fi fi
# Créer le répertoire de données # Créer le répertoire de données
mkdir -p "$DATA_DIR" mkdir -p "$DATA_DIR"
# Extraire les données depuis l'archive # Extraire les données depuis l'archive avec sudo pour les permissions
log "Extraction des données Gitea..." log "Extraction des données Gitea..."
if ! tar xzf "$BACKUP_DIR/gitea_data.tar.gz" -C "$DATA_DIR" 2>> "$LOG_FILE"; then if ! sudo tar xzf "$BACKUP_DIR/gitea_data.tar.gz" -C "$DATA_DIR" 2>> "$LOG_FILE"; then
log "${RED}Erreur: Échec de l'extraction des données Gitea${NC}" log "${RED}Erreur: Échec de l'extraction des données Gitea${NC}"
exit 1 exit 1
fi fi
# Restaurer les bonnes permissions (UID/GID 1000 pour Gitea)
log "Restauration des permissions..."
if ! sudo chown -R 1000:1000 "$DATA_DIR" 2>> "$LOG_FILE"; then
log "${YELLOW}Avertissement: Impossible de changer les permissions${NC}"
fi
# Vérifier les permissions # Vérifier les permissions
log "Vérification des permissions..." log "Vérification des permissions..."
if [ -d "$DATA_DIR/gitea" ]; then if [ -d "$DATA_DIR/gitea" ]; then