#!/bin/bash HOME_DIR=$HOME"/.KeepassXC" NOM_BASE="Snorky" EXT_BASE=".kdbx" TMP_DIR="tmp" NULL="/dev/null" DATE=$(date +"%d-%m-%y_%H-%M-%S") ROTATE=3 CHECKSUM_FICHIER="checksum.txk" # Fonction gestion des erreurs # function die () { case $1 in 1) echo -e "Le repertoire $HOME_DIR n'existe pas." echo -e "Modifier la variable HOME_DIR." exit 1 ;; 2) echo -e "Le process Keepassxc est en cours d'execution." echo -e "Veuillez le fermer et relancer le script." echo -e "ex: kill -9 $2" exit 2 ;; 3) echo -e "Erreur lors de la copie." exit 3 ;; 4) echo -e "La base $2 n'existe pas." exit 4 ;; esac } # Fonction de verification si keepass tourne. # function check_keepassxc () { for process in $(ls -dv /proc/[0-9]* 2> $NULL); do if grep -qiE "keepassxc$" $process/status 2> $NULL; then K_PID=$(echo $process | cut -d "/" -f3) die 2 $K_PID break fi done echo "Aucun process Keepass en cours d'execution." } # Fonction de verification du repertoire $HOME_DIR/tmp # function check_tmp () { if [ ! -d $TMP_DIR ]; then echo -e "Le repertoire tmp n'existe pas." echo -e "Creation du repertoire." mkdir $TMP_DIR else echo "Le repertoire tmp existe deja." fi } # Fonction de rotation des bases a sauvegarder dans le git. # Gestion du git add/remove dans un deuxieme temps. function base_rotation () { cd $HOME_DIR/$TMP_DIR for nb in $(seq 0 $(( $ROTATE - 1))); do if [ $(( $ROTATE - $nb )) -ne $ROTATE ]; then if [ -f "$(( $ROTATE - $nb ))_$NOM_BASE"* ]; then NOM_TMP=$(ls "$(( $ROTATE - $nb ))_$NOM_BASE"* \ | cut -d "_" -f2-) git mv $(( $ROTATE - $nb ))_$NOM_BASE* \ "$(( $ROTATE - $nb + 1 ))_$NOM_TMP" fi else NOM_TMP=$(ls "$(( $ROTATE - $nb ))_$NOM_BASE"* | cut -d "_" -f2-) git rm $(( $ROTATE - $nb ))_$NOM_BASE* git commit -m "Remove de $NOM_TMP" git push fi done } # Fonction de copie de la base avant de push sur le git # function copie_base () { cd $HOME_DIR cp $NOM_BASE$EXT_BASE $TMP_DIR/"1_$NOM_BASE-$DATE$EXT_BASE" git add tmp/1_* echo "Verification des HASH." HASH_BASE=$(md5sum $NOM_BASE$EXT_BASE | cut -d " " -f1) HASH_COPY=$(md5sum $TMP_DIR/"1_"* | cut -d " " -f1) echo -e "Hash de la base originale: \n"$HASH_BASE echo -e "Hash de la base copiee: \n"$HASH_COPY #if [ ${HASH_BASE} == 00000000000 ]; then if [ ${HASH_BASE} == ${HASH_COPY} ]; then echo -e "Les bases sont identiques." else die 3 fi } # Fonction de generation du fichier des checksums et de l'upload # sur gitea function git_upload () { cd $TMP_DIR echo > $CHECKSUM_FICHIER for nb in $(seq 1 $ROTATE); do md5sum ${nb}_* >> $CHECKSUM_FICHIER done md5sum $CHECKSUM_FICHIER >> $CHECKSUM_FICHIER git add * git commit -m "Backup base $DATE" git push } function main () { # Deplacement dans le home cd $HOME_DIR 2>$NULL || die 1 [ -e $NOM_BASE$EXT_BASE ] || die 4 $NOM_BASE$EXT_BASE # Verification que le process Keepassxc ne tourne pas # afin de ne pas corrompre la base lors de la copie # à chaud. check_keepassxc # Verification du répertoire tmp check_tmp # Rotation des bases base_rotation # Copie de la base et verification md5 copie_base # upload de la base sur gitea git_upload echo exit 0 } main