miércoles, 12 de septiembre de 2012

Servidor de django con nginx y apache wsgi en debian

Antes que nada, el post original esta acá: http://buala.net/techy/servidor-de-django-con-nginx-y-apache-wsgi-en-debian/  lo copie en mi blog para tenerlo como copia de seguridad ya que me ha sido muy útil. Si el link aun esta activo por favor entren en el post original, el cual por cierto no es mio.

Como siempre, empezaremos con algo de lo que yo llamo “filosofía de funcionamiento” , lo cual resulta útil para entender lo que se está montando.
Suponemos que hemos terminado de desarrollar nuestra aplicación, testeada solo en el entorno de desarrollo ofrecido por django. Lo primero que tenemos que entender, es que necesitamos un servidor web capaz de comunicarse con django, y para este fin ha nacido wsgi.
Web Server Gateway Interface (WSGI)  es un estándar de comunicación que utilizan los servidores web para poder interpretar el código de los frameworks de Python. wsgi tiene una “limitación”, y es que no puede servir el contenido estático (js, imágenes, css,..) solamente se encarga del contenido dinámico. Llegados a este punto vemos que existe una necesidad , la de poder dividir una petición en dos partes, una para que la interprete el servidor web (parte estática) , y otra para pasárselo a WSGI (el contenido dinámico).
Apache es capaz de hacer esto sin mayor complicación, pero desde la web de django también recomiendan que existan dos servidores, uno para el contenido estático y otro para el dinámico.
Instalar dos apaches sería un suicidio en cuanto a recursos, aquí es donde aparece nginx para salvarnos la papeleta.
Nginx es un servidor web con capacidades de proxy inverso, ligero y de alto rendimiento. En el vamos a delegar los trabajos de proxy (Enviar contenido estático a Apache) y de servir contenidos estáticos. Consiguiendo de esta manera quitarle muchísima carga a Apache.
El diagrama de lo que queremos montar sería este:

Una vez explicado esto, ale, al turrón –>

Decidiendo estructura

Lo primero a decidir es donde queremos alojar los proyectos. Se desaconseja encarecidamente colocar los archivos de python dentro de la raiz de nuestro servidor web. Nosotros hemos decidido crear el directorio /var/django para utilizarlo como carpeta de almacenaje de los proyectos. Para esta guía vamos a crear el proyecto “ceia” , que quedaría en /var/django/ceia.
Aparte de los ficheros normales del proyecto, vamos a crear 2 carpetas, una contendrá el fichero de configuración para apache , y la otra albergará los logs tanto de nginx como de apache. Nótese que en nuestro ejemplo, las carpetas con el contenido estático(js,css,imagenes ) están en /var/django/ceia/website/media/
# mkdir -p  /var/django/ceia/b_apache
# mkdir -p /var/django/ceia/b_logs

Configurar Apache con mod_wsgi para Django

Empezamos instalando apache2 y el módulo wsgi
# sudo aptitude install apache2 libapache2-mod-wsgi
Con la instalación por defecto apache está escuchando en el puerto 80 , debemos cambiarlo ya que este es el puerto en el que vamos a poner a escuchar a Nginx. Para ello editamos el fichero  /etc/apache2/ports.conf: y lo dejamos como a continuación: (no entramos en el 443 por simplificar )
# nano  /etc/apache2/ports.conf:
Listen 127.0.0.1:8080
#Listen 80
NameVirtualHost   *:8080
Hemos puesto 127.0.0.1 porque queremos que apache solo acepte peticiones de localhost, pero durante la fase de prueba, esta opción se puede omitir y dejar solo el listen 8080 .
Ahora vamos a crear el fichero de configuración del virtual host de apache para nuestro proyecto, basándonos en el fichero por defecto :
# cp /etc/apache2/sites-available/default  /etc/apache2/sites-available/ceia
Editamos el nuevo fichero, y le modificamos o agregamos los siguientes campos
VirtualHost *:8080
 ServerName tifa.buala.net:8080
 ErrorLog /var/django/ceia/b_logs/error.log
 CustomLog /var/django/ceia/b_logs/access.log combined
 #...
 #Alias /imagenes /var/django/ceia/website/media/imagenes
 #Alias /css /var/django/ceia/website/media/css
 #Alias /js /var/django/ceia/website/media/js
 WSGIDaemonProcess ceia processes=2 maximum-requests=500 threads=10
 WSGIProcessGroup ceia
 WSGIScriptAlias / /var/django/ceia/b_apache/django.wsgi
 
A este fichero le faltan bastantes cosas , pero todas las que nos atañen están aquí, procedemos a explicarlas:
ErrorLog y CustomLog apuntan a nuestra carpeta ceia, así conseguimos un sistema de logs bien ordenadito :-)
#Alias Estos son innecesarios, pero por si en la fase de despliegue queremos que apache interprete el contenido estático, para comprobar que todo va correctamente, ahí las tenemos
WSGIDaemonProcess Datos de configuración del demonio :
user=name nombre del usuario con el que se correrá el proceso
processes=num Número de procesos que se generan
threads=num Número de hilos, por defecto 15maximum-requests=nnn Número de peticiones que acepta el demonio antes de reiniciarse, sirve para evitar leacks de memoria
WSGIProcessGroup El grupo con el que se va a correr el proceso, recomendable un usuario sin privilegios de sistema, por seguridad.
WSGIScriptAlias la ruta hasta el fichero de configuración con los datos de wsgi, ahora lo crearemos
Todas las opciones de configuración del wsgi las podéis ver aquí
Ahora vamos a crear el fichero de configuración de wsgi que hemos mencionado antes.
# nano /var/django/ceia/b_apache/django.wsgi
import os, sys
apache_configuration= os.path.dirname(__file__)
project = os.path.dirname(apache_configuration)
workspace = os.path.dirname(project)
sys.path.append(workspace)
sys.path.append('/var/django')
os.environ['DJANGO_SETTINGS_MODULE'] = 'ceia.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
Los parámetros que tenéis que editar son:
sys.path.append(‘/var/django’) sustituir /var/django/ por la ruta hasta la carpeta padre del proyecto
os.environ['DJANGO_SETTINGS_MODULE'] = ‘ceia.settings’ sustituir ceia.settings por nombredepoyecto.ficheroSettings
Con esto ya hemos terminado con la parte de apache, pero no sin  antes habilitar el nuevo vhost y darle un reinicio para comprobar que todo está correcto
# a2ensite ceia
#/etc/init.d/apache2 restart

Instalar y configurar nginx 1.0


Nginx se encuentra en los repositorios de debian, pero desafortunadamente la versión es muy vieja. Si alguien tiene a su abuela en el hospital , y no tiene tiempo para hacer las cosas como dios manda, puede hacer un “aptitude install nginx”, pero para el resto, vamos a bajarnos y compilarnos la versión 1.0, salidita del horno ayer mismo.
Instalamos las herramientas para poder compilar el código fuente de nginx
# aptitude install libpcre3-dev build-essential libssl-dev
Nos descargamos el código fuente , lo descomprimimos en /opt/ y entramos en la carpeta resultante.
# cd /opt/
# wget http://nginx.org/download/nginx-1.0.0.tar.gz
# tar -zxvf nginx-1.0.0.tar.gz
# cd /opt/nginx-1.0.0
Con el código descargado, procedemos a compilarlo e instalarlo.
# ./configure
# make
# make install
Creamos un usuario para que lo utilice nginx como dueño del proceso
# adduser –system –no-create-home –disabled-login –disabled-password –group nginx
Para hacer que se autoarranque el demonio solo , nos descargamos un script para copiarlo en init.d, y configuramos los rc. más info
wget -O init-deb.sh http://library.linode.com/assets/658-init-deb.sh
# mv init-deb.sh /etc/init.d/nginx
# chmod +x /etc/init.d/nginx
# /usr/sbin/update-rc.d -f nginx defaults
# /etc/init.d/nginx start
Quizas se necesite modificar el script de inicio para que la variable DAEMON apunte a  /usr/local/nginx/sbin/nginx    en vez de a  /opt/nginx/sbin/nginx
Como la versión compilada no lo hace por nosotros, vamos a crear un sistema como el de apache de sites-aviable/enabled , para ello creamos las dos carpetas necesarias.
# mkdir /usr/local/nginx/conf/sites-aviable/
# mkdir  /usr/local/nginx/conf/sites-enabled/
Editamos el fichero de configuración de nginx, y lo dejamos parecido a este :
nano  /usr/local/nginx/conf/nginx.conf
user  nginx;
worker_processes  1;
error_log  logs/error.log;
pid        logs/nginx.pid;
events {
       worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    tcp_nopush     on;
    keepalive_timeout  65;
    gzip  on;
    include   /usr/local/nginx/conf/sites-enabled/*;
}
Atención al usuario , lo hemos cambiado por el nuevo que acabamos de crear , y a la línea include , donde le decimos donde van a estar las definiciones de los servidores.En este tuto no entraremos en detalles sobre la configuración y blindado de nginx. mas info
Vamos a crear la configuración del servidor ceia :
nano /usr/local/nginx/conf/sites-aviable/ceia
server {
    listen       80;
    server_name  tifa.buala.net;
    access_log  /var/django/ceia/b_logs/nginx_access.log;
    error_log  /var/django/ceia/b_logs/nginx_error.log;
    location / {
        proxy_pass  http://127.0.0.1:8080;
        include    /usr/local/nginx/conf/proxy.conf;
    }
    location ~ /(js/|css/|imagenes/|media).*  {
    root /var/django/ceia/website/media;
    }
    error_page   500 502  503 504  /50x.html;
    location =  /50x.html {
        root    html;
        }
}
Analicemos un poco el fichero:
access_log y error_log Dictaminan donde se guardarán los ficheros, nosotros los dejamos bien ordenaditos cada uno en su aplicación
location / Explica al servidor que la raíz del dominio va a ser enviada al proxy, utilizando un fichero de configuración que ahora crearemos.
location ~ /(js/|css/|imagenes/|media).* Esto le explica que las carpetas /css/ , /js/ , /imagenes/ , van a ser dirigidas a /var/django/ceia/website/media , que es donde cuelgan esas carpetas en el proyecto
Ahora creamos el fichero mencionado en el texto,  /usr/local/nginx/conf/proxy.conf con el siguiente contenido:
proxy_redirect              off;
 proxy_set_header            Host $host;
 proxy_set_header            X-Real-IP $remote_addr;
 proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;
 client_max_body_size        10m;
 client_body_buffer_size     128k;
 proxy_connect_timeout       90;
 proxy_send_timeout          90;
 proxy_read_timeout          90;
 proxy_buffer_size           4k;
 proxy_buffers               4 32k;
 proxy_busy_buffers_size     64k;
 proxy_temp_file_write_size  64k;
De momento copiad el fichero tal cual, no hacen falta sustituciones en las cadenas $host, $….
Para habilitar nuestro nuevo servidor de nginx, tan solo nos queda habilitar nuestro nuevo servidor creando el link a sites-enabled , y reiniciarlo:
# ln -s /usr/local/nginx/conf/sites-aviable/ceia /usr/local/nginx/conf/sites-enabled/
# /etc/init.d/nginx restart
Si fallase, probad primero stop, y luego start, el script no tira muy bien :-(
Para facilitar el acceso a  los ficheros de configuración generamos el siguiente link
ln -s /usr/local/nginx/conf/ /etc/nginx
Con todo esto ya tenemos prácticamente todo listo y funcionando, solo nos queda habilitar el contenido estático para la parte de administración de django.Este punto puede diferir dependiendo de las diferentes versiones.
# ln -s /usr/share/python-support/python-django/django/contrib/admin/media/ /var/django/ceia/website/media/media
Y bualá, ya tenemos todo funcionando de manera segura y eficiente.

miércoles, 18 de julio de 2012

Debian squeeze: Montar cualquier tipo de particion con permisos de escritura (ej: fat32)


Solo seguir los siguientes pasos:
Abre una pestaña de terminal y ejecuta:
# blkid

En otra ejecuta lo siguiente (EDITOR: puede ser vim, nano, o lo que te plazca):
# EDITOR /etc/fstab

El archivo tiene una lista de particiones con la siguiente sintaxis:
     
En primer lugar colocaremos UUID=XXX-XXX, donde XXX-XXX es el número del UUID que corresponde a la partición de acuerdo a la información recabada por blkid (el número va sin comillas). Para reconocer cuál de todas las particiones listadas es la que buscas, fíjate en la propiedad TYPE cuyo valor debe ser vfat (ej. TYPE="vfat"). En segundo lugar especificamos el lugar donde queremos que se monte nuestra partición. Por lo general se utiliza alguna carpeta dentro de /media, por ejemplo, /media/DiscoFat. Esto es para asegurarse de que nuestra partición aparezca en el menú Lugares del navegador de archivos (Nautilus). Pero eventualmente se puede especificar cualquier carpeta (vacía), incluso algo como /home/usuario/disco. (El directorio tiene que estar previamente creado; si no lo está lo crearemos. Ver paso 3. Evita que el nombre la carpeta contenga espacios).

En tercer lugar va el tipo de partición que estamos montando. En este caso es vfat por ser una partición FAT32.

En cuarto lugar van las opciones. Aquí va la información crítica. Cada parámetro va separado del siguiente por una coma. Las distintas opciones están detalladas en el manual de Linux. Puedes acceder a él tecleando en la consola man mount 8. Pero para efectos de este tutorial utilizaremos las siguientes opciones rw,users,utf8,umask=000. El parámetro rw es para dar permiso de escritura (por defecto es ro, sólo lectura); users es para que cualquier usuario pueda montar y desmontar la partición (por defecto es nouser, sólo root puede montar la partición); utf8 sirve, en este caso, para que Linux respete la codificación que utiliza Windows para nombrar los archivos; finalmente umask=000 para que los permisos de escritura se apliquen a todos los usuarios automáticamente aun cuando la partición sea montada como root. (Sin este último parámetro sólo podrás escribir en la partición con permisos de superusuario o bien desmontando y volviendo a montar la partición en tu sesión de usuario)

Finalmente agregamos 0 al final de la línea para cada una de las dos últimas categorías, es decir, 0   0.

Ejemplo de línea:

UUID=5673-8190                 /media/DiscoFat vfat                       rw,users,utf8,umask=000 0 0
#Sistema de archivos (UUID) Punto de montaje Formato de partición         Opciones      Dump Pass

Guardar y desde ahora, cada vez que reiniciemos podremos acceder a nuestra partición FAT32 con permisos de escritura.

Fuente: http://yosoybubuntu.blogspot.com/2009/07/montar-una-particion-fat32-con-permisos.html

miércoles, 4 de julio de 2012

Apache, php, mysql, phpmyadmin




1)Instalamos Apache2

apt-get install apache2

2)Comprobamos que este Funcionando
Escribiendo en la barra de direcciones del navegador lo siguiente


http://localhost/

Nos debe decir lo siguiente

It works!
This is the default web page for this server.

The web server software is running but no content has been added, yet.It's work




3)Instalamos php5

apt-get install php5

4)Reiniciamos Apache

/etc/init.d/apache2 restart

5)Instalamos mysql

apt-get install mysql-server

Recuerden colocar una contraceña que no se les olvide xD

6)Reiniciamos apache nuevamente

/etc/init.d/apache2 restart

7)Instalamos phpmyadmin

apt-get install phpmyadmin


A)En ete paso hay que indica a phpmyadmin que va a trabajar bajo apache2 tecleamos la barra espaciadora para marcar "*"
B)Preguntara si deseamos configurar la base de datos para trabajar con "bdconfig-common le decimos que si"

8)Reiniciamos apache2 Nuevamente

/etc/init.d/apache2 restart

9)Para acceder en phpmyadmin escribimos en la barra de direcciones


Configuracion:
En apache es httpd.conf.
En apache2 es apache.conf.
//en apache2 eliminar carpeta default. 
Abrir puerto en ports.conf (80) y en sites-availables, en default, dentro en RedirectMatch ^/$ /carpetadondeestélaweb

viernes, 29 de junio de 2012

Debian Squeeze - Efectos de escritorio

Si no utilizas compiz, quieres agregarle transparencia a algunas aplicaciones (guake por ejemplo) y tienes los drivers de video instalados:
Lanzador de aplicaciones: gconf-editor, van a apps -> metacity -> general
marcan la opcion: compositing_manager.

Si utilizas compiz:
En el settings manager -> Opacity, Brightness and Saturation -> Window specific settings -> Windows -> New -> Windows:
(type=Menu | PopupMenu | DropdownMenu | Dialog | ModalDialog )
Value:
valor entre 0 (completamente transparente) y 100 (opaco).
otro con class=Nautilus para ventanas de nautilus.

Agregar opacidad al metacity:
gconf-editor
apps - gwd
metacity_theme_active_opacity y metacity_theme_shade_opacity = 0.5
o el valor que se te antoje.

martes, 29 de mayo de 2012

Algo sobre iptables y /etc/rc.local

cat /etc/rc.local 


#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

#Configurar el IP de la interfaz eth0
  ifconfig eth0 192.168.0.1 netmask 255.255.255.0


   iptables -F
   iptables -X
   iptables -Z
   iptables -t nat -F

  # EXTERNAL -> external network interface
  # INTERNAL -> internal network interface
  EXTERNAL=wlan0
  INTERNAL=eth0
  echo 1 > /proc/sys/net/ipv4/ip_forward
  echo "Setting up NAT (Network Address Translation)..."
  # by default, nothing is forwarded.
  iptables -P FORWARD DROP
  # Allow all connections OUT and only related ones IN
  iptables -A FORWARD -i $EXTERNAL -o $INTERNAL -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  iptables -A FORWARD -i $INTERNAL -o $EXTERNAL -j ACCEPT
  # enable MASQUERADING
  iptables -t nat -A POSTROUTING -o $EXTERNAL -j MASQUERADE
  

# para proxy transparente, leer sobre squid transparente.
iptables -t nat -A PREROUTING -i $INTERNAL -p tcp --dport 80 -j REDIRECT --to-port 3128
exit 0

Linux: Comprimir/Descomprimir archivos en consola

Acá les dejo una función muy popular que pueden agregar a su .bashrc:

# ex – archive extractor
# usage: ex
ex (){
    if [ -f $1 ] ; then
        case $1 in
        *.tar.bz2) tar xjf $1 ;;
        *.tar.gz) tar xzf $1 ;;
        *.bz2) bunzip2 $1 ;;
        *.rar) unrar x $1 ;;
        *.gz) gunzip $1 ;;
        *.tar) tar xf $1 ;;
        *.tbz2) tar xjf $1 ;;
        *.tgz) tar xzf $1 ;;
        *.zip) unzip $1 ;;
        *.Z) uncompress $1;;
        *.7z) 7z x $1 ;;
        *) echo "‘$1′ cannot be extracted via ex()" ;;
            esac
        else
            echo "‘$1′ is not a valid file"
    fi
}

Y para más información este interesante artículo.
La url del artículo original está en el final. La función no recuerdo de donde la saqué.


En Linux hay diversas herramientas para empaquetar y comprimir archivos, tomando en cuenta que empaquetar es juntar dos o más archivos en un solo archivo (paquete) y comprimir es tomar este archivo-paquete y comprimirlo a continuación te muestro un resumen de las más comunes, de acuerdo a la extensión que comunmente se acostumbra ponerles. 

  • Tar
.tar
Empaquetar
Desempaquetar
Ver el contenido (sin extraer)
  • Tar con gzip
.tar.gz - .tar.z - .tgz
Empaquetar y comprimir
Desempaquetar y descomprimir
Ver el contenido (sin extraer)
  • Gzip
.gz
Comprimir
(El archivo lo comprime y lo renombra como "archivo.gz")
Descomprimir
(El archivo lo descomprime y lo deja como "archivo"
Nota: gzip solo comprime archivos, no directorios
  • Bzip2
.bz2
Comprimir

(El archivo lo comprime y lo renombra como "archivo.bz2")
Descomprimir

(El archivo lo descomprime y lo deja como "archivo")
Nota: bzip2 solo comprime archivos, no directorios
  • Tar con bzip2
.tar.bz2
Comprimir
Descomprimir
 (versiones recientes de tar)
Ver contenido
  • Zip
.zip
Comprimir
Descomprimir
Ver contenido
  • Lha
.lha 
Comprimir
Descomprimir
Ver contenido
  • Zoo
.zoo
Comprimir
Descomprimir
Ver contenido
  • Rar

.rar
Comprimir
Descomprimir
Ver contenido

Fuente: http://www.linuxtotal.com.mx/index.php?cont=info_admon_004

lunes, 28 de mayo de 2012

Configurar wireless/wifi en linux


#Iniciar la interface
ifconfig wlan0 up
#talvez sea necesario parar otras interfaces.

#Buscar redes:
iwlist wlan0 scanning

#Conectarse a una red especifica
iwconfig wlan0 essid "CICFI"

miércoles, 23 de mayo de 2012

Solución al problema Gtk-WARNING **: cannot open display: :0.0


Este error es muy tipico en escritorios KDE o en un escritorio Gnome que tenga aplicaciones de KDE instaladas como,  por ejemplo, KDM:

#Gtk-WARNING **: cannot open display: :0.0

El error se debe a que para KDE solo algunos usuarios tienen permiso para utilizar el servicio X. Para solucionarlo puedes ejecutar el siguiente comando en una terminal con tu usuario de X:

~$ xhost +

En respuesta obtendremos:
access control disabled, clients can connect from any host

Como es evidente, este comando desactiva el control de acceso a X por lo que ahora cualquier host puede utlizarlo.
Ahora ya puedes ejecutar como root programas que utilicen X ! :D
Si se desea el poder tener que evitar este paso solo hay que editar el archivo .bashrc que se encuentra en el directorio /home/usuario/ :

#nano /home/usuario/.bashrc

Agregar la siguiente linea al final del archivo:

export XAUTHORITY=$HOME/.Xauthority

Con esto podremos solucionar este problema definitivamente.

lunes, 9 de abril de 2012

Navegar en paginas bloquedas en debian squeeze



Primero por las dudas, como root, copiamos el resolv.conf
# cp /etc/resolv.conf /etc/resolv.conf.bk
Luego lo editamos:
# nano /etc/resolv.conf
Agregamos un nameserver, por ejemplo el 8.8.8.8, si es necesario comantamos los que ya existen:
nameserver 8.8.8.8
Listo! Ahora podras entrar en pag que son redireccionadas por el servidor de DNS!

Para obtener el ip de una pag bloqueada:

nslookup rapidshare.com

luego usamos directamente el ip en la url. Ejemplo:
rapidshare.com/algo_que_quiero_bajar.rar
80.239.151.6/algo_que_quiero_bajar.rar


viernes, 30 de marzo de 2012

Configurar gdm3 debian squeeze (modificar tema)

La forma más sencilla es
copiar /usr/share/applications/gnome-appearance-properties.desktop
en /usr/share/gdm/autostart/LoginWindow/

# cp /usr/share/applications/gnome-appearance-properties.desktop /usr/share/gdm/autostart/LoginWindow/

Tal vez algunos no sepan, pero tenemos un usuario Debian-gdm (y es este usuario el que ejecuta el programa gdm), y al copiar /usr/share/applications/gnome-appearance-properties.desktop en /usr/share/gdm/autostart/LoginWindow/ lo que estamos haciendo es obligando al usuario Debian-gdm a ejecutar /usr/share/applications/gnome-appearance-properties.desktop.

Esto hace que a cada vez que inicies sesion aparezca una ventana de configuracion de temas para que configures tu gdm3.


Para reiniciar tu gdm de forma rápida, puedes presionar [ctrl][alt][F1] y ejecutar:

# /etc/init.d/gdm3 restart

Ten en cuanta que esto hará que reinicie tu gdm lo cual cerrará todos tus programas en X.

Si quieres que esta ventana deje de aparecer elimina el archivo: /usr/share/gdm/autostart/LoginWindow/gnome-appearance-properties.desktop con el comando:

# rm /usr/share/gdm/autostart/LoginWindow/gnome-appearance-properties.desktop

martes, 27 de marzo de 2012

Java 7 en debian squeeze

Descargan el jdk7 de la pag de oracle:
http://www.oracle.com/technetwork/java/javase/downloads/java-se-jdk-7-download-432154.html

Lo descomprimen con el siguiente comando:

# tar -xvzf jdk-7-linux-x64.tar.gz

Lo mueven a /usr/lib/jvm para que este con las otras versiones de java que tengas instalado:
# mv jdk1.7.0 /usr/lib/jvm/


Ejecutam el update-alternatives:
# update-alternatives --config java

Importante: Se fijan en el numero de la ultima alternativa. Entonces el numero que ponen al final del siguiente comando es el numero de la ultima alternativa + 1. Si no apareció nada, quiere decir que no tienen java instalado, no se desesperen, en vez de poner el valor de la ultima alternativa + 1 pongan un 0.  En mi caso el numero de la ultima alternativa era 2 ya que eran 3 alternativas y empieza de 0:
# update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0/bin/java 3

Cambian a la ultima
# update-alternatives --config java

Si todo funciono al ejecutar:
# java -version
Deberian ver algo asi:
    java version "1.7.0"
    Java(TM) SE Runtime Environment (build 1.7.0-b147)
    Java HotSpot(TM) 64-Bit Server VM (build 21.0-b17, mixed mode)

Se fijan si tienen javac instalado y cual es la version:
# javac -version

El mismo procedimiento anterior respecto al numero:
# sudo update-alternatives --config javac

En mi caso yo no tenia el javac instalado:
# sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0/bin/javac 0
# javac -version

Y todo deberia estar funcionando (:

Teclado numerico

Hoy tuve un problema con el teclado numérico.. no se como ni porque, pero en cierto momento el teclado numérico dejo de funcionar.. reinicié la pc y nada, seguía con el mismo problema.. note que el teclado numérico estaba controlando el puntero del mouse; investigando di con la solucion:

Preference -> Keyboard -> Mouse Keys :
[ ] pointer can be controlled using the keypad
esa opcion estaba marcada, la desmarqué y listo!

lunes, 26 de marzo de 2012

Verificador JavaScript en Gedit (JSLint)

Pasos a seguir:
Instala rhino:
    # apt-get install rhino
Descargar JSLint de:
    http://web.archive.org/web/20070627170950/http://www.jslint.com/rhino/jslint.js


Si no tienes activado el plugin "external tools" ve a Edit->Preferences->Plugins.
Agrega una nueva external tool
Tools->Manage External Tools:
    Command: rhino /home/USUARIO/.gnome2/gedit/plugins/jslint.js $GEDIT_CURRENT_DOCUMENT_PATH
    Shortcut Key: Control j
    Save: Current document
    Input: Nothing
    Ouput: Display in bottom pane


miércoles, 14 de marzo de 2012

Problema con Xampp

Tuve unos problemas a tener en cuenta con xampp:

  1. En primer lugar quiero exponer el problema que mas tiempo me tomo solucionar. Mi xampp estaba bien instalado y supuestamente iniciaba bien.. pero en cualquier navegador que probaba http://localhost no cargaba la pag de inicio de xampp ni ninguna otra. Sospechando de algun problema intente tambien con 127.0.0 sin obtener mejores resultados. Por intuicion decidi verificar mi /etc/network/interfaces, su contenido era el siguiente:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo eth0
iface eth0 inet dhcp #added_line
iface lo inet loopback

          la linea que dice "iface eth0 inet dhcp #added_line" la habia agregado recientemente para la configuracion automatica de wireless. La comente y volvi a reiniciar la red. Listo! Xampp funcionando!
  1. Sin razon aparente xampp simplemente no funcionaba. Investigando un poco di con que aparentemente si extraes con la interfaz grafica ocurre una pequeña diferencia de permisos asi que lo mejor es hacer lo que dice en la pag de xampp; ejecutar el comando: tar xvfz xampp-linux-1.7.7.tar.gz -C /opt
  2. No podia ejecutar /opt/lampp/lampp start, esto se debia a que xampp en realidad corre sobre librerias 32bits y mi pc actual es de 64bits. Lo solucione instalando unas librerias de compatibilidad: ia32 libs es solo buscarlas en synaptic.
  3. No corria el apache, si tienen algun problema con xampp deben fijarse en los mensajes que imprime, en mi caso no podia iniciar el apache porque ya estaba iniciado por algun otro proceso, solucion: service apache2 stop, luego /opt/lampp/lampp start.