13 de noviembre de 2010

menu-lst de grub2 (part. 2)


Los ficheros de configuración de grub2 ya no son editables a mano, hay que generarlos con los scripts y/o con #grub-update.


Para ver los S.O. del menu de inicio de grub2:

# grep menuentry /boot/grub/grub.cfg

pp@xubuntu:/boot/grub$ less grub.cfg |grep menuentry

menuentry 'Ubuntu, with Linux 2.6.35-22-generic' --class ubuntu --class gnu-linux --class gnu --class os {
menuentry 'Ubuntu, with Linux 2.6.35-22-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
menuentry "Memory test (memtest86+)" {
menuentry "Memory test (memtest86+, serial console 115200)" {
menuentry "Windows Vista (loader) (on /dev/sda1)" {
menuentry "Windows Recovery Environment (loader) (on /dev/sda2)"{
Ahora se puede seleccionar el S.O. que arrancará por defecto en grub2, recordando que empiezan a numerarse por el 0.

23 de octubre de 2010

tar


tar
[opciones] [archivo de salida] [archivo] ... [archivo] ó [directorio]




actividad opción ejemplo
descomprimir/extraer -x tar -xf paquete.tar
visualizar lo que se realiza -v tar -xvf paquete.tar
archivar/crear el directorio kernel (y subdirect.) -c tar -cvf paquete.tar kernel/
comprimiendo con bzip2 -j tar -cjvf paquete.tar.bz2 kernel/
comprimiendo con lzma -J tar -cJvf paquete.tar.lzma kernel/
comprimiendo con gzip -z tar -czvf paquete.tar.gz kernel/
comprimiendo con lzip --lzip tar -cvf paquete.tar.lz --lzip kernel/
comprimiendo con compress -Z tar -cZvf paquete.tar.Z kernel/

Descomprimir fichero.tar.gz: tar -zxvf fichero.tar.gz
Comprimir fichero.tar.gz: tar -zcvf fichero.tar.gz [fichero ó directorio]

Todo ello lo hace manteniedo lal estructurs de subdirectorios y atributos de los ficheros.

Ref.:
tar
GUÍA RÁPIDA PARA COMPRIMIR/DESCOMPRIMIR ARCHIVOS
Listar un archivo tar:
$ tar -tvf archivo.tar
Listar un archivo tar.gz:
$ tar -ztvf archivo.tar.gz
Listar un archivo tar.bz2:
$ tar -jtvf archivo.tar.bz2

Tamaño de directorio en Linux con du


micra:# du -sh (directorio)

Por ejemplo: para ver el tamaño de los subdirectorios de /
micra:/# du -sh *

Esto me muy util para verificar el tamaño de los directorios y ver si alguno se dispara en tamaño "sin causa aparente".

Ref.: du

21 de octubre de 2010

menu.lst de grub2


Manejar grub siempre ha sido un desafío. Y ahora que ya lo tenía más o menos dominado,... tenemos grub2 que no tiene nada que ver con su antecesor.

Por ejemplo el tan usado menu.lst de grub ya no existe en grub2

Para cambiar en grub2 los parámetros que estaban en menu.lst hay que:

- editar el fichero /etc/defaults/grub
- ejecutar #update-grub para que se actualize grub2

Ref.:
http://www.esdebian.org/wiki/instalar-grub2-debian

18 de octubre de 2010

exoRecompilando el kernel 2.6.35.7 / 2.6.36 en Ubuntu 10.10


Ubuntu10.10 tiene el kernel 2.6.35.7; y esto me hacer pensar que ya hace tiempo que no lo actualizo en mi sobreexplotado servidor micra que todavia está con debian lenny kernel 2.6.32.3 .

Para soluccionarlo pillo mis propios howtos:

Exo-RedPill-Compilación del Kernel 2.6.32.3 para Micra
Exo-Recompilación del Kernel
Recompilar el Kernel al estilo Debian: La Píldora Roja

... y me pongo a ello utilizando el actual fichero de configuración del kernel 2.6.32.3 de micra exoRecompilando en un pentium2800 de doble nucleo con debian-lenny como sistema operativo.


El resultado no es bueno, ya que no termina la recompilación apareciendo errores:
... ... ...
make[1]: se sale del directorio `/usr/src/linux-2.6.35.7'
/usr/bin/make EXTRAVERSION=.7-micra-pp01 ARCH=i386 \
-C Documentation/lguest
make[1]: se ingresa al directorio `/usr/src/linux-2.6.35.7/Documentation/lguest'
cc -m32 -Wall -Wmissing-declarations -Wmissing-prototypes -O3 -I../../include -I../../arch/x86/include -U_FORTIFY_SOURCE lguest.c -o lguest
lguest.c:21:25: error: sys/eventfd.h: No existe el fichero o el directorio
lguest.c: In function 'create_thread':
lguest.c:1026: warning: implicit declaration of function 'eventf
d'
make[1]: *** [lguest] Error 1
make[1]: se sale del directorio `/usr/src/linux-2.6.35.7/Documentation/lguest'
make: *** [debian/stamp/build/kernel] Error 2
micra:~#
Revisando la web veo que es un error ya reportado en el kernel 2.6.35.7:
What's up with Kernel 2.6.35.7? Annoying bugs while compiling...

Y para mi mayor sorpresa, ...ya descrito por yo mismo, con solucción y todo!!!! en:
Exo-RedPill-Compilación del Kernel 2.6.32.3 para Micra

Aplico mi propia solucción editando el fichero:
"lenny:# nano /usr/src/linux-2.6.35.7/Documentation/lguest/Makefile
-Cambiamos- "all: lguest" por "all:"
... y exorecompilando ...
... tarda un poquillo.

... parece que no ha funcionado !!??
Aparaece el mismo error que hace referencia a que kernel package 11.015 no esta actualizado. En lenny es el que se instala pero en squeeze es la versión kernel package 12.036. En los kernel superiores a 2.6.33 el kernel package 11.015 no funciona.

Veo otra solucción que es innactivar las opciones LGUEST de la configuración del kernel:
http://permalink.gmane.org/gmane.linux.debian.user/386867

Cambio el fichero de configuración del kernel:
de:
...
CONFIG_PARAVIRT_GUEST=y
CONFIG_VMI=y
CONFIG_KVM_CLOCK=y
CONFIG_KVM_GUEST=y
CONFIG_LGUEST_GUEST=y
...

a:
...
CONFIG_PARAVIRT_GUEST is not set
CONFIG_VMI=y
CONFIG_KVM_CLOCK=y
CONFIG_KVM_GUEST is not set
CONFIG_LGUEST_GUEST is not set
...

... a exorecompilar ... y
tampoco funciona, sale el mismo error con kernel package 11.015

Más opciones:
( ) recompilar el kernel 2.6.25.7 desde debian squeeze
( ) ó desde Ubuntu 10.10

Vamos con la opción: exoRecompilación con Ubuntu 10.10

1) Instalo Ubuntu10.10 en una partición de 5GB del portatil vaio.
2) Actualizo el sistema, instalo paquetes necesarios.
3) Descargo el kernel... pero si ya ha cambiado!!!! el último estable es el kernel 2.6.36 !!!!!!; bueno pues vamos con este.
4) lo descomprimo
5) Pillo el fichero de configuración del kernel 2.6.32.3 de micra.
6) ... a exorecompilar ...
... y FUNCIONA !!!!!


Ya tenemos el paquete .deb con el kernel, solo falta instalarlo en micra a ver que hace.

micra con este nuevo kernel 2.6.36 NO termina el boot ya que hay problemas con algunos modulos ...lo tengo que revisar ( ).

Con Ubuntu10.10 se puede exorecompilar los últimos kernels y aplicarlos a sistemas debian lenny.

14 de septiembre de 2010

Manejo de claves duplicadas MySQL


Problema: intentar insertar un registro duplicado en un campo que es clave principal, da error.

Solución:
INSERT ... ON DUPLICATE KEY UPDATE ...
(Use UPDATE instead INSERT with duplicated keys)

INSERT IGNORE ...
(The row is not inserted but no duplicate error is issued)

Ref.:
http://mjcarrascosa.com/insertar-o-actualizar-registros-en-mysql/
INSER ON DUPLICATE KEY
INSERT IGNORE

13 de septiembre de 2010

flat-fileSQL


flat-fileSQL script en php que permite crear y usar un fichero .csv como si fuera una base de datos MySQL, permitiendo busquedas y mucahas funcionaleidades SQL.

TRas descargar y descrompimir la ultima version de flat-fileSQL solo se necesita el fichero fSQL.php,

- Para usarlo en nuestros scripts php hay que usar incluir en le código:
requiere_once("fSQL.php");

Interesante para hacer bases de datos portatiles, v.g. en memorias USB que funcionen en maquinas sin MySQL

Ref.:
flatSQL tutorial

5 de septiembre de 2010

Preguntando, input, prompt, con php

En php la forma habitual de preguntar al usuario humano son los formularios, pero en muchos casos se necesita obtener un dató rápido del usuario en modo texto.
Se puede usar fgets(STDIN)
#!/usr/bin/php
<?php
print "\n Teclea algo: ";
$algo = trim(fgets(STDIN));
print "\n has tecleado: $algo\n";
?>

Ref.:
http://www.ehow.com/how_5321606_prompt-line-interface-using-php.html

17 de agosto de 2010

Cortar archivos con split


Pues resulta que en un script php he intentado pasar un archivo de texto a un array con el comando file( ) y el archivo es algo grande ya que tiene unos 19MB y unas 100.000 lineas. De modo que me ha salido un error al ejecutar el script:

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 16 bytes) in /home/pp/globalWebSpider/gws-mantenimiento_spider01/60-z5log-no_mysql_saved-recuperator.php on line 85

Una solucción es cortar el archivo en otros más pequeños:
Para esto esta split:
- Que corta archivos en otros mas pequeños de un tamaño deternimado:

#split -b(tamaño) archivo.grande archivo.
archivos resultantes:
archivo.aa
archivo.ab
archivo.ac
etc...
-Pero en mi caso al ser un archivo de texto es mejor cortarlos en archivitos de un determinano número de lineas, ... digamos 10000 y con la extensión numérica:

#split -d -10000 archivo.grande archivo.
archivos resultantes:
archivo.01
archivo.02
archivo.03
etc...
Ref.: http://linuxmanpages.com/man1/split.1.php

16 de agosto de 2010

Codificar y decodificar caracteres html con php


Los caracteres especiales del código html pueden ser un problema al manejarlos en programación, variables, SQL y por la inyección de código malicioso.

En php estos caraceres se pueden codificar con: htmlspecialchars( )
y luego reponerse con: htmlspecialchars_decode( )
dejando de ser un problema.

Hacking webs con Google Gruyere


Gruyere es una wiki de métodos hacking a paginas web y la posibilidad de probarlos en un sevidor adhod de Google.

http://google-gruyere.appspot.com/

14 de agosto de 2010

Reconocimiento de imagenes en linux

Para el reconocimiento de imagenes he encontrado dos aplicacones interesantes:

# compare de ImageMagick http://www.rpublica.net/imagemagick/index.html
# libpuzzle-php

Decimales en MySQL

DECIMAL(M,D)

M: nº total de digitos
D: nº de decimales

Por ejemplo:
0,123456 DECIMAL(7,6)
123,4567 DECIMAL(7,4)

El maximo que podemos asignar a M y D es 65.
Si hay mas decimales que los asignados trunca el dato.

Ref.: http://dev.mysql.com/doc/refman/5.1/en/numeric-types.html

18 de julio de 2010

activar logs en MySQL


Editar el archivo: /etc/mysql/my.cnf
descomentar la línea: log = /var/log/mysql/mysql.log
reiniciar el servidor mysql: /etc/init.d/mysql restart

Y MySQL ya comienza a logear.
Ojo ya que parece ser un gran devorador de recursos del sistema.

14 de junio de 2010

Clonando micra server


El espectacular rendimiento de mi pico-servidor micra ha hecho que su disco duro se este quedando algo pequeñito. Inicialmente le puse un disco duro de 40GB para probar la instalación del sistema debian lenny lo he ido ampliando y finalmente se ha resultado ser el sistema definitivo. Ha crecido de forma exponencial y ha llegado el momento de ampliar su capacidad a un disco duro de 160GB.

Para este ampliación voy a hacer una copia integra del sistema (hd1) al nuevo disco (hd2)


hd1
(40GB) sistema actual, instalado en micra.
hd2 (160GB) montado en soporte conectado a micra por USB.

Protocolo de copia integra del sistema debian lenny 5.0 a otro disco duro, ... y que arranque!!!

1) Picho hd2 en soprte USB a micra
2) Miro como lo ha reconocido:
# tail /var/log/messages

Esta vez ha sido en /dev/sdb
3) Veamos las partciones de HD2
# parted /dev/sdb
(parted) print

Model: VP2160 (scsi)
Disk /dev/sdb: 160GB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number Start End Size File system Flags
1 0,00B 160GB 160GB fat32
4) Borramos particion existente y creamos partición primaria boot flag linux ext3 y una extendida linux-swap de 150MB en HD2
Uso la aplicación gráfica gparted
Verificar que /dev/sdb NO esta montada.
(parted) print
Model: VP2160 (scsi)
Disk /dev/sdb: 160GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos


Number Start End Size Type File system Flags
1 32,3kB 160GB 160GB primary ext3 boot
2 160GB 160GB 156MB extended
5 160GB 160GB 156MB logical linux-swap
5) Shutdow. Quitamos todos dispositivos memoria USB Pinchamos solo USB con BT-4.

6) Reboot. Entramos en la bios de micra, redireccionamos el boot al USB para arrancar desde BT-4 liveUSB. Reinicamos.

7) Ok, estamos en BT-4.
!!BT4 NO ha detectado el disco duro de micra, hd1!! ???
Pruebo con BT-3 ... y SI lo reconoce ???
8) pinchamos HD2 en USB, ... lo reconoce.

9) Montamos los discos:
# mount /dev/hda1 /mnt/hd1
# mount /dev/sdb1 /mnt/hd2
10) copia integra de hd1 a hd2 de todos los subdirectorios y archivos con sus permisos y atributos:
# cd /mnt/hd1
# cp -av * /mnt/hd2
... paciencia que esto lleva su tiempo... (en este caso unas 9h para 28GB!!!)
11) Instalación de grub en hd2
# grub-install --root-directory=/mnt/hd2 sdb
problema: como BT3 esta basado es slackware no tiene grub sino lilo !!!
ok, arranco con hd1 e instalo grub ...
uuhy. esto no ha funcionado, !!!

Pruebo a copiar los primeros 446 bites del disco hd1 al hd2, el bootloader. # dd if=/dev/hd1 of=/dev/hd2 bs=446 count=1

Tampoco funciona !!!
... ???
11bis) Instalando grub, despues de mirar media internet y probar todo lo que he pillado, esto es lo único que me ha funcionado:
  • Arranco micra con el live usb BT4
  • Pincho el disco HD2 de 160GB con el zócalo usb
  • ejecuto grub y tecleo:
  • #grub
  • >find /boot/grub/stage1
  • (hd1,0)
  • root (hd1,0)
  • setup (hd1)
  • Con esto ya he instalado grub en HD2
  • por fin!!!

k) Apoteosis final:
  • Paro el sistema.
  • Quito el usb de BT4, cambio la bios para que arranque del disco duro.
  • ...y ...yuuupi, funciona
  • un clon perfecto de micra pero con 160GB.

13 de junio de 2010

Linux MBR backup and restore


MBR backup:

dd if=/dev/hdx of=MBR-backup.file bs=512 count=1

MBR restore:

dd if=MBR-backup.file of=/dev/hdx bs=512 count=1

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

23 de marzo de 2010

Desmontar un dispositivo ocupado


Al intentar desmontar una memoria USB conectada a micra ...

micra:/mnt# umount /dev/sda1
umount: /mnt/USB_512MB: dispositivo ocupado

Lo primero es mirar quien ó que esta accediendo al dispositivo con:

#fuser -m /dev/...
#lsof +D /mnt/...

un ejemplo:
micra:/mnt# umount /dev/sda1
umount: /mnt/USB_512MB: dispositivo ocupado

micra:/mnt# fuser /dev/sda1
(nada)

micra:/mnt# lsof +D /mnt/USB_512MB/
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
mysqld 2723 mysql 26u REG 8,1 53514240 18222 /mnt/USB_512MB/
mysqld 2723 mysql 27u REG 8,1 245271880 18224 /mnt/USB_512MB/
mysqld 2723 mysql 28u REG 8,1 4108288 18218 /mnt/USB_512MB/
mysqld 2723 mysql 29u REG 8,1 7609892 18219 /mnt/USB_512MB/

(Ok, es mysql que esta accediendo a una bdd que tengo en el usb)

micra:/mnt# /etc/init.d/mysql stop
Stopping MySQL database server: mysqld.

micra:/mnt# lsof +D /mnt/USB_512MB/
(nada de nada, ok)

micra:/mnt# micra:/mnt# umount /dev/sda1


y el dispositivo está desmontado.

Ref.:
http://wlubuntu.blogspot.com/2009/12/como-desmontar-un-dispositivo-ocupado.html
http://www.linuxparatodos.net/portal/article.php?story=desmontar-dispositivo-ocupado

14 de marzo de 2010

Instalar OpenOffice 3.2 en debian 5.0.4 lenny


La version de OpenOffice en los respositorios ofciales debian-lenny-5.0.4 es OpenOffice-2.4, cuando la actual es OpenOffice-3.2.

Para instalar la última OpenOffice 3.2 en debian micra :

  1. micra:~# wget http://download.services.openoffice.org/files/localized/es/3.2.0/OOo_3.2.0_LinuxIntel_install_es_deb.tar.gz
  2. micra:~# tar zxvf OOo_3.2.0_LinuxIntel_install_es_deb.tar.gz
  3. micra:~# aptitude remove openoffice.org-base openoffice.org-core
  4. dpkg -iR ./DEBS

28 de febrero de 2010

Publicar código HTML en BLogger


Herramienta de traducción de código HTML a código de publicación:

parse HTML de Blogcrowds

También funciona para publicar en el blog código de otros lenguajes con caracteres especiales ... como Perl.

Por ejemplo:

#!/usr/bin/perl
#############################################################
# Extrae n caracteres del inicio y final de una cadena
#############################################################
#bypp:)2010

use strict;

print "Escribe algo: n";
my $cadena = <STDIN>;

print "nº de caracteres a cortar: n";
my $n =<STDIN>;

my $ini = substr($cadena, 0, $n);

my $fin = substr($cadena, (((length $cadena) - 1) - $n));

print "$ini...$finn";

... tomado de SUBSTR: Extraer una subcadena de una cadena ... que lo publiqué como buenamente pude.

trivial KML point .KML file for GoogleEarth with Perl

Hay librerias en CPAN para crear archivos KML y XML, pero al final he hecho uno propio y muy sencillito, trivial ...

n.d.a: Lo subo en imagen ya que no hay manera que pille los caracteres especiales del código

Crea un ficehro .KML que se puede abrir con googleEarth y funciona!!.

Ref.:
KML: Guía del usuario de Google Earth


Update: He usado la utilidad parse HTML de Blogcrowds para hacer visible el código a HTML:

#!/usr/bin/perl
#####################################################
# very simple .KML creator
# by pp:)2010
# for www.misnotaslinux.blogspto.com
#####################################################

use strict;

print "ppTrivialPerlScript that make .KML geo.point for google earthnn";

print "Nombre del punto: ";
my $nombre = <STDIN>;
chop $nombre;

my $filekml = $nombre."-point";
$filekml =~ s/ /_/g;

print "nLongitud: ";
my $longitud = <STDIN>;
chop $longitud;

print "nLatitud: ";
my $latitud = <STDIN>;
chop $latitud;

print "n";

#kml maker

open ( KML, ">$filekml.kml" );

print KML "<kml xmlns="http://earth.google.com/kml/2.0">n";
print KML "<Folder>n";
print KML "<Placemark>n";
print KML "<description>nombre: $nombre<br/>longitud: $longitud<br/>latitud: $latitud<br/></description>n";
print KML "<name>$nombre</name>n";
print KML "<Point>n";
print KML "<altitudeMode>clampToGround</altitudeMode>n";
print KML "<coordinates>$longitud,$latitud</coordinates>n";
print KML "</Point>n";
print KML "</Placemark>n";
print KML "</Folder>n";
print KML "</kml>n";

close (KML);

25 de febrero de 2010

making KML files con perl

Simple Placemark:

  Simple placemark
  Attached to the ground. Intelligently places itself
     at the height of the underlying terrain.
  
    -122.0822035425683,37.42228990140251,0
  
Descripción:

XML script from http://www.perlmonks.org/index.pl?node_id=31565
#!/bin/perl -w
 use strict;
 use XML::Writer;
 use IO;
 my $doc = new IO::File(">doc.xml");
 my $writer = new XML::Writer(OUTPUT => $doc);
 $writer->startTag("doc", class => "simple");           # tag + att
  $writer->dataElement( 'title', "Simple XML Document");# text elt
  $writer->startTag( "section");
   $writer->dataElement( 'title', "Introduction",      
                         no => 1, type => "intro");
   $writer->startTag( "para");
    $writer->characters( "a text with");
    $writer->dataElement( 'bold', "bold");
    $writer->characters( " words.");
   $writer->endTag( "para");
  $writer->endTag();                        # close section      
 $writer->endTag();                         # close doc
 $writer->end();                            # check that the doc
                                            # has only one element
 $doc->close(); # fixed (was $output->close(); ) as suggested by the p
+ost below

Ref.:
Tutorial de KML
Tutorial de KML para Google Earth

Intalar Google-earth en debian lenny


Al puro estilo debian...
  1. micra:# aptitude install googleearth-package

  2. micra:# make-googleearth-package
    --2020-02-25 21:40:49-- http://dl.google.com/earth/client/current/GoogleEarthLinux.bin
    Resolviendo dl.google.com... 74.125.79.93, 74.125.79.136, 74.125.79.91
    Connecting to dl.google.com|74.125.79.93|:80... conectado.
    Petición HTTP enviada, esperando respuesta... 200 OK
    Longitud: 25989559 (25M) [application/octet-stream]
    Saving to: `GoogleEarthLinux.bin'
    100%[=========>] 25.989.559 103GB/s in 4m 9s

    2010-02-25 21:45:02 (102 KB/s) - `GoogleEarthLinux.bin' saved [25989559/25989559]

    Google Earth for GNU/Linux 5.1.3533.1731
    Unrecognized Google Earth version (use --force to build anyway)

  3. micra:# make-googleearth-package --force
    ...(Hagamos caso al oráculo) ...
    [lenny upkpacking and building package ... ... ...] and finally

    dpkg-deb: construyendo el paquete `googleearth' en `./googleearth_5.1.3533.1731+0.5.4-1_i386.deb'.
    Success!

  4. # dpkg -i googleearth_5.1.3533.1731+0.5.4-1_i386.deb
    Seleccionando el paquete googleearth previamente no seleccionado.
    (Leyendo la base de datos ...
    97445 ficheros y directorios instalados actualmente.)
    Desempaquetando googleearth (de googleearth_5.1.3533.1731+0.5.4-1_i386.deb) ...
    Configurando googleearth (5.1.3533.1731+0.5.4-1) ...
    Procesando disparadores para menu ...
    micra:#

  5. micra# googleearth ... y aqui esta!!!

  6. Recomienda intalar openlGL, ...
...pero esto será otra historia.

Ref.:
Debian Way or The Hard Way: Installing Google Earth

fit-PC2. El hermanito mayor de micra


Hace ya unos meses que está en el mercado, hay muchas versiones nuevas y muy mejoradas con interesantes opciones, más potencia y conectividad.
Tiene muy buena pinta y nada que ver con su hermanito menor fitPC-Slim, mi servidor micra.
Lo peor de estos micro equipos es que te acostumbras silencio absoluto con el trabajan.

CompuLab Fit-PC2 NetTop

fit-PC2

24 de febrero de 2010

Traceroute con Perl


Utilizaremos el módulo Net::Traceroute::PurePerl de CPAN.
Un ejemplo:
#!/usr/bin/perl

use Net::Traceroute::PurePerl;

my $t = new Net::Traceroute::PurePerl(
backend => 'PurePerl', # this optional
host => 'www.google.com',
debug => 0,
max_ttl => 15,
query_timeout => 2,
packetlen => 40,
protocol => 'udp', # Or icmp
);

$t->traceroute;
$t->pretty_print;

#asignamos hop,ip,time a una variable tridimensional
for (my $n=1; $n<=15; $n++) {
my $ip = $t->hop_query_host($n, 0);
my $ms = $t->hop_query_time($n, 0);
$trace[$n][0] = $n;
$trace[$n][1] = $ip;
$trace[$n][2] = $ms;
}

#Imprimimos resultados
for (my $n=1; $n<=$maxnhops; $n++) {
for (my $m=0; $m<=2; $m++) {
print "$trace[$n][$m]\t";
}
print "\n";
}

Imagino la cara de Larry Wall al ver este cutreScript ...!!!!

22 de febrero de 2010

PostgreSQL:Busquedas en campos tipo inet


Si queremos hacer una búsqueda de direcciones IP en un campo PostgreSQL del tipo INET, no podemos hacerlo directamente con LIKE ...

psql=>SELECT * FROM tabla WHERE ip LIKE '192.168.1.%';
ERROR: la sintaxis de entrada no es válida para tipo inet: «192.168.1.%»

...ya que inet no es texto y no lo admite.

SOLUCCIÓN: Utilizar la función HOST(inet) que transforma el campo tipo INET en texto:

psql=>SELECT * FROM tabla WHERE HOST(ip) LIKE '192.168.1.%';

Ref.:
How do I perform a wildcard "like" select on type inet with Postgresql 7.4?
9.10. Network Address Type Functions

21 de febrero de 2010

SUBSTR: Extraer una subcadena de una cadena


Extraer el principio y final de una cadena de caracteres usando substr y length.
Ejemplo: Corta los n caracteres iniciales y finales de una cadena.
#!/usr/bin/perl
#############################################################
# Extrae n caracteres del inicio y final de una cadena
#############################################################
#bypp:)2010

use strict;

print "Escribe algo: \n";
my $cadena =
STDIN; #faltan simbolos mayor y menor

print "nº de caracteres a cortar: \n";
my $n = STDIN;
#faltan simbolos mayor y menor

my $ini = substr($cadena, 0, $n);

my $fin = substr($cadena, (((length $cadena) - 1) - $n));

print "$ini\...$fin\n";
Ref.: http://www.tutorialspoint.com/perl/perl_substr.htm

19 de febrero de 2010

Cambiar wallpapaer de LXDE


Hay que hacerlo desde PCMan file manager:
  • Abrir PCMan
  • menu Editar/preferencias/
  • solapa Escritorio:
  • y aqui cambiar el wallpaper y la ruta de la imagen.
Ref.: {SOLVED}Change wallpaper in LXDE?