Conocimientos - Héctor Luaces Novo

Cuando Windows no reconoce un RAID

Hoy encendí un equipo y descubrí aterrorizado que Windows no reconocía un RAID. Cuando falla algún sistema RAID a todos nos entran unos sudores fríos al pensar en las serias implicaciones que puede tener. Hoy he salido de un aprieto gordo en el que me metió el Intel Matrix Storage Manager: por algún motivo, un Raid10 que guardaba mucha mucha información estaba funcionando correctamente, pero Windows lo reconocía como un disco dinámico inválido que no se iniciaba. Al intentar iniciarlo se conseguía un error arcano y la única opción que ofrecía el disco era la de convertirlo de nuevo en un disco básico, a costa de perder toda la información. Esto, evidentemente es inadmisible, así que lo primero que hice fue comprobar que todos los datos estaban en su sitio. Para esto, nada tan fácil como pillar cualquier Live CD de linux que tengáis a mano, iniciarlo y comprobar que todo está en su sitio (que Linux no suele dar muchos problemas con los fakeraid). Acto seguido investigué un poco y descubrí que lo suyo sería convertir el disco en un disco básico NTFS. El problema es que la conversión desde Windows se pincharía todos los datos. ¿Qué hacer?, pues utilizando

Etiquetado con: , , ,
Publicado en howtos

PuPHPet: GUI de Vagrant y Puppet escrito en PHP

Si no conocéis Vagrant ni Puppet este post debería ser un eye-opener para vosotros. La primera herramienta pretende hacer fácil y rápido el desplegar boxes de desarrollo para suplir con las increíbles demandas de eficiencia y tiempo de respuesta del movimiento devOps. Permite desplegar máquinas de desarrollo en cuestión de minutos de forma muy muy fácil. Una tecnología a tener  muy en cuenta y con la que merece la pena pelearse un poco. La segunda es Puppet, que es un sistema que permite -mediante un lenguaje declarativo basado en Ruby- controlar el estado de una flota de máquinas, pudiendo actualizar cualquier cosa de ellas, desde ficheros, a paquetería, procesos, cronjobs, scripts, usuarios, configuraciones varias… Puppet permite no solo centralizar el control de la flota de máquinas para desplegar rápidamente cualquier cambio, sino que también puede usarse para tener un servidor levantado y configurado on the fly en apenas unos minutos. ¿Qué pasa cuando juntas las dos en una interfaz rápida e intuitiva escrita en PHP?, ¡pues que nace PuPHPet! PuPHPet es una herramienta que nace con un solo propósito: permitir que alguien que no conozca Vagrant o Puppet pueda desplegar una máquina de desarrollo en segundos. Funciona de la siguiente forma: El usuario especifica

Etiquetado con: , ,
Publicado en howtos

Winexe: el PsExec para Linux

No creo que le descubra nada a nadie hablando de PsExec, una de las herramientas de la suite de SysInternals que se usa para ejecutar procesos en equipos Windows remotos (muy útil para abrir ventanas de líneas de comandos en ordenadores lejanos sin ningún otro tipo de software intermediario). Sin embargo, puede que no tanta gente conozca winexe (otro link). Winexe es una herramienta para terminal que hace lo mismo que PsExec: permitir ejecutar procesos en equipos Windows remoto, pero desde un equipo con Linux o cualquier sabor de BSD. Es especialmente útil y podéis encontrarlo en tarballs y paquetes preparados para varias distribuciones. Creo que algún bug grave de Debian los quitó de los repositorios oficiales, pero la utilidad queda ahí a vuestra disposición si no queréis compilarla. El uso es bastante sencillo y un comando como este permite lanzar un cmd.exe de un equipo remoto: winexe -W DOMINIO -U usuario –password=contraseña //192.168.xxx.xxx cmd.exe

Etiquetado con: ,
Publicado en howtos

Eliminar subdirectorios largos en Windows

Más de una vez me ha levantado dolores de cabeza el intentar eliminar subdirectorios largos en Windows. Ocurre a veces cuando hacemos una mala copia o restauración desde un backup; en ocasiones, también puede pasar cuando un usuario es demasiado organizado con sus directorios personales. Cuando intentamos borrar un directorio de estas características vamos a ver errores tipo “TOO LONG”  o “El fichero ya no está en ese directorio“. Hoy tuve uno de estos problemas (bastante gordo) y ni RD, ni subst ni leches. Tuve que recurrir a una solución perdida en el limbo de los foros que usa robocopy y un fichero .bat. Para ello solo necesitamos tener robocopy.exe en el path (o en el directorio de ejecución del .bat) y crear este fichero de cabecera: @echo off if {%1}=={} @echo Syntax: DelFolder FolderPath&goto :EOF if not exist %1 @echo Syntax: DelFolder FolderPath – %1 NOT found.&goto :EOF setlocal set folder=%1 set MT="%TEMP%\DelFolder_%RANDOM%" MD %MT% RoboCopy %MT% %folder% /MIR RD /S /Q %MT% RD /S /Q %folder% endlocal El fichero se cargará todo lo de dentro del directorio especificado sin clemencia alguna y le importará poco la longitud total de los ficheros o subdirectorios.

Etiquetado con: , ,
Publicado en howtos

Asegurar SSH en 5 pasos

Hoy vengo a escribir sobre como asegurar SSH de forma más o menos eficiente, la cosa puede complicarse más, pero esto se hace en un momento y garantiza una seguridad más que aceptable. Todas las directivas que voy a empezar a explicar deben colocarse en fichero de configuración de sshd, que suele estar localizado en /etc/ssh/sshd_config. 1- Cambiar el puerto de conexión y el protocolo Cambiar el puerto de conexión por defecto puede librarnos de un buen puñado de ataques automatizados y de indexados que no deseamos. Esto no es una solución milagrosa, pero cuanto más nos salgamos de lo habitual, más difícil se lo ponemos a los chinofarmers. Lo primero, es el puerto, que es bien sencillo. Cambiando la directiva Port a otro valor (por defecto el 22)  estaríamos listos. En mi caso voy a poner el 600, por poner uno 2022 por asignarle un puerto de usuario (>=1024  && <= 49151), como nos apunta Alberto en los comentarios. Port 2022 Lo siguiente es el protocolo. La mayoría de instalaciones modernas ya utilizan el protocolo correcto por defecto, pero comprobadlo nunca está de más. La directiva que buscamos es Protocol y debemos establecerla a un valor de 2. Protocol 2

Etiquetado con: , , ,
Publicado en howtos

SWAP en Linux: usando ficheros

Estudiando para mi certificación LPIC me tocó darle un repaso a todo el tema de la SWAP en linux y me decidí a hacer un pequeño post dedicado a una curiosidad que me pareció interesante: la posibilidad de crear un fichero SWAP en el caso de que nuestro disco se quede corto por alguna circunstancia. De paso, repasamos los ficheros / comandos relacionados con este tipo de memoria. Empezaremos por el principio… ¿Qué es la SWAP? Imagino que todos sabremos esto, pero por si acaso, la memoria SWAP viene a ser un tipo de formato de almacenamiento destinado a ser usado como memoria cuando el sistema se queda sin recursos disponibles. Si nuestra RAM, por lo que fuese, es insuficiente, comenzaremos a usar el disco como memoria RAM, lo cual es mucho más lento.  La memoria SWAP sigue siendo lenta, pero al ser una estructura optimizada para esta funcionalidad, no lo es tanto como podría ser un espacio en disco sin este tipo de formato. ¿Es necesaria la SWAP?, ¿cuanta es necesaria? La respuesta a las dos es: depende. Depende de tu sistema y del uso que le des. En un sistema de escritorio puede que sea prescindible si tienes mucha RAM y

Etiquetado con: , ,
Publicado en howtos

Redirect en Java conservando los parámetros POST

Si alguna vez habéis usado el método SendRedirect de un HttpServletResponse intentando respetar los parámetros de una petición POST habréis comprobado que cada navegador hace lo que le viene en gana. Esto es porque el SendRedirect envía un código HTTP 302: found, que al parecer cada navegador interpreta como quiere. Si queréis un workaround sólido para esta problemática, podemos enviar un código de respuesta HTTP 307: temporary redirect que sí respeta este tipo de peticiones. Hacerlo es muy sencillo: protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String URL = "https://www.luaces-novo.es"; response.setStatus(response.SC_TEMPORARY_REDIRECT); response.addHeader("Location", URL); } De esta forma se respetará cualquier parámetro envíado mediante un método POST. Recordad que al estar modificando los headers no podéis enviar otro tipo de información que no sean headers o status codes.

Etiquetado con: , ,
Publicado en howtos

web.xml ignorando WebServlet

Un truco relámpago en el caso de que os encontréis con problemas al desplegar Servlets a una aplicación con ficheros web.xml que utilizan versiones que no deben. Si al utilizar la anotación WebServlet el servidor de aplicaciones os responde con que no conoce el recurso solicitado seguramente es porque esteis usando una versión del motor de despliegue de aplicaciones que no se lleve bien con la anotación. Para solucionarlo solo tenéis que ver la etiqueta web-app de vuestro web.xml. Si véis en la especificación una versión inferior a la 3.0 ahí tenéis vuestro problema. Esto puede ocasionar también otra serie de problemas. Aquí tenéis un web-app usando una declaración para el motor de despliegue 3.0, que directamente ignora el web.xml. <web-app version=”3.0″ xmlns=”http://java.sun.com/xml/ns/javaee” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd”>

Etiquetado con: , ,
Publicado en howtos