SO - Instalación Debian 11 (22 de enero de 2023)


Índice:

      .) Inicio

      a) Antes de empezar

      b) Instalación

         Usar la versión oficial de Debian

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

         Distribución de los discos duros

      c) Tras la instalación

         Instalar aplicaciones manualmente

         Configuraciones

         Aplicaciones al inicio (Crontab)

      d) información adicional

         Instalar y Configurar Flatpak

         Configurar cuenta online NextCloud

         Configurar fstab

         Impresoras

         Incluir usuario en el grupo sudo (*)

         Configurar FireFox

         Carpetas personales y remotas

      e) Scrip de instalación de Debian

         Resumen del script

         Script



.- DropBox (Comprobar)

.- Sinc_NextCloud (Comprobar)


.- Comprobar la maquina VM VirtualBox XP-programacion


.) Inicio  ⮴  

Portátil Thosiba:

F12     -> Boot Menu

F2      -> Bios Setup



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

hasta haber finalizalizado de configurar correctamente el equipo.

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

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


a) Antes de empezar  ⮴  

Con el script de instalación guardar la información necesaria en un USB.


b) Instalación  ⮴  

Para realizar la instalación hay dos opciones:

.- Usar la versión oficial de Debian.

.- Usar una versión no oficial con los repositorios non-free incluidos.


En esta ocasión se empleará la versión non-free, con ello se instalarán.


Usar la versión oficial de Debian  ⮴  

Durante la instalación se informará del los paquete privativos que no se en-

cuentran, habrá que tomar nota para instalarlos posteriormente.


En el caso del Asus son los de la tarjeta wifi, y también se pueden obtener

con el siguiente comando:

    lspci | grep Wireless


Dos opciones: buscar los paquete o bien activar los repositorios non-free y

contrib e instalarlos desde synaptic.


En synaptic instalar los paquetes:

firmware-ipw2x00

firmware-intelwimax

firmware-iwlwifi


Desde el teminal:

      sudo apt-get install firmware-ipw2x00 &&

      sudo apt-get install firmware-intelwimax &&

      sudo apt-get install firmware-iwlwifi

link=https://geekland.eu/instalar-drivers-tarjeta-de-red-wifi-debian/


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

.- Desde el Terminal:

        sudo dd if=xxxx of=xxxxx

        sudo dd if=/home/Escritorio/kaos.iso of=/dev/sdX

¡¡¡ OJO !!! : TENER CUIDADO CON EL DESTINO


.- Con Fedora Media Writer (flatpak) / Raspberry Pi Imager


Distribución de los discos duros  ⮴  

Durante la recopilación de información se guarda de forma automática la info-

de los discos duros generadas por los comandos siguientes un archivo.

      lsblk -f -m

      df -h

Archivo: ./discos/info_discos.txt


También se hace una copia de la información proporcionada por GParted de los

discos:

.- Disco SSD 250 GB: según imágen disco_250GB.png

.- Disco HHD 500 GB: según imágen disco_500GB.png


Emplear de flatpak ha incrementado el uso del raíz (/) por lo que se va incre-

mentar el espacio disponible pasa a 60 GB.


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


c) Tras la instalación  ⮴  

Ejecutar el script de instalación:

.- Actualizar el sistema operativo.

.- Instalar aplicaciones

..- Paquete

..- Flatpak

..- AppImage

.- Configuraciones.


Instalar aplicaciones manualmente  ⮴  

.- Virtualbox:

..- Descargar el paquete y VM VirtualBox Extension Pack

link=https://www.virtualbox.org/

..- Instalación:

            sudo dpkg -i virtualbox-6.1_6.1.32-149290~Debian~bullseye_amd64.deb

Si la instalación no se completa por problemas de dependencia:

            sudo apt-get -f install

Y volver a instalar el paquete

Iniciar VirtualBox e instalar VM VirtualBox Extension Pack

Archivo - Herramientas - Extension Pack Manager - Add (+)


.- DropBox:

Dos opciones:


a) Instalación normal:

Instalar desde página DropBox.

link=https://www.dropbox.com/install-linux

Descargar paquete e instalar con Sotfware

Ejecutar la apliación dropbox instalada, que será la que realice la con-

figuración.


b) Instalar como un paquete de flatpak

Desde el centro de software o desde la termial.

                  flatpak instal com.dropbox.Client


.- Instalar Autofirma:

Ver "SO - Guía instalación Firma digital"



Configuraciones  ⮴  

.- Configurar FireFox

Dos opciones:

..- Clonar la configuración anterior.

Se hace desde el script

..- Realizar una configuración completa.

Ver guía sobre la instalación e información adicional.


.- Configurar extensiones:

Dash to dock

Time ++ (Lista de tareas sincronizadas con el movil)

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


Las extensiones se instalan desde FireFox instalando la extensión pro-

puesta en https://extensions.gnome.org : Integración con GNOME Shell

Integración Gnome Shell


.- Activar el cortafuegos: gufw

Se hace desde el script

link=https://geekland.eu/configurar-el-firewall-gufw/


.- Configurar escritorio

..- Configurar el tema: Retoques - Apariencia


.- Nautilus preferencias

Abrir elementos con una sola pulsación

Archivos ejecutables: Preguntar qué hacer

Listas: Tipo detallado tras el tamaño


.- Configurar Editor

Según imagen de configuración guardadas.


.- Configurar Contraseñas - SeaHorse

Copiar los archivos guardados en gnupg en home/.gnupg


.- Configurar Transmission

..- Lista de bloqueo:

            http://list.iblocklist.com/?list=ydxerpxkpcfqjaybcssw&fileformat=p2p&archiveformat=gz

link=https://www.iblocklist.com/lists

..- Modo de cifrado: Requerir cifrado


.- Firma digital

Ver "guia_instalar_firma_electronica.txt"

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.

(Ver información adicional - impresoras)


.- Configurar cuentas online

..- NextCloud: El script realiza parte de la configuración.


.- Configurar y restaurar Evolution




Aplicaciones al inicio (Crontab)  ⮴  

Incluir en crontab (sudo crontab -e):

      @reboot bash /home/juanp/script/manto/t_limpiar.sh

      @reboot bash /home/juanp/script/manto/t_sync_home.sh

      @reboot bash /home/juanp/script/manto/t_sync_home_wd.sh

      @reboot bash /home/juanp/script/manto/t_compress_importan.sh

      @reboot bash /home/juanp/script/manto/t_sync_nextcloud.sh


Conviene hacer una copia de crontab antes de formatear.


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

ción hasta haber finalizalizado 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.


d) información adicional  ⮴  


Instalar y Configurar Flatpak  ⮴  

Información:

Debian Quick Setup

Getting Started


      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

Reiniciar


Configurar cuenta online NextCloud  ⮴  


Con esta cuenta se hacen dos cosas:

..- Configurar el acceso mediante "Cuentas OnLine"

URL servidor: https://shared02.opsone-cloud.ch

Usuario y clave de acceso en Keeypass


..- Configurar una copia de seguridad de su contenido -archivos- en

una carpeta local. De los contactos y el calendarios no se hace

copia de seguridad.


...- Instalar davfs para el acceso con el protocolo WebDAV a la

cuenta de nextcloud e incluir al usuario en grupo de usuarios

autorizados a usarlo.

              sudo apt install davfs2

              sudo usermod -a -G davfs2 juanp

(Lo hace el script de instalación)


...- Copiar el archivo de configuracion para conectar la cuenta de

nextcloud

              cp -r /media/juanp/6BC8-7F1A/datos/nextcloud/davfs2/secrets  /home/juanp/.davfs2

              chown juanp:juanp $HOME/.davfs2/secrets

              chmod 600 $HOME/.davfs2/secrets

Este archivo secreto debe ser legible y escribible sólo por el

propietario (modo 0600). Los dos últimos comnados convierten a

juanp en el propietario y le asigan los premisos adecuados.


...- Configurar un cron que ejecute al inicio de sesión

               bash /home/juanp/script/manto/t_sync_nextcloud.sh

Para realizar la sincronización es necesario montar la cuenta

y para ello se incluirá una linea en el fstab que crea el pun-

to de montaje pero sin montarlo; será en el scrip de sincro-

nización donde se monte, se haga la copia y por último se

desmonte.


Información adicional sobre nextcloud

Información adicional sobre davfs2


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

...- nextcloud_jp  NextCloud

....- nc_opsone     shared02.opsone-cloud.ch

.....- /mnt/nextcloud_jp/nc_opsone


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

        sudo mkdir /mnt/nextcloud_jp &&

        sudo mkdir /mnt/nextcloud_jp/nc_opsone &&

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

        sudo chmod -R 770  /mnt/nextcloud_jp


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

En la actualidad son las líneas necesarias para montar el HDD, algunas car-

petas del NAS WD y el servidor nextcloud en shared02.opsone-cloud:

          # /mnt/hdd disco duro mecanico was on /dev/sdb6

          UUID=2a048ea0-e204-4f50-b532-3cb27fd291ee /mnt/hdd ext4  defaults   0  2


          # 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


          # NextCloud opsone

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


Editar fstab:

          sudo nano /etc/fstab


Para probar si se hace bien usar:

            sudo umount -a

            sudo mount -a


Cerrar y abrir sesion.


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.

link=http://www.samsung.com/es/support/model/ML-1865/SEE

(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 MG2950:


Descomprimir los controladores

Ejecutar el instalador

      sudo sh install.sh

De ser necesario instalar manualmente el paquete libcupsimage2

      sudo apt-get install libcupsimage2


Se puede acceder a http://localhost:631/admin buscar y configurar las

impresoras.

Impresoras



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


Incluir usuario en el grupo sudo (*)  ⮴  

      sudo su

      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'

link=https://www.zeppelinux.es/command-not-found-orden-no-encontrada-con-su-en-debian-10-buster/


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 termial 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/)

...- Dash to dock /

...- Time ++  / Todo.txt

(Lista de tareas sincronizadas con el movil)

Ubicación: /home/juanp/dropbox/tareas

..- 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 verió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.


Carpetas personales y remotas  ⮴  

Tras configurar el fstab.


Editar el archivo de configuración de las carpetas personales:

      nano ~/.config/user-dirs.dirs


Sustituir:

      #XDG_MUSIC_DIR="$HOME/Música"

      #XDG_PICTURES_DIR="$HOME/Imágenes"

      #XDG_VIDEOS_DIR="$HOME/Vídeos"

      #XDG_DOWNLOAD_DIR="$HOME/Descargas"


Por:

      XDG_MUSIC_DIR="/mnt/hdd/home_juanp/Música"

      XDG_PICTURES_DIR="/mnt/hdd/home_juanp/Imágenes"

      XDG_VIDEOS_DIR="/mnt/hdd/home_juanp/Vídeos"

      XDG_DOWNLOAD_DIR="/mnt/hdd/home_juanp/Descargas"


Crear los accesos directos en /home/juanp; eliminar antes -si existen- las

carpetas homóninmas.

      ln -s /mnt/hdd/home_juanp/programacion /home/juanp  &&

      ln -s /mnt/hdd/home_juanp/biblioteca_calibre /home/juanp  &&

      ln -s /mnt/hdd/home_juanp/Vídeos /home/juanp  &&

      ln -s /mnt/hdd/home_juanp/Imágenes /home/juanp  &&

      ln -s /mnt/hdd/home_juanp/Descargas /home/juanp  &&

      ln -s /mnt/hdd/home_juanp/Música /home/juanp


Reiniciar para que tenga efecto las modificaciones si es necesario.


e) Scrip de instalación de Debian  ⮴  

Resumen del script  ⮴  

#!/bin/bash



# 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á automatizadao y otra parte requiere que la infor-

# mación la cree el usuario.



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


# Número de errores que se han producidido

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

# Archivo log de errores


# Funciones auxiliares

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

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

# Comprimir un arhivo 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.

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


# Salida del script

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


# Configuración


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

# Directorio de las apliaciones AppImage

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

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


# Paquetes de software

# Paquetes para la firma digital

# Necesario para la impresora

# Paquetes de software


# Procedimientos y funciones

# Copia de seguridad $HOME


# Instalación controladores impresora Samsung ML1865W

# Comprobar si existe el archivo con los controladores

# Comprobar que están instalados los paquetes necesarios

# Instalación controladores de la impresora


# 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

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


# Cuenta nextcloud

# Comprobar que están instalados los paquetes necesarios

# Crear copia de seguridad de fstab

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

# WD

# NextCloud

# Añadir las lineas al fstab

echo "# Disco WD - /juanp"

echo "# Disco WD - /marisa"

echo "# Disco WD - /multimedia"

echo "# Disco WD - /invitado"

echo "# NextCloud opsone"

# Asignando propietario y permisos a /etc/fstab

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

# adecuados.

# Configurar cuenta nextcloud


# Configurar firma digital


# Configurar FireFox

# backup configuracion original de FireFox


# Instalar aplicaciones AppImage


# Instalar software flatpak


# Configurar flatpak

# Requiere la instación previa de los paquetes:

#     .- flatpak

#     .- gnome-software-plugin-flatpak


# Instalar paquetes de software




# Actualizar el Sistema Operativo

# Actualizar las listas de paquetes de los repositorios

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

# Eliminar paquetes innecesarios."


# Copia de información automática

# Copia de archivos

# - Copiar este script

# - Copiar /etc/fstab

# - Copiar /root/.credenciales

# - Copiar "$HOME"/.bash_history

# - Copia /.config/user-dirs.dirs

# - Copia "$HOME"/.davfs2/secrets

# Información de configuracion para conectar la cuenta de nextcloud

# Copia de directorios

# -Información de Shotwell

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

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

# - Directorio /.config/autostart

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

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

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

# - Directorio aplicaciones AppImage: Tutanota

# Directorios con comprimidos TAR

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

# - Directorio de Scripts

# Directorio de pagina web personal incluidas las guias

# Información de FireFox ./.mozilla

# Guardar la verisión instalada de FireFox

# Información general

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

# Información de Crontab


# Copia de información manual

# Información de FireFox

# Información de Evolution

# Información de Firma electrónica

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

# Información controladores impresoras

# Información de distribución discos duros

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

# Información Instalación de VirtualBox


# Restaurar información copiada

# Restaurar archivos

# Archivo "$HOME"/.bash_history

# Restaurar directorios

# Información de Shotwell

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

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

# Directorio /.config/autostart

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

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

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

# Directorios con comprimidos TAR

# Directorio de los iconos que se están usando

# Directorio de Scripts

# Directorio de pagina web personal incluidas las guias



# Menú script

# Tareas posteriores a la instalación

# Actualizar el Sistema operativo

# Activar el cortafuegos

# Instalar los paquetes de software

# Restaura información

# Configurar flatpak

# Instalar el software de flatpak

# Instalar aplicaciones AppImage

# Configurar FireFox

# Configurar la Firma Digital

# Configurar fstab

# Instalar impresora

# Finalizar

# Tareas previas a la instalación

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

# Tareas previas

# Finalizar

# Menú inicial de script


# INICIO DEL SCRIPT

# Comprobar si el usuario está incluido en grupo sudo

# Presentar menu inicial


Script  ⮴  

Creado con VSCodium

    #!/bin/bash



    # 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á automatizadao y otra parte requiere que la infor-

    # mación la cree el usuario.


    g_app_version="3.02"

    g_app_fecha="22/01/23"


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


      # Número de errores que se han producidido

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


      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

        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 [ ! -z "$2" ]; then

            echo $2

          fi

          read -p "$1 (Y/N) " 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_destino="$2"

        local l_sudo="$3"


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

          l_origen="$l_destino"/

        fi


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

          _error "Error no existe el archivo $l_file_origen"

        else

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

          echo "Copiando:"

          echo "  .- Archivo: $l_file_origen"

          echo "  .- Destino: $l_destino"

          echo ""

          _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 ]"

        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 $origen en $destino"

          else

            echo " > OK"

          fi

        fi


      function _tar_comprimir(){

        # Comprimir un arhivo 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.


        _crear_folder "$(dirname "$1")"


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

          _error "No existe el directorio $2"

          retrun 1

        else

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

          echo "Comprimiendo: "

          echo " .- Origen : $2"

          echo " .- Destino: $1"

          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


      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() {

        dpkg -s $1 &> /dev/null

        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

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

      function _trap_exit(){

        _info_status_error

        rm -f "$g_log_errores"


      trap _trap_exit EXIT


    # Configuración


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

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


      # Directorio de las apliaciones AppImage

      g_folder_appimage="$HOME/AppImage"


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

      g_folder_copy="/home/juanp/Linux/instalaciones/20230106_debian_11_2023"


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

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



      # Paquetes de software

      declare -a g_aPackages

      g_aPackages[1]="cifs-utils"

      g_aPackages[2]="keepassxc"

      g_aPackages[3]="synaptic"

      g_aPackages[4]="cups"

      g_aPackages[5]="gufw"

      g_aPackages[6]="rsync"

      g_aPackages[7]="exiftool"

      g_aPackages[8]="clamtk"

      g_aPackages[9]="imagemagick"

      g_aPackages[10]="megatools"

      g_aPackages[11]="gparted"

      g_aPackages[12]="flatpak"

      g_aPackages[13]="gnome-software-plugin-flatpak"

      g_aPackages[14]="davfs2"

      # Paquetes para la firma digital

      g_aPackages[15]="pcsc-tools"

      g_aPackages[16]="pcscd"

      g_aPackages[17]="pinentry-gtk2"

      g_aPackages[18]="libccid"

      # Necesario para la impresora

      g_aPackages[19]="libcupsimage2"

      g_aPackages[20]="telegram-desktop"



      # Paquetes de software

      declare -a g_aFlatpak

      g_aFlatpak[1]="org.gimp.GIMP"

      g_aFlatpak[2]="com.vscodium.codium"

      g_aFlatpak[3]="com.calibre_ebook.calibre "

      g_aFlatpak[4]="org.videolan.VLC "

      g_aFlatpak[5]="org.darktable.Darktable"

      g_aFlatpak[6]="org.telegram"



    # 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





      # 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*)

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

            _error "No se encuentra el archivo con los controladores en ./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

              echo "A continaución se va a iniciar la instalación del controlador"

              echo "Hay que aceptar:"

              echo "  .- El acuerdo de licencia (aparece tras el apartado 10)"

              echo "     Pulsar flecha abajo para avanzar en los términos de la licencia"

              echo "  .- La configuración del firewall"

              echo ""

              if ! sudo bash "$HOME"/Documentos/impresoras/ml/uld/install.sh; then

                _error "No se ha instalado correctamente los controladores"

              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

        #     ..- 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="$(dirname "$0")/backup"

          local l_file_tmp

          local l_nextcloud


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

          echo "Configuración /etc/fstab"

          echo ""

          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 extructura de directorios y asignarles los permisos correctos.

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

              echo " .-  /mnt/wd"

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

                echo " .-  /mnt/nextcloud_jp"

              fi


              # WD

                _mkdir "/mnt/wd" 0

                _mkdir "/mnt/wd/juanp" 0

                _mkdir "/mnt/wd/multimedia" 0

                _mkdir "/mnt/wd/marisa" 0

                _mkdir "/mnt/wd/invitado" 0

                echo "Asginando propietario y premisos 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

                _fin_copia


              # NextCloud

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

                    _mkdir "/mnt/nextcloud_jp" 0

                    _mkdir "/mnt/nextcloud_jp/nc_opsone" 0

                    echo "Asginando propietario y premisos 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 &&

                    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

                _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(){


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

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

          echo ""

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

          echo ""


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


            _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 ./firma_electronica/libpkcs11-dnie_1.6.8_amd64.deb; 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 ./firma_electronica/AutoFirma_1_7_1.deb; then

                _error "No se ha instalado correctamente AutoFirma"

              else

                _fin_copia

              fi

            else

              echo "AutoFirma ya estaba instalada"

              _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 ""

            read -p "Pulsa un tecla para continuar ..."

          fi





      # Configurar FireFox

        function _configurar_firefox() {

          local l_origen

          local l_destino


          l_origen="./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 ./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="./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"

          echo ""

          if ! flatpak install -y "$1"; then

            echo ""

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

            echo ""

            exit 1

          fi


        function _install_packages_flatpak(){

          local -n l_array=$1

          local l_i

            for l_i in "${l_array[@]}" ; do

            _install_flatpak "$l_i"

          done


        function _list_packages_flatpak(){

          local -n l_array=$1

          local l_i

          for l_i in "${l_array[@]}" ; do

            echo "$l_i"

          done


        function _instalar_paquetes_flatpak() {

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

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

          echo ""

          _list_packages_flatpak g_aFlatpak

          echo ""

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

            _install_packages_flatpak g_aFlatpak

          fi



      # Configurar flatpak

        # Requiere la instació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 install "$1"; then

            echo ""

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

            echo ""

            exit 1

          fi



        function _install_packages(){

          local -n l_array=$1

          local l_i

          for l_i in "${l_array[@]}" ; do

            _install_pk "$l_i"

          done



        function _list_packages(){

          local -n l_array=$1

          local l_i

          for l_i in "${l_array[@]}" ; do

            echo "$l_i"

          done


        function _instalar_paquetes_software(){

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

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

          echo ""

          _list_packages g_aPackages

          echo ""

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

            _install_packages g_aPackages

          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="$(dirname "$(readlink -f "$0")")/$0"

              _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


            # - Copia /.config/user-dirs.dirs

              l_destino="$g_folder_copy/datos/config"

              l_file="$HOME"/.config/user-dirs.dirs

              _copy_file "$l_file" "$l_destino" 0


            # - Copia "$HOME"/.davfs2/secrets

              # Información de configuracion para conectar la cuenta de nextcloud

              l_destino="$g_folder_copy/datos/nextcloud/davfs2"

              l_file="$HOME"/.davfs2/secrets

              _copy_file "$l_file" "$l_destino" 0



          # Copia de directorios

            # -Información de Shotwell

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

                l_destino="$g_folder_copy/datos/shotwell/datos"

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

                _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"


            # - Directorio /.config/autostart

              l_destino="$g_folder_copy/datos/config/autostart"

              l_origen="$HOME/.config/autostart"

              _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"


          # 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"


            # - Directorio de Scripts

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

              l_origen="$HOME/script"

              _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"



          # Información general

            # 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


            # Información de Crontab

              l_destino="$g_folder_copy/datos/config/crontab"

              _crear_folder "$l_destino"

              _ini_copia "Crontab" "$l_destino"

              if ! crontab -l > "$l_destino/crontab.txt"; then

                _error "No se ha podido copiar la información de Crontal en $l_destino/crontab.txt"

              fi

              _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 "    ..- Backup marcadores de FireFox"

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

            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 "      ...- PIXMA MG2950"

            echo "           https://www.canon.es/support/consumer_products/products/fax__multifunctionals/inkjet/pixma_mg_series/pixma_mg2950.html?type=drivers&language=es&os=linux%20(64-bit)"

            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 Instalación de VirtualBox

            l_destino="$g_folder_copy/virtualbox"

            _crear_folder "$l_destino"

            _ini_copia "Instalición VirtualBox" "$l_destino"

            echo "    Descargar:"

            echo "      ...- VirtualBox y VM VirtualBox Extension Pack"

            echo "           https://www.virtualbox.org/"

            echo ""

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

              exit 1

            fi



      # Restaurar información copiada

        function _restaurar_datos(){


          # Restaurar archivos

            # Archivo "$HOME"/.bash_history

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

              l_destino="$g_folder_home"

              _copy_file "$l_file" "$l_destino" 0


          # Restaurar directorios

            # Información de Shotwell

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

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

                  l_origen="./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_destino="$g_folder_home/.cache/shotwell/thumbs"

                  _tar_descomprimir "$l_origen" "$l_destino"

              fi


            # Directorio /.config/autostart

              if _yes_no "¿Copiar a HOME/.config/autostart?" ""; then

                l_origen="./datos/config/autostart"

                l_destino="$g_folder_home/.config/autostart"

                _copy_full_folder "$l_origen" "$l_destino"

              fi


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

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

                l_origen="./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

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

                l_origen="./datos/gnupg"

                l_destino="$g_folder_home/.gnupg"

                _copy_full_folder "$l_origen" "$l_destino"

              fi


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

              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

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

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

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

                _tar_descomprimir "$l_origen" "$l_destino"

              fi


            # Directorio de Scripts

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

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

                l_destino="$g_folder_home/script"

                _tar_descomprimir "$l_origen" "$l_destino"


                echo ""

                echo "export PATH=\$PATH:\$HOME/script/.myscript"

                } >> "$g_folder_home"/.bashrc

              fi


            # Directorio de pagina web personal incluidas las guias

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

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

                l_destino="$g_folder_home/Documentos/personalpage"

                _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 " versión: $g_app_version ($g_app_fecha)"

          echo ""

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

          echo ""

          echo "  >> $g_folder_home"

          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

              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

          # Restaura información

            _restaurar_datos

          # Configurar flatpak

            _config_flatpak

          # Instalar el software de flatpak

            _instalar_paquetes_flatpak

          # Instalar aplicaciones AppImage

            _instalar_apps_appimage

          # Configurar FireFox

            _configurar_firefox

          # Configurar la Firma Digital

            _configurar_firma_digital

          # Configurar fstab

            _config_fstab

          # Instalar impresora

            _instalar_impresora_ML1865

          # Finalizar

            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 " versión: $g_app_version ($g_app_fecha)"

          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?" ""; 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(){

          clear

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

          echo ""

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

          echo " versión: $g_app_version ($g_app_fecha)"

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

          read -r -p "     Selecciona opción [1/2] " opcion

          echo ""

          case $opcion in

            "1")

              echo 1

              _tareas_previas


            "2")

            _tareas_posteriores


            "3")

            _backup_home



            echo "Finalizado"

            g_fin_script=1

            exit 0


          esac



    # INICIO DEL SCRIPT

      # 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

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

          echo ""

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

          echo "   su [enter]"

          echo "   sudo usermod -aG sudo $USER"

          echo "   sudo shutdown -r now"

          exit 1

        fi


      # Presentar menu inicial

      _menu_inicial