Error al ejecutar al instalar mysql-python con pip – sh: mysql_config: command not found

Instalar mysql-python con pip

Un error común al instalar mysql-python para usar mysql con django puede ser este:

pip install MySQL-python
Downloading/unpacking MySQL-python
  Real name of requirement MySQL-python is MySQL-python
  Downloading MySQL-python-1.2.4.zip (113Kb): 113Kb downloaded
  Running setup.py egg_info for package MySQL-python
    Downloading http://pypi.python.org/packages/source/d/distribute/distribute-0.6.28.tar.gz
    Extracting in /tmp/tmpT2lFmq
    Now working in /tmp/tmpT2lFmq/distribute-0.6.28
    Building a Distribute egg in /home/build/MySQL-python
    /home/build/MySQL-python/distribute-0.6.28-py2.7.egg
    sh: mysql_config: command not found
    Traceback (most recent call last):
      File "", line 14, in 
      File "/home/build/MySQL-python/setup.py", line 18, in 
        metadata, options = get_config()
      File "setup_posix.py", line 43, in get_config
        libs = mysql_config("libs_r")
      File "setup_posix.py", line 25, in mysql_config
        raise EnvironmentError("%s not found" % (mysql_config.path,))
    EnvironmentError: mysql_config not found
    Complete output from command python setup.py egg_info:
    Downloading http://pypi.python.org/packages/source/d/distribute/distribute-0.6.28.tar.gz

Extracting in /tmp/tmpT2lFmq

Now working in /tmp/tmpT2lFmq/distribute-0.6.28

Building a Distribute egg in /home/build/MySQL-python

/home/build/MySQL-python/distribute-0.6.28-py2.7.egg

sh: mysql_config: command not found

Traceback (most recent call last):

  File "", line 14, in 

  File "/home/build/MySQL-python/setup.py", line 18, in 

    metadata, options = get_config()

  File "setup_posix.py", line 43, in get_config

    libs = mysql_config("libs_r")

  File "setup_posix.py", line 25, in mysql_config

    raise EnvironmentError("%s not found" % (mysql_config.path,))


EnvironmentError: mysql_config not found

----------------------------------------
Command python setup.py egg_info failed with error code 1
Storing complete log in /root/.pip/pip.log

La razón es falta de dependencias, tenemos que instalar el mysql-server y lo más importante para solucionar el error es instalar el paquete libmysqlclient-dev

Lo instalamos con apt:

apt-get install libmysqlclient-dev

También para evitar otros errores con pip necesitamos instalar el paquete de desarrollo de python:

apt-get install python-dev

Luego de eso ya podemos instalar mysql-python:

pip install MySQL-python
Downloading/unpacking MySQL-python
  Running setup.py egg_info for package MySQL-python
    
Installing collected packages: MySQL-python
  Running setup.py install for MySQL-python
    building '_mysql' extension
    gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -Dversion_info=(1,2,4,'final',1) -D__version__=1.2.4 -I/usr/include/mysql -I/usr/include/python2.7 -c _mysql.c -o build/temp.linux-x86_64-2.7/_mysql.o -DBIG_JOINS=1 -fno-strict-aliasing -g
    In file included from _mysql.c:44:0:
    /usr/include/mysql/my_config.h:422:0: warning: "HAVE_WCSCOLL" redefined [enabled by default]
    /usr/include/python2.7/pyconfig.h:890:0: note: this is the location of the previous definition
    gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro build/temp.linux-x86_64-2.7/_mysql.o -L/usr/lib/x86_64-linux-gnu -lmysqlclient_r -lpthread -lz -lm -lrt -ldl -o build/lib.linux-x86_64-2.7/_mysql.so
    
Successfully installed MySQL-python
Cleaning up...

Htaccess – Redirección y Hotlink

Un post rápido..

Prevenir hotlink y enviar una imagen cualquier en vez de la original:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?dominio\.com/.*$ [NC]
RewriteRule .*\.(gif|jpe?g|png)$ http://www.EnlaceANuevaImagenParaQueAparezcaEnvezDeLaQueEnlazan/no.jpg [R,NC,L]

Redirrección 301 de dominio (cambio de dominio)

RewriteEngine on
RewriteRule (.*) http://www.dominio.com/$1 [R=301,L] 

CHMOD – Permisos de escritura, lectura y ejecución.

Notación simbólica;

--- Sin permiso
--x Ejecución
-w- Escritura
-wx Escritura y Ejecución
r-- Lectura
r-x Lectura y Ejecución
rw- Lectura y Escritura
rwx Lectura, escritura y ejecución

Visto de forma numeral del 1 al 7.

0 --- Sin permiso
1 --x Ejecución
2 -w- Escritura
3 -wx Escritura y Ejecución
4 r-- Lectura
5 r-x Lectura y Ejecución
6 rw- Lectura y Escritura
7 rwx Lectura, escritura y ejecución

Bien esta es la explicación básica, luego lo de por que son 3 números (777) y demás es por que se da permisos al propietario, al grupo y a todos los demás, esto ya lo he explicado hace mucho tiempo en este enlace: como usar chmod

Es viejo todo esto y muy sencillo pero me dio por publicarlo.

Solución a: Leverage browser caching – Cachear las imágenes en el navegador

Si usan el gmetrix o usan el page speed de google, puede que se tomen con un error como este

Leverage browser caching

Esto lo que nos dice es que nuestra web no le dice al navegador que guarde el contenido estático, o sea cada vez que una visita vuelve a entrar a nuestra web carga las imágenes, al menos que le navegador tenga la opción de cachear activada por defecto.

Si tenemos mod_expires activado en nuestro servidor podemos usar este código:

<IfModule mod_expires.c>
  ExpiresActive on

# Your document html
  ExpiresByType text/html "access plus 0 seconds"

# Media: images, video, audio
  ExpiresByType audio/ogg "access plus 1 month"
  ExpiresByType image/gif "access plus 1 month"
  ExpiresByType image/jpeg "access plus 1 month"
  ExpiresByType image/png "access plus 1 month"
  ExpiresByType video/mp4 "access plus 1 month"
  ExpiresByType video/ogg "access plus 1 month"
  ExpiresByType video/webm "access plus 1 month"

# CSS and JavaScript
  ExpiresByType application/javascript "access plus 1 year"
  ExpiresByType text/css "access plus 3 month"
</IfModule>

Con esto forzamos al navegador a cachear nuestro contenido estático y dejarlo guardado por un mes, así que si una visita entra seguido a nuestra web no tendrá que descargar todo el contenido cada vez que entra y así navegará más rápido.

Mod_deflate en Htaccess – Comprimir páginas.

Sencillo código sin tener que editar la configuración de apache:

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/css text/x-component application/x-javascript application/javascript text/javascript text/x-js text/html text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon application/json
</IfModule>

Otra variante:

<IfModule mod_deflate.c>
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE application/x-httpd-fastphp
AddOutputFilterByType DEFLATE application/x-httpd-eruby
AddOutputFilterByType DEFLATE text/html
</IfModule>

Si da error 500 lo quitan, seguramente sea por que mod_deflate no este habilitado.

Con eso comprimimos todo el contenido, mod page speed de google nos nos dará el error, aceleramos la carga y reducimos el consumo de ancho de banda.

Allow – Dominios regionales de google y redes sociales.

Bueno esto nos sirve para restringir accesos o bien permitirlos, tiene varias funciones, aquí lo dejo por que me sirve, supongo que a más de uno le servirá, listo para usar con nginx.

*.google.com *.google.ae *.google.com.af *.google.com.ag *.google.off.ai *.google.am *.google.com.ar *.google.as *.google.at *.google.com.au *.google.az *.google.ba *.google.com.bd *.google.be *.google.bg *.google.bi *.google.com.bo *.google.com.br *.google.bs *.google.co.bw *.google.com.bz *.google.ca *.google.cd *.google.cg *.google.ch *.google.ci *.google.co.ck *.google.cl *.google.com.co *.google.co.cr *.google.com.cu *.google.de *.google.dj *.google.dk *.google.dm *.google.com.do *.google.com.ec *.google.es *.google.com.et *.google.fi *.google.com.fj *.google.fm *.google.fr *.google.gg *.google.com.gi *.google.gl *.google.gm *.google.gr *.google.com.gt *.google.com.hk *.google.hn *.google.hr *.google.co.hu *.google.co.id *.google.ie *.google.co.il *.google.co.im *.google.co.in *.google.is *.google.it *.google.co.je *.google.com.jm *.google.jo *.google.co.jp *.google.co.ke *.google.kg *.google.co.kr *.google.kz *.google.li *.google.lk *.google.co.ls *.google.lt *.google.lu *.google.lv *.google.com.ly *.google.mn *.google.ms *.google.com.mt *.google.mu *.google.mw *.google.com.mx *.google.com.my *.google.com.na *.google.com.nf *.google.com.ni *.google.nl *.google.no *.google.com.np *.google.nr *.google.nu *.google.co.nz *.google.com.om *.google.com.pa *.google.com.pe *.google.com.ph *.google.com.pk *.google.pl *.google.pn *.google.com.pr *.google.pt *.google.com.py *.google.ro *.google.ru *.google.rw *.google.com.sa *.google.com.sb *.google.sc *.google.se *.google.com.sg *.google.sh *.google.sk *.google.sn *.google.sm *.google.com.sv *.google.co.th *.google.com.tj *.google.tm *.google.to *.google.tp *.google.com.tr *.google.tt *.google.com.tw *.google.com.ua *.google.co.ug *.google.co.uk *.google.com.uy *.google.uz *.google.com.vc *.google.co.ve *.google.vg *.google.co.vi *.google.com.vn *.google.vu *.google.ws *.google.co.za *.google.co.zm *.bing.com www.yahoo.com www.yahoo.es *.facebook.com *.twitter.com

Solución: Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use ‘ulimit’ to allow mysqld to use more memory or you can add more swap space

Nos podemos topar con ese error en mysql y con otros errores de memoria en procesos.

El problema es como bien dice el error que el servidor no tiene memoria cosa que puede pasar, tal vez el servidor tenga 2 gigas de ram y el mysql tenga una configuración para usar más de 5 o 6gb y por eso el error, así que la solución sería agregar memoria el server, pero…

Si el server 24 gigas de ram, o 60 o 128 y no estamos usando ni ni el 40% de la ram significa que tenemos otro problema o alguna limitación.

Lo primero es ver la salida de ulimit -a

Si no tenemos todo en ulimited o valores altos por ahí viene la restricción.

El lugar para buscar la solución esta en: /etc/security/limits.d/ o /etc/security/limits.conf

Se que no es el post más agradable y detallado que han visto pero prometo mejorarlo ya que ahora no tengo tiempo para poner capturas ni nada por el estilo, pero con eso pueden solucionar el problema.

Luego pongo información más detallada del problema en cuanto acabe de trabajar.

Ispconfig no envia correos – Deshabilitar Filtros antispam y amavis

Ispconfig aveces no envía correos y es por que las bases de datos están des actualizadas o bien por que el amavis no esta instalado, la solución es o bien actualizar las bases de datos, filtros y demás o directamente deshabilitar el amavis, clamav y spamassasin.

Si es un servidor propio y solo nosotros enviamos emails yo prefiero desabilitar todo ( amavis consube bastante memoria ram y clamav a veces también así que nos ahorramos algo de recursos quitandolos. )

Solo editamos el archivo:

/etc/postfix/main.cf

Comentamos estas dos lineas:

content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings

Reiniciamos postfix y eso es todo:

/etc/init.d/postfix restart

Lo otro es quitar amavis, lo hacemos con apt-get remove o solo lo dejamos apagado con service amavis stop y lo evitamos que inicie al reiniciar el servidor con:

update-rc.d -f amavis remove

Eso es todo.

Deshabilitar PHP.ini en las cuentas de cPanel

PHP.ini cuestas cpanel

Si tenemos un hosting pequeño o compartimos servidor con alguien y no queremos que use php.ini ya sea por que tenemos desabilitadas funciones y no queremos que las habilite o por lo que sea, podemos deshabilitar la creación del PHP.ini y solo hacer que use el nuestro:

Editamos el suphp.conf

/opt/suphp/etc/suphp.conf

Buscamos la linea:

[phprc_paths]

Y descomentamos estas 3 opciones:

;application/x-httpd-php=/usr/local/lib/
;application/x-httpd-php4=/usr/local/php4/lib/
;application/x-httpd-php5=/usr/local/lib/

O sea quitamos el punto y como del inicio, cerramos, reiniciamos apache y listo.

Esto lo que hace es decirle al php que solo puede usar el PHP.ini que esta en esas rutas.

Si usamos fastcgi, cgi o DSO lo dicho en este tema no servirá.