h1

Como formatear una partición en NTFS desde Linux

18/06/2009

A veces esnecesario formatear una partición en FAT32 o NTFS desde Linux (HD multimedia, dispositivos móviles que solo soportan FAT32, etc). En el caso de NTFS, es tal sencillo como descargar la utilidad mkfs.ntfs y utilizarla con la misma normalidad que mkfs.ext:

Descarga e instalación:
carlos@WhenIGrowUp:/$ sudo apt-get install ntfsprogs
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes extras:
libntfs10
Se instalarán los siguientes paquetes NUEVOS:
libntfs10 ntfsprogs
0 actualizados, 2 se instalarán, 0 para eliminar y 0 no actualizados.
Necesito descargar 383kB de archivos.
Se utilizarán 942kB de espacio de disco adicional después de desempaquetar.
¿Desea continuar [S/n]?
Des:1 http://archive.ubuntu.com hardy/main libntfs10 2.0.0-1ubuntu2 [114kB]
Des:2 http://archive.ubuntu.com hardy/main ntfsprogs 2.0.0-1ubuntu2 [268kB]
Descargados 383kB en 1s (335kB/s)
Seleccionando el paquete libntfs10 previamente no seleccionado.
(Leyendo la base de datos ...
145091 ficheros y directorios instalados actualmente.)
Desempaquetando libntfs10 (de .../libntfs10_2.0.0-1ubuntu2_amd64.deb) ...
Seleccionando el paquete ntfsprogs previamente no seleccionado.
Desempaquetando ntfsprogs (de .../ntfsprogs_2.0.0-1ubuntu2_amd64.deb) ...
Configurando libntfs10 (2.0.0-1ubuntu2) ...
Configurando ntfsprogs (2.0.0-1ubuntu2) ...
Processing triggers for libc6 ...
ldconfig deferred processing now taking place

Formateo:
carlos@WhenIGrowUp:~# mkfs.ntfs /dev/sdb1
Cluster size has been automatically set to 4096 bytes.
100% - Done.
Creating NTFS volume structures.
mkntfs completed successfully. Have a nice day.

y listo, ya se puede utilizar:
carlos@WhenIGrowUp:~# mount /dev/sdb1 /mnt/

Recordar que si se desea su montaje automático en el arranque del sistema hay que incluirlo en el fichero /etc/fstab .

h1

Error «mount: tipo de sistema de ficheros ‘ext4’ desconocido»

17/06/2009

Durante la progresiva desaparición de ReiserFS, consolidándose ext3 como sistema de ficheros en GNU/Linux 10 años después de su publicación se ha incluido como oficial el soporte de ext4 en el Kernel, con muchas mejoras y aumento de rendimiento (algunos equipos ya arrancan en 10″).

Tras formatear una partición con fsck.ext4, si al montarla ocurre el siguiente error:

carlos@shirley:~$ sudo mount -t ext4 /dev/sdc1 /mnt/
mount: tipo de sistema de ficheros 'ext4' desconocido
mount: unknown filesystem type 'ext4'

Es necesario utilizar un kernel 2.6.28 o superior. Para ver la versión que se está utilizando en ese momento:

carlos@shirley:~$ uname -a

y para instalar un kernel con soporte para ext4:

root@shirley:~# apt-cache search 2.6.28
root@shirley:~# apt-get install linux-image-2.6.28-11-generic

Tras esto, verificar que en el siguiente arranque se va a utilizar ese kernel. Para ello, si se utiliza Grub como gestor de arranque, comprobar o adaptar su fichero de configuración para que lo utilice:

carlos@WhenIGrowUp:/$ sudo /boot/grub/menu.lst
[...]
default 0
[...]
## ## End Default Options ##
title Ubuntu 8.10, kernel 2.6.28-11-generic
root (hd1,0)
kernel /boot/vmlinuz-2.6.28-11-generic root=UUID=bc4f22438-f175-2f7b-aebf-123456789 ro quiet splash reboot=b pci=noacpi
initrd /boot/initrd.img-2.6.28-11-generic
[...]

Guardar y reiniciar.

Nota I: si se pone la partición «/» en ext4, debe cambiarse el gestor de arranque a uno que soporte ext4. Grub por ej. no lo soporta, es necesario actualizarlo a Grub2.
Nota II: se se desea migrar una partición existente, se puede seguir el siguiente work around.

h1

Error Monit «Alert handler failed, retry scheduled for next cycle»

06/06/2009

Este error en Monit (utilidad software libre para la monitorización de sistemas, , no confundirla con su hermana comercial Mmonit) :

Alert handler failed, retry scheduled for next cycle

a la hora de enviar una alerta por correo electrónico se puede encontrar en /var/log/monit.log

Según la documentación oficial de Monit se puede deber a una incorrecta configuración de la cuenta de correo en el fichero /etc/monit/monitrc.
Generalmente la línea de tipo de autenticación suele ser la principal causa si ésta no es adecuada, luego con comentarla se soluciona la mayoría de los problemas (o ajustarla si se conocen los parámetros correctos del servidor).

#using TLSV1

h1

Como resetear el password de DD-WRT

06/06/2009

Se puede dar un problema con este firmware en el que el password no es recordado y por tanto no se tenga acceso al interfaz web o telnet de gestión.
Los routers o puntos de acceso compatibles con DD-WRT suelen tener una zona de memoria para el firmware y otra más pequeña (nvram) para almacenar las variables o datos de uso habitual. En ésta se almacena el password.

Para borrarla, antes de dar por perdido el aparato, y recuperar su funcionalidad (debrick) hay varios métodos, listados de menos a más agresivos:

Reseteo 30/30/30: Consiste en tener arrancando el aparato, presionar el botón de reset de la parte posterior con un bolígrafo o similar durante 30 segundos, sin soltarlo desenchufar la corriente, esperar otros 30 segundos y sin soltarlo igualmente enchufarla de nuevo, esperando otros 30 segundos. Este método resetea la configuración, por lo que es necesario configurarlo desde cero nuevamente (en caso de ser un router, es aconsejable entonces tener a mano los datos de la conexión adsl antes de hacerlo). Entrar en http://192.168.1.1 . Si pide alguna contraseña, y el reseteo ha funcionado correctamente, utilizar como usuario «root» y password «admin«.

Reseteo 90/90/90: igual que método 30/30/30 pero aplicando 90 segundos para cada intervalo.

tftp DD-WRT: cargar de nuevo el firmware de DD-WRT, de cara a eliminar cualquier inconsistencia o fallo en el SO. Para ello se puede hacer sencillamente por tftp:

1.- Realizar un hard reset del router (reset 30/30/30).
2.- Reiniciarlo desenchufándole la corriente unos segundos.
3.- Establecer tu equipo con una IP del mismo rango que tiene ahora el DD-WRT (ej: 192.168.1.100, máscara 255.255.255.0, los demás valores no son necesarios especificarlos).
4.- Abrir una consola y mantener un ping al router/punto de acceso:
#ping 192.168.1.1
en Linux el ping es contínuo, no se interrumpe, en otros sistemas operativos suele ser necesario incorporar el parámetro -t

5.- Preparar en otra consola el siguiente comando pero NO ejecutarlo:
atftp --option "mode octet" --verbose -p -l dd-wrt.v24-11296_NEWD_micro.bin 192.168.1.1
donde evidentemente dd-wrt.v24-11296_NEWD_micro.bin es el fichero descargado de dd-wrt.com correspondiente, en este caso, al Linksys WAP54G.

6.- En este paso se flasheará el router. Para ello es necesario reiniciar el router desconectándolo de la corriente. En la ventana que está abierta con el ping se verá una secuencia similar a ésta:

From 192.168.7.19 icmp_seq=171 Destination Host Unreachable
From 192.168.7.19 icmp_seq=172 Destination Host Unreachable
From 192.168.7.19 icmp_seq=175 Destination Host Unreachable

64 bytes from 192.168.7.5: icmp_seq=177 ttl=100 time=1012 ms
64 bytes from 192.168.7.5: icmp_seq=179 ttl=100 time=1.71 ms
64 bytes from 192.168.7.5: icmp_seq=180 ttl=100 time=2.23 ms

64 bytes from 192.168.7.5: icmp_seq=193 ttl=64 time=1.29 ms
64 bytes from 192.168.7.5: icmp_seq=194 ttl=64 time=0.951 ms
64 bytes from 192.168.7.5: icmp_seq=195 ttl=64 time=0.811 ms

Las 3 primeras líneas son resultado de enviar ping al router estando éste apagado o reiniciándose. Las 3 siguientes, que llevan el TTL=100 son resultado de arrancar el router en modo debug, aceptando por tanto cualquier actualización de firmware. Las 3 últimas (TTL=64) ya indican que ese modo ya ha sido deshabilitado y por tanto comienza el arranque normal. Por tanto el objetivo es ejecutar la orden tftp cuando el punto de acceso esté respondiendo pings con TTL=100.

Para ello, reiniciarlo de nuevo y en cuanto se obtegan el primer echo de ping con TTL=100, ejecutar el comando dado de tftp. Éste indicará que el fichero se ha subido correctamente. El router estará grabando el nuevo firmware, por lo que es necesario esperar 5 minutos o hasta que devuelva ping con TTL=64.

6.- Reiniciar el router desenchufándole la corriente.

7.- Cuando la ventana de ping reciba respuesta, entrar en http://192.168.1.1 con el navegador y configurar normalmente el WAP54G.

tftp OpenWRT: una opción más para intentar machacar el fichero de nvram es instalar una versión distinta de firmware que ocupe igual o más. Por ejemplo OpenWRT o un firmware compatible con el router concreto. El procedimiento es el descrito anteriormente. Después se instala de nuevo DD-WRT y se puede probar si el password ya está reseteado, ya que suelen compartir las mismas variables en la nvram.

– OpenWRT + erase nvram por web
: Si el método anterior no funciona, en el apartado de la web de configuración de OpenWRT «actualización de firmware» existe la opción de actualizarlo (con otro OpenWRT o con otro firmware, DD-WRT por ejemplo) marcando la opción «erase nvram por web», lo cual de realizarse con éxito solucionará el problema.

OpenWRT + erase nvram por telnet: Con OpenWRT instalado y configurado el password a través de la web de administración, se entrará por Telnet (telnet 192.168.1.1 23) y se ejecutará:

#nvram set http_passwd = "admin"
#nvram commit

reiniciar y probar instalando DD-WRT. Si no, volver a la versión de OpenWRT, que es la que permite el acceso sin problema de password por telnet a la nvram, y borrarla:

#nvram erase
#vnram commit

Reiniciar y reinstalar DD-WRT por web o tftp.

tftp firmware Linksys: Un método definitivo y 100% eficaz es la reinstalación del firmware de fábrica (descargable a través de la web de la marca del router) por tftp, reseteo posterior, entrar en la interfaz web (http://192.168.1.245, 255.255.255.0, usuario en blanco y password «admin» en caso del Linksys WAP54G) y desde allí ejecutar un «Reset defaults settings». Tras ello se puede instalar DD-WRT desde la misma web de administración.

cable JTAG: Como última opción cabe decir el montaje de un cable de conexión que resetee fisicamente la memoria del router. Se puede encontrar más información aquí: http://www.dd-wrt.com/wiki/index.php/Recover_from_a_Bad_Flash#Recovery_by_JTAG_cable

Fuentes principales:
http://airfart.blogspot.com/2008/04/how-to-revive-bricked-wap54g-ver31.html
http://www.dd-wrt.com/wiki/index.php/Recover_from_a_Bad_Flash
http://www.dd-wrt.com/wiki/index.php/Espanol

Ejecute estas instrucciones bajo su propia responsabilidad.

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.