Apartamento En Familia

Apartamento En Familia
Apartamento de playa para vacaciones. http://www.apartamentoenfamilia.es. Número registro HUTT-005768

martes, 2 de julio de 2013

Como copiar una carpeta a otra igual reemplazando archivos existentes

En algunas ocasiones nos puede suceder que tenemos dos carpetas que se llaman iguales y queremos juntarlas en una. Entonces se nos ocurre que si copiamos la carpeta en el mismo lugar donde esta la otra (y que además se llama igual) combinará los archivos de las dos carpetas. Ahora bien... ¿que decisión toma cuando se encuentra archivos dentro de esa carpeta que se llaman igual? ¿Los sobreescribe o no? 

La verdad es que todas estas preguntas se resuelven fácilmente con el MAN de cp, pero al ser tareas habituales vale la pena reparar en ellas:


Imaginemos que tenemos una web hecha en Wordpress y un archivo php contiene errores. Se lo comentamos a la empresa que se encarga del diseño web y nos manda el patch patch_web.tgz :

Descomprimos el patch 
tar xzfv patch_web.tgz 

y nos encontramos con una carpeta wp-content. Nosotros ya tenemos una carpeta /var/www/wp-content/ y lo que se espera que hagamos es que el archivo erroneo (con fallos) que tenemos se sustituya por el que la empresa diseñadora nos ha enviado. 

Lo primero que se nos ocurre es hacer

cp -a wp-content /var/www/wp-content/

¿Esto funcionaria? No como esperamos, ya que lo que hará es copiar la carpeta wp-content dentro de /var/www/wp-content . Y lo que queremos es que copie el contenido, no la carpeta. Así pues hacemos:

cp -a wp-content/* /var/www/wp-content/

Y ahora si que copiará el contenido, sustituyendo los archivos que se llamen igual. 

Si por el contrario, tenemos otro escenario en el que no siempre queremos sustituir los archivos, podemos mirar las opciones -u o -n



u, --update
copy only when the SOURCE file is newer than the destination file or when the destination file is missing



-n, --no-clobber
              do not overwrite an existing file (overrides a previous -i option)




lunes, 1 de julio de 2013

WPMU Ldap Authentication: Como habilitar LDAP para todos los usuarios


Mediante el plugin WPMU Ldap Authentication tendremos la posibilidad de validarnos contra un servidor LDAP en un entorno MU, es decir, un entorno multisite.

El plugin se instala facilmente desde el propio repositorio del Wordpress y para configurarlo no tiene más secreto que configurar los parámetros de conexión con nuestro servidor LDAP.


Yo para instalar este entorno usé un Ubuntu 10.04.3 LTS, MySQL, Apache, OpenLDAP, Wordpress 3.5 y WPMU Ldap Authentication 4.0.2. .

¿Cual fué mi problema? Pues que yo tenia una base de datos local de usuarios de Wordpress (unos 250 usuarios) y cuando instalas el plugin automáticamente no te los pone a validar en LDAP. Es decir, que cuando creas el usuario, te da a escoger si quieres que se valide en LDAP o Local. Si el usuario ya existia una vez instalaste el plugin, tienes que editar el usuario y cambiar de Local a LDAP. Bien, pues cambiar a mano 250 usuarios tampoco era un suplicio, pero como suelo automatizar este tipo de procesos hice un pequeño script en bash y luego lo apliqué con MySQL Workbench.

Cuando miras la base de datos y como la trata WPMU para saber si el usuario se debe de validar en Local o LDAP, te das cuenta que lo hace en la tabla wp_usermeta. Alli crea un registro con el ID del usuario, el string ldap_login y un valor true. Así pues, si hacemos un insert por cada usuario con estos valores, tendremos la base de datos migrada:

for i in `cat ids.txt.csv`; do echo "INSERT INTO \`mi_schema\`.\`wp_usermeta\` (\`user_id\`,\`meta_key\`,\`meta_value\`) VALUES ("$i",\"ldap_login\",\"true\");"; done

El output será algo como esto:


INSERT INTO `mi_schema`.`wp_usermeta` (`user_id`,`meta_key`,`meta_value`) VALUES (725,"ldap_login","true");
INSERT INTO `mi_schema`.`wp_usermeta` (`user_id`,`meta_key`,`meta_value`) VALUES (726,"ldap_login","true");
INSERT INTO `mi_schema`.`wp_usermeta` (`user_id`,`meta_key`,`meta_value`) VALUES (727,"ldap_login","true");
INSERT INTO `mi_schema`.`wp_usermeta` (`user_id`,`meta_key`,`meta_value`) VALUES (728,"ldap_login","true");
(....)

Luego abrí el MySQL Workbench, conecté con la base de datos MySQL del Wordpress y pegué toda esa salida en un script y lo ejecuté. Podría haber usado mysqldump pero esta vez lo hice así. 


Con esto solucioné el pequeño problema de migración.


That u don't know what you've got 'til it's gone