Automatiser l’audit d’une instance Dolibarr : comparaison complète des fichiers modifiés
Lorsqu’une instance Dolibarr a été modifiée au fil du temps — patchs manuels, hacks dans le core, fichiers surchargés — il devient indispensable d’obtenir une vision claire et fiable des écarts avant toute migration. Un simple diff visuel ne suffit pas lorsque des centaines de fichiers sont concernés.
Pour répondre à ce besoin, nous avons développé un script POSIX portable qui télécharge automatiquement une version “propre” de Dolibarr et génère un rapport détaillé des différences entre votre instance réelle et la version officielle.
Pourquoi un tel audit est indispensable avant une migration ?
- Identifier les modifications dans le core, souvent invisibles sans analyse approfondie.
- Repérer des fichiers supprimés, déplacés ou altérés improprement.
- Évaluer la faisabilité d’une mise à jour en fonction des impacts réels.
- Produire un rapport lisible par un auditeur ou un opérateur technique.
- Préparer la migration vers des versions majeures (Doli 14 → 18 → 19 → 20…).
Fonctionnement du script d’audit automatisé
Le script est exécuté depuis n’importe quel environnement Debian ou compatible POSIX. Il réalise automatiquement :
- La détection du répertoire source Dolibarr.
- Le téléchargement automatisé de la version Dolibarr choisie.
- La décompression en environnement isolé.
- Un diff complet entre les répertoires htdocs/.
- La génération d’un fichier texte d’audit lisible et exploitable.
- L’enregistrement d’un log d’exécution retraçant toutes les actions.
Un mode interactif sécurisé
Chaque action sensible demande une confirmation :
- Téléchargement d’une version Dolibarr
- Remplacement d’un ZIP existant
- Suppression d’un dossier déjà décompressé
- Lancement du diff final
- Nettoyage des sources téléchargées
Ce fonctionnement évite tout risque d’écrasement accidentel et garantit un audit contrôlé.
#!/bin/sh
DIR_SOURCE="$1"
DIR_BASE="$2"
OUTPUT_FILE="$3"
VERSION=""
ZIP_URL_BASE="https://github.com/Dolibarr/dolibarr/archive/refs/tags"
DL_CMD="curl"
UNZIP_CMD="unzip"
TMP_DIR="tmp_dolibarr_base"
LOG_FILE="execution.log"
ZIP_FILE=""
BASE_EXTRACT=""
confirm() {
printf "%s" "$1"
read -r a
case "$a" in
Y|y) return 0 ;;
*) return 1 ;;
esac
}
log() {
printf "%s\n" "$1" >> "$LOG_FILE"
}
if [ -z "$OUTPUT_FILE" ]
then
OUTPUT_FILE="diff_$(date +%Y%m%d_%H%M%S).txt"
fi
log "Début exécution"
if [ -z "$DIR_BASE" ]
then
printf "Version Dolibarr de base à télécharger: "
read -r VERSION
mkdir -p "$TMP_DIR"
ZIP_FILE="$TMP_DIR/dolibarr_$VERSION.zip"
BASE_EXTRACT="$TMP_DIR/dolibarr-$VERSION"
log "Version demandée: $VERSION"
log "ZIP cible: $ZIP_FILE"
log "Répertoire décompressé: $BASE_EXTRACT"
if [ -f "$ZIP_FILE" ]
then
printf "Le fichier %s existe déjà.\n" "$ZIP_FILE"
if confirm "Remplacer ? (Y = remplacer / n = garder existant) "
then
rm -f "$ZIP_FILE"
log "Ancien ZIP supprimé"
else
log "ZIP existant conservé"
fi
fi
if [ ! -f "$ZIP_FILE" ]
then
if confirm "Télécharger la version $VERSION ? (Y/n) "
then
"$DL_CMD" -L "$ZIP_URL_BASE/$VERSION.zip" -o "$ZIP_FILE"
log "ZIP téléchargé"
else
log "Téléchargement annulé"
exit 0
fi
fi
if [ -d "$BASE_EXTRACT" ]
then
if confirm "Le dossier décompressé existe déjà : $BASE_EXTRACT. Le supprimer ? (Y/n) "
then
rm -rf "$BASE_EXTRACT"
log "Ancien dossier décompressé supprimé"
else
log "Ancien dossier conservé"
fi
fi
if [ ! -d "$BASE_EXTRACT" ]
then
"$UNZIP_CMD" -q "$ZIP_FILE" -d "$TMP_DIR"
log "ZIP décompressé"
fi
DIR_BASE="$BASE_EXTRACT/htdocs"
fi
DIR_SOURCE_HTDOCS="$DIR_SOURCE/htdocs"
log "Comparaison lancée"
log "Source: $DIR_SOURCE_HTDOCS"
log "Base: $DIR_BASE"
log "Output: $OUTPUT_FILE"
printf "Comparaison:\nSource: %s\nBase: %s\nOutput: %s\n" "$DIR_SOURCE_HTDOCS" "$DIR_BASE" "$OUTPUT_FILE"
if ! confirm "Confirmer et lancer le diff ? (Y/n) "
then
log "Diff annulé"
exit 0
fi
find "$DIR_SOURCE_HTDOCS" -type f | while read -r f
do
r="${f#$DIR_SOURCE_HTDOCS/}"
if [ -f "$DIR_BASE/$r" ]
then
diff -u "$DIR_SOURCE_HTDOCS/$r" "$DIR_BASE/$r" >> "$OUTPUT_FILE"
else
printf "%s\n" "Absent dans base: $r" >> "$OUTPUT_FILE"
fi
done
find "$DIR_BASE" -type f | while read -r f
do
r="${f#$DIR_BASE/}"
if [ ! -f "$DIR_SOURCE_HTDOCS/$r" ]
then
printf "%s\n" "Absent dans source: $r" >> "$OUTPUT_FILE"
fi
done
log "Diff terminé"
if [ -n "$BASE_EXTRACT" ]
then
if confirm "Voulez-vous supprimer les sources décompressées : $BASE_EXTRACT ? (Y/n) "
then
rm -rf "$BASE_EXTRACT"
log "Sources décompressées supprimées: $BASE_EXTRACT"
else
log "Sources décompressées conservées"
fi
fi
log "Fin exécution"
Exemple d’utilisation
Pour analyser une instance Dolibarr installée dans /var/www/erp/ :
./diffdoli.sh /var/www/erp
Le script demandera la version Dolibarr de référence (exemple : 18.0.1) puis générera un fichier automatique du type :
diff_20251120_153012.txt

Un outil adapté aux auditeurs, intégrateurs et équipes techniques
Le rapport généré est idéal pour :
- Valider la conformité avant migration.
- Identifier les risques techniques liés aux modifications existantes.
- Planifier un refactoring complet ou partiel.
- Préparer des devis d’audit ou de reprise d’ERP.
Cet outil supprime les approximations et offre une vision claire des écarts entre votre instance Dolibarr et la version officielle. C’est une étape indispensable pour préparer une migration sereine, sécurisée et conforme aux bonnes pratiques.
Si vous souhaitez aller plus loin (analyse des impacts, accompagnement migration, durcissement sécurité, refactorisation), n’hésitez pas à nous contacter.











