respaldo automatizado de /etc con etckeeper

Una de los dolores de cabeza cuando hay mas de dos sysadmin que trabajan en conjunto es el mantener  en control  de que cosa y cuando se modifico algún archivo de configuración de algún programa/demonio/etc.  Muchas veces es una tarea considerada fome/latosa o simplemente no  siempre se recuerda respaldar el archivo original  luego de realizar tuning a nuestro servicio no se consiguen los  resultados esperados u en el peor caso siquiera levantar el demonio.  Dentro de la chiches que ofrece ubuntu jaunty podemos encontrar dos combinaciones muy potentes para tratar de solventar  y disminuir de alguna manera el riesgo sobre todo en entornos de producción  (servidor), y los elegidos son  baazar y etckeeper.

Baazar es un sistema de control de versiones open source desarrollado por canonical que ofrece flexibilidad y facil manejo. En la otra mano tenemos etckeeper es una aplicacion que permite mantener un respaldo automatizado del directorio /etc usando un sistema de control de versiones  (en este caso baazar ya que viene instalada por defecto en la distro).  Esto me permite tener un historial de todos los cambios realizados en todos los archivos de configuraciones ya sea cuando manualmente edito algo u cuando hago alguna actualizacion de paquete.

Luego de todo el blabla a la parte practica:

sudo apt-get install etckeeper

Al terminar pues con la configuracion que trae por defecto es suficiente por ahora, de todas maneras se puede hojear el archivo “/etc/etckeeper/etckeeper.conf”.

Para iniciar debemos ejecutar

sudo etckeeper init

Eso inicia el repositorio inicial con el sistema de control de versiones especificado (en este caso baazar). Ahora debemos enviar los archivos del repositorio /etc  (funciona igual que bzr commit ),

sudo etckeeper commit "Envio Inicial"

que devolverá como salida una larga lista de archivos y
terminará en algo como:
added xml/docbook-xml.xml.old
added xml/rarian-compat.xml
added xml/sgml-data.xml
added xml/sgml-data.xml.old
added xml/xml-core.xml
added xml/xml-core.xml.old
added xulrunner-1.9/system-greprefs.js
Committed revision 1.

Esto creo el repositorio en baazar para todo el directorio “/etc/” (excepto la lista de archivos ignorados) y guardo todos los cambios “commit” en la versión numero 1.  Como ver para creer haré la siguiente prueba:  editare el archivo /etc/hosts y agregare la linea “192.168.0.1 gateway-falso” , guardare los cambios  y luego hare un commit para comparar los cambios hechos.

sudo etckeeper commit "Cambio en tabla hosts"

Bien ahora veamos el historial con la diferencia entre el archivo original y el modificado:

kamus@judith:~$ sudo bzr diff -c2 /etc
=== modified file 'hosts'
--- hosts    2009-05-24 21:14:06 +0000
+++ hosts    2009-05-24 21:23:54 +0000
@@ -1,5 +1,6 @@
 127.0.0.1    localhost
 127.0.1.1    judith
+192.168.0.1    gateway-falso
 # The following lines are desirable for IPv6 capable hosts
 ::1     ip6-localhost ip6-loopback

Se puede ver como aparece con símbolo “+”  la linea que agregue y la fecha de modificación del archivo en las ultimas dos revisiones hechas. Una de las ventajas de esta versión disponible en los repositorios oficiales es que cada vez que realizas un apt-get install paquete ese ejecuta un commit (respaldo) de tu /etc. Recomiendo ver  los links que donde esta mi fuente de documentación pues hay una serie de tres capítulos con ejemplos bien completo.

[1]http://fnords.wordpress.com/2009/02/23/etckeeper-chronicles-1/ , Extensión de la documentación para uso de etckeeper.

[2]http://doc.bazaar-vcs.org/bzr.dev/en/mini-tutorial/index.html , Excelente mini tutorial de 5 minutos para el uso basico de baazar.

como hacer triaging

Wolfger del ubuntu bug squad hoy envió una nota gráfica de como NO hacer triaging en launchpad,

triag a bug

triag a bug

[1] https://wiki.ubuntu.com/Bugs/HowToTriage

postgresql 8.3 con encoding Latin1

Preparando el ambiente

Lo primero es configurar el soporte del locale correspondiente  que nos da compatibilidad con  Latin1, para ello hay que compilar el soporte de ISO-8959-1 para nuestro idioma configurado (en mi caso Español de Chile). Previamente
hay verificar que el paquete locales este instalado (aunque por defecto debería estar). Para ver una lista de los locales soportados podemos mirar el archivo “/usr/share/l10n/SUPPORTED”, una versión reducida  dice:

$cat /usr/share/i18n/SUPPORTED
...
es_CL.UTF-8 UTF-8
es_CL ISO-8859-1
es_CO.UTF-8 UTF-8
es_CO ISO-8859-1
es_CR.UTF-8 UTF-8
.....

Por ejemplo para habilitar el soporte iso-8859-1 para Chile  ejecutar:

$sudo locale-gen es_CL

Nota1:Luego podemos verificar con el comando “locale -a” que el encoding se haya habilitado.

Instalando postgresql 8.3

Via apt (synaptic) cargamos los paquetes necesarios  de postgres y la lista queda,

$apt-get install postgresql-8.3 postgresql-client-8.3 postgresql-common postgresql-plperl-8.3 postgresql-pltcl-8.3;
una vez terminada la instalación de los paquetes detenemos el servicio con "sudo /etc/init.d/postgresql-8.3 stop" o
"sudo service postgresql-8.3 stop" (a preferencia del artista).

Por defecto el cluster queda almacenado en el directorio “/var/lib/postgresql/8.3/main”, como hay que regenerar el cluster de base de datos  con nuevo locale se puede hacer lo siguiente:

A) Borrar el cluster, pero habrá que regenerar los certificados para el uso de SSL en las conexiones.
B) Renombrar el directorio a “main-old” y al finalizar copiar los certificados auto generados al momento de la instalación.

Como no quiero perder tiempo en regenerar los certificados, renombrare el directorio para tenerlo de respaldo para luego sacar los certificados, entonces ejecuto:

$mv /var/lib/postgresql/8.3/main /var/lib/postgresql/8.3/main-old

luego se debe crear el cluster con initdb (como usuario postgresl!):

$/usr/lib/postgresl/8.3/bin/initdb --locale=es_CL -U postgresql -D /var/lib/postgresql/8.3/main

Esto cargara una serie de scripts y configuraciones si no tenemos ningun error y volvemos a nuestra shell ahora, de lo contrario habra que revisar el error mostrado en pantalla. Ahora bastara copiar los certificados del antiguo directorio “/var/lib/postgresql/8.3/main-old” al nuevo y subir el servicio (service postgresql-8.3 start)

Nota2: Para verificar que nuestro cluster esa usando Latin1 podemos ejecutar psql -l,  debería mostrar:

    Listado de base de datos
  Nombre   |  Dueño  | Codificación
-----------+----------+---------------
 postgres  | postgres | LATIN1
 template0 | postgres | LATIN1
 template1 | postgres | LATIN1
(3 filas)

[1]https://help.ubuntu.com/community/LocaleConf
[2]http://www.postgresql.org/docs/8.3/static/locale.html
[3]http://www.nabble.com/Error-al-crear-una-base-en-espa%C3%B1ol…..-td20331659.html

la letra chica según microsoft

Ayer microsoft libero su RC de la ultima joyita de su sistema operativo Windows ’7′ , entre las novedades que pueden encontrar en el sitio de microsoft, esta incluye su licencia de eso de forma gratuita hasta x fecha (ver mas abajo). Todo bien hasta que si leen la letra chica, cito textual:


How long can I test Windows 7?
This is a very important question, because Windows 7 Beta and Windows 7 RC each have an expiration date. To avoid interruption, you’ll need to rebuild your test machine using a valid version of Windows before the software expires. Windows will notify you that the expiration process is beginning and two weeks later your PC will begin shutting down every two hours. The Beta expires on August 1, 2009, and bi-hourly shutdowns will begin July 1, 2009. The RC will expire June 1, 2010, and the bi-hourly shutdowns will begin on March 1, 2010. In both cases, you’ll need to rebuild your test PC to replace the OS and reinstall all your programs and data. (Learn more about installing Windows.) Ahora para los apurones y en español se resume mas o menos así: "La beta expira el 1 de agosto del 2009 y luego se apagara el sistema cada 2 horas continuamente." Cool :) , asi que ojo! {1} http://www.microsoft.com/windows/windows-7/faq.aspx {2} No recomiendo instalar este o ningun sistema de MS, dirigirse a www.ubuntu.com, www.debian.org para descargar un sistema operativo de verdad :)