a) Notas para posteriores instalaciones
Configurar el script de instalación [REVISAR]
Script: Tareas previas a la instalación
Script: Copia de seguridad de HOME
Shotwell - Respaldar y Restaurar
Calibre - Respaldar y Restaurar
¿Cómo crear un USB con la live ISO?
Distribución de los discos duros
Script: Tareas posteriores a la instalación
Copia de documentación y archivos
Configurar trabajos de mantenimiento y backup de la información
Instalar aplicaciones manualmente
Aplicaciones al inicio (Crontab)
Instalar y Configurar Flatpak - App,s flatpak
Incluir usuario en el grupo sudo (*)
f) Scrip de instalación de Debian 12
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
Debian images: installer images, live images, cloud images
Medios de instalación de Debian usando USB, CD, DVD
link=https://www.kernel.org/The Linux Kernel Archives
En este apartado se recogen notas a tener en cuenta en futuras instalaciones.
# 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"
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.
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
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.
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.
Si se ha instalado desde flatpak .... (Ver Shotwell)
Para realizar la instalación se una imagen live híbrida con gnome.
Imagen ISO híbrida Debian con Gnome"
Con Fedora Media Writer (flatpak) / Raspberry Pi Imager
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
Ejecutar el script de instalación y seleccionar la opción de tareas posterio-
res a la instalación.
.- 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
Recuperar la información.
Poner iconos personales.
.- 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.
.- nil
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.
Información:
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
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.
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.
(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
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'
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
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
.- 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.
#!/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