mar 032013
 

Quizás, mas que por SysRq (PetSis), la conozcas como Print Screen (Impr Pant). En sistemas Linux, esta tecla permite al usuario usuario ejecutar diversos comandos de bajo nivel que nos pueden servir como herramienta de último recurso para recuperar el control del sistema sin necesidad de interrumpir su alimentación y sin correr el riesgo de perder datos importantes.

Para ejecutar los comandos, tenemos que pulsar Alt + SysRq + <tecla comando>. La tecla de comando suele ser una letra del teclado, algunos de los comandos disponibles son:

  • R: Cambia el teclado del modo raw al modo XLATE.
  • K: Mata todos los programas en la consola virtual actual.
  • B: Reinicia inmediatamente el sistema sin sincronizar o desmontar los discos.
  • O: Apaga el sistema.
  • S: Sincroniza todos los sistemas de ficheros montados.
  • U: Desmonta todos los sistemas de ficheros y los vuelve a montar como de solo lectura.
  • P: Muestra los registros y banderas actuales en la consola.
  • T: Muestra una lista de las tareas en ejecución y su información en la consola.
  • M: Muestra la información actual de la memoria en la consola.
  • E: Envía la señal SIGTERM a todos los procesos, excepto a init.
  • I: Envía la señal SIGKILL a todos los procesos, excepto a init.
  • L: Envía la señal SIGKILL a todos los procesos, INCLUYENDO init.
  • 0-9: Establece el nivel de información en consola, controlando los mensajes del núcleo que se mandarán a la consola. (’0′, por ejemplo haría que sólo los mensajes de emergencia como PANIC u OOPS salgan en consola.)

Con tantos comandos disponibles, se hace difícil saber cuales usar o en que orden. Por eso vamos a ver algunas combinaciones básicas que podemos usar en determinados casos:

  • Reiniciar el servidor X: Alt + SysRq + K
  • Reiniciar de forma segura el equipo: Alt + SysRq + R | E | I | S | U | B

Nota 1: Es conveniente esperar un par de segundos entre tecla y tecla (entre comando y comando) para darle tiempo al sistema de terminar la ejecución de cada comando antes de empezar con el siguiente.

Nota 2: Si eres usuario de Fedora, no te funcionarán las combinaciones que hemos visto, pues vienen desactivadas por defecto. Para habilitarlas tan solo es necesario ejecutar este comando como super usuario:

[root@localhost ~]# echo "kernel.sysrq = 1" >> /etc/sysctl.conf

Share

ene 212013
 

Hace unos cuatro años que estoy usando como ordenador principal un portátil Acer Aspire 6935G, la verdad es que estoy muy satisfecho con este, pero los años no perdonan nadie y si al tiempo le añades uso intensivo y algunos incidentes menores, es lógico pensar que mi máquina está en los últimos momentos de su vida, que alargaré hasta tener presupuesto para comprar uno nuevo.

El otro día, mientras actualizaba mi Fedora 18 recién instalado, mi portátil decidió fallar en medio de la instalación y me vi obligado a forzar el apagado y cruzar los dedos. Al encenderlo de nuevo, el sistema se recuperó y arrancó, pero parece que la instalación de los paquetes quedó corrupta, lo que afectó a varios ficheros relativos a librerías del sistema que presuntamente se estaban instalando o actualizando cuando mi portátil ”estornudó”.

La única forma de garantizar que no quedan ficheros incompletos, es reinstalar los paquetes que se estaban “tocando” cuando el equipo falló. Por lo que necesitaba averiguar cuales eran esos paquetes. Por fortuna, YUM tiene una opción que permite obtener un historial de las últimas acciones.

YUM (Yellowdog Update Modified) es el gestor de paquetes RPM de Fedora, CentOS, Red Hat, OpenSuse, etc. Los comandos YUM history (list, info, summary, repeat, redo, undo, new) fueron añadidos en la versión 3.2.25. Por lo que este truco funcionará en cualquier distribución GNU/Linux que use YUM 3.2.25 o mayor.

La opción history es realmente útil en situaciones que requieran “volver al pasado”, como tras la eliminación o instalación no intencionada de algunos paquetes o, como en mi caso, poder repetir la última acción para asegurar que todo queda bien. Y este fue el resultado de la ejecución del comando:

[root@localhost ~]# yum history
Complementos cargados:fastestmirror, langpacks, presto, refresh-packagekit
ID | Linea de comandos        | Día y hora       | Acción(es) | Modific
-------------------------------------------------------------------------------
26 |                          | 2013-01-19 19:26 | I, U       | 12 **
25 | install ktorrent         | 2013-01-19 19:04 | Install    | 5
24 | install xournal          | 2013-01-19 17:12 | Install    | 1
23 | localinstall google-talk | 2013-01-19 15:55 | Install    | 1 EE
22 | install emesene          | 2013-01-19 15:17 | Install    | 14
21 | install crypt*per        | 2013-01-19 14:35 | Install    | 5
20 | localinstall skype-4.1.0 | 2013-01-19 13:58 | Install    | 43
19 |                          | 2013-01-18 16:11 | Update     | 1
18 | install yumex            | 2013-01-18 16:09 | Install    | 5
17 | install owncloud-client  | 2013-01-17 15:46 | Install    | 6
16 | install vim              | 2013-01-17 13:42 | Install    | 3

Como se puede ver, la última acción fue la que tiene el ID 26 e implica acciones de instalación (I) y actualización (U) de 12 paquetes. Para ver los detalles de dicha transacción ejecuté el siguiente comando:

[root@localhost ~]# yum history info 26
Complementos cargados:fastestmirror, langpacks, presto, refresh-packagekit
ID de transacción : 26
Hora inicial     : Sat Jan 19 19:26:49 2013
Rpmdb inicial    : 1675:17a75d61600c922651f9f3f97fae99324c2f3876
Usuario           : elias 
Codigo-obtenido    : ** Abortado **
Transacción realizada con:
    Instalado      rpm-4.10.2-1.fc18.x86_64                @updates
    Instalado      yum-3.4.3-47.fc18.noarch                @fedora
    Instalado      yum-metadata-parser-1.1.4-7.fc18.x86_64 @fedora
    Instalado      yum-presto-0.9.0-1.fc18.noarch          @fedora
    Instalado      yumex-3.0.10-1.fc18.noarch              @fedora
Paquetes modificados:
 ** Actualizado                 apper-0.8.0-0.11.20121126git.fc18.x86_64 @fedora
    Actualizar                        0.8.0-2.fc18.x86_64                @updates
    Actualizado                 firewall-config-0.2.11-2.fc18.noarch     @fedora
    Actualizar                                  0.2.12-1.fc18.noarch     @updates
    Actualizado                 firewalld-0.2.11-2.fc18.noarch           @fedora
    Actualizar                            0.2.12-1.fc18.noarch           @updates
    Actualizado                 git-1.8.0.2-1.fc18.x86_64                @updates
    Actualizar                      1.8.1-1.fc18.x86_64                  @updates
 ** Actualizado                 libcdr-0.0.8-2.fc18.x86_64               @fedora
    Actualizar                         0.0.9-2.fc18.x86_64               @updates
 ** Actualizado                 lsof-4.86-4.fc18.x86_64                  @fedora
    Actualizar                       4.87-1.fc18.x86_64                  @updates
 ** Actualizado                 nmap-ncat-2:6.01-8.fc18.x86_64           @fedora
    Actualizar                            2:6.01-9.fc18.x86_64           @updates
    Actualizado                 perl-Git-1.8.0.2-1.fc18.noarch           @updates
    Actualizar                           1.8.1-1.fc18.noarch             @updates
    Instalación de dependencias qtlockedfile-2.4-5.fc18.x86_64           @fedora
    Instalación de dependencias qtsingleapplication-2.6.1-7.fc18.x86_64  @fedora
    Instalación de dependencias quazip-0.5-1.fc18.x86_64                 @fedora
    Instalar                    smplayer-0.8.3-2.fc18.x86_64             @rpmfusion-free
history info

Tras esto, podía saber exactamente cuales fueron las acciones que realizaba el sistema cuando falló, y ejecutando un último comando pude reinstalar todos esos paquetes y garantizar en gran medida que mi sistema queda íntegro:

[root@localhost ~]# yum reinstall apper-0.8.0-2.fc18.x86_64 firewall-config-0.2.12-1.fc18.noarch firewalld-0.2.12-1.fc18.noarch git-1.8.1-1.fc18.x86_64 libcdr-0.0.9-2.fc18.x86_64 lsof-4.87-1.fc18.x86_64 nmap-ncat-2:6.01-9.fc18.x86_64 perl-Git-1.8.1-1.fc18.noarch qtlockedfile qtsingleapplication quazip smplayer

Como se puede ver, en la mayor parte de los paquetes especifiqué la versión y arquitectura exactas, esto es porque de otro modo, YUM podría no saber a que arquitectura o versión me refiero, sobretodo en sistemas x86_64, donde se pueden disponer de las versiones de 64 bits y 32 bits de un paquete instaladas al mismo tiempo, para mantener la retrocompatibilidad.

Yum history permite hacer muchas más cosas muy interesantes, pero no las comentaré ahora, es posible que más adelante haga un post mas completo acerca de esta funcionalidad y sus posibilidades. Por ahora, solo me queda esperar que mi experiencia le sirva a alguien que tenga un problema parecido.

Share

dic 012012
 

En general, un fichero es un recurso que nos da el sistema operativo para acceder de forma ordenada a un determinado conjunto de datos almacenados en el disco duro, por lo que se puede entender como un enlace a la zona del disco donde se encuentran los datos relacionados al mismo.

En Linux, cuando un programa abre un fichero, el sistema operativo crea otro enlace a ese archivo, llamado Descriptor de Fichero (FD), en un lugar temporal que será a través del cual dicho programa acceda a los datos relacionados con el mismo, si eliminamos el archivo, el sistema lo que hace en realidad es eliminar el enlace que lo representa, pero no toca los datos que continúan guardados en el disco duro y no solo no los toca, sino que mientras exista otro enlace a esos mismos datos, como el creado de forma temporal para el programa que lo tiene abierto, no permitirá a nadie escribir en esa misma zona del disco, garantizando el correcto funcionamiento de todos los programas, incluso si se han eliminado ficheros importantes. En el momento en que el programa deja de necesitar el fichero y lo cierra, el sistema elimina su enlace y si no hay mas enlaces (debido a que el fichero ha sido eliminado), la zona asociada al mismo, queda disponible para ser sobrescrita por otro fichero.

Después de esa pequeña introducción teórica pasemos a un caso hipotético. Imaginemos que teníamos un fichero llamado “Archivo.txt” y que, por error, lo hemos eliminamos. Antes de que cunda el pánico podemos intentarlo recuperar usando una herramienta de Linux llamada lsof, esta herramienta puede mostrar los archivos abiertos y conexiones de red. Si nuestro apreciado archivo continua abierto por algún programa podremos recuperarlo fácilmente con la información que ésta nos facilita.

Para averiguar si continua abierto lo ejecutamos de este modo:

lsof | grep "Archivo.txt"

Si tras ejecutarlo no se muestra nada, significa que no hemos tenido suerte y que no podremos recuperar el fichero usando esta técnica, pero si salen una o mas líneas similares a la siguiente, si podremos hacerlo:

less 4620 usuario 4r REG 8,7 0 21237397 /home/usuario/Archivo.txt (deleted)

Si nos fijamos bien podemos ver que en este caso el programa “less” con PID 4620 aún tiene nuestro fichero abierto y que este ha sido eliminado (deleted). Además he marcado en negrita otro dato que aparece tras el nombre de usuario, se trata de un número seguido de una o mas letras (en este caso “4r”). Ese número es el descriptor de fichero (FD). Conociendo el PID de la aplicación que tiene nuestro fichero abierto y su FD, podremos recuperarlo diciendo al sistema que lo copie, para evitar así que se pierda en cuanto la aplicación que lo tiene abierto lo cierre:

cp /proc/4620/fd/4 /home/usuario/Archivo.txt

Ahora podremos comprobar que nuestro fichero vuelve a existir y que su contenido es el mismo que antes de ser eliminado.

Esta técnica de recuperación no funciona siempre, pues necesita que el fichero eliminado continúe abierto por alguna aplicación y, además, muchas aplicaciones no mantienen los ficheros abiertos mientras los usan, sino que los abren, cargan sus datos en memoria y los cierran inmediatamente, pero nos puede salvar en más de una ocasión.

Share

jun 162010
 

VEVO-YouTubeDesde hace ya tiempo, la mayoría de los videoclips que se pueden ver de forma gratuita en YouTube pertenecen a VEVO y no es posible descargarlos con los típico plugins que existen para Firefox y demás navegadores.

La razón es que estos vídeos no son un streaming en FLV (Típico de YouTube), sino que son un streaming en un sistema llamado RTMP que permite entre otras cosas encriptar el vídeo para que no pueda ser descargado.

Pero como todos sabemos, no existe una protección infalible. Existe un programa llamado rtmpdump que es perfectamente capaz de descargar este tipo de vídeos , incluso si están codificados, pero resulta muy tedioso calcular todos los datos necesarios para que este programa pueda descargar un vídeo de YouTube.

Para facilitar definitivamente esta tarea un grupo ha desarrollado un script que hace todo esto de forma totalmente automática llamado get-flash-videos.

Para instalar este script:

  1. Descarga el DEB desde aquí y guárdalo en to home.
  2. Abre una consola y teclea lo siguiente:
    1. su
    2. apt-get install rtmpdump libwww-mechanize-perl
    3. dpkg -i get-flash-videos_*.deb

Ahora que ya está instalado su uso es muy sencillo:

Abre una consola y teclea:

  1. get_flash_videos URLVIDEO
*En vez de URLVIDEO pegas la dirección del vídeo de YouTube.

También se que existen webs que hacen esto pero nunca está mal poder hacerlo sin depender de ninguna web.

Share

ago 172009
 

A veces es necesario partir un archivo en varios trozos para poderlo enviar por email o guardarlo en varios discos. Hacer esto en GNU/Linux es tremendamente fácil. Voy a explicar dos métodos diferentes para hacerlo:

Método 1:

Si las consolas te producen nauseas o ganas de suicidarte puedes optar por instalar un programa llamado HOZ (Hacha Open Zource) que presume de ser una alternativa open source del conocido HACHA para windows (que se puede ejecutar perfectamente en Linux si se tiene el wine instalado, es otra opción). Para instalar HOZ tan solo tienes que poner en consola como súper usuario (root):

  • apt-get install hoz-gui

Si tampoco quieres usar la consola para instalarlo puedes usar tu gestor de paquetes habitual como por ejemplo el Synaptic (en el caso de Debian y Ubuntu).

Usar el programa es tan fácil que no creo necesario hacer una guía para su uso, pero si tienes alguna duda puedes comentarla, estaré en cantado de ayudarte.

Método 2:

Si no te importa usar la consola, te recomiendo este método, pues usa las herramientas GNU que casi todas o todas las distribuciones traen instaladas por defecto.

Para partir un archivo se puede usar el comando split como a continuación:

  • split -b4300m MiPelicula.avi MiPeliculaPartida

El “4300″ indica que cada trozo debe ser de 4300 megas, “MiPelicula.avi” es el nombre del archivo que se quiere partir y “MiPeliculaPartida” es el nombre que tendrá cada uno de los trozos.

El resultado de este comando serán varios archivos de 4300 megas con nombres como “MiPeliculaPartida.aa”, “MiPeliculaPartida.ab”, “MiPeliculaPartida.ac” …

Para unirlos se usa el comando cat, y es aún mas fácil de usar que el split.

  • cat MiPeliculaPartida.* > MiPelicula.avi

Creo que sobran los comentarios sobre como usar este comando ;-)

Y esto es todo, espero haberle sido de utilidad a alguien con esta guia.

Share