From 03e640f8a0c5ddfa726df80cb5d29fc23b4bd8fe Mon Sep 17 00:00:00 2001 From: alejandrogs73 Date: Sun, 27 Sep 2026 23:47:29 +0200 Subject: [PATCH] Copia diaria de los marcadores de Firefox en el servidor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - marcadores (home/.local/bin, desde .xinitrc): sube al servidor la copia de marcadores que Firefox ya guarda en el perfil. diario/ guarda 7 días y semanal/ una por semana, todas. Solo lo intenta con la clave SSH de gpg-agent desbloqueada, para no sacar pinentry, y lo reintenta cada hora; "marcadores ya" la sube en el momento. - ssh: el alias server va por el dominio, así funciona también fuera de casa. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_016UdJsHrbkmzhoCb6TthP2m --- README.md | 12 ++++++-- home/.local/bin/marcadores | 57 ++++++++++++++++++++++++++++++++++++++ home/.ssh/config | 5 ++-- home/.xinitrc | 1 + 4 files changed, 71 insertions(+), 4 deletions(-) create mode 100755 home/.local/bin/marcadores diff --git a/README.md b/README.md index 29f22d9..95ac016 100644 --- a/README.md +++ b/README.md @@ -123,8 +123,16 @@ y muestran una notificación. - bash: historial de 10 000 órdenes, sin duplicados y compartido entre terminales; el prompt muestra la rama de git (`*` cambios sin añadir, `+` añadidos). -- `~/.ssh/config` con alias: `ssh server` (10.0.0.10) y `forgejo`. Sin - claves: las da gpg-agent. +- `~/.ssh/config` con alias: `ssh server` y `forgejo`, los dos por el + dominio para que funcionen dentro y fuera de casa. Sin claves: las da + gpg-agent. +- Copia de los marcadores de Firefox (`marcadores`, desde `.xinitrc`): sube + una vez al día al servidor la copia que Firefox ya hace sola + (`bookmarkbackups/*.jsonlz4`), a `/var/storage/PUBLIC/backup_void/marcadores`: + `diario/` guarda 7 días y `semanal/` una por semana, todas. Solo lo intenta + con la clave SSH desbloqueada (para no sacar pinentry) y lo reintenta cada + hora. `marcadores ya` la sube en el momento. Para restaurar: Firefox > + Marcadores > Administrar marcadores > Importar y respaldar > Restaurar. - Tras 30 minutos sin tocar nada se bloquea con slock (`xss-lock`) y un minuto después se apaga la pantalla. - Memorias USB y tarjetas SD: el servicio `automontaje` (runit, como root) diff --git a/home/.local/bin/marcadores b/home/.local/bin/marcadores new file mode 100755 index 0000000..044eefd --- /dev/null +++ b/home/.local/bin/marcadores @@ -0,0 +1,57 @@ +#!/bin/sh +# Copia de seguridad de los marcadores de Firefox en el servidor. +# +# Firefox ya guarda cada día una copia en el perfil (bookmarkbackups/*.jsonlz4) +# y se restaura desde Marcadores > Administrar marcadores > Importar y +# respaldar > Restaurar > Elegir archivo. Este script sube la más reciente: +# diario/ una al día, se guardan las de los últimos 7 días +# semanal/ la primera de cada semana, se guardan todas +# +# Se lanza desde .xinitrc y lo intenta cada hora hasta conseguirlo ese día. +# Solo lo intenta si la clave SSH de gpg-agent ya está desbloqueada, para no +# sacar pinentry al arrancar la sesión. "marcadores ya" lo sube en el momento. + +HOST=server +DESTINO=/var/storage/PUBLIC/backup_void/marcadores +MARCA=${XDG_CACHE_HOME:-$HOME/.cache}/marcadores-subidos + +# ¿Está desbloqueada la clave SSH? (7.º campo de KEYINFO: 1 = en caché) +desbloqueada() { + kg=$(grep -v '^#' "$HOME/.gnupg/sshcontrol" 2>/dev/null | awk 'NR == 1 { print $1 }') + [ -n "$kg" ] && + gpg-connect-agent "keyinfo $kg" /bye 2>/dev/null | awk '$1 == "S" { exit $7 != 1 }' +} + +subir() { + dir=$HOME/.config/mozilla/firefox + perfil=$(sed -n 's/^Default=//p' "$dir/installs.ini" 2>/dev/null | head -1) + [ -n "$perfil" ] || return 1 + # Los nombres llevan la fecha: la última del orden alfabético es la más nueva + ultima= + for f in "$dir/$perfil"/bookmarkbackups/bookmarks-*.jsonlz4; do + [ -e "$f" ] && ultima=$f + done + [ -n "$ultima" ] || return 1 + + hoy=$(date +%F) + semana=$(date +%G-W%V) + ssh -T -o BatchMode=yes -o ConnectTimeout=10 "$HOST" " + set -e + mkdir -p '$DESTINO/diario' '$DESTINO/semanal' + cat > '$DESTINO/diario/marcadores-$hoy.jsonlz4' + cp -n '$DESTINO/diario/marcadores-$hoy.jsonlz4' '$DESTINO/semanal/marcadores-$semana.jsonlz4' + find '$DESTINO/diario' -name 'marcadores-*.jsonlz4' -mtime +6 -delete + " <"$ultima" +} + +if [ "$1" = ya ]; then + subir && date +%F >"$MARCA" && echo "Marcadores subidos a $HOST:$DESTINO" + exit +fi + +while :; do + if [ "$(cat "$MARCA" 2>/dev/null)" != "$(date +%F)" ] && desbloqueada && subir; then + date +%F >"$MARCA" + fi + sleep 3600 +done diff --git a/home/.ssh/config b/home/.ssh/config index f7c5259..5e95d51 100644 --- a/home/.ssh/config +++ b/home/.ssh/config @@ -1,9 +1,10 @@ # Alias de mis máquinas. Aquí no hay claves: las da gpg-agent (SSH_AUTH_SOCK # en .bashrc), así que este archivo puede ir en el repo sin problema. -# Servidor de casa (solo desde la red local) +# Servidor de casa, por el dominio para que funcione también fuera de casa +# (dentro, el router lo redirige; fail2ban ignora la red local) Host server - HostName 10.0.0.10 + HostName ssh.alejandrogs.es User alejandro # Forgejo: "git clone forgejo:alejandrogs73/suckless.git" diff --git a/home/.xinitrc b/home/.xinitrc index ea7d7bd..6e37b40 100644 --- a/home/.xinitrc +++ b/home/.xinitrc @@ -36,6 +36,7 @@ slstatus & clipmenud & gammastep & bateria & +marcadores & # Bloquear con slock tras 30 minutos sin tocar nada, y apagar la pantalla un # minuto después. Al suspender ya bloquea el hook de zzz (--ignore-sleep).