Mostrando las entradas para la consulta apt-get ordenadas por fecha. Ordenar por relevancia Mostrar todas las entradas
Mostrando las entradas para la consulta apt-get ordenadas por fecha. Ordenar por relevancia Mostrar todas las entradas

GImageReader lector OCR simple y ligero

El reconocimiento óptico de caracteres expresado con frecuencia con la sigla OCR (del inglés Optical Character Recognition), es un proceso dirigido a la digitalización de textos desde una imagen o por ejemplo de un PDF. En muchos casos tenemos una imagen o un PDF que contiene texto, bien obtenido desde una fotografía, o de un escaneo de un documento, y nuestra intención es obtener ese texto para poder ser usado en: un articulo, o en los apuntes de la escuela. Para evitar mecanografiar la fotografía, hay programas que son capaces de reconocer el texto que contiene el archivo gráfico, capturarlo y así poder ser exportado a otro documento, o permitir un copia-pega.


GImageReader es un lector OCR simple, ligero, gratuito y multi-plataforma para ordenador que nos facilitara la tarea de obtener texto de imágenes o de archivos PDF.

Las funciones que esta aplicación permite realizar son las siguientes:

  • Importar documentos PDF e imágenes desde el disco, dispositivos de escaneado, porta papeles y capturas de pantalla.
  • Procesar múltiples imágenes y documentos de una sola vez
  • Definir del área de reconocimiento manual o automática
  • Reconocer a texto sin formato o documentos hOCR
  • Mostrar el texto reconocido directamente junto a la imagen
  • Procesar el texto reconocido, incluida la revisión ortográfica
  • Importar documentos o imágenes cuyo texto se encuentre en diferentes idiomas
  • Generar documentos PDF a partir de documentos hOCR


- Generar documentos PDF desde el documento hOCR

  • Ubuntu

    Ubuntu: Disponible en ppa:sandromani/gimagereader
Se encuentra disponible en los repositorios de las principales distribuciones linux, y es posible instalarlo desde terminal:
  • Fedora:
yum install  tesseract tesseract-langpack-es gimagereader

  • Aprcity o derivados de Arch

yaourt -S gimagereader

  Si no tenemos tesseract instalado, toca ejecutar:

sudo pacman -S tesseract tesseract-data-eng tesseract-data-spa

    •  En Ubuntu y derivadas como Linux Mint

    sudo add-apt-repository ppa:sandromani/gimagereader

    sudo apt-get update

    sudo apt-get install gimagereader tesseract-ocr tesseract-ocr-spa tesseract-ocr-eng

     El funcionamiento, como ya he dicho, es muy simple. En este caso vamos a hacer una captura de pantalla que contiene texto e imágenes, y vamos a digitalizar el texto para exportarlo a un PDF.

    Pegar imagen que ha sido copiada y capturada en el navegador

    Añadimos un archivo, pegamos una imagen o realizamos una captura de pantalla
    Se nos mostrara el documento seleccionado
    Podemos ajustar de forma manual el área que queremos capturar o dejar que el programa haga su magia y reconozca los textos que contiene.
    Si fuera necesario podemos manipular la imagen para aumentar o disminuir el brillo, contraste, resolución de pantalla, o invertir los colores.
    Una vez se muestran las áreas que contienen el o los texto que queremos digitalizar, le indicaremos en que idioma se encuentra escrito, gImageReader reconocerá el texto y nos mostrará a continuación los textos que ha reconocido. 
    Podremos copiarlo o guardarlo en en un archivo de texto plano, que nos permitirá manipular más tarde.
    En este caso te he descrito los pasos para una imagen, pero el potencial de la aplicación va más allá por que es capaz de digitalizar documentos PDF que no sean editable y exportarlo a un PDF que puedas modificar.
    Vista rápida de la captura de texto de una imagen

    Sistema de archivos con mayor compatibilidad entre Windows, Linux y Mac

    Cuando en el hogar, o en la oficina, utilizas distintos sistemas operativos Windows, Linux o Mac. Es muy importante dar un formateado con un sistema de archivos, compatible para nuestros discos duros y/o memorias externas.

    Recientemente he recuperado un disco duro de 80Gb y quería utilizarlo de soporte para copias de seguridad. Conectándolo a un sistema Linux, este caso Linux Mint, el montaje de la unidad y su lectura eran correctos, pero a la hora de conectarlo a un sistema Windows 11, este no lo reconocía.

    El sistemas mas compatible entre los distintos sistemas operativos es FAT32. Pero tiene la limitación que solo se pueden formatear con este sistema unidades de no mas de 4 GB.

    NTFS (Nueva Tecnología de sistema de archivos)es un sistema nativo de Windows, no es compatible en sistemas MAC y algunas distribuciones Linux.

    ext2, ext3 y ext4 son formatos que suelen utilizar de forma local las distribuciones Linux, y nos puede acarrear algún problema de lectura en sistemas Windows.

    exFAT:

    • Ventajas: Permite archivos grandes y es compatible con Windows, macOS y Linux.
    • Limitaciones: No es tan ampliamente compatible como FAT32.
    • Uso común: Buen formato para unidades externas compartidas entre diferentes sistemas operativos.


    Para poder realizar este formateo de una unidad externa USB al formato exFAT es necesario tener instalado la utilidad exFAT-utils
    sudo apt-get install exfat-utils

    Para saber donde se encuentra tu unidad USB alojada, puedes averiguarlo con el comando  

    df -h

     df  Informa  de  la  utilización del espacio de disco en sistemas de ficheros.

     -h Opción que muestra la capacidad de las carpetas solicitadas

    Una vez que nos hemos asegurado que la unidad se encuentra montada en nuestro sistema, procederemos a realizar el formateado de la misma

    sudo mkfs.exfat <ruta disco usb>

    Descargar video y audio con youtube-dl

    En esta entrada se muestra el uso de la aplicación youtube-dl que permite descargar video y/o audio de servicios de publicación audiovisuales tales como:

    • BBC iPlayer
    • CNN
    • Dailymotion
    • Dropbox
    • Facebook
    • Google Drive
    • LiveLeak
    • Lynda
    • Metacafe
    • Metacritic
    • Openload
    • Streamango
    • Tonton
    • Vid.me
    • Vimeo
    • YouTube
    • Crunchyroll
    • Música
    • 8tracks.com
    • AudioMack
    • Bandcamp
    • Beatport
    • Deezer
    • EveryonesMixtape
    • Freesound
    • Hearthis.at
    • Myspace
    • SoundCloud
    • más....
    Recuerda que algunos audios y videos que se encuentran alojado en estos servicios, pueden estar tutelados bajo licencias privativas y por consiguiente con derechos de autor. Y que deberás actuar en consecuencia a las leyes de tu país.

    Youtube-dl es una aplicación liviana y multiplataforma (Windows, Linux) que nos permite descargar de internet contenido audiovisual a nuestro ordenador, en formatos que podemos utilizar de forma offline, sin conexión a red. Principalmente está enfocado a descargar video y audio del servidor de contenido multimedia Youtube , aunque puede ser utilizado otras plataformas.

    Se encuentra en los repositorios oficiales de Debian

     sudo apt-get install youtube-dl

    Si no disponemos de distribucion basada en Debian, descargamos el archivo de la aplicación y le daremos privilegios de ejecución.

     sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl

    o

    sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl

    Y le daremos permisos daremos permisos de ejecución

     sudo chmod a+rx /usr/local/bin/youtube-dl

    En sistemas Linux es posible que necesitemos instalar el paquete ffmpeg, para la conversión en distintos formatos de audio y video

    Youtube-dl no tiene entorno gráfico, y deberá ser ejecutado el terminal

    Para descargar el archivo en nuestro ordenador, primero deberemos navegar por los distribuidores de contenido favoritos y obtener la dirección url del video del queremos tener copia offline.

    Te dejo unos ejemplos con las opciones básicas, si quieres profundizar más o no encuentras la configuración adecuada, siempre puedes consultar la documentación de youtube-dl

    • Descargar un archivo de <url> donde se encuentre alojada el ejecutable
      • youtube-dl <url>
    • Descargar un archivo de  <url> en una carpeta concreta.
      • Linux usaremos comillas simple para indicar la ruta de la carpeta: youtube-dl -o '<carpeta donde queremos guardar el archivo>' <url>
      • Windows no es necesario usar comillasyoutube-dl -o  <carpeta donde queremos guardar el archivo>' <url>
    • Youtube-dl nos permite descargar ficheros en gran variedad de formatos de audio y video, dependiendo de la fuente. Para listar las opciones disponibles para un medio:
      • youtube-dl --list-formats <url>
    • Descargar video en formato determinado
      • youtube-dl -f mp4 <url>
    • Para descargar el multimedia en todos los formatos soportados
      • youtube-dll --all-formats <url>
    • Para descargar el audio y convertirlo a formato mp3. Recuerde que en Linux, tendremos que tener instalado el paquete ffmpeg.
      • Windows: youtube-dl -x --audio-format mp3 <url>
      • Linux: youtube-dl --format mp3 <url>
    • Descargar con la máxima calidad
      • Mejor video y audio: youtube-dl -f best <url>
      • Mejor audio y convertirlo a mp3: youtube-dl -f bestaudio -x --audio-format mp3 <url>
      • Mejor calidad de video: youtube-dl -f bestvideo <url>
    • Descargar con la mínima calidad disponible
      • Peor video y audio: youtube-dl -f worst <url>
      • Peor audio y convertirlo a mp3: youtube-dl -f worstaudio -x --audio-format mp3 <url>
      • Peor calidad de video: youtube-dl -f worstvideo <url>
    • Descargar varias direcciones que hemos listado en un archivo de texto, indicando cada url en una línea.
      • youtube-dl -a <archivo que contiene url>
    • Descargar el video y los subtitulos, siempre y cuando estén habilitados
      • youtube-dl --embed-subs <url>
    • También permite la descarga de listas de reproducción, simplemente hay que indicar el URL de la lista en lugar del URL del vídeo. La url del la lista tiene que ser: https://www.youtube.com/playlist?list=<lista>
      • youtube-dl <url playlist>

    • Para descargar solo una parte de una lista de reproducción 
      • youtube-dl --playlist-start 5 --playlist-end 10 <url playlist>
    • ERROR: 7UiyB3zXm3c: YouTube said: Unable to extract video data
      • youtube-dl --update
    Algunas de las ventajas de usar youtube-dl son:
    • Es compatible con muchas más páginas web que sus competidores.
    • Es un programa pensado para usarse desde la terminal, lo que lo hace muy ligero y rápido.
    • Es un software libre y gratuito, lo que te garantiza su transparencia y seguridad.
    • No contiene , ni muestra publicidad, como si ocurre con ciertas aplicaciones web.

    Como ver dependencias rotas desde terminal

    Al realizar una instalación en Linux es posible que durante el proceso no se instalen todas las dependencias, o también que durante un mantenimiento se hayan borrado paquetes necesarios para otras aplicaciones. Para saber si tenemos paquetes huérfanos y/o dependencias rotas en el sistema, podremos utilizar el comando:


    sudo apt-get check


    Si todo está correcto, obtendremos un resultado similar a este:


    Leyendo lista de paquetes... Hecho

    Creando árbol de dependencias       

    Leyendo la información de estado... Hecho


    Si no es así, deberíamos resolver las dependencias que nos muestran o purgar la aplicación que  no se ha instalado de forma completa 

    Artículos realizados con esta publicación:

    Añadir botón apagado encendido Raspberry

    Raspberry es un pequeño ordenador, de bajo coste que podemos utilizar como PC  de sobremesa o como servidor, sin necesidad de conectarle ningún periférico (pantalla, teclado, ratón). En este último caso, la labor de apagado solo es posible desconectando la corriente, con el consabido riesgo de pérdida de datos, y creamos archivos corruptos que impidan y/o dificulten su posterior encendido. También es posible que dañemos la tarjeta SD y debemos sustituirla o formatearla y volver a volcar el sistema operativos e instalar servicios que teníamos instalados y configurarlos otra vez.

    Una forma de evitar este tedioso proceso es incluir un botón de apagado, que también nos será válido para volver a encenderlo si lo dejamos en stand-by.


    Para ello utilizaremos el interfaz I/O del que dispone la Raspberry



    El interfaz GPIO dispone de unos terminal macho numerados. Disponiendo las Raspberry en esta posición su disposición sera de izquierda a derecha y de arriba abajo empezando del 1 al 40


    En nuestro caso utilizaremos los pines 4 y 6 donde colocaremos nuestro botón para realizar el apagado de nuestro pequeño ordenador. 

    Realizaremos un pequeño bricolaje. La manera más sencilla sería con la utilización de dos cables que en una de sus puntas se encuentran una punteras hembras aisladas y en la otra punta de los cables soldar un pequeño pulsador. También podremos utilizar una placa de pruebas para, más adelante poder ampliar nuestros proyectos.


    Dependendiendo del sistema operativo que utilicemos, es posible que tengamos que realizar la instalación de ciertas librerías para que los scripts de Python funcionen correctamente

    sudo apt-get install python-is-python3

    sudo apt-get -y install python3-rpi.gpio

    Los siguientes scripts que manejan los eventos provocados por la pulsación del botón colocado entre el pin 5 y 6 han sido copiados de la página 

    Soloelectronicos.com

     Crearemos un archivo ejecutable para Python que llamaremos listen-for-shutdown.py

    sudo nano listen-for-shutdown.py

    Copiaremos el siguiente script el archivo que hemos creado y guardaremos su contenido


    #!/usr/bin/env python


    import RPi.GPIO as GPIO

    import subprocess



    GPIO.setmode(GPIO.BCM)

    GPIO.setup(3, GPIO.IN, pull_up_down=GPIO.PUD_UP)

    GPIO.wait_for_edge(3, GPIO.FALLING)


    subprocess.call(['shutdown', '-h', 'now'], shell=False)

     

    Seguidamente moveremos el archivo a la carpeta /usr/local/bin/

    sudo mv listen-for-shutdown.py /usr/local/bin/

    Y le daremos atributos de ejecución

    sudo chmod +x /usr/local/bin/listen-for-shutdown.py

    Si tenemos nuestra Raspberry en stand-by, bien por que la hemos apagado desde la línea de comandos o desde nuestro botón de apagado. También es posible encenderlo desde el mismo botón, para ello crearemos un nuevo archivo. 

    sudo nano listen-for-shutdown.sh

    Y copiaremos y guardaremos el siguiente código:


     #! /bin/sh


    ### BEGIN INIT INFO

    # Provides:          listen-for-shutdown.py

    # Required-Start:    $remote_fs $syslog

    # Required-Stop:     $remote_fs $syslog

    # Default-Start:     2 3 4 5

    # Default-Stop:      0 1 6

    ### END INIT INFO


    # If you want a command to always run, put it here


    # Carry out specific functions when asked to by the system

    case "$1" in

      start)

        echo "Starting listen-for-shutdown.py"

        /usr/local/bin/listen-for-shutdown.py &

        ;;

      stop)

        echo "Stopping listen-for-shutdown.py"

        pkill -f /usr/local/bin/listen-for-shutdown.py

        ;;

      *)

        echo "Usage: /etc/init.d/listen-for-shutdown.sh {start|stop}"

        exit 1

        ;;

    esac


    exit 0

     

    Una vez guardado moveremos el archivo a la carpeta  /etc/init.d/

    sudo mv listen-for-shutdown.sh /etc/init.d/

    Y le concederemos privilegios de ejecución:

     sudo chmod +x /etc/init.d/listen-for-shutdown.sh

    Ahora registramos la secuencia de comandos para ejecutar en el arranque y le pasaremos el parámetros de arranque con los dos siguientes comandos.

    sudo update-rc.d listen-for-shutdown.sh defaults

    sudo /etc/init.d/listen-for-shutdown.sh start

    En mi caso tenia instalado Ubuntu Server como sistema operativo. Y es posible que al ejecutar el script te aparezcan uno o varios mensajes de error. Si es asi te dejo los articulos que publique para solucionarlos, y que vuestro botón de apagado funcione correctamente.

    Mensaje de error /usr/bin/env: ‘python’: No such file or directory

    Mensaje de error import RPi.GPIO as GPIO ModuleNotFoundError: No module named 'RPi'


    Mensaje de error import RPi.GPIO as GPIO ModuleNotFoundError: No module named 'RPi'

    Continuando con la configuración para que funcione un botón de apagado para la Raspberry Pi2 conectado al al GPIO.

    Al lanzar el ejecutable escrito en Python 3 se detiene en la linea en la que importa la RPi de la GPIO, el módulo no ha sido instalado.

    import RPi.GPIO as GPIO ModuleNotFoundError: No module named 'RPi'

    Para solucionarlo hay que instalar, o reinstalar el módulo python3-rpi.gpio

     sudo apt-get -y install python3-rpi.gpio

    Mensaje de error /usr/bin/env: ‘python’: No such file or directory

    Al intentar implementar un botón de apagado para la Raspberry Pi2 en el que tengo instalado Ubuntu Server, al lanzar el servicio de un ejecutable escrito para Python 3, me encontré con el siguiente error.

    /usr/bin/env: ‘python’: No such file or directory

    La solución encontrada ha sido realizando la instalación del paquete  python-is-python3

    sudo apt-get install python-is-python3

     

    Cómo cambiar el idioma del teclado en terminal Linux

     

    Teclado en ingles

    Al realizar una instalación en Linux es posible configurar el tipo de teclado utilizado y la configuración regional, para que podamos las características del idioma castellano. Pero si no ha sido posible, podremos configurarlo a posteriori. Este artículo y el anterior están muy relacionados, o sugiero echar un vistado para una correcta configuración Cambio de idioma y caracteres a español terminal Linux

    El comando que utilizaremos será

    setxkbmap

    Pero para ello deberemos tener instalado la libreria x11-xkb-utils

    sudo apt-get install x11-xkb-utils

    Y ahora si cambiaremos la configuración de distribución del teclado español

    sudo setxkbmap es

    o

    sudo setxkbmap -layout 'es,es' -model pc105

     

    Para que esta nueva configuración tenga efecto deberemos reiniciar el sistema

    Lynx navegador web para terminal

    Lynx aparte de ser un lince es un navegador web y cliente de gopher en modo texto, que podremos utilizar en nuestro terminal.

    Es muy común que para aliviar la carga de potencia sea necesario prescindir del entorno gráfico. Pero que a la vez tengamos que consultar manuales o artículos de ayuda accediendo a páginas web que se encuentran en internet. Para estos casos podremos utilizar Lynx, el entorno es muy simple y en modo texto, aunque si que podremos visualizar imágenes accediendo a los hiperenlaces.



    Para poder instalar Lynx:

    Ubuntu  

    sudo apt install lynx

     

    Debian

     sudo apt-get install lynx


     Arch Linux

     sudo pacman -S lince


     Fedora

    sudo dnf instalar lynx


     OpenSUSE

     sudo zypper instalar lynx


    MS-DOS

     http://ftp.gnu.org/pub/gnu/gzip/gzip-1.2.4.msdos.exe

    Una vez instalado el funcionamiento es muy simple, solo tendremos que invocar al navegador y la dirección que deseamos visitar. En este caso si queremos acceder a enfaseterminal.com utilizariamos secuencia de comando:

    lynx enfaseterminal.com


     Para navegar utilizaremos las teclas ⇑⇓ o la barra de espaciadora para ver la siguiente página

    Para visitar el hipervínculo utilizar

    Para volver hacia atrás 

    Para poder salir de la navegación utilizar Q

    Recuerda que es un navegador simple y no soporta los nuevos estándares multimedia

    El navegador que está utilizando no es compatible con las últimas tecnologías web (HTML5 y CSS3) necesarias para el funcionamiento correcto de este sitio web. Para conseguir una plena compatibilidad le recomendamos estos otros navegadores: Chrome, Firefox, Safari e Internet Explorer (en sus dos últimas versiones y con la vista de compatibilidad desactivada).

     

    En caso de necesitar ayuda utlizar el comando

    lynx

     

    Instalar servidor MiniDLNA

    Vamos a instalar un servidor DLNA en, por ejemplo Raspberry, para utilizarla de servidor multimedia para poder ver nuestros archivos en nuestra SmartTV. La tecnología DLNA es admitida por la mayoría de dispositivos multimedia actuales, a diferencia de utilizar un servidor PLEX en la que tenemos que instalar la APP en nuestra SmartTV y registrándose en su plataforma.

    Es un servidor muy sobrio y de un consumo de recursos muy reducido, el aspecto es el de un explorador de archivos, y su reproductor multimedia muy simple. Pero cumple su función de servidor de videos, música e imágenes en nuestra red local.

    También podríamos instalar nuestro servidor DLNA en un viejo ordenador en el que hubiéramos instalado un Linux con alguna de las múltiples distribuciones basadas en Debian.

    Accedemos a nuestra Raspberry o nuestro servidor casero a traves de SSH e instalamos con privilegios de root la aplicación MiniDLNA también conocida como ReadyMedia

    sudo apt-get install minidlna

     Iniciaremos el servicio:

    sudo service minidlna start

    Y habilitaremos minidlna para que el servicio sea levantado cuando iniciemos nuestro servidor local 

    sudo service minidlna enable

    Deberemos acceder al archivo de configuración para indicarle, entre otras cosas, la ruta donde se encuentran los archivos que queremos mostrar en nuestra LAN. Estos se pueden encontrar en un disco duro externo que habremos conectado a través del puerto USB de nuestro servidor doméstico.

    sudo nano /etc/minidlna.conf

    Accederemos a un archivo de texto plano donde cambiaremos

    • Ubicación de los archivos de video
    media_dir=V,/media/downloads/videos
    • Ubicación de los archivos de música: 
    media_dir=A,/media/downloads/musica
    • Ubicación de los archivos de imagen
    media_dir=P,/media/downloads/fotos

    • Ubicación de la base de datos que almacenará los archivos que se mostraran
    db_dir=/var/cache/minidlna

    •  Si queréis almacenar logs de lo que pasa en el servidor tienen que descomentar esta línea. Los logs los podréis encontrar en la ubicación.
    log_dir=/var/log

    •  Puerto en el que escuchara el pequeño servidor web, que nos mostrara una pequeña información de nuestro servidor. No podremos realizar ninguna acción, como por ejemplo la de configuración
    port=8200


    MiniDLNA status

    •  Nombre con el que se anunciara en nuestros clientes multimedia
    friendly_name=Pi

    • Seleccionamos la opción yes. De este modo, cuando se borre o copie contenido del servidor se actualizará la información de la base de datos

    inotify=yes

    •  Definimos los nombres que deben tener las caratulas de un audio o vídeo. Si queremos definir una caratula para una película podemos hacerlo guardando una imagen con el nombre cover.jpg o Cover.jpg en la carpeta que contiene la película. El tamaño recomendado es de 160×160 pixeles
    album_art_names=cover.jpg/cover.jpg

    • En esta linea configuramos el intervalo de segundos que nuestro servidor anunciara su presencia en la red. Un buen intervalo serian cada 60 segundos
    notify_interval=60

    Una vez modificado el archivo a nuestro gusto, lo guardaremos y reiniciaremos el demonio para que la nueva configuración tenga efecto:

    sudo service minidlna restart

    MiniDLNA usa la propiedad del Kernel inotify para detectar las modificaciones en cada una de las carpetas que almacena contenido. Al detectarse una modificación se actualiza el contenido de la base de datos /var/cache/minidlna/files.db.


    Para que inotify pueda monitorizar las modificaciones tendremos que cambiar sus límites. Para fijar un nuevo límite ejecutaremos el siguiente comando:

    sudo echo 65538 > /proc/sys/fs/inotify/max_user_watches 

    sudo service minidlna restart

    Si por alguna razón deseamos reconstruir la base de datos:

    sudo service minidlna force-reload

    Y listo ya tendríamos un servidor multimedia en nuestra red local y podríamos ver nuestros videos en nuestro:

    • SmartTV
    Botón Source, Entrada externa o Fuente

     


    • En otros dispositivos podemos utilizar el reproductor multimedia VLC 
    Accederemos a Plug’n’Play Universal y esperamos a que VLC encuentre nuestro servidor miniDLNA y nos permita reproducir su contenido.

    Como resolver dependencias rotas

    Como resolver dependencias rotas de una instalación basada en Debian.

    En una entrada anterior intentaba solucionar la instalación fallida de un paquete:

    Resolver dependencias al instalar un paquete

    Pero al desinstalar o purgar una aplicación, puede que por error se borró alguna librería de la que dependa otro programa o servicio. Una de las formas que nos recomienda el propio sistema es la ejecución del script:


    sudo apt --fix-broken install


    Dependencias rotas

     


    Si no ha habido éxito, como fue mi caso ejecutaremos los siguientes comandos

    Lo primero que haremos es intentar configurar paquetes que han sido desempaquetados, pero no configurados. Para ello ejecutaremos el siguiente comando en la terminal:


    sudo dpkg --configure -a


    Seguidamente limpiaremos la cache local de paquetes .deb 


    sudo apt-get clean && sudo apt-get autoclean


    Regeneramos la caché de los repositorios con el parámetro –fix-missing. De este modo intentaremos detectar y reparar problemas de dependencias en nuestro sistema operativo.


    sudo apt-get update --fix-missing


    Corregiremos las dependencias rotas. Para ello ejecutaremos el siguiente comando en la terminal: 


    sudo apt-get install -f

     

    En este punto mi problema se solucionó, restaurando el sistema y pudiendo ejecutar


    sudo apt-get dist-upgrade


    Para poder actualizar el sistema. 

    Los siguientes paquetes se han retenido

    Realizando tareas de mantenimiento del sistema, este me respondió con el mensaje:


    sudo apt-get full-upgrade 

    Leyendo lista de paquetes... Hecho

    Creando árbol de dependencias       

    Leyendo la información de estado... Hecho

    Calculando la actualización... Hecho

    Los siguientes paquetes se han retenido:

      rawtherapee

     

    A partir de aquí ya no me permite actualizar el sistema

    Una de las soluciones que encontré fue, curiosamente, actualizar el paquete que se encontraba retenido, utilizando el comando:

    sudo apt-get upgrade <nombre paquete retenido>


    sudo apt-get upgrade rawtherapee

    Leyendo lista de paquetes... Hecho

    Creando árbol de dependencias       

    Leyendo la información de estado... Hecho

    Calculando la actualización... Hecho

    Los siguientes paquetes se ELIMINARÁN:

      rawtherapee-data

    Los siguientes paquetes se han retenido:

      gparted

    Se actualizarán los siguientes paquetes:

      rawtherapee

    1 actualizados, 0 nuevos se instalarán, 1 para eliminar y 1 no actualizados.

    Se necesita descargar 17,3 MB de archivos.

    Se utilizarán 28,9 MB de espacio de disco adicional después de esta operación.

    ¿Desea continuar? [S/n] s

    Des:1 http://ppa.launchpad.net/dhor/myway/ubuntu bionic/main amd64 rawtherapee amd64 5.8-1dhor~bionic [17,3 MB]

    Descargados 17,3 MB en 1s (21,4 MB/s)  

    dpkg: rawtherapee-data: problemas de dependencias, pero se desinstalará de todas formas

     tal y como se solicitó:

     rawtherapee depende de rawtherapee-data (= 5.3-1).

    (Leyendo la base de datos ... 551670 ficheros o directorios instalados actualmente.)

    Desinstalando rawtherapee-data (5.3-1) ...

    (Leyendo la base de datos ... 550717 ficheros o directorios instalados actualmente.)

    Preparando para desempaquetar .../rawtherapee_5.8-1dhor~bionic_amd64.deb ...

    Desempaquetando rawtherapee (5.8-1dhor~bionic) sobre (5.3-1) ...

    Configurando rawtherapee (5.8-1dhor~bionic) ...

    Procesando disparadores para gnome-menus (3.13.3-11ubuntu1.1) ...

    Procesando disparadores para hicolor-icon-theme (0.17-2) ...

    Procesando disparadores para mime-support (3.60ubuntu1) ...

    Procesando disparadores para desktop-file-utils (0.23+linuxmint8) ...

    Procesando disparadores para man-db (2.8.3-2ubuntu0.1) ...


     

    Actualizar Pi-Hole

    En una entrada anterior ya recomendamos la utilización de Pi-Hole para realizar un bloqueo por denegación de DNS de direcciones maliciosas o la publicidad de las páginas que visitamos o de los equipos que queremos monitorizar.
    Para actualizarlo, accederemos a través de SSH al terminal donde tendremos corriendo Pi-hole y ejecutaremos la instrucción:

    pihole -up 1

    Y ya está, ha sido sencillo. 

      [i] Checking for updates...

      [i] Pi-hole Core:     update available

      [i] Web Interface:    update available

      [i] FTL:              update available


      [i] Pi-hole core files out of date, updating local repo.

      [✓] Check for existing repository in /etc/.pihole

      [i] Update repo in /etc/.pihole...HEAD is now at cbc3fbd Merge pull request #3989 from pi-hole/release/v5.2.3

      [✓] Update repo in /etc/.pihole


      [i] If you had made any changes in '/etc/.pihole/', they have been stashed using 'git stash'


      [i] Pi-hole Web Admin files out of date, updating local repo.

      [✓] Check for existing repository in /var/www/html/admin

      [i] Update repo in /var/www/html/admin...HEAD is now at 3ff33a3 Merge pull request #1704 from pi-hole/release/v5.3

      [✓] Update repo in /var/www/html/admin


      [i] If you had made any changes in '/var/www/html/admin/', they have been stashed using 'git stash'


      [i] FTL out of date, it will be updated by the installer.


      [✓] Root user check


            .;;,.

            .ccccc:,.

             :cccclll:.      ..,,

              :ccccclll.   ;ooodc

               'ccll:;ll .oooodc

                 .;cll.;;looo:.

                     .. ','.

                    .',,,,,,'.

                  .',,,,,,,,,,.

                .',,,,,,,,,,,,....

              ....''',,,,,,,'.......

            .........  ....  .........

            ..........      ..........

            ..........      ..........

            .........  ....  .........

              ........,,,,,,,'......

                ....',,,,,,,,,,,,.

                   .',,,,,,,,,'.

                    .',,,,,,'.

                      ..'''.


      [✓] Update local cache of available packages

      [i] Existing PHP installation detected : PHP version 7.4.3

      [i] Performing unattended setup, no whiptail dialogs will be displayed


      [✓] Checking apt-get for upgraded packages... 19 updates available

      [i] It is recommended to update your OS after installing the Pi-hole!


      [i] Installer Dependency checks...

      [✓] Checking for dhcpcd5

      [✓] Checking for git

      [✓] Checking for iproute2

      [✓] Checking for whiptail

      [✓] Checking for dnsutils


      [✓] Supported OS detected

      [i] SELinux not detected

      [i] Performing reconfiguration, skipping download of local repos

      [✓] Resetting repository within /etc/.pihole...

      [✓] Resetting repository within /var/www/html/admin...

      [i] Main Dependency checks...

      [✓] Checking for cron

      [✓] Checking for curl

      [✓] Checking for iputils-ping

      [✓] Checking for lsof

      [✓] Checking for netcat

      [✓] Checking for psmisc

      [✓] Checking for sudo

      [✓] Checking for unzip

      [✓] Checking for wget

      [✓] Checking for idn2

      [✓] Checking for sqlite3

      [✓] Checking for libcap2-bin

      [✓] Checking for dns-root-data

      [✓] Checking for libcap2

      [✓] Checking for lighttpd

      [✓] Checking for php7.4-common

      [✓] Checking for php7.4-cgi

      [✓] Checking for php7.4-sqlite3

      [✓] Checking for php7.4-xml

      [✓] Checking for php7.4-json

      [✓] Checking for php7.4-intl


      [✓] Enabling lighttpd service to start on reboot...

      [✓] Checking for user 'pihole'


      [i] FTL Checks...


      [✓] Detected x86_64 processor

      [i] Checking for existing FTL binary...

      [✓] Downloading and Installing FTL

      [✓] Installing scripts from /etc/.pihole


      [i] Installing configs from /etc/.pihole...

      [i] Existing dnsmasq.conf found... it is not a Pi-hole file, leaving alone!

      [✓] Copying 01-pihole.conf to /etc/dnsmasq.d/01-pihole.conf


      [i] Installing blocking page...

      [✓] Creating directory for blocking page, and copying files

      [i] Backing up index.lighttpd.html

          No default index.lighttpd.html file found... not backing up


      [✓] Installing sudoer file


      [✓] Installing latest Cron script


      [✓] Installing latest logrotate script

      [i] Backing up /etc/dnsmasq.conf to /etc/dnsmasq.conf.old

      [✓] man pages installed and database updated

      [i] Testing if systemd-resolved is enabled

      [i] Systemd-resolved does not need to be restarted

      [✓] Restarting lighttpd service...

      [✓] Enabling lighttpd service to start on reboot...

      [i] Restarting services...

      [✓] Enabling pihole-FTL service to start on reboot...

      [✓] Restarting pihole-FTL service...

      [✓] Deleting existing list cache

      [i] Neutrino emissions detected...

      [✓] Pulling blocklist source list into range


      [✓] Preparing new gravity database

      [i] Using libz compression


      [i] Target: https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts

      [✓] Status: Retrieval successful

      [i] Received 58568 domains


      [i] Target: https://mirror1.malwaredomains.com/files/justdomains

      [✗] Status: Not found

      [✗] List download failed: no cached list available


      [i] Target: https://www.sunshine.it/blacklist.txt

      [✓] Status: Retrieval successful

      [i] Received 82108 domains


      [✓] Storing downloaded domains in new gravity database

      [✓] Building tree

      [✓] Swapping databases

      [i] Number of gravity domains: 140676 (131363 unique domains)

      [i] Number of exact blacklisted domains: 6

      [i] Number of regex blacklist filters: 0

      [i] Number of exact whitelisted domains: 16

      [i] Number of regex whitelist filters: 1

      [✓] Flushing DNS cache

      [✓] Cleaning up stray matter


      [✓] DNS service is listening

         [✓] UDP (IPv4)

         [✓] TCP (IPv4)

         [✓] UDP (IPv6)

         [✓] TCP (IPv6)


      [✓] Pi-hole blocking is enabled


      [i] The install log is located at: /etc/pihole/install.log

    Update Complete! 


      Current Pi-hole version is v5.2.3.

      Current AdminLTE version is v5.3.

      Current FTL version is v5.4.

    E: Sub-process /usr/bin/dpkg returned an error code (1)

    A la hora de hacer uso de apt-get bien para instalar, borrar, o actualizar el sistema. Al principio parece que toda va bien pero al final del proceso me indica que ha habido un error y me muestra:

    E: Sub-process /usr/bin/dpkg returned an error code (1)

    Al parecer al realizar las tareas cotidianas de actualización del sistema, algún paquete a quedado retenido y no permite continuar.

    Uno de las formas que encontrado para poder liberar el proceso, que ha quedado atrapado. Es accediendo a la carpeta:

    /var/lib/dpkg/info

    En esta carpeta se recoge información sobre los paquetes instalados, o en proceso de instalación.

    La solución es descubrir que paquete ha quedado retenido y borrar la información sobre el. Por ejemplo utilizando el comando

    sudo apt-get update

    Nos saldrá el paquete que está creando esta situación, seguido de E: Sub-process /usr/bin/dpkg returned an error code (1)

    Accedemos al directorio:

    cd /var/lib/dpkg/info

    Y borramos los archivos relacionados con el paquete que ha quedado retenido. En mi caso eran varios y último era man-db

    sudo rm man-db.*

    Volvemos a actualizar las lista de paquetes:

    sudo apt-get update

    Y ya podemos actualizar nuestro sistema e instalar nuevos paquetes. 

    Como borrar y eliminar todos los archivos de una aplicación

     Si necesitas más espacio, o la aplicación que instalaste no ha cumplido tus expectativas. Tienes que desinstalar la aplicación, pero si lo utilizas con las herramientas gráficas puede ser que los archivos de configuración y de perfil del programa permanezcan en el disco duro.

    En terminal vamos a desinstalar y purgar la aplicación, vamos a borrar con una sola línea todos los archivos y carpetas relacionados con el programa.

    sudo apt-get --purge remove <Nombre del paquete a desistalar>

    • sudo: Nos permitirá ejecutar el comando con privilegios de administrador
    • apt-get: Comando que puede agregar o eliminar paquetes del sistema.
    • --purge: Le indicamos al comando que borre los archivos de configuración relacionados con la aplicación que queremos desinstalar.
    • remove: Borrar el paquete nombrado.


    No tiene suficiente espacio libre en /var/cache/apt/archives/

     No tiene suficiente espacio libre en /var/cache/apt/archives/


    sudo du -sh /var/cache/apt/archives

    Quedarse sin espacio no es lo más habitual si utilizas grandes computadoras. Pero es problema muy común en ordenadores antiguos, o como es el caso en una Raspberry a la hora de actualizar el sistema operativo.

    Primero vamos a averiguar que cantidad de memoria está ocupando los archivos en la caché. Utilizaremos el comando du (Uso de Disco) con el argumento -sh

    • -s, pantalla Resumir sólo un total para cada argumento.
    • -h, tamaños de impresión. Formato legible por el hombre (por ejemplo, 1K 234M 2G)

    sudo du -sh /var/cache/apt/archives


    sudo apt clean

    En mi caso el espacio ocupado por la caché de los repositorios es de 85Mb. Y después de utilizar el comando apt clean reducimos al tamaño de una carpeta vacía.
    sudo apt clean

    sudo apt-get clean

     

     




    Como enviar correo electronico con archivo adjunto en PHP

    Como enviar un correo electrónico con archivos adjuntos con PHP 📨. 
    Puede ser que necesitemos crear una función para enviar un correo electrónico con un archivo adjunto, como respuesta a un formulario o para realizar publicaciones en otros servidores.
    Si utilizamos una plataforma que en al que podemos programar y ejecutar PHP debemos asegurarnos que se encuentre instalado sendmail
    Si somos el administrador de nuestro propio servidor, podremos instalarlo desde el terminal:
    sudo apt-get install sendmail
    Si somos invitados en el servidor, lanzaremos un script para comprobar si podemos utilizar la función mail:

    <?php
        ini_set( 'display_errors', 1 );
        error_reporting( E_ALL );    //Comprobaremos si ha sido enviado o no
        $from = "TU CORREO ELECTRONICO"; //La dirección de correo desde que la enviamos
        $to = "DESTINATARIO";    //Dirección de correo a la que enviamos el mail
        $subject = "Probando PHP mail";    //Encabezado del correo
        $message = "PHP mail funciona correctamente";    //El mensaje
        $headers = "From:" . $from;    //Cabecera que dejamos tal cual
        mail($to,$subject,$message, $headers);    //Enviamos el correo
        echo "The email message was sent.";    //Confirmamos que el correo ha sido enviado

    ?>

    Si hemos recibido el correo, podremos continuar con la programación de nuestra función.


    //Recipiente
    $to = 'DESTINATARIO';     //A quien le enviamos nuestro correo

    //remitente del correo
    //Desde que correo le envamos y quien será el destinatario de la respuesta si lo hubiera
    $from = 'NUESTRO CORREO ELECTRONICO';
    $fromName = 'UN NOMBRE, O NICK DESCRIPTIVO';    //Quienes somos o nuestra organización

    //Asunto del email
    //Utilizamos la función utf8_decode() para que nos reconozca las tildes y la ñ, entre otros caracteres
    $subject = utf8_decode('ASUNTO DEL CORREO'); 

    //Ruta del archivo adjunto
    $file = 'DIRECCIÓN GLOBAL DEL ARCHIVO QUE VAMOS A ENVIAR';

    //Contenido del Email
    //La función htmlentities() nos convertira las tildes ñ y caracteres especiales en etindades HTML
    $htmlContent = htmlentities('CONTENIDO DEL CORREO CODIFICADO EN HTML'); 

    //Encabezado para información del remitente
    $headers = "De: $fromName"." <".$from.">";

    //Limite Email
    $semi_rand = md5(time()); 
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 

    //Encabezados para archivo adjunto 
    $headers .= "\n MIME-Version: 1.0 \n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; 

    //límite multiparte
    $message = "--{$mime_boundary}\n" . "Content-Type: text/html; charset=\"UTF-8\"\n" .
    "Content-Transfer-Encoding: 7bit\n\n" . $htmlContent . "\n\n"; 

    //preparación de archivo
    if(!empty($file) > 0){
        if(is_file($file)){
            $message .= "--{$mime_boundary}\n";
            $fp =    @fopen($file,"rb");
            $data =  @fread($fp,filesize($file));
            @fclose($fp);
            $data = chunk_split(base64_encode($data));
            $message .= "Content-Type: application/octet-stream; name=\"".basename($file)."\"\n" . 
            "Content-Description: ".basename($file)."\n" .
            "Content-Disposition: attachment;\n" . " filename=\"".basename($file)."\"; size=".filesize($file).";\n" . 
            "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
        }
    }
    $message .= "--{$mime_boundary}--";
    $returnpath = "-f" . $from;

    //Enviar EMail
    $mail = @mail($to, $subject, $message, $headers, $returnpath); 

    Esta función requiere mucho tiempo de ejecución y no es recomendable para el envio masivo de correos electronicos.

    Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?

    E: No se pudo bloquear /var/lib/dpkg/lock-frontend - open (11: Recurso no disponible temporalmente)
    E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?

    Alguna vez nos podemos encontrar con este mensaje al intentar instalar un paquete en nuestra distribución Linux. Esto es debido a que hemos realizado una instalación fallida, se ha apropiado de alguno de los archivos necesarios para ejecutar apt-get.
    Vamos a averiguar que proceso ha secuestrado nuestros archivos utilizando el comando: lsof

    lsof [PARÁMETROS] [ARCHIVO..]
    En la invocación del comando lsof, se permite identificar que procesos están utilizando el o los archivos indicados.

    Ejecutando este comando para averiguar quien nos tiene bloqueado el archivo que necesitamos para comenzar nuestro nuevo proceso de instalación.

    sudo lsof /var/lib/dpkg/lock-frontend

    Obtenemos dos informaciones un WARNING y el culpable:

    lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
          Output information may be incomplete.
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
    apt-get             15206 root    4uW  REG    8,2                     0 9962051 /var/lib/dpkg/lock-frontend


    El usuario root intentó lanzar el comando apt-get y por alguna razón no termino con exito y bloqueo el archivo. De la información anterior nos quedamos con el PID, que es el identificador para matarlo

    sudo kill -9 15206

    Y con esto liberamos del secuestro los archivos necesarios que nos impedía continuar con nuestra tarea. En este caso la instalación de un nuevo paquete. 
     



     

    Done potencia informática proyecto COVID-PHYM

    3D medical animation coronavirus structure
     
    El CSIC e Ibercivis lanzan un proyecto de ciencia ciudadana que busca fármacos contra el coronavirus.Cualquier persona puede colaborar desde casa dejando que su ordenador realice operaciones de cálculo. El objetivo es estudiar si medicamentos ya usados contra el ébola o la gripe logran inhibir la replicación del virus.
    Acerca del proyecto
    • Cualquier persona puede colaborar desde casa descargando un programa informático y dejando que su ordenador realice operaciones de cálculo.
    • El objetivo es estudiar si medicamentos ya usados contra el ébola o la gripe logran inhibir la replicación del virus.
    • Los ordenadores de los voluntarios formarán una red de computación distribuida con una potencia de cálculo similar a la de un supercomputador.
    En articulo anterior, Done potencia informática a Folding@Home, compartimos un proyecto de investigación y simulación sobre como se plegaban las proteínas y asi encontrar inhibidores para su propagación. En esta pandemia que nos ha tocado pasar la mayoría de los recursos se centran en buscar una cura al Coronavirus (COVID-19). Un proyecto español  esta realizando simulaciones como se comporta el virus al interactuar con medicamentos usados con medicamentos utilizados para combatir virus similares. Estas simulaciones requieren de muchas horas de calculo. O tenemos un superordenador o utilizamos la computación distribuida.
    El proyecto que encabeza por la fundación Ibercivis:

    es una fundación privada sin ánimo de lucro que tiene como objetivos realizar, promover y visibilizar la Ciencia Ciudadana.

    Nuestra Misión:
    • Para la consecución de sus objetivos, y en colaboración con diversos agentes científicos y sociales, la Fundación Ibercivis:
    • Promueve investigaciones en muy diferentes áreas de conocimiento científico en los ámbitos local, nacional e internacional.
    • Proporcionar apoyo técnico, difusión y formación de modo que cualquier persona pueda participar en la investigación científica, en función de sus intereses y capacidades siempre dinámicas.
     
    Para realizar estas simulaciones compartidas utilizan el gestor de proyectos de computación distribuida BOINC.


    Wikipedia: La Infraestructura Abierta de Berkeley para la Computación en Red (en inglés Berkeley Open Infrastructure for Network Computing), o BOINC por sus siglas en inglés, es una infraestructura para la computación distribuida, desarrollada originalmente para el proyecto SETI@home, pero que actualmente se utiliza para diversos campos como física, medicina nuclear, climatología, etc. La intención de este proyecto es obtener una capacidad de computación enorme utilizando computadores personales alrededor del mundo. Los proyectos en los que trabaja este software tienen un denominador común, y es que requieren una gran capacidad de cálculo.
     Para colaborar en el proyecto descargaremos la aplicación que corresponda al nuestro sistema operativo. Descargar aqui

    En distribuciones Linux basados en Debian, la aplicación se encuentra en los repositorios oficiales, para su instalación podemos instalarlo desde la linea de comandos o desde Gestor de Software:

    sudo apt-get install boinc-client boinc-manager

    Gestor de Programas
     
     
    Lanzamos la aplicación. Nos registramos si aun si somos usuarios nuevos y nos mostrará un listado de los proyectos a los que queremos colaborar, nosotros ingresaremos en el apartado.
    Url del proyecto: https://boinc.ibercivis.es
     

    Elegimos proyecto

    Iniciamos nuestra colaboración

     
     Podremos controlar el uso de nuestra CPU. De forma predeterminada ocupara el tiempo que nuestro ordenador se encuentra desocupado. Esta configuración podemos cambiarla, así como colaborar con otros proyectos.