martes, 24 de febrero de 2009

- PROCESO DE MIGRACIÓN DE CUENTAS IMAP ENTRE SERVIDORES CYRUS CON IDENTICA VERSION: La intencion es repartir la carga entre varios servidores imap basandonos en rutado ldap segun atributo mailHost.

- Cierre de cliente de correo y aviso a usuario.
- Copia de buzón desde máquina original (localizacion de archivos segun /etc/imapd.conf): tar -zcvf - /repdata/imap-data/imap/user/usuario/ | ssh root@imap-nuevo.dominio.com "dd of=/var/spool/imap/user/usuario.tgz"
- Copia de archivos db de correos vistos y suscripciones (localizacion de archivos segun /etc/imapd.conf): scp /repdata/imap-data/data/imap/user/m/usuario* root@imap-nuevo.dominio.com:/var/lib/imap/user/ (la letra inicial del usuario es su entrada hash)
- Creación usuario en máquina nueva mediante script (o con cyradm): /root/createimapuser.pl - Borrado de directorio de buzón recien creado en máquina nueva.
- Extracción de .tgz directorio buzón en máquina nueva
- comprobación de acl de archivos en máquina nueva: chown
- Reconstrucción de indices: sudo -u cyrus /usr/lib/cyrus-imapd/reconstruct -f -r user.usuario
- Cambio de atributo ldap mailHost.
- Prueba de squirrel nuevo comparando con viejo (contenido de carpetas ok).
- Copia de archivos de usuario* desde squirrel anterior al nuevo.
- Nueva prueba de squirrel.
- Aviso y explicación a usuario.

miércoles, 18 de febrero de 2009

Instalación de Squirrel dentro de un entorno LDAP

- Punto de partida: Centos 5.2. actualizado con httpd instalado. En este mismo servidor debe correr simplegroupware, el cual requiere php 5.2.6. Para tenerlo instalado hay que acudir al repositorio externo de Utter Ramblings. Subiré la receta de simplegroupware y del proceso de arranque proximamente.

- Dependencias:
wget http://www.jasonlitka.com/media/EL5/x86_64/php-mbstring-5.2.6-jason.1.x86_64.rpm
# gpgcheck=0 en /etc/yum.conf
yum install php-mbstring-5.2.6-jason.1.x86_64.rpm
#Installed: php-mbstring.x86_64 0:5.2.6-jason.1
yum install squirrelmail.noarch
#Installed: squirrelmail.noarch 0:1.4.8-5.el5.centos.3
service httpd restart
# Prueba ok abriendo: http://simplegroupware.carreras.sa/webmail
#Diccionario:
yum install aspell-es.x86_64
Installed: aspell-es.x86_64 50:0.50-13.2.2
# Parche para adaptar búsqueda de direcciones en ldap (criterios especiales e inclusión de dato de delegación):

# diff -u functions/abook_ldap_server.php.orig functions/abook_ldap_server.php
--- functions/abook_ldap_server.php.orig 2009-02-17 12:14:07.000000000 +0100
+++ functions/abook_ldap_server.php 2009-02-17 13:26:45.000000000 +0100
@@ -272,7 +272,7 @@
/* Undo sanitizing of * symbol */
$expr = str_replace('\2a','*',$expr);
}
- $expression = "cn=$expr";
+ $expression = "(&(|(cn=$expr)(st=$expr))(!(mail=*aux*))(!(mail=*@carreras.sa))(|(accountStatus=active)(mail=*listas*))(!(employeeType=0)))";

/* Make sure connection is there */
if(!$this->open()) {
@@ -280,7 +280,7 @@
}

$sret = @ldap_search($this->linkid, $this->basedn, $expression,
- array('dn', 'o', 'ou', 'sn', 'givenname', 'cn', 'mail'),
+ array('dn', 'o', 'st', 'sn', 'givenname', 'cn', 'mail'),
0, $this->maxrows, $this->timeout);

/* Should get error from server using the ldap_error() function,
@@ -309,8 +309,8 @@
$nickname = $this->charset_decode($row['dn']);
$fullname = $this->charset_decode($row['cn'][0]);

- if(!empty($row['ou'][0])) {
- $label = $this->charset_decode($row['ou'][0]);
+ if(!empty($row['st'][0])) {
+ $label = $this->charset_decode($row['st'][0]);
}
else if(!empty($row['o'][0])) {
$label = $this->charset_decode($row['o'][0]);
@@ -376,4 +376,4 @@
// return $this->search('*');
}
}
-?>
\ No newline at end of file
+?>

- Corrección de variables no definidas (puede que sea algo introducido por algún parche de plugin de más abajo):

# diff -u /usr/share/squirrelmail/functions/mime.php.orig /usr/share/squirrelmail/functions/mime.php
--- /usr/share/squirrelmail/functions/mime.php.orig 2009-02-18 10:10:31.000000000 +0100
+++ /usr/share/squirrelmail/functions/mime.php 2009-02-18 10:12:00.000000000 +0100
@@ -306,7 +306,7 @@
global $startMessage, $languages, $squirrelmail_language,
$show_html_default, $sort, $has_unsafe_images, $passed_ent_id,
$username, $key, $imapServerAddress, $imapPort,
- $download_and_unsafe_link;
+ $download_and_unsafe_link, $charset_converted, $charset;

if( !sqgetGlobalVar('view_unsafe_images', $view_unsafe_images, SQ_GET) ) {
$view_unsafe_images = false;
@@ -2473,4 +2473,4 @@

} // end fn SendDownloadHeaders

-?>
\ No newline at end of file
+?>



- Reconfiguración de php.ini:

# diff -u /etc/php.ini.orig /etc/php.ini
--- /etc/php.ini.orig 2009-02-18 15:27:37.000000000 +0100
+++ /etc/php.ini 2009-02-18 15:31:06.000000000 +0100
@@ -353,7 +353,7 @@
; instead (see below). Keeping display_errors enabled on a production web site
; may reveal security information to end users, such as file paths on your Web
; server, your database schema or other information.
-display_errors = On
+display_errors = Off

; Even when display_errors is on, errors that occur during PHP's startup
; sequence are not displayed. It's strongly recommended to keep
@@ -412,7 +412,7 @@
;error_log = filename

; Log errors to syslog (Event Log on NT, not valid in Windows 95).
-;error_log = syslog
+error_log = syslog


;;;;;;;;;;;;;;;;;
@@ -570,7 +570,7 @@
;upload_tmp_dir =

; Maximum allowed size for uploaded files.
-upload_max_filesize = 2M
+upload_max_filesize = 10M


;;;;;;;;;;;;;;;;;;





- Instalación de plugins:

- cd /usr/share/squirrelmail/plugins

- Archivado de correo en .zip: http://www.squirrelmail.org/plugin_view.php?id=121

wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Farchive_mail.1.2-1.4.2.tar.gz
tar -zxvf archive_mail.1.2-1.4.2.tar.gz

- Importar/Exportar contactos: http://www.squirrelmail.org/plugin_view.php?id=29

wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fabook_import_export-1.0-1.
tar -zxvf abook_import_export-1.0-1.4.4.tar.gz

- Añadir contactos desde mensajes: http://www.squirrelmail.org/plugin_view.php?id=269

wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fadd_address-1.0-1.4.0.tar.gz
tar -zxvf add_address-1.0-1.4.0.tar.gz

- Suscripción automática a carpetas IMAP: http://www.squirrelmail.org/plugin_view.php?id=245

wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fautosubscribe-1.1-1.4.2.tar.gz
tar -zxvf autosubscribe-1.1-1.4.2.tar.gz

- Pie de mensajes: http://www.squirrelmail.org/plugin_view.php?id=39

wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Femail_footer-0.5-1.4.2.tar.gz
tar -zxvf email_footer-0.5-1.4.2.tar.gz
cd email_footer ; cp config.sample.php config.php
# diff -u config.sample.php config.php
--- config.sample.php 2008-04-19 23:30:19.000000000 +0200
+++ config.php 2009-02-18 10:36:56.000000000 +0100
@@ -18,10 +18,21 @@
$plain_text_email_footer

= "\n\n"
-. "-----------------------------------------\n"
-. "This email was sent using SquirrelMail.\n"
-. " \"Webmail for nuts!\"\n"
-. "http://squirrelmail.org/\n";
+. "\"Este correo electronico y la informacion contenida en el mismo es de \n"
+. " caracter confidencial y esta sometida al secreto profesional, dirigiendose\n"
+. " exclusivamente al destinatario mencionado en el encabezamiento, cuyos datos\n"
+. " forman parte de un fichero responsabilidad del GRUPO CARRERAS y cuya\n"
+. " finalidad es contactar con el titular de los datos a traves del correo\n"
+. " electronico. Le informamos que cuenta con los derechos de acceso,\n"
+. " rectificacion y cancelacion que podra ejercitar mediante el envio de un\n"
+. " correo electronico a la siguiente direccion: calidad@grupocarreras.com.\n"
+. " Si el receptor de la comunicacion fuera el destinatario, le\n"
+. " informamos que cualquier divulgacion, copia, distribucion o utilizacion no\n"
+. " autorizada de la informacion contenida en la misma esta prohibida por la\n"
+. " legislacion vigente.\"\n"
+. "\n"
+. " http://www.grupocarreras.com\n"
+. "____________________________________________________________________________\n";





- Popup de correo nuevo: http://www.squirrelmail.org/plugin_view.php?id=124

wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fnotify_1_3.tar.gz
tar -zxvf notify_1_3.tar.gz
- Parche para español:
# diff -u setup.php.orig setup.php
--- setup.php.orig 2009-02-17 11:34:59.000000000 +0100
+++ setup.php 2009-02-17 11:35:02.000000000 +0100
@@ -42,7 +42,7 @@
function notify_link() {
echo '

';
- echo 'Show Notify Popup
' . "\n";
+ echo 'Mostrar Aviso Correo' . "\n";
}

// load preferences
@@ -60,11 +60,11 @@
function notify_options() {
global $notify_period, $notify_sound;
echo '';
- echo 'Notify Popup Options
' . "\n";
- echo 'New mail check period (minutes):';
+ echo 'Opciones de Notificacion' . "\n";
+ echo 'Periodo de comprobacion de nuevo correo (minutos):';
echo '' . "\n";
- echo 'Play sound:';
+ echo 'Aviso Sonoro:';
echo '' . "\n";



- Copia de seguridad de mensajes mientras se escriben: http://www.squirrelmail.org/plugin_view.php?id=8

wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fquicksave-2.4.2-1.2.9.tar.gz
tar -zxvf quicksave-2.4.2-1.2.9.tar.gz

- Avisos de cuota: http://www.squirrelmail.org/plugin_view.php?id=237

wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fcheck_quota-2.2-1.4.0.tar.gz
tar -zxvf check_quota-2.2-1.4.0.tar.gz
- Parche:
# diff -u config.sample.php config.php
--- config.sample.php 2007-08-06 13:48:47.000000000 +0200
+++ config.php 2009-02-17 11:18:59.000000000 +0100
@@ -25,7 +25,7 @@
* 0: UNIX / 1: IMAP / 2: cPanel
*/

-$settings['quota_type'] = 0;
+$settings['quota_type'] = 1;


/*


- Usuarios en linea: http://www.squirrelmail.org/plugin_view.php?id=128

wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fonline_users-1.2.1-re.tar.gz
tar -zxvf online_users-1.2.1-re.tar.gz

- Previsualizar imágenes adjuntas: http://www.squirrelmail.org/plugin_view.php?id=244

wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fshow_thumb-1.05-1.5.1.tar.gz
tar -zxvf show_thumb-1.05-1.5.1.tar.gz
cp /usr/share/squirrelmail/plugins/show_thumb/config.php.sample /usr/share/squirrelmail/plugins/show_thumb/config.php

- Plugin de compatibilidad (dependencia): http://www.squirrelmail.org/plugin_view.php?id=152

wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fcompatibility-2.0.14-1.0.tar.gz
tar -zxvf compatibility-2.0.14-1.0.tar.gz
patch -p0 < id="73" fileurl="http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Favelsieve-1.9.7.tar.gz" avelsieve_imapproxymode =" false;" avelsieve_imapproxymode =" true;" avelsieve_imapproxyserv =" array("> 'imap.example.org'
+ 'imapproxy.carreras.sa' => 'imap-tes-1.carreras.sa'
);

/** @var boolean Ldapuserdata mode: Gets user's email addresses (including
* mailAlternate & mailAuthorized) from LDAP Prefs Backend plugin's cache */

global $avelsieve_ldapuserdatamode;
-$avelsieve_ldapuserdatamode = false;
+$avelsieve_ldapuserdatamode = true;

/** @var array Map of cyrus administrator users, for proxy authentication */

@@ -160,7 +160,7 @@
* an intranet environment or in a same-language environment. */

global $translate_return_msgs;
-$translate_return_msgs = false;
+$translate_return_msgs = true;

/* Theme to use for the images. A directory with the same name must exist under
* plugins/avelsieve/$imagetheme, that contains the files: up.png, down.png,

- Hay que modificar el parche para consultar el servidor Sieve por usuario del ldap vía el atributo mailHost.
Notas: hay código para consulta ldap en el archivo spamrule.inc.php. Habría que colocar la consulta dentro de la definición
del servidor en la función DO_Sieve_ManageSieve dentro del archivo DO_Sieve_ManageSieve.class.php

- A la hora de configurar el filtro, hay que tener cuidado con la dirección de correo destino para la que se va a activar. Habría
que cambiar esto para que por defecto cogiera el atributo mail de ldap.


- Toda la configuración de squirrel se ha realizado de forma interactiva mediante /usr/share/squirrelmail/config/conf.pl. El resultado final queda en el archivo /etc/squirrelmail/config.php cuyo contenido es:

'ldap.carreras.sa',
'base' => 'ou=Personal,dc=carreras,dc=sa',
'name' => 'PERSONAL CARRERAS',
'maxrows' => 1000
);

$ldap_server[1] = array(
'host' => 'ldap.carreras.sa',
'base' => 'ou=Listas,dc=carreras,dc=sa',
'name' => 'LISTAS CARRERAS',
'maxrows' => 1000
);

$abook_global_file = '';
$abook_global_file_writeable = false;

$addrbook_dsn = '';
$addrbook_table = 'address';

$prefs_dsn = '';
$prefs_table = 'userprefs';
$prefs_user_field = 'user';
$prefs_key_field = 'prefkey';
$prefs_val_field = 'prefval';
$addrbook_global_dsn = '';
$addrbook_global_table = 'global_abook';
$addrbook_global_writeable = false;
$addrbook_global_listing = false;

$no_list_for_subscribe = false;
$smtp_auth_mech = 'none';
$imap_auth_mech = 'login';
$use_imap_tls = false;
$use_smtp_tls = false;
$session_name = 'SQMSESSID';
$only_secure_cookies = true;

$config_location_base = '';

@include SM_PATH . 'config/config_local.php';

/**
* Make sure there are no characters after the PHP closing
* tag below (including newline characters and whitespace).
* Otherwise, that character will cause the headers to be
* sent and regular output to begin, which will majorly screw
* things up when we try to send more headers later.
*/
?>

jueves, 12 de febrero de 2009

Instalación de convirt.net como gestor de máquinas virtuales

Una vez evaluado virt-manager y para intentar tener una mejor gestión de los nodos Xen previamente a una instalación cluster (conga u openqrm).

Uso como base una PVM Centos 5.2. con una instalación mínima de servidor y gnome (ver yum group install). Se ha añadido GITCO como repositorio rpms con Xen 3.3.0.

Receta de instalación:

  • Dependencias (desde http://xenman.sourceforge.net/wiki/index.php/Download)

wget "http://dag.wieers.com/rpm/packages/python-crypto/python-crypto-2.0-1.2.el5.rf.x86_64.rpm"
yum install python-crypto-2.0-1.2.el5.rf.x86_64.rpm
Installed: python-crypto.x86_64 0:2.0-1.2.el5.rf
wget "http://download.opensuse.org/repositories/home:/mge1512:/virtualisation/RHEL_5/x86_64/python-paramiko-1.7.1-8.1.x86_64.rpm"
yum install python-paramiko-1.7.1-8.1.x86_64.rpm
Installed: python-paramiko.x86_64 0:1.7.1-8.1

  • Instalación convirt: selecciono el rpm compilado para Fedora.
wget 'http://downloads.sourceforge.net/xenman/convirt-0.9.6-1.fedora.noarch.rpm?modtime=1226892945&big_mirror=0'
yum install convirt-0.9.6-1.fedora.noarch.rpm
Installed: convirt.noarch 0:0.9.6-1.fedora
Dependency Installed: xen.x86_64 0:3.3.1-0
Updated: xen-libs.x86_64 0:3.3.1-0
reboot

  • Oooops: Ha instalado un nuevo kernel de xen y no arranca. Modifico el kernel que arranca grub por defecto: "losetup -o`echo 512*63 |bc` /dev/loop0 archivoimagenvm.img" && mount /dev/loop0 /mnt && vi /boot/grub.conf
  • La primera ejecución de convirt crea una plantilla de configuración (/etc/convirt.conf) y termina. En la segunda ejecución se puede iniciar la configuración.