lunes, 3 de mayo de 2021

Sesiones en memcache con Apache + PHP bajo Linux y se agota la memoria

Hola a todos, cuando se configuran las sesiones de PHP para que se almacenen en Memcache es frecuente ver aparecer el siguiente mensaje en el log:

PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 1143376 bytes) in Unknown on line 0

Esto suele indicar que hemos configurado algo mal. Si ves este mensaje revisa tu configuración de PHP y reinicia el Apache.

En mi caso, el problema fue que estoy configurando dos servidores Memcache (principal y failover) y me equivoqué y puse dos veces la misma URL (en tu caso puede ser la IP):

session.save_path="tcp://memcache1:11211,tcp://memcache1:11211"

Fue cambiar el segundo por "memcache2" y reiniciar Apache y todo funciona perfectamente.

Personalmente se echa en falta algún mensaje de error más descriptivo cuando te equivocas en alguna configuración, pero al fin y al cabo no es algo que se configure todos los días (yo al menos).

Salu2 a to2

martes, 29 de octubre de 2019

Como solucionar el problema "RTNETLINK answers: File exists"

A veces, al reiniciar la configuración de red o hacer un "ifup" te encuentras con que Linux responde con el mensaje de error "RTNETLINK answers: File exists".

Usualmente es porque antes has intentado hacer una configuración de red que falló y a partir de ahí te va a dar siempre este mensaje de error.

Para solventarlo hay que ejecutar el comando "ip addr" para ver las configuraciones y luego mediante "ip addr del" ir eliminado aquellas que correspondan con la interfaz que intentas levantar con "ifup".

Luego, si sigue fallando puedes hacer un "ifup --verbose" para obtener más información acerca del origen del error.

Salu2 a to2

lunes, 29 de abril de 2019

Configurando una conexión OpenVPN en el Network Manager de Linux

Hola a todos, usando Linux lo típico suele ser usar el software OpenVPN para conectar con distintas redes VPN. Y lo típico suele ser que te manden un fichero "*.ovpn" con la configuración y te conectes de la siguiente manera:

   sudo openvpn --config client.ovpn

Pero también tienes la opción de usar el Network Manager para que sea más cómodo.


En el menú de la imagen haciendo clic en "Editar las conexiones..." se puede añadir una conexión de tipo OpenVPN.

Para configurar esta conexión hay que usar los mismos valores del fichero "*.ovpn" (tipo de conexión, certificados, IP, ...). Para tomar estos datos basta con editar el fichero (es un fichero de texto plano) e tomando aquellos datos necesarios.

Lógicamente para los certificados tendremos que crear ficheros "*.pem" en disco, con un nombre adecuado, y luego seleccionarlos en el editor de conexiones.

Una vez configurado todo, lo normal es que te hayas dejado algo por detrás. Siempre hay algo que has configurado mal o no has configurado. Para detectarlo tendrás que comparar la salida del comando "sudo openvpn --config client.ovpn" con la salida del comando "sudo tail -f /var/log/syslog" cuando intentas conectar haciendo clic en el Network Manager.

La cosa es ir retocando la configuración del Network Manager hasta que consigas conectar correctamente con la VPN.

Salu2 a to2

domingo, 21 de abril de 2019

Iniciando Windows desde un USB externo

Hola a todos, resulta que mi novia tiene un Asus VivoBook E403SA del cual presume que la batería dura 14 horas. Y resulta que daba un error de que no podía actualizar el Windows 10 porque no tenía espacio en disco. Así que me puse a comprobar qué tenía que se pudiera borrar para liberar espacio y poder actualizar, hasta que me di cuenta de que era sencillamente imposible, ya que tiene 32Gbytes de disco (lo que para un Windows 10 es totalmente insuficiente).

Lógicamente lo primero que me pasó por la cabeza fue cambiarle el disco duro por otro de más capacidad, pero esto es imposible ya que este "portatil" por dentro es una tablet, y el disco duro no es más que una memoria eMMC soldada en placa.

Las opciones que se presentaban entonces eran 3:
  • Cambiar la placa por una más potente (se pueden comprar en AliExpress pero son caras y más te vale comprobar que es el modelo exacto que necesitas).
  • Instalar un Linux
  • Iniciar Windows desde un pen USB.
Descartada la primera opción, pensé que lo más sencillo sería la tercera. De hecho encontré un programa llamado Win2USB que en teoría permite clonar el disco de la máquina a un USB (digo en teoría porque al ser de pago no lo he probado). Pero tras probar que la funcionalidad gratutita que debería permitir iniciar un Windows 10 desde USB no funcionaba bien, desistí de usarlo.

Lo que sí funcionó correctamente es usar el Rufus de toda la vida, que tiene una opción para esto. De hecho, tras mucho buscar (sin éxito) una ISO de Windows 10 Home OEM (la que viene instalada en los equipos al comprarlos) resultó que no hacía falta. Con una simple ISO de Windows 10 descargada de la web oficial de Windows al iniciar detectó automáticamente el número de serie de Windows que está en la BIOS UEFI del equipo. Con lo que al final, tras probar las opciones más complejas, resultó que todo era muy sencillo. Pero es importante iniciar Windows en esa máquina y sólo en esa máquina (no vale iniciar digamos iniciar Windows en otra máquina para completar la instalación y luego querer pinchar el pen USB en el Asus).

Como pen USB, compré un USB 3.0 SanDisk Ultra Fit de 128 GB, de forma que tenga espacio suficiente para Windows y un par de aplicaciones, sea lo suficientemente rápido y sea lo suficientemente pequeñito para que no estorbe.

Y como han ido pasando semanas entre las primeras pruebas y este final de tener el Windows 10 Home correctamente licenciado generado con el Rufus y correctamente funcionando, lo primero que hice fue instalarle un Linux (que era la opción 2).

El Linux elegido (por mi) fue el ElementaryOS, ya que es supersencillo de manejar y muy agradable a la vista. Le instalé las cuatro aplicaciones que suele usar (Firefox, Dropbox, LibreOffice y Skype), le instalé el driver de la impresora, y listo.

Si os sorprende que usara el LibreOffice en vez del Office de Microsoft, os remito al inicio de este artículo donde os digo que tenía 32Gbytes de disco (imposible meter ahí el Office de Microsoft). De hecho, deberíais haber visto la cara de sorpresa que puso tras instalar el ElementaryOS y el software, cuando me preguntó cuanto espacio libre tenía ahora, y le dije que 20Gbytes.

Como entre unas cosas y otras ha pasado un mes y ya se ha acostumbrado a ElementaryOS, ella me dice que ya el Windows para qué. Pero yo he preferido que lo tenga por si algún momento tuviera que hacer algo que no sabe hacer con un Linux (instalar un software concreto o un driver concreto).

Simplemente le he puesto el arranque del pen drive USB como una entrada más en el menú del Grub y listo.

Salu2 a to2

jueves, 20 de septiembre de 2018

Vídeos 4K en Ubuntu 18

Hola a todos, esta semana he tenido que probar si funcionan los vídeos 4K en Ubuntu 18, y la respuesta es que depende.

Vamos a dejar una cosa clara: un vídeo a 4K es mucha tela marinera. Estamos hablando de una resolución de 3840x2160. Muchos piensan que es el doble de Full HD (1920x1080) pero en realidad es el cuádruple (multiplicas por dos en ancho y luego por dos en largo). Para que os hagais una idea, podríais ver más de 15 DVDs a la vez en una pantalla 4K.

Otra cosa que hay que dejar clara es que hay infinidad de formatos de compresión de vídeo, los llamados "codecs". De hecho los hay con pérdida (la mayoría) y sin pérdida (que no pierden nada de calidad al comprimir la información a costa de ser vídeos que ocupan terabytes de datos).

Por último decir que hay que distinguir entre el codec y el contenedor de vídeo. Un contenedor puede ser por ejemplo el formato AVI o el formato MKV. Estos contenedores indican cómo se guarda la información de audio y de vídeo, pero no cómo se codifican. Es decir, un vídeo en AVI puede haber sido codificado por cualquier codec.

Y en este mar de codecs y de contenedores de vídeo llegó un momento en que un grupo de empresas se puso de acuerdo y crearon el formato MP4. ¿Que aporta? Pues los formatos MPEG son un estándar que definen no sólo el contenedor sino tambien el conjunto de codecs soportados.

¿Qué quiere decir todo esto? Que si tienes un vídeo AVI o MKV a priori no sabes si tu reproductor de vídeo sabrá reproducirlo (dependerá de los codecs), pero si tienes un vídeo en MP4 seguro que sí se reproduce (porque es un estándar).

Llegados a este punto, hay que relacionar las dos cosas: vídeo 4K con formato de vídeo. Un formato AVI o MKV donde el vídeo puede estar codificado de cualquier forma, se decodifica a base de CPU. Si intentas reproducir un vídeo 4K en Linux con el VLC (por ejemplo) en formato AVI o MKV no sólo irá dando tirones sino que verás como tu CPU se pone al 100% con el consiguiente consumo de batería.

Sin embargo, si reproduces un vídeo 4K en formato MP4 ahí entra en juego la aceleración de vídeo incluída en la tarjeta gráfica. Lo que a efectos prácticos significa que el vídeo se reproduce bien y el consumo de CPU del reproductor de vídeo será de menos de un 20%.

Para hacer pruebas podéis descargaros muestras de vídeos en formato MP4 de internet: http://4ksamples.com/

¿Y qué tiene que ver Ubuntu 18 con todo esto? Pues para empezar que los drivers de aceleración de vídeo vienen preinstalados. En Ubuntu 14 y Ubuntu 16 había que instalarlos a mano y actualizar el reproductor de vídeo, pero en Ubuntu 18 seguramente no tendrás que hacerlo.

La típica tarjeta gráfica barata de Intel integrada en la placa base que en Linux usa el driver i915 cuenta con el VA-API ya preinstalado en Ubuntu 18, de forma que el VLC lo usará inmediatamente. Aunque os recomendaría cambiar al MPV porque tiene un rendimiento un poco mejor. Y os recomiendo desinstalar Totem porque es más lento que el caballo del malo.

Para los angloparlantes aquí dejo algo más información sobre las gráficas Intel:
  https://wiki.ubuntu.com/IntelQuickSyncVideo

Así que ya veis, nada que instalar, nada que configurar, ... todo listo para usar con Ubuntu 18. Es más, los vídeos 4K de Youtube también están en formato MP4, lo que hace que podáis visualizarlos correctamente en vuestro Firefox (si contáis con un buen ancho de banda).

Por fin he dejado de avergonzarme de la reproducción de vídeo en GNU Linux. Personalmente se me caía la cara de vergüenza cuando veía una tablet Android barata reproducir vídeos MP4 con buena resolución y un consumo mínimo de CPU mientras mi PC caro con un GNU Linux no podía con esos vídeos (siendo en el fondo el mismo kernel).

RESUMIENDO: Se pueden ver vídeos en 4K en Ubuntu 18 sólo en formato MP4.

Salu2 a to2

sábado, 10 de marzo de 2018

Quitando el dnsmasq de Ubuntu

Hola a todos, en la oficina tenemos un DNS interno (en el Active Directory) que resuelve ciertas rutas de nuestra intranet, y el dnsmask que tiene por defecto en las distribuciones de Linux se lleva fatal con eso. Además yo odio el dnsmask, estoy acostumbrado a editar mi fichero "/etc/resolv.conf" y me toca las narices el dnsmask.

La solución pasa por desactivarlo, para ello basta con editar el fichero /etc/NetworkManager/NetworkManager.conf, y comentar la siguiente línea:

#dns=dnsmasq

En cuanto reinicies debería pillarte los DNS que configure tu DHCP y agregártelos ordenadamente el fichero /etc/resolv.conf.

No obstante alguna vez me he encontrado con algo raro, que el DNS resolvía los nombres pero las aplicaciones no. Es decir, el comando "host" funcionaba, pero el "ping" o el "wget" no. Veámoslo con un ejemplo, el siguiente comando funcionaba y resolvía la IP:

host loquesea.midominio.local

Pero el siguiente comando fallaba y no resolvía la IP:

ping loquesea.midominio.local

Esto indica que básicamente está fallando la función "gethostbyname" de glibc. Para ello hay que revisar el fichero /etc/nsswitch.conf. En concreto la línea que empieza por "hosts" y quitar de enmedio el "[NOTFOUND=return]" y ya de paso el "mdsn4_minimal". De esta forma primero resolverá por "files" (es decir, lo que tengas en /etc/hosts) y luego por DNS.

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat
gshadow:        files

#hosts:          files mdns4_minimal [NOTFOUND=return] dns

hosts:          files dns 

networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis




Este fichero configura las bases de datos a utilizar para todas las llamadas de glibc que resuelven nombres mediante DNS. Para más información podéis hacer un:

man nsswitch.conf


¿Que cuál es la raíz del problema? Por lo visto el problema radica en que Linux utiliza por defecto el ".local" para indicar las resoluciones DNS por multicast (eso es lo que hace el "mdns4_minimal").

Podéis este blog en inglés que explica un poco más sobre este tema:
  http://www.lowlevelmanager.com/2011/09/fix-linux-dns-issues-with-local.html

Salu2 a to2

jueves, 30 de noviembre de 2017

Poniendo el número de serie al emulador Android

Hola a todos. Al ir a obtener el número de serie del emulador mediante la propiedad:
   android.os.Build.SERIAL

detecté que devolvía el valor "unknown". Haciendo un "adb shell getprop" vi que la propiedad "ro.serialno" estaba vacía.

Tras muchas vueltas vi que Android Studio crea un fichero de configuración en la ruta C:\Users\<nombre de usuario>\.android\avd\<nombre del AVD>.avd\config.ini donde pueden modificarse los valores para iniciar el emulador. 

Así que hay que añadir al final de ese fichero una línea para añadir el número de serie a los parámetros del kernel:
   kernel.parameters = androidboot.serialno=123456789

De esta forma rellenamos ese "ro.serialno" que a su vez rellena el android.os.Build.SERIAL.

Salu2 a to2