Archivo de la etiqueta: Linux

Ubuntu 12.04 LTS and Nvidia GeForce 7025

If you have the GeForce 7025 integrated card then you have problems with Ubuntu 12.04 LTS. This is how to get a usable setup with 3D acceleration.

Boot to the lastest kernel you have and update your system:

sudo apt-get update && sudo apt-get upgrade

Then restart the machine and boot using the latest kernel.

If you have already installed some drivers:

sudo apt-get purge nvidia-common nvidia-*

Add Ubuntu X updates and install latest driver:

sudo add-apt-repository ppa:ubuntu-x-swat/x-updates
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install nvidia-current

Once installed, delete the X Window Server configuration file. Don’t worry, it will be regenerated. This is important.

sudo rm /etc/X11/xorg.conf

Finally, restart the computer and get into the BIOS. Find the Chipset configuration and lower the Shared Memory to 128MB (in my case from auto to 128MB), yep, not optimal, not pretty, but otherwise your graphics will be slow as hell.

Now boot to the latest kernel. That’s it.

EDIT: If you get in the dark after a kernel upgrade, you need to rebuild the Nvidia kernel modules installed:

  1. Reboot in the latest kernel. If you have no video at all you can CTRL+ALT+F1 to get into a terminal.
  2. Make sure you have the kernel headers for your current version:
    sudo apt-get install linux-headers-`uname -r`
  3. Reconfigure nvidia-current package:
    sudo dpkg-reconfigure nvidia-current
  4. Reboot:
    sudo reboot

Hope it helps.

Etiquetado , , ,

Cómo configurar Ubuntu para disco de estado sólido (SSD)

HDD-vs-SSD

El siguiente tutorial tiene por objetivo configurar Ubuntu 12.04 LTS después de ser instalado en o bien utilizar un disco de estado sólido. La SSDs son muy diferentes de los HDs, no tienen discos magnéticos rotatorios y son muchísimo más rápido (no me lo creía hasta que instalé uno en mi computadora). Existe muchos tutoriales de éste tipo, pero son algo antiguos y realizan acciones que o ya no son necesarias y que según mi criterio no valen la pena.

Tomar en cuenta que éste artículo aplica para sistemas de archivos ext4. En mi caso mi SSD es un OCZ Technology 256GB Agility 4 Series SATA 6Gb/s 2.5-Inch.

Se realizarán las siguientes acciones:

  1. Habilitar TRIM.
  2. Desactivar registro de acceso de los archivos.
  3. Ajustar el planificador de disco.

1) Habilitar TRIM

TRIM es una instrucción que le permite al sistema operativo comunicarle a un disco de estado sólido (SSD) qué bloques de datos ya no están en uso. En sistemas de archivos tradicionales el disco duro nunca sabe qué información es borrada, pues el sistema de archivo la marca como espacio disponible en su estructurada de datos en RAM. Al poder ser notificado de bloques borrados, el firmware del SSD puede balancear la escritura de información en otras celdas de forma que pueda prolongar la vida útil del mismo. TRIM está disponible en Linux desde la versión 2.6.33 pero hay que habilitarla manualmente para cada partición en la que se desee utilizar. Para ello se requiere agregar la opción discard en las opciones de montaje de una partición en el archivo fstab.

En mi caso, las particiones de root y home quedan de la siguiente forma:

$ cat /etc/fstab

# / was on /dev/sda3 during installation
UUID=[MI-UUID] / ext4 discard,errors=remount-ro 0 1
# /home was on /dev/sda4 during installation
UUID=[MI-UUID] /home ext4 discard,defaults 0 2

2) Desactivar atime

Access Time (o atime) es un campo definido en el sistema de archivos que indica la fecha del último acceso de un archivo. Si, suena genial, pero es terrible. Es decir, para cada acceso de lectura a un archivo… hagamos una escritura a disco :S Es ridículo. Más sobre el problema de tener activado la actualización del atime (por defecto es relatime, parecido) pueden leer este link, este y este.

En el caso particular de un SSD es interesante desactivar la actualización del atime porque prolonga la vida del SSD al no tener que estar escribiendo información irrelevante para cada acceso de lectura. En el caso de los HDs es interesante desactivar la actualización del atime porque elimina el overhead importante de tener que realizar una escritura por cada lectura. Tiene consecuencias desactivar la actualización del atime? Si, programas como mutt pueden no funcionar… y, ya, este es el único ejemplo que conozco. Yo no uso mutt, por lo que no hay problema para mi.

Para desactivar la actualización del atime, tanto para carpetas como para archivos se debe agregar la opción noatime a las opciones de montado de cada una de las particiones en las cuales queremos desactivarlo. En mi caso:

$ cat /etc/fstab

# / was on /dev/sda3 during installation
UUID=[MI-UUID] / ext4 noatime,discard,errors=remount-ro 0 1
# /home was on /dev/sda4 during installation
UUID=[MI-UUID] /home ext4 noatime,discard,defaults 0 2

3) Ajustar el planificador de disco

El planificador de disco es el componente del sistema operativo que se encarga de calendarizar y ordenar las solicitudes de escritura y acceso a disco. Existen diferentes criterios para organizar la escritura a un disco. Por defecto, Linux utiliza el planificador llamado CFQ (Completely Fair Queuing). El CFQ, entre otros aspectos, asigna un margen de tiempo para el cual cada proceso puede enviar solicitudes de escritura a disco. En disco magnéticos tradicionales, esto permite que el rendimiento de acceso mejore. En el caso de un SSD, dado que el acceso es de tiempo prácticamente fijo, similar al RAM, este planificador no tiene sentido. Vamos a reemplazarlo por el planificador noop, o bien deadline. Para información de cada planificador disponible puede visitar este link.

Para verificar qué planificador está siendo utilizado para el disco sda (o cualquier disco) se puede ejecutar el comando:

$ cat /sys/block/sda/queue/scheduler
noop deadline [cfq]

Se mostrará el planificador en uso entre backets. Para cambiar el planificador en tiempo de ejecución se puede ejecutar el comando:

sudo sh -c "echo deadline > /sys/block/sda/queue/scheduler"

Para hacer este cambio permanente se edita el archivo /etc/rc.local y se agrega la una instrucción antes del exit 0 de la siguiente forma:

echo noop > /sys/block/sda/queue/scheduler
exit 0

Espero les sirva.

Etiquetado , , , ,

Steam for Linux on Optimus enabled computer running Ubuntu 12.04 64bits

steam-linux

Install Bumblebee

First step is to make Optimus work. We will use a Software called Bumblebee for that.

1) Install Bumblebee and the nVidia propietary driver

sudo add-apt-repository ppa:bumblebee/stable
sudo add-apt-repository ppa:ubuntu-x-swat/x-updates
sudo apt-get update
sudo apt-get install bumblebee bumblebee-nvidia

Commands explained:

  • Add Bumblebee PPA (Personal Package Archive) to Ubuntu so you can download Bumblebee.
  • Add the drivers updates PPA so you can download the lastest nVidia driver.
  • Update the repository index with the two newly added sources.
  • Install Bumblebee and the package to support nVidia Optimus using the proprietary nVidia driver.

2) Reboot

Seriously.

3) Test Bumblebee

glxspheres

You should get something like this:

OpenGL Renderer: Mesa DRI Intel(R) Sandybridge Mobile
58.335930 frames/sec - 56.737059 Mpixels/sec
57.184303 frames/sec - 55.616995 Mpixels/sec

That is, you are rendering some graphics using the low power video card. Now:

optirun glxspheres

You should get something like this:

OpenGL Renderer: GeForce GT 525M/PCIe/SSE2
108.236036 frames/sec - 105.269502 Mpixels/sec
111.096688 frames/sec - 108.051750 Mpixels/sec
115.719165 frames/sec - 112.547535 Mpixels/sec

That is, you are now rendering some graphics using the high power video card.

Install Primus

The problem with optirun is the use of VirtualGL. VirtualGL has a huge overhead and thus impact on the performance. For a more technical description check this link: http://www.webupd8.org/2012/11/primus-better-performance-and-less.html

There is another alternative: Primus. Primus runs on top of Bumblebee and improves performance a lot.

1) Install Primus

sudo add-apt-repository ppa:zhurikhin/primus
sudo apt-get update
sudo apt-get install primus

Commands explained:

  • Add Primus PPA (Personal Package Archive) to Ubuntu so you can download it.
  • Update the repository index with the newly added sources.
  • Install Primus.

2) Test Primus

vblank_mode=0 primusrun glxspheres

You should get something like this:

OpenGL Renderer: GeForce GT 525M/PCIe/SSE2
214.447849 frames/sec - 208.570262 Mpixels/sec
220.159208 frames/sec - 214.125085 Mpixels/sec
220.226968 frames/sec - 214.190987 Mpixels/sec

Yeah. That’s a huge performance boost.

(Optional) Install nVidia experimental drivers 310

This are supposed to even double the performance of the nVidia card.

1) Install new driver

sudo apt-get install nvidia-experimental-310 nvidia-settings-experimental-310

2) Configure Bumblebee and Primus

Just follow the instructions here:

http://www.webupd8.org/2012/12/use-nvidia-experimental-drivers-310.html

When finished, RESTART. Seriously, you need to restart the X Window server.

3) Test new driver

vblank_mode=0 primusrun glxspheres

You should get something like this:

OpenGL Renderer: GeForce GT 525M/PCIe/SSE2
272.052255 frames/sec - 264.595847 Mpixels/sec
270.377649 frames/sec - 262.967139 Mpixels/sec
270.206138 frames/sec - 262.800328 Mpixels/sec

Yeah. That’s another huge performance boost.

Install Steam

1) Install Downloader

wget http://media.steampowered.com/client/installer/steam.deb
sudo apt-get install gdebi-core
sudo gdebi steam.deb

Commands explained:

  • Download oficial Steam downloader package.
  • Install GDebi to handle dependencies of local Debian packages.
  • Install the Steam downloader.

2) Run Steam

Well, do that. Steam will download and install the real Steam client in the
folder ~/.local/share/Steam.

3) Temporaly fix bug #312 “Failed to load steamui.so”

steam-error

This seem to happen on every 64bits OS. Full bug report here:

https://github.com/ValveSoftware/steam-for-linux/issues/321

Solution:

sudo nano /etc/ld.so.conf.d/steam.conf

Add next two lines to file:

/usr/lib32
/usr/lib/i386-linux-gnu/mesa

Then execute:

sudo ldconfig

Now you should be able to run Steam. Login with your account, confirm the new computer, etc, etc. Close Steam: Steam > Exit.

Install Flash for Steam

  1. Make sure you have libxt6:i386 installed.
  2. Go to your Home folder, unhide hidden files (Ctrl-H) and go to .local/share/Steam/ubuntu12_32/.
  3. Create a folder called “plugins”.
  4. Download Flash player plugin for Linux 32bits from:
    http://get.adobe.com/flashplayer/otherversions/
  5. Select the “.tar.gz” download. Open the downloaded file and extract file called libflashplayer.so to the plugins folder created before.

This will make Flash movies in the store work, but slow as hell in some situations.

In commands:

sudo apt-get install libxt6:i386
mkdir -p ~/.local/share/Steam/ubuntu12_32/plugins
wget -qO- https://get.adobe.com/de/flashplayer/completion/?installer=Flash_Player_11.2_for_other_Linux_%28.tar.gz%29_32-bit | awk -F\' '/location.href/{print $2}'| sed s/http:/https:/ | wget -i- -qO- | tar zxvC ~/.local/share/Steam/ubuntu12_32/plugins libflashplayer.so

(Thanks to user Kano from the Steam forums and Alessio Gaeta for those commands).

Test that videos are working. Again close Steam: Steam > Exit.

(Optional) Move Steam library to another partition/HD

If like me you have a hard drive or partition specific for Steam or multimedia, you can move your Steam installation and games to that drive. To do so:

Move the library and installation folder

mv ~/.local/share/Steam /media/<your-device>/Steam

In my case:

mv ~/.local/share/Steam /media/Black/GNU-Linux/Steam
cd ~/.local/share/
ln -s /media/<your-device>/Steam/ .

Now try restarting Steam.

(Optinal) Configure NTFS partition

If you want to have the Steam library on a NTFS partition make sure that the volume is being mounted with your uid and gid AND files needs to be executable by you or your group, if not, Steam will not even start, and if starts, some games will not work.

If you are getting the dialog that Steam cannot find the library and you have an NTFS partition this should be the main cause.

Note: If setting the execution bit for all the files is too much for you, you can configure the NTFS partition to allow POSIX permissions like ext2/3/4. Is much more advanced (not that much), for more information about this option see:

For removable devices

To configure those settings to ONLY that drive and partition, install the utility udisks-glue and configure it:

sudo apt-get install udisks-glue
nano ~/.udisks-glue.conf

And put:

filter steam {
    optical = false
    partition_table = false
    usage = filesystem
    type = ntfs
    uuid = 40DC5EC613CFD8EB
}

match steam {
    automount = true
    automount_options = { 'dmask=000', 'fmask=000' }
}

Change the uuid token with the UUID of your drive. To know it type once is mounted:

sudo blkid

Finally make udisks-glue to start when the user logs in:

nano ~/.config/autostart/udisks-glue.desktop

And put:

[Desktop Entry]
Type=Application
Name=udisks-glue
Exec=udisks-glue
Comment=udisks-glue is a daemon that can perform user-configurable actions when a certain udisks event is detected
X-GNOME-Autostart-enabled=true

Note: Thas was tested on a NTFS USB 3.0 attached 7200rpm/32MB 3Gbps 1TB drive. My laptop has a 256GB internal SSD.

For static devices

Just edit the file /etc/fstab like this:

UUID=40DC5EC613CFD8EB /media/Black ntfs-3g defaults,uid=1000,gid=1000,dmask=000,fmask=000 0 0

Change the UUID and the mount point. To know them type once is mounted:

sudo blkid

Run Steam games using Primus

As you may have deducted, when you run Steam you’re running it with the low power graphics card. You can launch Steam with your high power graphic card using primusrun:

primusrun steam

This is only useful if you’re planning to use the Big Picture Mode. If not, don’t, is not necessary at all. What is absoluty necessary is to run some games with your high power nVidia graphics card. To do so, do the following.

(Relatively official instructions from http://steamcommunity.com/app/221410/discussions/6/846939854395110175/)

1) Add the OPTIMUS_PREFIX variable to your environment

sudo sh -c 'echo OPTIMUS_PREFIX=\"primusrun\" >> /etc/environment'

2) Logout and login from you session

Seriously. Desktop session, not Steam session. Steam is closed.

3) Configure each game you want

For each game you want to launch using you high powered nVidia card do:

  1. Select a game from the Library page of the Steam client, right-click, and
    select Properties.
  2. Click the SET LAUNCH OPTIONS button and specify $OPTIMUS_PREFIX %command%
    for the command line.
  3. Save your changes.

Post created using Nested: http://nestededitor.sourceforge.net/

Etiquetado , , , ,

Heredar grupo con setgid

Muchas veces nos interesa que todos los archivos nuevos en una carpeta hereden el grupo al que pertenece la carpeta. Son muchos los casos, los más comunes son que se tiene, por ejemplo, un servidor web, y se desea que todos los archivos que vas creando (p.e, instalando módulos de Drupal) estén accesibles para el usuario del web server, claro, sin tener que estar haciendo un chgrp recursivo a cada rato. Otra es si se tiene un volumen o carpeta compartida, cuando un usuario crea un archivo en dicha carpeta por defecto el archivo tiene el dueño y el grupo mapeados al usuario que creó el archivo, y no al grupo donde se encuentra, por ende no es visible a los demás usuarios que usan la carpeta.

Esto es muy fácil de solucionar, solo hay que activar el bit/flag setgid (similar al bit a r-w-x) a la carpeta (ojo, carpeta nada más, en archivos significa otra cosa) para que los nuevos archivos dentro de la misma hereden el grupo de la carpeta. Como vimos en un post anterior, podemos poner dicho bit de forma recursiva a todas las carpetas dentro de una carpeta:

find /ruta/al/directorio -type d -exec chmod g+s '{}' \;

Claro, para que eso tenga sentido lo mejor sería primero ponerle a todos los archivos el grupo que deseamos que hereden:

chgrp -R grupo /ruta/al/directorio

Saludos

Etiquetado , , ,

Cambiar permisos de carpetas y archivos de forma recursiva

Básicamente escribo esta entrada para intentar acordarme cuando deseo hacerlo 😛

Poner todos los subfolder de un folder a 755:

find . -type d -exec chmod 755 {} \;

Todos los archivos a 644:

find . -type f -exec chmod 644 {} \;

Establecer solo los archivos que terminen con .php a 644:

find . -name \*\.php -exec chmod 644 {} \;

Etiquetado , , ,

Videotutorial de VCS

Hice un pequeño videotutorial que explica cómo configurar un entorno para utilizar un sistema de control de versiones con Software Libre para la Comunidad de Software Libre del ITCR. Les recomiendo que lo vean directamente en Vimeo, donde está en resolución 1440×900, si no tienen buena conexión apaguen el HD.

Se utiliza Subversion, Eclipse Galileo y Subclipse.

Espero que les guste!

Etiquetado , , , , , ,

Instalación de MoinMoin tipo granja en Debian Lenny como WSGI

Esta es una bitácora de la instalación de MoinMoin en mi servidor Debian Lenny. Primero que nada, tengo configurado mi APT con APT-Pinning para poder instalar paquetes del Testing sin hacer el upgrade, cómo hacer esto está fuera del objetivo de este artículo, tal vez luego escriba sobre eso.

También, asumimos que tenemos Apache2 instalado y Python (en mi caso ambos son del repositorio estable, Python 2.5.2).

En este caso instalaremos el MoinMoin del testing (1.9.1-1) porque la del estable es muy vieja (1.7.1). Además, instalaremos MoinMoin como WSGI. Escribo este artículo por la falta de documentación simple para este entorno, pues tuve que tomar elementos de muchas documentaciones.

Primer lo que necesitamos es instalar MoinMoin (como root):

aptitude install python-moinmoin/testing

El /testing es por el APT-Pinning. Es importante usar aptitude aquí porque este puede resolver los upgrades de las dependencias acorde al repositorio de testing.

Una vez terminado, verificamos que tenemos el mod de Apache WSGI:

aptitude install libapache2-mod-wsgi

Ahora, creamos la instancia de MoinMoin:

mkdir -p /var/www/moin/nombrewiki1

mkdir -p /var/lib/moin/nombrewiki1

Llenamos los archivos de la instancia:

cp -r /usr/share/moin/server/moin.wsgi /var/www/moin/nombrewiki1
cp -r /usr/share/moin/data /usr/share/moin/underlay /var/lib/moin/nombrewiki1

Asignamos los permisos adecuados:

chown -R www-data: /var/www/nombrewiki1 /var/lib/nombrewiki1

Listo, con eso tenemos los archivos de la primera instancia en el lugar correcto. Ahora necesitamos configurar a la granja:

Agregamos nuestro sitio al archivos de sitios:

nano /etc/moin/farmconfig.py

Buscamos la sección:

wikis = [

Y agregamos una línea con nuestra wiki, en mi caso, dado que no quiero crear una regla en el DNS estoy poniendo esta regla, dado mi dominio cjenkins.net :

(“nombrewiki1″, r”^http://www.cjenkins.net/nombrewiki1/.*$”),

En dicho archivo aparecen otros ejemplos si quieren correrlo como un subdominio. En todo caso, lo más importante ahora es crear un archivo de configuración de la instancia:

cp /etc/moin/mywiki.py /etc/moin/nombrewiki1.py

Es muy importante que el archivo de configuración del sitio tenga el nombre que hemos puesto desde el inicio a la instancia y debe ser uniforme en todo lugar. El archivo mywiki.py es un template. Editamos el archivo de configuración de la instancia:

nano /etc/moin/nombrewiki1.py

Y lo adaptamos, por lo menos, para que contenga estas reglas:

sitename = u’Nombre legible del sitio’ # [Unicode]
interwikiname = u’NombreWiki1′ # [Unicode]
data_dir = ‘/var/lib/moin/nombrewiki1/data/’
data_underlay_dir = ‘/var/lib/moin/nombrewiki1/underlay’
superuser = [u”nombresuperusuario”, ]

Una vez listo la instancia configuramos el apache. De nuevo, pueden hacerlo un subdominio agregando un <virtualhost> en la carpeta de sites-avalaible, en mi caso, deseo agregarlo al sitio ya establecido:

Editamos el archivo del sitio actual/principal del apache:

nano /etc/apache2/sites-available/root # En mi caso, normalmente es default o algo por el estilo

Y agregamos estas cláusulas entre los tags de <virtualhost>. Está fuera alcance de este artículo explicar los archivos de configuración de Apache.

# Moinmoin settings
Alias /moin_static191/applets/FCKeditor/ “/usr/share/fckeditor/”
Alias /moin_static191/ “/usr/share/moin/htdocs/”
WSGIScriptAlias /
nombrewiki1 /var/www/moin/nombrewiki1/moin.wsgi

Guardamos y recargamos el servidor Apache:

invoke-rc.d apache2 reload

Listo, ahora en http://www.dominio.com/nombrewiki1/ está disponible la instancia del Wiki. Pueden configurarlo en:

http://www.dominio.com/nombrewiki1/LanguageSetup

Basado en el super usuario que definieron en el archivo de configuración de la instancia.

Etiquetado , , , ,

ShellEd plugin para Eclipse

Hay veces en que tenemos que crear shell scripts para realizar distintas tareas en nuestros proyectos en Eclipse. Yo los suelo utilizar mucho para automatizar tareas o muchas muchas cosas. Normalmente editaba estos archivos de forma externa con gedit hasta que encontré ShellEd:

http://sourceforge.net/projects/shelled/

ShellEd es un excelente editor de shell scripts para Eclipse. Ofrece no sólo resaltado de sintaxis, pero además ofrece integración de manuales de los comandos (man pages) con el asistente de contenido. Es decir, permite que al presionar Ctrl+Espacio sobre un comando pueda visualizar la información del mismo. Puede ver un screenshot del ShellEd funcionando sobre Eclipse Galileo:

ShellEd

Para instalar ShellEd deben descargarse el archivador desde la página oficial (shelled_1_0_4.zip), luego:

  1. Salir de Eclipse.
  2. Extraer el archivo shelled_1_0_4.zip .
  3. Al extraer el archivo se crearán dos carpetas: features/ y plugins/
  4. Copiar todos los archivos de la carpeta plugins/ en la carpeta dropins/ del directorio de instalación de Galileo.
  5. Iniciar Eclipse.

Espero les guste! Saludos!

Etiquetado , , , , , ,

El Kernel Linux sobrepasa los 10 millones de líneas

Antes de leer: Kernel.

Leyendo un informe de IBM sobre los avances en el último release del Kernel Linux[1], el 2.6.28, cuya primera versión fue liberada a finales del año pasado, leo con admiración que es la primera vez que el Kernel sobrepasa los 10 millones de líneas de código fuente (y no por poco).

Kernel Lines

Kernel Lines

Gráfica de comparación de versiones del Kernel Linux.

Además, se dice que el sólo el changelog, o registro de cambios, es tan grande que mide casi 6MB (lo cual, corroboré aquí,  5.7MB, 152 868 líneas, 5 982 085 caracteres).

Este release, 2.6.28, será el Kernel por defecto de la próxima versión de Ubuntu, la 9.04, Jaunty Jackalope, programada para aparecer en el mes de abril.

[1] Bueno, ahora no es el último, ya hay uno nuevo :P. El documento en el sitio de IBM fue escrito el 24 de marzo, en relación al Kernel 2.6.28, sin embargo, el 23 de marzo se publicó una nueva versión, la 2.6.29. Vamos rápido 😀

Etiquetado ,

Abrir DVD en formato ISO

NOTA: Este post es antiguo y aplicaba a Totem con Xine backend. Durante la transición a GStreamer hubo que instalar el paquete totem-xine. Ahora, a la salida del 10.04, ver un ISO DVD es tan simple como (usando el GStreamer por defecto):

totem NombreArchivo.iso

<POST ANTIGUO>

Muchos de nosotros tenemos películas o DVD’s en formato ISO. Estuve buscando la forma de poder ver estas películas en Ubuntu sin la necesidad de tener que quemarlas en un DVD o tener que montarlo y seleccionar los archivos de video que deseo ver manualmente o aún más complicado montarlo como si fuera un DVD-ROM. Bueno, la solución en bien simple:

totem dvd:/direccion/del/archivo &

Por ejemplo:

totem dvd://home/havok/ISOs/El_Orfanato.iso &

Totem es el programa con el que veo los DVD’s. El primer argumento es la ruta del archivo ISO con el prefijo dvd:/ y el & es para que me libere la consola donde he escrito el comando y pueda cerrarla una vez el programa se haya abierto sin cerrar el programa también.

Abrir DVD en ISO

Abrir DVD en ISO

Espero les haya servido.

Saludos!

Etiquetado , , , ,