πΎ Archived View for gmi.osiux.com βΊ 2023-06-13-file2lftp.gmi captured on 2023-07-10 at 13:12:09. Gemini links have been rewritten to link to archived content
-=-=-=-=-=-=-
<video id="video" controls width="720" height="406" autoplay loop background="#000000" preload> <source src="videos/file2lftp-1920x1080.mp4" type="video/mp4"> </video>
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?
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!
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/` β ββββββββββββββ΄ββββββββββββββββββββββββββββ΄ββββββββββββββββ
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 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 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 index.html index.html => pub.osiux.com:web/index.html . . . . . 376 bytes transferred
1: https://docs.gitlab.com/ee/ci/
2: https://docs.gitlab.com/omnibus/installation/
4: https://github.com/lavv17/lftp
5: https://www.passwordstore.gmi/
6: https://gitlab.com/osiux/bin-bash-utils/-/raw/develop/file2lftp
8: 2023-02-27-git-auto-commit-and-push-using-crontab.gmi
9: 2023-02-15-send-automatic-notifications-using-ntfy.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