fiuu.. gracias resize2fs por ser bueno

Ayer mientras achicaba un filesystem mi computadora se freezo por un problema de hardware:


[root@mirror /]# resize2fs -p /dev/mapper/vg_mirror-LogVol03 410G
resize2fs 1.41.14 (22-Dec-2010)
Resizing the filesystem on /dev/mapper/vg_mirror-LogVol03 to 107479040 (4k) blocks.
Begin pass 2 (max = 15391251)
Relocating blocks XXXXXXXXXXXXXXXXXXXXXX------------------

Bootie desde un DVD, en modo rescate, monte el filesystem y todo estaba bien. El tamaño del filesystem todavía era el original. Realice un e2fsck y después probé de nuevo con el resize2fs. Aparentemente la parte de “Relocating blocks” no hace ningún daño si se interrumpe :D

Mí script de backup inteligente :O

Todo comenzó cuando tenia configurado un script de rsync en el cron, el cual me permitía hacer backup desde mi laptop a mi desktop. Mi idea era hacer backup diariamente, incluso aquellos dias en los que no estaba en casa. Con este propósito, antes de que mi script se ejecutase tenia que preparar el entorno, iniciar la VPN y asegurarme que mi PC de casa estuviese prendida.

Si el día estaba tranquilo, no había problema, pero si era un día complicado me quedaba sin backup.

Decidí hacer un script para solucionar este problema


#!/bin/bash
export DISPLAY=:0

#Variables sobre mi computadora remota

DSTUSR=usuario
DSTROOT=root
DSTIP=192.168.1.2
DSTFOLDER=/path/a/la/carpeta/donde/backupear/

#Variables de mi router
LINKSYS=192.168.1.1
LINKSSHPORT=22
LINKUSER=root

PCTRL=0
PCTRL2=0

#Esta parte verifica si mi PC esta en mi red hogareña, si no esta
#intenta conectar utilizando OpenVPN

echo "Chequeando si mi router esta en esta red"
ssh $LINKSYS -p $LINKSSHPORT -l $LINKUSER ls &> /dev/null
PSTATE1=$?;
while [ ! $PSTATE1 -eq 0 ]; do
echo "no esta"
if [ ! -f /var/lock/subsys/openvpn ]; then
echo "openvpn esta abajo, tratamos de conectar"
$HOME/vpn $(Xdialog --stdout --title "OpenVPN password" --no-close \
--screen-center --password --inputbox "Password" 10 100);
fi
sleep 20;
ssh $LINKSYS -p $LINKSSHPORT -l $LINKUSER ls &> /dev/null;
PSTATE1=$?;
PCTRL=`expr $PCTRL + 1`
if [ $PCTRL -eq 5 ]; then
notify-send "conexion fallida"
exit 1
fi
done

#esta parta chequea si mi PC esta prendida, si no esta
#va a tratar de prenderla por WOL a través de mi router con OpenWrt

echo "hmmm, esta prendida mi PC?"
ssh $DSTROOT@$DSTIP ls
PSTATE2=$?;
while [ ! $PSTATE2 -eq 0 ]; do
echo "no esta...."
ssh -l $LINKUSER -p $LINKSSHPORT $LINKSYS /root/wakeup &> /dev/null
sleep 30;
ssh $DSTROOT@$DSTIP ls
PSTATE2=$?;
PCTRL2=`expr $PCTRL2 + 1`
if [ $PCTRL2 -eq 5 ]; then
notify-send "no se puede prender la PC";
exit 2 ;
fi
done
echo "Lo esta ahora"

# parte del backup

echo "Iniciando backup.."
notify-send "Iniciando backup.."

date
rsync -vaHx --progress --numeric-ids $HOME/ $DSTUSR@$DSTIP:$DSTFOLDER
notify-send "backup listo"
#luego pregunta si quiero apagar mi PC

Xdialog --title --stdout "la computadora esta prendida.." --screen-center \
--yesno "Apagar computadora remota?" 10 50
if [ $? -eq 0 ]; then
#la siguiente linea configura algo en mi placa de red para que pueda
#prenderla por WOL
ssh $DSTROOT@$DSTIP /sbin/ethtool -s eth0 wol g &> /dev/null
ssh $DSTROOT@$DSTIP poweroff &> /dev/null
fi

Para los diálogos tuve que instalar el programa ‘xdialog’

También estoy utilizando otro script llamado ‘vpn’ que hice con expect. La función de este script es conectarme a mi servidor OpenVPN con la password que le paso como parámetro.


#!/usr/bin/expect

if $argc<1 {
send_user "Modo de uso\n"
send_user "$argv0 password \n"
send_user ""
exit
}

spawn sudo /usr/sbin/openvpn --config /etc/openvpn/openvpn.conf --daemon
expect "Enter Private Key Password:"
send "[lindex $argv 0]\r"
interact

En mi router, hice un script que se llama 'wakeup' que solo contiene la siguiente linea:

Básicamente, esta viendo si mi laptop esta en mi red hogareña. De no estarlo trata de establecer una conexión con mi red hogareña a través de una VPN. Una vez en la red, se fija si mi computadora esta prendida. Si no esta prendida, trata de prenderla por WOL. Cuando todo esta OK, hace un backup diferencial entre mi laptop y mi computadora de casa.

Espero que puedan usar el script para algo, sino, es un buen ejemplo de como usar Xdialog, expect y otras cosillas...

¿Cómo darle permisos a un solo usuario para que ejecute algo como root?

Para poder hacer esta tarea solo tenemos que ejecutar el siguiente comando como root:

echo "user ALL= NOPASSWD : /bin/file" >> /etc/sudoers

Donde user es el usuario al que le queremos dar permisos y /bin/file es la dirección o path es el archivo binario que le vamos a permitir ejecutar.

Para hacer más cambios al archivo sudoers es recomendable utilizar el comando ‘visudo’.

Configurando Kozumi ktv-01c en Fedora

Para configurar esta capturadora, primero tenemos que configurar los parámetros en /etc/modprobe.d/bttv.conf

cat << EOF > /etc/modprobe.d/bttv.conf
alias char-major-81 videodev
alias char-major-81-0 bttv
options bttv pll=1 card=120 radio=1 tuner=38 remote=1 bttv_verbose=1 gbuffers=4
EOF

Luego, recargamos el modulo:

# rmmod bttv; modprobe bttv

Instalamos TVtime, que es mi programa preferido para ver TV en la PC.

# yum install tvtime

Configuramos tvtime con la norma correspondiente para nuestro país. Argentina es PAL-Nc

$ tvtime-configure -n PAL-Nc
$ tvtime-scanner

Listo! ahora podemos correr tvtime desde una consola o desde el menú de GNOME/KDE.
Para otras distribuciones de Linux, como Ubuntu, el procedimiento debería ser similar.

workaround: Mic. input broken on an Acer 1410

Gracias a Mathieu Bouffard, él me ayudo a a configurar mi micrófono en mi Acer Aspire One 1410.

Problema:

De algún modo el driver de ALSA esta tratando de pasarle a PulseAudio una salida stereo que PulseAudio no entiende.

Solución:

Usando jackd como un “proxy” entre ALSA y PulseAudio. Jackd va a capturar la entrada mono desde el driver de ALSA y se lo va a pasar a PulseAudio

Descargamos el siguiente modulo de PulseAudio:

# yum install pulseaudio-module-jack

Configuramos PulseAUdio para no auto-reiniciarse cuando lo matamos.

echo "autospawn = no" > ~/.pulse/client.conf

Creamos el siguiente archivo en nuestro home: ~/jackd.pa

#!/usr/bin/pulseaudio -nF

###
# these modules will connect to JACK
load-module module-jack-sink
load-module module-jack-source

###
#add-autoload-sink output module-jack-sink channels=2
#add-autoload-source input module-jack-source channels=2
#load-module module-esound-protocol-unix
load-module module-native-protocol-unix
load-module module-volume-restore
#load-module module-stream-restore
load-module module-rescue-streams
.nofail


###
load-module module-x11-publish
load-module module-gconf

###
# Load LIRC for Pulse
# load-module module-lirc sink=jack_out config=/home/mbouffard/.lircrc

Creamos el archivo de configuración para ALSA: ~/.asoundrc

# .asoundrc

pcm.!default {
type pulse
hint.description "Default Audio Device"
}
ctl.!default {
type pulse
}

Y por ultimo, creamos un mini-script para lanzar PulseAudio usando esta configuración. Yo lo llame ~/pulsejack:

killall jackd ; pulseaudio --kill
/usr/bin/jackd -S -v -r -dalsa -dhw:0 -r48000 -p1024 -n2 &
pulseaudio -n -F jackd.pa
while [ $? -eq 137 ]; do
sleep 5; # a veces despues de iniciar alguien o algo mata a pulseaudio
pulseaudio -n -F jackd.pa
done

Ejecutamos nuestro script:

chmod +x ~/pulsejack
~/pulsejack

Un patch fue enviado al team de ALSA para solucionar este problema desde el driver.