-- Leo's gemini proxy

-- Connecting to gmi.osiux.com:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini;lang=es_AR

`file2lftp`


AUTHOR: Osiris Alejandro Gomez

EMAIL: osiux@osiux.com

DATE: 2023-06-13 18:18


<video id="video" controls width="720" height="406" autoplay loop background="#000000" preload>
  <source src="videos/file2lftp-1920x1080.mp4" type="video/mp4">
</video>

Publicar rápido!


Hace un par de días, la *CI* ^1[1] de *GitLab* ^2[2] se rompió mal y por ello mi *blog* ^3[3] dejó de auto-regenerarse automáticamente luego de un `git push`.


Entonces ahora tengo 2 opciones, o me pongo a ver porqué se rompió la *CI* (parece ser que superé el límite de espacio en disco) o mitigo de alguna forma rápida sin mucho esfuerzo?


`lftp` es la posta!


Recordé que hace un par de años había escrito un *script* para realizar *mirrors* de sitios *webs* usando `lftp` ^4[4], que es un cliente *FTP* pensado para usar desde *scripts*.


Me tomó un par de minutos adaptarlo y funciona muy rápido!


La idea es simple, estando en un directorio, quiero enviar un archivo a un sitio y no quiero tipear mucho mas que el comando y el nombre del archivo a enviar, simplemente tipear:


# file2lftp index.html

index.html => osiux.com:web/index.html
.
.
.
.
.

9154 bytes transferred

Listo! ya está donde debe, sin definir el *server*, ni el *user* ni la *pass* de conexión!


Dónde esta la magia?


Resulta que uso `pass` ^5[5] *(Password Store)* y las credenciales ya las tenía definidas de ante-mano, es decir que en la ruta `ftp/osiux.com/osirisosiux` esta almacenada la contraseña de manera cifrada usando *GPG*.


Ahora bien, cómo sabe `file2lftp` ^6[6] dónde buscar la contraseña?


Fácil, al iniciar el *script* obtiene el *hostname* del servidor remoto usando el *hostname* del equipo donde estoy, todos mis equipos son parte del dominio `osiux.com` sin importar en qué lugar físico estén situados, entonces solo hay que buscar algún directorio que se llame `osiux.com` dentro de `~/.password-store` y eso hace el *script*.


Al encontrar el directorio, busca el primer archivo `.gpg` y se queda con el nombre del archivo sin la extension, en este caso `osirisosiux`


Luego verifica que el archivo especificado exista y genera la línea de comandos a ejecutar.


Obviamente se puede especificar mediante variables otra opciones:


┌────────────┬───────────────────────────┬───────────────┐
│ *variable* │         *default*         │   *example*   │
╞════════════╪═══════════════════════════╪═══════════════╡
│ `FTP_HOST` │ `hostname -d`             │ `osiux.com`   │
├────────────┼───────────────────────────┼───────────────┤
│ `FTP_USER` │ `find -file -iname *.gpg` │ `osirisosiux` │
├────────────┼───────────────────────────┼───────────────┤
│ `FTP_RDIR` │ `web`                     │ `web`         │
├────────────┼───────────────────────────┼───────────────┤
│ `FTP_LDIR` │ `$PWD`                    │ `~/blog/`     │
└────────────┴───────────────────────────┴───────────────┘

un alias para todo!


Aprovechando el uso de `alias` definí 4 nuevos comandos para agilizar la tareas y contar con casos específicos para otros directorios y/o sitios:


alias file2blg='FTP_HOST=osiux.com     FTP_USER=osirisosiux file2lftp'
alias file2img='FTP_HOST=osiux.com     FTP_USER=osirisosiux FTP_RDIR=web/img file2lftp'
alias file2tmb='FTP_HOST=osiux.com     FTP_USER=osirisosiux FTP_RDIR=web/tmb file2lftp'
alias file2pub='FTP_HOST=pub.osiux.com FTP_USER=osirispub   file2lftp'

`file2img` publicar en `osiux.com/img`


# file2img img/vim-autosave-backup.png
img/vim-autosave-backup.png => osiux.com:web/img/img/vim-autosave-backup.png
.
.
.
.
.

1792644 bytes transferidos en 6 segundos. (278.4 KiB/s)

`file2tmb` publicar en `osiux.com/tmb/`


# file2tmb tmb/vim-autosave-backup.png
tmb/vim-autosave-backup.png => osiux.com:web/tmb/tmb/vim-autosave-backup.png
.
.
.
.
.

306573 bytes transferidos en 1 segundo. (226.6 KiB/s)

`file2pub` publicar en `pub.osiux.com`


# file2pub index.html
index.html => pub.osiux.com:web/index.html
.
.
.
.
.

376 bytes transferred

Tal vez te interese leer


`wifi2qr`[7]

git auto commit and push using crontab.gmi[8]

enviar notificaciones automáticas usando `ntfy.sh`[9]

alinear textos en columnas[10]

historial infinito en `bash`[11]

Semana Negra - Sobrevivir en la shell[12]


ChangeLog


`2023-06-14 01:33`[13] actualizar imagen OpenGraph file2lftp

`2023-06-14 01:24`[14] reemplazar gif por mp4 en file2lftp

`2023-06-14 00:26`[15] agregar video file2lftp-640x360 en file2lftp

`2023-06-13 23:55`[16] agregar file2lftp


1: https://docs.gitlab.com/ee/ci/

2: https://docs.gitlab.com/omnibus/installation/

3: https://osiux.com/

4: https://github.com/lavv17/lftp

5: https://www.passwordstore.gmi/

6: https://gitlab.com/osiux/bin-bash-utils/-/raw/develop/file2lftp

7: 2023-06-06-wifi2qr.gmi

8: 2023-02-27-git-auto-commit-and-push-using-crontab.gmi

9: 2023-02-15-send-automatic-notifications-using-ntfy.gmi

10: 2021-04-05-align2col.gmi

11: 2021-03-17-historial-infinito-en-bash.gmi

12: 2014-04-28-semana-negra.gmi

13: https://gitlab.com/osiux/osiux.gitlab.io/-/commit/e28c7c0b18d5c81d2923aaa438b213b9e173038b

14: https://gitlab.com/osiux/osiux.gitlab.io/-/commit/12fb883403c8f0f7f318da73a713da498b831601

15: https://gitlab.com/osiux/osiux.gitlab.io/-/commit/51ec4fdfe7a5721756593c322cfb6d3380e14251

16: https://gitlab.com/osiux/osiux.gitlab.io/-/commit/757be0ca947351bff7dce144d3f94530df74ccac

-- Response ended

-- Page fetched on Thu May 2 05:59:42 2024