Sacar emails de un texto cualquiera

Dejo esta autonota para no olvidar como sacar mails de un texto cualquiera y que me los deje en un mail por linea para luego poder exportarlo donde quiera.

Me ha surgido el problema ya que quería sacar los mails de los amigos de facebook. Para ello he importado los contactos de facebook a una cuenta de Yahoo. Una vez los tenía en Yahoo los iba a importar y por alguna razón, seguramente una exigencia de facebook a yahoo, no pude exportarlos como archivo csv. Aquí se me ocurrio imprimir todos los contactos en vista clásica y guardar el archivo como PDF. Lo que hace Yahoo es abrir una web con la lista de contactos formateada e imprimirla, pues lo que he hecho es guardar el código fuente de esa web y pasarle el comando para sacar los mails.

El comando en cuestión es este:

juanmi@improvisa:/$ egrep -oi '\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}' mails_en_web.html > mails_formateados.txt

Un saludo y espero que os valga 😉

 

GRUB y Mac OSx – Recuperar arranque IATKOS ML en grub

GRUB y Mac OSx – Recuperar arranque IATKOS ML en grub

¡Hola! Me dejo esta autonota para poder arrancar con Grub Mac OSx ya que en mi ordenador portatil con triple boot (Debian 7, Mac OSX y Windows 7) cada vez que actualizo algo se me lía muy gorda y esta última vez ha sido al instalar un nuevo kernel de Debian 7 que actualizó grub.

Mi anterior triple boot tenía que iniciar con Chameleon y ahí elegir si usar Mac o Linux. Luego salía grub  donde podía escoger para iniciar linux o windows 7.

Todo se ha resuleto gracias a la nota de  El Agente 47 donde explica como modificar grub para que nos arranque IatkOs L2.

Hay que buscar en /boot/grub/grub.cfg la linea de Mac y dejarla así:

### BEGIN /etc/grub.d/30_os-prober ###
menuentry "Windows 7 (loader) (on /dev/sda1)" --class windows --class os {
insmod part_msdos
insmod ntfs
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root E8E40A31E40A0314
chainloader +1
}
menuentry "Mac OS X (32-bit) (on /dev/sda4)" --class osx --class darwin --class os {
insmod hfsplus
set root='(hd0,4)'
multiboot /boot
}

Donde debéis cambiar hd0,4 por vuestro disco, partición

Ahora desde grub podremos elegir los 3 sistemas operativos.

Un saludo y agradecer desde aquí al Agente 47 haberme solcionado el problema 😉

 

Manual Nikon Total Station DTM 350 y Nikon Total Station DTM 330

Os dejo el manual el inglés de la Estación de Nikon para los modelos 330 y 350

Manual Nikon Total Station DTM-350
Manual Nikon Total Station DTM-330

Un saludo.

Voces en español para Asterisk 13, Asterisk 12 y Asterisk 11

Improvisa :: Informática :: Sonidos español para asterisk 11Hola os dejo el link para que podáis descargar las Voces en español para Asterisk 13, Asterisk 12 y Asterisk 11. Fue una locura encontrarlos y al final gracias a una distribución llamada vozbox conseguí sacarlos e incorporarlos a mi asterisk 11, después he comprobado que sigue funcionando en asterisk 12 y asterisk 13.

Los sonidos en español para asterisk 11 asterisk 12 y asterisk 13 están basados en los que en su día publico Alberto Salgredo en voipnovatos, que desde aquí y de nuevo le doy las gracias.

El archivo que os adjunto es el directorio completo /var/lib/asterisk/sounds los dos idiomas unidos, inglés y español.

Una vez que tengáis instalado vuestro asterisk 11, asterisk 12 o asterisk 13 con los sonidos en inglés hacer un mv de los sonidos originales y descargar el archivo que os dejo, tendremos que darle los permisos adecuados, para ello seguir estas instrucciones:

root@asterisk11:~# cd /var/lib/asterisk/
root@asterisk11:/var/lib/asterisk# mv sounds sounds-originales
root@asterisk11:/var/lib/asterisk# wget https://www.improvisa.com/descargas/sonidos_esp_asterisk_11.tar.bz2
root@asterisk11:/var/lib/asterisk# bzip2 -dc sonidos_esp_asterisk_11.tar.bz2 | tar -xv

Esto nos dejará un directorio llamado sounds

root@asterisk11:/var/lib/asterisk# chown asterisk:asterisk sounds -R
root@asterisk11:/var/lib/asterisk# cd sounds
root@asterisk11:/var/lib/asterisk/sounds# chmod 664 * -R
root@asterisk11:/var/lib/asterisk/sounds# find ./ -type d -exec chmod 775 {} \;

Ya los tendremos en español e inglés

Os dejo el link en mis servidores, un saludo.

https://www.improvisa.com/descargas/sonidos_esp_asterisk_11.tar.bz2

Hostname fijo en vps 1and1

Después de comprar mi VPS en 1and1 o 1&1 me he dado cuenta que después de cambiar el nombre del hostname a mi Debian cada vez que lo reinicio vuelve a quedarse con el mismo número ilegible que le da el panel Virtuozzo.

Para cambiarlo y que se quede fijo debemos hacer lo siguiente:

root@s1690234425:~# vi /etc/hostname

pondremos el nombre que queramos.

root@s1690234425:~# /etc/init.d/hostname.sh

Una vez hecho debemos decirle que el archivo no pueda cambiarse:

root@s1690234425:~# chattr +i /etc/hostname

Con esto después de reiniciar tendremos nuestro nombre de host como queremos.

Saludos.

OpenWRT como Repetidor y Puente

Dejo esta configuración ya que me ha costado encontrar la solución al modo wifi que quería en mi OpenWRT. Necesitaba poner mi Router TP-Link  TL-WR842ND con OpenWRT en modo repetidor wifi. El modo es algo extraño ya que debe tener una interfaz wifi que se conecta como cliente a un essid existente y por otra parte emitir otro nuevo essid y deben estar sin enrutar, es decir, las dos redes y todos los equipos conectados deben hacerlo a la misma red.

Asumo que ya tenemos flasheado el Router con la última versión de OpwnWRT.

Para ello necesitaremos instalar el paquete relayd, para ello pondremos esto en nuestro SSH:

opkg update
opkg install relayd
/etc/init.d/relayd enable

La configuración de la wifi será la siguiente (/etc/config/wireless):

config wifi-device ‘radio0’
option channel ‘1’ #Debe ser el mismo que el canal que tiene el essid al que me voy a conectar
option disabled ‘0’

config wifi-iface
option ssid ‘essid_al_que_conecto’
option encryption ‘psk2’ 
option device ‘radio0’
option mode ‘sta’
option network ‘wwan’
option key ‘password’

config wifi-iface
option device ‘radio0’
option mode ‘ap’
option ssid ‘essid_nuevo’
option encryption ‘psk2’
option key ‘password’
option network ‘lan’

Ojo con la primera parte de este archivo, cambiará según las opciones que tengamos.

La configuración de red será esta (etc/config/network):

config interface ‘loopback’
option ifname ‘lo’
option proto ‘static’
option ipaddr ‘127.0.0.1’
option netmask ‘255.0.0.0’

config interface ‘lan’
option ifname ‘eth0’
option type ‘bridge’
option proto ‘static’
option ipaddr ‘10.0.1.240’
option netmask ‘255.0.0.0’
option gateway ‘10.0.0.1’
option dns ‘8.8.8.8’

config interface ‘wwan’
option proto ‘dhcp’ #Esta es la ip importante, es nuestra red. El resto como el ejemplo. Si queremos podemos poner esta estática.

config ‘interface’ ‘stabridge’
option ‘proto’ ‘relay’
option ‘network’ ‘lan wwan’
option ipaddr ‘10.0.0.240’

Debemos deshabilitar DHCP ya que lo dará otro router de la red. Con este modo se pasa todo el tráfico al siguietne AP (/etc/config/dhcp).

config dhcp lan
option interface lan
option start 100
option limit 150
option leasetime 12h
option ignore 1

config dhcp wan
option interface wan
option ignore 1

Lo único que nos queda es deshabilitar el firewall ya que no nos hará falta.

/etc/init.d/firewall stop

/etc/init.d/firewall disable

Con esto ya tendremos nuestro OpenWRT en modo repetidor.

Saludos.

Capturar fireware desde consola con Debian

Dejo esta autonota porque cada vez que tengo que capturar con mi cámara MiniDV lo último grabado, nunca me acuerdo de como tengo que hacerlo y pierdo 10 minutos en encontrarlo:

Para capturar utilizo el comando dvgrab, para ello sólo necesitaremos instalar el paquete con:

root@improvisa:/# apt-get install dvgrab

Ahora una vez pinchada la cámara al puerto fireware y rebobinada hasta donde queremos comenzar sólo tenemos que ejecutar este comando para que lance una captura hasta que llegue la final de la cinta o lo cancelemos.

 

root@improvisa:/# dvgrab -f avi -s 0 /carpeta_de_destino/archivo.avi

El comando le dice a dvgrab que capture en el contenedor avi sin pérdida de calidad y lo deje todo en un fichero, no haga autosplit.

En mi caso que para lo que lo necesito es para capturar funciones enteras de una compañía de clown, www.colectivoclown.com, necesito eso, no perder datos y todo de principio a fin en un solo fichero.

Dvgrab tiene muchísimas más opciones, podéis visitar su página man dvgrab y verlas todas.

Un saludo.

 

Reparar MySQL

Después de un error en mi base de datos he tenido que reparar la base de datos mysql, dejo aquí los comando que he tenido que utilizar como autonota porque seguramente me ocurra alguna que otra vez. Si alguien necesita lo mismo pues también lo tiene 😉

Existen dos caminos a elegir, mysqlcheck y myisamchk, la gran diferencia es que uno no necesita que paremos la base de datos y el otro si, también que uno trabaja directamente sobre los archivos del disco duro y el otro sobre la base de datos montada.

Con mysqlcheck NO debemos parar la base de datos y los comandos son estos, aunque no veáis mysqlcheck, estos comandos son atajos a ese comando:

root@improvisa:/# mysqlrepair –all-databases -u root -p
root@improvisa:/# mysqloptimize –all-databases -u root -p

Con myisamchk debemos para la base de datos, ir al directorio que contiene nuestras bases de datos y desde allí lanzar el comando y una vez acabado rearmar la base de datos

root@improvisa:/# /etc/init.d/mysql stop
Stopping MySQL database server: mysqld.

root@improvisa:/# cd /var/lib/mysql/
root@improvisa:/var/lib/mysql/# find ./ -type f -name «*.MYI» -exec myisamchk -r {} \;

root@improvisa:/# /etc/init.d/mysql start
Starting MySQL database server: mysqld.
Checking for corrupt, not cleanly closed and upgrade needing tables..

Un saludo

Cambios masivos en Bind

Creo esta entrada como autonota para recordar los comandos que utilizo para hacer cambios masivos en los archivos de Bind9, ya que cada vez que hago cambios de servidores necesito hacer cambios en todos los dominios que tengo y cada vez son más.

Sólo para recordar la estructura de archivo bind os lo pongo aquí, los puntos importantes son el serial, ya que en cada cambio debe cambiar y luego las IPs a la que los registro A deben apuntar.

$ORIGIN example.com.
$TTL 86400
@     IN     SOA    dns1.example.com.     hostmaster.example.com. (
                    2001062501 ; serial
                    21600      ; refresh after 6 hours
                    3600       ; retry after 1 hour
                    604800     ; expire after 1 week
                    86400 )    ; minimum TTL of 1 day
;
@            IN     NS     dns1.example.com.
@            IN     NS     dns2.example.com.
@            IN     MX     10     mail.example.com.
@            IN     MX     20     mail2.example.com.
;
@            IN     A       10.0.1.2
server1      IN     A       10.0.1.2
server2      IN     A       10.0.1.2
dns1         IN     A       10.0.1.2
dns2         IN     A       10.0.1.3
;
ftp          IN     CNAME   server1
mail         IN     CNAME   server1
mail2        IN     CNAME   server2
www          IN     CNAME   server2

Para hacer un cambio en todos los archivos de zona, por ejmplo cambiar la ip del servidor de nombre dns1 10.0.1.2 por 130.89.56.76 debemos ejecutar este comando:

root@improvisa:~# find /var/cache/bind/ -type f -exec  sed -i ‘s/10.0.1.2/130.89.56.76/g’ {} \;

Este comando entrara en el directorio donde tengamos los archivos de zona, en este caso /var/cache/bind/, y sustituirá todas las ocurrencias de la ip 10.0.1.2 por 130.89.56.76.

Ahora nos queda eliminar la linea donde esté el serial y sustituirla por el nuevo serial, no nos vale encontrar el serial ya que en los archivos este será distinto, sino que tendremos que buscar la linea donde aparezca el texto «serial2» y sustituir toda la linea por la nueva, para ello utilizaremos el siguiente comando:

root@improvisa:~# find /var/cache/bind/ -type f -exec  sed -i ‘s/\(.*; serial\)/                        2013031901   ; serial/’ {} \;

Lo que hace este comando es entrar en el directorio /var/cache/bind/ donde tenemos los archivos de zona y buscar la cadena «; serial» con cualquier cosa delante, es lo que indica la expresión regular .*, es decir nos da igual el número que tenga, y sustituiremos esa ocurrencia por »                        2013031901   ; serial»

Espero que os sirva de ayuda.

Un saludo.

Migración MySQL de un servidor a otro

Esta semana he tenido que cambiar de proveedor de VPS y con ello he tenido que migrar todos los datos de un servidor a otro. PAra el tema de ficheros la cosa ha estado fácil, un simple rsync nos irá moviendo los archivos que necesitemos junto con sus permisos. El comando es algo complicado pero funcional:

root@improvisa:~# rsync -alHpogDtv -e «ssh -p 22» –numeric-ids –delete-after –stats root@serrvidor_origen:/var/www/ /var/www/

Con esto obtendremos una copia exacta de nuestro directorio para apache. Decir que también copiara enlaces simbólicos, con lo que podremos hacer copias de lo que queramos, por ejemplo el directorio de configuración de apache2 /etc/apache2/. Los pasos de usuarios propietarios y grupos propietarios lo hago de modo numérico, con lo cual lo mejor es repasar que los números coinciden con los nombres de usuario correspondientes. Fijaros que los permisos coinciden con la anterior nota que creé en improvisa sobre los premisos óptimos del directorio /var/www/ de apache2: Permisos óptimos para apache2 en Debian

Una vez que tenemos todos los archivos debemos migrar las bases de datos de MySQL, para ello debemos generarnos un script que sacará el nombre de la base de datos, el usuario que tiene permisos sobre ella y la password, una vez hecho creará dicha base de datos en el servidor remoto junto con su usuario correspondiente y copiará los datos al servidor nuevo. El script es el siguiente, un modificado de :

#!/bin/bash
# Se debe ejecutar en el servidor origen
# Script creado por Juanmi de la versión de nixCraft project <http://cyberciti.biz/fb/>
# ------------------------------------------------------------
# Configurar primero - MySQL local usuario/password
_lusr="root"
_lpass="password_local"
_lhost="localhost"

# Configurar primero - MySQL remoto usuario/password
_rusr="root"
_rpass="password_remoto"
_rhost="localhost"

# Configurar primero - Acceso SSH remoto usuario/password/puerto
# Lo ideal sería tener acceso ssh sin password como dicen aquí: http://www.doctoresdelpc.com/noticias/conectarse-por-ssh-sin-password/
_rsshusr="root"
_rsshhost="17.126.128.142"
_rsshport="22"

# Fichero SQL que pasaremos al servidor remoto con los datos
_tmp="/tmp/output.mysql.$$.sql"
_tmp_con="/tmp/output_con.mysql.$$.sql"

# Debemos quitar del for las bases de datos que NO queramos copiar con grep -v, si solo queremos una usar grep
for i in $( mysql -u "$_rusr" -p"$_lpass" -e "show databases;"|grep -v information_schema|grep -v Database|grep -v mysql|grep -v phpmyadmin ); do

# Creación de accesos a la bbdd
_db="$i"
_user=`echo $i|cut -c1-16`

echo ""
echo "##### $i #####" |tr '[a-z]' '[A-Z]'
echo ""

# Nos aseguramos que podemos entrar a la base de datos
mysqladmin -u "$_lusr" -p"$_lpass" -h "$_lhost" ping &>/dev/null || { echo "Error: El servidor MySQL no está online o estos datos: _lusr, _lpass, y _lhost no son correctos"; exit 2; }

# Nos aseguramos que la base de datos existe
mysql -u "$_lusr" -p"$_lpass" -h "$_lhost" -N -B -e'show databases;' | grep -q "^${_db}$" || { echo "Error: DBase de datos: $_db no encontrada."; exit 3; }

##### OJO, en el paso 1 el $_db debe ir escapado con \, debe quedar así sin espacios \ ` $_db \ ` Se muestra sin \ por el plugin de wordpress
##### Paso 1: Creamos el fichero sql para pasasrselo al remoto con la base de datos y el usuario/password con acceso ####
echo "*** Creando .sql con información de la base de datos $_db..."
echo "create database IF NOT EXISTS \`$_db\` " > "$_tmp"

# Creamos la query para sacar el usuario y el password que tiene permisos para usar esa base de datos.
mysql -u "$_lusr" -p"$_lpass" -h "$_lhost" -B -N \
-e "SELECT DISTINCT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') AS query FROM user" \
mysql \
| mysql -u "$_lusr" -p"$_lpass" -h "$_lhost" \
| grep "$_user" \
| sed 's/Grants for .*/#### &/' >> "$_tmp"

### Paso 2: Añadimos ; al final de todas las lineas del archivo, para que en el remoto no falle.
sed "s/$/;/" "$_tmp" > "$_tmp_con"

##### Paso 3: Mandamos el sql al servidor remoto ####
echo "*** Mandando $_db en ${_rsshhost}..."
scp -P "$_rsshport" "$_tmp_con" ${_rsshusr}@${_rsshhost}:/tmp/

#### Paso 4: Creamos la base de datos y el usuario en el servidor remoto mediante ssh ####
echo "*** Creando $_db y usuario en ${_rsshhost}..."
ssh -p "$_rsshport" ${_rsshusr}@${_rsshhost} mysql -u "$_rusr" -p"$_rpass" -h "$_rhost" < "$_tmp_con"

#### Paso 5: Llenamos la base de datos correspondiente con mysqldump ####
echo "*** Exportando los datos de $_db desde $HOSTNAME a ${_rsshhost}..."
mysqldump -u "$_lusr" -p"$_lpass" -h "$_lhost" "$_db" | ssh -p "$_rsshport" ${_rsshusr}@${_rsshhost} mysql -u "$_rusr" -p"$_rpass" -h "$_rhost" "$_db"

# Borramos los ficheros generados. 
rm -f "$_tmp"
rm -f "$_tmp_con"
ssh -p "$_rsshport" ${_rsshusr}@${_rsshhost} rm "$_tmp_con"

done

Una vez que tengamos creado el scrip le daremos permisos para poder ejecutarlo:

root@improvisa:~# chmod a+x ./migracion_mysql

Y ahora solo queda ejecutarlo en la máquina local, el script se encargará de mandar todo al nuevo servidor.

Lo único que nos quedará por hacer es ejecutar la consulta en el MySQL remoto FLUSH PRIVILEGES; para que los usuarios recientemente creados puedan empezar a utilizar las bases de datos.

Un saludo y espero que os valga.