Archive for mayo 2009

h1

VirtualBox 2.2 no reconoce en el huésped los dispositivos USB

30/05/2009

Un problema habitual en VirtualBox es el no reconocimieinto de los dispositivos USB enchufados en el host por parte del huésped. En Ubuntu 8.10 Intrepid amd64, con VirtualBox 2.2, se soluciona aplicando los siguientes 3 pasos:

1º) Añadir o descomentar el siguiente código en la llave «do_start()»:

# sudo nano /etc/init.d/mountdevsubfs.sh
[...]
do_start () {
#
# Mount a tmpfs on /dev/shm
#
SHM_OPT= [ "${SHM_SIZE:=$TMPFS_SIZE}" ] && SHM_OPT=",size=$SHM_SIZE" domount tmpfs shmfs /dev/shm tmpfs -onosuid,nodev$SHM_OPT

#
# Mount /dev/pts. Master ptmx node is already created by udev.
#
domount devpts "" /dev/pts devpts -onoexec,nosuid,gid=$TTYGRP,mode=$TTYMODE

# Magic to make /proc/bus/usb work
#
mkdir -p /dev/bus/usb/.usbfs
domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
ln -s .usbfs/devices /dev/bus/usb/devices
mount --rbind /dev/bus/usb /proc/bus/usb

}
[...]

2º) Añadir una orden de acceso en el fstab, hallando previamente el GID del grupo vboxusers:

# grep vboxusers /etc/group
vboxusers:x:125:username

# sudo echo "none /proc/bus/usb usbfs devgid=125,devmode=664 0 0" >> /etc/fstab
Nota: Reemplazar 125 por el número devuelto en el anterior comando.

3º) Dar permisos de escritura sobre los dispositivos USB (de otra manera aparecerían en la barra inferior de VB pero desactivados, sombreados).

#sudo nano /etc/udev/rules.d/40-permissions.rules Reemplazar las ocurrencias de permisos «660» por «666»

Reiniciar el sistema, abrir VirtualBox y en la propia configuración de la máquina virtual, añadir los filtros necesarios para acceder a los dispositivos USB que se deseen.

h1

Como partir un fichero en Linux

29/05/2009

En otros sistemas operativos hay utilidades bien conocidas como Hacha o ZIP que permiten dividir cualquier fichero en varias partes, de modo que sea más fácil para manejar (transmitirlo por Internet en protocolos que no tengan recuperación ante interrupciones, o grabarlo en medios físicos de capacidad limitada como DVDs).

En Linux existen varias alternativas, siendo la más conocida «split»:

carlos@shirley:/tmp/prueba$ split -d --bytes=100m archivoGrande.avi archivoPequeno_
carlos@shirley:/tmp/prueba$ ls -la
total 1144332
drwxr-xr-x 2 4096 2009-05-29 13:16 .
drwxrwxrwt 18 4096 2009-05-29 13:14 ..
-rw-r--r-- 1 585306112 2009-05-29 13:12 archivoGrande.avi
-rw-r--r-- 1 104857600 2009-05-29 13:16 archivoPequeno_00
-rw-r--r-- 1 104857600 2009-05-29 13:16 archivoPequeno_01
-rw-r--r-- 1 104857600 2009-05-29 13:16 archivoPequeno_02
-rw-r--r-- 1 104857600 2009-05-29 13:16 archivoPequeno_03
-rw-r--r-- 1 104857600 2009-05-29 13:16 archivoPequeno_04
-rw-r--r-- 1  61018112 2009-05-29 13:16 archivoPequeno_05

Para recomponerlo, en GNU/Linux vale con:
carlos@shirley:/tmp/prueba$ cat archivoPequeno_0* > archivoRecompuesto.avi

Y se puede comprobar que el proceso ha funcionado bien buscando diferencias entre el original y el recompuesto:
carlos@shirley:/tmp/prueba$ diff archivoGrande.avi archivoRecompuesto.avi
carlos@shirley:/tmp/prueba$

Mientras, si es necesario recomponerlo en Ms. Windows:
c:\> copy /b archivoPequeno_0* archivoRecompuesto.avi

Además, en GNU/Linux hay otras opciones como Dar (alternativa mejorada de Tar), Hoz o con interfaz gráfico como Dalle.

Fuente: LinuxPoison

04857600
h1

Script bash para generar alarmas según la ocupación del disco

25/05/2009

En caso de necesitar monitorear discos recibiendo un correo electrónico si se alcanza un porcentaje de ocupación determinado, un workaround rápido puede ser este pequeño script, personalizándolo con los valores propios:

#!/bin/bash
#It is neccesary to install "sendEmail", not "sendmail"

MONITOR1=80 #First alarm (%)
MONITOR2=90 #Second alarm (%)
DISCO=`df -h | grep /dev/sda2 | cut -c 41-42` #Change /dev/sda2, use the disk you want to monitor.
GB=`df -h | grep /dev/sda2 | cut -c 35-38`

#If your smtp server needs authentication, add parameters "-xu USERNAME" and "-xp PASSWORD"

if [ $DISCO -ge $MONITOR2 ]
then
echo "Espacio critico en disco, superado $MONITOR2"
sendEmail -l /var/log/syslog -f direccionRemite@gmail.com -t direccionDestino@gmail.com -u "Espacio CRITICO en Shirley - /dev/sda1" -m "El disco de Shirley está al $DISCO%. Espacio libre de $GB" -s miServidorSMTP.com
logger "80% alcanzado"
else
if [ $DISCO -gt $MONITOR1 ]
then
echo "Espacio critico en disco, superado $MONITOR1"
sendEmail -l /var/log/syslog -f direccionRemite@gmail.com -t direccionDestino@gmail.com -u "Espacio CRÍTICO en Shirley - /dev/sda1" -m "El disco de Shirley está al $DISCO%. Espacio libre de $GB" -s miServidorSMTP.com
logger "____________90% alcanzado"____________
else
echo "Disco OK"
fi
fi

Una vez creado el script, es necesario darle permiso de ejecución:
chmod 700 /root/alarma.ocupacion.sda2.sh

E incluirlo en el cron con la periodicidad deseada:
root@shirley:~# crontab -e
# m h dom mon dow command
* 19 * * * /root/alarma.ocupacion.sda1.sh
* 22 * * * /root/alarma.ocupacion.sda1.sh
* 9 * * * /root/alarma.ocupacion.sda1.sh

h1

Cómo programar o realizar por consola un reinicio del router Linksys AG241 / AG241V2

10/05/2009

Si se desea programar un reinicio o automatizarlo para este modelo concreto de router, se puede realizar utilizando este sencillo script o la sigueinte versión que he modificado ligeramente:

#!/bin/sh
#original source: http://forums.whirlpool.net.au/forum-replies-archive.cfm/623775.html
#fixes: Carlos Gacimartín, http://gacimartin.es
#
#It is necessary to install CURL. (apt-get install curl in Debian/Ubuntu)
#Hosts to test:
HOSTS="194.179.1.100 www.terra.es www.google.es telefonica.es"
#
# email report when it fails. That of course is a local address on the same server... that address then forwards on to an external address
SUBJECT="Pings failed so I tried to reboot :("
EMAILID="cgacimartin@dominio.com"
#
# number of ping requests per host.
COUNT=3
RAWOUTPUT=""
#
for HOST in $HOSTS
do
ping -c $COUNT $HOST > RAWOUTPUT
if [ $? -ne 0 ]
then
logger "ping: $HOST unreachable"
echo "ping: $HOST unreachable"
else
exit 0 #no sense in going on if all is good
fi
done
#
echo $RAWOUTPUT | mail -s "$SUBJECT" $EMAILID
#
#Attention,in the CURL command choose:
# - SRebootvalidate : reboot software, only ADSL.
# - HRebootvalidate : reboot hardware, power failure simulation.
#and change the router IP and TWICE the user/password data.
#
curl --anyauth -s -u admin:password "http://172.26.0.1/Reboot.asp" "http://172.26.0.1/apply.cgi?submit_button=Reboot_validate&action=Rebootvalidate&submit_type=HRebootvalidate&reboot_username=admin&reboot_password=password"
#
exit 0

Además, se puede incluir en el cron:

#crontab -e
* * * * * /root/testear.router.AG241.sh

de modo que cada minuto compruebe la conectividad con Internet y reinicie el router si falla, a parte de enviar un correo.

Además, se puede comprobar remotamente el estado del router (conocer la última vez que se reinició), mediante snmp. Para ello es necesario activarla a través de la interfaz gráfica, y después ejecutar:

carlos@wifiMonit:~$ snmpwalk -c private -v 1 172.26.0.1 | grep hrSystemUptime
HOST-RESOURCES-MIB::hrSystemUptime.0 = Timeticks: (33329) 0:05:33.29

h1

Error SSH buffer_get_ret/buffer_get_int

08/05/2009

Ante este problema al conectar por ssh:

carlos@ikeys:~$ ssh corp1.google.es
buffer_get_ret: trying to get more bytes 4 than in buffer 0
buffer_get_int: buffer error

Se presenta el problema del un fichero «known_hosts» mal formado. Como solución se presentan dos alternativas:

Solución #1: Borrarlo
mv $HOME/.ssh/known_hosts $HOME/.ssh/known_hostsOLD
ó
rm $HOME/.ssh/known_hosts

Solución #2: Corregirlo
nano .ssh/known_hosts

Revisar el fichero de modo que cada entrada aparezca solo en una línea. De este modo todas las líneas deben empezar por "[1]".

El problema también puede ocurrir en el fichero authorized_keys.

h1

Como evitar el error «BAD PASSWORD» al poner una contraseña débil a un usuario en GNU/Linux

08/05/2009

Cuando el propio usuario intenta cambiar su password, el sistema comprueba la resistencia ante ataques del nuevo password. Si cumple unos mínimos, éste se acepta; en otro caso, se rechaza:

[carlos@shirley ~]$ passwd
Changing password for user carlos.
Changing password for carlos
(current) UNIX password: ******
New UNIX password: *******
BAD PASSWORD: it is based on your username
New UNIX password: *******

Si de todas maneras se quiere poner un password débil, éste lo debe poner root a ese usuario:

[carlos@shirley ~]# su -
Password: *******

[root@shirley ~]# passwd carlos
Changing password for user carlos.
New UNIX password: ****
Retype new UNIX password: ****
passwd: all authentication tokens updated successfully.