Error al borrar un dominio en Parallels Plesk Panel

Un error que sigue apareciendo aunque pasen versiones y versiones de Plesk Panel ( desde la 7.4 a la 9.2 ) es la perdida de integridad referencial en algunas tablas. Esto provoca que a la hora de ejectuar algunas herramientas y falten datos se generen errores. En ese caso al borrar el dominio ‘delete.me’ nos aparece este mensaje :

0: class.MailManager.php:242
        MailManager::execWithException(string 'smart_exec', string 'mailmng', array, array, string 'lst')
1: class.MailManager.php:274
        MailManager->callMailManager(string 'remove-mailname', array)
2: class.MailManager.php:354
        MailManager->removeMailname(string 'sharoj.com', string 'delete')
3: cmd_mail.php3:1357
        mn_del(string '490')
4: class.DSMail.php:211
        DSMail->delete(boolean false)
5: class.PhDomain.php:358
        PhDomain->reset(integer '0', boolean true, boolean false)
6: class.BsDomain.php:330
        BsDomain->reset(integer '0')
7: class.BsDomain.php:302
      BsDomain->delete(integer '0')
8: class.BsDomain.php:536
        mdeleteDomains(array)
9: removeDomains.php3:42
        require(string '/opt/psa/admin/htdocs/domains/removeDomains.php3')
10: plesk.php:51

Tendremos que buscar manualmente donde está el problema y repararlo , directamente a la base de datos de Plesk (generalmente llamada psa).

Comenzamos a buscar relaciones rotas entre objetos:

# mysql -uadmin -p`cat /etc/psa/.psa.shadow` psa
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 152938
Server version: 5.0.32-Debian_7etch10-log Debian etch distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> select id, name from domains where name = "delete.me";
+------+------------+
| id   | name       |
+------+------------+
| 1241 | delete.me  |
+------+------------+
1 row in set (0.00 sec)

Ya tenemos el ID del dominio, nos centramos en las cuentas de correo ya que el error se genera al borrar cuentas de correo. Vamos a ver que tablas hay en esta version de Plesk ( 9.2.3 )

mysql> show tables like '%mail%' ;
+------------------------+
| Tables_in_psa (%mail%) |
+------------------------+
| Webmails               |
| badmailfrom            |
| mail                   |
| mail_aliases           |
| mail_redir             |
| mail_resp              |
| mass_mail              |
| mass_mail_clients      |
| mass_mail_domains      |
+------------------------+
9 rows in set (0.00 sec)

La tabla que nos interesa es mail vamos a ver que esctructura tiene y vamos sacando datos:

mysql> desc mail ;
+---------------+------------------------------------------+------+-----+---------+----------------+
| Field         | Type                                     | Null | Key | Default | Extra          |
+---------------+------------------------------------------+------+-----+---------+----------------+
| id            | int(10) unsigned                         | NO   | PRI | NULL    | auto_increment |
| mail_name     | varchar(245)                             | NO   |     |         |                |
| perm_id       | int(10) unsigned                         | NO   | MUL |         |                |
| postbox       | enum('false','true')                     | NO   |     | false   |                |
| account_id    | int(10) unsigned                         | NO   | MUL |         |                |
| redirect      | enum('false','true')                     | NO   |     | false   |                |
| redir_addr    | varchar(255)                             | YES  |     | NULL    |                |
| mail_group    | enum('false','true')                     | NO   |     | false   |                |
| autoresponder | enum('false','true')                     | NO   |     | false   |                |
| spamfilter    | enum('false','true')                     | NO   |     | true    |                |
| virusfilter   | enum('none','incoming','outgoing','any') | NO   |     | none    |                |
| mbox_quota    | bigint(20)                               | NO   |     | -1      |                |
| dom_id        | int(10) unsigned                         | NO   | MUL |         |                |
+---------------+------------------------------------------+------+-----+---------+----------------+
13 rows in set (0.01 sec)
mysql> select * from mail where dom_id = 1241;
+-----+-----------+---------+---------+------------+----------+------------+------------+---------------+------------+-------------+------------+--------+
| id  | mail_name | perm_id | postbox | account_id | redirect | redir_addr | mail_group | autoresponder | spamfilter | virusfilter | mbox_quota | dom_id |
+-----+-----------+---------+---------+------------+----------+------------+------------+---------------+------------+-------------+------------+--------+
| 490 | delete.me |    2202 | true    |       2204 | false    |            | false      | false         | false      | incoming    |         -1 |   1241 |
+-----+-----------+---------+---------+------------+----------+------------+------------+---------------+------------+-------------+------------+--------+
1 row in set (0.00 sec)

Vemos que tiene al menos una cuenta de correo para el usuario 2204, vamos a buscar este usuario en la tabla accounts, ya que el id es accounts_id

mysql> show tables like '%acco%'
    -> ;
+------------------------+
| Tables_in_psa (%acco%) |
+------------------------+
| accounts               |
+------------------------+
1 row in set (0.00 sec)
mysql> select * from accounts where id = 2204 ;
Empty set (0.01 sec)

Pues no está, aquí tenemos el problema, no existe la información del usuario pero sí el buzón.
lo más comodo es borar la entrada en la base de datos de la cuenta de correo. Dado que vamos a borrar el dominio nos es indiferente conservarlo.

mysql> delete from mail where id =490 limit 1 ;
Query OK, 1 row affected (0.03 sec)

De otra forma , habíamos dado de alta una fila en accounts con el id 2204 .

Error de Plesk con SSL en /var/log/sw-cp-server/error_log

El error que sale continuamente en el log de Plesk /var/log/sw-cp-server/error_log es el siguiente : Error: (connections.c.299) SSL: 1 error:140780E5:SSL routines:SSL23_READ:ssl handshake failure

La solución parece ser un bug de Plesk , aunque estuve googleando un buen rato, no encontré mucho sobre el tema, el caso es que estaba obteniendo este error en /var/log/sw-cp-server/error_log, además aparecía cada 6 minutos por lo que en 3 días con el servidor funcionando, ya tenía dos historicos del archivo comprimidos en .gz.

Finalmente, buscando en la ayuda de Plesk, encontré la forma de que no volviera a aparecer más, la verdad es que no tiene mucha complicación, lo único que tenemos que hacer es, generar un certificado, dependiendo de las necesidades de cada uno, se puede comprar o autogenerarlo, os hago un copy/paste de la solución en la ayuda de Plesk .

En caso de que necesite generar un certificado autofirmado, siga este procedimiento:

1. Vaya a Inicio > Seguridad > Certificados SSL. Se le mostrará una lista de los certificados SSL existentes en su repositorio.
2. Haga clic en Añadir Certificado SSL.
3. Indique las propiedades del certificado:
* Nombre del certificado. Este le ayudará a identificar este certificado en el repositorio.
* Nivel de Encriptación. Escoja el nivel de encriptación para su certificado SSL. Le recomendamos que escoja un valor superior a 1024 bits.
* Indique su ubicación y el nombre de la organización. Los valores introducidos no deben exceder los 64 símbolos permitidos.
* indique el nombre del servidor para el que ha adquirido el certificado SSL. Por ejemplo: your-domain.com
* Introduzca su dirección de email.
4. Haga clic en el botón Autofirmado. Se generará su certificado y se almacenará en el repositorio.

Error en Plesk: Espacio insuficiente en /migration del servidor fuente de la migración

Vaya tela…. este error persiste y persiste en las versiones de Plesk …

Síntomas
La migración de un dominio Parallels Plesk Panel finaliza sin ningún error. De todas formas, el dominio no presenta ningún archivo html.

Causa

La causa de este problema es una cantidad de espacio de disco insuficiente en el directorio /migration del servidor fuente.

El Administrador de Migraciones de Parallels Plesk Panel carga el Agente de Migración al servidor fuente. El Agente de Migración es un script perl que realiza el volcado de los datos, usando /migration en el servidor fuente como directorio temporal para la migración. Si el directorio /migration ya no dispone de más espacio o se encuentra en una partición de tamaño limitado, los datos no se volcan debido a esta insuficiencia de espacio de disco.

Puede comprobar el tamaño de la partición ejecutando el comando «df -h». Por ejemplo:

~# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/sda1 950M 254M 649M 29% / <- la partición es demasiado pequeña

/dev/sda2 4.7G 1.6G 3.1G 35% /usr

/dev/sda3 100G 60G 41G 60% /var

/dev/sda4 4.7G 5.5M 4.7G 1% /home

~#

La partición “/” donde se encuentra el directorio /migration es demasiado pequeña. Tar no puede volcar los datos debido a la insuficiencia de espacio de disco.

Resolución

Le recomendamos liberar el directorio /migration en el servidor fuente. También puede transferir el directorio a una partición de mayor capacidad.

Por ejemplo, creemos el directorio de migración en otra partición que tenga espacio suficiente:

source~# mkdir /home/migration

Entonces creeamos un vínculo simbólico:

source~# rm -rf /migration

source~# ln -s /home/migration/ /migration

Y yasta amigos a migrar dominios a saco de servidor a servidor….

Problema con la libreta de direcciones en Horde al actualizar a Plesk a la versión 9.5.1

El problema que os comento me ha pasado con Horde (webmail por defecto en Plesk) por actualizar Plesk de la versión 9.3.0 a 9.5.1.

El problema estaba bien claro, al intentar acceder a la libreta de direcciones que Horde guarda, Horde daba el siguiente error:

DBError: field

y el log de Horde daba el siguiente error:

error log : Apr 20 18:05:16 HORDE [error] [kronolith] DB Error: no such  field:
SELECT event_id, event_uid, event_description, event_location,  event_private, event_status,
event_attendees, event_keywords,  event_title, event_category, event_recurcount, event_recurtype,
 event_recurenddate, event_recurinterval, event_recurdays, event_start,  event_end, event_alarm,
event_modified, event_exceptions,  event_creator_id FROM kronolith_events WHERE calendar_id =  'email@domain.com'
AND event_alarm > 0 AND ((event_end >=  '2010-04-20 00:00:00') OR (event_recurenddate >=
'2010-04-20  00:00:00' AND event_recurtype <> 0))
[nativecode=1054 ** Unknown  column 'event_private' in 'field list'] [pid 26294 on line 323 of  "/usr/share/psa-horde/kronolith/lib/Driver/sql.php"]
 Apr 20 18:05:16 HORDE [error] [turba] DB Error: no such field: SELECT  object_id, owner_id,
 object_type, object_members, object_uid,  object_firstname, object_lastname, object_middlenames,
 object_nameprefix, object_namesuffix, object_alias, object_bday,  object_homestreet,
object_homepob, object_homecity, object_homeprovince,  object_homepostalcode, object_homecountry,
 object_workstreet,  object_workpob, object_workcity, object_workprovince,  object_workpostalcode,
object_workcountry, object_tz, object_email,  object_homephone, object_workphone, object_cellphone,
object_fax,  object_pager, object_title, object_role, object_company,  object_category, object_notes,
object_url, object_freebusyurl,  object_pgppublickey, object_smimepublickey FROM turba_objects WHERE
 (object_type = 'Group' AND owner_id = 'email@domain.com')  [nativecode=1054 ** Unknown column
'object_firstname' in 'field list']  [pid 26294 on line 173 of  "/usr/share/psa-horde/turba/lib/Driver/sql.php"]

Vale pues despues de tantos errores aqui os digo la solución que mas o menos daban en los foros de parallels y que yo le aplique al dichoso error.

El error es debido a que Plesk al actualizar a la versión 9.5.1 instala la versión de psa-turba 2.3.3 que es la que crea el complemento de la libreta de direcciones en Horde, pues desinstalamos ese rpm que Plesk instalo:

rpm -e –nodeps psa-turba-2.3.3

Ahora nos vamos a bajar el anterior paquete rpm de la versión de psa-turba que es el 2.1.7 y posteriormente lo instalamos y listo.

wget http://autoinstall.plesk.com/PSA_9.3.0/dist-rpm-CentOS-5-x86_64/opt/horde/psa-turba-2.1.7-cos5.build93091230.06.noarch.rpm

rpm -i psa-turba-2.1.7-cos5.build93091230.06.noarch.rpm

Y listo¡¡¡ ya tenemos la libreta de direcciones que guarda Horde y no hemos perdido ningún contacto porque no hemos tocado la base de datos ni las tablas que usa Horde.