Archivos mensuales: octubre 2013

SQL Server 2005 Plan de mantenimiento

Vamos a ver paso a paso cómo hacer un plan de mantenimiento con SqlServer 2005. No es lo más actual, en el momento actual, pero hay muchas aplicaciones antiguas que aún requieren está base de datos.

Descripción de nuestro backup

Queremos 4 copias completa de la base de datos cada martes

Queremos 4 copias incrementales de lunes a viernes

Destino del backup

Sql Server 2005 sólo deja sacar backups en carpetas locales.

Crear las tareas

Es el momento de crear las tareas de mantenimiento. Vamos a crear dos planes:

  • Uno para las copias completas, con persistencia de 4 semanas
  • Uno para los incrementales con persistencia de 1 semana

Cómo usuario administrador (normalmente sa) entramos en Microsoft SQL Server Management Studio.

Administracion > Planes de mantenimiento > Nuevo Plan de mantenimiento

Cada plan de mantenimiento constará de tareas del plan de mantenimiento: la de copia y la de limpieza.

La copia copia completa:

  • Nueva tarea «Tareas copia de seguridad de la base de datos»
    Destino: B:/SQLbackup
    Extensión del archivo: .bak
  • Nueva tarea: «Tarea Limpieza de mantenimientoDestino: B:/SQLbackup
    Extensión del archivo: .bak
    Antiguedad 4 semanas
  • Extender la línea verde desde la tarea «Copias de seguridad» hacia «limpieza» para que ejecuten en el orden correcto.

La copia incremental, tendrá su propia carpeta

  • Nueva tarea «Tareas copia de seguridad de la base de datos»
    Destino: B:/SQLbackup/Incremental
    Extensión del archivo: .bak2
  • Nueva tarea: «Tarea Limpieza de mantenimientoDestino: B:/SQLbackup/Incremental
    Extensión del archivo: .bak2
    Antiguedad 1 semanas
  • Extender la línea verde desde la tarea «Copias de seguridad» hacia «limpieza» para que ejecuten en el orden correcto.

Probar las tareas

Administracion > Planes de mantenimiento >

Seleccionamos nuestro plan de mantenimiento, pinchamos sobre Ejecutar y verificamos que se hayan creado los elementos.

Crear un servicio web REST con ASP 1.0 clásico

Evidentemente, la tecnología escogida no es una nuestra elección; viene dada por los requisitos, y, a pesar de todas las justificaciones esgrimidas no ha sido posible cambiarlo.

Servidor web

Nuestro servidor web es un W 2003 con las características IIS activadas.

En la carpeta INETPUB, hemos creado como primer paso una carpeta para javascript donde hemos puesto las librerías JSON y JQUERY (en versión 1).

Recoger parámetros en Javascript desde la URL

La url que se invoca es algo como:

http://www.anyserver.com/mypage.asp?Details=products

En nuestra página ASP, vamos a usar las funciones de purl para sacar valores de la línea de parámetros

Verificar parámetros con expresiones regulares.

...
<script src="js/purl.js" language="javascript" type="text/javascript"></script>
...
<script type="text/javascript">
ip=$.url().param("ip") </script>

Coger parámetros en Classic ASP 1.0 desde url o cabecera

Esta es la forma de recogerlo de URL

IP = Request.QueryString("IP")

Si hay una cabecera propia, hay que anteponer http_ para poder extraerla, cómo explican en el foro de microsoft:

If a client request includes a header other than those specified in the IIS Server Variables table, you can retrieve the value of that header by preceding the header name with «HTTP_» in the call to Request.ServerVariables. For example, if the client sends a header such as SomeNewHeader:SomeNewValue, you can retrieve SomeNewValue by using the following synta

<% Request.ServerVariables("HTTP_SomeNewHeader") %>

Nosotros nos hemos hecho una función, para aceptar parámetros por url y por cabecera indistintamente:

Function GetParam (strTarget)
Dim param
param = Request.ServerVariables("HTTP_"&strTarget)
if (Len(param) = 0) then
param = Request.QueryString (strTarget)
End if
GetParam=param 'Return value
End Function

Respuesta del servidor

Todas las respuestas se hacen en forma de texto:

response.write Linea 1 & vbcrlf
response.write Linea 2 & vbcrlf

Gestión de logs desde Classic ASP 1.0
Hemos usado el código de Digital Colony, por que es inmejorable.

En la carpeta donde se guardan los logs, se debe dar permisos al usuario ASPNET de lectura y escritura.

Conexión a base de datos desde Classic ASP 1.0

Vamos a usar esta solución para prevenir inyección de sql en la base de datos.

Además, hemos creado un usuario con privilegios sólo de escritura sobre la base de datos, para prevenir cambios o consultas sobre otras base de datos.

strConnect = "DRIVER={SQL Server};SERVER=server\instance;DATABASE=my_Db;UID=my_uid;PWD=my_pwd;"
Set conn = Server.CreateObject("ADODB.Connection")
conn.ConnectionString = strConnect
conn.Open
(...)
conn.Close

Transacciones en base de datos desde ASP 1.0

Algunas de nuestras conexiones, las vamos a hacer dentro de una transacción:

conn.BeginTrans
(...)
conn.CommitTrans

 Función ExecuteScalar contra la base de datos desde Classic ASP 1.0

Hemos creado una función para recoger el primer resultado de una sentencia select.

Function executeScalar (strCommand)
Set command = CreateObject("ADODB.Command")
command.ActiveConnection = conn
command.CommandText = strCommand
Set rs = command.Execute ()
if not rs.EOF then
rs.movefirst
executeScalar = rs.fields(0)
else
executeScalar  = 0
End IF
Set rs = nothing
Set command = nothing
End Function

Gestión de errores de ASP

Para nuestro servicio Rest, hemos escogido la gestión más simple de las que proponen desde  codeguru:

En la cabecera de la página ASP:
<%
' Error Handler
' Turn on page buffering:
Response.Buffer = True
' Turn On Error Handling:
' On Error Resume Next so that errors don't stop page execution
On Error Resume Next
%>

(…) Código ASP de la página

Al final, se captura el error, se limpia la respuesta y se responde con el texto que se espere.

<%
' Error Handler
If Err.Number <> 0 Then
'Clear response buffer
Response.Clear
End If
%>

Más información

Vamos a comenzar por repasar los siguientes foros de información:

Centreon discovery

Hemos intentado instalar centreon discovery en nuestro gestor centreon, sobre centos 6.4. y centreon 2.4.5

Instalación

Comenzamos con los prerequisitos:

yum install nmap python-devel python mysql-devel gcc -y

Para descargar los archivos de centreon-discovery, es necesario darnos de alta en las communities de Centreon. Tras ello, ya podremos descargar e instalar.

tar -xvzf Centreon-Discovery-2.3.1.tar.gz
cd Centreon-Discovery-2.3.1
./install.sh  -i -t central

Para localizar instCentWeb.conf

find / -name  instCentWeb.conf
/etc/centreon/instCentWeb.conf

Después, hay que habilitar el módulo, desde la interfaz de Centreon:

Administration > Modules > Setup

Configuración

La configuración es bastante básica. Tenemos que seleccionar el rango de direcciones, y la community de snmp que vamos a utilizar. tras ello, se lanza el descubrimiento, y nos dejará un listado de los nuevos elementos encontrados por snmp.

Debian: Instalar ICAClient

Hemos tenido algunos problemas al instalar ICAClient (aka citrix receiver) en una máquina debian.

Primero, hemos tenido que instalar los siguientes paquetes:
Debian wheezy
apt-get install ia32-libs ia32-libs-gtk ffmpeg lib32gcc libmotif4 motif-clients

Debian Jessie

apt-get install multiarch-support ffmpeg lib32gcc libmotif4 motif-clients

También hemos tenido que instalar nspluginwrapper_1.3.0-1, bajándolo directamente de la página de oldstable de debian

Al instalar, nos daba un error en la postinstalación de icaclient:

processing icaclient (--configure): subprocess installed
post-installation script returned error exit status 2

/var/lib/dpkg/info/icaclient.postinst
echo $?

Alrededor de la línea 2649, tal cómo explican en crazymadeagle, hemos tenido que sustituir la segunda línea, por la primera:

echo $Arch|grep -E "i[0-9]86|x86_64" >/dev/null
#echo $Arch|grep "i[0-9]86" >/dev/null

Tras ello, reconfiguramos el paquete con dpkg, y nuestro recién editado script de post-instalación:

dpkg --configure icaclient

Certificados

Con el cliente ya instalado, hemos tenido que editar para meter una nueva entidad certificadora en nuestro sistema. El error de citrix era

The server certificate received is not trusted (SSL Error 61)

Hemos copiado los certificados ya disponibles para firefox en la carpeta donde busca ICAclient, como indican desde el foro de ubuntu:


ln -s /usr/share/ca-certificates/mozilla/* /opt/Citrix/ICAClient/keystore/cacerts/

 

También, en el caso de no estar el certificado de la entidad certificado en nuestro firefox, se puede copiar a mano el certificado .cer o .crt en /opt/Citrix/ICAClient/keystore/cacerts/

F5. Monitorización del estado de un nodo de un pool en F5

Hemos llegado a un punto en que la monitorización del propio nodo está bien, pero a nivel de F5 puede estar deshabilitado. Hay dos razones para ello:

  • Un usuario lo ha configurado manualmente (Force Offline)
  • El monitor lo está marcando abajo.

Para ello, hemos desarrollado un script de nagios capaz de monitorizar en todo momento el estado del nodo en un pool concreto del F5:

check_bigip_node_status.sh

La verficación se basa en snmp, por lo que es necesario tener activado snmp en los F5, tener configurado una community, y tener visibilidad entre el motor de nagios y los F5 por el puerto 161 (snmp)-

Ejemplos de uso:

./check_bigip_node_status.sh -h bigip-p community -P Pool -n node

Para funcionar, requiere que tengamos cargados las MIBS de f5 en el directorio de snmp:

/usr/share/snmp/mibs/F5-BIGIP-APM-MIB.txt
/usr/share/snmp/mibs/F5-BIGIP-LOCAL-MIB.txt
/usr/share/snmp/mibs/F5-EM-MIB.txt
/usr/share/snmp/mibs/F5-BIGIP-COMMON-MIB.txt
/usr/share/snmp/mibs/F5-BIGIP-SYSTEM-MIB.txt
/usr/share/snmp/mibs/F5-BIGIP-GLOBAL-MIB.txt
/usr/share/snmp/mibs/F5-BIGIP-WAM-MIB.txt

 

Git: Iniciación a git

Instalación del servidor para acceso mediante ssh con usuario en Debian

sudo apt-get install git
sudo mkdir -p /var/cache/git
cd /var/cache/git
git init --bare mynewgit

 

Configuración de básica
git config --global user.name "Your Name Here"
git config --global user.email "your_email@example.com"
git config --global http.proxy   http://myproxy.org:80
#Añadir user a url
git remote set-url origin https://USER@github.com/user/mygit.git

Clonación de repositorio git

git clone https://server/repo

Bajar última versión

git pull

 Crear carpeta

mkdir folder1 folder2
git add  folder1 folder2
git commit -m "folder1"
git push origin

Cambiar el origen de git (servidor remoto)

git remote show origin

git remote rename origin old

git remote add origin myserver

Iptables: Configuración mínima

En CentOS 5.7 el archivo de configuración es /etc/sysconfig/iptables

Ver la configuración actual

iptables -L

Crear reglas básicas:

# Tráfico saliente

iptables -P OUTPUT ACCEPT

# ICMP

iptables -A INPUT  -p icmp -j ACCEPT

# http  https

iptables -A INPUT  -m state –state NEW -p tcp –dport 80 -j ACCEPT
iptables -A INPUT  -m state –state NEW -p tcp –dport 443 -j ACCEPT

# Remote SSH

iptables -A INPUT  -m state –state NEW -p tcp –dport 22 -j ACCEPT

# Snmp
iptables -A INPUT  -m state –state NEW -p tcp –dport 161 -j ACCEPT

# Transparent proxy  redirect 136.201.105.2 —> 10.0.0.1:80

iptables -t nat -A PREROUTING -p tcp -d 136.201.105.2 --dport 80 -j DNAT --to 10.0.0.1:80
iptables -t nat -A POSTROUTING -d 10.0.0.1 -j MASQUERADE

Configurar las reglas con persistencia

/sbin/service iptables save

Configurar iptables para ejecutar al inicio

chkconfig iptables on

 

Photosort – Una idea para organizar nuestras fotos

Tenemos un problema tremendo con las fotos. Dos cámaras, dos teléfonos móviles, y un montonazo de fotos sin orden ni concierto. Nuestras necesidades son simples:

Queremos una librería compartida de fotos sin duplicados, ordenadas por fechas

Para ello, el gran Ajo, se ha puesto en marcha y ha creado en python Photosort  disponible en github.Photosort crea una base de datos sencilla, para saber si una foto ha subido ya a nuestro repositorio compartido, incluso si ha subido ya con otro nombre.

También está ya disponible en el repositorio yPi (Python Package Install repository), para que sea mucho más fácil instalarlo en nuestras máquinas.

Se basa en la información exif de la propia foto, y no en la fecha de modificación o creación de las fotos, que puede ser errónea.

Instalación sobre debian 7

apt-get install python-pip
pip install photosort
mkdir ~/.photosort
cd ~/.photosort
wget https://raw.github.com/mangelajo/photosort/master/etc/photosort.yml

Editamos el fichero de configuración yml, con nuestro fuente y nuestro destino. Cuidado con mantener la indentación propia del fichero de yml.

sources:
camera:
dir: '/media/EOS_CAM'
(...)
output:
dir: '/mnt/shared_data/Fotos'
(...)

Con esto, ya podemos ejecutar el comando:

photosort --config .photosort/photosort.yml --debug sync

Para ver qué está haciendo el proceso en cada momento:
tail -f /mnt/shared_data/Fotos/photosort.log

Plantillas de vmware

Guía mínima de requisitos que hay que instalar para las plantillas de vmware:

  • vmware tools
  • Configuración de red, proxy si lo hay en la organización
  • Actualización de paquetes de sistema operativo (windows o linux).
  • Editor de texto preferido: notepad++, emacs
  • Acceso remoto (ssh o rdp)
  • Herramientas de monitorización: TCPMonitor, ProcessExplorer, agentes nagios, etc.
  • Agente de inventario: glpi o similar
  • Firewall de windows deshabilitado

Esta guía, sirve tanto para máquinas windows como linux. Estamos abiertos a que nos indiquéis qué más cosas configuráis por defecto para crear plantillas.