Algunos apuntes sobre Bash

bashHe querido recoger algunas notas de Bash scripting para no tener que correr a Google (o a cualquier página de StackExchange) cada vez que las dudas me asalten.

/usr/bin/env bash vs /usr/bin/bash

Leí en la siguiente página sobre las “mejores prácticas en Bash” acerca del uso de “#!/usr/bin/env bash” en lugar del habitual “#!/usr/bin/bash” o “#!/bin/bash“. La idea es usar”#!/usr/bin/env bash” pues de esta manera lo que hacemos es buscar en el PATH dónde está bash, el cual es probable se encuentre en ubicaciones distintas en servidores diferentes. Ésto evitará problemas portando scripts a otros entornos. [Más info] [2]

Corchete simple vs Doble corchete

Básicamente, ambos sirven para evaluar expresiones. “[” es un alias para el comando “test” y tanto uno como el otro están disponibles en el estándar POSIX. “[[” sin embargo es una keyword, no un programa, y se trata una versión mejorada para evaluar expresiones, únicamente disponible en Bash, KornShell y Zsh. Si no estás preocupado por la portabilidad de tus scripts con sistemas donde no cuentes con Bash, es mejor usar siempre el doble corchete, por la funcionalidad extra que aporta (posibilidad de usar && y ||, expresiones regulares, pattern matching, etc.). [Más info] [2]

La siguiente evaluación será “true” pues b és mayor que a, 8 mayor que 4, y abcd entra dentro del patrón “a*”:

PD: Dejo un enlace a la wikipedia donde se especifican los nombres en inglés de éstos símbolos, según la zona.

Continuar leyendo “Algunos apuntes sobre Bash”

Configuración inicial de un servidor CentOS

centosHace ya unos años, y sin ningún software de administración tipo Puppet/Chef/Ansible, creamos un documento para que todos los técnicos pudieran decir la suya respecto a los pasos a dar tras instalar un sistema operativo Linux (CentOS en nuestro caso), con tal de no olvidarnos ninguno e ir mejorando entre todos este proceso de configuración inicial de un servidor. Eso significa que si tú, amado lector, tienes cualquier sugerencia de mejora, no dudes en dejarla en los comentarios.

Hoy en día, ese documento, muy pensado para instalaciones CentOS 6, tanto en entornos Cloud Computing como para en máquinas propias, es algo parecido a lo que listo a continuació.

NOTA: No te tomes todos los puntos al pie de la letra, seguramente querrás valorar si lo que propongo a continuación tiene sentido en tu entorno antes de aplicarlo, y seguro que más de un punto es mejorable.

1. Actualización del SO

Tras la instalación, es una buena idea forzar un update para estar a la última de los paquetes de nuestro SO.

2. Deshabilitar selinux

Selinux es una herramienta útil, pero que no compensa, y proporciona más dolores de cabeza de los que pretende solucionar. Es por eso que proveedores como RackSpace o Hetzner proveen sistemas con Selinux deshabilitado de fábrica. Si aún así quieres trabajar con Selinux, seguramente este sea el momento de configurarlo adecuadamente. En caso contrario, símplemente deshabilitalo tal y como sigue:

Tras deshabilitarlo, será necesario reinciar el sistema para activar los cambio. Así pues, reinicia para evitar tener problemas con los próximos pasos.

Continuar leyendo “Configuración inicial de un servidor CentOS”

¿Cuantas CPUs tiene mi servidor Linux? ¿Y RAM?

cpuOtro post que tenía en borradores y que he decidido rescatar. Esta vez sobre hardware, con comandos tan básicos como útiles.

¿Cuantas CPUs tiene mi servidor?

En la mayoría de distribuciones Linux, pero concretamente en CentOS, podemos saber cuantas CPUs tiene el servidor, consultando /proc.

El comando anterior nos mostrará la información referente a nuestras CPUs, pero “a simple vista” no sabemos si lo que nos está enseñando es el número de CPUs físicas, el número de nucleos, todo mezclado, etc. Para ello, hemos de prestar atención especialmente a los siguientes campos:

  • Pyhisical id“: id de CPU física. Nos servirá para saber el número de CPUs físicas del servidor. En el ejemplo, vemos 4 CPUs pero en realidad un único “physical id”, lo cual nos indicará que tenemos una única CPU física con 4 núcleos:

Continuar leyendo “¿Cuantas CPUs tiene mi servidor Linux? ¿Y RAM?”

Administrar un LSI MegaRAID con MegaCLI

LSI MegaRAIDYa vimos cómo gestionar un RAID en servidores HP con hpacucli (y también aquí). Si tienes un server Supermicro, esta herramienta no te servirá. Para gestionar un LSI MegaRAID de un server Supermicro, desde un CentOS, podemos usar “MegaCli“.

Desde la página de LSI podremos buscar por nuestro modelo concreto de controladora RAID para bajarnos la versión de MegaCli apropiada, aunque cada versión abarca múltiples controladoras diferentes.

Una vez descargado el programa, podremos instalarlo, en CentOS 6 símplemente ejecutando:

Como con cualquier otro paquete rpm, podremos ver el contenido del mismo con:

Si nos es más cómodo, podemos crear un enlace simbólico para tener el programa en el PATH y poderlo llamar sin tener que introducir su ruta completa.

Ahora ya podremos escribir “MegaCli” para usar el programa. El programa tiene muchos parámetros, algunos de los cuales están muy bien explicados en este post, y otros están resumidos en este otro post. A continuación, destacaré los que a mí particularmente me han sido más útiles.

Continuar leyendo “Administrar un LSI MegaRAID con MegaCLI”

Cómo configurar un registro SPF

emailSPF, o Sender Policy Framework, es un estándar usado para verificar que los correos electrónicos enviados desde un determinado dominio, proceden de servidores de correo autorizados para dicho dominio.

Es decir, con telnet (u otros métodos), podríamos enviar un mail usando cualquier dirección de correo electrónico como origen. Así por ejemplo, yo podría enviar un mail haciéndome pasar por obama@whitehouse.com, o dios@elcielo.net. Aquí (y en muchos otros sitios) explican cómo.

El registro SPF, pues, sirve para ayudar a determinar a un servidor de correo, si el mail que acaba de recibir ha de descartarse o entregarse en el inbox.

Continuar leyendo “Cómo configurar un registro SPF”

Instalar yum en Red Hat 4

old manBueno, hoy me he encontrado con un (muy) antiguo server Red Hat 4 que no tenía yum instalado. Hace un tiempo ya me pasó algo parecido, así que he decidido crear un post para documentar cómo lo solucionamos.

Lo primero es verificar que no tenemos yum instalado. Para eso, como root, podemos ejecutar:

Posteriormente, nos aseguramos de la versión y la arquitectura de nuestro servidor, para saber qué paquetes exactos necesitaremos:

Continuar leyendo “Instalar yum en Red Hat 4”

VLANs y múltiples alias de red en Red Hat 6

networking vlanPara poder trabajar con VLANs tageadas en un servidor Red Hat Enterprise 6.0 con múltiples alias de red, tendremos que esforzarnos un poco. En mi caso, he partido de un servidor con una única tarjeta de red (eth0) configurada con 10 alias, todo IPs del mismo rango, del siguiente estilo:

Por supuesto, el servidor contaba con un default gateway configurado en cada uno de los alias:

Con este servidor en producción, y con mucho sudor frío, he pasado a configurar el rango 10.0.0.2-10.0.0.25 en el servidor, con default gateway 10.0.0.1, todo perteneciente a la VLAN 30, y todo tageado, también usando la misma interfaz eth0, y lo más importante, manteniendo la configuración de red original (es decir, acabaremos teniendo el servidor configurado para trabajar con 2 rangos de IPs diferentes, uno de ellos perteneciente a la VLAN 30).

Por cierto, si estás pensando en seguir los pasos aquí descritos en un servidor en producción, te recomendaría testearlos primero en un entorno de test, y tener un plan B para recuperar la conectividad con el servidor en caso de cometer algún error.

Continuar leyendo “VLANs y múltiples alias de red en Red Hat 6”

Backups en un Cluster MySQL (PXC 5.6)

datacenterDespués de montar un clúster PXC o Galera Cluster (versión 5.6 en servidores CentOS 6.5), igualmente querremos hacer backups de nuestros datos. Para ello, bastará con realizar un backup de uno de los nodos, puesto que todos los nodos contendrán exactamente la misma información. Aunque en realidad no es tan fácil…

Problemas con los backups en un cluster Galera

Hemos de tener en cuenta que los backups, en algún punto, realizarán un FLUSH TABLES WITH READ LOCK, que hará que ese nodo no permita escrituras y por tanto, no se podrán realizar escrituras en el cluster durante ese tiempo [Fuente 1 y Fuente 2]. La explicación es que una escritura al cluster devolverá ok cuando se haya replicado a todos los nodos del mismo. Por tanto, si un nodo no puede escribir, todo el cluster no podrá escribir.

A ésto hay que sumarle que por defecto un backup en PXC/Galera no guardará los “Global Transaction ID“, necesarios para poder dar de alta nuevos nodos de forma rápida (ahorrándonos el SST inicial) a raíz de ese backup. [Fuente, transp. 44]

Continuar leyendo “Backups en un Cluster MySQL (PXC 5.6)”

Fecha de creación de un fichero en Linux

timeHace un tiempo tuve la necesidad de ver la fecha de creación de un fichero en un servidor Linux. Conocía las fechas atime, ctime y mtime, pero no tenía muy claro cómo ver la fecha en la que el fichero se creó, puesto que por defecto, la salida del comando “ls -l” muestra la fecha de modificación del mismo.

Finamente he llegado a un blog donde explican perfectamente cómo sacar la crtime (o CReation Time). La idea es usar el comando “stat” con “debugfs”. Para ello, primero tenemos que tomar como referencia la raíz del sistemas de ficheros que contiene el archivo a inspeccionar.

Continuar leyendo “Fecha de creación de un fichero en Linux”

Actualizar automáticamente un servidor

updateÚltimamente he estado leyendo sobre cómo y cuando actualizar un servidor Linux (Fedora/CentOS/Red Hat en mi caso), de cara a aplicar los últimos parches de seguridad y mantener el sistema actualizado. Resulta que no soy el único que se pregunta sobre si hay algún tipo de guía, recomendaciones, o mejores prácticas para updatear sistemas.

Después de leer y leer, y ver las numerosas razones tanto a favor como en contra de los updates automáticos, la siguiente frase en la documentación oficial de Fedora resume cuándo habilitar las actualizaciones automáticas, por lo general:

If the machine is a critical server, for which unplanned downtime of a service on the machine can not be tolerated, then you should not use automatic updates. Otherwise, you may choose to use them.”

Es decir, por norma general sería una buena idea habilitar las actualizaciones automáticas en todo servidor que no sea crítico, siempre y cuando tengamos la posibilidad de deshacer los updates instalados, o revertir los cambios, en caso de error.

Continuar leyendo “Actualizar automáticamente un servidor”