DNS: named-chroot comandos comunes

A la hora de administrar un servidor de nombres DNS sobre bind, debemos tener en cuenta algunos aspectos importantes.

Chroot

Es mejor aislar mediante chroot el servicio de DNS, de forma que los ataques sobre bind, no comprometan el resto de la máquina. En el caso de redhat enterprise linux, nos lo paquetizan como named-chroot

yum install -y named-chroot

Administración gráfica: webmin

Para evitar errores de escritura, la interfaz de webmin, es una ayuda para hacer cambios, y verificar la sintáxis de todos los archivos.

Comprobación de sintáxis tras los cambios named-checkconf

Si preferimos usar el editor de textos, antes de cargar el servicio y, ante la posibilidad de que haya errores de sintáxis, lo mejor es usar named-checkconf.

named-checkconf -t /var/named/chroot /etc/named.conf

Replicando los cambios mediante puppet

Si estamos usando puppet para replicar los cambios en distintos DNS, es mejor poner un indicador en los archivos que, tras un cambio, deben reiniciar el servicio de nombres.

 # add a notify to the file resource
  file { '/var/named/chroot/etc/named.conf':
    notify  => Service['named-chroot'],  # this sets up the relationship
    ......
  }

Impresoras HP en Debian 8.2

Para instalar nuestra impresora HP sobre un sistema operativo debian, necesitamos los siguientes paquetes:

apt-get install cups hplip

En este caso, vamos a instalar una impresora wireless: hp 3055.

En el gestor de impresoras de X, tenemos que crear la configuración de la impresora.

system-config-printer

En gnome también aparece escribiendo en el panel de búsqueda: "Impresora"

Impresora > Añadir Impresora > Añadir IP

 

Windows: Configurar un cluster con quorum en unidad compartida de red.

Al trabajar con cluster de microsoft en máquinas virutales, es imposible crear un disco de quorum compartido entre 2 máquinas sin que haya dependencia del host. Renunciar a los movimientos de máquinas virtuales entre hosts, hace imposible el mantenimiento. Por ello, es mejor configurar las máquinas windows en cluster con el disco de quorum en una unidad de red.

Creación del cluster

Cada una de las máquinas tendrá sus discos de datos, configurados como discos normales.

  • win1

  • win2

Se crea un cluster de conmutación por error, con los dos nuevos nodos windows.

Cuando ya lo tenemos, tenemos que crear su nuevo disco de quorum.

Seleccionar el testigo de quorum.

ms.quorum.error018

Configurar un testigo de recurso compartido de archivos.

ms.quorum.error023

Configuramos la ruta de red compartida.

ms.quorum.error024

En este punto, nos puede dar un error de permisos de quorum.ms.quorum.error025

El problema radica en que en windows, es la cuenta del sistema local quien está ejecutando el servicio de cluster. Esta cuenta local (distinta para cada nodo del cluster) no tiene permisos sobre la carpeta compartida del quorum.

Forzando el servicio de cluster a ejecutar con una cuenta de dominio que tenga permisos sobre la unidad de red, ya no hay problema en configurar el quorum.

También se puede optar por otra opción, que es dar permisos a los usuarios de máquina local que ejecutarán el servicio, sobre el almacenamiento en red, de forma que tengan acceso de lectura y escritura sobre los archivos del quorum.

Debian: Lenovo Thinkpad Edge e530. Drivers Wifi.

Sources con non-free

deb http://ftp.es.debian.org/debian/ jessie main contrib non-free
deb-src http://ftp.es.debian.org/debian/ jessie main contrib non-free

deb http://security.debian.org/ jessie/updates main contrib 
deb-src http://security.debian.org/ jessie/updates main contrib

deb http://ftp.es.debian.org/debian/ jessie-updates main contrib
deb-src http://ftp.es.debian.org/debian/ jessie-updates main contrib

Instalación de firmware:

apt-get install firmware-iwlwifi

Instalación Eclipse Mars en debian 8.2

Los paquetes de debian para eclipse siguen increíblemente desactualizados.

Para instalar una versión Mars de eclipse sobre Debian, lo mejor es desinstalar versiones anteriores:

apt-get remove eclipse

# Si están instalados de fuentes:
whereis eclipse | xargs rm -rf

A continuación, bajar el paquete tar.gz de eclipse. No recomiendo usar el nuevo instalador, la verdad.

E instalar a mano.

Nosotros hemos optado por descomprimirlo en /usr/local/share y hacer un enlace simbólico desde /usr/bin

tar -xvzf eclipse-java-mars-1-linux-gtk-x86_64.tar.gz
sudo mv eclipse/ /usr/local/share/
sudo ln -l /usr/local/share/eclipse/eclipse eclipse

Para instalar en esta versión plugins como goclipse, se puede hacer de forma bastante fácil:

 

En el listado, ya aparece el plugin goclipse, y se instala de forma desatendida.

 

Aplicación web en Go: Tiempos de espera autobús en distintas paradas.

Siguiendo con el artículo de la Api de la EMT Madrid, vamos a ver cómo hacer un servidor de aplicaciones en Go para móvil.

Entorno de programación

Lo primero es configurar nuestro editor. En otros casos, yo he usado sublime text para editar Go. En este caso, he optado por eclipse y el plugin para go:

https://github.com/GoClipse/goclipse/blob/latest/documentation/Installation.md#installation

En el servidor de desarrollo, instalamos go:

 wget -c https://storage.googleapis.com/golang/go1.5.1.linux-amd64.tar.gz
tar -C /usr/local -xzf go*.tar.gz
 echo export PATH=$PATH:/usr/local/go/bin >> /etc/profile
# DEBIAN:
export PATH=$PATH:/usr/local/go/bin >> /etc/bash.bashrc

Crear la aplicación web

Recomiendo leer el tutorial de Google para comenzar a escribir aplicaciones web.

 mkdir myproj
mkdir myproj/src
mkdir myproj/doc
# Creamos el archivo con la aplicación web:
touch myproj/src/busdm.go

Para compilar

go build  myproj/src/busdm.go
go run myproj/src/busdm.go

Para ver los resultados, si hemos usado el puerto 8080:

http://localhost:8080/

El algoritmo

El algoritmo es bastante sencillo suma a los autobuses el tiempo andando, y da el menor tiempo posible. Quita todos aquellos autobuses que llegarán a parada antes de que lleguemos andando.

Métodos:

  • Decide: Devuelve la parada hacia la que hay que andar y el autobús
  • GetStopTime (IdStop): devuelve el tiempo del menor autobús. Hace la llamada al servicio de la EMT, y devuelve una lista (IdStop, IdBus, Time).
  • GetWalkingTime (IdStop): devuelve el tiempo que nos cuesta llegar andando.

GetStopTime

 Estructura JSON

Desde el ejemplo, se puede sacar la estructura JSON para hacer el parsing  http://json2struct.mervine.net/

GetWalkingTime

 

Decide

Servicios web EMT (Madrid) : Uso de Api

Vamos a ver cómo empezar a trabajar con los servicios web que pone a nuestra disposición EMT Madrid.

En nuestro caso, queremos hacer sobre la Api de la EMT, un gestor muy sencillo, que tenga en cuenta, además, del tiempo estimado de al autobús a la parada, nuestro tiempo andando a varias paradas distintas, de cara a decidir hacia qué parada debemos caminar.

Toda la información de los métodos disponibles están en:

http://opendata.emtmadrid.es/Servicios-web/GEO

En nuestro caso, vamos a usar la llamada Get Arrive Stop con los números de parada.

Get Arrive Stop:     https://openbus.emtmadrid.es:9443/emt-proxy-server/last/geo/GetArriveStop.php

El formato de respuesta es una lista de Arrives

{"arrives":[{"stopId":608,"lineId":"25","isHead":"False","destination":"CASA DE CAMPO","busId":"4063","busTimeLeft":0,"busDistance":0,"longitude":-3.7207142044687,"latitude":40.415443621459,"busPositionType":0},{"stopId":608,"lineId":"39","isHead":"False","destination":"SAN IGNACIO","busId":"4105","busTimeLeft":163,"busDistance":815,"longitude":-3.7319667753991,"latitude":40.412296871723,"busPositionType":1},{"stopId":608,"lineId":"25","isHead":"False","destination":"CASA DE CAMPO","busId":"4073","busTimeLeft":372,"busDistance":1604,"longitude":-3.7124736587359,"latitude":40.419499463385,"busPositionType":1},{"stopId":608,"lineId":"39","isHead":"False","destination":"SAN IGNACIO","busId":"4111","busTimeLeft":417,"busDistance":1833,"longitude":-3.7127886611517,"latitude":40.420772982078,"busPositionType":1},{"stopId":608,"lineId":"138","isHead":"False","destination":"ALUCHE","busId":"4182","busTimeLeft":537,"busDistance":2014,"longitude":-3.7112167000793,"latitude":40.423116470486,"busPositionType":1},{"stopId":608,"lineId":"33","isHead":"False","destination":"CASA DE CAMPO","busId":"4234","busTimeLeft":920,"busDistance":2745,"longitude":-3.73103140059,"latitude":40.41264537381,"busPositionType":1},{"stopId":608,"lineId":"138","isHead":"False","destination":"ALUCHE","busId":"4181","busTimeLeft":999999,"busDistance":3191,"longitude":-3.7266414712365,"latitude":40.411397511188,"busPositionType":1},{"stopId":608,"lineId":"33","isHead":"False","destination":"CASA DE CAMPO","busId":"4232","busTimeLeft":999999,"busDistance":7818,"longitude":-3.7622555004248,"latitude":40.404643143841,"busPositionType":1}]}


En la documentación de la API se pueden ver el resultado

stopId Stop Id int
lineId Line Id string
isHead true|false Stop is header for this line string
destination Destination text string
busId Bus id string
busTimeLeft Time to arrive in seconds (if all 9, means more than 20 minutes) (if 0 bus in the stop) int
busDistance Distance in meters int
latitude Latitude in decimal degrees double
longitude Longitude in decimal degrees double
busPositionType Real or estimate int

Los únicos campos que vamos a usar nosotros son:

  • StopID
  • lineID
  • busTimeLeft.    Todo 9 maś de 20 minutos. 0 -> Autobús en parada.

Esta llamada, devuelve, para cada parada, el tiempo de los dos autobuses más cercanos.

 

Vmware Vcenter Migración VSCA 5.5 a VSCA 6

1. Por si acaso, preparamos la vuelta atrás.

Restauración a nivel de máquina

  • Creamos un clon del servidor y apuntamos el host ESXi en el que está ejecutando.

  • Paramos los servicios de DRS para prevenir que las máquinas se muevan de host y poder restaurar en poco tiempo.

Restauración a nivel de datos

  • Creamos una copia del inventario en powershell con inventory snapshot. Aunque no se copian ni host profiles ni custom specifications, al menos nos da un punto de restauración a nivel de inventario de máquinas bastante potente.

2.Comenzando la migración.

Elegimos una máquina windows donde se hará la migración. Esta máquina tendrá que tener visibilidad directa con los hosts ESXi y con el vsphere vcenter 5.X que vamos a migrar. A nivel de seguridad, debe tener los mismos puertos abiertos que el vcenter 5.X.

En la página de vmware, se puede descargar la imagen  de vsca vSphere 6.0

En un cliente windows virtual asignamos la ISO de vsca.

vmware.migration.01

Este cliente, recomendamos que tenga visibilidad directa tanto con hosts esxi, como con el servidor vcenter que se va a migrar.

En nuestro caso, hemos puesto 2 interfaces de red.

– Interfaz de red 1 de gestión, en la misma subred que el antiguo servidor vcenter VSCA 5.5

– Interfaz de red 2 (sin puerta de enlace) en la misma subred que el servidor ESXi al que vamos a encargar la migración.

Instalamos Vmware-ClienIntegrationPlugin-6.0.0 en el cliente windows que usaremos para actualizar vsca.

vmware.migration.02

Abrimos un navegador a la siguiente dirección: file:///D:/vcsa-setup.html

vmware.migration.03

Pinchamos sobre upgrade y configuramos nuestro host vmware en el que vamos a instalar la imagen.

vmware.migration.04

Si sale el error de Platform services controller, es necesario cambiar el tipo de servidor:

Existing Appliance Type → Embedded Platform Services Controller.

vmware.migration.05

https://pubs.vmware.com/vsphere-60/index.jsp#com.vmware.vsphere.upgrade.doc/GUID-6A5C596D-103E-4024-9353-5569263EB427.html

Pasado este punto, el asistente sigue. Tarda aproximadamente 40 minutos, migrando todo el inventario, profiles, custom specifications y datos de rendimiento.

Cuando termina, apaga el antiguo vcenter, se queda el mismo con la IP del antiguo vcenter y la migración está completada.

Have fun!

Debian 8: Compilar nspluginwrapper

Compilar nspluginwrapper en debian 8, ha sido todo un reto. No suelo compilar paquetes, por lo que me faltaban casi todas las librerías de desarrollo.

Descarga del paquete nsplugin wrapper.  La última versión es del año 2011, lo que inquieta un poco, la verdad.

En el equipo ideal, esto funciona a la primera.

$ ./configure
$ make
# make install

Estos son los errores sucesivos que he ido encontrando yo en ,/configure:

Glibc environment not found

GTK+ environment not found

cURL environment not found

X11/Xt environment not found

apt-get install libglib2.0-dev
apt-get install  libgtk2.0-dev libcurl4-gnutls-dev libxt-dev

Resueltos los errores de paquetes, comenzamos con los errores de compilación:

/usr/include/features.h:374:25: fatal error: sys/cdefs.h: No existe el fichero o el directorio

Seguimos instalando

apt-get install libc6-dev-amd64

Y otro

/usr/include/c++/4.9/new:39:28: fatal error: bits/c++config.h: No existe el fichero o el directorio 

En este caso, el fichero está en n copias a lo largo del sistema

find /usr -name c++config.h
 
/usr/share/gccxml-0.9/GCC/4.8/bits/c++config.h
/usr/share/gccxml-0.9/GCC/4.7/bits/c++config.h
/usr/share/gccxml-0.9/GCC/4.6/bits/c++config.h
/usr/share/gccxml-0.9/GCC/4.4/bits/c++config.h
/usr/share/gccxml-0.9/GCC/4.9/bits/c++config.h
/usr/include/x86_64-linux-gnu/c++/4.9/bits/c++config.h

Tenemos G++ en versión 4.9

g++ --version
g++ (Debian 4.9.2-10) 4.9.2

Añadimos la ruta a la variable de entorno de G++

export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/include/x86_64-linux-gnu/c++/4.9/

Tampoco se puede encontrar lsupc++

/usr/bin/ld: no se puede encontrar -lsupc++

Instalamos las librerías standard de C para nuestra versión de g++

apt-get install lib32stdc++-4.9-dev

Fallo al enlazar con nppplayer:

/usr/bin/ld: npplayer-npw-player.o: referencia sin definir al símbolo 'g_thread_init'

Se añade en Makefile el flag para lgthread-2.0

npplayer_LIBS    += $(libpthread_LIBS) $(libsocket_LIBS) -ldl -lgthread-2.0

¡Por fin pasamos el make!

Último paso, y ya tenemos ndiswrapper disponible en nuestro sistema.

make install

 

 

Powercli: Clonar lista de máquinas eligiendo como destino el datastore que tiene mayor capacidad

Para agilizar las clonaciones de listas de máquinas, es necesario usar un powercli, que, además, elija como destino el datastore que tenga mayor espacio disponible.

VMWare ESXi
VMWare ESXi

Para ordenar los resultados de datastore en función del espacio disponible:

     $datastorelist = Get-Datastore -Location $DatastoreCluster | sort -descending FreeSpaceMB

 

En nuestro caso, tenemos los datastore configurados como un datastorecluster, pero,en el caso de no tener, podríamos usar como Location directamente el nombre del cluster o del datacenter donde queremos seleccionar el datastore.

El script completo, está disponible en github.

 
foreach ($clonename in $new_vm)		
	{
    #Select datastore with more space:
    # $datastorelist = Get-Datastore -Location $Datacenter | sort -descending FreeSpaceMB
    # Use in case there are datastore clusters
    $datastorelist = Get-Datastore -Location $DatastoreCluster | sort -descending FreeSpaceMB
    $datastore = $datastorelist[0].Name
    "Clone $clonename in $datastore"

	if (New-VM -Name $clonename -ResourcePool $respool -VM $sourceVM -Location $folder -Datastore $datastore -DiskStorageFormat Thick )
		{"DONE $clonename"}
	else
		{"Something wrong with cloning"}
}