martes, 12 de marzo de 2019

Como realizar una copia espejo con rsync en servidores linux

Mi herramienta favorita para copiar archivo entre servidores Linux es rsync, esta permite hacer copias idénticas de archivos incluido carpetas entre servidores.

Copia espejo entre un servidor y otro

rsync -a --progress --delete  /carpeta/origen  servidor-destino:/carpeta/destino


Esta opción copia todo lo del origen al destino y si hay archivos en el destino que no existen en el origen son eliminados (opción --delete).
La opción --progess permite ver el progreso de la copia.
La opción -a copia permisos, dueños, tiempo, etc.

Una de las caracteristicas principales del rsync, es que es capaz de solo copiar los archivos diferentes entre el origen y el destino, es decir, una copia incremental. La primera vez es Full, pero las subsecuentes son incrementales, lo que permite mantener sistemas sincronizados.

Espero que esto les sea útil.

lunes, 11 de marzo de 2019

Como aumentar el tamaño de un tablespace en oracle

aveces es necesario aumentar el tamaño de un tablespcae, agrandando el datafile que lo compone, para esto existe 2 formas bien conocidas:
  • vía oem (oracle enterprise manager), que es una herramienta gratuita que permite administrar una instancia de oracle, es una herramienta web, desde la ual puedes realizar casi todas las labores de administración. La versión gratuita es para una sola instancia, cuidado con habilitar los modules de performance si no los tiene licenciados.
  • vía sqlplus, esta es mas rápido, pero requiere un poco mas de conocimientos, para conocer que datafiles componen el tablespace y su tamaño:
column TABLESPACE_NAME format a30
column FILE_NAME format a50
set linesize 100
set pagesize 100
select  TABLESPACE_NAME ,FILE_NAME ,  BYTES/1024/1024/1024 as "GB" from  dba_data_files
 where TABLESPACE_NAME='nombre tablespace" ;

  • con el nombre del file_name obtenido se agranda el datafile
ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/stuff01.dbf'  RESIZE 4G;


Espero que esto les sea útil.

domingo, 10 de marzo de 2019

Como automatizar la cargar masiva en icinga2 director

Necesitaba cargar en forma masiva el monitoreo de cientos de dispositivos o host en un icinga2 con el modulo director para su configuración, este modulo no cuenta con carga masiva, como la bases de datos era postgresql, cree una función, donde tenia como datos de ingreso: el nombre del host, la ip del host, el host grupo al cual pertenece, por defecto se asocia al template 1 del host.

Todo esto es en la base de datos del director: los host se almacenan en la tabla icinga_host, en icinga_hostgroup_host se asocia el grupo con el host, en icinga_hostgroup_host_resolved se almacena la referencia al grupo y en  icinga_host_inheritance se asocia el template.

DROP   FUNCTION carga(nombre varchar, ip varchar,grupo varchar);
CREATE FUNCTION carga(nombre varchar, ip varchar,grupo varchar ) RETURNS integer AS $$
DECLARE
   secuencia INTEGER;
   grupoid INTEGER;
BEGIN
   INSERT INTO icinga_host (object_name, object_type, disabled, display_name, address, address6, check_command_id, max_check_attempts, check_period_id, check_interval, retry_interval, check_timeout, enable_notifications, enable_active_checks, enable_passive_checks, enable_event_handler, enable_flapping, enable_perfdata, event_command_id, flapping_threshold_high, flapping_threshold_low, volatile, zone_id, command_endpoint_id, notes, notes_url, action_url, icon_image, icon_image_alt, has_agent, master_should_connect, accept_config, api_key, template_choice_id) VALUES (nombre, 'object', 'n', NULL, ip, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
   SELECT CURRVAL('icinga_host_id_seq') into secuencia;
   SELECT id into grupoid from  icinga_hostgroup where object_name=grupo;
   
   EXECUTE 'INSERT INTO icinga_hostgroup_host (host_id, hostgroup_id) VALUES ($1,$2)' USING secuencia, grupoid;
   EXECUTE 'INSERT INTO icinga_hostgroup_host_resolved (hostgroup_id, host_id) VALUES ($2, $1)' USING secuencia, grupoid;
   EXECUTE 'INSERT INTO icinga_host_inheritance (host_id, parent_host_id, weight) VALUES ($1, 1, 1)' USING secuencia;
   RETURN secuencia;
END; $$
LANGUAGE PLPGSQL;

Luego en un planilla genere los sql ue llamaban a la función de la forma

select carga('equipo1','ip1','grupo');


y así sucesivamente.



sábado, 9 de marzo de 2019

Como hacer calculos matematico en bash de linux

De vez en cuando necesito hacer algún calculo matemático durante la ejecución de un bash en linux, luego de probar varios métodos me decidí por utilizar el comando bc, que es la implementación de "Un lenguaje de calculo de precisión arbitraria."

la forma mas simple de usarlo es pasando la operación a calcula vi la entrada estándar, por ejemplo para calcula pi:

echo "scale=10; 4*a(1)" | bc -l
3.1415926532

usando la función arco-tangente se calcula pi con 10 decimales, o calcular una simple multiplicación y división

echo "scale=10; 100*12.34/23" | bc -l
53.6521739130

o generar un archivo con los pasos a calcular

              scale = 20

              /* Uses the fact that e^x = (e^(x/2))^2
                 When x is small enough, we use the series:
                   e^x = 1 + x + x^2/2! + x^3/3! + ...
              */

              define e(x) {
                auto  a, d, e, f, i, m, v, z

                /* Check the sign of x. */
                if (x<0) {
                  m = 1
                  x = -x
                }

                /* Precondition x. */
                z = scale;
                scale = 4 + z + .44*x;
                while (x > 1) {
                  f += 1;
                  x /= 2;
                }

                /* Initialize the variables. */
                v = 1+x
                a = x
                d = 1

                for (i=2; 1; i++) {
                  e = (a *= x) / (d *= i)
                  if (e == 0) {
                    if (f>0) while (f--)  v = v*v;
                    scale = z
                    if (m) return (1/v);
                    return (v/1);
                  }
                  v += e
                }
              }

bc permite expresiones, loop como for, while o funciones conficionales como if
NOTA: scale indica la precisión del calculo

Espero que les sea util

miércoles, 6 de marzo de 2019

¿Que es Red Hat Identity Management? - Descripcion breve

Como parte de la subcripción del "Red Hat Enterprise Linux", se puede implementar "Red Hat Identity Management", el cual permite administrar la autenticación y autorización de los usuarios sobre los servidores redhat en forma centralizada, siendo un equivalente al servidor de dominio de microsoft windows. Algunas de sus características son:
  • sistema centralizado de usuarios y grupos.
  • una contraseña para todos los sistemas.
  • control de acceso a los servidores en forma granular.
  • integración con dominios windows.
  • segundo factor de autenticación.
  • SSO.
  • soporte de ejecución a través de sudo, configurado centralmente.

Este producto esta basado en un ipa-server  e ipa-cliente que se debe instalar en cada uno de sus clientes, una vez instalado y configurado, toda la configuración es realizada en forma centralizada.

Una buena forma de conocer este producto es via el blog (en ingles)
https://developers.redhat.com/blog/2016/04/29/red-hat-identity-manager-part-1-overview-and-getting-started/ 
y
https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Linux_Domain_Identity_Authentication_and_Policy_Guide/index.html

Como dato, en el cliente debe estar habilitado el servicio  oddjobd

tunel via ssh usando putty

El protocolo de ssh permite generar túneles sobre las conexiones que se abren a un servidor. Esto permite que un puerto local sea re-enviado a un puerto en el servidor remoto o un puerto en el servidor remoto, sea reenviado a un puerto local. Con esta característica se puede implementar vpn simples, por ejemplo, acceder a un sitio web o consola remota desde la conexión local.

La aplicación putty permite configurar esto en forma online en una conexión, sin desconectarse.

Ejemplo de re-envio de puerto local 8888 al puerto remoto 80
Con esta configuración si localmente desde un browser se conecta a la url http://127.0.0.1:8888/ este es re-enviado al 127.0.0.1 puerto 80, la ip remota puede ser cualquier ip que el servidor remoto pueda alcanzar












Ejemplo de re-envio de puerto remoto 9999 al puerto local 80
Con esta configuración si alguien se conecta en el lado remoto al puerto 9999 sera reenviado al puerto local 80.



Espero que esto les sea útil

lunes, 4 de marzo de 2019

Ejecutar una copia scp desde el "task manager" de windows

En linux es relativamente simple programar una copia automática entre dos servidores via scp y crontab.
Pero hacer la copia desde un windows a un linux es algo mas complejo, pero igual de posible.
  • Primero, se necesita instalar winscp, el cual se puede bajar desde aqui.
  • Obtener la key publica del servidor linux al cual se debe copiar los archivos, para esto usar uno de los siguientes comandos según al tipo de key en el servidor linux

ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -l -f /etc/ssh/ssh_host_dsa_key
ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key

  • Generar un script indicando que ejecutara el winscp:
    • primero abrir la conexión, esto puede ser con usuario y contraseña o certificado digitan, se debe agregar el hostkey del destino para seguridad.
    • ejecutar el comando de copia o sincronización, en el ejemplo se sincroniza la carpeta de windows al servidor linux.
Ejemplo del script 
open sftp://usuario:contraseña@192.168.20.16/ -hostkey="ssh-rsa 2048 25:d8:94:4b:a2:38:ff:2c:49:3d:79:e2:a0:18:55:f6"
synchronize remote C:\origen /destino
exit

  • Programar en el "task manager" de windows la ejecución del comando siguiente:
Programa: "C:\Program Files (x86)\WinSCP\WinSCP.exe"
Argumentos: /script="c:\path_al_script\script.txt"  /ini=nul

Espero que les sea util, para mas detalles de los comando en winscp ver aqui.
 

domingo, 3 de marzo de 2019

¿Como crear y modificar un pdf desde .net C# ?

Un cliente tiene una aplicación web que generaba un certificado en pdf para sus empleados pero sin código de verificación o de autenticación. El proveedor de la aplicación no tenia entre sus planes agregar este código a los certificados, así que me solicitaron agregar un código a estos pdf.
La aplicación original estaba generada en .net con C#, así que debía generar el pdf original, capturarlo, modificarlo agregando el código de autenticación y a url de verificación.
Revisando en internet por librerías que modificaran los pdf, me encontré con
Spire.PDF for .NET , esta librería permitía crea, modificar archivos pdf y tiene una versión gratis que permite crear pdf de hasta 10 hojas y como solo necesita modificar 1, fue perfecta para  mi caso.

Tiene buenos tutoriales para usar esta librería, ejemplos en C#. Todas mis dudas las pude resolver con el soporte web.

Al final genere una nueva pagina para mi cliente, que tenias solo 30 lineas de código, agregando la información que solicitada:
  • Generar un pie de pagina donde apareciera el código de verificación.
  • Agregar la url de verificación
  • Colocar una linea recta que destacara el contenido

sábado, 2 de marzo de 2019

Habilitar ping en windows server 2016

Para habilitar el ping en windows server 2016, se debe ir a "Herramientas Administrativas de Windows", seleccionar "Firewall de windows con seguridad avanzada".
Seleccionar "Reglas de entrada"






Buscar la regla "Supervisión de máquina virtual (Solicitud de eco - ICMPv4 de entrada)" y habilitarla haciendo click con el botón derecho.



debe quedar así:


Ya tienes ping al servidor sin bajar el firewall

Instalación rapida de kvm manager de oracle

 Para instalar kvm manager de oracle se deben seguir los siguientes pasos: Instalar Oracle Linux 7 configurar el fqdn en el archivo /etc/hos...