Instalar Memcached en CentOS 5.3

Memcached is a generic purpose distributed high performance memory object caching system to use in speeding up dynamic database driven websites by caching data and objects in memory to reduce the amount the database needs to be read.

Memcached was originally developed by Danga Interactive for LiveJournal but is now used by many popular and large community driven websites like Slashdot, Wikipedia, SourceForge, GameFAQs, Facebook, Digg, Fotolog, Kayak and like. It is being distributed under a permissive free software licence. Know more about who all are using memcached

Things to consider before Installing memcached.

  1. First, decide how much memory you want to give memcached to use for caching.
  2. Then decide if you want to run memcached on the default port (11211) or not.
  3. Next decide if you want memcached to listen to a specific IP address if you have multiple IP addresses on your server
  4. Finally decide, what user you want to run memcached as; typically, you want to run it using Apache user so that Apache processes can access memcache data

Installation Process

1. If you don’t have rpmforge installed, follow this step.

wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
rpm –install rpmforge-release-0.3.6-1.el5.rf.i386.rpm
yum install –enablerepo=rpmforge memcached

2. Start memcached.

memcached -d -m 512 -l 127.0.0.1 -p 11211 -u nobody

The “-m SIZE” is the flag for setting the memory requirements in MBs. Once this cache is filled memcache will just start to overwrite with newer content. Please experiment with this setting to find what works best for you.

3. Install PHP extension.

wget http://pecl.php.net/get/memcache-2.2.5.tgz

4. Extract tar file.

tar -xvf memcache-2.2.5.tgz

5. Open the directory.

cd memcache-2.2.5

6. Install the memchaced PHP extension.

phpize && ./configure –enable-memcache && make

7.  Copy the extension.

cp modules/memcache.so {PHP extension directory}

8. Edit your php.ini and add the following line.

extension=memcache.so

9. Last is restart your webserver.

10. If you check your server using a phpinfo page you should now see a MemCache section on the page. You can now fully use the MemCache functionality in your PHP.

memcached pre-requissites

yum -y install libevent libevent-devel

How to make memcached run automatically when you restart your server?. Add this line to rc.local

#!/bin/sh
echo “# Start memcached” >> /etc/rc.local
echo “/usr/local/bin/memcached -d -m 1024 -u httpd -l 127.0.0.1″ >> /etc/rc.local

How to have a multiple memcached server.

Create LocalSettings.php file and this line.

$wgMainCacheType = CACHE_MEMCACHED;
$wgParserCacheType = CACHE_MEMCACHED; # optional
$wgMessageCacheType = CACHE_MEMCACHED; # optional
$wgMemCachedServers = array( “127.0.0.1:11211″ );

$wgSessionsInMemcached = true; # optional

To use multiple servers (physically separate boxes or multiple caches on one machine on a large-memory x86 box), just add more items to the array. To increase the weight of a server (say, because it has twice the memory of the others and you want to spread usage evenly), make its entry a subarray:

$wgMemCachedServers = array(“127.0.0.1:11211″, # one gig on this box
array(“127.0.0.1:11211″, 2 ) # two gigs on the other box
);

Security Note:

Memcached has no security or authentication. Please ensure that your server is appropriately firewalled,
and that the port(s) used for memcached servers are not publicly accessible. Otherwise, anyone on the internet can put data into and read data from your cache.

ENJOY FRIENDS AND MAKE EASY¡¡¡¡¡¡¡¡¡¡¡

TIP: Encriptar/Proteger archivos de texto con VIM

Si usamos la opcion “-x” en vi (o vim) podemos encriptar un fichero de texto. Ejemplo:

$ vi -x nombre_fichero.txt

Nos saldra un prompt preguntando la password de acceso. La proxima vez que abramos ese fichero para editarlo o visualizarlo, nos volvera a solicitar la misma password que pusimos anteriormente. Algo rápido y util para guardar nuestros pequeños “secretitos”.

Sacar una lista de dominios y de IPs del servidor Plesk

Si usas Plesk y quieres un listado de todos tus dominios y la IP que utilizan, sólo tienes que ejecutar esta consulta desde un cliente o desde shell MySQL con un usuario que tenga permisos (de lectura como mínimo) a la base de datos psa (es la base de datos interna de Plesk), por ejemplo, usa como usuario las mismas credenciales que tu “superadmin” de Plesk.

SELECT i.ip_address, d.name FROM psa.hosting AS h
LEFT JOIN psa.domains AS d ON h.dom_id = d.id
LEFT JOIN psa.IP_Addresses AS i ON h.ip_address_id = i.id;

Si lo que quieres es un resumen con todas las IPs, el número de dominios que usan y un dominio de ejemplo, usa esta consulta:

SELECT i.ip_address, COUNT(d.name) AS dominios, d.name AS uno FROM psa.hosting AS h
LEFT JOIN psa.domains AS d ON h.dom_id = d.id
LEFT JOIN psa.IP_Addresses AS i ON h.ip_address_id = i.id
GROUP BY h.ip_address_id
ORDER BY h.ip_address_id, d.name

Instalar un servidor de Subversion en un CentOs con Plesk

No es nada difícil instalar un servidor de Subversion en un linux, pero hay que tener unas cuantas cosas en cuenta si queremos que se integre bien con Plesk y poder alojar todos nuestros proyectos bajo un subdominio del tipo https://svn.midominio.com/repositorio1

Como siempre, para toquetear el servidor necesitas tener acceso al sistema por consola con el usuario root. Este tutorial funciona con Plesk 8 y Plesk 9 (concretamente Plesk 9.2) corriendo sobre un Linux CentOS, que no es otra cosa que un servidor dedicado de 1and1. Y siendo honrados, hay que decir que básicamente es la adaptación y traducción del howto que yo usé escrito por Ale Le (en inglés).

NOTA: Cambia “repositorio1″ por el nombre que le quieras dar y “dominio.com” por tu nombre de dominio.

Resumen de los pasos a seguir:

  1. Instalar el servidor de Subversion
  2. Configurar apache
  3. Crear el repositorio Subversion
  4. Configurar Plesk
  5. Crear usuarios y repositorios

Paso 1: Instalar el servidor de Subversion

  1. # yum install subversion
    Una vez hecho login con el usuario root, usamos yum para instalar los paquetes de subversion (si en vez de CentOs utilizas otra distribución, quizás tengas que usar aptget u otro gestor de paquetes). Para comprobar que la versión de subversion es la correcta ejecuta # svn --version y tendría que darte 1.4 (en concreto, yo tengo 1.4.2)

Paso 2: Configurar Apache

Gracias a yum hemos instalado Subversion con gran facilidad y podríamos usarlo ya con los protocolos y puertos de subversion. Ahora hemos de configurar apache para que cuando alguien llame a https://svn.midominio.com/repositorio1 se esté conectando a subversion via WEBDAV.

  1. # yum install mod_dav_svn
    Instalamos el mod_dav_svn para apache (DAV es la tecnología que nos permitirá hacer commits a través de http). Este comando debería instalar todos los paquetes que dependan para su funcionamiento (como mod_authz_svn). Puedes ver los módulos de apache que tienes instalados en # ll /etc/httpd/modules
  2. # vi /etc/httpd/conf.d/subversion.conf
    LoadModule dav_svn_module modules/mod_dav_svn.so
    LoadModule authz_svn_module modules/mod_authz_svn.so

    Puede ser que el archivo ya esté creado, aunque con un nombre subversion.conf.ALGO : si estas dos lineas aparecen arriba y no están comentadas, ya nos vale. Hemos de asegurarnos de que apache está cargando el archivo mod_dav_svn.so al arrancar. En /etc/httpd/conf/httpd.conf podemos ver que después de cargar módulos básicos hace Include conf.d/*.conf. Por lo que crearemos un archivo llamado /etc/httpd/conf.d/subversion.conf y le insertamos el código arriba escrito.

Paso 3: Crear el repositorio Subversion

  1. # mkdir /var/svn/
    # mkdir /var/svn/repositorio1

    Crearemos el directorio svnrepo en /var/, donde se alojarán los repositorios de subversion
  2. # svnadmin create /var/svn/repositorio1
    Instalamos un repositorio en ese directorio mediante el comando svnadmin create
  3. chmod -R 777 /var/svn/repositorio1
    Muy importante es dar permisos de escritura a este directorio. Si no es así, apache no podrá modificar estos archivos y por tanto, los commits nunca funcionarán.

Paso 4: Configurar Plesk

  1. Creamos un subdominio mediante el panel de control de Plesk.
    Dentro del dominio en el que queremos colgar nuestro servidor de subversion. Hay que ir al panel del dominio > Sitio Web > Crear subdominio y le llamamos “svn”, por ejemplo. Si al crear el dominio hemos activado https y hemos dicho que vaya al mismo sitio que http, podremos acceder por https a nuestro repositorio.
  2. # vi /var/www/vhosts/dominio.com/subdomains/svn/conf/vhost.conf
    <Location /repositorio1>
    DAV svn
    SVNPath /var/svn/repositorio1
    AuthType Basic
    AuthName “Subversion repositorio1”
    AuthUserFile /etc/svn-auth-file
    Require valid-user
    </Location>

    Como Plesk sobreescribe el archivo /var/www/vhosts/dominio.com/conf/httpd.confy el /var/www/vhosts/dominio.com/subdomains/svn/conf/httpd.conf cada vez que tocamos algo en el panel de control, hemos de hacer los cambios en otro fichero que creamos con el nombre vhost.conf. En ese fichero introducimos el código que he puesto arriba. Con eso le decimos a apache que use DAV y que el repositorio de svn está en /var/svnrepo/ y que para autenticar pida cualquier usuario válido en el archivo de passwords /etc/svn-auth-file (luego lo creamos).
  3. # /usr/local/psa/admin/sbin/websrvmng -u --vhost-name=dominio.com
    Como siempre que añadamos un archivo al directorio conf de un dominio, hemos de decir a Plesk que regenere el httpd.conf incluyendo un “include” a nuestro vhost.conf. Al poner name=dominio.com sólo regenerará ese dominio.
  4. # /etc/init.d/httpd restart
    Una vez el include está en httpd.conf, reiniciamos el apache y así leerá el nuevo archivo vhost.conf. Ahora ya tenemos montado el servidor y el subdominio apuntando a nuestro subversion en http://svn.dominio.com/repositorio1 o https://svn.dominio.com/repositorio1 si lo hemos configurado así (pruébalo, venga!) :-)

Paso 5: Crear usuarios y repositorios

  1. # htpasswd -c /etc/svn-auth-file usuario1
    La aplicación htpasswd crea un archivo en /etc/svn-auth-file e introduce un usuario con nombre usuario1 (en seguida nos pide que escribamos y confirmemos su contraseña). ¡Alerta! Si queremos crear más usuarios, no debemos usar la opción -c, ya que esta crea un nuevo fichero, sobreescribiendo el anterior. Para el segundo y siguientes usuarios, usaremos # htpasswd /etc/svn-auth-file usuario2. Si queremos borrar un usuario, podemos editar el fichero o usar la opción -D mayúscula.
  2. Además, a mi me interesa tener varios repositorios, sólo he de hacer los pasos 3, 4 (sólo el punto 2, añadiendo un bloque debajo del otro) y 5 cambiando “repositorio1″ por otro nuevo repositorio
  3. Si sólo quiero dar acceso a ciertos usuarios a repositorios concretos, puedo hacerlo cambiando la linea en vhost.conf Require valid-user por Require user usuario1 usuario2

Por favor, dejad comentarios si veis algún fallo o sugerencia. Espero que esto os ahorre unas cuantas horas de investigación :-)

Script en bash para poner en color el Netstat

Aqui os dejo este script feo en bash que me he encontrado en un foro ruso mas raro que un perro verde, por si a alguien le sirve.

El script muestra un netstat (concretamente netstat -natp) con distintos colores según el estado de cada conexión (established, listen, syn_sent, fyn_wait, etc.). Claramente no es un script muy útil (ni muy bien hecho), pero lo publico. Quizás a alguno le sirve de disparador para hacer algo verdaderamente útil.

#!/bin/bash
cyan="\E[1;36m\E[1m";
normal="\E[m";
blue="\E[34m\E[1m";
violet="\E[35m\E[1m";
red="\E[31m\E[1m";
yellow="\E[33m\E[1m";
green="\E[37m\E[32m\E[1m";
text="\E[1;37m\E[1m";

if [ "$UID" != "0" ]; then
	echo -e "$red$0: You will get more information if you have root privileges. Try sudo $0$normal"
fi

netstat -natp | \
while read line; do

	if [ `echo $line | awk '{print($1)}'` = "Proto" ]; then
		echo -e "$yellow=====================================================================================================$normal"
		echo -e "$text$line$normal"
		echo -e "$yellow=====================================================================================================$normal"
	else

		state=`echo $line | awk '{print($6)}'`
		color=$normal
		case $state in
			"ESTABLISHED")
				color=$green;;
			"SYN_SENT" | "SYN_RECV")
				color=$yellow;;
			"FIN_WAIT1" | "FIN_WAIT2" |"TIME_WAIT")
				color=$violet;;
			"CLOSE" | "CLOSE_WAIT" | "LAST_ACK" | "CLOSING" )
				color=$blue;;
			"LISTEN")
				color=$cyan;;
			"UNKNOWN")
				color=$red;;
			*)
		esac
		echo -e "$color$line$normal"

	fi
done;