20240115 - Instalación Debian 12.9 con script


Índice:

      Leer antes de empezar

      Enlaces

      a) Notas para posteriores instalaciones

      b) Antes de empezar

         Configurar el script de instalación [REVISAR]

         Script: Tareas previas a la instalación

         Script: Copia de seguridad de HOME

         Aplicaciones Flatpak

         Shotwell - Respaldar y Restaurar

         Calibre  - Respaldar y Restaurar

      c) Instalación

         ¿Cómo crear un USB con la live ISO?

         Distribución de los discos duros

      d) Tras la instalación

         Script: Tareas posteriores a la instalación

         Configuraciones

         Copia de documentación y archivos

         Configurar trabajos de mantenimiento y backup de la información

         Instalar aplicaciones manualmente

         Aplicaciones al inicio (Crontab)

      e) información adicional

         Instalar y Configurar Flatpak - App,s flatpak

         Configurar fstab

         Impresoras

         Incluir usuario en el grupo sudo (*)

         Configurar FireFox

      f) Scrip de instalación de Debian 12


Leer antes de empezar  ⮴  

IMPORTANTE: Después de actualizar / Reinstalar, no realizar una sincronización

hasta haber finalizado de configurar correctamente el equipo.

Si la hacemos antes de la cuenta, el sincronizador eliminará

archivos/carpetas que no encuentre en la nueva instalación.


Leer el apartado Notas tras la instalación


Portátil ASUS VivoBook:

F12     ->

F2      -> Bios Setup

Enlaces  ⮴  

Debian images: installer images, live images, cloud images

Medios de instalación de Debian usando USB, CD, DVD

Old Debian releases on CD/DVD

link=https://www.kernel.org/The Linux Kernel Archives


a) Notas para posteriores instalaciones  ⮴  

En este apartado se recogen notas a tener en cuenta en futuras instalaciones.


b) Antes de empezar  ⮴  

Configurar el script de instalación [REVISAR]  ⮴  


  # Constantes


    K_APP_VERSION_SCRIPT="4.09.09"

    K_FECHA_SCRIPT="29/01/25"

    K_SO="Debian 12.9"


    K_PATH_SCRIPT="$(dirname "$(realpath "$0")")"

    K_NAME_SCRIPT="$(basename "$(realpath "$0")")"

    K_FULL_NAME_SCRIPT="$K_PATH_SCRIPT/$K_NAME_SCRIPT"


  # Variables


    # Carpeta donde se almacenan mis scripts

    g_folder_my_scripts="/script_juanp/myscript"


    # Lugar donde se realizará la copia de seguridad de HOME

    g_destino_backup_home="/mnt/wd/juanp/backup_home_seguridad"


    # Directorio de las aplicaciones AppImage

    g_folder_appimage="$HOME/AppImage"


    # Carpeta en la que se realizará la copia de la información.

    g_folder_copy="$HOME/temporal/2025_debian_12-9"


    # Carpeta $HOME - Para pruebas de se puede poner otra carpeta

    g_folder_home="$HOME"

      #g_folder_home="/home/juanp/Linux/instalaciones/provi"


    # Autofirma

    # https://www.dnielectronico.es/PortalDNIe/PRF1_Cons02.action?pag=REF_1112

    g_libpkcs11_dnie="$PWD/firma_electronica/libpkcs11-dnie_1.6.8_amd64.deb"

    # https://firmaelectronica.gob.es/Home/Descargas.htm

    g_autofirma="$PWD/firma_electronica/AutoFirma_1_8_3.deb"



  # Paquetes de software

    g_file_packages="$(mktemp tmp.XXXXXXXXX)"


      echo "cifs-utils"

      echo "keepassxc"

      echo "synaptic"

      echo "cups"

      echo "gufw"

      echo "rsync"

      echo "exiftool"

      echo "clamtk"

      echo "imagemagick"

      echo "gparted"

      echo "flatpak"

      echo "gnome-software-plugin-flatpak"

      echo "libcupsimage2"

      echo "telegram-desktop"

      echo "rclone"

      echo "fzf"

      echo "deja-dup"

    } > "$g_file_packages"

    # Paquetes para la firma digital


      echo "pcsc-tools"

      echo "pcscd"

      echo "pinentry-gtk2"

      echo "libccid"

    } >> "$g_file_packages"  


Script: Tareas previas a la instalación  ⮴  

Ejecutar el script de instalación y seleccionar la opción de tareas previas

a la instalación.

Copiar la información guardada en g_folder_copy en un USB que se usará tras

la instalación del SO.


Script: Copia de seguridad de HOME  ⮴  

Ejecutar el script de instalación y seleccionar la opción de copia de segu-

ridad de la carpeta personal.

La copia se realizará en en NAS WD, en la ubicación indicada en

      g_destino_backup_home


Aplicaciones Flatpak  ⮴  

Listar las aplicaciones flatpak instaladas:

      flatpak list --app


La configuración de estas aplicaciones se guarda en:

      $HOME/.var/app


La cache no es necesario copiarla.


Tener presente la versión de las aplicaciones.


Shotwell - Respaldar y Restaurar  ⮴  

Tomar nota de la vesión de Shotwell instalada, no podrá restaurarse en en

una versión anterior.


Copiar la carpeta que contiene las fotografía "Ubicación de la colección" en

la nueva ubicación.

Editar - Preferencias - Colección


Copiar la configuración de Shotwell en la nueva ubicación.

Shotwell instalado con Flatpak:

/home/juanp/.var/app/org.gnome.Shotwell

Shotwell instalado desde debian:

/home/juanp/.local/share/shotwell


La carpeta cache no es necesaria.


Calibre  - Respaldar y Restaurar  ⮴  

Si se ha instalado desde flatpak .... (Ver Shotwell)


c) Instalación  ⮴  

Para realizar la instalación se una imagen live híbrida con gnome.

Imagen ISO híbrida Debian con Gnome"


¿Cómo crear un USB con la live ISO?  ⮴  

Con Fedora Media Writer (flatpak) / Raspberry Pi Imager


Distribución de los discos duros  ⮴  

Iniciar el equipo con el USB Live de Debian, instalar gparted y realizar la

partición del disco adecuada. Para ello tener en cuenta:


.- La recopilación de información se guarda de forma automática la infoma-

ción de los discos duros generadas por los comandos siguientes un archivo.


          lsblk -f -m

          df -h

Archivo: ./discos/info_discos.txt


.- La proporcionada por GParted.


Emplear flatpak incrementa el uso del raíz (/), por lo que se incrementa el

tamaño del raiz (/) (50GB) y /var (50GB) se coloca en una partición aparte.


En el caso de que no se vaya a modificar el tamaño de /home puede ser recomen-

dable eliminar todas las carpetas ocultas (que tienen información de configu-

ración) y usarla durante la instalación sin formatearla; de esta forma no ha-

bría que hacer la copia del backup de /home.


IMPORTANTE: Hacer una copia en el disco duro portátil del /home


d) Tras la instalación  ⮴  

Script: Tareas posteriores a la instalación  ⮴  

Ejecutar el script de instalación y seleccionar la opción de tareas posterio-

res a la instalación.

Configuraciones  ⮴  

.- Revisar configuración Contraseñas - SeaHorse

Comprobar que los permisos de $HOME/.gnupg sean los correctos.

        ls -l -A ~ | grep gnupg && ls -l -A ~/.gnupg


        drwx------  4 juanp juanp  4096 ene 25 18:05 .gnupg

        total 36

        drwx------ 2 juanp juanp 4096 ene 22 19:23 crls.d

        drwx------ 2 juanp juanp 4096 ene 22 19:23 private-keys-v1.d

        -rw------- 1 juanp juanp 9611 ene 22 19:23 pubring.kbx

        -rw------- 1 juanp juanp 7325 ene 22 19:23 pubring.kbx~

        -rw------- 1 juanp juanp  600 ene 22 19:23 random_seed

        -rw------- 1 juanp juanp 1200 ene 22 19:23 trustdb.gpg


El script

debería haberlo hecho.

Si no es así:

          chown -R $(whoami) ~/.gnupg/

          find ~/.gnupg -type f -exec chmod 600 {} \;

          find ~/.gnupg -type d -exec chmod 700 {} \;


.- Comprobar si alguna de las app que se han instalado con flatpak ya lo

estuvieran desde los repositorios de Debian, en cuyo caso sería conve-

niente desintalarla.

          # Listar las app instaladas con flatpak

          flatpak list --app


Shotwell seguramente esté instalada desde los respositorios de Debian,

para desintalarla:

          sudo apt-get --purge remove shotwell


.- Configurar escritorio


..- Configurar el tema: Retoques - Apariencia

...- Activar botón minimizar


..- Nautilus preferencias

...- Abrir elementos con una sola pulsación

...- Listas: Tipo detallado tras el tamaño

...- Tabulador 2 - Espacios


..- Configurar extensiones:

...- Dash to dock

...- Todo.txt(Lista de tareas sincronizadas con el movil)

Ubicación archivo de tareas: /home/juanp/Dropbox/Tareas


..- Configurar aplicaciones .desktop

Los archivos se habrán copiado en ~/.local/share/applications/

Hay que revisar en los scripts que el archivo que se ejecute sea

accesible y al igual que el icono.


..- Configurar atajos de teclado

...- Configuración - Teclado

Abrir Terminal - Crtl + T - gnome-terminal


..- Configurar avatar usuario


.- Revisar funcionamiento de rclone.

Sincronizar desde la nube.

ATENCIÓN: DESDE la nube opción 0

          mkdir ~/dropbox &&

          mkdir ~/nextcloud &&

          ~/script_juanp/manto/t_sync_rc_cloud.sh


.- Revisar configuración de FireFox [PENDIENTE]


.- Revisar configuración del cortafuegos: gufw

Restaurar el perfil que se hubiera guardado.


.- Configurar Editor

.- Tabulador espacio

.- Margen derecho 80

.- Espacio por tabulado: 2


.- Configurar Transmission

Copiar del backup la carpeta $HOME/.config/transmission


.- Firma digital

Ver "guia_instalar_firma_electronica.txt"

Comprobar el funcionamiento de la app Autofirma y en el navegador

Para comprobar el funcionamiento de Autofirma en el navegador:

https://www.sededgsfp.gob.es/es/Paginas/TestAutofirma.aspx


.- Configurar impresoras desde el panel de control.

Hacer la búsqueda con las IP de las impresoras.

Impresora ML-1865W - 00:15:99:81:1B:C2 - 192.168.0.159 (fija)

Impresora HP 4130e - 14:CB:19:F2:4B:52 - 192.168.0.45 (fija)

(Ver información adicional - impresoras)


.- Comprobar funcionamiento scaner

Seleccionar el eSCLHP DeskJet 4100 series [F24B25]


.- Configurar cuentas online


.- Configurar Wifi


.- Configurar y restaurar Evolution


.- Configurar Code - OSS


.- Configurar Shotwell

Tomar nota de la vesión de Shotwell instalada, no podrá restaurarse en en

una versión anterior.

Copiar la carpeta que contiene las fotografía "Ubicación de la colección" en

la nueva ubicación.

Editar - Preferencias - Colección

Copiar la configuración de Shotwell en la nueva ubicación.

Shotwell instalado con Flatpak:

/home/juanp/.var/app/org.gnome.Shotwell

Shotwell instalado desde debian:

/home/juanp/.local/share/shotwell

La carpeta cache no es necesaria.


.- Configurar Calibre

Si se ha instalado desde flatpak ....


.- Instalar y configurar el acceso a MEGA

MEGA


Copia de documentación y archivos  ⮴  

Recuperar la información.

Poner iconos personales.


Configurar trabajos de mantenimiento y backup de la información  ⮴  

.- Configurar trabajos de copias de seguridad


..- Comprobar funcionamiento backup a WD NAS

inc_rsync.sh: Activar el modo Simulación


..- Configurar Respaldos / Deja-dup

Importar la configuracion dconf que se ha guardado.


Instalar aplicaciones manualmente  ⮴  

.- nil


Aplicaciones al inicio (Crontab)  ⮴  

Incluir en crontab (sudo crontab -e) las líneas que ha guardado en el USB el

script de instalación.


../datos/crontab/crontab.txt

../datos/crontab/sudo_crontab.txt


IMPORTANTE: Después de actualizar / Reinstalar : No realizar una sincroniza-

ción hasta haber finalizado de configurar correctamente el

equipo.

Si la hacemos antes de la cuenta, el sincronizador eliminará ar-

chivos/carpetas que no encuentre en la nueva instalación.


e) información adicional  ⮴  

Instalar y Configurar Flatpak - App,s flatpak  ⮴  

Información:

Debian Quick Setup

Getting Started

Flatpak Command Reference


Instalar y Configurar Flatpak

        sudo apt install flatpak

        sudo apt install gnome-software-plugin-flatpak

        sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

        sudo reboot


App,s flatpak

        # listar app,s instaladas:

        flatpak list


        # ubicación del usuario de las app,s      

        ls -l ~/.var/app


Configurar fstab  ⮴  

La configuración se realiza desde el script de instalación.


Lo siguiente es información para hacerlo manualmente.


Archivo: /etc/fstab


Instalar cifs-utils, necesario para montar carpetas del NAS WD:

      sudo apt install cifs-utils


.- Crear en /mnt las carpetas donde se montarán las carpetas

..- HDD: Disco duro mecánico

...- /mnt/hdd

..- Remotas

...- NAS-WD

....- juanp          NAS-WD: /mnt/wd/juanp

....- multimedia     NAS-WD: /mnt/wd/multimedia

....- marisa         NAS-WD: /mnt/wd/marisa


El conjunto de comandos necesarios sería el siguiente:

        sudo mkdir /mnt/hdd &&

        sudo chown juanp:juanp  /mnt/hdd &&

        sudo chmod 770  /mnt/hdd &&

        sudo mkdir /mnt/wd &&

        sudo mkdir /mnt/wd/juanp &&

        sudo mkdir /mnt/wd/multimedia &&

        sudo mkdir /mnt/wd/marisa &&

        sudo chown -R juanp:juanp /mnt/wd &&

        sudo chmod -R 770  /mnt/wd 


.- En /etc/fstab incluir las líneas necesaria para montar estas carpetas


Crear una copia de seguridad del fstab

          cp /etc/fstab /home/juanp/Documentos/fstab_org


Copiar el archivo que contiene las credenciales para acceder al NAS WD guar-

dado previamente:

          sudo cp .credenciales /root


Obtener el UUID del HDD que se va a montar en /mn/hdd, para obtener el UUID

de los discos del sistema se usa:

          sudo blkid


Abrir la copia del fstab que se ha guardado y copiar lo necesario al fstab

del sistema. Son las líneas necesarias para montar algunas carpetas del NAS WD.


           # Disco WD - /juanp

          //192.168.0.158/juanp /mnt/wd/juanp cifs credentials=/root/.credenciales,gid=juanp,uid=juanp,iocharset=utf8,rw


          # Disco WD - /multimedia

          //192.168.0.158/Multimedia /mnt/wd/multimedia cifs credentials=/root/.credenciales,gid=juanp,uid=juanp,iocharset=utf8,rw


          # Disco WD - /marisa

          //192.168.0.158/marisa /mnt/wd/marisa cifs credentials=/root/.credenciales,gid=juanp,uid=juanp,iocharset=utf8,rw       


Editar fstab:

          sudo nano /etc/fstab


Para probar si se hace bien usar:

            sudo umount -a

            sudo mount -a


Cerrar y abrir sesión.


Impresoras  ⮴  

Instalar, si no se ha hecho ya, CUPS (sudo apt-get install cups)

Necesita reiniciar.


Buscar las impresoras desde el menú de impresoras.


Una vez instalada seleccionar en configuración - Detalles de impresora

los controladores adecuados.


Si no se encuentra instalar los controladores descargados.


..- Instalación de la impresora ML1865W:


Descargar samsung Controlador para impresora.

Controlador ML1665W

(Los últimos usados están en : /home/juanp/Documentos/Imp_ML1865W))


Descomprimir (OJO: en un disco con sistema de archivos linux, no

FAT32, FAT 16 o NTFS, porque entonces los script no tiene permisos

de ejecución y fallan)

      sudo sh install.sh

Acuerdo de licencia: Yes (Aparce tras el apartado 10)

Yes to configure firwall


Encender impresora


Menú impresora -> Añadir impresora


..- Instalación de la impresora/scaner HP 4130e


Para configurar la conexión con el rotuer usar la aplicación de android

HP Smart


MAC impresora: 14:CB:19:F2:4B:52


Manual HP4130e


Incluir usuario en el grupo sudo (*)  ⮴  

      sudo su

      sudo usermod -a -G sudo juanp

      groups juanp

El último comando se emplea para comprobar que está incluido.


(*) Command not found (Orden no encontrada ) con «su» en Debian  10 ‘buster'

Información


En función del tipo de instalación que se realice nos podemos encontrar en

dos situaciones distintas.


Al hacerla con el instalador normal, crea un usuario normal y luego el root

para el que pide la contraseña. En este caso hay que incluir al usuario en

el grupo sudo (0-1).


Cuando se hace con un live CD y se realiza desde el nuevo SO iniciado con

el live CD, crea un usuario y lo incluye en el grupo sudo, pero no solicita

contraseña para el root. Al no tener la certeza de cómo configura al root,

se le pone contraseña al usuario root (0-2).


() Incluir usuario en el grupo sudo:


Iniciar sesión en el terminal con: su -  (ojo con guión *)

          su -

Ejecutar:

          usermod -a -G sudo juanp

Reiniciar

Ver los grupos de un usuario:

          cat /etc/group | grep juanp | cut -d: -f1

          groups juanp

Ver los grupos

          cut -d : -f 1 /etc/group

Añadir usuario al grupo sudo

          usermod -a -G sudo juanp


* El guión tiene dos efectos:

1) cambia del directorio actual al directorio de inicio del nuevo

usuario (por ejemplo, a / root en el caso del usuario root)

iniciando sesión como ese usuario

2) cambia las variables ambientales a las del nuevo usuario según

lo dicte su ~ / .bashrc. Es decir, si el primer argumento para

su es un guión, el directorio y el entorno actuales cambiarán a

lo que se esperaría si el nuevo usuario hubiera iniciado sesión

en una nueva sesión (en lugar de simplemente asumir una sesión

existente).


() Poner contraseña al usuario root (su)


Entrar como root (superusuario)

          sudo su

Se nos pedirá la contraseña de usuario, que es la misma que usamos pa-

ra iniciar sesión en el equipo.

De esta forma estaremos conectados como root.

Si queremos podemos dar una contraseña al usuario root utilizando:

          sudo passwd root

Salimos del superusuario con el comando:

          exit


Configurar FireFox  ⮴  

Configuración Nueva


.- Si se hubiera iniciado previamente, eliminar la configuración local.

/home/juan/.mozilla

.- Desconectar la red.

.- Iniciar FireFox

.- about:config

..- privacy.trackingprotection.enabled (Rastreo)

(Esta habría que verlo)

..- browser.privatebrowsing.autostart (Privada)

.- Buscador: DuckDuckGo

..- Preferencias - Search - Default Search Engine

.- Cerrar Firefox - Concectar red - Iniciar FireFox

.- Cambiar Idioma:

..- Preferencias - Language

..- Preferencias - Buscador

.- Activar el Modo solo-HTTPS en todas las ventanas (sustituye a HTTPS

Everywhere)

.- Activar DoH (DNS sobre HTTPS)

Ajuste - Configuración de red - Activa DNS sobre HTTPS

Proveedor - Predeterminado (Cloudflare)

.- Activar ESNI

network.dns.echconfig.enabled       -> true

network.dns.use_https_rr_as_altsvc  -> true

ESIN-Mozilla

Acticar DoH y ESNI

.- Reiniciar

.- Extensiones

..- Integración con GNOME Shell (https://extensions.gnome.org/)

..- NoScript

..- Disconnect

.- Cargar marcadores

.- Configurar página de incio

file:///home/juanp/Documentos/personalpage/main.html


Importar perfiles


Este procedimiento se ha comprobado para realizarlo entre la misma versión

del navegador.


.- Copiar los perfiles previamente guardados en la carpeta:

/home/juanp/.mozilla

cp -r "$HOME"/.mozilla/* /destino/...


.- Iniciar FireFox en el nuevo equipo y acceder al gestor de perfiles:

about:profiles


.- Crear tantos perfiles como sea necesario en el equipo destino vincu-

landolos con las correpondientes carpetas de perfiles que se han co-

piado.


f) Scrip de instalación de Debian 12  ⮴  

  #!/bin/bash



  # Información:


    # Copia en el directorio que se indica en la configuración la información y da-

    # tos necesarios para una nueva instalación del Sistema Operativo.

    # Este proceso en parte está automatizado y otra parte requiere que la infor-

    # mación la cree el usuario.


  # Notas:




  # Configuración


    # Constantes


      K_APP_VERSION_SCRIPT="4.09.09"

      K_FECHA_SCRIPT="29/01/25"

      K_SO="Debian 12.9"


      K_PATH_SCRIPT="$(dirname "$(realpath "$0")")"

      K_NAME_SCRIPT="$(basename "$(realpath "$0")")"

      K_FULL_NAME_SCRIPT="$K_PATH_SCRIPT/$K_NAME_SCRIPT"


    # Variables


      # Carpeta donde se almacenan mis scripts

      g_folder_my_scripts="/script_juanp/myscript"


      # Lugar donde se realizará la copia de seguridad de HOME

      g_destino_backup_home="/mnt/wd/juanp/backup_home_seguridad"


      # Directorio de las aplicaciones AppImage

      g_folder_appimage="$HOME/AppImage"


      # Carpeta en la que se realizará la copia de la información.

      g_folder_copy="$HOME/temporal/2025_debian_12-9"


      # Carpeta $HOME - Para pruebas de se puede poner otra carpeta

      g_folder_home="$HOME"

        #g_folder_home="/home/juanp/Linux/instalaciones/provi"


      # Autofirma

      # https://www.dnielectronico.es/PortalDNIe/PRF1_Cons02.action?pag=REF_1112

      g_libpkcs11_dnie="$PWD/firma_electronica/libpkcs11-dnie_1.6.8_amd64.deb"

      # https://firmaelectronica.gob.es/Home/Descargas.htm

      g_autofirma="$PWD/firma_electronica/AutoFirma_1_8_3.deb"



    # Paquetes de software

      g_file_packages="$(mktemp tmp.XXXXXXXXX)"


        echo "cifs-utils"

        echo "keepassxc"

        echo "synaptic"

        echo "cups"

        echo "gufw"

        echo "rsync"

        echo "exiftool"

        echo "clamtk"

        echo "imagemagick"

        echo "gparted"

        echo "flatpak"

        echo "gnome-software-plugin-flatpak"

        echo "libcupsimage2"

        echo "telegram-desktop"

        echo "rclone"

        echo "fzf"

        echo "deja-dup"

      } > "$g_file_packages"

      # Paquetes para la firma digital


        echo "pcsc-tools"

        echo "pcscd"

        echo "pinentry-gtk2"

        echo "libccid"

      } >> "$g_file_packages"



    # Paquetes de software Flatpak

      g_file_packages_flatpak="$(mktemp tmp.XXXXXXXXX)"


          echo "org.gimp.GIMP"

          echo "org.gnome.Shotwell"

          echo "com.visualstudio.code-oss"

          echo "com.calibre_ebook.calibre"

          echo "org.videolan.VLC"

        } > "$g_file_packages_flatpak"



  # Variables globales de gestión interna (no configuración)


    # Número de errores que se han producido

    g_num_error=0


    # Controla si ha llegado a su fin el script; se usa en info_status_error

    g_fin_script=0


    # Archivo log de errores

    g_log_errores=$(mktemp)



  # Funciones auxiliares

    function _ini_copia(){

      echo "------------------------------------------------------------------------"

      echo ""

      echo "Copiando:"

      echo "  .- Informacion: $1"

      echo "  .- Destino    : $2"

      echo ""


    function _fin_copia(){

      echo " > OK"


    function _crear_folder(){

      if [[ ! -d $1 ]]; then

        mkdir -p "$1"

        if [[ ! $? = 0 ]]; then

          _error "No se ha podido crear el directorio $1"

          exit 1

        fi

        echo "  Creando [ $1 ]  > OK"

      fi


    function _error(){

      echo "Error: $1"

      echo "Error: $1" >> "$g_log_errores"

      ((g_num_error ++))

      if ! _yes_no "¿Continuar?" ""; then

        exit 1

      fi


    function _yes_no(){

      local l_r=1

      while true; do

        echo ""

        if [[ -n "$2" ]]; then

          echo "$2"

        fi

        read -r -N 1 -p "$1 (Y/N) " yn

        echo " -> $yn"

        case $yn in

          [Yy]* ) l_r=0;break;;

          [Nn]* ) l_r=1;break;;

          * ) echo "La respuesta ha de ser yes o no.";;

        esac

      done

      return $l_r


    function _copy_file() {

      local l_file_origen="$1"

      local l_file_destino=""

      local l_file_rename=""

      local l_destino="$2"

      local l_sudo="$3"

      local l_i=1


      echo "-----------------------------------------------------------------------------------------"

      echo "Copiando:"

      echo "  .- Archivo: $l_file_origen"

      echo "  .- Destino: $l_destino"


      if [[ ! ${l_destino: -1} = "/" ]]; then

        l_origen="$l_destino"/

      fi


      l_file_destino="$l_origen$(basename "$l_file_origen")"


      if [[ -f "$l_file_destino" ]]; then

        l_file_rename="${l_file_destino%.*}.bck_$l_i"

        while [[ -f "$l_file_rename" ]]; do

          ((l_i++))

          l_file_rename="${l_file_destino%.*}.bck_$l_i"

        done

        echo "  El archivo \"$(basename "$l_file_origen")\" existe en el destino"

        echo "  Se renombra como: $l_file_rename"

        mv "$l_file_destino" "$l_file_rename"

      fi


      if [[ "$l_sudo" -eq 0 ]] && [[ ! -f "$l_file_origen" ]]; then

        _error "Error no existe el archivo $l_file_origen"

      else

        _crear_folder "$l_destino"

        if [[ "$l_sudo" -eq 0 ]]; then

          if ! cp "$l_file_origen" "$l_destino"; then

            _error "No se ha podido copiar $l_file_origen en $l_destino"

          else

            echo " > OK"

          fi

        else

          if ! sudo cp "$l_file_origen" "$l_destino"; then

            _error "No se ha podido copiar $l_file_origen en $l_destino"

          else

            echo " > OK"

          fi

        fi

      fi


    function _copy_full_folder(){

      # Copia el contenido del origen -no la carpeta en sí misma- en el destino; si

      # no existe el destino lo crea.

      # Tanto destino como origen deben termina en contrabarra.


      local l_origen=$1

      local l_destino=$2


      if [[ ! ${l_origen: -1} = "/" ]]; then

        l_origen="$l_origen"/

      fi

      if [[ ! ${l_destino: -1} = "/" ]]; then

        l_destino="$l_destino"/

      fi


      echo "-----------------------------------------------------------------------------------------"

      echo "Copiando:"

      echo "  .- Directorio: $l_origen"

      echo "  .- Destino   : $l_destino"

      echo ""


      if [[ ! -d "$l_origen" ]]; then

        _error "No existe el directorio [ $l_origen ]"

      elif [[ -z "$(ls -A $l_origen)" ]]; then

        _error "El directorio [ $l_origen ] está vacio"

      else

        _crear_folder "$l_destino"

        # !OJO¡: El asterisco en "$l_origen"* debe estar fuera de las comillas.

        if ! cp -r "$l_origen"* "$l_destino"; then

          _error "No se ha podido copiar $l_origen en $l_destino"

        else

          echo " > OK"

        fi

      fi


    function _tar_comprimir(){

      # Comprimir un archivo tar .GZ sin usar la ruta absoluta en la compresion


      # 1 -> Nombre y path del archivo comprimido que se creara.

      # 2 -> Path completo de la carpeta a comprimir.

      local l_ok=1


      echo "-----------------------------------------------------------------------------------------"

      echo "Comprimiendo: "

      echo " .- Origen : $2"

      echo " .- Destino: $1"

      echo ""


      # Comprobar si ya existe el archivo comprimido que se va a crear.

      # Si existe se informa y da opción a recrearlo o no.

      if [[ -f "$1" ]]; then

        echo "Ya existe el archivo [ $1 ]"

        echo ""

        stat "$0"

        echo ""

        if ! _yes_no "¿Crear una nueva versión del archivo?" "";then

          l_ok=0

        fi

      fi


      if [[ $l_ok -eq 1 ]]; then

        _crear_folder "$(dirname "$1")"


        if [[ ! -d "$2" ]]; then

          _error "No existe el directorio $2"

          retrun 1

        else

          # https://www.baeldung.com/linux/tar-exclude-files-directories

          if ! tar -czf "$1" -C"$2" .; then

            _error "No se ha podido crear el archivo tar"

            return 1

          else

            echo " > OK"

            return 0

          fi

        fi

      fi


    function _tar_descomprimir(){

      # Descomprimir un archvio tar .GZ indicando el directorio de destino

      # 1 -> Nombre y path del archivo a descomprimir

      # 2 -> Path completo de la carpeta donde se descomprimira.

      _crear_folder "$2"


      if [[ ! -f "$1" ]]; then

        _error "No existe el archivo $2"

        retrun 1

      else

        echo "-----------------------------------------------------------------------------------------"

        echo "Descomprimiendo: "

        echo " .- Origen : $1"

        echo " .- Destino: $2"

        _crear_folder "$2"

        if ! tar -xzf "$1" -C"$2"; then

          _error "No se ha podido descomprimir el archivo tar"

          return 1

        else

          echo " > OK"

          return 0

        fi

      fi


    function _check_installed() {

      if dpkg -s $1 &> /dev/null; then

      #if [ $? -eq 0 ]; then

        return 0

      else

        return 1

      fi


    function _mkdir() {

      echo "Creando directorio $1"

      if [[ -d "$1" ]]; then

        echo "Ya existe el directorio: $1"

      else

        if [[ "$2" -eq 1 ]]; then

          if mkdir "$1"; then

            _fin_copia

          else

            _error "No se ha podido crear el directorio $1"

          fi

        else

          if sudo mkdir "$1"; then

            _fin_copia

          else

            _error "No se ha podido crear el directorio $1"

          fi

        fi

      fi



  # Salida del script

    # shellcheck disable=SC2317  # Don't warn about unreachable commands in this function

      function _info_status_error() {

        if [[ $g_fin_script -eq 0 ]]; then

          echo ""

          echo "ERROR: Se ha producido un error no recuperable."

          echo "       El script se ha interrumpido."

          echo ""

          echo "Errores:"

          cat "$g_log_errores"

        else

          if [[ $g_num_error -gt 0 ]]; then

            echo ""

            if [[ $g_num_error -eq 1 ]]; then

              echo "ATENCIÓN: Se han producido $g_num_error error."

            else

              echo "ATENCIÓN: Se han producido $g_num_error errores."

            fi

            echo ""

            echo "Errores:"

            cat "$g_log_errores"

          else

            echo ""

            echo "OK: No se han producio errores"

            echo ""

          fi

        fi


      # Esta funcion es la que se invocará al salir del script.

      # shellcheck disable=SC2317  # Don't warn about unreachable commands in this function

      function _trap_exit(){

        _info_status_error

        echo ""

        echo "Presiona cualquier tecla para finalizar..."

        read -r -n 1 -s  # -n 1 espera una sola tecla, -s oculta la entrada

        rm -f "$g_log_errores"

        rm -f "$g_file_packages"

        rm -f "$g_file_packages_flatpak"


      trap _trap_exit EXIT



  # Procedimientos y funciones


    # Copia de seguridad $HOME

      function _backup_home(){

        echo "-------------------------------------------------------------------------------"

        echo "Backup de $HOME"

        echo ""

        echo "  .- Origen : $HOME"

        echo "  .- Destino: $g_destino_backup_home"

        echo ""


        if _yes_no "¿Realizar simulación de la copia?" ""; then

          _crear_folder "$g_destino_backup_home"

          echo "Simulación: Copia de seguridad de $HOME"

          echo "Se almacena la información de la copia en el archivo simul_copia.txt"

          if ! rsync -avz --dry-run --exclude .cache "$HOME" "$g_destino_backup_home" > simul_copia.txt; then

            _error "La simulación no se ha realizado correctamente."

          else

            echo ""

            echo "Se ha realizado una simulación de la copia de seguridad de home"

          fi

        fi


        if _yes_no "¿Realizar la copia?" ""; then

          _crear_folder "$g_destino_backup_home"

          echo "Iniciada Copia de seguridad de $HOME"

          if ! rsync -avz --exclude .cache "$HOME" "$g_destino_backup_home"; then

            _error "La copia no se ha realizado correctamente"

          else

            echo ""

            echo "Finalizada Copia de seguridad de $HOME"

          fi

        fi

        g_fin_script=1

        exit 0



    # Configurar aplicaciones

      function _config_apps(){

          local l_str=""


          # Configuración fzf

          echo "------------------------------------------------------------------------"

          if dpkg -l | grep "fzf" &> /dev/null; then

            l_str="source /usr/share/doc/fzf/examples/key-bindings.bash"

            if cat "$g_folder_home/.bashrc" | grep "$l_str" &> /dev/null;then

              echo "El .bashrc contiene las linea necesaria para usar fzf."

              if _yes_no "¿Listar el contenido de .bashrc?" ""; then

                cat "$g_folder_home/.bashrc"

              fi

            else

              if _yes_no "¿Configurar [ fzf ] ?" ""; then


                  echo ""

                  echo "$l_str"

                } >> "$g_folder_home/.bashrc"

              fi

            fi

          fi





    # Instalación controladores impresora Samsung ML1865W

      function _instalar_impresora_ML1865() {

          local file_imp


          echo "-------------------------------------------------------------------------------"

          echo "Configuración impresora ML1865W"

          echo ""


          # Comprobar si existe el archivo con los controladores

          #file_imp=$(find ./impresoras/uld*)

          file_imp=$(find "$K_PATH_SCRIPT"/impresoras/uld*)

          if [[ "$file_imp" = "" ]]; then

            _error "No se encuentra el archivo con los controladores en $K_PATH_SCRIPT/impresoras"

          fi


          if _yes_no "¿Instalar y configurar la impresora ML1865W?" ""; then


            # Comprobar que están instalados los paquetes necesarios

              if ! _check_installed cups; then

                _install_pk "cups"

              fi

              if ! _check_installed "libcupsimage2"; then

                _install_pk "libcupsimage2"

              fi


            # Instalación controladores de la impresora

              echo "Instalación controladores impresora Samsung ML1865W"

              if ! _tar_descomprimir "$file_imp" "$HOME"/Documentos/impresoras/ml; then

                _error "No ha podido descomprimirse los controladores impresora Samsung ML1865W"

              fi

              if ! sudo bash "$HOME/Documentos/impresoras/ml/uld/noarch/package_install.sh" "printer-meta"; then

                _error "No se ha instalado correctamente los controladores de la impresora Samsung ML1865W"

              else

                _fin_copia

              fi

              sudo rm -rf "$HOME"/Documentos/impresoras

          fi



    # Configurar fstab


      # Se estructura siguiente:


      # .- NAS-WD

      #     ..- juanp                   NAS-WD: /mnt/wd/juanp

      #     ..- multimedia              NAS-WD: /mnt/wd/multimedia

      #     ..- marisa                  NAS-WD: /mnt/wd/marisa


      # .- NextCloud (NO se configura)

      #     ..- nextcloud_jp/nc_opsone

      #          -> shared02.opsone-cloud.ch    => /mnt/nextcloud_jp/nc_opsone

      #         Este punto no se automonta, será montado y usado por el script de

      #         sincronización /home/juanp/manto/t_sync_nextcloud.sh


      function _config_fstab(){


        local l_backup=""

        local l_file_tmp

        #local l_nextcloud


        l_backup="$(dirname "$0")/backup"


        echo "-------------------------------------------------------------------------------"

        echo "Configuración /etc/fstab"

        echo ""

        if cat /etc/fstab | grep "# Disco WD - /juanp" &> /dev/null;then

          echo "El fstab parece que ya contiene las líneas para configurar los discos externos."

          if _yes_no "¿Listar el contenido de /etc/fstab?" ""; then

            cat /etc/fstab

          fi

        fi


        if _yes_no "¿Configurar /ect/fstab?" ""; then

          # Cuenta nextcloud

          #l_nextcloud=0

          #if _yes_no "¿Configurar la cuenta nextcloud?" ""; then

          #  l_nextcloud=1

          #fi


          # Comprobar que están instalados los paquetes necesarios

            if ! _check_installed cifs-utils; then

              _install_pk "cifs-utils"

            fi

            #          if [[ "$l_nextcloud" -eq 1 ]]; then

            #            if ! _check_installed "davfs2"; then

            #              _install_pk "davfs2"

            #            fi

            #          fi


          # Crear copia de seguridad de fstab

            echo "Creando copia de seguridad de fstab"

            _crear_folder "$l_backup"

            if ! cp /etc/fstab "$l_backup"/fstab.bck; then

              _error "No se ha podido crear la copia de seguridad de fstab"

              exit 1

            else

              _fin_copia

            fi


          # Crear la estructura de directorios y asignarles los permisos correctos.

            echo "Creando estructura de directorios en /mnt y asignando permisos"

            echo " .-  /mnt/wd"

            #if [[ "$l_nextcloud" -eq 1 ]]; then

            #  echo " .-  /mnt/nextcloud_jp"

            #fi


            # WD

              if [[ -d "/mnt/wd" ]]; then

                echo  "  .-El directorio /mnt/wd ya existe"

              else

                _mkdir "/mnt/wd" 0

                _mkdir "/mnt/wd/juanp" 0

                _mkdir "/mnt/wd/multimedia" 0

                _mkdir "/mnt/wd/marisa" 0

                _mkdir "/mnt/wd/invitado" 0

              fi

              if mountpoint -q -- "$/mnt/wd"; then

                echo "Asignando propietario y permisos a /mnt/wd"

                if ! sudo chown -R "$USER":"$USER" /mnt/wd; then

                  _error "Asignando propietarios a /mnt/wd"

                elif ! sudo chmod -R 770  /mnt/wd; then

                  _error "Asignando permisos a /mnt/wd"

                fi

              else

                echo "  .- /mnt/wd es un punto de montaje"

              fi

              _fin_copia


            # NextCloud

                #              if [[ "$l_nextcloud" -eq 1 ]]; then

                #                _mkdir "/mnt/nextcloud_jp" 0

                #                _mkdir "/mnt/nextcloud_jp/nc_opsone" 0

                #                echo "Asignando propietario y permisos a /mnt/nextcloud_juanp"

                #                if ! sudo chown -R "$USER":"$USER" /mnt/nextcloud_jp; then

                #                  _error "Asignando propietarios a /mnt/nextcloud_jp"

                #                elif ! sudo chmod -R 770  /mnt/nextcloud_jp; then

                #                  _error "Asignando permisos a /mnt/nextcloud_jp"

                #                fi

                #                _fin_copia

                #              fi


          # Añadir las lineas al fstab

            l_file_tmp=$(mktemp)

            cat /etc/fstab > "$l_file_tmp"


            echo ""

            echo "# Disco WD - /juanp"

            echo "//192.168.0.158/juanp  /mnt/wd/juanp      cifs credentials=/root/.credenciales,gid=juanp,uid=juanp,file_mode=0770,dir_mode=0770,iocharset=utf8,rw 0 0"

            echo ""

            echo "# Disco WD - /marisa"

            echo "//192.168.0.158/marisa /mnt/wd/marisa     cifs credentials=/root/.credenciales,gid=juanp,uid=juanp,file_mode=0770,dir_mode=0770,iocharset=utf8,rw 0 0"

            echo ""

            echo "# Disco WD - /multimedia"

            echo "//192.168.0.158/multimedia  /mnt/wd/multimedia cifs credentials=/root/.credenciales,gid=juanp,uid=juanp,file_mode=0770,dir_mode=0770,iocharset=utf8,rw 0 0"

            echo ""

            echo "# Disco WD - /invitado"

            echo "//192.168.0.158/invitado  /mnt/wd/invitado cifs credentials=/root/.credenciales,gid=juanp,uid=juanp,file_mode=0770,dir_mode=0770,iocharset=utf8,rw 0 0"

            #         if [[ "$l_nextcloud" -eq 1 ]]; then

            #           echo ""

            #           echo "# NextCloud opsone"

            #           echo "https://shared02.opsone-cloud.ch/remote.php/dav/files/favoritos.jp@gmail.com/ /mnt/nextcloud_jp/nc_opsone davfs user,rw,noauto 0 0"

            #         fi

            } >> "$l_file_tmp"


            echo "Copiando nuevo /etc/fstab"

            if ! sudo mv "$l_file_tmp" /etc/fstab; then

              rm -f "$l_file_tmp"

              _error "No se ha podido incluir las lineas en /etc/fstab (1)"

              exit 1

            else

              rm -f "$l_file_tmp"

              _fin_copia

            fi


          # Asignando propietario y permisos a /etc/fstab

            echo "Asignando propietario y permisos a /etc/fstab"

            if ! sudo chmod 644 /etc/fstab &&

                sudo chown root:root /etc/fstab; then

                        _error "2 No se ha podido incluir las lineas en /etc/fstab"

              exit 1

            else

              echo "Actualizado /etc/fstab"

              sudo ls -ls /etc/fstab

              _fin_copia

            fi


          # Copiar el archivo de credenciales a /root y asignarle los permisos y propietarios

          # adecuados.

            echo "Copiando y asignando properatio de /.credenciales"

            #if ! sudo cp ./datos/fstab/.credenciales /root/.credenciales &&

            if ! sudo cp "$K_PATH_SCRIPT"/datos/fstab/.credenciales /root/.credenciales &&

                  sudo chonw root:root /root/.credenciales; then

              _error "No se ha podido copiar/configurar el archivo de credenciales"

              exit 1

            else

              echo "Configurado archivo de credenciales"

              sudo ls -ls /root/.credenciales

              echo " Eliminado ""$K_PATH_SCRIPT/datos/fstab/.credenciales /root/.credenciales"

              rm "$K_PATH_SCRIPT/datos/fstab/.credenciales"

              _fin_copia

            fi


          # Configurar cuenta nextcloud

              #          if [[ "$l_nextcloud" -eq 1 ]]; then

              #            _crear_folder "$HOME"/.davfs2

              #            echo "Copiando y asignando propietario y premisos a secrets"

              #            if ! cp ./datos/nextcloud/davfs2/secrets "$HOME"/.davfs2 &&

              #                chown juanp:juanp "$HOME"/.davfs2/secrets &&

              #                chmod 600 "$HOME"/.davfs2/secrets &&

              #                sudo usermod -aG davfs2 juanp; then

              #              _error "Al configurar la cuenta nextcloud"

              #            else

              #              _fin_copia

              #              echo "Incluyendo en croontab la tarea de sincronizacion"

              #              (crontab -l; echo "@reboot bash $HOME/script/manto/t_sync_nextcloud.sh";) | awk '!x[$0]++'  | crontab -

              #              if [ ! $? -eq 0 ];then

              #                _error "Al incluir linea en crontab"

              #              else

              #              _fin_copia

              #              fi

              #            fi

              #          fi

          fi



    # Configurar firma digital

      function _configurar_firma_digital(){


        clear

        echo "-------------------------------------------------------------------------------"

        echo "Instalación y configuración de la Firma Digital"

        echo ""

        echo "Leer información adicional en SO - Guía instalación Firma digital"

        echo ""


        if _yes_no "¿Instalar y configurar la firma digital?" ""; then


          if [[ ! -f "$g_libpkcs11_dnie" ]]; then

            echo ""

            echo "No se encuentra el archivo $g_libpkcs11_dnie"

            echo "Este archivo es necesario para configurar la firma digital"

            if ! _yes_no "¿Continuar?" ""; then

              exit 1

            fi

          fi

          if [[ ! -f "$g_autofirma" ]]; then

            echo ""

            echo "No se encuentra el archivo $g_autofirma"

            echo "Este archivo es necesario para configurar la firma digital"

            if ! _yes_no "¿Continuar?" ""; then

              exit 1

            fi

          fi


          _install_pk "pcsc-tools"

          _install_pk "pcsc-tools"

          _install_pk "pcscd"

          _install_pk "pinentry-gtk2"

          _install_pk "libccid"


          if ! _check_installed "libpkcs11-dnie"; then

            echo "-------------------------------------------------------------------------------"

            echo "Instalando libpkcs11-dnie"

            echo ""

            if ! sudo dpkg -i "$g_libpkcs11_dnie"; then

              _error "Firma electronica - No se ha instalado correctamente el paquete libpkcs11-dnie"

            else

              _fin_copia

            fi

          fi


          echo "-------------------------------------------------------------------------------"

          echo "Instalando / Configurando Java"

          echo ""

          if ! java -version &> /dev/null; then

            _install_pk "default-jre"

            _install_pk "libnss3-tools"

          else

            java -version

            echo ""

            echo "Es necesario que la versión de java sea la 8 o superior"

            if ! _yes_no "¿Continuar?" ""; then

              echo "Proceso cancelado"

              exit 1

            fi

            _fin_copia

          fi


          echo "-------------------------------------------------------------------------------"

          echo "Instalando AutoFirma"

          echo ""

          if ! _check_installed "autofirma"; then

            if ! sudo dpkg -i "$g_autofirma"; then

              _error "No se ha instalado correctamente AutoFirma"

            else

              _fin_copia

            fi

          else

            echo "AutoFirma ya estaba instalada"

            dpkg -l | grep autofirma

            _fin_copia

          fi


          echo ""

          echo "Sera necesario reiniciar el sistema."

          echo "Tras ello comprobar el funcionamiento:"

          echo " .- Lector: pcsc_scan"

          echo " .- Fima digital -> Ver SO - Guía instalación Firma digital"

          echo ""

          echo "Presiona cualquier tecla para finalizar..."

          read -r -n 1 -s  # -n 1 espera una sola tecla, -s oculta la entrada

        fi



    # Configurar FireFox

      function _configurar_firefox() {

        local l_origen

        local l_destino


        l_origen="$K_PATH_SCRIPT/firefox/mozilla.tar.gz"

        l_destino="$HOME/.mozilla"

        echo "-------------------------------------------------------------------------------"

        echo "Configuración de FireFox"

        echo ""

        echo "La versión de FireFox instalada es        : $(firefox -v)"

        echo "La versión de la configuración guardada es: $(cat "$K_PATH_SCRIPT"/firefox/versionfirefox.txt)"

        echo ""

        if _yes_no "¿Restaurar la configuración guardada previamente?" ""; then

          # backup configuracion original de FireFox

          if [ -d "$HOME"/.mozilla ]; then

            echo "Creando copia de la configuración actual de FireFox ..."

            if ! mv "$HOME"/.mozilla "$HOME"/.mozilla_backup; then

              _error "  No se ha podido crear la copia de la configuración original de FireFox"

            else

              echo "Se ha renombrado $HOME/.mozilla como $HOME/.mozilla_backup"

            fi

          fi

          echo ""

          _tar_descomprimir "$l_origen" "$l_destino"

        else

          echo "Ver archivo de instalación para configurar FireFox"

        fi

        echo ""



    # Instalar aplicaciones AppImage

      function _instalar_apps_appimage() {

        local l_origen

        local l_destino


        l_origen="$K_PATH_SCRIPT/appimage"

        l_destino="$g_folder_appimage"

        echo "-------------------------------------------------------------------------------"

        echo "Las aplicaciones AppImage a instalar son las siguientes:"

        echo ""

        ls -1l "$l_origen"

        echo ""

        echo "Se copiarán en: $l_destino"

        echo ""

        if _yes_no "¿Instalar las aplicaciones AppImage?" ""; then

          _copy_full_folder "$l_origen" "$l_destino"

          if ! sudo chmod 770 "$l_destino"/* ;then

            _error "No se han podido asignar los premisos adecaudos a laa AppImages de $l_destino"

          fi

        fi



    # Instalar software flatpak

      function _install_flatpak(){

        echo "-------------------------------------------------------------------------------"

        echo "Instalando $1 ..."

        if ! flatpak install -y "$1" &> /dev/null; then

          echo ""

          _error " en la instalación: flatpak install -y $1"

          echo ""

          exit 1

        fi


      function _install_packages_flatpak(){

        local l_file_packages="$1"

        local l_package=""

        while read -r l_package; do

          _install_flatpak "$l_package"

        done < "$l_file_packages"


      function _list_packages_flatpak(){

        local l_file_packages="$1"

        local l_package=""

        while read -r l_package; do

          echo "$l_package"

        done < "$l_file_packages"


      function _instalar_paquetes_flatpak() {

        echo "-------------------------------------------------------------------------------"

        echo "Los paquete de software flatpak a instalar son los siguientes:"

        echo ""

        _list_packages_flatpak "$g_file_packages_flatpak"

        if _yes_no "¿Instalar paquetes de software de flatpak?" ""; then

          _install_packages_flatpak "$g_file_packages_flatpak"

        fi



    # Configurar flatpak

      # Requiere la instalación previa de los paquetes:

      #     .- flatpak

      #     .- gnome-software-plugin-flatpak

      function _config_flatpak(){

        echo "-------------------------------------------------------------------------------"

        echo ""

        if _yes_no "¿Configurar flatpak?" ""; then

          if ! sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo; then

            _error "  No se ha configurado flatpak correctamente"

          fi

          _fin_copia

        fi



    # Instalar paquetes de software

      function _install_pk(){

        echo "-------------------------------------------------------------------------------"

        echo "Instalando $1"

        echo ""

        if ! sudo apt -y install "$1"; then

          echo ""

          _error " en la instalción: apt install $1"

          echo ""

          exit 1

        fi



      function _install_packages(){

        local l_file_packages="$1"

        local l_package=""

        while read -r l_package; do

          _install_pk "$l_package"

        done < "$l_file_packages"



      function _list_packages(){

        local l_file_packages="$1"

        local l_package=""

        while read -r l_package; do

          echo "$l_package"

        done < "$l_file_packages"


      function _instalar_paquetes_software(){

        echo "-------------------------------------------------------------------------------"

        echo "Los paquete de software a instalar son los siguientes:"

        echo ""

        _list_packages "$g_file_packages"

        echo ""

        if _yes_no "¿Instalar paquetes de software?" ""; then

          _install_packages "$g_file_packages"

        fi



    # Instalar y configurar extensiones

      # function _instalar_extensiones() {

      #   # local l_file=""


      #   # # Dash to Dock

      #   # l_file="$K_PATH_SCRIPT/extensiones/dash-to-dock/dashtodock.cfg"

      #   # if ! sudo apt -y install gnome-shell-extension-dashtodock; then

      #   #   echo ""

      #   #   _error " en la instalción de la extensión Dast to Dock"

      #   #   echo ""

      #   # else

      #   #   # Restaurar configuración

      #   #   if [[ -f  "$l_file" ]]; then

      #   #     echo "Restaurando configuración extensión dash to dock"

      #   #     dconf load /org/gnome/shell/extensions/dash-to-dock/  < "$l_file"

      #   #   fi


      #   #   if gnome-extensions enable dashtodock; then

      #   #     echo "Activada la  extensión dash to dock"

      #   #   else

      #   #     _error "No se ha podido activar la  extensión dash to dock"

      #   #   fi

      #   # fi




    # Actualizar el Sistema Operativo

      function _update_SO(){

        if _yes_no "¿Iniciar la actualización del Sistema Operativo?" ""; then

          # Actualizar las listas de paquetes de los repositorios

            echo "-------------------------------------------------------------------------------"

            echo "Actualizando las listas de paquetes de los repositorios."

            echo ""

            if ! sudo apt update; then

              echo ""

              _error " en la ejecución de: apt update"

              echo ""

              exit 1

            else

              _fin_copia

            fi


          # Instalar las versiones más recientes de todos los paquetes

            echo "-------------------------------------------------------------------------------"

            echo "Instalando las versiones más recientes de todos los paquetes"

            echo "actualmente instalados en el sistema"

            echo ""

            if ! sudo apt upgrade -y; then

              echo ""

              _error " en la ejecución de: apt upgrade -y"

              echo ""

              exit 1

            else

              _fin_copia

            fi


          # Eliminar paquetes innecesarios."

            echo "-------------------------------------------------------------------------------"

            echo "Eliminando paquetes innecesarios."

            echo ""

            if ! sudo apt autoremove; then

              echo ""

              _error " en la ejecución de: apt autoremove"

              echo ""

              exit 1

            else

              _fin_copia

            fi

          fi



    # Copia de información automática

      function _copia_automatica_datos(){

        local l_origen

        local l_destino

        local l_file

        # Copia de archivos

          # - Copiar este script

            l_destino="$g_folder_copy"

            l_file="${BASH_SOURCE[0]}"

            sleep 3

            _copy_file "$l_file" "$l_destino" 0


          # - Copiar /etc/fstab

            l_destino="$g_folder_copy/datos/fstab"

            l_file="/etc/fstab"

            _copy_file "$l_file" "$l_destino" 0


          # - Copiar /root/.credenciales

            l_destino="$g_folder_copy/datos/fstab"

            l_file="/root/.credenciales"

            _copy_file "$l_file" "$l_destino" 1


          # - Copiar "$HOME"/.bash_history

            l_destino="$g_folder_copy/datos/files"

            l_file="$HOME"/.bash_history

            _copy_file "$l_file" "$l_destino" 0


          # - Copiar información de crontab

            l_destino="$g_folder_copy/datos/crontab"

            l_file="$HOME/crontab.txt"

            crontab -l > "$l_file"

            _copy_file "$l_file" "$l_destino" 0

            rm "$l_file"


          # - Copiar crontab del usuario y del sudo

            l_file="$HOME/crontab_sudo.txt"

            sudo crontab -l > "$l_file"

            _copy_file "$l_file" "$l_destino" 0

            rm "$l_file"


          # - Copia configuración rclone

            l_destino="$g_folder_copy/datos/rclone"

            l_file="$HOME"/.config/rclone/rclone.conf

            _copy_file "$l_file" "$l_destino" 0


        # Copia de directorios


          # Iconos personales

            l_destino="$g_folder_copy/iconos/my_icons"

            l_origen="$HOME/.local/share/icons/my_icons"

            _copy_full_folder "$l_origen" "$l_destino"


          # - Directorio de los archivos de contraseñas de KeePassXC"

            l_destino="$g_folder_copy/datos/keepassxc"

            l_origen="$HOME/Documentos/dock_xc"

            _copy_full_folder "$l_origen" "$l_destino"


          # - Directorio de las contraseñas /home/juanp/.gnupg

            l_destino="$g_folder_copy/datos/gnupg"

            l_origen="$HOME/.gnupg"

            _copy_full_folder "$l_origen" "$l_destino"


          # - Directorio de /home/juanp/.local/share/applications

            l_destino="$g_folder_copy/datos/applications"

            l_origen="$HOME/.local/share/applications"

            _copy_full_folder "$l_origen" "$l_destino"


          # - Directorio aplicaciones AppImage: Tutanota

            l_destino="$g_folder_copy/appimage"

            l_origen="$g_folder_appimage"

            _copy_full_folder "$l_origen" "$l_destino"


          # Cache Shotwell $HOME/.cache/shotwell/thumbs

            l_destino="$g_folder_copy/datos/shotwell/cache/thumbs.tar.gz"

            l_origen="$HOME/.cache/shotwell/thumbs"

            _tar_comprimir "$l_destino" "$l_origen"


        # Directorios con comprimidos TAR

          # - Directorio de los iconos que se están usando

            l_destino="$g_folder_copy/iconos/iconos.tar.gz"

            l_origen="$HOME/.local/share/icons"

            _tar_comprimir "$l_destino" "$l_origen"


          # - Configuración de Transmission

            l_destino="$g_folder_copy/transmission/transmission.tar.gz"

            l_origen="$HOME/.config/transmission"

            _tar_comprimir "$l_destino" "$l_origen"


          # - Directorio de Scripts

            l_destino="$g_folder_copy/script/scripts.tar.gz"

            l_origen="$HOME/script_juanp"

            _tar_comprimir "$l_destino" "$l_origen"

            l_destino="$g_folder_copy/script/scripts_config.tar.gz"

            l_origen="$HOME/.config/myscripts"

            _tar_comprimir "$l_destino" "$l_origen"


          # Directorio de pagina web personal incluidas las guias

            l_destino="$g_folder_copy/firefox/personalpage.tar.gz"

            l_origen="$HOME/Documentos/personalpage"

            _tar_comprimir "$l_destino" "$l_origen"


          # Información de FireFox ./.mozilla

            l_destino="$g_folder_copy/firefox/mozilla.tar.gz"

            l_origen="$HOME/.mozilla"

            _tar_comprimir "$l_destino" "$l_origen"

            # Guardar la verisión instalada de FireFox

            l_destino="$g_folder_copy/firefox/versionfirefox.txt"

            firefox -v > "$l_destino"


          # App FlatPak - Configuración Code - OSS

            l_destino="$g_folder_copy/flatpak/code_oss_config.tar.gz"

            l_origen="$HOME/.var/app/com.visualstudio.code-oss/config"

            _tar_comprimir "$l_destino" "$l_origen"

            l_destino="$g_folder_copy/flatpak/code_oss_data.tar.gz"

            l_origen="$HOME/.var/app/com.visualstudio.code-oss/data"

            _tar_comprimir "$l_destino" "$l_origen"


          # App FlatPak - Configuración calibre

            l_destino="$g_folder_copy/flatpak/com.calibre_ebook.calibre.tar.gz"

            l_origen="$HOME/.var/app/com.calibre_ebook.calibre"

            _tar_comprimir "$l_destino" "$l_origen"


          # App FlatPak - Configuración shotwell

            l_destino="$g_folder_copy/flatpak/org.gnome.Shotwell.tar.gz"

            l_origen="$HOME/.var/app/org.gnome.Shotwell"

            _tar_comprimir "$l_destino" "$l_origen"          


        # Información 

          # - Información de las extensiones

            l_destino="$g_folder_copy/extensiones"

            _crear_folder "$l_destino"

            l_file="$l_destino/info_extensiones.txt"


              echo "Inforamción sobre las extensiones instaladas"

              echo ""

              echo "Versión de Gnome-Shell: $(gnome-shell --version)"

              echo ""

              echo "Extensiones instaladas:"

              gnome-extensions list

              echo ""

              echo "Extensiones instaladas y activas:"

              gnome-extensions list --enabled

              echo ""

              echo "Configuración de las extensiones:"

              echo ""

              dconf dump /org/gnome/shell/extensions/

            } > "$l_file"


          # - Información de la configuración de las app,s de Gnome (dconf)

            l_destino="$g_folder_copy/gnome_dconf"

            _crear_folder "$l_destino"

            l_file="$l_destino/dconf_backup.txt"

            dconf dump / > "$l_file"

            # Configuracion de deja-dup

            l_file="$l_destino/dconf_backup_org_gnome_deja_dup.txt"

            dconf dump dconf dump /org/gnome/deja-dup/ > "$l_file"


          # Información de los discos duros proporcionada por lsblk -f -m y df -h

            l_destino="$g_folder_copy/discos"

            _crear_folder "$l_destino"

            _ini_copia "Discos" "$l_destino"


              echo "lsblk -f -m"

              echo "-----------"

              echo ""

              if ! lsblk -f -m ;then

                _error " al copiar información en $l_destino"

              fi

              echo ""

              echo ""

              echo ""

              echo "df -h"

              echo "-----------"

              echo ""

              df -h

            } >  "$l_destino/info_discos.txt"

            _fin_copia



    # Copia de información manual

      function _copia_manual_datos(){

        # Información de FireFox

          l_destino="$g_folder_copy/firefox"

          _crear_folder "$l_destino"

          _ini_copia "FireFox" "$l_destino"

          echo "    ..- Hacer un backup de los marcadores de FireFox y copiarlo en $l_destino"

          echo ""

          if ! _yes_no "¿Continuar?" "";then

            exit 1

          fi


        # Información de Evolution

          l_destino="$g_folder_copy/evolution"

          _crear_folder "$l_destino"

          _ini_copia "Evolution" "$l_destino"

          echo "    ..- Crear copia de respaldo en $l_destino"

          echo "          Archivo - Respaldar datos de Evolution"

          echo ""

          if ! _yes_no "¿Continuar?" "";then

            exit 1

          fi


        # Información de Firma electrónica

          l_destino="$g_folder_copy/firma_electronica"

          _crear_folder "$l_destino"

          _ini_copia "Firma electronica" "$l_destino"

          echo "    ..- Ver en guías linux: SO - Guía instalación Firma digital (Versión 1.05)"

          echo ""

          echo "    Descargar:"

          echo "      ...- Los módulos criptográficos PKCS#11"

          echo "           https://www.dnielectronico.es/PortalDNIe/PRF1_Cons02.action?pag=REF_1112"

          echo "      ...- Ultima versión de la aplicacion autofirma"

          echo "           https://firmaelectronica.gob.es/Home/Descargas.html"

          echo ""

          echo "   Descomprimir el archivo zip de autofiram y tomar nota del paquete deb que se "

          echo "   va a instalar."

          echo ""

          echo "   Los archivos a copiar son:"

          echo "   .- $(basename "$g_autofirma")"

          echo "   .- $(basename "$g_libpkcs11_dnie")"

          echo ""

          echo "   Si son unos diferentes, asignar los valores a las variables del script:"

          echo "      .- g_autofirma"

          echo "      .- g_libpkcs11_dnie"

          echo ""

          if ! _yes_no "¿Continuar?" "";then

            exit 1

          fi


        # Información controladores impresoras

          l_destino="$g_folder_copy/impresoras"

          _crear_folder "$l_destino"

          _ini_copia "Impresoras" "$l_destino"

          echo "    Descargar:"

          echo "      ...- Samsung ML-1685W"

          echo "           https://support.hp.com/us-en/drivers/selfservice/samsung-ml-1865-laser-printer-series/19134664"

          echo ""

          if ! _yes_no "¿Continuar?" "";then

            exit 1

          fi


        # Información de distribución discos duros

          l_destino="$g_folder_copy/discos"

          _crear_folder "$l_destino"

          _ini_copia "Distribución discos duros" "$l_destino"

          echo "    ..- Copiar captura de pantalla de la distribución de los disco duros con GParted en $l_destino"

          echo ""

          if ! _yes_no "¿Continuar?" "";then

            exit 1

          fi


        # Información de la configuración del editor GEdit

          l_destino="$g_folder_copy/editor"

          _crear_folder "$l_destino"

          _ini_copia "Configuración del editor GEdit" "$l_destino"

          echo "    ..- Copiar captura de pantalla de la configuración de GEdit en $l_destino"

          echo ""

          if ! _yes_no "¿Continuar?" "";then

            exit 1

          fi


        # Información configuracion NoScript

          l_destino="$g_folder_copy/noscript"

          _crear_folder "$l_destino"

          _ini_copia "Configuracion extensión FireFox NoScript" "$l_destino"

          echo "    En incono extensión - menú contextual - Gestión extensión -"

          echo "    Preferencia - Exportar/Importar"

          echo ""

          echo "    Revisar los dominios autorizados antes importar."

          echo ""

          if ! _yes_no "¿Continuar?" "";then

            exit 1

          fi


        # Archivo instalación CLI MEGA

          l_destino="$g_folder_copy/mega"

          _crear_folder "$l_destino"

          _ini_copia "Archivo deb de instalación CLI MEGA" "$l_destino"

          echo ""

          echo "    Descargar de: https://mega.io/es/cmd#download"

          echo ""

          if ! _yes_no "¿Continuar?" "";then

            exit 1

          fi



    # Restaurar información copiada

      function _restaurar_datos(){


        # Restaurar archivos

          # Archivo "$HOME"/.bash_history

            echo "------------------------------------------------------------------------"

            l_file="$K_PATH_SCRIPT/datos/files/.bash_history"

            l_destino="$g_folder_home"

            _copy_file "$l_file" "$l_destino" 0


          # Restaurar configuración rclone

            echo "------------------------------------------------------------------------"

            if _yes_no "¿Restaurar configuración de rclone?" ""; then

              #l_file="./datos/rclone/rclone.conf"

              l_file="$K_PATH_SCRIPT/datos/rclone/rclone.conf"

              l_destino="$g_folder_home/.config/rclone"

              _copy_file "$l_file" "$l_destino" 0

              if ! sudo chown -R "$USER":"$USER" "$l_destino/rclone.conf"; then

                _error "Asignando propietarios a $l_destino/rclone.conf"

              elif ! sudo chmod -R 600  "$l_destino/rclone.conf"; then

                _error "Asignando permisos a $l_destino/rclone.conf"

              fi

              _crear_folder "$HOME/nextcloud"

              _crear_folder "$HOME/dropbox"

            fi


          # Restaurar configuración de Deja-dup

            if hash deja-dup 2>/dev/null; then

              l_destino="$g_folder_copy/gnome_dconf"

              l_file="$l_destino/dconf_backup_org_gnome_deja_dup.txt"

              echo "------------------------------------------------------------------------"

              echo "Restaurando la configuración de Deja-dup"

              echo ""

              echo "La configuración disponible es la siguiente:"

              cat "$l_file"

              echo ""

              if _yes_no "¿Restaurar configuración de Deja-dup?" ""; then

                dconf dump /org/gnome/deja-dup/ < "$l_file"

              fi

            else

              echo "Deja-dup no está instalado."

            fi       


        # Restaurar directorios

          # Información iconos personales

            echo "------------------------------------------------------------------------"

            if _yes_no "¿Restaurar iconos personales?" ""; then

              #l_origen="./iconos/my_icons"

              l_origen="$K_PATH_SCRIPT/iconos/my_icons"

              l_destino="$g_folder_home/.local/share/icons/my_icons"

              _copy_full_folder "$l_origen" "$l_destino"

            fi


          # Información de Shotwell

            echo "------------------------------------------------------------------------"

            if _yes_no "¿Restaurar información de Shotwell?" ""; then

              # Datos Shotwell $HOME/.local/share/shotwell/

                #l_origen="./datos/shotwell/datos"

                l_origen="$K_PATH_SCRIPT/datos/shotwell/datos"

                l_destino="$g_folder_home/.local/share/shotwell"

                _copy_full_folder "$l_origen" "$l_destino"


              # Cache Shotwell $HOME/.cache/shotwell/thumbs

                #l_origen="./datos/shotwell/cache/thumbs.tar.gz"

                l_origen="$K_PATH_SCRIPT/datos/shotwell/cache/thumbs.tar.gz"

                l_destino="$g_folder_home/.cache/shotwell/thumbs"

                _tar_descomprimir "$l_origen" "$l_destino"

            fi


          # Directorio de los archivos de contraseñas de KeePassXC"

            echo "------------------------------------------------------------------------"

            if _yes_no "¿Restaurar archivos de contraseñas KeepassXc?" ""; then

              #l_origen="./datos/keepassxc"

              l_origen="$K_PATH_SCRIPT/datos/keepassxc"

              l_destino="$g_folder_home/Documentos/dock_xc"

              _copy_full_folder "$l_origen" "$l_destino"

            fi


          # Directorio de las contraseñas /home/juanp/.gnupg

            echo "------------------------------------------------------------------------"

            if _yes_no "¿Restaurar las contraseñas de SeaHorser ./gnupg?" ""; then

              echo "------------------------------------------------------------------------"

              #l_origen="./datos/gnupg"

              l_origen="$K_PATH_SCRIPT/datos/gnupg"

              l_destino="$g_folder_home/.gnupg"

              _copy_full_folder "$l_origen" "$l_destino"

              # Asignar propietario a la carpeta /.gnupg y a su contenido

              # Derechos de acceso correctos de la carpeta .gnupg, subcarpetas y contendio:

                if chown -R "$USER" "$HOME"/.gnupg/ &&

                  find "$HOME"/.gnupg -type f -exec chmod 600 {} \; &&

                  find "$HOME"/.gnupg -type d -exec chmod 700 {} \; ; then

                  echo "Permisos asignados correctamente a $HOME/.gnupg"

                  ls -l -A "$HOME/.gnupg" | grep .gnupg && ls -l -A "$HOME/.gnupg"

                else

                  _error "No ha podido asignarse propietario y permisos correctos a $HOME/.gnupg"

                fi

            fi


          # Directorio de /home/juanp/.local/share/applications

            echo "------------------------------------------------------------------------"

            if _yes_no "¿Restaurar /.local/share/applications?" ""; then

              l_origen="./datos/applications"

              l_destino="$g_folder_home/.local/share/applications"

              _copy_full_folder "$l_origen" "$l_destino"

            fi


        # Directorios con comprimidos TAR

          # Directorio de los iconos que se están usando

            echo "------------------------------------------------------------------------"

            if _yes_no "¿Restaurar Iconos?" ""; then

              l_origen="./iconos/iconos.tar.gz"

              l_origen="$K_PATH_SCRIPT/iconos/iconos.tar.gz"

              l_destino="$g_folder_home/.local/share/icons"

              _tar_descomprimir "$l_origen" "$l_destino"

            fi


          # Directorio de Scripts

            echo "------------------------------------------------------------------------"

            if _yes_no "¿Restaurar los scripts?" ""; then

              l_origen="$K_PATH_SCRIPT/script/scripts.tar.gz"

              l_destino="$g_folder_home/script_juanp"

              _tar_descomprimir "$l_origen" "$l_destino"

              l_origen="$K_PATH_SCRIPT/script/scripts_config.tar.gz"

              l_destino="$g_folder_home/.config/myscripts"

              _tar_descomprimir "$l_origen" "$l_destino"


              # Añadir $PATH el path de mis scripts para que puedan ser ejecutados desde

              # cualquier ubicación.

              if echo "$PATH" | grep "$g_folder_my_scripts" &> /dev/null;then

                echo "Ya tiene incluido $l_destino en  \$PATH"

              else


                  echo ""

                  echo "export PATH=$PATH:$g_folder_home/$g_folder_my_scripts"

                } >> "$g_folder_home/.bashrc"

              fi

            fi


          # Directorio configuración Transsmission

            echo "------------------------------------------------------------------------"

            if _yes_no "¿Restaurar la configuración de Transmission ?" ""; then

              l_origen="$K_PATH_SCRIPT/transmission/transmission.tar.gz"

              l_destino="$g_folder_home/.config/transmission"

              _tar_descomprimir "$l_origen" "$l_destino"

            fi


          # Directorio de pagina web personal incluidas las guias

            echo "------------------------------------------------------------------------"

            if _yes_no "¿Restaurar la Página Web Personal?" ""; then

              l_origen="$K_PATH_SCRIPT/firefox/personalpage.tar.gz"

              l_destino="$g_folder_home/Documentos/personalpage"

              _tar_descomprimir "$l_origen" "$l_destino"

            fi


          # Configuración Code - OSS (FlatPack)

            echo "------------------------------------------------------------------------"

            if _yes_no "¿Restaurar Configuración Code - OSS (FlatPak)?" ""; then

              l_origen="$K_PATH_SCRIPT/flatpak/code_oss_config.tar.gz"

              l_destino="$g_folder_home/.var/app/com.visualstudio.code-oss/config"

              _tar_descomprimir "$l_origen" "$l_destino"

              l_origen="$K_PATH_SCRIPT/flatpak/code_oss_data.tar.gz"

              l_destino="$g_folder_home/.var/app/com.visualstudio.code-oss/data"

              _tar_descomprimir "$l_origen" "$l_destino"

            fi


          # Configuración calibre (FlatPack)

            echo "------------------------------------------------------------------------"

            if _yes_no "¿Restaurar Configuración Calibre (FlatPak)?" ""; then

              l_origen="$K_PATH_SCRIPT/flatpak/com.calibre_ebook.calibre.tar.g"

              l_destino="$g_folder_home/.var/app/com.calibre_ebook.calibre"

              _tar_descomprimir "$l_origen" "$l_destino"

            fi


          # Configuración shotwell (FlatPack)

            echo "------------------------------------------------------------------------"

            if _yes_no "¿Restaurar Configuración Shotwell (FlatPak)?" ""; then

              l_origen="$K_PATH_SCRIPT/flatpak/com.calibre_ebook.calibre.tar.g"

              l_destino="$g_folder_home/.var/app/com.calibre_ebook.calibre"

              _tar_descomprimir "$l_origen" "$l_destino"

            fi





  # Menú script

    # Tareas posteriores a la instalación

      function _tareas_posteriores(){

        clear

        echo "-----------------------------------------------------------------------------------------"

        echo ""

        echo " Script de instalación y configuración del Sistema Operativo"

        echo " Sistema Operativo: $K_SO"      

        echo " Versión script: $K_APP_VERSION_SCRIPT ($K_FECHA_SCRIPT)"

        echo ""

        echo "-------------------------------------------------------------------------------"

        echo ""

        if [[ ! -d "$g_folder_home" ]]; then

          echo "Error: No existe el directorio $g_folder_home"

          g_fin_script=1

          exit 0

        fi


        if [[ ! "$g_folder_home" = "$HOME" ]]; then

          _error "El directorio donde se instalara la información no es $HOME"

        fi


        if ! _yes_no "¿Iniciar la reatauración de la información en $g_folder_home ?" ""; then

          g_fin_script=1

          exit 0

        fi


        # Actualizar el Sistema operativo

          _update_SO


        # Activar el cortafuegos

          echo "------------------------------------------------------------------------"

          if _yes_no "¿Activar el corta fuegos?" ""; then

            # Comprobar que están instalados los paquetes necesarios

            if ! _check_installed ufw; then

              _install_pk "ufw"

            fi

            if ! sudo ufw enable; then

              _error " al activar el corta fuegos con el cli [sudo ufw enable]"

            else

              _fin_copia

            fi

          fi

        # Instalar los paquetes de software

          _instalar_paquetes_software

        # Configurar flatpak

          _config_flatpak

        # Instalar el software de flatpak

          _instalar_paquetes_flatpak

        # Instalar aplicaciones AppImage

          _instalar_apps_appimage

        # Configurar aplicaciones

          _config_apps

        # Instalar impresora

          _instalar_impresora_ML1865

        # Restaura información

          _restaurar_datos

        # Configurar FireFox

          _configurar_firefox

        # Configurar fstab

          _config_fstab


        # Finalizar

          echo "-------------------------------------------------------------------------------"

          echo "Proceso finalizado correctamente"

          echo " "

          echo " En el siguiente archivo se encuentran las líneas a incluir en el crontrab del"

          echo " usuario cuando se hayan copiado todos los documentos al ordendor:"

          echo "  .- $K_PATH_SCRIPT/datos/crontab/crontab.txt"

          echo ""

          echo " En el siguiente archivo se encuentran las líneas a incluir en el crontrab del"

          echo " sudo cuando se hayan copiado todos los documentos al ordendor."

          echo "  .- $K_PATH_SCRIPT/datos/crontab/sudo_crontab.txt"

          echo ""

          echo " ADVERTENCIA: Incluye la línea para ejecutar al inicio la sincronización con el"

          echo "              NAS WD."

          echo "              En el PC ha de estar toda la información, si no la sincronizacón"

          echo "              eliminará toda la que haya en el WD NAS"

          echo ""

          echo " Reiniciar equipo: sudo reboot"

          echo ""

          echo "-------------------------------------------------------------------------------"

          g_fin_script=1

          exit 0


    # Tareas previas a la instalación

      function _tareas_previas(){

        clear

        echo "-------------------------------------------------------------------------------"

        echo ""

        echo " Script de instalación y configuración del Sistema Operativo"

        echo " Sistema Operativo: $K_SO"

        echo " Versión script: $K_APP_VERSION_SCRIPT ($K_FECHA_SCRIPT)"

        echo ""

        echo " La copia de la información del SO se realizará en:"

        echo "  >> $g_folder_copy"

        echo "-------------------------------------------------------------------------------"

        echo ""

        # Comprobar si existe el directorio donde se realizará la copia

          if [[ ! -d "$g_folder_copy" ]]; then

            echo " El directorio donde se va a realizar la copia no existe."

            if _yes_no "¿Se crea el directorio [$g_folder_copy] ?" ""; then

              _crear_folder "$g_folder_copy"

            else

              echo ""

              echo "Error: No existe el directorio $g_folder_copy"

              exit 1

            fi

          fi

        # Tareas previas

          _copia_automatica_datos

          _copia_manual_datos


        # Finalizar

          g_fin_script=1

          exit 0


    # Menú inicial de script

      function _menu_inicial(){

        lear

        echo "-----------------------------------------------------------------------------------------"

        echo ""

        echo " Script de instalación y configuración del Sistema Operativo"

        echo " Sistema Operativo: $K_SO"

        echo " Versión script: $K_APP_VERSION_SCRIPT ($K_FECHA_SCRIPT)"

        echo " Script: $K_FULL_NAME_SCRIPT"

        echo ""

        echo " 1.- Tareas previas a la instalación."

        echo " 2.- Tareas posteriores a la instalación."

        echo " 3.- Crear copia de seguridad de $HOME."

        echo " 4.- Firma digital"

        echo " 5.- Restarurar configuración de FireFox"

        echo ""

        read -r -N1 -p "     Selecciona opción [1/2/3/4/5] " opcion

        echo ""

        case $opcion in

          "1")

            echo 1

            _tareas_previas


          "2")

          _tareas_posteriores


          "3")

          _backup_home


          "4")

          _configurar_firma_digital

          g_fin_script=1

          exit 0


          "5")

          _configurar_firefoxw

          g_fin_script=1

          exit 0



          echo "Finalizado"

          g_fin_script=1

          exit 0


        esac



  # INICIO DEL SCRIPT

    # Comprobaciones previas

      # Comprobar que no se ejecute el script como root

      if [[ "$EUID" -eq 0 ]]; then

        echo ""

        echo "ERROR: Ha iniciado el script como root"

        echo "       sudo bash $0"

        echo ""

        echo "La forma correcta de inciar el script es:"

        echo "       bash $0"

      fi

      # Comprobar si el usuario está incluido en grupo sudo

        if cut -d: -f1,4 /etc/group | grep sudo | grep "$USER"; then

          echo "OK: Usuario $USER está incluido el en grupo sudo"

        else

          echo ""

          echo "  Usuario $USER no está incluido en el grupo sudo."

          echo "  Para incluir a $USER en el grupo sudo (administradores) ejecutar:"

          echo "   su [enter]"

          echo "   sudo usermod -aG sudo $USER"

          echo "   sudo shutdown -r now"

          echo ""

          exit 1

        fi

    # Presentar menu inicial

    _menu_inicial