[plesk] ERROR: PleskFatalException: Solucionar incosistencias en la base de datos

Plesk sigue teniendo algunos defectos , uno de ellos es que a veces se pierde la integridad referencial en algunas tablas como las tablas mail y accounts, que provoca el fallo de las cuentas de correo. Este fallo puede ser :

  • The error that the other server returned was: 550 550 sorry, no mailbox here by that name. (#5.7.17)
  • The error that the other server returned was: 451 451 qq internal bug (#4.3.0)
  • O bien que al acceder a las propiedades de la cuenta de correo o intentar eliminar la cuenta, obtengamos este error en Plesk :
    ERROR: PleskFatalException
    Error: Can't create Account object: Account: unable to select: no such row in the table
    
    0: common_func.php3:146
        psaerror(string 'Error: Can't create Account object: Account: unable to select: no such row in the table')
    1: client.domain.mail.mailname.php:86
        plesk__client__domain__mail__mailname->accessItemOverview(string 'GET', NULL null)
    2: client.domain.mail.mailname.php:160
        __plesk__client__domain__mail__mailname->accessItem(string 'GET', NULL null)
    3: UIPointer.php:596
        UIPointer->access(string 'GET')
    4: plesk.php:38
    

Pongamos el supuesto que en mi servidor tengo dos dominios uno que se llama hostingaldescubierto.com y otro senin.org y que la cuenta que falla con el error de antes es contacto@senin.org.
Vamos a lanzar esta consulta en la base de datos para localizar los registros huérfanos en la taba de mail con accounts.

select domains.name, mail.mail_name, accounts.id, accounts.password from domains, mail left join accounts on mail.account_id = accounts.id where domains.id = mail.dom_id and accounts.id IS null;
+--------------------------+-------------+------+----------+
| name                     | mail_name   | id   | password |
+--------------------------+-------------+------+----------+
| hostingaldescubierto.com | basura      | NULL | NULL     | 
| senin.org                | contacto    | NULL | NULL     | 
+--------------------------+-------------+------+----------+
2 rows in set (0.01 sec)

Ahora podemos hacer dos cosas o bien borrar la cuenta de correo de la tabla mail o bien insertar una entrada en la tabla accounts. El único problema que puede haber si borramos la entrada en la tabla mail, es que si volvemos a crear la cuenta de correo podría ser que plesk eliminase el buzón con el contenido y lo crease de nuevo, pero no estoy totalmente seguro de esto o si ocurriría en todas las versiones. Yo opto por insertar los registros que falten.

Podríamos proceder generando los valores a insertar en la tabla accounts, y generando unas passwords aleatorias :

select mail.account_id, 'plain', SUBSTRING(MD5(RAND()) FROM 1 FOR 8) from domains, mail left join accounts on mail.account_id = accounts.id where domains.id = mail.dom_id and accounts.id IS null;

Nos devuelve :

+------------+------+-------------------------------------+
| account_id | text | SUBSTRING(MD5(RAND()) FROM 1 FOR 8) |
+------------+------+-------------------------------------+
|       1550 | text | 764dd7d1                            | 
|       2310 | text | cdc15fc4                            | 
+------------+------+-------------------------------------+

Con lo que montamos la sentencia INSERT y quedaría así:

INSERT INTO accounts select mail.account_id, 'plain', SUBSTRING(MD5(RAND()) FROM 1 FOR 8) from domains, mail left join accounts on mail.account_id = accounts.id where domains.id = mail.dom_id and accounts.id IS null;

Query OK, 2 rows affected (0.04 sec)
Records: 2  Duplicates: 0  Warnings: 0

y ahora verificamos que haya quedado corregido con la primera consulta:

select domains.name, mail.mail_name, accounts.id, accounts.password from domains, mail left join accounts on mail.account_id = accounts.id where domains.id = mail.dom_id and accounts.id IS null;
Empty set (0.01 sec)

Y así tenemos corregido el problema con tan solo copiar y pegar.

[wordpress]

WordPress ya está maduro y cosas como esta hacen darle un voto positivo.

Instalado un template en un cliente me aparece este error:

Warning: touch() [function.touch]: SAFE MODE Restriction in effect. The script whose uid is 10277 is not allowed to access /tmp owned by uid 0 in /var/www/vhosts/dominio.comm/httpdocs/wordpress/wp-admin/includes/file.php on line 199  Download failed. Could not create Temporary file.

Es normal en los alojamientos con safe_mode activado y seguramente no quieran desactivarlo por seguridad.

Para ello, nos creamos nuestro propio tmp ( teniendo en cuenta los problemas de seguridad que podría ocasionar )

mkdir /var/www/vhosts/dominio.com/httpdocs/tmp 

# ajustar el usuario real para asignarle al directorio
chown dominio.com:psacln  /var/www/vhosts/dominio.com/httpdocs/tmp

# para que el usuario apache pueda escribir tambien
chmod 777 /var/www/vhosts/dominio.com/httpdocs/tmp

Ahora lo más interesante ,a gregar a nuestro fichero wp-config.php, esta linea :

define('WP_TEMP_DIR','/var/www/vhosts/dominio.com/httpdocs/tmp');

Con este cambio lo que hemos hecho ha sido preprar un tmp e indicarle a wordpress que por defecto ese es el directorio temporal.

Me ha gustado mucho encontrarme con estos detalles que demuestran la madured del proyecto.

qué es milter ?

Cuando se hace referencia a un ‘milter’ para un mta, se está hablando de un añadido, plugin o como quieras llamarlo que bajo una arquitectura predefinida es capaz de integrase con el mta. El mta es el encargado de gestionar la recepción de correo. El «milter» ( mail-filter ) se puede usar junto con el mta para interactuar al recibir emails, filtralos, marcarlos como spam, indicar que se debe rechazar, etc…

Más informacion en : http://en.wikipedia.org/wiki/Milter

[mediawiki] cambiar wikisysop password

Mucho más cómodo que cambiar la password en la base de datos, es lanzar este comando en la ruta de la instalación de tu mediawiki :php ./maintenance/changePassword.php –user=WikiSysop –password=nuevapasssword

No tiene mucho que explicar

phpBB 3.x forums config.php sample file

Hoy he necesitado este ejemplo de fichero de configuración para un foro phpBB3. Me ha ahorrado tiempo y espero que ayude a alguien más.

El caso practico ha sido restarurar un foro phpBB 2 con solo un volcado de mysql y migrarlo a phpBB 3, despues de actualizar a la ultima version me cargué el fichero config.php

<?php
// phpBB 3.0.x auto-generated configuration file
// Do not change anything in this file!
$dbms = 'mysql'; //database type it may not be mysql
$dbhost = 'localhost'; // usually localhost
$dbport = '' // empty if port default';
$dbname = 'database name';
$dbuser = 'database user name';
$dbpasswd = 'database password';

$table_prefix = 'phpbb__'; // usually phpbb__
$acm_type = 'file';
$load_extensions = '';

@define('PHPBB_INSTALLED', true);
//@define('DEBUG', true);
//@define('DEBUG_EXTRA', true);
?>

magento: [warn] Cannot get media type from ‘x-mapp-php5’

Este error es debido a que alguien no se ha leido la documentación de magento jejeje.

En el fichero .htaccess hay un apartado que dice :

## this line is specific for 1and1 hosting

#   AddType x-mapp-php5 .php
#   AddHandler x-mapp-php5 .php

Y si lo descomentas, da el error, por eso pone ESPECÍFICO PARA 1AND1 😉

warning: rpmts_HdrFromFdno: V3 DSA signature: NOKEY, key ID 025e513b

Este error, es referente a Centos 3, aparece cuando instalo un paquete del repositorio oficial de Centos ( http://mirror.centos.org/centos/ ). Hay que comprobar si el mirror es el correcto, por eso en esta versión de Centos, hay que comprobar el fichero /etc/yum.conf y ver si están apuntando al repositorio oficial.

yum -y install screen
warning: rpmts_HdrFromFdno: V3 DSA signature: NOKEY, key ID 025e513b
Error: Could not find the GPG Key necessary to validate pkg /var/cache/yum/base/packages/screen-3.9.15-10.i386.rpm
Error: You may want to run yum clean or remove the file:
 /var/cache/yum/base/packages/screen-3.9.15-10.i386.rpm
Error: You may also check that you have the correct GPG keys installed

Una vez comprobado, vamos a importar la nueva llave que nos permitirá instalar el paquete.

wget http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-3
rpm --import RPM-GPG-KEY-CentOS-3

Una vez hecho hecho no hay ningún problema para instalar paquetes del repostiorio oficial. Aunque sería conveniente actualizar a la version Centos 5.x

Fatal error: Unable to open key (SOFTWAREPleskPSA ConfigPSA Key): (5) Access is denied. in C:SWSoftPleskadminauto_prependauth.php3 on line 40

Este error aparece en casos muy puntuales de migraciones de vps windows y cambios entre versiones. Aparece cuando intentamos acceder al panel de control plesk mediante el navegador https://ip:8443 .
No es necesario logearse para que aparezca el error.

Fatal error:  Unable to open key (SOFTWAREPleskPSA ConfigPSA Key): (5) Access is denied. in C:SWSoftPleskadminauto_prependauth.php3 on line 40

Extamente el motivo no lo conocemos, debe ser algún bug en las plantillas de Parallels. La solución pasa por agregar al usuario psaadm a la cadena de registro HKEY_LOCAL_MACHINESOFTWAREWow6432NodePLESKPSA ConfigPSA Key con permisos de lectura.

Una vez hecho este cambio, con recargar la página del panel ya tendremos la entrada al login de forma correcta.

Este bug aún no aparece en el kb de parallels.

Protegiendo el servidor: APF (Advanced Policy Firewall)

Un paquete de software muy usado para defender nuestros servidores es APF. La instalación es muy rápida por lo que podemos ver en seguida si resulta eficaz ante un ataque. Se basa en filtros usando iptables y listas de ips para bloquear. Es muy completo, pero lo más importante es que es rápido de instalar y no da problemas. Solución rápida en momentos de crisis

Para instalarlo :

cd /usr/src
wget http://www.r-fx.ca/downloads/apf-current.tar.gz
tar zxvf apf-current.tar.gz 
cd apf-*
sh install.sh

La instalación es así:

# sh install.sh 
Installing APF 9.6-5: Completed.

Installation Details:
  Install path:         /etc/apf/
  Config path:          /etc/apf/conf.apf
  Executable path:      /usr/local/sbin/apf

Other Details:
  Listening TCP ports: 111
  Listening UDP ports: 111,45188,45234,46761,48062
  Note: These ports are not auto-configured; they are simply presented for information purposes. You must manually configure all port options.

Iniciar el servicio apf

apf -s

Los logs están en /var/log/apf_log

más información en http://rfxnetworks.com/apf.php

Exprime la tarjeta de red : gigabit en Debian

Por defecto, en linux, el autonegociado de las tarjetas no es posible ponerlas a gigabit ( 1000Mb/s ). Es necesario usar una herramienta que se llama ethtool. Para poder usarla la instalamos así

apt-get install ethtool

Una vez configurada ejecutamos esta linea ( hay que elegir el interface que pondremos a 1000 ). En nuestro caso la tarjeta de red que está a giga es eth1.

/usr/sbin/ethtool -s eth1 speed 1000 duplex full autoneg on

Para automatizar esta configuración lo pondremos en el fichero /etc/network/interfaces usando el parámetro pre-up

Un ejemplo sería este :

auto eth1
iface eth1 inet static
	address		192.168.201.10
	netmask		255.255.255.0
	pre-up	/usr/sbin/ethtool -s eth1 speed 1000 duplex full autoneg on