En la actualidad es frecuente contar con CPUS que poseen múltiples cores y, existen ocasiones en las que necesitamos ejecutar un comando sobre un conjunto de ficheros. Así que, el problema está claro: ¿Cómo paralelizar estas ejecuciones de manera de utilizar simultaneamente todos los cores de nuestro sistema?
Continuar leyendo «Ejecución paralela de comandos bash»
Login de usuarios en lxd
Sabemos que para acceder con permisos de root
a un contenedor creado con lxd el comando es:
lxc my_container -- bash
Pero, ¿cómo hacemos para acceder con un usuario que no sea root?
Continuar leyendo «Login de usuarios en lxd»
Guardar un fichero con vi o vim sin tener permisos de escritura
No sé a estas alturas cuantas veces me ha podido pasar pero diría que más de cientos sin temor a equivocarme. Abro un fichero para editar, digamos por ejemplo /etc/group
y, cuando voy a grabar, me doy cuenta que estaba con mi usuario no privilegiado y no había abierto el editor con sudo
y, por lo tanto, no me deja grabar por error de escritura.
Continuar leyendo «Guardar un fichero con vi o vim sin tener permisos de escritura»
LXC, LXD y ZFS
Introducción
Un contenedor es una opción de virtualización que permite ejecutar un conjunto de procesos de forma que se encuentren completamente aislados del resto de procesos que puedan estar ejecutándose en un sistema.
Esto implica que, aunque los procesos del contenedor estén utilizando el sistema operativo del anfitrión, están utilizando un root file system virtual propio del contenedor; con sus propias versiones de librerías, datos y dispositivos, independientes a los existentes en el sistema anfitrión u otros contenedores del sistema.
Continuar leyendo «LXC, LXD y ZFS»
Creando entornos de desarrollo python con virtualenv
Cualquier desarrollo en Python requerirá con seguridad del uso de un conjunto de módulos y, dado que, generalmente no tendremos control sobre cómo ni cuándo evolucionará cada uno de estos módulos, nuestro desarrollo quedará restringido para operar sólo con versiones específicas de los módulos de los cuales dependa. Si seguimos las normas especificadas para el empaquetado, estas dependencias estarán claramente determinadas en los paquetes generados. Y, si hemos respetado las versiones por defecto existentes en nuestro entorno de producción, estas dependencias no deberían suponer mayores inconvenientes a la hora de instalar o actualizar nuestros desarrollos.
Continuar leyendo «Creando entornos de desarrollo python con virtualenv»
Subiendo directorios vacíos en Git
Una de las características de Git es que, por defecto, los directorios vacíos no forman parte del repositorio y, por lo tanto, son silenciosamente descartados por operaciones como commit
o push
.
Incluso en los casos en que un directorio que previamente formaba parte de un repositorio pierda todo su contenido, este directorio directorio es silenciosamente eliminado del repositorio y no será creado en futuras operaciones de clonación.
Continuar leyendo «Subiendo directorios vacíos en Git»
Ubicar ficheros abiertos por un proceso
Configurando un sistema comencé a recibir errores como el siguiente:
syslog-ng[1091]: Error suspend timeout has elapsed, attempting to write again; fd='11'
El problema era que el proceso de syslog no era capaz de escribir sobre el fichero que había abierto con el file descriptor 11
pero no tenía referencias acerca de cuál era ese fichero como para comprobar por qué se producía el error.
Continuar leyendo «Ubicar ficheros abiertos por un proceso»
Proxy ssh
Esta solución atiende a un caso muy usual en la administración remota de dispositivos que se muestra en el diagrama de red que ilustra este post y que se resume en los siguientes puntos:
Continuar leyendo «Proxy ssh»
Captura de paquetes WiFi en Linux
Como explican el wiki de Wireshark, en el modo normal de funcionamiento, la captura de tráfico a través de interfaces WiFi se encuentra filtrada por el hardware que implementa el protocolo IEEE 802.11, quedando restringida al SSID en el que nos encontremos asociados y, dentro de ese SSID, a los paquetes dirigidos hacia la dirección MAC de nuestro interfaz, más los paquetes dirigidos a los grupos multicast a los que nuestro equipo se haya asociado y a los paquetes de tipo broadcast.
En el caso que necesitemos analizar el tráfico completo(packet sniffing) de un canal WiFi deberemos reconfigurar el interfaz en modo monitor como se muestra a continuación.
Continuar leyendo «Captura de paquetes WiFi en Linux»
Seleccionar rama por defecto en repositorios git tipo bare
Un repositorio git del tipo bare es un repositorio que no cuenta con una área de trabajo, lo que es la opción recomendada para los repositorios que se alojan en servidores. Continuar leyendo «Seleccionar rama por defecto en repositorios git tipo bare»