Copia diaria de los marcadores de Firefox en el servidor
- 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 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016UdJsHrbkmzhoCb6TthP2m
This commit is contained in:
parent
2870ac7dca
commit
03e640f8a0
4 changed files with 71 additions and 4 deletions
12
README.md
12
README.md
|
|
@ -123,8 +123,16 @@ y muestran una notificación.
|
||||||
- bash: historial de 10 000 órdenes, sin duplicados y compartido entre
|
- bash: historial de 10 000 órdenes, sin duplicados y compartido entre
|
||||||
terminales; el prompt muestra la rama de git (`*` cambios sin añadir,
|
terminales; el prompt muestra la rama de git (`*` cambios sin añadir,
|
||||||
`+` añadidos).
|
`+` añadidos).
|
||||||
- `~/.ssh/config` con alias: `ssh server` (10.0.0.10) y `forgejo`. Sin
|
- `~/.ssh/config` con alias: `ssh server` y `forgejo`, los dos por el
|
||||||
claves: las da gpg-agent.
|
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
|
- Tras 30 minutos sin tocar nada se bloquea con slock (`xss-lock`) y un
|
||||||
minuto después se apaga la pantalla.
|
minuto después se apaga la pantalla.
|
||||||
- Memorias USB y tarjetas SD: el servicio `automontaje` (runit, como root)
|
- Memorias USB y tarjetas SD: el servicio `automontaje` (runit, como root)
|
||||||
|
|
|
||||||
57
home/.local/bin/marcadores
Executable file
57
home/.local/bin/marcadores
Executable file
|
|
@ -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
|
||||||
|
|
@ -1,9 +1,10 @@
|
||||||
# Alias de mis máquinas. Aquí no hay claves: las da gpg-agent (SSH_AUTH_SOCK
|
# 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.
|
# 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
|
Host server
|
||||||
HostName 10.0.0.10
|
HostName ssh.alejandrogs.es
|
||||||
User alejandro
|
User alejandro
|
||||||
|
|
||||||
# Forgejo: "git clone forgejo:alejandrogs73/suckless.git"
|
# Forgejo: "git clone forgejo:alejandrogs73/suckless.git"
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@ slstatus &
|
||||||
clipmenud &
|
clipmenud &
|
||||||
gammastep &
|
gammastep &
|
||||||
bateria &
|
bateria &
|
||||||
|
marcadores &
|
||||||
|
|
||||||
# Bloquear con slock tras 30 minutos sin tocar nada, y apagar la pantalla un
|
# 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).
|
# minuto después. Al suspender ya bloquea el hook de zzz (--ignore-sleep).
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue