Mostrando las entradas con la etiqueta Trucos. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Trucos. Mostrar todas las entradas

lunes, agosto 28, 2017

Experimentos con Docker y TensorFlow

En este primer post, explico una receta de como instalar Docker en un linux que corre en un VPS con un cuadcore x86 (64 bits). Como toda receta puede haber métodos mejores, pero para lo que necesito es suficiente. En este caso en la puesta a punto de un servidor LAMP en un contenedor.

Lo primero es instalar el Docker, en su versión mas moderna de mantenimiento. Para ello ejecutamos:

  1. sudo apt-add-repository 'deb https://apt.dockerproject.org/repo ubuntu-xenial main'
  2. sudo apt-get update
  3. sudo apt-get install docker-engine

Para saber si Docker está corriendo como servicio, basta con usar:

sudo systemctl status docker

Que nos devolverá algo parecido a esto si el servicio está funcionando

docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: e
   Active: active (running) since vie 2017-08-25 16:12:09 ART; 2 days ago


Por otro lado al hacer un ifconfig debe aparecer el bridge

docker0   Link encap:Ethernet  direcciónHW 02:42:04:ec:36:db 
          Direc. inet:172.17.0.1  Difus.:0.0.0.0  Másc:255.255.0.0
          Dirección inet6: fe80::42:4ff:feec:36db/64 Alcance:Enlace
          ACTIVO DIFUSIÓN FUNCIONANDO MULTICAST  MTU:1500  Métrica:1
          Paquetes RX:50356 errores:0 perdidos:0 overruns:0 frame:0
          Paquetes TX:58643 errores:0 perdidos:0 overruns:0 carrier:0
          colisiones:0 long.colaTX:0
          Bytes RX:3011512 (3.0 MB)  TX bytes:401585916 (401.5 MB)


Luego para evitar usar el comando sudo de manera seguida asociamos el usuario administrador al grupo docker con:

sudo usermod -aG docker $(whoami)

para saber si no necesitamos usar mas el sudo, probamos ejecutar la imagen Hola Mundo con:

docker run hello-world

Lo que nos devolverá algo parecido a esto:

Hello from Docker!
This message shows that your installation appears to be working correctly.


con

docker pull ubuntu

descargamos la imagen (en realidad es una plantilla) de un sistema base en la última versión de Ubuntu. Para ver la imagen basta con ingresar:

 docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              ccc7a11d65b1        2 weeks ago         120MB
hello-world         latest              1815c82652c0        2 months ago        1.84kB

Luego con:

docker run -it ubuntu bash

creamos el conteiner si no existe y entramos por una terminal vt220 de manera interactiva usando bash como shell o interprete. lo que vamos a ver es esto:

root@035244c70483:~#

Siempre ingresamos como root, y el hostname del sistema es el ID del contenedor es decir 035244c70483 para instalar apache2, mysql y phpmyadmin; primero hay que hacer un apt update!! pues como dije es una plantilla y está desprovisto de cosa superfluas. Tampoco tiene nano, ni VIM. Entonces los pasos dentro del container son, en resumidas cuentas:
 
  1. apt update
  2. apt install nano, vim, apache2, mysql-server, etc, etc.
  3. apt clean
  4. service apache2 start
    service mysql start

ahora con exit salimos del container. El cual lo podemos ver con:

docker ps -a

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS                  NAMES
72f37c543cff        hello-world         "/hello"            27 minutes ago      Exited (0) 27 minutes ago                          jolly_goldstine
035244c70483       ubuntu        "bash"              1 minutes ago        Exited(0) hours                   amazing_euler
a160ebf0c908        tensorflow_2017_8   "bash"              24 hours ago        Exited (0) 24 hours ago                            quirky_almeida


con docker ps vemos los conteriner activos.

Ahora bien vamos a crear una plantilla con dicho container, para eso basta con hacer, usando el ID del container:

docker commit 35244c70483 miweb_ubuntu

Se puede verificar su creación con docker images. Ahora vamos a guardar dicha imagen para luego transportala a otro VPS que ya tiene docker corriendo. Para ello la guardamos como:

  1. docker save -o miweb_ubuntu.tar miweb_ubuntu
  2. gzip miweb_ubuntu.tar
  3. scp  miweb_ubuntu.tar.gz pepito@cosita:tmp
Luego en el VPS nuevo hacemos:

  1. gunzip miweb_ubuntu.tar.gz
  2. docker load --input miweb_ubuntu.tar 

de nuevo con docker images verificamos que esté la imagen. Para que arranque de manera interactiva, para ajustar cosas,,,

docker run -ti -p 9080:80 miweb_ubuntu bash

cuando ingresemos los servicios no arrancan automáticamente, ya que no fue creado a partir de un dockerfile! Entonces iniciamos los servicios apache2 y mysql como antes, y salimos NO CON EXIT, sino con CTRL+P+Q. Para que podamos salir y el contenedor no se detenga. Para verificar que está andando basta con hacer:

docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
035244c70483        miweb_ubuntu        "bash"              19 hours ago        Up 19 hours         0.0.0.0:9080->80/tcp   amazing_euler


con la opción -p 9080:80 estoy redirigiendo el puerto de salida al 9080, aunque el interno sea el 80. Esto es para evitar el conflicto de puertos con mi servidor apache que corre en el VPS.

Cabe observar que se crea un dispositivo bridge para el contenedor donde serán redirigidas las solicitudes.

veth2bc2871 Link encap:Ethernet  direcciónHW 46:c8:80:bf:fb:ae 
          Dirección inet6: fe80::44c8:80ff:febf:fbae/64 Alcance:Enlace
          ACTIVO DIFUSIÓN FUNCIONANDO MULTICAST  MTU:1500  Métrica:1
          Paquetes RX:260 errores:0 perdidos:0 overruns:0 frame:0
          Paquetes TX:348 errores:0 perdidos:0 overruns:0 carrier:0
          colisiones:0 long.colaTX:0
          Bytes RX:61744 (61.7 KB)  TX bytes:4052635 (4.0 MB)


Con :

docker cp index.html 035244c70483:/var/www/html/index.html

copio el index.html de mi VPS al directorio dentro del contenedor.

Listo para saber que funciona todo, en un navegador fuera del VPS colocamos:

http://pepito:9080

Y debemos ver la página web que hemos creado en el contenedor.

Para volver a ingresar al contendor basta con usar el ID del contendor que corre:

docker attach 035244c70483

con:

docker start ID_contenedor, se lo activa si estaba detenido
docker stop ID_contenedor, se lo suspende si estaba activo.

 Saludos.

martes, octubre 14, 2014

Grafos de Penrose




Roger Penrose en su libro El Camino a la Realidad muestra una serie de algoritmos gráficos para encarar y facilitar el trabajos con estructuras de la geometría diferencial.

lunes, septiembre 10, 2007

Booteo de PC-BSD con grub (linux), y otras yerbas.


Como estoy ensayando con PC-BSD me gustaría publicar una serie de problemas que he solucionado que están poco documentados en la Infernet.





1- El booteo con grub (desde linux) tradicionalmente se publica para FreeBSD lo siguiente...

title PC-BSD on /dev/hdb1
root (hd1,0,a)
kernel /boot/loader
boot

esto falla pues con la orden root (hd1,0,a) le pedimos a grub que monte el sector de booteo... y grub no reconoce el formato UFS2, que usa PC-BSD, en cambio freeBSD 6.x formatea por defecto a /boot como UFS1 que si puede montar... Esto no se soluciona recompilando grub con los...ufs2_stage1_5 y ffs_stage1_5, etc... la solución es hacer que grub no compruebe el sistema de archivos, sino que directamente arranque el disco como booteable... de igual manera a como se hace con WinXP...

title PC-BSD on /dev/hdb1
rootnoverify (hd1,0)
chainloader +1
boot


2- Por un bug o por alguna razón que desconozco el localhost no levanta... entonces hay que definirlo en /etc/rc.conf como...

ipv4_network_interface="rl0 lo0"
ifconfig_lo0="inet 127.0.0.1 netmask 0xff0000"
....

3- El cups no puede configurar la impresora en modo dispositivo cuando estamos entramos por localhost:631... además /dev/lpt0 arranca por defecto en interrpt-driver y hay que iniciarlo en polled-mode con

#lptcontrol -p -d /dev/lpt0

esto se puede automatizar en el arranque colocando esta orden en /etc/rc.local. Finalemte para configurar el cups se lo hace a mano con...

#lpadmin -p local -E -v parallel:/dev/lpt0 -m Deskjet.ppd

Después de esto último consguí hacer que le PC-BSD imprimiera...

viernes, marzo 02, 2007

Tips in ipv6

Acá dejo algunos trucos del uso del comando "route" aplicado a crear o eliminar rutas en ipv6 en su SO (Sistema Operativo) Linux o FreeBSD, más especialmente en GNU/Linux Debian.

Bueno asumo que tenemos levantado el dispositivo "sit0", sino lo levantamos con (como root)

root@clara:# ifconfig sit0 ups

este permite la encapsulación ipv6 a ipv4. Si todo salió bien deberíamos ver como salida del comando "ifconfig sit0":

sit0 Link encap:IPv6-in-IPv4
inet6 addr: ::127.0.0.1/96 Scope:Unknown
inet6 addr: ::192.168.1.4/96 Scope:Compat
inet6 addr: ::10.0.0.4/96 Scope:Compat
UP RUNNING NOARP MTU:1480 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

y que tenemos además un tunel ipv6 como el siguinte.

tun Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet6 addr: 2001:5c0:8fff:fffe::1ef5/128 Scope:Global
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1280 Metric:1
RX packets:146 errors:0 dropped:0 overruns:0 frame:0
TX packets:140 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:11688 (11.4 KiB) TX bytes:11272 (11.0 KiB)

para poder hacer experimentos que salgan de la red local.

Para poder ver que dirección ipv6 y el alcance que tenemos asignada en cada dispositivo de red hacemos:

hcaste@clara:~$ /sbin/ifconfig eth1|grep "inet6 addr:"
inet6 addr: 2001:5c0:8fff:1::1/64 Scope:Global
inet6 addr: fe80::20b:6aff:fe7d:53c/64 Scope:Link

bueno en mi caso tengo una red de alcance global asociada al backbone 2001::/16 que corresponde al tunel que te asigna la empresa HEXAGO en forma gratuita por ahora. La dirección any-cast de alcance de enlace fe80::/16 corresponde a la targeta de red y si se fijan tiene la dirección MAC de la targeta. Pero con una modificación que la da el IEEE 802.

Si queremos asignar una dirección 6Bone (3ffe::/16) a un dispositivo dado el comando es el siguiente:

ifconfig inet6 add /

por ejemplo:

ifconfig eth1 inet6 add 3ffe:0a00:0004::1/64

donde en el prefijo estoy encapsulando mi dirección ipv4 10.0.0.4, para eliminar una dirección basta cambiar "add" con "del". Para visualizar las rutas asociadas a un dispositivo basta con ingersar:

route -A inet6|grep -w "dev"

por ejemplo:

hcaste@clara:~$ /sbin/route -A inet6|grep -w "tun"
2001:5c0:8fff:fffe::1ef4/128 2001:5c0:8fff:fffe::1ef4 UC 0 196 0 tun (dispositivo ruta global)
2000::/3 :: U 1 0 0 tun (ruta global al tunel)
fe80::/64 :: U 256 0 0 tun (ruta de enlace)
ff00::/8 :: U 256 0 0 tun (ruta multicast)
::/0 :: U 1 0 0 tun (ruta por defecto)

Si queremos añadir/quitar una ruta a la tabla de ruteo, basta con ingresar

route -A inet6 add/del / [gw] [dev]

Por ejemplo si yo quiero que todas las direcciones de un 6Bone sean enviadas por un tunel basta con entrar

route -A inet6 add 3ffe::/16 gw 2001:5c0:8fff:fffe::1ef4

o para asociar una ruta a una interface, del ejemplo anterior que salgan por el dispositivo "eth1" en vez de por el tunel.

route -A inet6 add 3ffe::/16 dev eth1

That's all folks!!

jueves, noviembre 02, 2006

Un truco para copiar imagen .iso

Este es un truco muy interesante para los usuarios de GNU/Linux. Como super-usuario.



1) mount /dev/cdrom (No hace falta montar el disco... gracias Omar)
2) dd if=/dev/cdrom1 of=archivo.iso
3) md5sum /dev/cdrom, md5sum imagen.iso para verifiar la integridad de la copia.
4) mount -o loop disco.iso /punto/montaje

lunes, octubre 30, 2006

Como habilitar e-mail en Nokia 3220 para usuarios de CTI

Esto es válido para usuarios de CTI movil que habiten en la reública argentina. Luego de googlear y llamar al servicio técnico de nokia. He hallado la configuración para poder enviar mail a través del teléfono. Es decir usando la combinación:

Menú > Mensajes > e-mail > Crear e-mail

Por supuesto solo vale para clientes CTI, que a través del *611 pedimos la clave del "portal de acceso"

Primero debemos generar una conficuración personal, llamémola CTI

Menú > Configuraciones > Ajuste de configuración > Configuraciones de ajuste personal

Ahí en opciones > agregar nuevo > e-mail

Entonces ingresamos y colocamos en cada campo de @CTI (Esto parece luego que llené el campo, antes aparece @e-mail)

Nombre de la Cuenta: CTI
Mi Nombre: Hora....
Dirección de e-mail: 341....@ctimovil.com.ar
Incluir firma: No
Responder a: (blanco)
Acceso seguro SMTP: PLAIN
Nombre de Usuario: 341....
Contraseña SMTP: **** (dada por el *611)
Servidor SMTP saliente: smtp.ctimovil.com.ar
Puerto SMTP saliente: 25
Punto de acceso predefinido: si
Tipo de servido entrante: POP3
configuraciones correo entrante: (para yahoo)
Recuperar e-mails: 30
Acceso seguro: Desactivado
Nombre de usuario pop3: horacio...
contraseña: ***********
servido pop3 entrante: pop3.yahoo.com.ar
puerto ....: 110
usar punto de acceso predefinido: Si

Luego nos vamos a

Menú > Mensajes > config. mensajes > mensajes e-mail

en cada campo hay que poner:
configuracion: Ajuste personal (sacar set1)
cuenta: CTI

Y listo, en las pruebas hasta ahora funciona.

OJO: El servicio de envío y recepción es PAGO, no gratuito... así que si se hacen los locos se quedarán si crédito...!!!

Suerte

Horacio.