viernes, 26 de septiembre de 2014

Instalación de un Servidor Web Nginx

Instalación de Servidor Web con Nginx
Se debe instalar un servidor web ya que el sera quien recibirá las peticiones por la ip publica y no por la ip del contenedor LXC.
# aptitude install nginx

Una vez instalado se debe crear una configuración dom0 que resuelva las peticiones en la ruta:
# nano /etc/nginx/sites-available/juju-gui

y se pega el siguiente código y luego se guarda y se sale para restaurar el servicio web:

server {
listen  80;
server_name jujugui.canaima.net.ve;

access_log  /var/log/nginx/jujugui-net.access.log;
error_log   /var/log/nginx/jujugui-net.error.log;

location / {
    proxy_pass       http://10.0.3.180;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}


error_page   500 502 503 504  /50x.html;
location = /50x.html {
        root   /var/www/nginx-default;
}
}

Se realiza un enlace simbólico
Se debe realizar un enlace simbólico por cada archivo configurado 

# ln -s /etc/nginx/sites-available/juju-gui /etc/nginx/sites-enabled/juju-gui
# service nginx restart

# ln -s /etc/nginx/sites-available/juju-wiki /etc/nginx/sites-enabled/juju-wiki
# service nginx restart

7.- Instalacion de openssl
# aptitude install openssl

Crear una carpeta donde guardaran los archivos
# mkdir /etc/nginx/ssl2
# cd /etc/nginx/ssl2

Generar la Llave con openssl
# openssl genrsa -des3 -out ser.key 4096
Generating RSA private key, 4096 bit long modulus
.....................................................++
.......................++
e is 65537 (0x10001)
Enter pass phrase for ser.key:
Verifying - Enter pass phrase for ser.key:

Crear una petición de firmado del certificado CRS
# openssl req -new -key ser.key -out ser.csr
Enter pass phrase for ser.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:VE
State or Province Name (full name) [Some-State]:Caracas
Locality Name (eg, city) []:Distrito Capital
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MMMM
Organizational Unit Name (eg, section) []:juju
Common Name (eg, YOUR name) []:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
NOTA: NO COLOCAR ESTA CLAVE PASSWORD

Firmar la petición previamente elaborada
# openssl x509 -req -days 1825 -in ser.csr -signkey ser.key -out ser.crt
Signature ok
subject=/C=ve/ST=Caracas/L=Distrito Capital/O=MMMM/OU=juju
Getting Private key
Enter pass phrase for ser.key:

NOTA: COLOCAR ESTA CLAVE PASSWORD LA MISMA DEL INICIO

# ls
ser.crt  ser.csr  ser.key


Crear una versión de la llave que no requiera password
# openssl rsa -in ser.key -out ser.key.insegura
Enter pass phrase for ser.key:
writing RSA key
NOTA: COLOCAR ESTA CLAVE PASSWORD LA MISMA DEL INICIO

Renombrar la llave sin password
# mv ser.key ser.key.seguro
# mv ser.key.insegura ser.key

Y tenemos cuatro archivos
#ls
ser.crt  ser.csr  ser.key  ser.key.seguro

¿Qué archivos usaremos?
Solo usaremos el certificado (ser.crt) y la llave (ser.key)

¿Quien usará la llave y el certificado?
Pues en este caso apache2 y nginx usaran la llave y el certificado. ¿Y pueden usar los mismos? pues si,tanto apache2 y nginx pueden usar la misma llave y el mismo certificado.

Configuración de nginx en el contenedor dom0
Nginx en /etc/ngix/site-availables contiene los archivos de los sitios disponibles, en este caso están configurados como proxy_pass como por ejemplo

# cd /etc/nginx/sites-available
# ls
default  juju-gui
# nano juju-gui

Normalmente un archivo proxy_pass es para responder a las peticiones del puerto 80 (http) y las redirige a una maquina virtual y se ven algo así:
server {
        listen  80;
        server_name jujugui.canaima.net.ve;

        access_log  /var/log/nginx/jujugui-net.access.log;
        error_log   /var/log/nginx/jujugui-net.error.log;

        location / {
            proxy_pass       http://10.0.3.180;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }


        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
                root   /var/www/nginx-default;
        }
}
Esto quiere decir que todas las peticiones hacia el puerto 80 (http) y sean con el dominio jujugui.canaima.net.ve, serán redirigidas a la maquinas virtual cuya IP sea la especificada en el campo proxy_pass (http://192.168.1.x ; http://10.0.3.208 en el caso de la ip que tiene el LXC de juju-gui).

¿Ahora cómo hacer para que el proxy_pass también responda a las peticiones del puerto 443 (https) para así aumentar la seguridad?
En este caso solo debemos agregar algunas cosas al archivo de configuración del proxy_pass que servirá para: Responder a las peticiones del puerto 80 (http), 443 (https) y además haremos que responda siempre por el puerto 443, aun cuando el usuario haga la petición por el puerto 80. Tambien tendrá la configuracion de WebSocket ya que la interfaz gráfica de usuario hablará con Juju en un WebSocket para proporcionar una interfaz en tiempo real con los servicios instalados, las unidades que los componen, y las máquinas disponibles

Para este ejemplo editaremos el archivo de configuración del proxy_pass de la maquina server dom0 de la siguiente manera:

# cd /etc/nginx/sites-available
# ls
default  juju-gui
# nano juju-gui

y debemos dejarlo así:

server {
        listen  80;
        server_name jujugui.canaima.net.ve;
rewrite ^ https://$host$request_uri? permanent;
}

server {
        listen 443;
        server_name jujugui.canaima.net.ve;
        ssl  on;
ssl_certificate  /etc/nginx/ssl2/ser.crt;
ssl_certificate_key  /etc/nginx/ssl2/ser.key;

        access_log  /var/log/nginx/jujugui-net.access.log;
        error_log   /var/log/nginx/jujugui-net.error.log;

        location / {
            proxy_pass       https://10.0.3.180;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                
                # WebSocket support (nginx 1.4)
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
        
        }


        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
                root   /var/www/nginx-default;
        }
}

Listo ya esta configurado nuestro virtualhost en el dom0 nuestra maquina fisica.
Restauramos el servicio y listo.
# service nginx restart

miércoles, 27 de agosto de 2014

Instalación de JUJU de forma local LXC en un servidor con Ubuntu 14.04

Instalación
apt-get update && sudo apt-get install juju-core

Configuración
NOTA: Este archivo contendra los perfiles de las muestras para los diferentes tipos de servicios en la nube, para proveerdor local si se ejecuta en linux LXC

juju generate-config ó juju generate-config --show

Proveedor local
El provedor local proporciona un campo de pruebas que para los usuarios experimenten con juju y acelerar el proceso de escribir encantos.
JUJU tiene la intención de trabajar en el metal en crudo atraves de MAAS, atraves de una gran variedad de servicios en la nube o en su propia nube privada, tambien puede ser configurado para funcionar unicamente en el equipo local atraves de los contenedores o la virtualización.
La unica implementación estable de esto es usar el sistema de contenedores de linux, LXC (LINUX CONTAINERS). Para utilizar contenedores y la virtualización denominado "Provedor Local"

Configuración para LXC
El provedor local LXC permite ejecutar juju en un unico sistema, como el equipo local o en un servidor. De esta manera usted puede simplemente evaluar las configuraciones de software o de servicios, el desarrollo de sus propios encantos o ejecutar un unico sistema de servidor.

Agregar PPA. (Personal Package Archive)

1.- apt-add-repository ppa:juju/stable
2.- apt-get update

Instalación del provedor local (Depende la versión que utilices)

apt-get install juju-local

Debido a las necesidades de las nuevas versiones de LXC el provedor local requiere un kernel mas reciente que la versión de lanzamiento.
Por lo tanto instalamos Linux 3.8 desde la LTS Hardware Enablement Stack.

apt-get install juju-local linux-image-generic-lts-raring linux-headers-generic-lts-raring

NOTA: Tendras que reiniciar el sistema con el nuevo núcleo con el fin de utilizar juju con el provedor local.

Configuración.
Se debe comenzar mediante la generación de un archivo de configuración genérico para juju y luego cambiar al provedor local mediante el comando:

juju generate-config 
juju switch local

Esto genera un archivo llamado enviroments.yaml (si ya no existe), que se alojara en ~/.juju/ directorio (creara el directorio si ya no existe).

NOTA: Si ya se tiene una configuración existente, puede utilizar 
juju generate-config --show para emitir el nuevo archivo de configuración, luego copia y pega las áreas pertinentes en un editor de texto.

NOTA: La ruta del archivo environments.yaml --> /home/usuario/.juju/enviroments.yaml no se puede crear ni modificar como usuario root debe ser como usuario del equipo $.

###################################
TODOS ESTOS PASOS DEBEN SER COMO USUARIO DEL EQUIPO $ NO COMO USUARIO ROOT #

*juju bootstrap: Crea el entorno de juju en la ruta que colocamos.
*juju init: Crea el archivo de configuración en /home/usuario/.juju/environments.yaml.
*juju status: Muestra el status de los servicios montados.
*juju debug-log: Muestra los errores y actividades que se ejecuten.
*juju deploy trusty/juju-gui: Monta la ultima versión del encanto o servicio
*juju add-relation mediawiki:db mysql: Unir dos encantos
*juju destroy-service juju-gui: ELiminar / Destruir encantos ya implementados

###################################

Colocamos juju bootstrap para crear el entorno de juju:
$ juju bootstrap

Colocamos el juju init para crear el archivo de configuración environments.yaml:
$ juju init

Eliminamos el archivo por defecto:
$ rm /home/usuario/.juju/environments.yaml

Creamos un archivo nuevo:
$ nano /home/usuario/.juju/environments.yaml

Y en el archivo nuevo environments.yaml copiamos el siguiente texto.

environments:
 sample:
  type: local
  control-bucket: juju-90832516d914421fa2308cb50a0bf806
  admin-secret: a8cbf69aedfe4de7a13b79714a6e3c2e
  default-series: precise
  ssl-hostname-verification: true
# data-dir: /home/usuario/jujuprueba


Luego de verificar que este bien colocado, guardamos y salimos para colocar el siguiente comando:
$ juju bootstrap

Verificamos que se cree el entorno en /sample
$ ls /home/usuario/.juju/sample
agents  charmcache  cloud-init-output.log  db  locks  log  server.pem  shared-secret  storage  system-identity  tools


Implementación de Servicios.
El punto fundamental de juju es que se puede utilizar para implementar servicios mediante el uso de amuletos. Estos encantos se pueden recuperar de la tienda de encantos, almacenado en le repositorio local o escritos por unos mismos si ya los tenemos listos.
Asi como hay diferentes series de ubuntu, es necesario que haya diferentes series de encantos para tener en cuenta los cambios sutiles en el sistema operativo subyacente. En el caso que se olvide de esto juju siempre tratara de aplicar el encanto mas relevante, por lo que el despliegue puede ser sencillo y facil.

Implementación de la tienda Charm
En la mayoria de los casos, tendrá qie desplegar encantos de descargas directamente de la tienda de encantos. Esto asegura que usted obtenga la correspondiente versión del encanto y que todo funcione. 
Para implementar encantos como este solo puede especificar de la siguiente forma:

--->>> $ juju deploy mysql
--->>> $ juju deploy mediawiki

La ejecucion de este va hacer exactamente lo que esperas, configue la ultima versión del encanto juju para la serie que esta ejecutando y luego utilizar el entorno de arranque para iniciar una nueva instancia y desplegar mysql.

Juju ultimamente apoya un sistema de espacios de nombres que significa que en realidad se puede despleagr encantos de una variedad de fuentes. La fuente por defecto es la tienda de encantos.
El comando en ejecución es el mismo que el anterior.

--->>> <repositorio>:<series>/<mysql>

--->>> $ juju deploy cs: precise/mysql 

Ruta donde estan los contenedores LXC o maquinas MACHINE por servicios.
# cd /var/lib/lxc/
# ls
juju-precise-template/    soporte-sample-machine-2/ soporte-sample-machine-4/ 
juju-trusty-template/     soporte-sample-machine-3/ soporte-sample-machine-5/

Configuración de un servicio
Al implementar un servicio el encanto va requerir establecer configuración especifica.
Juju proporciona herramientas para ayudar a manejar estas opciones y responder a los cambios a lo largo de la vida util de la implementación del servicio.
La configuración puede modificarse por un administrador en tiempo de despliegue o despues de que los servicios estan operativos.

El descubrimiento de las opciones de configuración de los servicios.
Se puede configurar los encantos con las opciones disponibles que se pueden descubrir de la siguiente forma.

*Mediante la ejecución:
--->>> juju get <service>

Al ver el encanto en la tienda de encanto, mediante el examen de la config.yaml archivo en el encanto propio.
Las configuraciones de ajustes de los nombres y los valores que ellos tienen obviamente variara entre los encantos, las opciones y los valores estan bien documentados, sin embargo, por lo que debe consultar una de las fuentes anteriores para conocer los detalles particulares.


Configuración de un Servicio en despliegue
Es posible ajustar los valores de configuración cuando se implementa un servicio proporcionado en un yaml con formatos que contiene los valores de configuración.

--->>> juju deploy --config myconfig.yaml mediawiki

Nota: Si el archivo de configuración yaml no se puede leer o contiene algunos errores de sintaxis u opciones no validos, recibirá un mensaje de error al respecto. Sin embargo se implementara el servicio.

Configuracion de un servicio que tiene o ha sido desplegado.
Es posible establecer o cambiar la configuración de un servicio que ya esta desplegado.

Antes de configurar cualquiera de estas opciones, es posible que desee comprobar lo que las opciones actuales ya están establecidas, utilizando el comando:
--->>> juju get <service>

Se pueden configurar las opciones mediante el comando:
--->>> juju set <service>

Se debe especificar multiples claves = valores pares si es necesario:
--->>> *juju ser mediawiki skin = monoblock name="juju wiki"

Configuración de las opciones de nuevo a su valor por defecto se hacer usando el comando:
--->>> unset , comando seguido por el servicio y las respectivas opciones.

--->>> *juju unset mediawiki admins name


Instalación de juju-gui

Solo para verlo en el equipo que esta instalado.

1.- $ juju deploy trusty/juju-gui
2.- $ juju status
Una vez que verificamos la instalación con juju status y dice agent-state: started hacemos lo siguiente:
3.- $ juju expose juju-gui

o

1.- $ sudo apt-get install juju-quickstart
2.- $ juju-quickstart
3.- ************************************************************************
juju quickstart v1.4.2
ssh-agent has been started.
To interact with Juju or quickstart again after quickstart
finishes, please run the following in a terminal to start ssh-agent:
  eval `ssh-agent`

Warning: no SSH keys were found in ~/.ssh
To proceed and generate keys, quickstart can
[a] automatically create keys for you
[m] provide commands to manually create your keys

Note: ssh-keygen will prompt you for an optional
passphrase to generate your key for you.
Quickstart does not store it.

Automatically create keys [a], manually create the keys [m], or cancel [c]? a
generating new ssh key...
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
adding key to ssh-agent...
Enter passphrase for /home/soporte/.ssh/id_rsa: 
a new ssh key was generated in /home/soporte/.ssh/id_rsa
bootstrapping the sample environment (type: local)
sudo privileges will be required to bootstrap the environment
reusing the already bootstrapped sample environment
retrieving the environment status
retrieving the Juju API address
connecting to wss://localhost:17070
bootstrap node series: trusty
charm URL: cs:trusty/juju-gui-5
requesting juju-gui deployment
juju-gui deployment request accepted
exposing service juju-gui
requesting new unit deployment
juju-gui/0 deployment request accepted
juju-gui/0 deployment is pending
************************************************************************


4.- Se debe colocar clave en este espacio (soporte/1234/canaima/etc)

LETRA (A):
--->>> Automatically create keys [a], manually create the keys [m], or cancel [c]? a
generating new ssh key...

CLAVE:
--->>>Enter passphrase (empty for no passphrase): 
--->>>Enter same passphrase again: 
adding key to ssh-agent...
--->>>Enter passphrase for /home/soporte/.ssh/id_rsa: 

...CONTINUARA INSTALANDO...

5.- Realizar un juju status

--->>> juju status

Para ver si ya esta montado como deploy la gui de juju, ya que en la instalación el realiza un juju deploy juju-gui (requesting juju-gui deployment - deployment request accepted - exposing service juju-gui).

Una vez montado el mostrara una ruta (IP / URL) donde nos podemos meter para ver desde la web (navegadores) a juju y poder utilizarlo mediante una interfaz.

*****EJEMPLO*****
  juju-gui:
    charm: cs:trusty/juju-gui-5
    exposed: true
    units:
      juju-gui/0:
        agent-state: started
        agent-version: 1.20.1.1
        machine: "5"
        open-ports:
        - 80/tcp
        - 443/tcp
        public-address: 10.0.3.180
*****************
agent-state: pending ->  Quiere decir que se esta intalando
agent-state: started ->  Quiere decir que esta instalado

Solo para verlo en el equipo que esta instalado y en otro equipos que se conecten por un navegador a la URL.

6.- Instalación de Servidor Web con Nginx
Se debe instalar un servidor web ya que el sera quien recibirá las peticiones por la ip publica y no por la ip del contenedor LXC.
# aptitude install nginx

Una vez instalado se debe crear una configuración dom0 que resuelva las peticiones en la ruta:
# nano /etc/nginx/sites-available/juju-gui

y se pega el siguiente código y luego se guarda y se sale para restaurar el servicio web:

server {
listen  80;
server_name jujugui.canaima.net.ve;

access_log  /var/log/nginx/jujugui-net.access.log;
error_log   /var/log/nginx/jujugui-net.error.log;

location / {
   proxy_pass       http://10.0.3.180;
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}


error_page   500 502 503 504  /50x.html;
location = /50x.html {
       root   /var/www/nginx-default;
}
}

Se realiza un enlace simbólico
Se debe realizar un enlace simbólico por cada archivo configurado 

# ln -s /etc/nginx/sites-available/juju-gui /etc/nginx/sites-enabled/juju-gui
# service nginx restart

# ln -s /etc/nginx/sites-available/juju-wiki /etc/nginx/sites-enabled/juju-wiki
# service nginx restart

7.- Instalacion de openssl
# aptitude install openssl

Crear una carpeta donde guardaran los archivos
# mkdir /etc/nginx/ssl2
# cd /etc/nginx/ssl2

Generar la Llave con openssl
# openssl genrsa -des3 -out ser.key 4096
Generating RSA private key, 4096 bit long modulus
.....................................................++
.......................++
e is 65537 (0x10001)
Enter pass phrase for ser.key:
Verifying - Enter pass phrase for ser.key:

Crear una petición de firmado del certificado CRS
# openssl req -new -key ser.key -out ser.csr
Enter pass phrase for ser.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:VE
State or Province Name (full name) [Some-State]:Caracas
Locality Name (eg, city) []:Distrito Capital
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MMMM
Organizational Unit Name (eg, section) []:juju
Common Name (eg, YOUR name) []:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
NOTA: NO COLOCAR ESTA CLAVE PASSWORD

Firmar la petición previamente elaborada
# openssl x509 -req -days 1825 -in ser.csr -signkey ser.key -out ser.crt
Signature ok
subject=/C=ve/ST=Caracas/L=Distrito Capital/O=MMMM/OU=juju
Getting Private key
Enter pass phrase for ser.key:

NOTA: COLOCAR ESTA CLAVE PASSWORD LA MISMA DEL INICIO

# ls
ser.crt  ser.csr  ser.key


Crear una versión de la llave que no requiera password
# openssl rsa -in ser.key -out ser.key.insegura
Enter pass phrase for ser.key:
writing RSA key
NOTA: COLOCAR ESTA CLAVE PASSWORD LA MISMA DEL INICIO

Renombrar la llave sin password
# mv ser.key ser.key.seguro
# mv ser.key.insegura ser.key

Y tenemos cuatro archivos
#ls
ser.crt  ser.csr  ser.key  ser.key.seguro

¿Qué archivos usaremos?
Solo usaremos el certificado (ser.crt) y la llave (ser.key)

¿Quien usará la llave y el certificado?
Pues en este caso apache2 y nginx usaran la llave y el certificado. ¿Y pueden usar los mismos? pues si,tanto apache2 y nginx pueden usar la misma llave y el mismo certificado.

Configuración de nginx en el contenedor dom0
Nginx en /etc/ngix/site-availables contiene los archivos de los sitios disponibles, en este caso están configurados como proxy_pass como por ejemplo

# cd /etc/nginx/sites-available
# ls
default  juju-gui
# nano juju-gui

Normalmente un archivo proxy_pass es para responder a las peticiones del puerto 80 (http) y las redirige a una maquina virtual y se ven algo así:
server {
        listen  80;
        server_name jujugui.canaima.net.ve;

        access_log  /var/log/nginx/jujugui-net.access.log;
        error_log   /var/log/nginx/jujugui-net.error.log;

        location / {
            proxy_pass       http://10.0.3.180;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }


        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
                root   /var/www/nginx-default;
        }
}
Esto quiere decir que todas las peticiones hacia el puerto 80 (http) y sean con el dominio jujugui.canaima.net.ve, serán redirigidas a la maquinas virtual cuya IP sea la especificada en el campo proxy_pass (http://192.168.1.x ; http://10.0.3.208 en el caso de la ip que tiene el LXC de juju-gui).

¿Ahora cómo hacer para que el proxy_pass también responda a las peticiones del puerto 443 (https) para así aumentar la seguridad?
En este caso solo debemos agregar algunas cosas al archivo de configuración del proxy_pass que servirá para: Responder a las peticiones del puerto 80 (http), 443 (https) y además haremos que responda siempre por el puerto 443, aun cuando el usuario haga la petición por el puerto 80. Tambien tendrá la configuracion de WebSocket ya que la interfaz gráfica de usuario hablará con Juju en un WebSocket para proporcionar una interfaz en tiempo real con los servicios instalados, las unidades que los componen, y las máquinas disponibles

Para este ejemplo editaremos el archivo de configuración del proxy_pass de la maquina server dom0 de la siguiente manera:

# cd /etc/nginx/sites-available
# ls
default  juju-gui
# nano juju-gui

y debemos dejarlo así:

server {
        listen  80;
        server_name jujugui.canaima.net.ve;
rewrite ^ https://$host$request_uri? permanent;
}

server {
        listen 443;
        server_name jujugui.canaima.net.ve;
        ssl  on;
ssl_certificate  /etc/nginx/ssl2/ser.crt;
ssl_certificate_key  /etc/nginx/ssl2/ser.key;

        access_log  /var/log/nginx/jujugui-net.access.log;
        error_log   /var/log/nginx/jujugui-net.error.log;

        location / {
            proxy_pass       https://10.0.3.180;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                
                # WebSocket support (nginx 1.4)
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
        
        }


        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
                root   /var/www/nginx-default;
        }
}

Listo ya esta configurado nuestro virtualhost en el dom0 nuestra maquina fisica.
Restauramos el servicio y listo.
# service nginx restart

Una vez que salimos de la configuración del virtual host colocamos el siguiente comando:
-->>> $ cat /home/soporte/.juju/environments/sample.jenv 

Este nos mostrara la clave del usuario admin de juju que veremos por nuestro navegador al colocar https://jujugui.canaima.net.ve





user: admin
password: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
environ-uuid: 17e6f407-d5f0-48b2-8aa1-5f72ab36ba15
state-servers:
- localhost:17070
- 10.0.3.1:17070
- 10.16.106.236:17070
ca-cert: '-----BEGIN CERTIFICATE-----




viernes, 4 de julio de 2014

Configuración de tarjeta inalambrica Realtek en Canaima 3.0 - 3.1 y Debian 6 Squeeze


Esta versión es compatible con Realtek RTL8188SU, RTL8191SU, RTL8192E, RTL8192SU y dispositivos basados ​​en RTL8192U solamente.

1.- Ir al menú de Canaima -> Accesorio -> Terminal y entras como super usuario (su) y colocas nano /etc/apt/sources.list y colocas la siguiente linea:

# Debian 6.0 "Squeeze"
deb http://http.debian.net/debian/ exprimir main contrib non-free

Una vez que copias esa linea guardas los cambios tecleando CTRL+O ENTER y sales tecleando CTRL+X

2.- Luego procedemos a actualizar la lista de paquetes disponibles e instalar el firmware-realtek:

# Apt-get update && apt-get install-firmware realtek

NOTA: Dispositivos basados ​​en RTL8192U solamente: se requiere firmware a suministrar de forma manual:

# Apt-get install unzip && exit
$ Wget ftp://ftp.dlink.com/Wireless/dwa130_revC/Drivers/dwa130_revC_drivers_linux_006.zip
$ Descomprimir dwa130_revC_drivers_linux_006.zip
$ Su
# Mkdir-p / usr/local/lib/firmware/RTL8192U
# Cp rtl8192u_linux_2.6.0006.1031.2008/firmware/RTL8192U / * / usr/local/lib/firmware/RTL8192U

3.- Conecte el dispositivo a su sistema.

4.- Configure su interfaz inalámbrica en su caso.


Configuración de tarjeta inalambrica Realtek en Canaima 4.0 y Debian 7 Wheezy


Esta versión es compatible con Realtek RTL8188CE, RTL8188CUS, RTL8188DE, RTL8188SU, RTL8191SE, RTL8191SU, RTL8192CE, RTL8192CU, RTL8192DE, RTL8192E, RTL8192SE, RTL8192SU y dispositivos basados ​​en RTL8192U.

1.- Ir al menú de Canaima -> Accesorio -> Terminal y entras como super usuario (su) y colocas nano /etc/apt/sources.list y colocas la siguiente linea:

# Debian 7 "Wheezy"
deb http://http.debian.net/debian/ sibilante main contrib non-free


Una vez que copias esa linea guardas los cambios tecleando CTRL+O ENTER y sales tecleando CTRL+X

2.- Luego procedemos a actualizar la lista de paquetes disponibles e instalar el firmware-realtek:

# Apt-get update && apt-get install-firmware realtek

NOTA: Dispositivos basados ​​en RTL8192U solamente: se requiere firmware a suministrar de forma manual:

# Apt-get install unzip && exit
$ Wget ftp://ftp.dlink.com/Wireless/dwa130_revC/Drivers/dwa130_revC_drivers_linux_006.zip
$ Descomprimir dwa130_revC_drivers_linux_006.zip
$ Su
# Mkdir-p / usr/local/lib/firmware/RTL8192U
# Cp rtl8192u_linux_2.6.0006.1031.2008/firmware/RTL8192U / * / usr/local/lib/firmware/RTL8192U

3.- Conecte el dispositivo a su sistema.
4.- Configure su interfaz inalámbrica en su caso.
 ---> http://kimberling146.blogspot.com/2014/05/configuracion-de-la-interfaz-de-red-en.html


lunes, 30 de junio de 2014

Lista de Elementos HTML5


Elemento raíz.
<html>:Representa la raíz de un documento HTML o XHTML. Todos los demás elementos deben ser descendientes de este elemento.


Metadatos del documento.
<head>:Representa una colección de metadatos acerca del documento, incluyendo enlaces a, o definiciones de, scripts y hojas de estilo.
<title>:Define el título del documento, el cual se muestra en la barra de título del navegador o en las pestañas de página. Solamente puede contener texto y cualquier otra etiqueta contenida no será interpretada.
<base>:Define la URL base para las URLs relativas en la página.
<link>:Usada para enlazar JavaScript y CSS externos con el documento HTML actual.
<meta>:Define los metadatos que no pueden ser definidos usando otro elemento HTML.
<style>:Etiqueta de estilo usada para escribir CSS en línea.



Scripting.
<script>:Define ya sea un script interno o un enlace hacia un script externo. El lenguaje de programación es JavaScript.
<noscript>:Define una contenido alternativo a mostrar cuando el navegador no soporta scripting.


Secciones.
<body>:Representa el contenido principal de un documento HTML. Solo hay un elemento <body> en un documento.
<section>:Define una sección en un documento.
<nav>:Define una sección que solamente contiene enlaces de navegación.
<article>:Define contenido autónomo que podría existir independientemente del resto del contenido.
<aside>:Define algunos contenidos vagamente relacionados con el resto del contenido de la página. Si es removido, el contenido restante seguirá teniendo sentido.
<h1>,<h2>,<h3>,<h4>,<h5>,<h6>:Los elemento de cabecera  implementan seis niveles de cabeceras de documentos; <h1> es la de mayor y <h6> es la de menor impotancia. Un elemento de cabecera describe brevemente el tema de la sección que introduce.
<header>:Define la cabecera de una página o sección. Usualmente contiene un logotipo, el título del sitio Web y una tabla de navegación de contenidos.
<footer>:Define el pie de una página o sección. Usualmente contiene un mensaje de derechos de autoría, algunos enlaces a información legal o direcciones para dar información de retroalimentación.
<address>:Define una sección que contiene información de contacto.
<main>:Define el contenido principal o importante en el documento. Solamente existe un elemento <main> en el documento.


Agrupación de Contenido.
<p>:Define una parte que debe mostrarse como un párrafo.
<hr>:Representa un quiebre temático entre parrafos de una sección o articulo o cualquier contenido.
<pre>:Indica que su contenido esta preformateado y que este formato debe ser preservado.
<blockquote>:Representa una contenido citado desde otra fuente.
<ol>:Define una lista ordenada de artículos.
<ul>:Define una lista de artículos sin orden.
<li>:Define un artículo de una lista ennumerada.
<dl>:Define una lista de definiciones, es decir, una lista de términos y sus definiciones asociadas.
<dt>:Representa un término definido por el siguiente <dd>.
<dd>:Representa la definición de los terminos listados antes que él.
<figure>:Representa una figura ilustrada como parte  del documento.
<figcaption>:Representa la leyenda de una figura.
<div>:Representa un contenedor genérico sin ningún significado especial.


Semántica a nivel de texto.
<a>:Representa un  hiperenlace , enlazando a otro recurso.
<em>:Representa un texto  enfatizado , como un acento de intensidad.
<strong>:Representa un texto especialmente  importante.
<small>:Representa un  comentario aparte , es decir, textos como un descargo de responsabilidad o una nota de derechos de autoría, que no son esenciales para la comprensión del documento.
<s>:Representa contenido que ya  no es exacto o relevante.
<cite>:Representa el  título de una obra.
<q>:Representa una  cita textual  inline.
<dfn>:Representa un término cuya  definición  está contenida en su contenido ancestro más próximo.
<abbr>:Representa una  abreviación  o un  acrónimo ; la expansión de la abreviatura puede ser representada por el atributo title.
<data>:Asocia un equivalente legible por máquina a sus contenidos. (Este elemento está sólamente en la versión de la  WHATWG del estandar HTML, y no en la versión de la W3C de HTML5).
<time>:Representa un valor de fecha y hora; el equivalente legible por máquina puede ser representado en el atributo datetime.
<code>:Representa un código de  ordenador.
<var>:Representa a una variable, es decir, una expresión matemática o contexto de programación, un identificador que represente a una constante, un símbolo que identifica una cantidad física, un parámetro de una función o un marcador de posición en prosa .
<samp>:Representa la salida de un programa o un ordenador.
<kbd>:Representa la entrada de usuario o usuaria, por lo general desde un teclado, pero no necesariamente, este puede representar otras formas de entrada de usuario o usuaria, como comandos de voz transcritos.
<sub>,<sup>:Representan un subíndice y un superíndice, respectivamente.
<i>:Representa un texto en una voz o estado de ánimo alterno, o por lo menos de diferente calidad, como una designación taxonómica, un término técnico, una frase idiomática, un pensamiento o el nombre de un barco.
<b>:Representa un texto hacia el cual se llama la atención para  propósitos utilitaros.  No confiere ninguna importancia adicional y no implica una voz alterna.
<u>:Representa una anotación no textual sin-articular, como etiquetar un texto como mal escrito o etiquetar un nombre propio en texto en Chino.
<mark>:Representa texto resaltado con propósitos de referencia, es decir por su relevancia en otro contexto.
<ruby>:Representa contenidos a ser marcados con anotaciones ruby,  recorridos cortos de texto presentados junto al texto. Estos son utilizados con regularidad en conjunto a lenguajes de Asia del Este, donde las anotaciones actúan como una guía para la pronunciación, como el furigana Japonés.
<rt>:Representa el  texto de una anotación ruby.
<rp>:Representa los paréntesis alrededor de una anotación ruby, usada para mostrar la anotación de manera alterna por los navegadores que no soporten despliegue estandar para las anotaciones.
<bdi>:Representa un texto que debe ser aislado de sus alrededores para el formateado bidireccional del texto.  Permite incrustar un fragmento de texto con una direccionalidad diferente o desconocida.
<bdo>:Representa la direccionalidad de sus descendientes con el fin de anular de forma explícita al algoritmo bidireccional Unicode.
<span>:Representa texto sin un significado específico.  Este debe ser usado cuando ningún otro elemento semántico le confiere un significado adecuado, en cuyo caso, provendrá de atributos globales como class, lang, o dir.
<br>:Representa un salto de línea.
<wbr>:Representa una oportunidad de salto de línea, es decir, un punto sugerido de envoltura donde el texto de múltiples líneas puede ser dividido para mejorar su legibilidad.


Ediciones.
<ins>:Define una adición en el documento.
<del>:Define una remoción del documento.


Contenido Incrustado.
<img>:Representa una imagen.
<iframe>:Representa un contexto anidado de navegación, es decir, un documento HTML embebido.
<embed>:Representa un punto de integración para una aplicación o contenido interactivo externo que por lo general no es HTML.
<object>:Representa un recurso externo, que será tratado como una imagen, un sub-documento HTML o un recurso externo a ser procesado por un  plugin.
<param>:Define parámetros para el uso por los plugins invocados por los elementos <object>.
<video> :Representa un  video , y sus archivos de audio y capciones asociadas, con la interfaz necesaria para reproducirlos.
<audio>:Representa un sonido o stream de audio.
<source>:Permite a autores o autoras especificar recursos multimedia alternativos para los elementos multimedia como  <video> o <audio>.
<track>:Permite a autores o autoras especificar una pista de texto temporizado para elementos multimedia como <video> o   <audio>.
<canvas>:Representa un  área de mapa de bits  en el que se pueden utilizar scripts para renderizar gráficos como gráficas, gráficas de juegos o cualquier imagen visual al vuelo.
<map>:En conjunto con <area>, define un mapa de imagen.
<area>:En conjunto con  <map>, define un mapa de imagen.
<svg>:Define una imagen vectorial embebida.
<math>:Define una fórmula matemática.


Datos Tabuladores.
<table>:Representa datos con más de una dimensión.
<caption>:Representa el título de una tabla.
<colgroup>:Representa un conjunto de una o más columnas de una tabla.
<col>:Representa una columna de una tabla.
<tbody>:Representa el bloque de filas que describen los  datos contretos  de una tabla.
<thead>:Representa el bloque de filas que describen las etiquetas de columna de una tabla.
<tfoot>:Representa los bloques de filas que describen los  resúmenes de columna  de una tabla.
<tr>:Representa una fila de celdas en una tabla.
<td>:Representa una celda de datos en una tabla.
<th>:Representa una celda encabezado en una tabla.


Formularios.
<form>:Representa un formulario, consistendo de controles que puede ser enviado a un servidor para procesamiento.
<fieldset>:Representa un conjunto de controles.
<legend>:Representa el título de un <fieldset>.
<label>:Representa el título de un control de formulario.
<input>:Representa un campo de datos escrito que permite al usuario o usuaria editar los datos.
<button>:Representa un  botón.
<select>:Represents un control que permite la selección entre un conjunto de opciones.
<datalist>:Representa un conjunto de opciones predefiniddas para otros controles.
<optgroup>:Representa un conjunto de opciones, agrupadas lógicamente.
<option>:Representa una opción en un elemento <select>, o una sugerencia de un elemento <datalist>.
<textarea>:Representa un control de edición de texto multi-línea.
<keygen>:Representa un control de par generador de llaves.
<output>:Representa el resultado de un cálculo.
<progress>:Representa el progreso de finalización de una tarea.
<meter>:Representa la medida escalar (o el valor fraccionario) dentro de un rango conocido.


Elementos Interactivos.
<details>:Representa un widget desde el que un usuario o usuaria puede obtener información o controles adicionales.
<summary>:Representa un resumen, título o leyenda para un elemento  <details> dado.
<command>:Representa un comando que un usuario o usuaria puede invocar. <menu>:Representa una lista de comandos .


Fuente: https://developer.mozilla.org/es/docs/HTML/HTML5/HTML5_lista_elementos