Volvemos a la carga con mas scripts de bash. Esta vez necesito realizar un sha1sum para obtener el hash sha1 de unos ficheros que están dentro de muchos directorios. Como sha1sum no soporta la opción recursiva (en mi opinión un fallo), no queda otra que recurrir a nuestro amado bash.
Aquí el script para la ocasión
#!/bin/bash
DIRECTORY="material"
find "$DIRECTORY" -type d -print0 -maxdepth 4 | while read -r -d '' d; do
echo "#### SHA1SUM Directorio: $d #####"
sha1sum $d/*
done
Mi buen amigo Bruno, hace unos días me pasó una extracción de un teléfono móvil con la friolera de más de 51.000 páginas. Mi pobre y humilde portátil sacaba humo sólo al abrirlo así que he tenido que ingeniármelas para dividir el fichero en ficheros más pequeños y poder gestionar la información cómodamente. La solución, un script.
El script tiene dos opciones, usar pdftk o pdfjam. Deberemos comentar y descomentar la línea que nos interese.
Si queremos usar pdftk será necesario instalarlo
# apt install pdftk
Para usar pdfjam, que me ha procesado la información más rápido que con pdftk, será necesario instalar texlive-extra-utils
# apt install texlive-extra-utils
Otra herramienta que será necesario instalar es pdfinfo que se encuentra dentro del paquete poppler-utils
# apt install poppler-utils
A continuación el script
#!/bin/bash
INPUT_FILE=Redmi7-ASPERTIC.pdf
PAGES=`pdfinfo ${INPUT_FILE} |grep Pages |awk -F ' ' '{print $2}'`
FILENAME=`basename ${INPUT_FILE} |awk -F '.' '{print $1}'`
SPLIT=500
START=1
echo "Total Pages: ${PAGES}"
echo
COUNTER=$START
ITER=1
while [ "$COUNTER" -le "$PAGES" ]
do
START=$(($COUNTER))
END=$(($START + $SPLIT - 1))
echo
echo "#################"
echo "start ${START} end ${END} iter ${ITER}"
if [[ "$PAGES" -le "$END" ]]
then
END=$PAGES
echo "last end is ${END} of total pages ${PAGES}"
fi
#pdftk ${INPUT_FILE} cat ${START}-${END} output ${FILENAME}_${ITER}.pdf
pdfjam ${INPUT_FILE} ${START}-${END} -o ${FILENAME}_${ITER}.pdf
COUNTER=$(($COUNTER + $SPLIT))
ITER=$(($ITER + 1))
done
Y listos, lo mismo de siempre, crear el fichero, darle permisos de ejecución y ejecutarlo!
Aquí una captura del final de la ejecución del script sobre el susodicho fichero
Por fin otra tarea menos! Esta ya daba vergüenzilla y todo al tener la instalación anterior de dudle aún con Debian 6!!! Así que directamente lo que he planteado es hacer una instalación limpia y los datos que puedan estar ahí, que pasen a mejor vida! Aunque creo que los datos aún serían compatibles, parece que tienen el mismo formato.
Vamos a ver como se hace ahora la instalación. Para ello he seguido el repositorio de github del proyecto que omite la información de la instalación y configuración de apache.
A continuación clonamos el repositorio en algún sitio del servidor, en mi caso lo he dejado en /var/www/dudle
# cd /var/www
# git clone https://github.com/kellerben/dudle.git
Ahora vamos a descargar los ficheros .mo correspondientes a los ficheros de idioma compilados. Vamos a crear un script, le damos permisos de ejecución, lo ejecutamos y finalmente borramos el fichero.
# cd dudle/locale
# vi download_mo.sh
for i in ??; do
wget -O $i/dudle.mo https://dudle.inf.tu-dresden.de/locale/`basename $i`/dudle.mo
done
# chmod +x download_mo.sh
# ./download_mo.sh
# rm download_mo.sh
Ahora configuramos apache:
# cd /etc/apache2/sites-available
# vi dudle.conf
<VirtualHost *:80>
ServerName dudle.marsupi.org
ServerAlias *.dudle.marsupi.org dudle.lamardebits.org *.dudle.lamardebits.org dudle.lamardebits.cat *.dudle.lamardebits.cat
ServerAdmin xxx@lamardebits.org
DocumentRoot /var/www/dudle/
ErrorLog /var/log/apache2/dudle.error.log
CustomLog /var/log/apache2/dudle.access.log combined
<Directory "/var/www/dudle">
AllowOverride All
SetEnv RUBYLIB /var/www/dudle/
SetEnv RUBYOPT "-E UTF-8:UTF-8"
SetEnv GIT_AUTHOR_NAME="Blackhold"
SetEnv GIT_AUTHOR_EMAIL=xxx@domain.com
SetEnv GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"
SetEnv GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
# cd /etc/apache2/sites-enabled/; rm
Seguí el artículo pero no servía, así que para solucionar el problema de suspensión con esta nueva versión es distinto. Olvida todo lo otro del otro artículo.
Al iniciar me salía este error:
de nov. 12 00:55:59 melatonina kernel: hpet_acpi_add: no address or irqs in _CRS
de nov. 12 00:55:59 melatonina kernel: Linux agpgart interface v0.103
de nov. 12 00:55:59 melatonina kernel: DMAR: DRHD: handling fault status reg 3
de nov. 12 00:55:59 melatonina kernel: DMAR: [DMA Read NO_PASID] Request device [00:12.4] fault addr 0xd7fff000 [fault reason 0x02] Present bde nov. 12 00:55:59 melatonina kernel: tsc: Refined TSC clocksource calibration: 2592.007 MHz
de nov. 12 00:55:59 melatonina kernel: clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x255cbd4609f, max_idle_ns: 440795221428 ns
de nov. 12 00:55:59 melatonina kernel: clocksource: Switched to clocksource tsc
de nov. 12 00:55:59 melatonina kernel: tpm tpm0: Operation Timed out
de nov. 12 00:55:59 melatonina kernel: tpm tpm0: Operation Timed out
de nov. 12 00:55:59 melatonina kernel: tpm_crb: probe of MSFT0101:00 failed with error -62
de nov. 12 00:55:59 melatonina kernel: AMD-Vi: AMD IOMMUv2 functionality not available on this system - This is not a bug.
La solución:
# vi /etc/default/grub
GRUB_CMDLINE_LINUX="intel_iommu=off"
Estos dos últimos meses he estado trabajando con una tienda virtual desarrollada con django llamada django oscar. Muy interesante el juguete, tunearla ha habido momentos de todo, en algunos momentos era una delicia por la documentación que tienen y por otros iba más perdida que un pingüino en el desierto y los atascos eran monumentales además de la presión del cliente que tenía que tener el proyecto en funcionamiento un mes y pico antes de que se me diese acceso al código para poder arreglar y aplicar las funcionalidades extra que se requerían. El proyecto era uno que había dejado a medias otro desarrollador y tuve que rehacer todo el código porqué tal como se me entregó la aplicación había cosas básicas de funcionamiento rotas, además de variables en inglés, en castellano y catalán (no es el primer proyecto que me encuentro así).
Django oscar se usa como aplicación de Backend y de frontend hay desplegado un NextJS que tras dar alguna que otra vuelta he terminado modificando alguna cosa.
En entorno local de desarrollo todo funcionaba correctamente, pero al ponerlo en producción la cosa se ha puesto divertida y ha requerido investigar varias cosas que voy a exponer en este post en modo de notas.
La aplicación de frontend se conecta con django oscar por API y hasta que no añadí la opción CSRF_TRUSTED_ORIGINS la comunicación era infructuosa.
# vi settings.py
# this allows nextjs to connect to django without using csrf_token
CSRF_TRUSTED_ORIGINS = 'http://127.0.0.1'
CSRF_COOKIE_SAMESITE = "None"
Hay algunas tareas de estas que se convierten en titánicas y no sabes muy bien el porqué y esta lo ha sido. Así que traigo este post para que otra persona que quiera montar este sistema no tenga que dar tantas vueltas y poder hacerlo a la primera :)
Hace unos meses que estamos preparando cursos bajo la marca escueladeeuropa. Los cursos la idea es montarlos en el LMS Moodle (learning management system), pero luego quedaba la cosa como los vendíamos… nos dijimos, sería chulo que los cursos se vendiesen solos a través de la página web hecha con wordpress… y ahí empezó la carrera.
Conectar wordpress y moodle es posible gracias a dos plugins, el primero edwiser y el segundo lmsace. El primero es mucho más intuitivo pero a la que quieres empezar a conectarlo con woocommerce, paga. El segundo… ¡ay el segundo! ¡vamos a verlo!
Concepto
La idea es que en tu moodle tienes unos cursos y en tu wordpress el woocommerce. Para conectar moodle y wordpress es necesario primero de todo crear los usuarios en wordpress que luego se crearán automáticamente en moodle. Esto se llama “user enrolment”.
Para conectar ambos programas será necesario instalar 1 plugin en wordpress y (atención) 2 en moodle! todo lo que necesitas saber lo encontrarás en la wiki de lmsace.
Moodle
Empezamos con moodle, será necesario instalar los dos plugins, lmsace-connect-moodle y lmsace-connect-moodleauth. El segundo aunque en la wiki pone que es opcional, hasta que no lo he …
En uno de mis proyectos estamos ya en la recta final a punto de poner en producción el nuevo programa. A último momento siempre te encuentras con aquellas puñetitas que hacen que la migración no salga como es lo esperado, es por esto que es muy importante practicar la migración al igual que si de una audición se tratase.
La puñetita con la que me he encontrado trata precisamente de la importación de datos mas grande, la de una tabla de 4Gb de datos, que contiene las lecturas de unos sensores, he decidido separarlas en alrededor de 4.000 ficheros de base de datos sqlite3, uno para cada uno de los sensores. Al realizar la importación de cada uno de los sensores de forma individual, de maravilla, pero a la que se hace el proceso de migración de todos los sensores, algunas de las lecturas se duplican y no he conseguido hallar el porqué ocurre.
Ya hace unos días puse un par de controles que si el fichero ya existía o la base de datos estaba siendo usada, pasase al siguiente sensor, aún así seguían duplicandose los datos. La solución era añadir un tercer control que comprobase que el registro ya estaba guardado, pero que ralentizaría la migración de los datos de forma significativa y la primera migración el interés es que sea lo más ágil posible. Así que dándole un par de vueltas y muy importante, tras más de 24h de no tocar el código (se llama descansar), he encontrado …
Gilab es un software para gestionar repositorios de software. Existe github y gitlab tiene también su repositorio público. Gitlab permite la instalación del software en tu propia infraestructura.
Lo primero que tendremos que hacer es modificar el fichero de configuración que se encuentra en /etc/gitlab/gitlab.rb, buscar las siguientes líneas, descomentarlas y configurarlas de la siguiente forma (para que funcione con la configuración del servidor de correo electrónico instalado con modoboa)
A continuación ejecutamos lo siguiente para aplicar la nueva configuración
# gitlab-ctl reconfigure
Una vez realizado el reconfigure, entramos en la consola de gitlab y comprobamos que la configuración se haya aplicado y mandamos un correo electrónico de prueba
# gitlab-rails console -e production
--------------------------------------------------------------------------------
Ruby: ruby 3.0.6p216 (2023-03-30 revision 23a532679b) [x86_64-linux]
GitLab: 15.11.0 (96ee37680b6) FOSS
GitLab Shell: 14.18.0
PostgreSQL: 13.8
------------------------------------------------------------[ booted in 32.38s ]
Loading production environment (Rails 6.1.7.2)
irb(main):001:Notify.test_email('info@capa8.net', 'Hello World', 'This is a test message').deliver_now
Y si todo es correcto, deberías recibir un correo electrónico de prueba.…
Tengo un cliente al que le tengo que migrar el servicio a un hosting de estos con cpanel y estas mierdas. Para subir los ficheros tengo que subirlos por FTP pero el wordpress que tengo que subir tiene mogollón de ficheros y subirlos uno a uno es para morirse. Además quiero hacer la transferencia de los ficheros directamente desde el servidor.
El cliente ftp básico no me permite subir un directorio completo, así que estoy usando otro cliente ftp, ncftp.
Lo instalo usando
# apt -y install ncftp
Y me posiciono en el directorio donde tengo el wordpress
# cd /var/www/
y lo subo usando
# ncftpput -avR -u -p
directorio_remoto: es el directorio del servidor remoto, en mi caso public_html
directorio_local: donde tengo el wordpress en mi servidor, wp…