7 de junio de 2010

Aumenta en número máximo de conexiones a MySQL


En scripts php con acceso a MySQL en los que ejecuto varias copias, o mejor dicho ...muchas copias!!!, en backgroung llega un momento que me aparece el error:

Too Many Connections

Para ver el nº de conexiones desde la consola MySQL:

mysql> show full processlist;
+-----+------+-----------+----+---------+------+-------+------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+------+-----------+----+---------+------+-------+------+
| 388 | user | localhost | db | Sleep | 394 | | NULL |
| 389 | user | localhost | db | Sleep | 184 | | NULL |
| 394 | user | localhost | db | Sleep | 222 | | NULL |

|...


+-----+------+-----------+----+---------+------+-------+------+
51 rows in set (0.00 sec)

En este caso el nº de procesos "durmientes" o persistentes en MySQL va creciendo paulatinamente de modo que aumentar el nº permitido de conexiones a MySQL no funcinará (Sol-01), hay que NO permitir las conexiones persistentes desde php (Sol-02)


Las dos soluciones:

Sol-01) Aumentar el número de conexiones permitidas a MySQL:

editar el archivo
/etc/mysql/my.cnf

Descomentano o aumentando el nº:
max_connections = 100

Sol-02) No permitir conexiones persistentes a MySQL desde php:

editar el archivo:

/etc/php5/apache2/php.ini [MySQL] ; Allow or prevent persistent links. mysql.allow_persistent = On (lo cambiamos a Off)

y

/etc/mysql/my.cnf
thread_cache = 16
(by default esta en 8)


reiniciar el servidor MySQL y Apache2 .. y solucionado.

UPDATE:
Finalmente para aprovechar las ventajas de las conexiones persistentes intentando optimizar el rendimiento del servidor MySQL sin llegar al máximo de conexiones permitidas he optado por limitar el número de conexiones persistente:

editando el archivo /etc/php5/apache2/php.ini
poniendo:

[MySQL]
; Allow or prevent persistent links.
mysql.allow_persistent = On

; Maximum number of persistent links. -1 means no limit.
mysql.max_persistent = 10

; Maximum number of links (persistent + non-persistent). -1 means no limit.
mysql.max_links = 15

Ref.:
Aumentando el numero de conexiones maximas a Mysql

Stop Scroll in MySQL


Dentro de la consola MySQL:

mysql> \P more;
PAGER set to 'more;'
mysql>

ó

mysql> \P less;
PAGER set to 'less;'
mysql>

y ya se pude hacer la consulta y el resultado se presentara en modo more o less.

8 de mayo de 2010

rtorrent en color en debian


Ok, vamos a ello, (N.D.A./F.Y.I: fiasco!, este howto NO tiene un final feliz ... )

  1. Creamos un directorio de trabajo:
    # mkdir rtorrentColor; cd rtorrentColor
  2. Descargamos el código de rtorrent:
    # apt-get source rtorrent
  3. Instalamos dependencias para construir el programa
    # aptitude build-dep rtorrent
  4. Ahora hay que pillar el patch para añadir color a rtorrent:
    # wget http://aur.archlinux.org/packages/rtorrent-color/rtorrent-color/rtorrent-0.8.6-canvas-fix.patch
  5. Copiamos el archivo patch a la ruta de parches del rtorrent que estamos parcheando
    # cp rtorrent-0.8.6-canvas-fix.patch rtorrent-
    0.7.9/debian/patches/
  6. Reconstruimos el paquete:
    # cd rtorent 0.7.9 # debuild -us -uc
  7. error: no encuentra pbuild. Solucción: # aptitude install pbuilder
  8. error:
    debuild: fatal error at line 1319: dpkg-buildpackage -rfakeroot -D -us -uc failed
    ¿tengo instalado fakeroot?, SI!! Se trat de un error de compilación ...
    Ta vez el problem es la diferencia entre la versión el patch(-0.8.6) y del rtorrent base (-0.7.9)

  9. Pillamos parche de color para la versión 0.7.9 en http://libtorrent.rakshasa.no/ticket/1382
    # wget http://libtorrent.rakshasa.no/attachment/ticket/1382/rtorrent-0.7.9-canvas-fix-2.patch
  10. Borro el antiguo patch y pongo el nuevo:
    # rm -f
    rtorrent-0.7.9/debian/patches/*.patch
    # cp rtorrent-0.7.9-canvas-fix-2.patch rtorrent-0.7.9/debian/patches/
  11. y Re-Reconstruimos el paquete con el nuevo patch:
    # cd rtorent 0.7.9 # debuild -us -uc
  12. Falla el patch:
    patches: debian/patches/rtorrent-0.7.9-canvas-fix-2.patch
    Trying patch debian/patches/rtorrent-0.7.9-canvas-fix-2.patch at level 1 ... 0 ... 2 ... failure.
    make: *** [debian/stamp-patched] Error 1
    dpkg-buildpackage: failure: debian/rules build gave error exit status 2
    debuild: fatal error at line 1319:
    dpkg-buildpackage -rfakeroot -D -us -uc failed

  13. Probamos el otro patch que hay en http://libtorrent.rakshasa.no/ticket/1382
    # wget http://libtorrent.rakshasa.no/attachment/ticket/1382/rtorrent-0.7.9-canvas-fix.patch
  14. Y repetimos pasos 10 y 11 ... tambien falla !!!!:
    patches: debian/patches/rtorrent-0.7.9-canvas-fix.patch
    Trying patch debian/patches/rtorrent-0.7.9-canvas-fix.patch at level 1 ... 0 ... 2 ... failure.
    make: *** [debian/stamp-patched] Error 1
    dpkg-buildpackage: failure: debian/rules build gave error exit status 2
    debuild: fatal error at line 1319:
    dpkg-buildpackage -rfakeroot -D -us -uc failed
  15. ummm!!! fracaso total ya veremos si puedo resolverlo, ademas rtorrent en b/n tampoco queda tan mal!

Links:

http://www.howtoforge.com/how-to-compile-rtorrent-from-svn-in-ubuntu-9.10-karmic-koala-debian-5-lenny-with-magnet-link-support

http://binhng.wordpress.com/2010/04/16/rebuilding-rtorrent-with-color-patch-on-debian/

Crear paquetes debian


5 de mayo de 2010

un micra con guacamole (not finish howto, in progress)



VNC over web browser!!! uummmh.

Un tema muy interesante y que le he dedicado cierto tiempo es el acceso remoto a maquinas via navegadores web. En modo texto he probado varios programas:
La gran ventaja de este sistema es que se puede acceder desde cualquier máquina conectada a interner con un navegador web y usando protocolos abiertos en cualquier red como son http y https.

Proceso de instalacione en micra:

  1. Hay que tener instalado VNCserver, apache y el motor java tomcat, instalo tomcat5.5 que me falta:
    # aptitude install tomcat5.5
    ... coñe son 146MB !!!, en fin no queda mas remedio (((enter)))!!!!
  2. Ya comentaban en los guacamole reviews de sourceforge que era una pena que no funcionara con phyton o perl.
  3. ¿¿Si es javascript en realidad se necesitará en el client-side host, ¿no??
    The Guacamole server requires a Java servlet container like Apache Tomcat, while the client side requires just a Web browser supporting HTML5 and Ajax.
  4. Descragar fichero actualizado de http://sourceforge.net/projects/guacamole/
  5. Descomprimir los archivos.
  6. Copio el archivo guacamole-users.xml a /etc/tomcat5.5/
    Este es el archivo de usuario, hay que editarlo para dar de alta y cambiar claves.
  7. Creo el directorio /var/lib/guacamole
  8. Copio el archcivo guacamole.war al directorio /var/lib/guacamole/
  9. Copio el archivo guacamole.xml al directorio /etc/tomcat5.5/Catalina/localhost/
  10. (Edito el archivo /etc/tomcat5.5/Catalina/localhost/guacamole.xml para cambiar el nombre del hostname y el puerto) no lo edito lo dejo talcual.
  11. Instalo xinetd y x11vnc(este ya lo tenia)
  12. Creo el fichero: /etc/xinetd.d/x11vnc
    Que inicia automaticamente xvnc11 siempre que haya una conexion al puerto 5900 desde el localhost . Las conexiones y errore son logeados en
    /var/log/x11vnc.log
    service x11vnc
    {
    port = 5900
    only_from = localhost
    type = UNLISTED
    socket_type = stream
    protocol = tcp
    wait = no
    user = root
    server = /usr/bin/x11vnc
    server_args = -inetd -display :0 -o /var/log/x11vnc.log -24to32 -scr always -xkb
    disable = no
    }
  13. Reiniciamos xinetd: # /etc/init.d/xinetd restart
  14. Configurar tomcat para acceder via SSL
    • # keytool -genkey -alias tomcat -keyalg RSA
    • ... and specify a password value of "changeit", ok uso esta. Pide taambién passwd para key password que debe ser la isma que la anterior.
    • You will also need to specify the custom password in the server.xml configuration file, as described later.

  15. Reiniciamos el motor java: /etc/init.d/tomcat5.5 restart
  16. Reiniciamos apache: /etc/init.d/apache2 restart
  17. Conectamos a guacamole desde el navegador web en la dirección: http://HOSTNAME:8080/guacamole
  18. ...y NO funciona desde fuera, a ver desde mi pp.net. NO.
  19. OJO ya que apache tiene muchas modificaciones por la puesta en marcha de shellinabox
    • Dual apache2:
      • Backup-01 de la carpeta /etc/apache2/ (copia completa, ocultos, permisos)
      • Reinstalacion/Reconfiguracion de apache 2
      • Backup-02 de la nueva carpeta /etc/apache2/
      • Poner en /etc/apache2/ la config que nos interese y reiniciar apache2

  20. ... ... Ok, de momento lo dejo aqui, a ver si lo retomo proximamanete.


    Y como ya me funciona shellinabox con debian .., esto ya no me corre prisa.


Ref.:

what is guacamole

http://www.techworld.com.au/article/345260/need_desktop_access_over_web_try_some_guacamole?img=27459&ssid=0

http://www.techworld.com.au/article/345260/need_desktop_access_over_web_try_some_guacamole

12 de abril de 2010

trivial_calculator.php


Ante la insistencia de JR que me deje de chorradas con el Perl y que me dedique al php, pues le voy a hacer algo de caso, solo un poco y me estoy remirando esto del php.
Lo cierto es que son dos lenguajes de programación muy similares y desde el primer momento ya se intuye la enorme potencia del php para la programación de páginas web.
Lo peor es que es necesario algo de HTML con su tediosa e interminable lista de tags.

Vamos con mi primer script en php en el que más que la complejidad matemática de los cálculos es para ver como funciona esto de los formularios y la entrada de datos.

trivial_calculator.php
<html>
<body>
<p> <br><b>Trivial calculator php - by pp - ad2010</b>
<br><a href="http://www.misnotaslinux.blogspot.com">www.misnotaslinux.blogspot.com</a><br>
</p>

<form action="trivial_calculator.php" method="post">
<table> <tr><td>Primer numero: </td><td><input type="text" name="n1" value="" /></td></tr>
<tr><td>Segundo numero: </td><td><input type="text" name="n2" value="" /></td></tr>
</table>
<table>
<tr><td><input type="submit" name="suma" value="Sumar"/></td>
<td><input type="submit" name="resta" value="Restar"/></td>
<td><input type="submit" name="multi" value="Multiplicar"/></td>
<td><input type="submit" name="divi" value="Dividir"/></td>
</table>

<?php

print "Resultado: ";
if ($_POST[suma]) { print "$_POST[n1] + $_POST[n2] = "; print $_POST[n1]+$_POST[n2]; }
if ($_POST[resta]) { print "$_POST[n1] - $_POST[n2] = "; print $_POST[n1]-$_POST[n2]; }
if ($_POST[multi]) { print "$_POST[n1] * $_POST[n2] = "; print $_POST[n1]*$_POST[n2]; }
if ($_POST[divi]) { print "$_POST[n1] / $_POST[n2] = "; print $_POST[n1]/$_POST[n2]; }

?>

</body>
</html>

php cURL


cURL es una librería para la transferencia de archivos que soporta varios protocolos (FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS y FILE).

Instalacion de php curl:
Para ver si tenemos instalado curl:

if (function_exists('curl_init')) { print "Ok, curl support
"; }
else { print "BadNews, No curl support
"; }

?>
En mi sistema Debian Lenny tengo instalado php5 pero ...
BadNews, No curl support
Para instalarlo:
# aptitude install php5-curl
# /etc/init.d/apache2 restart
y...
Ok, curl support

(en dos pasitos esta hecho, estas son la cositas que hacen querer a debian)

Manejo de php curl:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,
"http://www.misnotaslinux.blogspot.com");
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$resultado = curl_exec ($ch);

print_r($resultado);

continuará ...
Ref:
cURL básico
cURL avanzado

8 de abril de 2010

Shellinabox over https con apache2 en Debian Lenny


El problema de Firefox 3.6 que no funciona ajaxterm me ha obligado a revisar la instalación del terminal shell over https instaldo en micra.
Y buscando veo una referencia interesante shellinabox over https, que tiene buena pinta aunque ya de entrada tiene algunos errores.

Voy a probarlo ya que es idéntico a la configuración proxy ssl con ajaxterm que tengo actualmente en micra pero redireccionando el tráfico al puerto 4200 de shellinabox. En principio esto debería funcionar sin problemas, aunque habia algun bug con shellinabox y SSL en debian.

La diferencia con los intentos anteriores que hice y que no fucnionaron son:
Vamos con ello:

1) Instalando Shellinbox en Debian Lenny:
# wget http://shellinabox.googlecode.com/files/shellinabox_2.10-1_i386.deb
# dpkg -i shellinabox_2.10-1_i386.deb
2) Apache2 y SSL deben estar instalados y funcionando correctamente.
Redirecconamiento del tráfico en apache2:
/etc/apache2/mods-enabled
ln -s ../mods-available/proxy.conf
ln -s ../mods-available/proxy.load
ln -s ../mods-available/proxy_http.load
3) Editamos el fichero /etc/apache2/sites-available/default-ssl
añadiendo al final el redireccionamiento al puerto 4200 de shellinabox:
<Location /shell>
ProxyPass http://localhost:4200/
Order allow,deny
Allow from all
</Location>


¿¿¿ Solo pone esto en /apache2/sites-available/default-ssl ? ¿¿¿ Y la autentificación e usuarios y el SSL ?, see micra config ajaxterm En fin, sigamos a ver si funciona ...

4) Ahora cambiamos la configuración de shellinabox añadiento la lo resaltado en negrita al archivo /etc/init.d/shellinabox
# Set some default values
SHELLINABOX_DATADIR="${SHELLINABOX_DATADIR:-/var/lib/shellinabox}"
SHELLINABOX_PORT="${SHELLINABOX_PORT:-4200}"
SHELLINABOX_USER="${SHELLINABOX_USER:-shellinabox}"
SHELLINABOX_GROUP="${SHELLINABOX_GROUP:-shellinabox}"
SHELLINABOX_ARGS="--localhost-only --disable-ssl"

5) Reiniciamos apache2 y shellinabox... pudiendo acceder https://localhost/shell/ desde cualquier localización.
# /etc/init.d/apache2 restart
# /etc/init.d/shellinabox restart

RESULTADO:
Desde micra
https://localhost/ me da:
An error occurred during a connection to localhost. Secure Connection Failed
SSL received a record that exceeded the maximum permissible length.
(Error code: ssl_error_rx_record_too_long) The page you are trying to view can not be shown because the authenticity of the received data could not be verified. * Please contact the web site owners to inform them of this problem. Try again
Solucción: Parece un error de la clave, revisar la generación de clave y config de esto.

see: https://www.servertastic.com/support/KB/a36/error-code-ssl-error-rx-record-too-long.aspx

Pruebo a añadir al final del archivo /etc/apache2/sites-available

SetEnvIf Request_URI "^/u" dontlog
ErrorLog /var/log/apache2/error.log
Loglevel warn
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem

ProxyRequests Off

#Quito autenficacion de ajaxterm
#
# AuthUserFile /srv/ajaxterm/.htpasswd
# AuthName EnterPassword
# AuthType Basic
# require valid-user
#
# Order Deny,allow
# Allow from all
#


#cambio lo puertos al de shellinabox

ProxyPass / http://localhost:4200/
ProxyPassReverse / http://localhost:4200/

RESULTADO: mejor!!
Pilla el certificado pero no me deja entrar ...
Forbidden You don't have permission to acces in this server
Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny8 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g Server at localhost Port 443
Pruebo a usar los passwords de ajaxterm descomentado las lineas de /etc/apache2/sites-available,
el añadido al fichero
/etc/apache2/sites-available

SetEnvIf Request_URI "^/u" dontlog
ErrorLog /var/log/apache2/error.log
Loglevel warn
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem

ProxyRequests Off


AuthUserFile /srv/ajaxterm/.htpasswd
AuthName EnterPassword
AuthType Basic
require valid-user

Order Deny,allow
Allow from all


ProxyPass / http://localhost:4200/
ProxyPassReverse / http://localhost:4200/

RESULTADO: mejor!, mucho mejor!!
Me pide las calves para entrar, uso las de jaxterm, entro y ...
http://localhost/
micra login:

estamos dentro!!!
micra login: pp
Password:
Last login: Thu Apr 8 21:39:15 CEST 2010 from 127.0.0.1 on pts/10
Linux micra 2.6.32.3-pp01 #1 Sun Jan 10 00:36:54 CET 2010 i586
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have new mail.
pp@micra:~$
Bingo!!!!, lo tenemos!!!

He comprobado que funciona desde el localhost y desde la red local accediendo desde Firefox 3.6 en https.

Ahora falta la prueba de fuego,
acceder desde un equipo externo ...
...mañana en el curre será un duro día de trabajo!! ;))

Ajaxterm y Mozilla Firefox 3.5

Ultimamente Mozilla Firefox esta realizando muchas actualizaciones, ...?, el caso es que con la actualización 3.6 ha dejado de funciona ajaxterm que me permitia el acceso a una consola via https.

Rebvisando veo que paraece ser un bug con la nueva version Firefox 3.6
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=568372