Recuperando Std exception old lock file terminating – mongodb

Cuando un servidor tiene un apagado forzoso (se apaga por un corte de energia) o por alguna otra razón, es probable al querer iniciar nuevamente la base de datos /etc/init.d/mongodb start obtengamos el error: “exception in initAndListen std::exception: old lock file, terminating” en el el log de mongodb.

Para resolverlo simplemente eliminamos el archivo  /var/lib/mongodb/mongod.lock.
__________________
Nicolas tech-nico.com

[Solucionado] Error en Thundercache (mongodb) luego de la instalación (Uncaught exception ‘MongoCursorException’ )

Desde hace un tiempo que estoy intentando instalar ThunderCache en Ubuntu Server 11.04 64bits. La cuestión es que siempre que finalizaba la instalación se rompía algo, y perdía el el acceso por web al ThunderCenter. A muchos les ha pasado luego de instalar las actualizaciones o bien hacer upgrade a las versiones mas nuevas.

Mas en detalle
Luego de terminar con la instalación de ThunderCache (bin 846) con ThunderCenter 3.4.4 hay que ingresar a http://ipthunder:82     usuario: admin     password:admin

La primer pantalla es la de configuración, algo como:

 

Al presionar en <Confirm> nos obliga a reiniciar el servidor. La gran sorpresa es que luego del reinicio, no podemos ingresar mas por web. Si bien la IP responde, el apache no!!.

Mirando en el log del apache nos vamos a encontrar con este error:

# tail /var/log/apache2/error.log

Uncaught exception ‘MongoCursorException’ with message ‘getFile(): bad file number value (corrupt db?): run repair’ in /usr/local/tcenter/www/index.php:15\nStack trace:\n#0 /usr/local/tcenter/www/index.php(15): MongoCollection->findOne(Array)\n#1 {main}\n thrown in /usr/local/tcenter/www/index.php on line 15

Para resolverlo seguimos estos pasos:

1 #  /etc/init.d/thunder restart
2 #  apache2ctl stop
3 #  /etc/init.d/mongo stop
4 #  /etc/init.d/mongodb stop
5 #  mongod --dbpath /var/lib/mongodb --config /etc/mongodb.conf --repair
6 #  chown mongodb  /var/lib/mongodb -R
7 #  /etc/init.d/mongodb start
8 #  apache2ctl start

El funcionamiento es impresionante, realmente vale la pena instalarlo en redes grandes.

Las Barras de progreso en verde son descargas de objetos cacheados. Y las azulcitas son objetos que esta almacenando en el cache.

Que tengan unas muy felices fiestas!
______________________
Nicolas tech-nico.com/blog

Crontab y PHP: Enviar logs, procesos, o backups via mail

Algo que surgió anoche en la clase de Linux (Crontab), fue casualmente “poder hacer un backup automático y que lo envie a nuestro mail”. Todavía no aprendimos Bash Scripting / Pyton / Perl o bien para el que esta mi situación, tenemos la alternativa de ejecutar un script PHP.

Inicialmente este script hacia un dump de la base de datos mysql y enviaba el archivo .sql via mail. Aca lo posteo con algunas modificaciones para que cada uno lo adapte a sus necesidades.
En este ejemplo vamos a imprimir el syslog (tail syslog) y enviarlo via mail como archivo adjunto.
La funcion en PHP para ejecutar un comando Linux es:

system(“tu comando”);            // Ej:  system(“ps -fea”);
*En este ejemplo listamos los procesos.

Sabiendo esto, el código del script PHP podría ser algo asi:

<?php
//// Script: Nicolas Daitsch 24 de noviembre de 2011
//// http://tech-nico.com/blog

////////////// CONFIGURACION //////////////////////////
$sendto = "Webmaster <tuemail@gmail.com>"; // DESTINO
$sendfrom = "Log Diario Servidor <logs@tuempresa.com>"; // ORIGEN
$sendsubject = "Log Diario mi servidor"; // ASUNTO
$bodyofemail = "Aca esta el log que genero el Crontab."; // MENSAJE
$COMANDO_LINUX = "tail /var/log/syslog"; // COMANDO
////////////////////////////////////////////////////////

    $backupfile = "syslog_". date("Y-m-d") . '.txt';
    system($COMANDO_LINUX > $backupfile);
    include('Mail.php');
    include('Mail/mime.php');

    $message = new Mail_mime();
    $text = "$bodyofemail";
    $message->setTXTBody($text);
    $message->AddAttachment($backupfile);
    $body = $message->get();
    $extraheaders = array("From"=>"$sendfrom", "Subject"=>"$sendsubject");
    $headers = $message->headers($extraheaders);
    $mail = Mail::factory("mail");
    $mail->send("$sendto", $headers, $body);

    //unlink($backupfile);
?>

Editamos la sección que dice //// CONFIGURACION y escribimos nuestros valores.
Luego instalamos el modulo PEAR para envio de mails con PHP:

#  apt-get  install  php-mail   php-mail-mime   php-mail-mimedecode

Editamos el Crontab:

# crontab -e

Agregamos esta linea al final, guardamos y salimos:

08 12 * * * /usr/bin/php -f /var/www/backup.php > /root/cronerrors.txt 2>&1

Explicamos lo que hace esta linea:

  1. (08 12 * * *) Todos los dias a las 12:08 PM
  2. (/usr/bin/php -f) Ruta del interprete PHP en Debian/Ubuntu. Flag “-f” Ejecutar un archivo PHP.
  3. (/var/www/log_script/log_send.php) Ruta del Script
  4. (> /root/cronerrors.txt 2>&1) Redirecciono la salida de error hacia un archivo de texto en /root. Esto también puede ser /home/usuario/errores.log
Descargamos los archivos necesarios para el funcionamiento. Y los ubicamos en la ruta /var/www/.
___________________

Configurar OpenVPN Roadwarrior en Debian 6 y Windows

Vamos a configurar OpenVPN del modo RoadWarrior con PKI (Public Key Infraestructure)
Un claro ejemplo para explicar el modo RoadWarrior: Son 1 o mas clientes que se conectan (autenticándose) de manera remota desde una PC hacia nuestro “linux OpenVPN Server”, y utilizando internet como medio de acceso para ingresar de manera segura a los recursos de la empresa, como serian, un servidor de aplicaciones, mail, recursos compartidos, etc.

Comenzamos con la instalacion:

1) Instalamos OpenVPN

# apt-get install openvpn

2)  comenzamos generando los certificados:

01. #  cp -a /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn/
02. #  cd /etc/openvpn/easy-rsa/2.0/
03. #  . ./vars
04. #  ./clean-all
05. #  ./build-ca
06. #  ./build-key-server servidor
07. #  ./build-key cliente1
08. #  ./build-dh
09. #  cd keys
10. #  cp ca.crt ca.key servidor.crt servidor.key dh1024.pem  /etc/openvpn/

Explicación paso a paso:
01: Copiamos los scripts con el comando “cp”
02: Nos posicionamos sobre el directorio de scripts
03: Inicializamos variables “. ./vars”
04: blanqueamos el directorio de claves “./clean-all”
05: generamos certificado CA  ”./build-ca”

Aquí nos nos preguntara un montón de datos sobre la empresa que utiliza el certificado. Sugiero llenarlo con datos reales. NOTA: Debemos prestar mucha atención en el “Common Name”.  Si en Common Name completamos con “TECHNICO” Lo anotamos o recordamos para no repetirlo en los proximos pasos; ya que en las 3 veces que lo generaremos, necesitamos nombres que no se repitan.

06: Creamos las credenciales para el servidor. “ ./build-key-server servidor”.

Completamos con los datos anteriores, sin repetir “common name” (como mencionamos anteriormente).

07: Creamos las credenciales para el cliente. “ ./build-key cliente1″. Esto va a generar “cliente1.key” y “cliente1.crt”
08: Creamos los parámetros con el comando”./build-dh”.  *dh: Diffie Hellman (Protocolo Criptografico).
09: nos posicionamos en el directorio donde se generaron los certificados “cd keys”.
10: copiamos los certificados a /etc/openvpn/

3) Continuamos con la configuración:
Instalamos el editor VI y luego entramos a editar server.conf

# apt-get install vim
# vi /etc/openvpn/server.conf

USO DEL VI Editor
a) Para editar presionan la letra “i” o la tecla <insert>. Luego para finalizar de editar <esc>
b) para guardar y salir del vi: escriben ‘ : ‘ (dos puntos); aparecera un path para escribir.
c) Escriben ‘wq’ y presionan <Enter> (w de write y q de quit). Con esto ya deberian estar nuevamente en el path de linux.
Archivo server.conf:

port 1194
proto udp
dev tun
persist-tun
ca ca.crt
cert servidor.crt
key servidor.key
dh dh1024.pem

#Direcciones que se asignaran a los clientes, el server es .1
server 10.1.1.0 255.255.255.0

ifconfig-pool-persist ipp.txt

#Routeo para que los clientes alcancen la red local del server (1.0/24)
push .route 192.168.1.0 255.255.255.0.

#Para que los clientes se visualicen entre ellos
#Debe ir junto con la opción routeback en el shorewall
client-to-client

keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 4

4) Configuración de cliente OpenVPN en Windows XP, Vista o Seven.

a) Descargar: openvpn-2.0.9-gui-1.0.3-install.exe y luego instalarlo.
b) Copiar a la carpeta “C:\Program Files\OpenVPN\config” con WinSCP o desde un Sftp los archivos:

  • /etc/openvpn/easy-rsa/2.0/keys/ca.crt
  • /etc/openvpn/easy-rsa/2.0/keys/cliente1.crt
  • /etc/openvpn/easy-rsa/2.0/keys/cliente1.key

c) Creamos un archivo TXT y lo guardamos como cliente1.ovpn en ”C:\Program Files\OpenVPN\config”. Luego le pegamos lo siguiente:

tls-client
client
dev tun
proto udp
remote 192.168.1.135   # IP o dominio del servidor OpenVPN
float #debido a que la IP de arriba es dinamica
resolv-retry infinite
nobind
persist-key
persist-tun
ca "C:\\Program Files\\OpenVPN\\config\\ca.crt"  #revisar las comillas luego de copy/paste
cert "C:\\Program Files\\OpenVPN\\config\\cliente1.crt"
key "C:\\Program Files\\OpenVPN\\config\\cliente1.key"
comp-lzo
verb 4

5) Reiniciamos openvpn en Debian

#  /etc/init.d/openvpn restart

Stopping virtual private network daemon: server.
Starting virtual private network daemon: server.

6) Iniciamos OpenVpn en windows. Ver Imagen

Click con boton derecho en el iconito señalado, y luego click en Connect. Si no nos arroja ningún error significa que todo es un éxito.

______________
Nicolas Tech-Nico.com

Resolver “Zone expired | unexpected rcode (SERVFAIL)” en Bind9

Hoy me ocurrió que luego de un mal apagado del servidor, había dejado de resolver mis zonas DNS. Mirando el SYSLOG note el error: “zone tech-nico.com.ar/IN: expired“.

Oct 16 16:12:47 www named[11730]: zone tech-nico.com.ar/IN: expired
Oct 16 16:12:47 www named[11730]: zone 114.58.200.in-addr.arpa/IN: expired
Oct 16 16:12:48 www named[11730]: zone tech-nico.com.ar/IN: refresh: unexpected rcode (SERVFAIL) from master 200.58.114.78#53 (source 0.0.0.0#0)
Oct 16 16:12:48 www named[11730]: zone 114.58.200.in-addr.arpa/IN: refresh: unexpected rcode (SERVFAIL) from master 200.58.114.78#53 (source 0.0.0.0#0)
Oct 16 16:13:36 www named[11730]: zone 114.58.200.in-addr.arpa/IN: refresh: unexpected rcode (SERVFAIL) from master 200.58.114.78#53 (source 0.0.0.0#0)
Oct 16 16:13:38 www named[11730]: zone tech-nico.com.ar/IN: refresh: unexpected rcode (SERVFAIL) from master 200.58.114.78#53 (source 0.0.0.0#0)

Lo resolvi cambiando el serial code en todas las zonas; Ejemplo: /etc/bind/tech-nico.com.ar

$TTL 3600
tech-nico.com.ar.     IN      SOA     dns1.tech-nico.com.ar. root.tech-nico.com.ar.       (
                        2011101610  ;  serial number

Donde “2011101610″ es formato YYYYMMDDXX. YYYY= año MM=mes DD=dia y XX=Numero de revisión.

_____________________
tech-nico.com 

Servidor de archivos en Debian 6 (Samba)

Algo que siempre nos va a venir al pelo es la configuración del Samba para compartir archivos en un Grupo de Trabajo. Lo publicamos como ayuda de memoria.

Tarea: compartir 2 carpetas en el grupo TECHNICO. Cada carpeta pertenece a un usuario distinto.

1) Vamos a instalar los paquetes del Samba:

# apt-get install samba samba-common smbclient samba-doc smbfs

2) hacemos un backup del archivo de configuracion.

# cp  /etc/samba/smb.conf   /etc/samba/smb.conf.original

3) Instalamos el editor VI y luego entramos a editar smb.conf

#  apt-get install vim
# vi /etc/samba/smb.conf

 #========= Global Settings ==============
[global]
workgroup = TECHNICO 

##### Authentication ######
## descomentar la siguiente linea.
##(Es para poder loguearnos con las cuentas de linux)
security = user 

 #### al final del archivo agregamos ###

[cattaneo]
 comment = bienvenido
 path = /home/samba/cattaneo
 browseable = yes
 read only = no
 valid users = cattaneo

[deepdish]
 comment = hola
 path = /home/samba/deepdish
 browseable = yes
 read only = no
 valid users = deepdish 

USO DEL VI Editor
a) Para editar presionan la letra “i” o la tecla <insert>. Luego para finalizar de editar <esc>
b) para guardar y salir del vi:  escriben ‘ : ‘  (dos puntos); aparecera un path para escribir.
c) Escriben ‘wq’  y presionan <Enter> (w de write y q de quit). Con esto ya deberian estar nuevamente en el path de linux.

4) Creamos usuarios de sistema (sin shell ni directorio personal) y de samba. (va a pedir las contraseñas usar la misma en adduser que en smbpasswd).

# adduser –shell /bin/false –no-create-home cattaneo
# adduser –shell /bin/false –no-create-home deepdish
# smbpasswd -a cattaneo
# smbpasswd -a deepdish

5) Creamos carpetas y permisos (en este caso le doy permisos totales 777)

# cd /home
# mkdir samba
# chmod 777 samba
# cd samba
# mkdir cattaneo
# mkdir deepdish
# chmod 777 cattaneo/   &&  chmod 777 deepdish/
# chown cattaneo:cattaneo cattaneo/
# chown deepdish:deepdish deepdish/

6) reiniciamos el servicio Samba con:

# /etc/init.d/samba restart

Fuente: Curso de Linux Clase 14 Parte II

_______________
tech-nico.com/blog
nicolas daitsch