# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

Encontrar qué paquete contiene un fichero en Debian

El comando “apt-file” permite buscar el paquete que contiene un fichero concreto. Por defecto no viene instalado en Debian y derivados así que lo podemos instalar directamente con apt:

# apt-get install apt-file

Una vez instalado actualizamos la base de datos de paquetes y ficheros:

# apt-file update

A partir de este momento ya podemos buscar. En el siguiente ejemplo buscamos el paquete que contiene el fichero “vmlinuz-2.6.38-8-generic”:

~$ apt-file search vmlinuz-2.6.38-8-generic
linux-image-2.6.38-8-generic: /boot/vmlinuz-2.6.38-8-generic

Se puede depurar la búsqueda por repositorio, patrón, arquitectura, etc:

Configuration options:
    --sources-list     -s         sources.list location
    --cache            -c          Cache directory
    --architecture     -a         Use specific architecture
    --cdrom-mount      -d        Use specific cdrom mountpoint
    --from-file        -f               Read patterns from file(s), one per line
                                        (use '-' for stdin)
    --from-deb         -D               Use file list of .deb package(s) as
                                        patterns; implies -F
    --non-interactive  -N               Skip schemes requiring user input
                                        (useful in cron jobs)
    --package-only     -l               Only display packages name
    --fixed-string     -F               Do not expand pattern
    --ignore-case      -i               Ignore case distinctions
    --regexp           -x               pattern is a regular expression
    --verbose          -v               run in verbose mode
    --dummy            -y               run in dummy mode (no action)
    --help             -h               Show this help.
    --version          -V               Show version number

Action:
    update                              Fetch Contents files from apt-sources.
    search|find                Search files in packages
    list|show                  List files in packages
    purge                               Remove cache files

Clonezilla: extfsclone.c: bitmap free count err, free:

A la hora de crear una imagen de un disco a través del Live CD de Clonezilla nos podemos encontrar este error al comienzo de la tarea:

extfsclone.c: bitmap free count err, free:XXXXXX

No es un error de falta de espacio en el disco de destino sino un problema de la integridad del sistema de ficheros del disco que estamos haciendo una imagen. Esto es muy común por ejemplo cuando hemos realizado un redimensionamiento del filesystem origen para evitar que el disco de destino en el que restauramos tenga que tener el mismo espacio disponible.

La solución pasa por hacer un FSCK manualmente al filesystem antes de realizar la imagen o directamente indicar a Clonezilla que sea él quien haga el escaneo (interactivo o automático). Para ello ejecutad el asistente en modo experto y seleccionar la opción:

-fsck-src-part

Cisco UCS Manager: java.io.IOException: Invalid Http response Login Error for URL…

Tras una actualización de Java, en mi caso Version 7 Update 51 (build 1.7.0_51_b13), a nivel de cliente resulta imposible acceder a la gestión de Cisco UCS Manager a través de protocolo SSL.

Login Error: java.io.IOException: Invalid Http response
Login Error: java.io.IOException: Server returned HTTP response code: 400 for URL: http://[MANAGER_IP]:443/nuova

El Workaround es deshabilitar el redirect SSL y acceder en plano, algo no demasiado recomendable si no se accede desde una red de confianza, la otra opción es revertir el update de Java a la espera de que en futuras actualizaciones el problema quede solucionado.

Si decidís aplicar temporalmente el workaround de sustituir HTTPS por HTTP, acceded por SSH al UCS y realizad el cambio:

ucs # scope system
ucs /system # scope services
ucs /system/services # enable http
ucs /system/services # disable http-redirect
ucs /system/services* # commit

Cuando se realice el commit las sesiones activas serán desactivadas y será necesario volver a acceder al Manager.

Habilitar el conector LDAPS en OpenDJ (post-instalación)

Cuando realizamos la instalación de OpenDJ con el asistente (setup) nos permite activar el protocolo LDAPS de forma sencilla con apenas un par de preguntas. En el caso de que queramos activarlo a posteriori hay que tener un poco más de conocimiento de OpenDJ, a continuación os explico los pasos para hacerlo.

Lo primero es disponer de un certificado SSL. Será el que utilicemos para las conexiones entrantes al puerto LDAPS (636 por defecto). Para testing podemos generar uno self-signed. Ejemplo:

# keytool -genkey -keyalg RSA -alias "OpenDJ LDAPS SSL" \
-keypass PASSWORD -keystore keystore.ks -storepass PASSWORD \
-dname "cn=OpenDJ, c=ES"

Esto nos genera un keystore que almacena el certificado (keystore.ks), lo ubicaremos en la ruta $OPENDJ_HOME/config/.

Una vez que tenemos el keystore hay que habilitar el conector LDAPS y configurar el certificado en OpenDJ. Lo primero verificamos que LDAPS efectivamente está deshabilitado:

# $OPENDJ_HOME/bin/status
[..]
          --- Connection Handlers ---
Address:Port : Protocol : State
-------------:----------:---------
--           : LDIF     : Disabled
0.0.0.0:161  : SNMP     : Disabled
0.0.0.0:389  : LDAP     : Enabled
0.0.0.0:636  : LDAPS    : Disabled
0.0.0.0:1689 : JMX      : Disabled
0.0.0.0:8080 : HTTP     : Disabled

Para habilitarlo debemos primero configurar el File Based Key Manager Provider “JKS (Java KeyStore)” para que utilice nuestro keystore. Lo hacemos a través de dsconfig:

# $OPENDJ_HOME/bin/status

>>>> OpenDJ configuration console main menu

What do you want to configure?

    1)   Access Control Handler               21)  Log Publisher
    2)   Access Log Filtering Criteria        22)  Log Retention Policy
    3)   Account Status Notification Handler  23)  Log Rotation Policy
    4)   Administration Connector             24)  Matching Rule
    5)   Alert Handler                        25)  Monitor Provider
    6)   Attribute Syntax                     26)  Password Generator
    7)   Backend                              27)  Password Policy
    8)   Certificate Mapper                   28)  Password Storage Scheme
    9)   Connection Handler                   29)  Password Validator
    10)  Crypto Manager                       30)  Plugin
    11)  Debug Target                         31)  Plugin Root
    12)  Entry Cache                          32)  Replication Domain
    13)  Extended Operation Handler           33)  Replication Server
    14)  External Changelog Domain            34)  Root DN
    15)  Global Configuration                 35)  Root DSE Backend
    16)  Group Implementation                 36)  SASL Mechanism Handler
    17)  Identity Mapper                      37)  Synchronization Provider
    18)  Key Manager Provider                 38)  Trust Manager Provider
    19)  Local DB Index                       39)  Virtual Attribute
    20)  Local DB VLV Index                   40)  Work Queue

    q)   quit

Accedemos al apartado 18 “Key Manager Provider” y listamos los “Manager Providers”, seleccionando y editando “JKS”:

>>>> Key Manager Provider management menu

What would you like to do?

    1)  List existing Key Manager Providers
    2)  Create a new Key Manager Provider
    3)  View and edit an existing Key Manager Provider
    4)  Delete an existing Key Manager Provider

    b)  back
    q)  quit

Enter choice [b]: 1

Key Manager Provider : Type       : enabled
---------------------:------------:--------
Administration       : file-based : true
JKS                  : file-based : true
PKCS11               : pkcs11     : false
PKCS12               : file-based : false

>>>> Key Manager Provider management menu

What would you like to do?

    1)  List existing Key Manager Providers
    2)  Create a new Key Manager Provider
    3)  View and edit an existing Key Manager Provider
    4)  Delete an existing Key Manager Provider

    b)  back
    q)  quit

Enter choice [b]: 3

>>>> Select the Key Manager Provider from the following list:

    1)  Administration
    2)  JKS
    3)  PKCS11
    4)  PKCS12

    c)  cancel
    q)  quit

Enter choice [c]: 2

>>>> Configure the properties of the File Based Key Manager Provider

        Property                            Value(s)
        ---------------------------------------------------
    1)  enabled                             true
    2)  key-store-file                      config/keystore.ks
    3)  key-store-pin                       PASSWORD
    4)  key-store-pin-environment-variable  -
    5)  key-store-pin-file                  -
    6)  key-store-pin-property              -
    7)  key-store-type                      JKS

    ?)  help
    f)  finish - apply any changes to the File Based Key Manager Provider
    c)  cancel
    q)  quit

En este punto como veis debemos indicar:

  • Ruta al fichero keystore que hemos creado con el certificado SSL.
  • Password del keystore
  • Enabled = True

Confirmamos y con esto el certificado ya está disponible a través del provider “JKS” y nuestro keystore.

Procedemos a activar el conector LDAPS accediendo al apartado 9) del menú de dsconfig:

    9)   Connection Handler

Editamos el conector de LDAPS:

>>>> Connection Handler management menu

What would you like to do?

    1)  List existing Connection Handlers
    2)  Create a new Connection Handler
    3)  View and edit an existing Connection Handler
    4)  Delete an existing Connection Handler

    b)  back
    q)  quit

Enter choice [b]: 3

>>>> Select the Connection Handler from the following list:

    1)  HTTP Connection Handler
    2)  JMX Connection Handler
    3)  LDAP Connection Handler
    4)  LDAPS Connection Handler
    5)  LDIF Connection Handler
    6)  SNMP Connection Handler

    c)  cancel
    q)  quit

Enter choice [c]: 4

>>>> Configure the properties of the LDAP Connection Handler

         Property                Value(s)
         ----------------------------------------------------------------------
    1)   allow-ldap-v2           true
    2)   allow-start-tls         false
    3)   allowed-client          All clients with addresses that do not match
                                 an address on the deny list are allowed. If
                                 there is no deny list, then all clients are
                                 allowed.
    4)   denied-client           If an allow list is specified, then only
                                 clients with addresses on the allow list are
                                 allowed. Otherwise, all clients are allowed.
    5)   enabled                 true
    6)   keep-stats              true
    7)   key-manager-provider    JKS
    8)   listen-address          0.0.0.0
    9)   listen-port             636
    10)  ssl-cert-nickname       Let the server decide.
    11)  ssl-cipher-suite        Uses the default set of SSL cipher suites
                                 provided by the server's JVM.
    12)  ssl-client-auth-policy  optional
    13)  ssl-protocol            Uses the default set of SSL protocols provided
                                 by the server's JVM.
    14)  trust-manager-provider  JKS
    15)  use-ssl                 true

    ?)   help
    f)   finish - apply any changes to the LDAP Connection Handler
    c)   cancel
    q)   quit

Sólo hay que modificar la propiedad enabled a true y confirmar. Automáticamente si todo ha ido bien OpenDJ escuchará por el puerto 636 en LDAPS y por todas las IPs del servidor. Si queremos forzar una única IP podemos modificar el listener:

    8)   listen-address          0.0.0.0

Confirmamos con un netstat:

# netstat -natp | grep 636
tcp        0      0 :::636                      :::*                        LISTEN      4397/java

Y si hacemos un ldapsearch con ssl podemos verificar la utilización del certificado:

# ./bin/ldapsearch --port 636 --useSSL  --baseDN "o=pruebas" "(objectclass=*)"
The server is using the following certificate: 
    Subject DN:  cn=OpenDJ, c=ES
    Issuer DN:  cn=OpenDJ, c=ES
    Validity:  Thu Feb 06 13:22:17 CET 2014 through Wed May 07 14:22:17 CEST 2014
Do you wish to trust this certificate and continue connecting to the server?
...

El status de OpenDJ también nos indicará que LDAPS está activo:

          --- Connection Handlers ---
Address:Port : Protocol : State
-------------:----------:---------
--           : LDIF     : Disabled
0.0.0.0:161  : SNMP     : Disabled
0.0.0.0:389  : LDAP     : Enabled
0.0.0.0:636  : LDAPS    : Enabled
0.0.0.0:1689 : JMX      : Disabled
0.0.0.0:8080 : HTTP     : Disabled

Convertir vídeos con audio AC3 a MP3 con ffmpeg

FFmpeg es es la mejor opción para realizar tareas con vídeo y audio, ya sea grabar, convertir o hacer streaming de audio y vídeo. Ya vimos como instalarlo en GNU/Linux aunque también puede ser utilizado en otros sistemas operativos, también Windows.

En este caso vamos a ver como convertir el audio de un vídeo de AC3 a MP3:

~$ ffmpeg -i video_ac3.avi -vcodec copy -acodec libmp3lame -ab 128k -ac 2 -threads 0 video_mp3.avi

Simplemente aseguraos de poner el vídeo original con el parámetro (-i) y al final de la línea de comandos el vídeo de destino. Podéis investigar las distintas opciones en la ayuda del comando. Si queréis aprovechar también la capacidad de todos los núcleos del sistema podéis dejar a ffmpeg que los utilice a su elección con el parámetro -threads a 0 como hemos puestos. Lanzará un hilo de ffpmeg por cada núcleo, si pusieramos -threads pues lanzaría los threads que inidicaramos.

Si lo queremos hacer directamente con un fichero de audio:

~$ ffmpeg -i audio.ac3 -acodec libmp3lame audio.mp3

Reparar arranque de Windows 7 (Boot Loader)

Vamos a ver los pasos para arreglar los problemas de arranque de Windows 7. En caso de corrupción del Boot Loader, cambios incorrectos o borrado de lo que no debíamos puede suceder que Windows no arranque.

Para solucionarlo debemos arrancar el sistema con el DVD de instalación de Windows 7, el correspondiente a la arquitectura que tengamos instalada. Una vez arrancado a través del DVD seleccionamos el idioma y tipo de teclado y pasamos a la venta en la que seleccionar “Repair your Computer“.

restaurar bootloader Windows 7

Después elegimos el sistema operativo a arreglar. Una vez seleccionado, es posible que el sistema intente automáticamente solucionar los problemas de arranque y pedirá reiniciar. Es posible que esto no solucione el problema y tengamos que seguir con los pasos indicados. El siguiente paso será seleccionar el sistema operativo que queremos arreglar, de nuevo Windows 7 y después aparecerá la opción “Startup Repair” que entrará en el modo de arreglar los problemas de arranque.

restaurar_bootloader2
restaurar_bootloader3

Una vez seleccionado, de nuevo se intentará solucionar el problema automáticamente y pedirá un nuevo reinicio. En este caso es ya muy probable que automáticamente el fallo se solucione y Windows 7 arranque de forma correcta.

Si pese a esto seguimos con problemas, podemos acceder a la línea de comandos (disponible en la ventana que he enseñado antes) y restaurar el MBR (master boot record):

bootrec /fixmbr

Y también escribir un nuevo sector de arranque:

bootrec /fixboot

En algún punto de los citados seguro que ya volvéis a poder arrancar Windows 7 sin problemas.

Cómo descargar vídeos a través de RTMP

Hay sitios web, sobre todo los de cadenas de televisión que ofrecen ‘televisión a la carta’ que ofrecen visualización de sus programas, series y demás pero no está (a simple vista) la posibilidad de descargar los vídeos. Muchos de estos sitios web ofrecen sus vídeos por RTMP.

Definición de RTMP por Wikipedia:

Real Time Messaging Protocol (RTMP) was initially a proprietary protocol developed by Macromedia for streaming audio, video and data over the Internet, between a Flash player and a server. Macromedia is now owned by Adobe, which has released an incomplete version of the specification of the protocol for public use.

The RTMP protocol has multiple variations:

The “plain” protocol which works on top of and uses TCP port number 1935 by default.
RTMPS which is RTMP over an TLS/SSL connection.
RTMPE which is RTMP encrypted using Adobe’s own security mechanism. While the details of the implementation are proprietary, the mechanism uses industry standard cryptography primitives.[1]
RTMPT which is encapsulated within HTTP requests to traverse firewalls. RTMPT is frequently found utilizing cleartext requests on TCP ports 80 and 443 to bypass most corporate traffic filtering. The encapsulated session may carry plain RTMP, RTMPS, or RTMPE packets within.

Para descargar estos vídeos desde GNU/Linux podemos utilizar rtmpdump, disponible en la mayoría de repositorios, en Debian y derivados lo instalamos desde apt:

# apt-get install rtmpdump

Para descargar el vídeo, primero debemos conocer la ruta completa al vídeo, para ello activamos el servidor rtmpdump:

$ rtmpsrv
RTMP Server v2.4
(c) 2010 Andrej Stepanchuk, Howard Chu; license: GPL

Streaming on rtmp://0.0.0.0:1935

Como bien indican en este blog es necesario ahora redirigir todo el tráfico RTMP a nuestro equipo (al servidor que acabamos de levantar en el puerto TCP 1935, lo hacemos con IPTABLES:

# iptables -t nat -A OUTPUT -p tcp --dport 1935 -j REDIRECT

Ahora lo que debemos hacer es ir a nuestro navegador y reproducir el vídeo que queramos descargar, dejando el servidor rtmp escuchando en la terminal. Cuando empiece la reproducción el rtmpsrv capturará el tráfico y nos dirá directamente el comando que tenemos que ejecutar para la descarga del vídeo, ejemplo:

WARNING: gnome-keyring:: couldn't connect to: /tmp/keyring-45dvJQ/pkcs11: No such file or directory
WARNING: Trying different position for client digest!

rtmpdump -r "rtmp://aragontvvodfs.fplive.net/aragontvvod" -a "aragontvvod" \
-f "LNX 11,9,900,152" \
-W "http://alacarta.aragontelevision.es/js/flowplayer/flowplayer.commercial-3.2.7.swf" \
-p "http://alacarta.aragontelevision.es/programas/aragon-en-abierto/jueves-16-de-enero-16012014-1806" \
-y "mp4:/web/19241/19241.mp4" -o 19241.flv
Closing connection... done!

Ahora simplemente deshabilitamos la redirección de tráfico con IPTABLES y descargamos el vídeo:

# iptables -t nat -D OUTPUT -p tcp --dport 1935 -j REDIRECT

Descargamos:

$ rtmpdump -r "rtmp://aragontvvodfs.fplive.net/aragontvvod" \
-a "aragontvvod" -f "LNX 11,9,900,152" \
-W "http://alacarta.aragontelevision.es/js/flowplayer/flowplayer.commercial-3.2.7.swf" \
-p "http://alacarta.aragontelevision.es/programas/aragon-en-abierto/jueves-16-de-enero-16012014-1806" \
-y "mp4:/web/19241/19241.mp4" -o 19241.flv
RTMPDump v2.4
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
WARNING: gnome-keyring:: couldn't connect to: /tmp/keyring-45dvJQ/pkcs11: No such file or directory
Connecting ...
INFO: Connected...
Starting download at: 0.000 kB
INFO: Metadata:
INFO:   duration              5748.75
INFO:   moovPosition          40.00
INFO:   width                 640.00
INFO:   height                360.00
INFO:   videocodecid          avc1
INFO:   audiocodecid          mp4a
INFO:   avcprofile            100.00
INFO:   avclevel              30.00
INFO:   aacaot                2.00
INFO:   videoframerate        25.00
INFO:   audiosamplerate       48000.00
INFO:   audiochannels         2.00
INFO: tags:
INFO:   ©too                 Lavf54.63.104
INFO: trackinfo:
INFO:   length                73583616.00
INFO:   timescale             12800.00
INFO:   language              und
INFO: sampledescription:
INFO:   sampletype            avc1
INFO:   length                275940160.00
INFO:   timescale             48000.00
INFO:   language              und
INFO: sampledescription:
INFO:   sampletype            mp4a
656177.338 kB / 5748.74 sec (99.9%)
Download complete

Oracle SQL*Plus sin instalación con Instant Client

Si tenemos un servidor en el que únicamente es necesario disponer en un equipo del cliente SQL*Plus para realizar conexiones a bases de datos Oracle remotas, no es necesario hacer una instalación completa del Oracle Database Client sino que podemos utilizar la versión standalone del SQL*Plus Instant Client.

Lo básico que tenemos que descargar para poder hacer uso de SQL*Plus son estos dos paquetes, el instantclient basic y el sqplus, según arquitectura:

instantclient-sqlplus-solaris.sparc64-11.2.0.4.0.zip
instantclient-basic-solaris.sparc64-11.2.0.4.0.zip

Ambos se pueden descargar desde www.oracle.com, el siguiente link por ejemplo es la descarga de los dos paquetes mencionados:

http://www.oracle.com/technetwork/topics/sol64soft-085649.html

Una vez descargados, es tan sencillo como descomprimirlos en la ruta deseada:

# ls -l
total 367176
-rw-rw-r--   1 root  root      414 Aug 21 23:28 BASIC_README
-rw-rw-r--   1 root  root      418 Aug 21 23:29 SQLPLUS_README
-rwxrwxr-x   1 root  root    23792 Aug 21 23:28 adrci
-rwxrwxr-x   1 root  root    41464 Aug 21 23:27 genezi
-r-xr-xr-x   1 root  root      368 Aug 21 23:29 glogin.sql
-rwxrwxr-x   1 root  root  50268448 Aug 21 23:28 libclntsh.so.11.1
-r-xr-xr-x   1 root  root  8653320 Aug 21 23:28 libnnz11.so
-rwxrwxr-x   1 root  root  1545008 Aug 21 23:28 libocci.so.11.1
-rwxrwxr-x   1 root  root  118735824 Aug 21 23:27 libociei.so
-r-xr-xr-x   1 root  root   121800 Aug 21 23:28 libocijdbc11.so
-r-xr-xr-x   1 root  root  1385072 Aug 21 23:28 libsqlplus.so
-r-xr-xr-x   1 root  root  1502288 Aug 21 23:29 libsqlplusic.so
-r--r--r--   1 root  root  2091135 Aug 21 23:28 ojdbc5.jar
-r--r--r--   1 root  root  2739616 Aug 21 23:28 ojdbc6.jar
-r-xr-xr-x   1 root  root     8960 Aug 21 23:29 sqlplus
-rwxrwxr-x   1 root  root   177680 Aug 21 23:28 uidrvci
-rw-rw-r--   1 root  root    66779 Aug 21 23:28 xstreams.jar

No hemos tenido que instalar nada, simplemente descomprimir. Ya podemos hacer uso del cliente sqlplus, previamente exportando la variable LD_LIBRARY_PATH para que sqplus encuentre las dependencias de librerias.

$ export LD_LIBRARY_PATH=/ruta/a/instant_client/

Y ejecutamos sqlplus:

$ ./sqlplus -h

SQL*Plus: Release 11.2.0.4.0 Production

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Use SQL*Plus to execute SQL, PL/SQL and SQL*Plus statements.

Usage 1: sqlplus -H | -V

    -H             Displays the SQL*Plus version and the
                   usage help.
    -V             Displays the SQL*Plus version.

Usage 2: sqlplus [ [
] [{logon | /nolog}] [] ]

 is: [-C ] [-L] [-M ""] [-R ] [-S]

    -C    Sets the compatibility of affected commands to the
                   version specified by .  The version has
                   the form "x.y[.z]".  For example, -C 10.2.0
    -L             Attempts to log on just once, instead of
                   reprompting on error.
    -M "" Sets automatic HTML markup of output.  The options

[...]

Podemos verificar la conexión a una base de datos remota de Oracle:

$ ./sqlplus oracle@\"oracle_host:1521/BBDD\"

SQL*Plus: Release 11.2.0.4.0 Production on Wed Dec 11 13:21:58 2013

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning option

SQL> quit
Ver el perfil de Alejandro García García en LinkedIn