Monday, January 24, 2022
¿Cómo mover o transferir Docker imagen a otro sistema? How to Transfer/Move a Docker Image to Another System?
Thursday, May 6, 2021
Ansible
Estoy realizando un proyecto en Ansible y cuando estas realizando ciertas tareas sencillas como instalar o copiar datos a los nodos donde estas configurado en el inventory es mas o menos sencillo. Pero cuando quieres ejecutar tareas específicar en un nodo y no en el resto etc. las tareas se complican.
una tarea sencilla seria que fallara en las máquinas donde tienes cierta version de S.O. por ejemplo para controlar la distribución se haria de la siguiente manera.
Otra de las tareas que me llevó tiempo es como te puedes impersonar en otro usuario para eso tienes que instalar un paquete
Thursday, January 28, 2021
Limitar el acceso por SSH de un usuario por Región o ciudad a través de su IP
¿Cómo detectar un inturso en tu equipo? existen diversas manera pero siempre he querido explorar la de localidad del usuario.
Muchas veces me he preguntado como puedo limitar a las personas que entrar en un equipo Unix por Zona geográfica.
Una solución pasa por un servicio externo que te diga de que region es la ip que se conecta el usuario.
Por supuesto si entra a través de una VPN de la region permitida el usuario podría entrar.
Con la api de https://ipwhois.io/documentation puedes resolver la localizacion de la ip
Con el comando
who --ips | awk '{ print $5 }'| xargs -t -I ARG curl -s http://ipwhois.app/json/ARG | jq .city
puedes ver desde que ciudad se está conectando los usuarios. Este comando lo podrías usar para enviar un correo o para limitar por ssh quien se puede conectar.
Tuesday, July 14, 2020
¿Qué tecnologías son las más demanadas en los perfiles SRE?
Como el perfil de SRE es un poco difuso, me he pasado unos días mirando ofertas de trabajo (1500 ofertas) para ver que habilidades técnicas están pidiendo las empresas a los perfiles DevOps y estos son los datos.
A mi me sorprende ver que estén pidiendo más Azure que AWS, cuando persaba que era justamente al contrario. Y que cómo lenguaje de programación estén pidiendo más Python
Sunday, February 2, 2020
When you want pass a parameter to exec docker instruction, you must used heredoc format in bash
#!/bin/bash
export variable="value second parameter"
export log=./log
docker exec -i dockernamecontainer /bin/bash <<EOF > $log/logfile.log 2>&1 &
cd /python/; python app.py firstparameter "$variable"
exit
EOF
the $variable is interpreted by heredoc format and replace command as
cd /python/; python app.py firstparameter value second parameter
Thursday, November 10, 2016
Error to download Java
Thank you for accessing the Oracle Software Delivery Cloud. Due to your country location, we are unable to process your request. If you have an active support contract, you may request physical media by either submitting a Service Request or calling Customer Support. If you wish to purchase or evaluate our products on a 30-day trial please contact the appropriate Sales Representative for your country.
Monday, October 17, 2016
crear una imagen con docker
Fichero Dockerfile
Para generar una imagen, se debe crea un fichero Dockerfile donde se indica la imagen de la que se parte. Para ver los listados de imágenes disponibles se pueden buscar en https://hub.docker.com/ En el fichero Dockfile se aplican los cambios que sea necesario para nuestro proyecto. Se realizan copia de ficheros mediante el comando ADD (deprecate) o COPY, se pueden establecer variables de entorno con el comando ENV y ejecutar comandos , instalación de paquetes, con el comando RUN.
Comandos de docker para crear un proyecto
Para llevar a cabo la creacion de un sistema docker he eguido los siguientes pasos
- Se crea una imagen, ver fichero Dockerfile, mediante el comando docker build -t usuario/proyecto .
- Se crea un volumen de datos docker volume create --name datosPersistentes para los volumenes
- Se crea el container docker run -p 8080:8080 -p 9001:9001 -v datosPersistentes:/data -v -i -t usuario/proyecto. Desde este momento ya se puede acceder al container. Ver si se dejan todos los puertos abiertos o simplemente el 8080 . Si se hace un control-c se para el container. Si se lanza con la opción -d se desvincula y no se parará el container y si se quiere parar con el comando docker stop idcontainercreado
- Se inicializa el container docker start idcontainercreado, cada vez que se quiera lanzar el container
Monday, June 13, 2016
Extraer texto de un pdf
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.2</version>
</dependency>
Simplemente se define un área de extraccion de texto. Lo malo que no sabes si las coordenadas del xy empiezan (0,0) arriba o abajo.
Cuando agregas un rectangulo a un PDAnnotationLink() las coorenadas de las Y empiezan en lo alto de la página
Cuando invocas PDFTextStripperByArea() las coordenadas de la Y empieza en el pié de la página
PDFTextStripperByArea stripper = new PDFTextStripperByArea();
stripper.setSortByPosition(true);
Rectangle2D rect = new Rectangle2D.Float(x, y, width, height);
stripper.addRegion("region", rect);
stripper.extractRegions(page);
stripper.getTextForRegion("region")
Para realizar el cambio de coordenada, se ha realizado esta función.
private Rectangle2D changeUpper2Lower(Rectangle2D rect ,PDPage page){
return new Rectangle2D.Float(
(float)rect.getX(),
(float)page.getMediaBox().getHeight() - (float) rect.getY()-(float)rect.getHeight(),
(float)rect.getWidth(),
(float)rect.getHeight());
}
Friday, January 8, 2016
instalacion de open stack
http://docs.openstack.org/developer/devstack/guides/single-machine.html
Basicamente es :
Añade un usuario
apt-get install sudo -y || yum install -y sudo
echo "stack ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
Haz login con este usuario
Descargate DevStack
sudo apt-get install git -y || sudo yum install -y git
git clone https://git.openstack.org/openstack-dev/devstack
cd devstack
pero tuve que modificar el script stackrc, el repositorio de git interno antes de lanzar stack.sh
GIT_BASE=${GIT_BASE:- git://git.openstack.org}
por
GIT_BASE=${GIT_BASE:- https://www.github.com}
el fichero de local.conf lo modifique como sigue lo creé así.
FLOATING_RANGE=192.168.1.252/30
FIXED_RANGE=10.11.12.0/24
FIXED_NETWORK_SIZE=256
FLAT_INTERFACE=em1
ADMIN_PASSWORD=*******
Lanza script
stack.sh
Ya se puede acceder a la web de openstack con normalidad
Reiciamos la máquina:
Si la máquina se ha reiniciado como es el caso, hay que lanzar con el usuario "stack" los siguientes comandos.
script /dev/null
Eso es para corregir un fallo del comando de screen que lo usa el script rejoin-stack.sh
Lanzamos el script
rejoin-stack.sh
Se crean como unas 20 consolas (comando screen) que se pueden navegar entre ellas con el "control-a " + "n" de next ó n = al numero de la consola
En la consola shell (control-a + 0 ) se lanza el comando
keystone-all
ya puedes entrar en la web de openstack
Friday, October 30, 2015
[Open Stack] error access with horizon
- First successful login:
2015-05-11 01:56:11,986 2327 INFO openstack_auth.forms Login successful for user "gtirloni". - Second unsuccessful login:
2015-05-11 10:24:30,717 2328 INFO openstack_auth.forms Login successful for user "gtirloni".
2015-05-11 10:24:30,718 2328 ERROR django.request Internal Server Error: /dashboard/auth/login/
Traceback (most recent call last):
File "/usr/lib/python2. 7/site- packages/ django/ core/handlers/ base.py" , line 132, in get_response
response = wrapped_callback( request, *callback_args, **callback_kwargs)
File "/usr/lib/python2. 7/site- packages/ django/ views/decorator s/debug. py", line 76, in sensitive_ post_parameters _wrapper
return view(request, *args, **kwargs)
File "/usr/lib/python2. 7/site- packages/ django/ utils/decorator s.py", line 110, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "/usr/lib/python2. 7/site- packages/ django/ views/decorator s/cache. py", line 57, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "/usr/lib/python2. 7/site- packages/ openstack_ auth/views. py", line 111, in login
**kwargs)
File "/usr/lib/python2. 7/site- packages/ django/ views/decorator s/debug. py", line 76, in sensitive_ post_parameters _wrapper
return view(request, *args, **kwargs)
File "/usr/lib/python2. 7/site- packages/ django/ utils/decorator s.py", line 110, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "/usr/lib/python2. 7/site- packages/ django/ views/decorator s/cache. py", line 57, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "/usr/lib/python2. 7/site- packages/ django/ contrib/ auth/views. py", line 51, in login
auth_login(request, form.get_user())
File "/usr/lib/python2. 7/site- packages/ django/ contrib/ auth/__ init__. py", line 102, in login
if _get_user_session_ key(request) != user.pk or (
File "/usr/lib/python2. 7/site- packages/ django/ contrib/ auth/__ init__. py", line 59, in _get_user_ session_ key
return get_user_model() ._meta. pk.to_python( request. session[ SESSION_ KEY])
File "/usr/lib/python2. 7/site- packages/ django/ db/models/ fields/ __init_ _.py", line 969, in to_python
params={'value' : value},
ValidationError: [u"'1550aa46bac146a0ac76e4801a 66e065' value must be an integer."]
Wednesday, March 11, 2015
Smart TV LG, la peor elección
El market es realmente malo y escaso de aplicaciones. Eliminan las aplicaciones y las vuelven a poner sin que digan nada. La aplicacion de TotalChannel que estoy pagando, ya la han eliminado 2 veces este mes que yo sepa.
No está AtresMedia ni Mitv. Es un verdadero desastre.
Tuesday, February 17, 2015
sony xperia C5303 se entrecorta el audio de las llamadas de voz
Saturday, February 14, 2015
yomvi, wuaki.tv y totalchannel, cual es la mejor.
Wuaki.tv y Yomvi tiene la posibilidad de ver películas y series solamente pagando la suscripción mensual. Seleccionas la pelicula o serie y la ves cuando quieres. TotalChannel no da esta posibilidad.
TotalChannel es un conjunto de canales al estilo de Imagenio de Movistar, tiene la opcion de un disco duro virtual con 100 Horas donde puedes programar grabar un programa serie o pelicula. El precio es menor que Imageneo pero mayor que Wuaki.tv o Yomvi. TotalChannel tiene anuncios, lo cual me ha sorprendido, ¡ Es una televisión de pago!
Resepcto a la calidad de servicio, Wuaki.tv falla en fines de semana, desde cortarse a mitad, lo cual es un suplicio, que es cuando tenemos tiempo para ver la televisión. Respecto Yomvi y TotalChannel no he encontrado este problema.
Respecto las plataformas soportadas, TotalChannel es la peor, tiene soporte solamente para PS3 y Smart TV de LG, pero no para plataformas Linux ni Android, lo cual es una pena también dicen que soporta Chrome Cast pero no lo puedo usar al tener solamente GNU con Linux y Android. Yomvi puede visualizarse en Android y las Smart Tv de LG, pero no tiene soporte para Chrome Cast. Wuaki.tv tiene soporte para Chrome Cast, PS, Android y Smart Tv de LG. Gana por goleada por plataforma soportadas.
El catálogo de Wuaki.tv selecction, que es la opción de ver películas y series solamente pagando la suscripción mensual es el mas extenso y mejor. Van cambiando cada mes algunas películas. El catálogo Yomvi tanto en películas y series ridículo.Puedes comprar o alquilar películas durante 48 horas, un concepto un poco antiguo heradado de los videoclubs. He alquilado películas que no he podido ver. Deberian plantearse el concepto de alquilar películas por el número de visualizaciones.
El cuanto a los idiomas y subtítulos, Wuaki.tv tiene la opción de seleccionarlos y funciona cosa que no sucede con Yomvi ni Total Channel, que si que te dan la opción, pero no funciona cuando pulsas la opción de cambia el audio. El catálogo de Wuaki.tv de peliculas que puedes ver en versión original con subtitulos al castellano podríamos decir que es un 25% de las películas.
En cuanto la integración con las plataformas, totalChannel tiene una gran integracion con los mandos de la LG, es la mas fácil de todas ellas. También es verdad que con wuaki.tv usas el móvil como mando, lo cual es mucho más cómodo.
En general todas las plataformas son realmente malas pero Wuaki.tv tiene el menor precio y para mí es la mejor de las 3 plataformas por su catálogo. Lo peor de ella es que el fin de semana se corta el servicio y es odios.
Lo mejor de las 3 plataformas es que puedes usar los sistemas si ningún tipo de compromiso de permanencia. Lo cual te puede servir parar testearlas y elegir la que mejor te convenga.
Thursday, November 20, 2014
Cómo crear una instancia de tomcat
- Copiamos el script de tomcat anterior con otro nombre y lo modificacamos con una varialble de la con el nombre de carpeta donde apuntará nuestra instancia INSTANCE=instance3 y modificamos esta nueva ruta de
CATALINA_BASE=/var/lib/$NAME/$INSTANCE - Creamos una carpeta de instance3. En ella creamos:
- una carpeta "conf" y copiamos en ella el contenido de la carpeta "conf" de tomcat.
- una carpteta "log"
- una carpeta "temp"
- una carpeta "wepapps"
- y creamos un link simbolico a "cache/tomcat7", llamado "work" mediante la instruccion "ln -s ../../../cache/tomcat7/instance3 work", si esta carpeta
- establecemos permisos a la carpeta "instance3" al usuario de tomcat
- modificamos el fichero conf/server.xml con el pueto que tendrá nuestra instancia.
- lanzamos el servicio de nuestra nueva instancia.
Friday, September 19, 2014
Hacer una ordenacion aleatoria
db.Collection
.find({},{_id:1})
.forEach(function(doc){
db.collection.
update(
{ _id: doc._id},
{ $set: { r: Math.random() } } ,
{ upsert: true }
);
});
después solo tienes que ordenar por r.
Wednesday, July 9, 2014
Error lucene Mahout and Carrot2
Tuesday, July 8, 2014
Regresion lineal con octave.
//crea matriz X = dlmread('datos.csv', ";");
//Como hemos comentado en la primera columna está la variable a predecir
Y Y =X(:,1);
//con convencion ponemos a 1 la primera columna.
X(:,1)=1;
//normalizamos dividiendo por el maximo valor de cada columna
X2 = bsxfun(@rdivide,X, max(X));
//calculamos el valor de theta a partir de esta formula matricial
theta=pinv(X'*X)*X'*Y;
//dibujamos los puntos por pantalla. plot(X2(:,2), X2*theta, '-')
//para saber el valor que predecimos si es correcto o no comprobar los valores de Y con los de
X*theta
//comprobar el error y ajustaremos los modelos matriciales para ver si el error se puede corregir. //añadiremos mas columnas al modelo X dependiendo el tipo de curva que se adapte a nuestro modelo
//por ejemplo añadiendo al modelo distintas columnas. Ten en cuenta que todo aquí son matrices y el tiempo de cálculo se eleva considerablemente.
=====Solucion =====
X = dlmread('datos.csv', ";");
Y =X(:,1);
X(:,1)=1;
X2 = bsxfun(@rdivide,X, max(X));
X3 = pow2(X2)
X4 = sqrt(X2)
X5 = pow2(X2,3)
X6 = [X2 X3 X4 X5]
theta6=pinv(X6'*X6)*X6'*Y; X6*theta6

