lunes, 2 de diciembre de 2013

Manejando procesos en segundo plano (UNIX background jobs)

Les paso este mini tutorial para administrar los procesos en segundo plano, nunca sabes cuando lo vas a necesitar :p


1.- ) Ejecutando en segundo plano:
Por ejemplo, cuando ejecutas un comando "du" para obtener la lista de los directorios donde hay backups pesados en mi sistema, esto toma bastante tiempo en ejecutarse, pero tenemos la posibilidad de ejecutarlo en segundo plano directamente en la misma ejecución del comando agregando "&" al final:

#du -h /home | grep backup | grep [0-9]G >> /home/villatux/pesados1Dic2013.txt &

2.- ) Mandando el trabajo actual a segundo plano usando CTRL+Z y el comando bg:
Puedes mandar el trabajo que se está ejecutando a segundo plano con las siguientes instrucciones:
- Presionar "CTRL+Z"  que suspenderá la ejecución del comando
- Ejecutar "bg" para hacer que el comando suspendido continúe pero ahora en segundo plano

Por ejemplo si ya ejecute mi comando y se me olvidó ponerlo en segundo plano podemos hacerlo de la siguiente manera:

#du -h /home | grep backup | grep [0-9]G >> /home/villatux/pesados1Dic2013.txt

#[CTRL+Z]
[2]+  Stopped                 du -h /home | grep backup | grep [0-9]G >> /home/villatux/pesados1Dic2013.txt

#bg

3.- ) Tomar un trabajo del bacground y ponerlo en ejecución normal:
Podemos ver los trabajos en ejecución "background" con el comando "jobs" y con el comando "fg %1" obtiene el trabajo #1 y lo trae a un entorno de ejecución normal:

#jobs
[1]   Running                 bash miscript.sh &
[2]-  Running                 thunderbird &
[3]+  Done                    nautilus .

#fg %1

4.- ) Matar un trabajo especifico usando "kill %"
Si deseas matar un proceso en uso que está en background lo puedes hacer de la siguiente forma:

# kill %2


Espero les sea de utilidad.

miércoles, 27 de noviembre de 2013

Sincronizar subtitulos .srt (script en perl)

Me ha pasado que quiero ver Películas/Series con subtitulos y que no encuentras el subtitulo exacto para tu archivo de vídeo,  pero en cambio encuentras otro subtitulo de la misma serie pero no coinciden los tiempos del video con los subtitulos.

Para solucionar este problema podemos usar un script desarrollado en PERL, que encontré en el blog Matt's Musings con el cual podemos adelantar ó atrasar los tiempos de los subtitulos muy fácilmente.

Ejemplo de uso:
cat The.Bridge.US.S01E05.srt | /home/villatux/sync_subtitles.pl -t +12s > newsubs3.srt

donde  "+12s"  significa que se vá a adelantar 12 segundos,  si quieres atrasar tus subtitulos debes poner el tiempo que desees con signo negativo.

Les paso el código del script: 

#!/usr/bin/perl

use strict;
use Getopt::Long;
my %scales =  ( 'h' => 3600000,
                'm' => 60000,
                's' => 1000,
                'u' => 0,
              );

my ($opt_t);
GetOptions ( "t=s" => \$opt_t, "time"      => \$opt_t,
           );

if ( $opt_t )
{
  my $sign  = substr($opt_t,0,1);
  my $scale = substr($opt_t,length($opt_t)-1, 1);
  my $time  = int(substr($opt_t,1,length($opt_t)-2));

  if ( $sign !~ /[+-]/ || $scale !~ /[hmsu]/ )
  {
    die "Time should be [+-]";
  }

  if ( $scales{$scale} )
  {
    $time = $time * $scales{$scale};
  }

  if ( $sign =~ /-/ )
  {
    $time *= -1;
  }

  while ()
  {
    # 00:01:09,040 --> 00:01:11,713
    if ( /(\d\d):(\d\d):(\d\d),(\d+)\s+-->\s+(\d\d):(\d\d):(\d\d),(\d+)/ )
    {
      my ($sh,$sm,$ss,$su,$eh,$em,$es,$eu) = ($1,$2,$3,$4,$5,$6,$7,$8,$9);

      my $s = ($su + ($ss * $scales{'s'}) + ($sm * $scales{'m'}) + ($sh * $scales{'h'})) + $time;
      my $e = ($eu + ($es * $scales{'s'}) + ($em * $scales{'m'}) + ($eh * $scales{'h'})) + $time;

      my $rt = 0;
      $sh    = int($s/$scales{'h'});
      $rt   += ($sh * $scales{'h'});

      $sm    = int(($s - $rt) / $scales{'m'});
      $rt   += ($sm * $scales{'m'});

      $ss    = int(($s - $rt) / $scales{'s'});
      $rt   += ($ss * $scales{'s'});

      $su    = ($s - $rt);

      $rt    = 0;
      $eh    = int($e/$scales{'h'});
      $rt   += ($eh * $scales{'h'});

      $em    = int(($e - $rt) / $scales{'m'});
      $rt   += ($em * $scales{'m'});

      $es    = int(($e - $rt) / $scales{'s'});
      $rt   += ($es * $scales{'s'});

      $eu    = ($e - $rt);

      printf "%02d:%02d:%02d,%03d --> %02d:%02d:%02d,%03d\n", $sh,$sm,$ss,$su,$eh,$em,$es,$eu;
    }
    else
    {
      print $_;
    }
  }
}
else
{
  print "You need to specify time offset\n";
}
#FIN DEL SCRIPT


Espero les sirva de algo :p

sábado, 9 de noviembre de 2013

Generar archivos de tamaño especifico en BASH

Me he visto en la necesidad de crear archivos de diferentes tamaños para comprobar el envió de los mismos por correo electrónico y verificar la correcta transferencia en cada peso de archivo.

Para esto hice este pequeño script que al ejecutarlo se le manda como argumento el peso que queremos que tenga nuestro archivo , también como segundo argumento, el nombre del archivo que nos generará en el mismo directorio del script:


#!/bin/bash
#USO:     ./script.sh peso_deseado nombre_del_archivo
#EJEMPLOS: 

#EN Kb ./script.sh 300K archivo300K.txt

#EN Mb ./script.sh 3,0M archivo3Mb.txt
#EN Gb ./script.sh 1,0G archivo1G.txt

while [ 0 ]; do

echo "SJKDFLSJFKLJSKFLSJDKLFJDSKLFJSLKDJFK" >> $2
echo "SJKDFLSJFKLJSKFLSJDKLFJDSKLFJSLKDJFK" >> $2
echo "SJKDFLSJFKLJSKFLSJDKLFJDSKLFJSLKDJFK" >> $2
echo "SJKDFLSJFKLJSKFLSJDKLFJDSKLFJSLKDJFK" >> $2
echo "SJKDFLSJFKLJSKFLSJDKLFJDSKLFJSLKDJFK" >> $2
echo "SJKDFLSJFKLJSKFLSJDKLFJDSKLFJSLKDJFK" >> $2
echo "SJKDFLSJFKLJSKFLSJDKLFJDSKLFJSLKDJFK" >> $2
echo "SJKDFLSJFKLJSKFLSJDKLFJDSKLFJSLKDJFK" >> $2

PESO=$(du -h $2 | cut -f 1)

echo "peso acumulado: $PESO"
if [ $PESO == $1 ]
then
break
fi
done

viernes, 8 de noviembre de 2013

SSH desde Android con vSSH + HackersKeyboard

Recomendación:

Hay ocasiones en que andas ocupado, de viaje, o simplemente no tienes al alcance una computadora y precisamente en ese momento tienes que conectarte a tus servidores por SSH.

Pues para mi era un poco molesto hacer esto desde el celular ya que no podía ejecutar comandos anteriores debido a que el teclado que trae de base Android, no trae la funcionalidad de las tipicas "flechitas". Pero esto cambió cuando preguntando en las redes sociales, y pues ahi Leonel Nuñez me pasó e tip de usar HackersKeyboard para tu cliente ssh en el celular.

En mi caso yo usé la combinación de el cliente vSSH y HackersKeyboard, Lo que desde mi primera impresión fué una experiencia totalmente distinta a las que había tenido sin usar este teclado "Full" .

Les comparto una captura de mi pantalla:



martes, 5 de noviembre de 2013

Comprobar si funcionan mis registros DNS

Cuando trabajas constantemente con registros de dominio, es muy importante comprobar que resuelve adecuadamente el DNS cada que hacemos algún cambio en los archivos de configuración ó hacemos algún nuevo registro en el.



Procedimiento:
Para comprobar la configuración de DNS, en una terminal de sistema, escriba nslookup y, a continuación, presione ENTER.

Escriba server , donde la dirección IP es la dirección IP del servidor DNS externo.

Escriba set q=MX y presione ENTER.

Escriba , donde el nombre de dominio corresponde a un dominio de correo externo, y a continuación presione ENTER.

Debe mostrarse el registro de recurso intercambiador de correo (MX) del dominio especificado. Si no se muestra, DNS no está configurado para resolver nombres de dominio externos.




Ejemplo:
En el ejemplo siguiente se muestra los registros MX para ejemplo.mx y nos muestra sus direcciones que tiene configuradas para el correo electronico:

villatux@vuach:~/Escritorio$ nslookup
> 148.227.5.13
Server: 127.0.1.1
Address: 127.0.1.1#53

13.5.227.148.in-addr.arpa name = dns.ejemplo.mx.
> set q=MX
> ejemplo.mx
Server: 127.0.1.1
Address: 127.0.1.1#53

ejemplo.mx mail exchanger = 0 salida.ejemplo.mx.
ejemplo.mx mail exchanger = 0 salida2.ejemplo.mx.



Comprobar si resuelve un registro. En este caso vamos a ver si nuestro DNS resuelve un nuevo registro "facturas" , y lo podemos hacer de esta manera:

villatux@vuach:~/Escritorio$ nslookup facturas.ejemplo.mx 148.227.5.13
Server: 148.227.5.13
Address: 148.227.5.13#53

facturas.uach.mx canonical name = facturas.ejemplo.mx.
Name: facturas.ejemplo.mx
Address: 148.227.5.170



miércoles, 18 de septiembre de 2013

ERROR: The configuration file now needs a secret passphrase PhpMyAdmin

Cuando phpmyadmin nos muestra este error:  "The configuration file now needs a secret passphrase"

 El archivo de configuración ahora necesita salvoconducto (una frase secreta) (blowfish_secret). Es por que viene activada por defecto una autentificación por cookie.

Solución:

1) hacer respaldo de el archivo config.inc.php por si fallas en la configuración.

2) renombrar  el archivo config.sample.inc.php  a config.inc.php 


sudo cp /var/www/phpMyAdmin/config.sample.inc.php /var/www/phpMyAdmin/config.inc.php

3) Editar el archivo  config.inc.php  de nuestra configuración de phpmyadmin  y encontrar la linea:



$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

Ahora escribir lo que usted desee dentro de las comillas simples
$cfg['blowfish_secret'] = 'cualquier cosa';

luego reiniciar nuestro servidor apache sudo /etc/init.d/apache2 restart y estaría todo solucionado.

jueves, 12 de septiembre de 2013

web server con python (muy facil)

A veces nos hace falta mostrar algo sencillo en web,  html y nada más, o simplemente queremos compartir archivos o directorios de manera segura y rápida.

Pues para lograrlo es muy sencillo, solo hay que situarnos en el directorio que querramos compartir vía web y ejecutar el siguiente comando:

# python -m SimpleHTTPServer

Esto ejecutará mediante Python el modulo de servidor web SimpleHTTPServer en el puerto 8000, que basta  y sobra para compartir archivos o tareas comunes que nos quitarían tiempo.

Ahora para acceder a el, solo hay que abrir un navegador web y escribir la ip de la computadora que está ejecutando el servidor web de python.  Ejemplo:


http://192.168.x.x:8000


Con esto se puede:
* mostrar una pagina web html
* compartir archivos vía web
* Etc. etc.

martes, 10 de septiembre de 2013

Falla en instalación de Bricolage CMS + apache2 "missing mod_apreq"

Este error al parecer es por que los scripts de instalación de Bricolage no tienen contemplado aún el módulo apreq en su versión 2:

cmscopaes bricolage-2.0.1 # make
/usr/bin/perl inst/httpd.pl STANDARD


==> Probing Apache Configuration <==

Extracting configuration data from `/usr/sbin/apache2 -V`.
Reading Apache conf file: /etc/apache2/httpd.conf.
Reading Apache conf file: /etc/apache2/modules.d/00_apache_manual.conf.
Reading Apache conf file: /etc/apache2/modules.d/00_default_settings.conf.
Reading Apache conf file: /etc/apache2/modules.d/00_error_documents.conf.
Reading Apache conf file: /etc/apache2/modules.d/00_languages.conf.
Reading Apache conf file: /etc/apache2/modules.d/00_mod_autoindex.conf.
Reading Apache conf file: /etc/apache2/modules.d/00_mod_info.conf.
Reading Apache conf file: /etc/apache2/modules.d/00_mod_log_config.conf.
Reading Apache conf file: /etc/apache2/modules.d/00_mod_mime.conf.
Reading Apache conf file: /etc/apache2/modules.d/00_mod_status.conf.
Reading Apache conf file: /etc/apache2/modules.d/00_mod_userdir.conf.
Reading Apache conf file: /etc/apache2/modules.d/00_mpm.conf.
Reading Apache conf file: /etc/apache2/modules.d/10_mod_mem_cache.conf.
Reading Apache conf file: /etc/apache2/modules.d/40_mod_ssl.conf.
Reading Apache conf file: /etc/apache2/modules.d/45_mod_dav.conf.
Reading Apache conf file: /etc/apache2/modules.d/46_mod_ldap.conf.
Reading Apache conf file: /etc/apache2/modules.d/70_mod_php5.conf.
Reading Apache conf file: /etc/apache2/modules.d/75_mod_perl.conf.
Reading Apache conf file: /etc/apache2/modules.d/76_mod_apreq.conf.
Reading Apache conf file: /etc/apache2/vhosts.d/00_default_ssl_vhost.conf.
Reading Apache conf file: /etc/apache2/vhosts.d/00_default_vhost.conf.
Extracting static module list from `/usr/sbin/apache2 -l`.
Your Apache supports loadable modules (DSOs).
Found Apache user: apache
Found Apache group: apache
Checking for required Apache modules...

Al ejecutar el make, nos dirá que falta el modulo apreq,  y cláro que falta, pues sólo tenemos la versión 2 de este módulo:

The following Apache modules are required by Bricolage and
are missing from your installation:
mod_apreq

Please install them or, if they are installed, you may need to enable them in
the mods-enabled directory of your apache2 installation or use a2enmod ,
if you have that installed on your operating system.

Failed to launch apache2 probing script inst/htprobe_apache2.pl: 256
make: *** [apache.db] Error 1


Para solucionarlo editamos el archivo : htprobe_apache2.pl

cmscopaes bricolage-2.0.1 # vim /home/bricopaes.uach.mx/docs/bricolage-2.0.1/inst/htprobe_apache2.pl

Buscamos la linea: 

 foreach my $mod (qw(apreq expires perl log_config mime alias apache_ssl ssl)) {

Cambiamos por apreq2 de esta manera:

 foreach my $mod (qw(apreq2 expires perl log_config mime alias apache_ssl ssl)) {


jueves, 5 de septiembre de 2013

Editor vi, vim: seleccionar, mover, cortar, copiar y pegar

Un recordatorio de funciones básicas y especiales de vi, vim que nos pueden ser muy utiles :

Modos Vi

  • Modo regular: Éste es el modo que introduce cada vez que abre un archivo. Este modo permite la introducción de comandos.
  • Modo de inserción: Este modo permite la inserción de caracteres que se capturan dentro del documento. Para pasar al modo de inserción, simplemente pulse la tecla Insert en su teclado o la tecla i predeterminada.
  • Modo de reemplazo: Este modo le permite reemplazar el texto existente por el texto que captura. Solo pulse r nuevamente para ir al modo dereemplazo y pulse la tecla Esc para regresar al modo regular.

Comandos básicos

ComandoDescripción
:qSalir del editor (sin guardar la información)
:q!Obliga al editor a cerrarse sin guardar la información (incluso si se realizaron cambios en el documento)
:wqGuarda el documento y cierra el editor
:filenombreGuarda el documento con el nombre especificado

Comandos de edición

ComandoDescripción
xElimina el carácter que está en ese momento bajo el cursor
ddElimina la línea que está en ese momento bajo el cursor
dxdElimina x líneas empezando por la que en ese momento está bajo el cursor
nxElimina n caracteres empezando por el que en ese momento está bajo el cursor
x>>Indenta x líneas a la derecha empezando por la que en ese momento está bajo el cursor
x<<Indenta x líneas a la izquierda empezando por la que en ese momento está bajo el cursor

Buscar y reemplazar

Para buscar una palabra en un documento, en modo regular, sólo introduzca /seguido de la cadena de caracteres que se buscarán. Después pulse la tecla Enter para confirmar. Utilice la tecla n para ir de aparición en aparición.
Para reemplazar una cadena de caracteres por otra en una línea, encontrará un comando muy eficaz en Vi al utilizar las expresiones regulares. Su sintaxis es la siguiente::s/chaine_a_remplacer/chaine_de_remplacement/
:s/cadena_a_ser_reemplazada/cadena_de_reemplazo/
Se puede realizar el reemplazo a lo largo de todo el documento con la siguiente sintaxis: %s/chaine_a_remplacer/chaine_de_remplacement/
:%s/cadena_a_ser_reemplazada/cadena_de_reemplazo/

Copiar y pegar y cortar y pegar

En Vi es posible copiar y pegar una selección de líneas. Para hacerlo, sólo debe introducir el siguiente comando para copiar n líneas:
nyy
Para hacer esto, sólo debe introducir el siguiente comando para copiar n líneas: 
nyy
Por ejemplo, el siguiente comando copiará 16 líneas en el portapapeles:
16yy
Para pegar la selección, sólo debe introducir la letra p.
El proceso de cortar y pegar n líneas es similar mediante el comando:
ndd
Copiar la línea actual y todo el resto de documento hasta el final:
yG

Copia desde la posición actual del cursor hasta final de línea:
y$

Copia desde la posición actual del cursor -1 hasta el inicio de línea:
y0

Copia desde la posición actual del cursor hasta final de palabra:
yw

Copia desde la posición actual del cursor -1 hasta el inicio de palabra:
yb

pegar:
p

Pegar antes del cursor:
P

jueves, 29 de agosto de 2013

phpmyadmin no pide password (Solución)

Si esto les sucede solo es necesario cambiar  el valor de "auth_type"  de tu archivo config.inc.php


busca la linea:

$cfgServers[1]['auth_type'] = 'config'; 

modificala de esta forma
$cfgServers[1]['auth_type'] = 'http'; 

domingo, 25 de agosto de 2013

Comandos básicos para manejar colas de correo en Postfix

El siguiente comando mostrará todos los mensajes, sin información detallada, de la cola:

mailq

El siguiente comando eliminará por completo toda la cola que haya actualmente:
postsuper -d ALL

El siguiente comando eliminará todos los mensajes que hayan sido devueltos por los destinatarios, por la razón que sea:
postsuper -d ALL deferred

El siguiente comando, mostrará con un número, cuantos mensajes hay actualmente en la cola:
postqueue -p | tail -n 1 | cut -d' ' -f5

Si hemos empleado el comando mailq y tenemos el ID del correo, podemos visualizar su contenido con el siguiente comando:

postcat -q ID

Un breve repaso a postsuper:

postsuper -d numero (eliminar el mensaje)
postsuper -d ALL (eliminar todos los mensajes)
postsuper -r Number (Encolar de nuevo el mensaje)
postsuper -r ALL (Encolar de nuevo todos los mensajes)
postqueue -p (Mostrar la cola de correo por pantalla)
postqueue -f (Hacer un flush de la cola de correo, intentar enviar todos los correos)


miércoles, 21 de agosto de 2013

Cambiar idioma del teclado desde terminal

De esas veces que estás trabajando en terminal (sin sistema gráfico), e intentas escribir comandos o desarrollar a travez de la terminal, nos topamos con la desagradable experiencia de nuestro teclado está desconfigurado.

Bueno para configurarlo existen dos maneras, las dos son dese terminal, pero una e  ellas es para  cuando no está ningún sistma gráfico instalado:



MODO TERMINAL (SIN SISTEMA GRÁFICO INSTALADO)

Para configurar el idioma a la configuración de nuestro teclado lo podemos hacer con el comando:

loadkeys

Ejemplo:

loadkeys la-latin

pueden elegir la el idioma necesario para su teclado us, es, la-latin1  ó viendo las configuraciones existentes en:

/usr/share/keymaps/qwerty/  en gentoo  (para otras distros es cuestion de buscarle)

MODO TEMINAL (CON SISTEMA GRÁFICO)

Solo debemos abrir un terminal y ejecutar:

setxkbmap es

Donde "es" es el idioma seleccionado, también podemos hacerlo de este otro modo:

Abrimos el archivo xorg.conf el cual se encuentra en /etc/X11/xorg.conf Para el caso del idioma del teclado en este mismo archivo editamos la seccion correspondiente al teclado.

Core Keyboard’s InputDevice Section
Section “InputDevice”
Identifier “keyboard1″
Driver “kdb”
Option “XkbRules” “xorg”
Option “XkbMode” “pc105″
Option “XkbLayout” “es”

Cambiamos el "es" por el que querramos.


jueves, 15 de agosto de 2013

Solución a "Name or service not known: mod_unique_id: unable to find IPv4 address" en Apache

Cuando recién instalamos Apache en nuestros equipos, a veces nos podemos encontrar con este error al iniciar el servicio:

[Thu Aug 15 17:38:39 2013] [alert] (EAI 2)Name or service not known: mod_unique_id: unable to find IPv4 address of "miequipo"
Configuration Failed

Esto se debe a que no tenemos bien definido nuestro archivo /etc/hosts

tenemos normalmente algo como esto:

::1   localhost 
127.0.0.1 localhost


Suponiendo que el nombre de nuestro equipo se llama  miequipo  y al teclear el comando:  #hostname muestra: "miequipo"   podemos configurar de esta manera:

::1   localhost
127.0.0.1 miequipo.midominio.com miequipo localhost
198.56.23.X midominio.com miequipo localhost

martes, 13 de agosto de 2013

Instalar Apache + php + mysql en Gentoo (LAMP)

Servidor LAMP en Gentoo:


ANTES DE LA INSTALACIÓN

Primero cerciorate  de que estás como super usuario para poder hacer las modificaciones e instalacions necesarias,  luego actualiza tu portage para obtener el software más reciente :

root# emerge --sync

Activamos la variable USE  en /etc/portage/make.conf  agregando:

USE="... apache2 ..."


Hacemos la prueba de instalación :

root# emerge -pv apache mysql php


Veremos que nos faltan algunas variables USE,  las cuales podemos agregar con los siguientes comandos:

Código:

root# echo "net-www/apache apache2 doc ssl" >>/etc/portage/package.use

root# echo "dev-db/mysql berkdb perl ssl" >>/etc/portage/package.use

root# echo "dev-lang/php apache2 berkdb cli crypt doc gdbm iconv mysql ncurses nls pcre readline reflection session spl ssl truetype unicode zlib" >>/etc/portage/package.use


Activar las variables USE pueden significar tener soporte, o no, para determinadas cosas como por ejemplo para XML. Si quieres soporte para xml en php deberías haber activado la USE xml (si lo has olvidado edita /etc/portage/package.use y añádela manualmente al paquete correspondiente).

Una vez hecho esto puede comenzar la instalación.

INSTALACIÓN

Instalar en si mismo es tan sencillo como escribir esto y esperar que acabe:


root# emerge apache mysql php



Para tener la configuración por defecto solo necesitamos escribir esto (mysql nos pedirá que contraseña queremos asignar al usuario mysql root):

root# emerge --config apache
root# emerge --config mysql


Para activar el soporte para PHP en el servidor de vemos editar /etc/conf.d/apache2 y buscar la linea donde pone APACHE2_OPTS y asegurarnos de poner al menos lo siguiente entre comillas (pueden haber más opciones y funcionará correctamente):

-D PHP5

Con esto último nos aseguramos de que el código PHP lo interprete como tal y no como texto plano.

Si queremos que cada vez que se inicie el sistema se auto inicie el servidor apache:

root# rc-update add apache2 default


Si queremos que al iniciar el sistema se auto inicie mysql:

root# rc-update add mysql default


PROBANDO SI FUNCIONA

No es necesario que reiniciemos el sistema, tan solo con escribir lo siguiente bastará para que se inicie el servicio:

root# /etc/init.d/apache2 start
root# /etc/init.d/mysql start


Paso opcional
---------------------------------------------------------------------------------------------
Si estamos trabajando offline y queremos iniciar apache, obtendremos un error diciendo que eth0 no está activo, por lo que podremos hacer una cosa para evitar eso y seguir trabajando con apache de manera local:

Editemos el script
Código:
nano -w /etc/init.d/apache2


Busquemos la linea que pone need net y comentemos la (poniendo # al inicio de la linea) o bien borremos la y escribamos en su lugar need net.lo

El depend() quedara más o menos así:
Código:
depend() {
        need net.lo
        use mysql dns logger netmount postgresql
        after sshd
}


Ahora ya no se nos tiene por que quejar si estamos offline y activamos apache.
---------------------------------------------------------------------------------------------


Una vez iniciados los servicios encendamos un navegador cualquiera y escribamos en la barra de direcciones http://localhost/

ahora podremos ver nuestra pagina web de muestra, y con esto podemos empezar a crear nuestros hosts virtuales.  aca les pongo una liga en donde pueden encontrar información a cerca de ellos:

configurar virtual hosts en apache http://gentoovps.net/apache-ssl/

domingo, 11 de agosto de 2013

Rutas estáticas ARP para evitar ataques: ARP spoofing, ARP Poisoning MITM

El ARP Poisoning ó ARP Spoofing,  es una de las técnicas para realizar un ataque MITM. (leer más sobre el ataque: AQUI )

Con estos pocos pasos vamos a poder dificultar  a nuestro agresor que nos haga un ataque de este tipo, estableciendo tablas ARP estáticas.

En las distribuciones Linux tenemos el comando arp -a para ver las direcciones IP y MAC asociadas a la red. Es muy importante saber identificar cuando algo raro está sucediendo en la red a la cual estamos conectados, si en la ejecución del comando arp -a nos muestra una dirección MAC repedita, puede estar ocurriendo algo (Nos están atacando).

Para evitar que nos estén redirigiendo a voluntad del atacante, podemos establecer rutas estáticas en nuestro equipo, de esta manera le dificultará en gran medida la tarea:

arp -s 192.168.1.1 f4:ec:38:d0:87:16

También puedes especificar a cual interfaz de red está asociada:

arp -s 192.168.1.1 f4:ec:38:d0:87:16 -i wlan0

arp  es el comando usado.
-s es el parámetro que le pasaremos para setear una nueva entrada ARP.

Luego le pasamos la dirección IP y MAC (Que sería la del modem/router o correspondiente), Aunque el comando anteriormente explicado es de seteo temporal, y se borrará luego de el primer reinicio de nuestro equipo, si queremos hacer cambios permanentes en el equipo, haremos lo siguiente:


Crearemos un fichero de texto sencillo con la dirección MAC e IP, en caso de ser varias, una por línea, y lo guardamos.

Luego modificaremos el archivo /etc/network/interfaces y añadiremos al final:

post-up /usr/sbin/arp -f RUTA-DE-NUESTRO-FICHERO

Lo que hace el parámetro -f es leer nuevas entradas desde un fichero de texto. Al añadir el comando al final de /etc/network/interfaces una vez la red sea levantada, el comando se ejecuta, seteando laARP, y así cada vez.
Obviamente nada es 100% seguro, pero con este pequeño procedimiento le daremos un par de dolores de cabeza de más al que intente jodernos, por lo menos no le damos el plato servido.


COMO BORRAR RUTAS ESTATICAS

Si en dado caso te equivocaste, o tienes la necesidad de borrar algunas de las rutas que estableciste puedes hacerlo de la siguiente manera:

arp -d 192.168.1.1


Si obtienes un error “SIOCDARP(pub): No such file or directory”, probablemente necesites darle al comando algunos argumentos extra,  y especificar la interfaz de red asociada al equipo:

arp -d 192.168.1.1 -i wlan0


Espero les sirva este howto, para protegerse en lugares públicos.

lunes, 29 de julio de 2013

Instalar aplicaciones por tarea en Debian/Ubuntu con tasksel

Es la forma más fácil y floja de instalar aplicaciones..  se trata de un script para instalar aplicaciones, ya sea de forma gráfica o desde terminal de comandos.  la forma que les muestro en este post es en terminal de comandos.


el script se llama tasksel  y se instala de la siguiente manera:

sudo apt-get install tasksel

ya instalado el paquete solo es necesario de ejecutarlo como super usuario:

sudo tasksel

y verás algo como esto:



después de esto solo queda elegir la aplicación que necesitas  :)

lunes, 22 de julio de 2013

Instalar ncurses-devel en Ubuntu

Estaba intentando compilar el kernel pre empaquetado para linux-vserver  y a la hora de compilar me pedía el paquete ncurses-dev  que es una biblioteca de programación que provee una API que permite al programador escribir interfaces basadas en texto, y pues para instalarla en ubuntu podemos hacer esto:

sudo apt-get install ncurses-dev

o

sudo aptitude install libncurses5-dev

en mi caso, uso Ubuntu 13.04  y el paquete que está en la lista de repositorios es libncurses5-dev

viernes, 19 de julio de 2013

Solucion a "Call rejected, CallToken Support required" en Asterisk

Una solución para cuando nuestra extensión IAX no se puede registrar en la central telefónica Asterisk:



es editar el archivo /etc/asterisk/iax_general_custom.conf y agregar:

calltokenoptional = 192.168.1.0/255.255.255.0

esto si nuestra extensión está en el segmento 1 de una red LAN  clase C

Si nuestra extensión es remota  podemos poner el rango exacto o también podemos permitir registrar las extensiones desde cualquier ip (No recomendable por seguridad)

calltokenoptional = 0.0.0.0/0.0.0.0


viernes, 12 de julio de 2013

Lo que pasa a teclear "sudo rm -rf /" (Comando realmente destructivo)

Lo que pasa a teclear "sudo rm -rf /"

Es una de las cosas que me fascina de los sistemas UNIX-Like que tienes la libertad de mandar todo a la basura si así lo decides :)

viernes, 5 de julio de 2013

Mini howto para instalar heyu, y con el controlar dispositivos X10 para automatización de edificios (domótica)


Les dejo un howto rápido para instalar heyu  y con el controlar dispositivos que manejen el protocolo x10 desde una interfaz de comando, para después de ahí desarrollar la aplicación que mas te guste y convenga  con reconocimiento de voz, interfaz web, agi con Asterisk VoIP, etc.


mkdir -p ~/software/opensource
cd ~/software/opensource
wget http://heyu.tanj.com/download/heyu-2.11-rc1.tar.gz
cd /usr/src
sudo tar -xzvf ~/software/opensource/heyu-2.11-rc1.tar.gz
cd heyu*
sudo sh ./Configure  && sudo make && sudo make install
#Where would you like the sample Heyu configuration file installed?
#Seleccionar la opción  3. In directory /etc/heyu  (for system-wide access)
#To which port is the CM11 attached?
#Si es un puerto serial seguro podría ser /dev/ttyS0, si es un convertidor de serial a usb sería /dev/ttyUSB0,
es necesario tener conectado el adaptador X10 CM11A al puerto Serial y también a la corriente eléctrica



#Para empezar a probar, Asignarle un ID único al AM466, este equipo tiene 2 dialers desde donde se configura si es A1, B2, C3, etc., 
#Si se le asigna la misma clave al dispositivo X10 este se apagará y prenderá junto con el otro también configurado con la misma clave.
#Conectar el dispositivo electrónico al AM466 configurado.
#Suponiendo que se le asignó A1 al dispositivo X10 AM466, al ejecutar el comando anterior mandará a enceder el dispositivo.
heyu on A1
#Para apagarlo
heyu off A1
#Para encender los dispositivos que estén en la clave A intoducir el siguiente comando
heyu allon A
#Para apagar todos al mismo tiempo
heyu alloff A
#******
#       Luces
#******
#Conectar el foco en el socket X10 y de ahí conectar el socket, OJO este socket no se debe conectar a lámparas fluorescentes o de halógeno solo focos normales .
#Dejar en encendido el apagador
#Inicialmente no prenderá el foco, puesto que hay que asignarle una clave al socket instalado, para esto se tiene que ejecutar en los primeros 30 segundos el siguiente comando:
heyu address C1
#Lo que hacemos con este comando es asignarle el ID C1 al Socket instalado.
#Si pasan más de 30 segundos instalados y no se ejecutó el comando, apagar el apagador y volver a prenderlo para poder mandar el comando anterior.
#Para mandar a prender el foco ejecutar el siguiente comando
heyu on C1
#Para apagarlo
heyu off C1
#Para prender todos los focos en C
heyu lightson C
#Para apagar todos
heyu lightsoff C
#Existe un modelo de socket X10 en el cuál se le puede mandar que disminuye o aumente laintensidad de la señal
#Para saber más comandos de heyu introducir:
 heyu help
#Hay dispositivos x10 como sensores de movimiento, alarmas, detectores de humo e incendio, controles de temperatura, etc., los cuáles pueden monitorearse y de acuerdo al evento mandar a enceder dispositivos, apagarlos, etc.,




próximamente haré mi vídeo de mis pruebas de automatización xD




miércoles, 12 de junio de 2013

Análisis de bitácoras postfix (Logs de postfix de manera clara)

En este post muestro una de las miles de formas de ver de manera clara los logs en tiempo real,   (únicamente los que se envía y reciben y se excluyen los rechazados)     para monitorear lo que sucede con nuestro servidor de correo.

tail -f postfix-in.log | grep 'from=\|to=' | awk '{print $1$2"-"$3 " | " $6 " | " $7}' | grep -v reject

en donde :
tail nos está mostrando un seguimiento de los logs que se están guardando en postfix-in.log

grep nos está acortando todo lo que muestra tail , para que unicamente muestre las lineas que contengan "from="  o la palabra "to="  para mostrar  los correos origen y destino

awk nos permite mostrar únicamente las partes que necesitamos ver de los logs,  en este caso:
$1    Es el mes
$2    Es el dia
"-"    Se agrega un guion para dividir la fecha de la hora
$3     Es la hora
" | "   Divisores para mejor visualización
$6     ID del mensaje en proceso
$7     Email de origen o destino

esto nos muestra el envio y recepción de correos en tiempo real de una manera más legible para poder identificar si se está enviando o recibiendo spam  o hay actividades sospechosas.  Ejemplo:






ya que si también quieren ver  información de cuantos correos se envían  hacia correos externos y también tener una información detallada por envío  (interno/externo)    podemos obtenerla con este script  escrito en dos minutos (se puede mejorar o cambiar totalmente para tus necesidades)

Les dejo el script

#!/bin/bash
#
# USO:    ./script.sh correoorigen@uach.mx
FILE_LOG='/var/log/postfix-in.log'
rm -rf resultados

mkdir resultados
cat $FILE_LOG |grep -v NOQUEUE |grep "from=<"$1 | awk '{print $6}'  > resultados/id.txt


for linea in $(cat resultados/id.txt); do
    grep $linea $FILE_LOG
    grep $linea $FILE_LOG >> resultados/envios_por_id.txt;
    echo "----------------------------------------------------------------" >> resultados/envios_por_id.txt ;
    echo "----------------------------------------------------------------"
done

cat resultados/envios_por_id.txt | awk '/to=</{print $1":"$2":"$3" | "$7 }' >> resultados/destino_con_hora.txt

ENV_POR_DEST=$(cat resultados/destino_con_hora.txt | wc -l) # Cuenta todos los envios

ENV_FORANEOS=$(cat resultados/destino_con_hora.txt | grep -v "@uach.mx" |wc -l)

echo "#######################################################" >> resultados/resultados.txt
echo " RESULTADOS :" >> resultados/resultados.txt
echo "" >> resultados/resultados.txt
echo "Numero total de envíos desde $1 : $ENV_POR_DEST" >> resultados/resultados.txt
echo "" >> resultados/resultados.txt
echo "Numero de envíos foraneos : $ENV_FORANEOS" >> resultados/resultados.txt

echo "#######################################################";
echo " RESULTADOS :";
echo "";
echo "Numero total de envios desde $1 : $ENV_POR_DEST";
echo "";
echo "Numero de envios foraneos : $ENV_FORANEOS";

En este caso es información obtenida de un servidor de correo @uach.mx   eso por eso que está hecho de esta manera pero ustedes lo pueden modificar para el uso que le quieran dar.

Los resultados del script se encontraran en un directorio creado que se llama "resultados"