Publicado en Linux

No se pudo bloquear – open (11: Recurso no disponible temporalmente)

Ubuntu te lanza una Actualización de software pero en mitad del proceso se queda colgado (sí, Linux también se cuelga), la única manera de terminar es cerrando la ventana y forzando el cierre. No hay mensaje de error ni pistas para solucionarlo. Sin embargo, los más intrépidos habréis intentado ejecutar la actualización por consola, y ahí sí, recibimos algo parecido a esto:

E: No se pudo bloquear /var/lib/apt/lists/lock - open (11: Recurso no disponible temporalmente)
E: No se pudo bloquear el directorio /var/lib/apt/lists/

La ruta concreta es lo de menos porque puede pasar con varias diferentes, por suerte el problema es siempre el mismo: algún proceso se ha quedado enganchado al fichero y no deja que nadie más lo utilice. La solución también es única:

sudo fuser -vki /var/lib/apt/lists/lock

Donde la ruta es la que nos dio el primer error, fuser es un comando que nos lista los ficheros abiertos y las opciones del mismo son:

  • v: verbose, es decir, ver de forma más extensa lo que se va a ejecutar
  • k: kill, mata los procesos que tengan el fichero ocupado
  • i: interactive, pide confirmación para matar cada proceso

Y nada más, una vez muertos los procesos que tenían ocupado el fichero podemos actualizar sin problemas. En cualquier caso, siempre es positivo reparar paquetes rotos y eliminar los que ya no sirvan, por si acaso alguno ha producido este inconveniente:

sudo dpkg --configure -a

sudo apt-get autoremove

Si además queremos aprovechar que tenemos la consola abierta para hacer la actualización ejecutamos:

sudo apt-get update && sudo apt-get upgrade

Que es exactamente lo que hace visualmente Actualización de software.

Publicado en Linux

Instalar manualmente clave GPG para ppa.launchpad.net

Si has agregado un repositorio de ppa.launchpad.net a mano y al intentar leerlo con update te da el siguiente mensaje:

Error de GPG: http://ppa.launchpad.net precise Release: Las firmas siguientes no se pudieron verificar porque su llave pública no está disponible: NO_PUBKEY 4F4EA0AAE5267A6C

No te preocupes, el problema viene dado porque no tienes instalada la clave GPG, lo cual se soluciona de la siguiente manera:

:~$ gpg –keyserver subkeys.pgp.net –recv-key E5267A6C && gpg -a –export $PUBKRY | sudo apt-key add –

Como puedes ver, la única precaución que debes tener es poner en el parámetro –recv-key los últimos 8 caracteres del error anterior. Si todo ha ido bien te dirá cuantas claves ha importado y terminará con un OK.

Fácil, rápido y para toda la familia. Pero si tienes problemas lo vemos en los comentarios.

Publicado en Internet, Linux, Tecnología

BASH: enviar emails desde un servidor de correo externo con autenticación vía telnet

Prácticamente todos los servidores Linux incorporan un servidor de correo, así que es probable que nunca se te haya planteado este problema, pero hay veces que necesitas enviar un correo desde un servidor SMTP externo. Ésto es muy fácil de conseguir gracias a nuestro amigo telnet. Sin embargo, hoy queremos hacerlo de manera automática desde un script bash, es decir, sin tener que ir introduciendo los comandos telnet y además desde una cuenta de correo que requiere autenticación. Viene muy bien para programar tareas que envíen emails al finalizar, por ejemplo.

No me enrollo más, primero el código del script y luego una breve explicación:

#!/bin/bash
(
sleep 2
echo "HELO smtp.midominio.com"
sleep 2
echo "auth login"
sleep 2
echo "bWNsYXJlbnguY29tQGdtYWlsLmNvbQ=="
sleep 2
echo "TWNMYXJlblg="
sleep 2
echo "MAIL FROM:micorreo@midominio.com"
sleep 2
echo "RCPT TO:destino@sudominio.com"
sleep 2
echo "DATA"
sleep 1
echo "SUBJECT:texto_del_asunto"
sleep 1
echo "FROM:remitente"
sleep 1
echo ""
sleep 1
echo ""
sleep 1
echo "Cuerpo del mensaje"
sleep 1
echo ""
sleep 1
echo "."
sleep 2
echo "QUIT"
) | telnet servidor_smtp 25

Si estás familiarizado con telnet te será fácil entender el código, aunque quizá la tercera y la cuarta línea (sin contar los sleeps) te sorprendan, es la clave para hacer que todo esto funcione. Usuario y password deben ir codificados en base64. El resto es un telnet normal que ejecutarías por consola. Lo explico igualmente:

  1. HELO smtp.midominio.com: inicia la comunicación con el servidor que va a enviar el email
  2. auth login: le dice al servidor SMTP que la cuenta que vamos a usar para enviar el email requiere autenticación
  3. bWNsYXJlbnguY29tQGdtYWlsLmNvbQ==: usuario en base64
  4. TWNMYXJlblg=: contraseña en base64
  5. MAIL FROM:micorreo@midominio.com: dirección de correo que envía el email
  6. RCPT TO:destino@sudominio.com: destinatario del email
  7. DATA: le indicamos al servidor que estamos listos para enviarle todos los datos del email
  8. SUBJECT:texto_del_asunto: el asunto del email
  9. FROM:remitente: el remitente puede ser una dirección de correo o simplemente un nombre
  10. Dejando un espacio es suficiente, pero yo dejo dos para que no se haga líos
  11. Cuerpo del mensaje: el texto del email
  12. Antes del QUIT hay que poner un punto (.) para indicarle que ya hemos terminado de darle los datos
  13. QUIT: termina la comunicación
  14. telnet servidor_smtp 25: hace todo lo anterior tras conectarse por telnet al servidor_smtp por el puerto 25

No me voy a meter a profundizar en el telnet a un servidor SMTP porque obviamente hay muchísimas más opciones para decirle qué y cómo mandar el email, pero eso ya os lo dejo a vuestro gusto e investigación. Lo importante: poner entre paréntesis todas las instrucciones que queremos mandar por telnet y que el usuario y la contraseña para autenticarnos en el servidor estén en base64, puedes convertirlos desde esta web.

Ante cualquier problema, duda o errata los comentarios están activados.

Publicado en Internet, Linux, Tecnología

Redireccionar una web desde el Apache

Creo que a estas alturas ya todo el mundo sabrá que los buscadores, Google, penalizan bastante el contenido duplicado, es por eso que la misma web accedida desde dos URLs diferentes es una mala práctica a la hora de posicionarla. Es decir, mclarenx.com y www.mclarenx.com son webs distintas con el mismo contenido, y eso hay que evitarlo.

La mayoría de las webs utilizan la redirección 301 en el .htaccess para, por ejemplo, todo el tráfico que venga desde mclarenx.com lo redireccione a www.mclarenx.com. Y eso es suficiente, funciona y es lo que queremos que haga, porque así mclarenx.com nunca tendrá contenido.

Sin embargo, hoy voy a explicaros como hacer exactamente lo mismo, pero a nivel de Apache. La razón de hacerlo así es brindar a tus clientes un servidor web con redirección automática y sin duplicidad de contenidos, lo que mejorará su posicionamiento sin hacer nada, muy útil para quien tiene una web pero no conocimientos.

Abrimos el fichero para editarlo:

:~$ sudo nano /etc/apache2/sites-available/miweb

Normalmente tendrás algo parecido a esto:

ServerName www.mclarenx.com
# Además de todos los , DocumentRoot, Options, etc.

Todo eso debe quedar exactamente igual. Lo importante es crear un segundo en el que vamos a agregar la redirección:

ServerName mclarenx.com
RedirectMatch permanent ^/(.*) http://www.mclarenx.com/$1

Ambos bloques deben quedar independientes dentro del mismo fichero. Quien haya utilizado la redirección en el .htaccess le resultará muy familiar la nomenclatura, y es que finalmente hace lo mismo, pero sin tener que depender del desarrollador, ya que el subdominio www suele estar presente en prácticamente todas las webs, así que mejor incluirlo de serie en el Apache, y utilizar el .htaccess para las florituras.

Obviamente, tras modificar el fichero hay que ponerlo en producción:

:~$ cd /etc/apache2/sites-available/
:~$ sudo a2ensite miweb
:~$ sudo service apache2 reload
Publicado en Internet, Linux, Tecnología

Instalar TP-Link TL-WN725N v2 en Linux Mint

tp-link-tl-wn725n

El TP-Link TL-WN725N se hizo bastante famoso en el mundillo Linux, especialmente para los poseedores de una Raspberry Pi, por su reducidísimo tamaño, por una instalación sencilla y por la calidad fabulosa a coste ridículo. Sin embargo, eso era con la v1 que montaba el chip RTL8188CU, ya que con la v2 que monta el RTL8188EU la cosa se ha complicado un poco. Por suerte no es demasiado difícil instalar el controlador del nuevo chip, así que os lo explico en 10 sencillos pasos desde la consola. Y como casi todo tutorial apto para Linux Mint, funciona de igual manera para Ubuntu y cualquiera de sus derivados (como lo es el propio Mint).

  1. Instalar GIT (o actualizarlo si ya lo tienes instalado):
    :~$ sudo apt-get install build-essential git
  2. Descargar el driver desde GIT:
    :~$ git clone git://github.com/liwei/rpi-rtl8188eu.git
  3. Acceder a la carpeta donde se descargó el driver:
    :~$ cd rpi-rtl8188eu
  4. Compilar el driver:
    :~$ make
  5. Instalar el driver:
    :~$ sudo make install
  6. Escanear los módulos:
    :~$ sudo depmod -a
  7. Actualizar la memoria del kernel:
    :~$ sudo update-initramfs -u
  8. Cargar el nuevo módulo al kernel:
    :~$ sudo modprobe -v 8188eu
  9. Conectar el adaptador WiFi a un puerto USB.
  10. No hace falta reiniciar el equipo, el Network Manager ya debería reconocer el adaptador y mostrar las redes WiFi disponibles. Si no es así, con desactivar y volver a activar la red desde el propio Network Manager debería ser suficiente.

Como veis es muy sencillo y rápido, pero si os atascáis en algún punto u os surgen dudas ya sabéis que en los comentarios solucionaré lo que esté en mi mano.

Publicado en Linux

Usar Dropbox con Caja

Si estás utilizando Caja, el fork de Nautilus, ya sea sobre un Linux Mint con MATE, o de cualquier otra manera, y quieres sincronizar Dropbox con tu explorador de ficheros favorito, estás de enhorabuena, porque hace bien poco se lanzó el paquete caja-dropbox para tal finalidad. La única pega es que no está del todo optimizado para instalar y listo, así que vamos a compilar el paquete, pero no os asustéis que es muy sencillo y rápido.

Instalar paquetes necesarios

Estos paquetes nos servirán para poder compilar este y otros muchos programas de aquí en adelante, así que no están nunca demás.

sudo apt-get install libcaja-extension-dev docutils-common build-essential mate-common

Descargar y descomprimir caja-dropbox

Simplemente has de entrar en esta web y elegir el fichero que más te guste, compresión zip o tar.gz. Yo explicaré como descomprimir el tar.gz, pero viene a ser lo mismo:

https://github.com/mate-desktop/caja-dropbox/downloads

Descomprimir el fichero descargado:

tar xvzf mate-desktop-caja-dropbox-c096075.tar.gz

Y accedemos a la carpeta que contiene los ficheros descomprimidos:

cd mate-desktop-caja-dropbox-c096075

Instalar caja-dropbox

Muy fácil, los 3 pasos típicos para hacer una instalación compilando el código:

./autogen.sh
make
make install

Y para terminar reiniciamos Caja:

killall caja

Listo. Ya puedes ejecutar tu Dropbox para sincronizar tus ficheros mediante Caja.

Publicado en Linux

Configurar vsftpd y evitar los errores 500 y 530

La instalación y configuración de vsftpd, para algunos el servidor FTP más seguro del mundo, es muy fácil e intuitiva. El problema viene con ciertas particularidades y, sobre todo, con los errores ‘500 OOPS: vsftpd: refusing to run with writable root inside chroot()’ y ‘530 Login incorrect’ que no dejan conectarse con un usuario local del servidor. Vayamos por partes.

Instalación

Como en la mayoría de los programas básicos, se puede instalar mediante apt o yum según tu sistema. Yo lo he hecho en un Ubuntu Server 12.04 así que el comando sería el siguiente:

sudo apt-get install vsftpd

También puedes descargarlo de su web oficial.

Configuración

vsftpd

Vamos a abrir el fichero de configuración del vsftpd y analizar los puntos más importantes:

sudo nano /etc/vsftpd.conf

Hay muchos parámetros que podemos configurar, pero esto estaría lo básico:

  • listen = YES
    Para que se inicie con el sistema.
  • anonymous_enable = NO
    No permitimos que usuarios anónimos puedan conectarse a nuestro servidor. Es por seguridad, pero si tú quieres permitirlo tendrás que configurar algunos parámetros más para que no puedan trastear mucho.
  • local_enable = YES
    Para poder conectarse con los usuarios locales del servidor donde está instalado.
  • write_enable = YES
    Si quieres que los usuarios puedan escribir y no sólo descargar cosas.
  • local_umask = 022
    Esta máscara hace que cada vez que subas un archivo, sus permisos sean 755. Es lo más típico en servidores FTP.
  • chroot_local_user = YES
    chroot_list_enable = YES
    Sirven para que los usuarios locales puedan navegar por todo el árbol de directorios del servidor. Evidentemente esto sólo queremos permitírselo a ciertos usuarios, para ello tenemos el siguiente parámetro.
  • chroot_list_file = /etc/vsftpd.chroot_list
    Indicamos el fichero donde están listados los usuarios que pueden navegar hacía arriba por los directorios del servidor, lo normal es que sea el administrador del servidor y poco más.

Hay pocos parámetros más, pero si quieres échales un vistazo porque vienen bien explicados en el propio fichero.

vsftpd.chroot_list

Este fichero no suele existir así que debemos crearlo y editarlo. Aquí irán los nombres de usuarios que queremos que puedan listar todos los directorios del servidor y no sólo el suyo asignado por FTP. Esto viene bien para usuarios administradores.

sudo nano /etc/vsftpd.chroot_list

Este comando te abrirá un documento vacío, pon en cada línea un nombre de usuario.

Grupo FTP

Todos los usuarios que queramos utilizar para FTP deben estar albergados en el mismo grupo para así darles unos permisos especiales como no poder conectarse por SSH al servidor.

Creamos el grupo:

sudo groupadd ftp

Creamos una shell fantasma para que no puedan entrar a la consola del servidor:

sudo mkdir /bin/ftp

Abrimos la lista de shells del sistema:

sudo nano /etc/shells

Agregamos nuestra shell fantasma al final del fichero:

/bin/ftp

Usuario FTP

Lo primero es crearle una carpeta de usuario. Puedes hacerlo donde tú quieras, pero yo suelo meterles a todos en una subcarpeta del home general.

Creamos la carpeta para meter a los usuarios:

sudo mkdir /home/ftp

Creamos la carpeta del usuario particular:

sudo mkdir /home/ftp/antonio

Creamos el usuario:

sudo useradd -g ftp -d /home/ftp/antonio -c "Antonio Garcia Lopez" antonio

Explicación:

-g ftp => el usuario pertenece al grupo ftp
-d /home/ftp/antonio => el directorio principal del usuario es /home/ftp/antonio
-c “Antonio Garcia Lopez” => el nombre completo del usuario es Antonio Garcia Lopez
antonio => la última palabra será el nombre de usuario

Ahora le asignamos una contraseña:

sudo passwd antonio

Y finalmente le asignamos la shell fantasma:

sudo usermod -s /bin/ftp antonio

Este paso se podía haber hecho al crear el usuario, pero lo dejo separado por si queremos asignarle la shell fantasma o no.

Errores conocidos

530 Login incorrect

Este error es el más común con la última versión del vsftpd. Es un gran quebradero de cabeza con una solución muy simple:

sudo apt-get remove vsftpd
sudo rm /etc/pam.d/vsftpd
sudo apt-get install vsftpd

500 OOPS: vsftpd: refusing to run with writable root inside chroot()

Este error se da porque vsftpd no permite que los usuarios puedan escribir en su carpeta raíz. Una solución es quitarle los permisos de escritura a esa carpeta. Esto hará que el usuario no pueda hacer nada en su propia carpeta, así que lo mejor es crearle otra dentro con permisos normales para que pueda utilizarla.

sudo chmod 555 /home/ftp/antonio
sudo mkdir /home/ftp/antonio/documentos
sudo chown antonio:ftp /home/ftp/antonio/documentos

Con todo esto ya deberías poder acceder al servidor FTP con cualquier usuario del sistema sin ningún problema.

Publicado en Internet, Linux

Solucionar “Unpacking Dropbox 97%”

Tienes tu Linux perfectamente configurado pero a la hora de instalar el fabuloso Dropbox, el desempaquetado se queda parado en el 97%. Bien, no te preocupes, la solución está en 3 sencillas líneas.

Hay que descargarse un fichero así que abre un terminal y ve a la carpeta donde quieras que se descargue, luego podrás borrarlo:

cd ~/descargas

Ahora vamos a descargar el fichero, darle permisos de ejecución y ejecutarlo:

wget http://webupd8.googlecode.com/files/fixdropbox
chmod +x fixdropbox
./fixdropbox

Listo. Ya tienes solucionado el problema, ahora sí terminará la instalación y el desempaquetado perfectamente y no se quedará parado en el “Unpacking Dropbox 97%”.

Por cierto, si la descarga del fichero no funciona, puedes crearlo tú mismo con cualquier editor de texto poniendo el siguiente contenido:

#!/bin/bash

homestrip=$(echo $HOME | sed -e 's/\//\\\//g')

dropbox stop
rm -r ~/.dropbox-dist
dropbox start -i

echo "sleep 20 && dropbox start -i" | tee ~/.dropbox.sh
chmod +x ~/.dropbox.sh

sed -i "s/Exec=.*/Exec=$homestrip\/\.dropbox.sh/" ~/.config/autostart/dropbox.desktop
chmod 555 ~/.config/autostart/dropbox.desktop
Publicado en Linux

Error al instalar Ubuntu desde USB

Si tienes una versión de Ubuntu 9.04 o superior, puedes crear un USB de instalación de la última versión de Ubuntu en ese momento o de cualquier otro sistema. El problema es que el USB Creator tiene un pequeño fallo que hace saltar el siguiente error al arrancar el PC desde dicho USB:

SYSLINUX 3.63 Debian-2008-07-15 EBIOS Copyright (c) 1994-2008 H. Peter Anvin
Unknown keyword in configuration file
boot:

Esto sucede porque la versión de Syslinux tiene un bug fácilmente solucionable. Simplemente habría que desinstalar el propio Syslinux así como el USB Creator:

sudo apt-get remove syslinux usb-creator-gtk usb-creator-common

Una vez hecho esto, nos descargamos la última versión de Syslinux como paquete instalable .deb de esta web. Hay que poner atención a la arquitectura del Linux que tengas instalado: AMD64 (procesadores de 64 bits) o i386 (procesadores de 32 bits). Con un doble click en dicho .deb se instalará y entonces procedemos a instalar de nuevo el USB Creator:

sudo apt-get install usb-creator-gtk

Si ahora volvemos a abrir Sistema > Administración > Creador de discos de arranque para crear nuestro USB con Ubuntu para una nueva instalación desde el mismo, veremos que ahora sí funciona perfectamente y podemos instalar el sistema sin ningún problema.

Resumen

Desinstalar Syslinux y USB Creator:

sudo apt-get remove syslinux usb-creator-gtk usb-creator-common

Descargar e instalar última versión de Syslinux de esta web.

Reinstalar USB Creator:

sudo apt-get install usb-creator-gtk