SysAdmin Tips

Instalando Mod_GeoIP en CentOS/RHEL 5.x

Saturday, August 28th, 2010

geoipMod_GeoIP es un módulo para Apache que nos permite acceder a una base de datos que mapea las IPs con los diferentes países del mundo, de esta manera podemos integrarlo con nuestras aplicaciones para luego darle un buen uso cuando llegan los visitantes a nuestra página web.  En este tutorial vamos a ver como instalarlo de manera sencilla sobre Apache 2.x en CentOS/RHEL 5.x

Primero debemos bajar la librería C y compilarla, toda la documentación está aquí.

wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP-1.4.6.tar.gz
tar -xvpzf GeoIP-1.4.6.tar.gz
cd GeoIP-1.4.6
./configure
make
make install

Luego si, vamos por el módulo de Apache, toda la documentación está aquí también.

wget http://geolite.maxmind.com/download/geoip/api/mod_geoip2/mod_geoip2_1.2.5.tar.gz
tar -xvpzf mod_geoip2_1.2.5.tar.gz
cd mod_geoip2_1.2.5
apxs -i -a -L/usr/local/lib -I/usr/local/include -lGeoIP -c mod_geoip.c

Cargamos el módulo desde httpd.conf, su configuración:

LoadModule geoip_module       /usr/lib/httpd/modules/mod_geoip.so
<ifmodule mod_geoip.c>
GeoIPEnable On
</ifmodule>

Reiniciamos el servicio

/etc/init.d/httpd restart

Para verificar si Apache lo cargó correctamente tipearemos el siguiente comando:

httpd -M

Al final deberíamos ver algo como esto:

geoip_module (shared)

Identificar tipos de RAID

Saturday, August 21st, 2010

hdd raid

Si estás en un servidor y necesitas saber si está usando algún RAID y qué tipo en particular, existen un comando que te facilitará mucho la vida, se trata de mdadm, la forma más facil de determinarlo es añadiendo la opción –detail –scan, ejemplo:

[root@ns3334.hosting.net:~]mdadm --detail --scan
ARRAY /dev/md2 level=raid1 num-devices=2 metadata=0.90 UUID=88241436:f6e1a912:a9b41e93:3723d918
ARRAY /dev/md1 level=raid1 num-devices=2 metadata=0.90 UUID=507f2cea:093afb15:7b97fd38:bdcf4cc1

Otra forma de hacerlo es a través de cat /proc/mdstat:

[root@ns3334.hosting.net:~]cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath] [faulty]
md1 : active raid1 sdb1[1] sda1[0]
20482752 blocks [2/2] [UU]
 
md2 : active raid1 sdb2[1] sda2[0]
1444130944 blocks [2/2] [UU]
 
unused devices:
[root@ns3334.hosting.net:~]

Script para arreglar permisos y propietarios con suPHP

Saturday, August 21st, 2010

suphpSi pasamos de cPanel usando PHP en módo DSO a modo suPHP nos encontraremos con que en muchos sitios podemos tener problemas de permiso y propietario, hasta seguramente algunas webs quedarán off pues la estructura de permisos y el propietario cambia de forma radical.

Este es un script en bash que tenía entre mis notas diarias que espero les sirva para corregir permisos y propietarios de forma masiva luego del cambio.

#!/bin/bash
for user in `ls /var/cpanel/users`; do
chown ${user}:${user} /home/${user}/public_html
chmod 755 /home/${user}/public_html
find /home/${user}/public_html -group nobody -print0 | xargs -0 chgrp ${user}
find /home/${user}/public_html -type f -print0 | xargs -0 chmod 644
find /home/${user}/public_html -type d -print0 | xargs -0 chmod 755
done

Generar backup de base de datos usando MySQLDump

Saturday, August 14th, 2010

mysqlMySQL nos premite generar backups de determinada forma, una que ya comentamos hace tiempo, es usando Mysqlhotcopy, la otra manera tradicional es usando Mysqldump. La manera de realizar el backup es bastante fácil, y dependiendo del tamaño de tu base de datos, será rápida o lenta (si tienes una bd de 5 GB, demorará mucho, si tienes una de 20 MB, será super rápido):

mysqldump -u root -p nombre_de_base_de_datos > fichero.sql

Asegúrate de cambiar los datos de nombre_de_base_de_datos y fichero.sql por los deseados. Esto te permitirá generar un archivo .sql listo para restaurar, cosa que veremos otro día. Mysqldump permite muchas otras opciones, como por ejemplo la que vimos hace tiempo en la entrada Respaldo completo de servidor de Bases de Datos MySQL al usar la opción –all-databases. Por más información correr:

mysqldump --help

Instalar Webmin en CentOS/RHEL 5.x

Thursday, August 12th, 2010

webminWebmin es un panel de control via web que nos permite controlar casi cualquier aspecto de nuestro servidor desde una interfaz gráfica amigable. Si no eres muy amigo del shell, quizás te pueda sacar de apuros alguna que otra vez, la forma de instalarlo en CentOS, RHEL y derivados es la siguiente:

Vamos al sitio web de webmin y hacemos click en el menú izquierdo donde dice RPM, allí nos llevará a descargar un paquete, la URL será similar a la que muestro en el comando wget, reemplaza la URL que muestro aquí, por la que te de la web y listo :D

yum -y install perl-Net-SSLeay
cd /usr/src
wget http://downloads.sourceforge.net/project/webadmin/webmin/1.510/
rpm -i webmin-1.510-1.noarch.rpm

Webmin ya debería ser accesible desde http://IP.de.tu.server:10000/
Asegúrate de abrir el puerto en el firewall, sino no funcionará.

Crear zonas DNS desde shell en cPanel

Monday, August 9th, 2010

El otro día me vi en la necesidad de crear zonas dns desde shell en un servidor remoto para que mi script interactuara sin intervención humana alguna. Como siempre, el equipo de cPanel previene casi todas estas cosas y cuentan con un script que permite hacer esto justamente desde la línea de comandos.

El script es /scripts/adddns y estas son las opciones que permite:

[root@akm38.myserver.com:~]/scripts/adddns
 
Control Flags:
--domain    (required)
Domain for zone creation
 
--ip        (optional)
IP for zone creation. Defaults to server main shared IP
 
--reseller  (optional)
Set reseller (zone administrator) to utilize name server 
IPs assigned via WHM to the reseller. Defaults to using main
server name server IPs

Así que si lo vamos a ejecutar, a modo práctico sería:

/scripts/adddns --domain pepito.com --ip XX.XX.XX.XX

Donde, pepito.com es nuestro dominio y XX.XX.XX.XX es la IP real que utilizará esa zona DNS. That’s all :D

Ejecutar comandos remotos via SSH

Friday, August 6th, 2010

Hoy programando un shell script me vi en la necesidad de ejecutar comandos por SSH remotamente. La solución era bastante sencilla a decir verdad, para ejecutar comandos remotos desde una sesión de SSH basta con añadir el comando al final de la línea que usamos para conectar al servidor. Ejemplo:

ssh root@hostname.com date

En este caso, obtendremos la fecha del sistema remoto en nuestra salida estándart. Este tipo de cosas son realmente útiles para el manejo remoto de sistemas y automatizaciones por ssh usando claves públicas.