Cuando tienes acceso a internet pero es muy lento, este binario te permite descargar grandes archivos (como imágenes ISO) al estilo torrent.
Puedes detener la descarga y reanudarla en el momento que desees.
./lisp-downloader url
# ejemplo
./lisp-downloader https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.7.0-amd64-netinst.iso
Puedes descargar cualquier archivo de gran tamaño de la internet, aquí te dejo una lista de algunos enlaces a modo de ejemplo.
- Debian 12 x86-64 netinstall https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.8.0-amd64-netinst.iso
- Debian 12 DVD x86-64 https://cdimage.debian.org/debian-cd/current/amd64/iso-dvd/debian-12.8.0-amd64-DVD-1.iso
- Canaima 8 Gnome x86-64 https://descargas.softwarelibre.gob.ve/canaima/iso/kavanayen/canaima-8.0-gnome_amd64.iso
- Canaima 8 XFCE x86-64 https://descargas.softwarelibre.gob.ve/canaima/iso/kavanayen/canaima-8.0-xfce_amd64.iso
- Canaima 8 KDE Plasma x86-64 https://descargas.softwarelibre.gob.ve/canaima/iso/kavanayen/canaima-8.0-kde_amd64.iso
- Canaima 8 LXDE x86-64 https://descargas.softwarelibre.gob.ve/canaima/iso/kavanayen/canaima-8.0-lxde_amd64.iso
- Canaima 8 MATE x86-64 https://descargas.softwarelibre.gob.ve/canaima/iso/kavanayen/canaima-8.0-mate_amd64.iso
- Canaima 8 Cinnamon x86-64 https://descargas.softwarelibre.gob.ve/canaima/iso/kavanayen/canaima-8.0-cinnamon_amd64.iso
- Canaima 8 Semillero científico x86-64 https://descargas.softwarelibre.gob.ve/canaima/iso/kavanayen/canaima-8.0-xfce-semillero-cientifico_amd64.iso
Si sabes usar Common Lisp puedes hacer la descarga y colocarlo en el local de quicklisp.
Si NO sabes usar common Lisp, puedes proceder así:
- Luego de descargar el repositorio, mueve el binario bin/lisp-downloader al directorio "/usr/local/bin"
función www-to-file(archivo-a-escribir, url-de-descarga): Descarga el archivo desde la url, siempre y cuando el servidor permita descargas parciales.
función accept-ranges?(url-de-descarga): Predicado que evalúa si el servidor permite descarga por rangos de bytes.
función request(url-de-descarga): Pregunta de pequeña descarga parcial para obtener la metadata de la cabecera.
función parts(file-size): Determina la cantidad de partes a descargar, en función a 20 megabytes.
función jump-step(start, stop &optional (step 1)): Función de rango desde start a stop y con saltos usando step, útil para el porcentaje de descarga según las partes.
función download-percent(partes): Determina el porcentaje acumulado para cada segmento del archivo.
función range(número): genera una lista de números desde 0 hasta número.
función flatten(obj): Aplana estructuras anidadas.
función group(origen cantidad): Agrupa a origen según cantidad.
función download-ranges-aux(partes-a-descargar): Genera los intervalos de descarga para cada segmento.
función donwnload-ranges(url-de-descarga): Toma la url y genera los intervalos de descarga.
función mul-mapcar(lista &rest listas): Realiza un mapcar sobre el header de múltiples listas, la lista de menor tamaño trunca el procesamiento.
función database-download-file(base-de-datos, url-de-descarga): Genera el archivo CSV que sirve como punto para activar las descargas parciales y reactivar las descargas luego de una interrupción.
función grep-line(base-de-datos, regex): Busca en un archivo de entrada el regex y retorna la línea.
función parts-for-download(base-de-datos): Retorna sólo la lista de archivos a descargar.
función part-downloader(base-de-datos): Lee el archivo a descargar desde la base de datos, lo escribe en el disco duro y actualiza que la descarga ya se realizó.
función file-parts-ordeder(base-de-datos): Lee la base de datos, verifica que ya todos los archivos fueron descargados y retorna una lista ordenada de los archivos parciales.
función cat-files(lista-parcial-ordenada, archivo-de-salida): Funciona como el binario "/usr/bin/cat" para la concatenación binaria de archivos para generar el resultante.
función clean(base-de-datos): Limpia todas las descargas parciales y base de datos, luego de que el archivo a descargar está completo.
función random-string(cantidad-de-caracteres): Genera una cadena aleatoria del tamaño de cantidad-de-caracteres.
función job-directory(): Crea el directorio base para el descargador, se encuentra en el home del usuario en modo oculto.
función main(argumentos): Captura la entrada de los argumentos en la terminal, valida si se pasaron la cantidad correcta de los mismos, crea el directorio de trabajo y realiza la descarga parcial.
git clone https://gitlab.com/Charte/file-downloader-lisp
cd file-downloader-lisp
buildapp --output lisp-downloader --asdf-path . \
--asdf-tree ~/quicklisp/dists \
--load-system file-downloader-lisp \
--entry file-downloader-lisp:main
- El binario funciona para archivos mayores a 20 megabytes, es una decisión de diseño, se puede cambiar a solicitud.
- El binario que se encuentra en el directorio bin/ es x86-64, diseñado para GNU/Linux
- El proyecto es funcional, sin embargo, se estarán realizando actualizaciones y mejoras en funcionalidad y automatización en la instalación.
- Las pruebas iniciales se realizaron en un equipo de 8GB de RAM, Disco duro SATA, no tengo métricas para equipos de menos hardware, cualquier sugerencia y test es bienvenido.
- Charte (charte_charte@proton.me)
GPL 3