viernes, 19 de abril de 2013

Tips Windows

Links simbólicos en windows 7 

Ahora windows permite tener links simbólicos al estilo linux, un gran avance... como crearlos:

mklink /D origen destino


El /D se usa para crear un "directorio" simbólico... no se usa /D para crear links a archivos.

viernes, 5 de abril de 2013

Algunas cosas sobre el comando sc

Crear y eliminar servicios en windows desde línea de comandos.

El comando sc, sirve para, entre otras cosas instalar y desinstalar servicios...
Por ejemplo para instalar

sc create nombre_de_mi_servicio binPath= path_del_exe start= auto


Prestar atención a que después de binPath= hay un espacio en blanco y despues el path, así se ponen los parametros, dejando un espacio en blanco, sino no funciona (loquísimo!), igual en start= auto y los demás...

Para eliminar el servicio

sc delete nombre_de_mi_servicio

También hay otros parámetros como start , para iniciar el servicio, stop para detenerlo, y el más útil "sc help" nos da la ayuda sobre SC...

Nota:

Cuando estaba probando instalar mi servicio, tuve que instalarlo y desinstalarlo varias veces con distintos parámetros. Pero me pasaba que una vez desinstalado, cuando quería reinstalarlo me tiraba el siguiente mensaje de error:


The specified service has been marked for deletion.


... y no me instalaba el servicio nuevamente.
A poco de probar descubrí que la "culpa" de ese error la tenía la consola de servicios de windows (ctrl-alt-del -> start task manager -> solapa Services -> botón Services), mientras estaba abierta tira ese error, cuando la cierro el error deja de ocurrir.

jueves, 4 de abril de 2013

Usar FunsionInventory-Agent con OCSInventory

Bueno, vamos a suponer que no tenemos instalado el OCSInventory y decidimos instalarlo

Instalación de OCSInventory server(Debian linux)

  1. Bajamos la última versión del servidor de www.ocsinventory-ng.org (al momento que escribo la 2.0.5) y la descomprimimos en alguna carpeta.
  2. Ejecutamos el archivo setup.sh, el mismo nos guiará paso a paso en toda la instalación. 
  3. Una vez terminado de ejecutar correctamente setup.sh, la instalación continúa por web en http://localhost/ocsreports, seguimos configurando por ahí hasta que se terminan correctamente todos los pasos y no tire ningún error por web.
 Bueno, ahora viene a lo que iba este artículo...

Cómo hacer para que el FusionInventory-Agent funcione con el servidor OCSInventory.

Del lado del servidor debemos hacer un par de cambios...
  1. En primer lugar ir al archivo /etc/apache2/conf.d/z-ocsinventory-server.conf y poner ésta línea
    PerlSetEnv OCS_OPT_EXT_USERAGENTS_FILE_PATH /etc/ocsinventory/agents.txt
    1. en su última parte (/etc/ocsinventory/agents.txt) indica la ubicación de un archivo de configuración que debemos crear...
    2. El archivo z-ocsinventory-server.conf podría llamarse ocsinventory-server.conf o de otra forma, de acuerdo a lo que haya configurado al instalar el OCSInventory Server.
  2. Crear el archivo /etc/ocsinventory/agents.txt (usar el path que hayamos indicado en la configuración del paso anterior).
    1. Este archivo de texto debe tener los nombres de los agentes de Fusion Inventory que pueden conectarse al servidor, incluyendo su versión, por ejemplo, su contenido podría ser:
      FusionInventory-Agent_v2.1.7-2
      FusionInventory-Agent_v2.0.6
      FusionInventory-Agent_v2.2.3
      FusionInventory-Agent_v2.2.7-3
      ^ Presten atención al formato, se agreta el "_v2" etc...
    2. Para ver la versión del agente, en la máquina cliente se ejecuta, desde consola de comando (ej en windows):
      C:\Program Files\FusionInventory-Agent-GLPI\perl\bin>perl.exe fusioninventory-agent -v
Desde el lado del cliente, debemos recordar apuntarlo a la dirección del servidor OCSInventory que recibe los datos en http://miserver/ocsinventory

Y listo... ya tenemos nuestro agente FusionInventory-Agent funcionando contra un servidor OCSInventory.

martes, 26 de febrero de 2013

Tips Graphite


Eliminar gráficas

Si queremos eliminar métricas realizadas en nuestro graphite, es muy fácil...
Los datos de las gráficas quedan en
 
/opt/graphite/storage/whisper/
 
...De donde los podemos borrar directamente.

Validar los esquemas

Graphite nos dá una herramienta para validar que nuestros archivos de schema estén bien formados, la misma se encuentra en
 
/opt/graphite/bin/validate-storage-schemas.py

Resulta muy útil para estar seguros de no tener errores en nuestros schemas.

Resetear Carbon

Es necesario hacer un restart al Carbon después de haber cambiado los archivos conf
/opt/graphite/bin/carbon-cache.py start

Sincronizar database

sudo /opt/graphite/webapp/graphite/python manage.py syncdb


jueves, 10 de enero de 2013

Mouse click en PowerShell

Tuve que recorrer media internet para encontrar finalmente como hacer un click del mouse con  Power Shell sin tener que usar otros programas externos. Así que acá finalmente pude armar una función que hace clicks del mouse en la posición indicada de la pantalla...

# Ejecuta un click del mouse
function MouseClick ($Button = "left", $x, $y, $cant = 1){
    $signature = @'
          [DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]
          public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);
'@
    [Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point($x, $y);
    $SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru 
    for ($i = 1; $i -le $cant; $i++){
        if($Button -eq "left"){
            $SendMouseClick::mouse_event(0x00000002, 0, 0, 0, 0);
            $SendMouseClick::mouse_event(0x00000004, 0, 0, 0, 0);
        }
        if($Button -eq "right"){
            $SendMouseClick::mouse_event(0x00000008, 0, 0, 0, 0);
            $SendMouseClick::mouse_event(0x00000010, 0, 0, 0, 0);
        }
        if($Button -eq "middle"){
            $SendMouseClick::mouse_event(0x00000020, 0, 0, 0, 0);
            $SendMouseClick::mouse_event(0x00000040, 0, 0, 0, 0);
        }
    }
}



lunes, 7 de enero de 2013

Tips PowerShell


  • Para ejecutar desde la consola DOS usar: powershell <path del script> o bien powershell .\nombre_del_script.ps1 en caso que esté en el mismo directorio.
  • Los comentarios dentro de los script se inician con numeral (#)
  • Algunas funciones útiles
    • Escribir texto en colores por la consola DOS: 
      • Escribir una línea en color: Write-Host "Texto rojo en fondo verde" -foregroundcolor red -backgroundcolor green
      • Cambiar los colores de la consola: $HOST.UI.RawUI.BackgroundColor = "Black"
        $HOST.UI.RawUI.ForegroundColor = "Red"
    • Para detener la ejecución del programa: Start-Sleep -m 10000 si se usa -m se refiere a milisegundos, si se quieren usar segundos se usa -s (ej Start-Sleep -1 10 es equivalente al ejemplo anterior)
  • Para concatenar strings se usa el signo +
  • Para invocar programas se usa &, por ejemplo & "C:\Program Files\Winamp\winamp.exe" abrirá el winamp. 
    • o bien $winamp = "C:\Program Files\Winamp\winamp.exe"
      & $winamp 
  • Para escribir comandos multilínea se usa el acento invertido `, ejemplo 
                    $msg = "mi mensaje empieza en esta línea " + [Environment]::NewLine  `

                              + "... y sigue en esta segunda línea"
  • [Environment]::NewLine  es el caracter de nueva línea
  • Apagar y reiniciar
    • Stop-Computer para apagar la computadora 
    • Restart-Compute para reiniciar 
    • Ambos se pueden usar con la opción -computer "nombrepc1, nombrepc2, nombreotrapc, etc " -force para apagar o reiniciar computadoras que se encuentren en la red.
  •  Operaciones con archivos
    • Borrar: Remove-Item c:\borrame.txt
    • Copiar: Copy-Item  Origen Destino
    • Escribir en archivo: "escribime en archivo" > c:\archivo.txt
  • Operadores de comparación
    • -eq: igual
    • -ne: distinto
    • -gt: mayor
    • -ge: mayor o igua
    • -lt: menor
    • -le: menor o igual
    • -like: comparacion entre caracteres
    • -notlike: -like negado
    • -match: Que machee el segundo operando
    • -notmatch: -match negado
  • Operadore lógicos
    • -and: and lógico
    • -or: or lógico
    • -not: not lógico
  • Finalizar la ejecución del programa: exit 
  • Variables de error (PowerShell utiliza varias variables globales para guardar estados de error y otras informaciones importantes) aquí algunas:
    • $? contiene el estado de ejecución de la última operación. True indica que todo salio Ok, false indica que hubo error o ejecución parcial (se basa en el exit code de los programas windows, un exit code 0 debería indicar que todo termino ok, cualquier valor distinto de 0 indicaría error, pero no todos los programas respetan esta convención, ver $LASTEXITCODE).
    • $LASTEXITCODE guarda el código de salida de la ejecución de la última operación, sirve para interpretar la salida de programas que no respeten la convención de exit code diferente de 0 para ejecuciones con errores o no completas (ver el punto anterior).
    • $Error ArrayList de los errores ocurridos en la sesion, los nuevos errores se agregan al principio del arraylist, dejando el último error en posición 0.
  • Otras
    • $true es true
    • $false es false
    • $null es un objeto null
    • $_ el objeto actual (por ejemplo en un foreach-object o en un where-object, etc)
    • Para obtener la fecha y hora: get-date -format u


    Try, catch, finally en PowerShell

    Acá les dejo un ejemplo de try - catch - finally en powerwhell que me fue de utilidad



    
    try
    {
        $ErrorActionPreference = "Stop"; #esto se hace para que stopee en los errores
        Copy-Item file_origin file_dest #copio un archivo
    }catch{
        Write-Host $Error[0].exception # muestro el mensaje de error
        $ErrorActionPreference = "Continue"; #vuelvo a setear la acción por defecto en los errores
        Exit # Termino la ejecución si hubo error
    }finally{
       $ErrorActionPreference = "Continue"; #vuelvo a setear la acción por defecto en los errores
    }
    

    :-)

    Power Shell - ¿Cómo llamar a una función que está en otro script?

    Bueno, acá explico como llamar desde un script PowerShell (ps1) a una función que se encuentra en otro script...
    Supongamos que tenemos los script funciones.ps1 y principal.ps1, siendo:

    funciones.ps1:
    Function test(){
        Write-Host "Dentro de la funcion"
    }
    


    Para llamar a la funcion test desde principal.ps1 se hace
    . .\funciones.ps1 # acá incluyo al script funciones.ps1
                      # notar que hay un espacio entre . y .\funciones.ps1
    
    #luego llamo a la función
    test
    


    En el ejemplo estoy llamando al script de forma relativa, suponiendo que están en el mismo directorio, si no fuera así habría que hacer algo tipo ". C:\<path del script funciones.ps1>\funciones.ps1...

    Espero que les sea de utilidad....

    martes, 21 de agosto de 2012

    Logster - instalación con Graphite


    Logster es (según su página) una utilidad para leer archivos de log y generar métricas para Graphite o Ganglia. Es ideal para visualizar tendencias de eventos que están ocurriendo en su aplicación/sistema/error log. Por ejemplo, puede usar logster para graficar el numero de ocurrencias de respuestas http que sucedan en el log de su servidor web.

    Logster mantiene un cursor, vía logtail, en cada archivo log que es leído, por lo tanto, cada sucesiva ejecución solo inspecciona las nuevas entradas del log. En otras palabras, un crontab configurado para correr cada un minuto generará la visualización de tendencias en tiempo real para Graphite o ganglia para cualquier cosa que quiera medir de sus logs.

    Instalación

    Logster depende de la utilidad logtail, por lo que primero la instalamos
    apt-get install logtail
    apt-get install logcheck
    Bajamos Logster de su página de download, bajamos el archivo y lo descomprimimos, luego hacemos desde una consola con superusuario...
    python setup.py install
    y se instala... la instalación deja dos archivos de ejemplo... podemos correrlo con:
    /usr/sbin/logster --dry-run --output=graphite --graphite-host=mi_server_graphite:puerto_gralmente_2003 SampleLogster /var/log/apache2/access.log 
    
    Con --dry-run le decimos que "simule" la ejecución, pero mostrando la salida por pantalla, para ver si anda... si quitamos esa opción se ejecutará contra nuestro graphite y tendríamos que ver los datos graficados... Ejecutando 
    logster -h
    nos da la ayuda para mas información...
    Los archivos de ejemplo (por ejemplo el SampleLogster al que hago referencia arriba), así como cualquier otro que querramos correr se encuentran en /usr/share/logster
    Una gran utilidad de esto es por ejemplo crear un crontab que ejecute
    /usr/sbin/logster --output=graphite --graphite-host=mi_server_graphite:puerto_gralmente_2003 SampleLogster /var/log/apache2/access.log 
    una vez por minuto, con lo que conseguimos que nuestro gráfico se ven en vivo.



    miércoles, 15 de agosto de 2012

    Tips Linux Debian

    Copiar archivos de una máquina a otra por la red muy facil

    Sin samba ni cosas raras, lo más simple...usando NetCat (nc)
    Desde la máquina que tiene el archivo que queremos copiar
    nc -l -p puerto < archivoEnviar -q 0
    puerto: es el puerto en el que se enviará el archivo
    Desde la máquina que debe recibir el archivo
    nc servidor puerto > nombreArchivo
    servidor: la ip o nombre de la máquina que envía el archivo.
    puerto: el  puerto (el mismo de arriba)
    nombreArchivo: el nombre que se le da al archivo una vez recibido.+

    Correr un programa en background

    Se pone un & al final de la línea cuando se ejecuta el programa.
    Si el programa ya está corriendo hacer CTRL+Z (lo deja en suspenso) despues escribir bg y ENTER.
    Para volverlo al primer plano usar jobs para ver el número de trabajo asignado y fg <nro trabajo> para ponerlo en 1er. plano).

    Agregar procesos o correr programas al inicio de debian

    Agregarlos en /etc/rc.local

    Teclado

    Cambiar mapa de caracteres desde consola:
    loadkeys es
    Ver la lista de mapas de caracteres disponible
    ls -l /usr/share/kvm/keymaps/
    en squeezy
         loadkeys /usr/share/keymaps/i386/qwerty/es.kmap.gz
         loadkeys es

    Otros simples

    Cambiar password: comando passwrd

    Comprimir/Descomprimir con tar


    Comprimir un directorio:
    tar -cvf nombre_comprimido.tar directorio_a_comprimir/
    Descomprimir:
    tar -xvf nombre_del_fichero
    Ver el contenido de un tar
    tar -tf nombre_del_fichero
    Significado de las letras:
    f: indica que a continuación viene el nombre del fichero; c: comprimir; x: extraer; v: que muestre lo que va haciendo.