diff --git a/README.md b/README.md index 98d9217..74b17bf 100644 --- a/README.md +++ b/README.md @@ -63,4 +63,12 @@ Para realizar una copia de seguridad de sus configuraciones de desarrollador que $ cd $HOME/devs $ bin/profile_backup.sh -Nota: Solo utilice está función si realiza cambios a su configuración GIT, GPG o SSH. \ No newline at end of file +Nota: Solo utilice está función si realiza cambios a su configuración GIT, GPG o SSH. Esto creará un archivo zip en la carpeta $HOME/secure/backups (por defecto). En la carpeta de backups podrán existir múltiples archivo zip (uno por cada vez que se realizó un backup) y deberá un archivo gpg.secret que contedrá la contraseña encriptada para restaurar el backup. Si pierde o elimina el archivo de secretos la restauración no podrá ser realizada. El archivo de secretos solo será creado si no existe. Su contenido no debe ser modificado. Procuré no tener archivos ZIP que no correspondan a la contraseña vigente; ya que estos no podrán ser restaurados. + +#### Restaurando configuraciones del perfil del desarrollador + +Para poder restaurar el perfil de desarrollador de una copia de seguridad realice las siguientes operaciones: + + $ cd $HOME/devs + $ bin/profile_restore.sh + diff --git a/bin/lib/developers.lib b/bin/lib/developers.lib index d6d7d6d..0e60125 100644 --- a/bin/lib/developers.lib +++ b/bin/lib/developers.lib @@ -99,7 +99,7 @@ function gpg_backup_token() { } # FULL EXTENDED GNUGP BACKUP -function gpg_backup() { +function developer_backup() { local DB_BACKUP=$1 local BIN_CONFIG=$2 @@ -161,7 +161,7 @@ function gpg_backup() { # Copy full .gnugp for backup mkdir ${TMP_PATH}/.gnugp if [ $? -eq 0 ]; then - cp -rf $GNUGP_PATH/* ${TMP_PATH}/.gnugp + cp -rf $GNUGP_PATH/* ${TMP_PATH}/.gnugp/ rc=$? if [ $rc -ne 0 ] then @@ -173,7 +173,7 @@ function gpg_backup() { # Copy full .ssh for backup mkdir ${TMP_PATH}/.ssh if [ $? -eq 0 ]; then - cp -rf $HOME/.ssh/* ${TMP_PATH}/.ssh + cp -rf $HOME/.ssh/* ${TMP_PATH}/.ssh/ rc=$? if [ $rc -ne 0 ] then @@ -198,7 +198,7 @@ function gpg_backup() { # Comprimir el archivo de respaldo en un archivo ZIP protegido con contraseña BACKUP_FILE="${LOCAL_BACKUP}/gpg_${USER}_${TIMESTAMP}" - zip -r -P "${ZPASSWORD}" $BACKUP_FILE * + zip -qqr -P "${ZPASSWORD}" $BACKUP_FILE * .gnugp .ssh .gitconfig rc=$? if [ $rc -ne 0 ] then @@ -211,8 +211,8 @@ function gpg_backup() { } -# RESTORE .GNUGP PATH -function gpg_restore() { +# RESTORE PROFILE DEVELOPER LOCAL BACKUP +function developer_restore() { local BIN_CONFIG=$1 local BACKUP_ZIP=$2 @@ -231,26 +231,36 @@ function gpg_restore() { fi # Check if backup configuration file exists - if [ ! -f $BIN_CONFIG/$GPG_BACKUP_CFG ] + local LOCAL_BACKUP=$(dirname $BACKUP_ZIP) + if [ ! -f $LOCAL_BACKUP/$GPGP_BACKUP_SECRET ] then return 12 fi - local LOCAL_BACKUP=$HOME/$(cat < $BIN_CONFIG/$GPG_BACKUP_CFG) - - # Check if backup path exist - if [ -z "$LOCAL_BACKUP" ]; then - return 13 - fi - # Get secret backup ZPASSWORD=$(echo "$(cat < "${LOCAL_BACKUP}/$GPGP_BACKUP_SECRET")" | base64 -d) if [ -z "${ZPASSWORD}" ]; then return 14 fi - # Restore unzip full .gnugp path - unzip -qqo -P "$ZPASSWORD" "$BACKUP_ZIP" ".gnugp/*" -d $HOME + clear + + # Restore zip full .gnugp path + unzip -qqo -P "$ZPASSWORD" "$BACKUP_ZIP" ".gnugp"/* -d $HOME + rc=$? + if [ $rc -ne 0 ]; then + return $rc + fi + + # Restore zip full .ssh path + unzip -qqo -P "$ZPASSWORD" "$BACKUP_ZIP" ".ssh"/* -d $HOME + rc=$? + if [ $rc -ne 0 ]; then + return $rc + fi + + # Restore zip full .gitconfig file + unzip -qqo -P "$ZPASSWORD" "$BACKUP_ZIP" ".gitconfig" -d $HOME rc=$? if [ $rc -ne 0 ]; then return $rc diff --git a/bin/msg/developers.es b/bin/msg/developers.es index 99227ed..2efe197 100644 --- a/bin/msg/developers.es +++ b/bin/msg/developers.es @@ -13,17 +13,30 @@ gpmsg_000="INICIALIZAR GPG" -gpmsg_001="BACKUP GPG" +gpmsg_001="RESTAURAR BACKUP DE PERFIL" gpmsg_101="Desea inicializar la configuración de GPG?" -gpmsg_102="Inicialización de configuración GPG completada!" +gpmsg_102="Configuración GPG inicializada!" gpmsg_103="Plantilla de configuración GPG no existe!" -gpmsg_104="Desea realizar una copia de seguridad de GPG?" -gpmsg_105="Desea realizar copia de seguridad de las claves GPG?" +gpmsg_104="Desea realizar una copia de seguridad GPG?" +gpmsg_105="Desea realizar copia de seguridad para el desarrollador" gpmsg_106="Copia de seguridad de claves GPG completada!" gpmsg_107="Archivo de configuración GPG no fue encontrado!" gpmsg_108="Carpeta de copia de seguridad local no existe" -gpmsg_109="Contraseña para encriptación del archivo ZIP no fue suministrada" +gpmsg_109="Contraseña del archivo ZIP no fue suministrada" gpmsg_110="Base de Datos SQLITE3 no fue suministrada" gpmsg_111="Archivo de Base de Datos SQLITE3 no existe!" gpmsg_112="Carpeta temporal de Backup no fue suministrada" +gpmsg_113="Desea restaurar la copia de seguridad" +gpmsg_114="Restauración de copia de seguridad completada satisfactoriamente!" + +dvmsg_101_0="Versión" +dvmsg_101_1="Uso:" +dvmsg_101_2=" [--help] [--version]" +dvmsg_102="Descripción: Este bash script restaura una copia de seguridad de perfil de desarrollador" +dvmsg_103=" donde es argumento obligatorio y corresponde a la copia" +dvmsg_104=" de seguridad en formato zip." +dvmsg_105="Opciones:" +dvmsg_106=" --help Muestra este mensaje de ayuda." +dvmsg_107=" --version Muestra la versión del script." + diff --git a/bin/profile_backup.sh b/bin/profile_backup.sh index 744fbd7..68cb5aa 100755 --- a/bin/profile_backup.sh +++ b/bin/profile_backup.sh @@ -78,11 +78,11 @@ if [ $? -ne 0 ]; then exit 9 fi -# Backup de claves GPG -dialog_yesno "${gpmsg_105}" +# Profile DEveloper Backup +dialog_yesno "${gpmsg_105} $USER?" case ${result} in 0) - gpg_backup "$DB_GPG_PATH/$DB_GPG_FILE" "$BIN_HOME/$GPG_CONFIG_PATH" "$DATEBAK" "$GPG_DEFAULT_PATH" + developer_backup "$DB_GPG_PATH/$DB_GPG_FILE" "$BIN_HOME/$GPG_CONFIG_PATH" "$DATEBAK" "$GPG_DEFAULT_PATH" rc=$? case $rc in 0) diff --git a/bin/profile_restore.sh b/bin/profile_restore.sh new file mode 100755 index 0000000..3551d72 --- /dev/null +++ b/bin/profile_restore.sh @@ -0,0 +1,195 @@ +#!/bin/bash +# +# profile_restore.sh +# Modified: 2024/12/15 14:27:00 +# Derechos de Autor (C) [2024] [Mauro Rosero P. ] +# +# Este programa es software libre: usted puede redistribuirlo y/o modificarlo +# bajo los términos de la Licencia Pública Affero General de GNU tal como +# lo publica la Free Software Foundation, ya sea la versión 3 de la licencia, +# o (a su elección) cualquier versión posterior. +# +# Este programa se distribuye con la esperanza de que sea útil, +# pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de +# COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la +# Licencia Pública Affero General de GNU para obtener más detalles. +# +# Debería haber recibido una copia de la Licencia Pública Affero General +# junto con este programa. Si no la recibió, consulte . + +DEVSPATH=devs +BIN_HOME=$HOME/$DEVSPATH +BIN_MESG=bin/msg +BIN_LIBS=bin/lib +VERSION=0.98.0 + +# CHECK SHELL LANGUAGE +BIN_LANG=${LANG:0:2} + +# LOAD BASE BASH LIBRARY +source $BIN_HOME/$BIN_LIBS/base.lib +#baselib_test + +# LOAD CONSOLE BASH LIBRARY +source $BIN_HOME/$BIN_LIBS/console.lib +#consolelib_test + +# LOAD SQLITE3 BASH LIBRARY +source $BIN_HOME/$BIN_LIBS/sqlite.lib +#sqlitelib_test + +# LOAD DEVELOPERS BASH LIBRARY +source $BIN_HOME/$BIN_LIBS/developers.lib +#gpglib_test + +# Load head messages +load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head" + +# Load developers messages +load_messages $BIN_HOME $BIN_MESG $BIN_LANG "developers" + +# Function to display help message +function help() { + echo "$dvmsg_101_1 $0 $dvmsg_101_2" + echo "$dvmsg_101_0 $VERSION" + echo "$dvmsg_102" + echo "$dvmsg_103" + echo "$dvmsg_104" + echo "$dvmsg_105" + echo "$dvmsg_106" + echo "$dvmsg_107" +} + + +########### MAIN PROGRAM ########### + +# Set program title +title="$head_000 $head_002" +apps_title="${gpmsg_001}" + +# Check if dialog is not installed, exited! +command_installed "dialog" +if [ $? -ne 0 ] +then + display_devstools_header "${gpmsg_001}" + echo "${head_001}" + exit 200 +fi + +# Check if os is valid! +get_osname +if [ "${os_name}" == "${head_unknow}" ] +then + dialog_error_box "${head_error}" "${head_os_error}" + exit 3 +fi + +command_installed "zip" +if [ $? -ne 0 ]; then + dialog_error_box "${head_error}" "${head_zip}" + exit 9 +fi + +# Check for arguments option +help=false +version=false +update=false +while [[ $# -gt 0 ]]; do + case $1 in + --help) + help=true + shift + ;; + --version) + version=true + shift + ;; + *) + if [[ -z $BACKUP_ZIPFILE ]]; then + BACKUP_ZIPFILE="$1" + shift + else + help + exit 1 + fi + ;; + esac +done + +# Check to show help +if $help; then + help + exit 0 +fi + +# Check to show command version +if $version; then + display_devstools_header "" + echo "$0" + echo "${dvmsg_101_0} $VERSION" + exit 0 +fi + +# Check for empty project path +if [[ -z $BACKUP_ZIPFILE ]]; then + help + exit 1 +fi + +BASEZIPFILE=$(basename $BACKUP_ZIPFILE) + +# Developer Profile Restore +dialog_yesno "${gpmsg_113} $BASEZIPFILE?" +case ${result} in + 0) + developer_restore "$BIN_HOME/$GPG_CONFIG_PATH" "$BACKUP_ZIPFILE" + rc=$? + case $rc in + 0) + dialog_error_box "${head_info}" "${gpmsg_114}" + clear + exit 0 + ;; + 10) + dialog_error_box "${head_error}" "${gpmsg_107}" + clear + exit $rc + ;; + 11) + dialog_error_box "${head_error}" "${gpmsg_108}" + clear + exit $rc + ;; + 13) + dialog_error_box "${head_error}" "${gpmsg_109}" + clear + exit $rc + ;; + 14) + dialog_error_box "${head_error}" "${gpmsg_111}" + clear + exit $rc + ;; + 15) + dialog_error_box "${head_error}" "${gpmsg_112}" + clear + exit $rc + ;; + 18) + dialog_error_box "${head_error}" "${gpmsg_110}" + clear + exit $rc + ;; + *) + dialog_error_box "${head_error}" "${head_op_error} (${rc})" + exi $rc + ;; + esac + ;; + *) + dialog_error_box "${head_error}" "${head_op_error}" + ;; +esac + +# End Main Program +clear