[IMPROVED] profile_restore.sh permite restaurar copias de seguridad

- Se corrigió que se incluyerá correctamente .gitconfig .gnugp .ssh
- Otras correcciones menores
This commit is contained in:
Mauro Rosero P. 2024-12-15 23:54:28 -05:00
parent 8186e6612f
commit 120d112a70
Signed by: mrosero
GPG key ID: 83BD2A5F674B7E26
5 changed files with 251 additions and 25 deletions

View file

@ -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.
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

View file

@ -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

View file

@ -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="<developer zipfile> [--help] [--version]"
dvmsg_102="Descripción: Este bash script restaura una copia de seguridad de perfil de desarrollador"
dvmsg_103=" donde <developer zipfile> 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."

View file

@ -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)

195
bin/profile_restore.sh Executable file
View file

@ -0,0 +1,195 @@
#!/bin/bash
#
# profile_restore.sh
# Modified: 2024/12/15 14:27:00
# Derechos de Autor (C) [2024] [Mauro Rosero P. <mauro@roser.one>]
#
# 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 <https://www.gnu.org/licenses/>.
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