VMware P2V: Unable to query the live Linux source machine

Fuente: Link y Link

VMware P2V: Unable to query the live Linux source machine , tutorial de administracion de servidores en linux, aprende con giganetic totalmente gratis. (By Giganetic)

Vamos a mirar la posible solución a este problema, que se nos presenta en el instante que intentamos convertir un procedimiento Linux de una máquina física a una máquina virtual (vmware p2v) de VMware con la herramientaVMware vCenter Converter Standalone.
El desconfianza se reproduce después de introducir los datos correctos de conexión SSH al servidor. Estos datos vemos que son correctos porque si ponemos unos incorrectos salta el error. Además, en la máquina que intentamos migrar si hacemos un tcpdump vemos que efectivamente está llegando bien.

Este es el error que recibimos en el primer paso de la conversión:
VMware: Unable to query the live Linux source machine

VMware P2V: Unable to query the live Linux source machine
En nuestro caso, el desconfianza no tenía que mirar ni con el firewall del sistema, ni con restricciones TCP Wrappers, ni con SELinux, etc. El desconfianza tenía principio en las restricciones establecidas en la partición temporal /tmp. Nosotros montamos /tmp con los bits noexec y nosuid. Algo común en servidores con cPanel:

/usr/tmpDSK on /tmp type ext3 (rw,noexec,nosuid,loop=/dev/loop0)

Al parecer VMware intenta ejecutar y hacer acciones en /tmp, y necesario a esto no puede. Podemos solucionarlo entonces montando /tmp temporalmente con los bits de ejecución:

# mount -o remount  -t ext3 /usr/tmpDSK /tmp -o rw,exec,nodev -o loop

Y en el instante que acabemos securizar de nuevo:

# mount -o remount  -t ext3 /usr/tmpDSK /tmp -o rw,noexec,nosuid -o loop
Advertisements

Monitoring Weblogic with Munin

Primero de todo tenemos que extraer los datos de HEAP, CPU y Daemons & Threads del adminserver de nuestro dominio Weblogic. Posteriormente dejamos estos datos en un fichero para que el script de munin (3 en total) recoja dichos datos y sean enviados al servidor.

Extraer datos de Weblogic.

Para hacer esto usaremos el conocido jython. Para hacerlo crearemos un script en el cron que se ejecute cada 5 min;

 

crontab -l

*/5 * * * * /usr/share/munin/scripts/weblogic_plugin.sh > /dev/null 2>&1

 

Este script se conectará al Admin, ira por cada uno de los managed server (incluso el Admin). Y sacara los datos dejándolos en un fichero de texto. En nuestro caso;

/wls/export_wls_status.sh

El script weblogic_plugin.sh es;

/opt/jrmc/bin/java -cp /opt/bea/wls/weblogic.jar weblogic.WLST /usr/share/munin/scripts/weblogic_py_script_DOMAIN1.py  > /wls/export_wls_status

/opt/jrmc/bin/java -cp /opt/bea/wls/weblogic.jar weblogic.WLST /usr/share/munin/scripts/weblogic_py_script_DOMAIN2.py >> /wls/export_wls_status

 

Nota!!

Quizás tendréis que modificar el directorio del binario de java (/opt/jrmc/bin/) así como del fichero weblogic.jar (/opt/bea/wls/) en función de vuestra configuración.

 

Este script de cron sacará todos los datos, pero el que realmente se conecta al Weblogic es el script weblogic_py_DOMAIN.py Este script es;

username = ‘usuario’

password = ‘password’

URL=’t3://localhost:1111′

connect(username,password,URL)

domainConfig()

domini=cmo.getName()

serverList=cmo.getServers();

domainRuntime()

cd(‘/ServerLifeCycleRuntimes/’)

for server in serverList:

name=server.getName()

cd(name)

serverState=cmo.getState()

cd(“/ServerRuntimes/”+server.getName()+”/JVMRuntime/”+server.getName())

sizeHP=cmo.getHeapSizeCurrent()

usedHP=cmo.getUsedHeap()

proces=cmo.getAllProcessorsAverageLoad()

timegc=cmo.getLastGCEnd()

daemon=cmo.getNumberOfDaemonThreads()

thread=cmo.getTotalNumberOfThreads()

 

print domini,’PRO’,  name,’SizeHPWLS ‘,sizeHP

print domini,’PRO’,  name,’UsedHPWLS ‘,usedHP

print domini,’PRO’,  name,’ProcesWLS ‘,proces

print domini,’PRO’,  name,’TimeGCWLS ‘,timegc

print domini,’PRO’,  name,’DaemonWLS ‘,daemon

print domini,’PRO’,  name,’ThreadWLS ‘,thread

 

domainConfig()

domainRuntime()

cd(‘/ServerLifeCycleRuntimes/’)

 

Una vez tenemos los datos en un fichero de texto podremos tratarlo. Dejo un ejemplo de cómo se queda el fichero con los datos:

 

DOMAIN1 PRO AdminServer SizeHPWLS  536870912

DOMAIN1 PRO AdminServer UsedHPWLS  454807648

DOMAIN1 PRO AdminServer ProcesWLS  0.0806008984095334

DOMAIN1 PRO AdminServer TimeGCWLS  1380632745493

DOMAIN1 PRO AdminServer DaemonWLS  51

DOMAIN1 PRO AdminServer ThreadWLS  52

DOMAIN1 PRO DOMAIN1_01 SizeHPWLS  1610612736

DOMAIN1 PRO DOMAIN1_01 UsedHPWLS  1199548792

DOMAIN1 PRO DOMAIN1_01 ProcesWLS  0.08062796813666061

DOMAIN1 PRO DOMAIN1_01 TimeGCWLS  1380629744340

DOMAIN1 PRO DOMAIN1_01 DaemonWLS  42

DOMAIN1 PRO DOMAIN1 _01 ThreadWLS  43

 

Para tratar el fichero crearemos un script en /usr/share/munin/plugins/ con el nombre que se quiera, en mi caso MANAGED_DOMAIN1_HEAP

El fichero básicamente hace un grep del dato que se quiera y lo devuelve. Para el HEAP busca SizeHPWLS, para daemons y threads DaemonWLS  y ThreadWLS y para CPU busca ProcesWLS

 

#!/bin/sh

case $1 in

config)

cat <<‘EOM’

graph_title Managed Servers Heap DOMAIN1_1

graph_vlabel HEAP USE/MAX

DOMAIN1_1_Size.label DOMAIN1_1 Max

DOMAIN1_1_Use.label DOMAIN1_1 Use

graph_scale yes

graph_category weblogic

graph_info Grafica Weblogic DOMAIN1_1 Heap Managed Servers

EOM

exit 0;;

esac

echo -n “P DOMAIN_1_Size.value ”

grep SizeHPWLS /wls/export_wls_status | grep DOMAIN1_1 | awk ‘{print $5}’

echo -n ” DOMAIN_1_Use.value ”

grep UsedHPWLS /wls/export_wls_status | grep DOMAIN1_1| awk ‘{print $5}’

 

Creamos el enlace simbólico;

cd /etc/munin/plugins

ln –s MANAGED_DOMAIN1_HEAP  /usr/share/munin/plugins/MANAGED_DOMAIN1_HEAP

Reiniciamos el agente

/etc/init.d/munin-node restart

Y en unos minutos ya lo tenemos en nuestro servidor

 

HEAP

Descarga de scripts: Weblogic & Munin Scripts

 

Munin monitoring How To

Munin es un software para monitorizar i graficar que nos permite analizar el estado de nuestros sistemas.

munin

Introducción

Funciona como un Cacti o Graphite pero a diferencia de estos dos Munin funciona con agentes. Esto podría ser un hándicap pero veremos que nos va ayudar mucho en la instalación y mantenimiento del entorno.

Hay dos partes, la cliente “munin-node” y la servidor “munin”

Aquí tenemos una imagen que nos va ayudar a entender cómo funciona.

 

munin design

El munin-master (servidor) se ejecuta cada 5 minutos desde el crond i ejecuta varios scripts;

Munin-update: Este se encarga de leer el fichero /etc/munin/munin.conf y recoger todos los clientes. Posteriormente se conecta por el puerto 4949/tcp i le dice al “munin-node” que ejecute todos los scripts que tiene en /etc/munin/plugins/ y le devuelva el resultado.

Munin-limites: Este analiza los datos obtenidos de los clientes y revisa si algunos de ellos está por encima del umbral marcado en la gráfica. En caso de ser así actualiza el estado de la gráfica  a “Warning” o “Critical”.

Munin-html: Se encarga de actualizar la web. Si ponemos nuevos nodos o dominios este actualizara la web. (Este no hace nada ejecutándose desde cron si está configurado como cgi)

Munin-graph: “La joya de la corona”. Usando las librerías de RRD-Tool y con los valores de “munin-update” se encarga de generar las gráficas. (Este no hace nada ejecutándose desde cron si está configurado como cgi)

 

Para “munin-html” y “munin-graph” los configuraremos como CGI. Las diferencias son;

Cron: Cuando lo configuramos como cron estos scripts generan todas las web y todas las gráficas cada vez que se ejecuta el script. En caso de tener unos 50 nodos en 5 minutos hay tiempo suficiente para realizar la tarea.

CGI: Configuraremos como CGI cuando tengamos muchos nodos. En mi instalación actualmente tengo 300 nodos con un total de 70.000 ficheros rrd y en 5 minutos no hay tiempo para procesarlo todo. Con esto lo que hacemos es que cada vez que entres en la web “munin-html” generará dicha web y cada vez que entres en un nodo “munin-graph” generará las gráficas que quieres visualizar.

Instalación (servidor)

En este caso vamos a realizar una instalación en una RedHat 5.9 64bits utilizando EPEL.

Registramos la maquina en RedHatNetwork, RedHat Satellite o usando un cd. (Basicamente necesitamos poder ejecutar yum)

 

Instalamos EPEL

cd /tmp/

wget http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

rpm -Uvh /tmp/epel-release-5-4.noarch.rpm

 

Instalamos munin y munin-node (asi también monitorizamos en servidor)

 

yum install httpd mod_fcgid munin munin-node

 

2

 

chkconfig munin on

chkconfig munin-node on

 

Configuración (servidor)

El fichero principal de configuración es /etc/munin/munin.conf

Lo modificaremos poniendo solo los siguientes datos;

htmldir /var/lib/www/html/munin  #### (es el directorio de la web)

logdir /var/log/munin

includedir /etc/munin/conf.d

graph_period minute

graph_strategy cgi                         ##### Tiene que estar en cgi no en cron

cgiurl_graph /munin-cgi/munin-cgi-graph   #### Es la URL donde tiene los scripts de CGI (lo veremos al configurar el apache)

html_strategy cgi                            ##### Tienen que estar en cgi no en cron

max_processes 100                       ##### Por defecto viene en 16. Son los procesos que creara al ejecutar el munin-update. Si tienes mucha maquina pon un valor más alto. Aun así es bueno realizar varias pruebas hasta encontrar un buen valor.

##### Esto es un ejemplo de cómo crear un nodo cliente. Estos nodos son los que el script “munin-update” se conecta

[NODO_CLIENET.TEST]

address 192.168.0.1

use_node_name yes

 

Para más información de posibles configuraciones (LINK) http://munin-monitoring.org/wiki/munin.conf

 

Ahora ya tenemos configurado el munin para CGI, pero nos queda el apache…

Configuración APACHE para CGI:

En la configuración del apache tenemos que notificarle donde están los scripts para CGI.

Vamos al fichero /etc/httpd/conf.d/munin.conf

Comentaremos las líneas para entender posibles modificaciones.

 

<VirtualHost *:443> ### En mi caso uso SSL con certificado

SSLEngine on

SSLCertificateFile /etc/httpd/cert/selfsigned/munin.node.es.crt

SSLCertificateKeyFile /etc/httpd/cert/selfsigned/keys/ munin.node.es.key

ServerName munin.node.es

DocumentRoot /var/lib/www/html ###Importante que sea el mismo que hemos puesto en el fichero /etc/munin/munin.conf

<IfModule !mod_rewrite.c>

Alias /munin-cgi/munin-cgi-html/static /var/lib/www/html/munin/static ## Lo que hacemos en indicarle donde esta la web (parte estatica). Esto se ejecuta cada vez que entramos en la web

RedirectMatch ^/$ /munin-cgi/munin-cgi-html/

</IfModule>

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteRule ^/favicon.ico /var/lib/www/html/munin/static/favicon.ico [L]

RewriteRule ^/static/(.*) /var/lib/www/html/munin/static/$1          [L]

# HTML (Cada vez que llamemos a una html este llamara al script munin-cgi-html

RewriteRule ^(/.*.html)?$           /munin-cgi/munin-cgi-html/$1 [PT]

# Images (Cada vez que solicitemos una grafica este llamara al script munin-cgi-graph

 

RewriteRule ^/munin-cgi/munin-cgi-graph/(.*) /$1

RewriteCond %{REQUEST_URI}                 !^/static

RewriteRule ^/(.*.png)$  /munin-cgi/munin-cgi-graph/$1 [L,PT]

</IfModule>

# Nos tenemos que asegurar que los script que están en /var/lib/www/cgi-bin/ son ejecutables

ScriptAlias /munin-cgi/munin-cgi-graph /var/lib/www/cgi-bin/munin-cgi-graph

<Location /munin-cgi/munin-cgi-graph>

Options +ExecCGI

<IfModule mod_fcgid.c>

SetHandler fcgid-script

</IfModule>

<IfModule mod_fastcgi.c>

SetHandler fastcgi-script

</IfModule>

<IfModule !mod_fastcgi.c>

<IfModule !mod_fcgid.c>

SetHandler cgi-script

</IfModule>

</IfModule>

Allow from all

</Location>

ScriptAlias /munin-cgi/munin-cgi-html /var/lib/www/cgi-bin/munin-cgi-html

<Location /munin-cgi/munin-cgi-html>

Options +ExecCGI

<IfModule mod_fcgid.c>

SetHandler fcgid-script

</IfModule>

<IfModule mod_fastcgi.c>

SetHandler fastcgi-script

</IfModule>

<IfModule !mod_fastcgi.c>

<IfModule !mod_fcgid.c>

SetHandler cgi-script

</IfModule>

</IfModule>

Allow from all

</Location>

<IfModule !mod_rewrite.c>

<Location /munin-cgi/munin-cgi-html/static>

Options -ExecCGI

SetHandler None

</Location>

</IfModule>

</VirtualHost>

 

Configuración (cliente)

Para el cliente editaremos el fichero /etc/munin/munin-node.conf y pondremos la IP del host servidor como una expresión regular;

allow ^192.168.0.2$

 

Información oficial de configuración de munin-node (LINK) http://munin-monitoring.org/wiki/munin-node.conf

 

debmirror, Repositorio local para paquetes en Debian Squeeze

Vamos a crear un repositorio local con debimirror para debian, en nuestro caso squeeze.

Primero de todo necesitamos un filesystem con espacio suficiente para poder dejar todos los paquetes necesarios. En mi caso lo dejamos con un FS de 100Gb ylo llamo /DADES2/mirror

Vamos a instalar el debimirror;

apt-get install debmirror

Una vez instalado, modificamos el script creado por Gary Sandi desde el este link

#!/bin/sh

ARQUITECTURA=i386

METODO=http

RAMA=lenny

RAMAS=lenny,squeeze,sid

HOST=ftp.fr.debian.org

HOST_SEGURIDAD=security.debian.org

HOST_MULTIMEDIA=ftp.debian-multimedia.org

 

DIR_MIRROR=/home/debian/debian

DIR_SEGURIDAD=/home/debian/updates

DIR_MULTIMEDIA=/home/debian/multimedia

 

SECCIONES=main,contrib,non-free

SECCION=main

 

echo "==================================================================="

echo "Actualizando los repositorios PRINCIPALES; main, contrib, non-free"

echo "==================================================================="

echo ""

debmirror -a ${ARQUITECTURA} 

-s ${SECCIONES} 

-h ${HOST}/debian 

-d ${RAMA} -r / --progress 

-e ${METODO} --ignore-release-gpg --nosource 

${DIR_MIRROR}

 

echo "====================================================================="

echo "Actualizando los repositorios de SEGURIDAD; main, contrib, non-free"

echo "====================================================================="

echo ""

debmirror -a ${ARQUITECTURA} 

-s ${SECCIONES} 

-h ${HOST_SEGURIDAD} 

-d ${RAMA}/updates -r /debian-security --progress 

-e ${METODO} --ignore-release-gpg --nosource 

${DIR_SEGURIDAD}

 

echo "==================================================================="

echo "Actualizando los repositorios MULTIMEDIA; main"

echo "==================================================================="

echo ""

debmirror -a ${ARQUITECTURA} 

-s ${SECCION} 

-h ${HOST_MULTIMEDIA} 

-d ${RAMAS} -r / --progress 

-e ${METODO} --ignore-release-gpg --nosource 

${DIR_MULTIMEDIA}

 

El script lo modificamos segun necesitad. En mi caso solo he modificado los siguientes parametros;

RAMA=squeeze

RAMAS=squeeze

HOST=ftp.caliu.cat

HOST_SEGURIDAD=security.debian.org

HOST_MULTIMEDIA=ftp.debian-multimedia.org


DIR_MIRROR=/DADES2/mirror

DIR_SEGURIDAD=/DADES2/mirror/updates

DIR_MULTIMEDIA=/DADES2/mirror/multimedia

Establecemos los permisos con un chmod +x nombre_script.sh

Ejecutamos y nos empieza a descargar todos los paquetes necesarios para hacer el mirror;

.................

[ 29%] Getting: pool/main/i/ibus/ibus-gtk_1.3.7-1_i386.deb... ok

[ 29%] Getting: pool/main/i/ibus/ibus_1.3.7-1_i386.deb... ok

[ 29%] Getting: pool/main/i/ibus/libibus-dev_1.3.7-1_i386.deb... ok

[ 29%] Getting: pool/main/i/ibus/libibus2_1.3.7-1_i386.deb... ok

[ 29%] Getting: pool/main/i/ibus/python-ibus_1.3.7-1_all.deb... ok

[ 29%] Getting: pool/main/i/ibutils/ibutils_1.2-OFED-1.4.2-1_i386.deb... ok

.................

Una vez finalizado (Tiene que decargar unas 60Gb) ya podemos configurar el apache.

apt-get install apache2

Editamos el fichero de configuración;

vim /etc/apache2/sites-enabled/defaul-000

Y modificamos el campo DocumentRoot con el directorio de nuestro repositorio;

DocumentRoot /DADES2/mirror/

Para poder configurar los clientes necesitamos configurar un servicio web o ftp para tener acceso a los ficheros. En nuestro caso, lo hacemos por http.

Instalamos un apache y creamos dos enlaces simbolicos en /var/www para que al conectarse a la web existan dos directorios, el debian y debian-security

Creamos los enlaces simbolicos

cd /var/www
ln -s /DADES/debian-repository/debian debian
ln -s /DADES/debian-repository/debian-security debian-security

 Para configurar los clientes solo tenemos que modificar el /etc/apt/source.list con los datos del nuevo servidor. Si antiguamente teniamos;

deb http://ftp.caliu.cat/debian/ squeeze main
deb-src http://ftp.caliu.cat/debian/ squeeze main

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

# squeeze-updates, previously known as ‘volatile’
deb http://ftp.caliu.cat/debian/ squeeze-updates main
deb-src http://ftp.caliu.cat/debian/ squeeze-updates main

 

Ahora tendremos;

deb http://SERVIDOR_INTERNO/debian/ squeeze main
deb-src http://SERVIDOR_INTERNO/debian/ squeeze main

deb http://SERVIDOR_INTERNO/ squeeze/updates main
deb-src http://SERVIDOR_INTERNO/ squeeze/updates main

# squeeze-updates, previously known as ‘volatile’
deb http://SERVIDOR_INTERNO/debian/ squeeze-updates main
deb-src http://SERVIDOR_INTERNO/debian/ squeeze-updates main

 

 

VMWare Tools en Debian Squeeze

Vamos a simplificar, si queremos instalar las VMWare Tools en una Debian Squeeze;

 vi /etc/apt/sources.list

añadimos;

deb http://ftp.es.debian.org/debian/ squeeze main contrib

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

Ejecutamos;

apt-get update 

apt-get install open-vm-tools open-vm-source 

module-assistant auto-install open-vm -i

 

Listo 😉

OpenVPN netsh command failed: returned error code 1

Estoy preparando el manual de instalación de OpenVPN en Debian Squeeze y al finalizar todo el proceso solo me quedaba realizar la primera conexión pero me he encontrado una sorpresa. En el caso de OpenVPN 1.0.3 para Windows (en este caso Windows 7) nos aparece un error al realizar la conexión;

TAP-WIN32 device [LAN1] opened: \.Global{42DD2F8F-045C-4FA3-A56F-9289645100D6}.tap
NETSH: C:WINDOWSsystem32netsh.exe interface ip set address LAN1 dhcp
ERROR: netsh command failed: returned error code 1
NETSH: C:WINDOWSsystem32netsh.exe interface ip set address LAN1 dhcp
ERROR: netsh command failed: returned error code 1
NETSH: C:WINDOWSsystem32netsh.exe interface ip set address LAN1 dhcp
ERROR: netsh command failed: returned error code 1
NETSH: C:WINDOWSsystem32netsh.exe interface ip set address LAN1 dhcp
ERROR: netsh command failed: returned error code 1
NETSH: command failed
Exiting

En este caso (netsh Command failed: returned error code 1) tenemos una solución simple.

En el fichero de configuración del cliente introducimos el siguiente comando

script-security 2 system

Con esto conseguiremos una conexión normal

Para una explicación de los motivos oficiales, mirad en el siguiente enlace

 

Aumentar DumpDevice AIX

El dumpDevice en AIX se usa para que, en caso de problemas de inicio de la maquina tener un VG para dejar un dump con toda la información de la maquina y asi poder hacer un analisis.

Este VG, se puede ampliar ya que en muchos casos, el espacio asignado no sera suficiente.

Aqui tenemos un listado de los LV donde podemos ver el sysdump

root:/root > /usr/sbin/lsvg -o|/usr/sbin/lsvg -i -l

LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT
hd5 boot 1 2 2 closed/syncd N/A
hd6 paging 17 34 2 open/syncd N/A
hd8 jfs2log 1 2 2 open/syncd N/A
hd4 jfs2 5 10 2 open/syncd /
hd2 jfs2 80 160 2 open/syncd /usr
hd9var jfs2 7 14 2 open/syncd /var
hd3 jfs2 14 28 2 open/syncd /tmp
hd1 jfs2 1 2 2 open/syncd /home
hd10opt jfs2 9 18 2 open/syncd /opt
hd7 sysdump 6 6 1 closed/syncd N/A

Para ver el tamaño estimado necesario para el dump de la maquina hacemos;

root:/root > sysdumpdev -e0453-041 Estimated dump size in bytes: 262353715

Si lo queremos aumentar hacemos;

(como root)

smitty  lvm
    Logical Volume
         Set Characteristic of a Logical Volume
            Increase the Size of a Logical Volume
                Logical Volume Name  = lg_dumplv
 Nota! Si pulsamos F4 nos mostrara un listado de los LV que tenemos
                    Number of additional LOGICAL PARTITION = 1

INTRO

Si vemos de nuevo los VG vemos que hemos ampliado en 1 PP el VG de DumpDevice

root:/root > /usr/sbin/lsvg -o|/usr/sbin/lsvg -i -l

LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT
hd5 boot 1 2 2 closed/syncd N/A
hd6 paging 17 34 2 open/syncd N/A
hd8 jfs2log 1 2 2 open/syncd N/A
hd4 jfs2 5 10 2 open/syncd /
hd2 jfs2 80 160 2 open/syncd /usr
hd9var jfs2 7 14 2 open/syncd /var
hd3 jfs2 14 28 2 open/syncd /tmp
hd1 jfs2 1 2 2 open/syncd /home
hd10opt jfs2 9 18 2 open/syncd /opt
hd7 sysdump 7 7 1 closed/syncd N/A

 

Logicamente el proceso de ampliación de este VG es extrapolable a todos los VG