Algo de Linux: octubre 2015

viernes, 30 de octubre de 2015

Ventajas de utilizar puntos de acceso Ubiquiti coordinados por un controlador frente al uso de un router DLINK Dir- 860L aislado por aula

Como ya he comentado en otras ocasiones, y aprovechando que me han preguntado sobre el tema, vuelvo a insistir en que sería mucho mejor utilizar puntos de acceso Ubiquiti en nuestras instalaciones, gestionados desde un único lugar (el controlador unifi) y trabajando de forma coordinada, que utilizar un router DLINK Dir- 860L aislado por aula.

¿Razones? 
  • Funcionamiento óptimo del sistema inalámbrico, puesto que  los puntos de acceso balancearán la carga.
  • Garantía en la itinerancia cuando un usuario se mueve entre las zonas de cobertura de los diferentes puntos de acceso.
  • Posibilidad de limitar el consumo de ancho de banda de subida y bajada.
  • Mayor control y sencillez en la tarea de administración de puntos de acceso: Desde un único lugar y mediante una interfaz web podemos ver todos los puntos de acceso que tenemos instalados en nuestra red, además de poder verificar de un vistazo si todos ellos se encuentran funcionando.

  • Control de todos los puntos de acceso desde la interfaz, pudiendo reiniciarlos, actualizar su firmware, etc... El sistema permite activar la actualización automática del firmware de todos los puntos de acceso.

  • Control de todos los dispositivos conectados en un momento determinado a la red inalámbrica, obteniendo sus datos, consumo de ancho de banda, además de poder bloquearles y desbloquearles el acceso.

  • Visualización de estadísticas de uso, pudiendo seleccionar días concretos.

  • Gestión de un histórico de conexiones en el que se puede consultar qué equipos se conectaron en un momento determinado, tiempo de conexión, consumo de ancho de banda y posibilidad de bloquear el acceso a equipos del histórico.

Si a ésto le añadimos el servidor PfSense que nos permite controlar el acceso mediante usuario/password a través de un portal cautivo o tickets y un par de servidores freeradius que realizan el control de usuarios de ldap, las posiblidades de control pueden ser infinitas.
Publicado por primera vez en http://enavas.blogspot.com.es

Eliminar el mensaje "No Valid Subscription" en versiones Proxmox 3+

Para los que utilizáis Proxmox como yo, os recomiendo leer el siguiente post acerca de cómo eliminar el popup con el mensaje "No Valid Subscription" que aparece al hacer login en versiones de Proxmox a partir de la 3, no tan sólo por eliminar el molesto mensaje sino por la interesante reflexión del autor:
https://smyl.es/how-to-remove-proxmox-no-valid-subscription-pop-up-message-from-proxmox-3/
Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 28 de octubre de 2015

Compilar Squid3 para realizar filtrado HTTPS y SSL Bumping

Como ya sucede con otros paquetes en Debian, Squid3 no viene compilado con soporte SSL. Así que, si queremos utilizarlo para realizar filtrado https, tendremos que compilarlo nosotros mismos.

Para poner en práctica lo explicado en este post, voy a utilizar Debian Jessie, que es lo que tengo en casa. La compilación en Debian Wheezy se haría exactamente del mismo modo.

Lo primero que debemos hacer es instalar las herramientas de desarrollo, si no las tenemos instaladas ya:
# apt-get install build-essential fakeroot dpkg-dev
Además instalamos curl para descargar archivos:
# apt-get install curl
Una vez instalado todo lo necesario, nos aseguramos de que tenemos el repositorio de código fuente de Debian en nuestra lista de repositorios, y si no, lo añadimos a nuestro /etc/apt/sources.list:
deb-src http://ftp.es.debian.org/debian jessie main
La diferencia entre el repositorio de código fuente y el de binarios es que el primero comienza con deb-src y el segundo con deb.
A continuación hacemos un:
# apt-get update
Después instalamos las dependencias necesarias para construir el paquete squid3:
# apt-get build-dep squid3
Y a continuación descargamos el código fuente de squid3 con nuestro usuario no privilegiado:
$ apt-get source squid3
Una vez hecho ésto, descargamos el script para compilar el código fuente:
$ curl -o squid-compile.sh https://copy.com/nLo0EbtLO3IocN4o
Y le damos permisos de ejecución:
$ chmod 755 squid-compile.sh
A continuación descargamos el parche para realizar la compilación con soporte ssl:
$ curl -o rules.patch https://copy.com/Xk1hq8nahtlmGfFJ
Y por último, ejecutamos el script para que construya los paquetes con soporte ssl:
$ ./squid-compile.sh
El proceso tardará un rato más o menos largo dependiendo de la potencia de vuestro ordenador. Cuando termine, encontraréis los siguientes paquetes creados:
  • squid3_3.4.8-6_amd64.deb
  • squid-cgi_3.4.8-6_amd64.deb
  • squid3-common_3.4.8-6_all.deb
  • squidclient_3.4.8-6_amd64.deb
  • squid3-dbg_3.4.8-6_amd64.deb
  • squid-purge_3.4.8-6_amd64.deb
Publicado por primera vez en http://enavas.blogspot.com.es

Descargar un archivo desde copy.com con el comando curl

Descargar un archivo desde Copy.com es una tarea sencilla si utilizamos el comando curl.

La sintaxis para descargarlo es la siguiente:
curl -o nombreficherodestino URL
Publicado por primera vez en http://enavas.blogspot.com.es

Instalar wiithon en Debian Jessie

En un post de 2009 os hablé de WBFS, y un tiempo después vimos como instalar wiithon en Debian Squeeze

Wiithon es una herramienta GPL que sirve para trabajar con backups de juegos Wii, permitiendo añadirlos a un disco duro, extraerlos, etc. 

Esta herramienta ha evolucionado y mejorado aún más con el tiempo. La última versión que podemos encontrar en launchpad es la 1.32, publicada en noviembre de 2014.


Disponer de wiithon en Debian Jessie es muy sencillo puesto que tan sólo hay que instalar el paquete Debian correspondiente a nuestra arquitectura:
Publicado por primera vez en http://enavas.blogspot.com.es

lunes, 26 de octubre de 2015

Actualizar Debian Wheezy automáticamente mediante unattended-upgrades

En un post de mayo de 2012 os mostré cómo actualizar los paquetes de Debian Squeeze automáticamente utilizando unattended-upgrades, una aplicación para realizar instalaciones automáticas de actualizaciones de seguridad, ideal para mantener actualizado el software de nuestro equipo de forma desatendida.

Como desde la versión que teníamos instalada en Debian Squeeze han cambiado algunas cosillas (por ejemplo: ya no corre como demonio), vamos a dar un repaso de nuevo a esta herramienta.

Instalar unattended-upgrades en Debian Wheezy sigue siendo igual de sencillo, puesto que el paquete se encuentra en los repositorios:
# apt-get install unattended-upgrades
Una vez instalado, echaremos un vistazo al principal fichero de configuración: /etc/apt/apt.conf.d/50unattended-upgrades:
// Automatically upgrade packages from these origin patterns
Unattended-Upgrade::Origins-Pattern {
        // Archive or Suite based matching:
        // Note that this will silently match a different release after
        // migration to the specified archive (e.g. testing becomes the
        // new stable).
//      "o=Debian,a=stable";
//      "o=Debian,a=stable-updates";
//      "o=Debian,a=proposed-updates";
        "origin=Debian,archive=stable,label=Debian-Security";
        "origin=Debian,archive=oldstable,label=Debian-Security";
};

// List of packages to not update
Unattended-Upgrade::Package-Blacklist {
//      "vim";
//      "libc6";
//      "libc6-dev";
//      "libc6-i686";
};

// This option allows you to control if on a unclean dpkg exit
// unattended-upgrades will automatically run
//   dpkg --force-confold --configure -a
// The default is true, to ensure updates keep getting installed
//Unattended-Upgrade::AutoFixInterruptedDpkg "false";

// Split the upgrade into the smallest possible chunks so that
// they can be interrupted with SIGUSR1. This makes the upgrade
// a bit slower but it has the benefit that shutdown while a upgrade
// is running is possible (with a small delay)
//Unattended-Upgrade::MinimalSteps "true";

// Install all unattended-upgrades when the machine is shuting down
// instead of doing it in the background while the machine is running
// This will (obviously) make shutdown slower
//Unattended-Upgrade::InstallOnShutdown "true";

// Send email to this address for problems or packages upgrades
// If empty or unset then no email is sent, make sure that you
// have a working mail setup on your system. A package that provides
// 'mailx' must be installed. E.g. "user@example.com"
//Unattended-Upgrade::Mail "root";

// Set this value to "true" to get emails only on errors. Default
// is to always send a mail if Unattended-Upgrade::Mail is set
//Unattended-Upgrade::MailOnlyOnError "true";

// Do automatic removal of new unused dependencies after the upgrade
// (equivalent to apt-get autoremove)
//Unattended-Upgrade::Remove-Unused-Dependencies "false";

// Automatically reboot *WITHOUT CONFIRMATION* if a
// the file /var/run/reboot-required is found after the upgrade
//Unattended-Upgrade::Automatic-Reboot "false";

// Use apt bandwidth limit feature, this example limits the download
// speed to 70kb/sec
//Acquire::http::Dl-Limit "70";
Este fichero es muy fácil de entender, sobre todo teniendo en cuenta los comentarios que explican los parámetros. Como podéis comprobar, viene configurado para realizar tan sólo las actualizaciones de Debian-Security, pero podemos modificarlo para que se actualicen de forma desatendida los paquetes de todos nuestros repositorios.

El siguiente bloque del fichero de configuración permite definir los repositorios desde los que queremos actualizar automáticamente los paquetes:
// Automatically upgrade packages from these origin patterns
Unattended-Upgrade::Origins-Pattern {
        // Archive or Suite based matching:
        // Note that this will silently match a different release after
        // migration to the specified archive (e.g. testing becomes the
        // new stable).
//      "o=Debian,a=stable";
//      "o=Debian,a=stable-updates";
//      "o=Debian,a=proposed-updates";
        "origin=Debian,archive=stable,label=Debian-Security";
        "origin=Debian,archive=oldstable,label=Debian-Security";
};
En este bloque podemos añadir nuevos patrones que permitan realizar instalaciones desatendidas desde otros repositorios. Para especificar repositorios utilizaremos los siguientes campos:
  • origin (formato corto: o).
  • label (formato corto: l).
  • archive (formato corto: a).
  • suite.
  • component (formato corto: c).
  • site.
Podemos encontrar los valores de cada uno de los campos de nuestros repositorios en los ficheros _Release alojados en /var/lib/apt/lists/.

Por ejemplo, supongamos que deseamos actualizar los paquetes del repositorio de Mozilla. Como ya tenemos configurado este repositorio en nuestra máquina, obtenemos las primeras líneas del siguiente archivo, donde veremos los datos que vamos a necesitar:
# head /var/lib/apt/lists/ldap_mozilla-backports_dists_wheezy-backports_Release
Origin: Debian Mozilla Team
Label: Debian Mozilla Team
Suite: wheezy-backports
Codename: wheezy-backports
Date: Fri, 16 Oct 2015 05:45:52 UTC
Architectures: i386 amd64
Components: iceweasel-release iceweasel-esr
Description: Debian Mozilla team APT archive for wheezy-backports
MD5Sum:
 8fe44fc8853db9b7df27b21016257761 86467 iceweasel-release/binary-i386/Packages
Viendo la salida del comando anterior, podríamos construir un patrón de origen como el siguiente:
        "o=Debian Mozilla Team,suite=wheezy-backports";
Y añadirlo al fichero /etc/apt/apt.conf.d/50unattended-upgrades, para que se actualicen también los paquetes del repositorio de Mozilla de forma desatendida:
// Automatically upgrade packages from these origin patterns
Unattended-Upgrade::Origins-Pattern {
        // Archive or Suite based matching:
        // Note that this will silently match a different release after
        // migration to the specified archive (e.g. testing becomes the
        // new stable).
//      "o=Debian,a=stable";
//      "o=Debian,a=stable-updates";
//      "o=Debian,a=proposed-updates";
        "origin=Debian,archive=stable,label=Debian-Security";
        "origin=Debian,archive=oldstable,label=Debian-Security";
        "o=Debian Mozilla Team,suite=wheezy-backports";
};
Por otra parte, "descomentaremos" las líneas de las opciones que nos interese aplicar.
Por ejemplo, sería interesante aplicar esta opción para solucionar el problema de que en una ejecución anterior de dpkg se hubiera interrumpido el proceso:
Unattended-Upgrade::AutoFixInterruptedDpkg "true";

Una vez hecho ésto, creamos el fichero /etc/apt/apt.conf.d/02periodic con el siguiente contenido:
// Enable the update/upgrade script (0=disable)
APT::Periodic::Enable "1";

// Do "apt-get update" automatically every n-days (0=disable)
APT::Periodic::Update-Package-Lists "1";

// Do "apt-get upgrade --download-only" every n-days (0=disable)
APT::Periodic::Download-Upgradeable-Packages "1";

// Run the "unattended-upgrade" security upgrade script
// every n-days (0=disabled)
// Requires the package "unattended-upgrades" and will write
// a log in /var/log/unattended-upgrades
APT::Periodic::Unattended-Upgrade "1";

// Do "apt-get autoclean" every n-days (0=disable)
APT::Periodic::AutocleanInterval "7";
Este fichero nos servirá para configurar las actualizaciones periódicas. Veamos lo que significa cada opción con un ejemplo: 
  • APT::Periodic::Enable "1";  Activamos las actualizaciones automáticas poniendo el valor a 1 o las desactivamos poniendo el valor a 0.
  • APT::Periodic::Update-Package-Lists "1"; Hacemos un apt-get update. Si ponemos el valor a 0 lo desactivamos.
  • APT::Periodic::Download-Upgradeable-Packages "1"; Descargamos los paquetes actualizables. Si ponemos el valor a 0 lo desactivamos.
  • APT::Periodic::AutocleanInterval "7"; Hacemos un apt-get autoclean cada 7 días. Si ponemos el valor a 0 lo desactivamos.
  • APT::Periodic::Unattended-Upgrade "1"; Ejecutar el script"unattended-upgrade" cada día. Si ponemos el valor a 0 lo desactivamos.    
unattended-upgrades se ejecuta mediante cron (/etc/cron.daily/apt). No obstante, si queremos, podemos forzar la ejecución manualmente mediante el script unattended-upgrade:
# unattended-upgrade
Además, podemos ejecutar unattended-upgrade en modo debug:
# unattended-upgrade -d
O simular la ejecución de unattended-upgrade sin llegar a actualizar:
# unattended-upgrade -d --dry-run
Publicado por primera vez en http://enavas.blogspot.com.es

Cómo hacer que ssh utilice una determinada interfaz de red

Algunas veces tenemos máquinas con varias interfaces de red y en ocasiones puede que coincida el rango de direcciones de algunas de ellas. 

En ese caso, si queremos realizar una conexión con ssh a una máquina de uno de los rangos de red que coinciden, podemos especificar la dirección IP de la interfaz de red por la que estamos conectados a su red utilizando el parámetro --bind (-b) de ssh:
# ssh --bind 192.168.1.16 root@192.168.1.35
Publicado por primera vez en http://enavas.blogspot.com.es

viernes, 23 de octubre de 2015

Resetear punto de acceso UniFi a sus valores por defecto

En la parte trasera del punto de acceso, junto al conector de red ethernet, hay un pequeño agujero con un botón de reset.  

Para resetear el punto de acceso:
  1. Pulsamos y mantenemos pulsado con un clip el botón de reset durante 10 segundos.
  2. A continuación soltamos el botón. El led de color del punto de acceso se apagará. y comenzará el proceso de reinicio.
Una vez hecho ésto, no debemos desconectar el punto de acceso del alimentador POE y el punto de acceso se restaurará a sus valores por defecto.
 
Una vez que el led vuelva a encenderse de color naranja y permanezca fijo sin parpadear, podremos comenzar el proceso de adopción por parte del controlador.

Este procedimiento sirve para los siguientes puntos de acceso:
  • UAP
  • UAP-Pro
  • UAP-LR
  • UAP-AC
  • UAP-Outdoor
  • UAP-Outdoor+
Publicado por primera vez en http://enavas.blogspot.com.es

Configurar SMTP en controlador UniFi para recibir notificaciones

En un post anterior, os mostré como  instalar el controlador UniFi en Debian Jessie para controlar todos nuestros puntos de acceso y gestionar nuestra red wifi desde un único lugar. No he publicado como realizar la instalación en Debian Wheezy porque el procedimiento es exactamente el mismo.

Es muy recomendable configurar SMTP en el controlador UniFi para recibir notificaciones del controlador. Y qué mejor manera de hacerlo que usando el SMTP de gmail, si no tenéis un servidor SMTP en vuestra red.

En la siguiente captura de pantalla podéis ver los valores que es necesario configurar para que nuestro controlador UniFi pueda enviarnos notificaciones mediante el SMTP de Gmail:


Básicamente se trata de acceder a la sección Controller, que he marcado con un (1) en la imagen e introducir los valores como se muestran en la imagen:
  • Activamos la casilla "Enable mail server".
  • En host escribimos el nombre del servidor SMTP de Gmail: smtp.gmail.com
  • En puerto especificamos el puerto 587.
  • Marcamos la casilla "Enable SSL"
  • Marcamos la casilla "Enable Authentication".
  • Escribimos el nombre del usuario que se va a utilizar para enviar el e-mail. En mi caso podéis ver que he introducido la dirección de correo completa. Pues bien, eso es porque he utilizado una cuenta de mi dominio de Google Apps.
  • Escribimos el password del usuario que se va a utilizar para enviar el e-mail.
  • Si marcamos la casilla "Specify sender address" podemos especificar la dirección de correo que queramos se muestre en la dirección de envío.
 Por último, tan sólo me queda decir que podéis testear si el envío funciona introduciendo una dirección en la casilla " Send test email to"
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 22 de octubre de 2015

Encender y apagar la wifi de nuestro router A4001N utilizando el botón de reset/wps

Si echáis un vistazo al siguiente howto, veréis que es muy sencillo asignar funciones a los botones de nuestro router wifi con OpenWRT:
http://wiki.openwrt.org/doc/howto/hardware.button

Para este post, he utilizado un A4001N, pero es perfectamente aplicable a otros routers con OpenWRT.
La idea es que podamos apagar el wifi si mantenemos presionado el botón de reset/wps durante un intervalo de tiempo y volver a encenderlo de nuevo del mismo modo.

Vamos a hacer todo ésto desde la línea de comandos, así que nos conectamos al router mediante ssh.

Una vez conectados, lo primero que tenemos que hacer es identificar los botones.  Para ello, creamos una carpeta en el directorio /etc/hotplug.d a la que llamaremos button:
# mkdir /etc/hotplug.d/button
Dentro de esa carpeta creamos un script al que podemos llamar buttons, por ejemplo, con el siguiente contenido:
/etc/hotplug.d/button/buttons
#!/bin/sh
logger the button was $BUTTON and the action was $ACTION
El script lo que hará será crear una entrada en el registro de logs con un mensaje que nos informa del botón que pulsó y la acción que se realizó.

Una vez lo hayamos guardado, pulsamos un botón (en nuestro caso hemos dicho que el botón de reset/wps, que por cierto, es el único que tiene nuestro router además del botón de apagado) y lo soltamos.

A continuación leemos los logs utilizando el comando logread:
# logread
Y entre los muchos mensajes de log, veremos algunos como los siguientes:
Thu Oct 22 20:30:37 2015 user.notice root: the button was wps and the action was pressed
Thu Oct 22 20:30:38 2015 user.notice root: the button was wps and the action was released
Que nos informa de dos cosas:
  • El botón llamando "wps" fué pulsado "presed".
  • El botón llamando "wps" fué soltado "released".
Pues bien. Con ésto ya hemos identificado el nombre del botón (wps) y sus dos acciones: "pressed" y "released".

El siguiente paso que daremos, una vez identificado el botón, será descargarnos un script que va a gestionar las acciones que se deben realizar cuando el botón se haya pulsado durante un intervalo de tiempo. Y lo vamos a descargar directamente en el router usando wget, así que si no tenéis instalado wget, lo instaláis:
# opkg update && opkg install wget
Una vez instalado wget, lo ejecutamos para que descargue el script 00-button y lo coloque en el directorio /etc/hotplug.d/button/ directamente:
# wget --no-check-certificate -O /etc/hotplug.d/button/00-button https://dev.openwrt.org/export/36332/trunk/target/linux/atheros/base-files/etc/hotplug.d/button/00-button
Y le damos permisos de ejecución:
# chmod 755 /etc/hotplug.d/button/00-button
Este script contiene el siguiente código:
. /lib/functions.sh
do_button () {
        local button
        local action
        local handler
        local min
        local max

        config_get button $1 button
        config_get action $1 action
        config_get handler $1 handler
        config_get min $1 min
        config_get max $1 max

        [ "$ACTION" = "$action" -a "$BUTTON" = "$button" -a -n "$handler" ] && {
                [ -z "$min" -o -z "$max" ] && eval $handler
                [ -n "$min" -a -n "$max" ] && {
                        [ $min -le $SEEN -a $max -ge $SEEN ] && eval $handler
                }
        }
}

config_load system
config_foreach do_button button
Ahora que ya tenemos el script en su sitio, podemos crear configuraciones para ejecutar diferentes acciones en función del tiempo que el usuario deje pulsado el botón. 
Las configuraciones de los botones se almacenan en el mismo fichero que las configuraciones de los leds, es decir, en el archivo /etc/config/system. Así que editamos este fichero y le añadimos lo siguiente:
config button
        option button   wps
        option action   released
        option handler  "/usr/bin/wifionoff"
        option min      0
        option max      3
La configuración que estamos realizando se entiende por sí sola: Estamos definiendo un botón cuyo nombre es wps y la acción que se debe realizar (ejecutar el script /usr/bin/wifionoff) al soltar el botón cuando se haya pulsado durante un tiempo entre 0 y 3 segundos.

Por último, no nos queda más que crear el script /usr/bin/wifionoff, que se encargará de conmutar entre los estados de encendido y apagado del router:
#!/bin/sh
SW=$(uci -q get wireless.@wifi-device[0].disabled)
[ "$SW" == "1" ] && uci set wireless.@wifi-device[0].disabled=0
[ "$SW" == "1" ] || uci set wireless.@wifi-device[0].disabled=1
wifi
Si ahora quisiéramos hacer que el router se resetease a los valores por defecto al pulsar el mismo botón durante un tiempo de entre 20 y 25 segundos, añadiríamos la siguiente configuración al fichero /etc/config/system:
config button
        option button   wps
        option action   released
        option handler  "firstboot && reboot"
        option min      20
        option max      25
De este modo, podríamos configurar diferentes acciones dependiendo del intervalo de tiempo que se esté pulsando el botón.
Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 21 de octubre de 2015

Conectar un HUB USB a nuestro router OpenWRT para disponer de varios puertos USB

Podemos conectar un HUB USB con alimentación externa a nuestro router OpenWRT para disponer de varios puertos USB a los que conectar diferentes dispositivos. Eso sí, es importante que el HUB disponga de alimentación externa porque si no, no va a funcionar. 


Una vez conectado, instalamos los siguientes paquetes:


Si  nos conectamos al router mediante ssh y ejecutamos:
# dmesg | grep -i hub
Comprobaremos que el hub ha sido detectado por el sistema.

Publicado por primera vez en http://enavas.blogspot.com.es

Error en Luci "/usr/lib/lua/luci/dispatcher.lua:433: Failed to execute cbi dispatcher target for entry '/admin/system/fstab'."

Si instaláis el soporte para montar dispositivos usb en OpenWRT, puede que al tratar de mostrar los puntos de montaje en Luci,



obtengáis un error como el siguiente: 

 "/usr/lib/lua/luci/dispatcher.lua:433: Failed to execute cbi dispatcher target for entry '/admin/system/fstab'."


Para solucionarlo, no tenéis más que conectaros mediante ssh al router, y crear el archivo /etc/config/fstab:
 

Y el error desaparecerá:



Publicado por primera vez en http://enavas.blogspot.com.es

Configurar OpenWRT desde Luci para que muestre un led de actividad wifi

OpenWRT por defecto muestra todos los LEDS del router apagados, salvo el de Power. Si utilizáis vuestro router con OpenWRT como cliente wifi de otro, sería interesante usar alguno de los LEDS para mostrar que hay conexión.
En este ejemplo, en un router A4001N he configurado el LED A4001:green:dsl desde el interfaz Luci para que muestre actividad cuando:
  • El enlace esté activado (link).
  • ita (tx).
  • O reciba (rx). 

Una vez seleccionadas las opciones, pulsamos el botón "Guardar y aplicar" y los cambios se aplicarán.

Si echáis un vistazo al archivo /etc/config/system de vuestro router, veréis que las opciones seleccionadas en el interfaz Luci se han traducido en el siguiente bloque de configuración:

config led
        option name 'wifi'
        option sysfs 'A4001N:green:dsl'
        option default '1'
        option trigger 'netdev'
        option dev 'wlan1'
        option mode 'link tx rx'
En este router tengo instalado OpenWRT Chaos Calmer. 
Una cosa que me ha llamado la atención que al especificar que se encienda el LED dsl, lo que se enciende es el LED inet. Supongo que será un bug.
Y otra cosa que también he observado es que no se encuentran definidos todos los LEDS.
Publicado por primera vez en http://enavas.blogspot.com.es

martes, 20 de octubre de 2015

¿Por qué no me gusta la solución inalámbrica que se ha decidido implantar en los centros?

Por lo que nos comentaron en junio, el servicio TIC había instalado en un centro un aula de pruebas con un router wifi D-Link DIR-860L para dar servicio inalámbrico a 40 portátiles y posteriormente lo extendieron al resto del centro montando un total de 22 puntos de acceso, uno por aula.

El montaje consiste más o menos en lo siguiente: En cada aula habrá un router wifi conectado al equipo del profesor mediante cable. El equipo de profesor actuará como servidor dhcp y por defecto, la wifi del aula se encontrará desactivada.  Para que los usuarios puedan conectarse a la wifi del aula, el profesor deberá generar una contraseña y activar la wifi. Y cuando el profesor cierre la sesión gráfica, se desconectará automáticamente la wifi del punto de acceso.

La idea es extender este modelo a todos los centros educativos.

En principio me parece una solución de aficionados que está bien para montar en casa o para un grupo de usuarios, pero creo que no es óptima para dar cobertura a un centro con muchos usuarios y donde se pretende implantar el sistema BYOD (Bring Your Own Device) sin que se produzcan problemas y el sistema ideado termine fallando, como ya ha sucedido en otras ocasiones.

He tratado de explicar por qué no me convence este sistema y los problemas que le veo, además de contarles la solución que actualmente tengo implantada en mi centro, pero creo que no acaban de entenderla (quizás porque sea demasiado técnica...) y no me responden a las dudas que me surgen sobre el funcionamiento del sistema, probablemente porque ni tan siquiera se lo hayan planteado.
Para empezar creo que no es necesario instalar un router wifi por aula y, es más, creo que eso va a dar problemas porque se solaparán los canales al disponer de tantos puntos de acceso cercanos y no poder garantizar cuándo se encenderá cada uno de ellos. Lo ideal es que se mida y se realice tan sólo la instalación de los puntos de acceso necesarios en ubicaciones concretas y probablemente  con la mitad sea más que suficiente, aunque como ya digo, eso requiere un estudio porque cada edificio es diferente.

Por otra parte, el plantear un modelo basado en un punto de acceso por aula conectado al ordenador del profesor implica una dificultad para administrar los dispositivos y diagnosticar problemas al encontrarse dentro de la clase y mayor probabilidad de que fallen por encontrarse al alcance de la mano.

En lugar de los routers wifi D-Link que nos proponen, personalmente creo que es más conveniente utilizar puntos de acceso Unifi de Ubiquiti:
  • Con tan sólo instalar un controlador Unifi en una de las máquinas del centro, es posible gestionar todos los puntos de acceso desde un único lugar, algo que simplifica enormemente la gestión de los puntos de acceso.
  • Por otra parte, con Ubiquiti se dispone de un control más directo de los dispositivos conectados desde una interfaz web, pudiendo controlar el consumo de ancho de banda por dispositivo. 
  • Además, con el modelo que nos plantean, es necesario disponer de una toma de corriente para enchufar los router wifi D-Link. En cambio los puntos de acceso Unifi de Ubiquiti disponen de alimentación Poe, que alimenta los dispositivos mediante el mismo cable ethernet, lo que no requiere una toma de corriente adicional.
Me parece también un inconveniente que tenga que haber un control software para que el profesor genere una contraseña, active el punto de acceso y luego tenga que proporcionársela a los alumnos para que puedan contectarse a la red.

Otro de los inconveientes que le veo es que este modelo obliga a plantear otras soluciones a parte para otras dependencias del centro como la sala de profesores, el salón de actos, los departamentos, etc... cuando es mucho más sencillo y práctico disponer de un único modelo. Y si el modelo deja fuera a estas otras dependencias, ¿no se propone un modelo para ellas? Sí es así y se van a suministrar equipos a profesores, ¿dónde se van a conectar a la red? ¿sólo dentro del aula? ¿no se está haciendo un trabajo a medias?

Si la idea es lograr el uso más eficaz posible de un recurso limitado como el ancho de banda, como nos han dicho:
  • El modelo que se ha decidido poner en marcha, ¿va a funcionar cuando se implante BYOD y los alumnos traigan sus equipos con sistemas operativos que puedan tener virus? ¿permite realizar un filtrado?
  • ¿El modelo propuesto incorpora alguna forma de control de consumo de ancho de banda? Nos han dicho que las pruebas se han realizado con equipos Debian. ¿Qué va a suceder cuando los usuarios traigan equipos Windows y tengan activado Windows Update?
¿Garantizar la seguridad consiste solamente en que los puntos de acceso solamente sean visibles durante el tiempo de uso?

¿Por qué dicen que este modelo garantiza mejor la conectividad? Si ni siquiera se estudia dónde es necesario colocar un punto de acceso. La conectividad puede lograrse colocando sólo los puntos de acceso necesarios en las ubicaciones adecuadas.
¿Por qué piensan que este modelo es más fácil de mantener? ¿En qué sentido? Como he explicado, con Unifi es posible gestionar todos los puntos de acceso desde un único lugar mediante una interfaz web, cosa que con el modelo propuesto no es así. 

¿Por qué piensan que otras soluciones se basan en añadir mac de equipos nuevos? Mediante un firewall como PfSense y puntos de acceso Unifi se pueden hacer muchas cosas y sobre todo, realizar una instalación más profesional.

Sinceramente, me da la impresión de que ésto es otro nuevo invento, que, esperemos me equivoque, no va a funcionar o al menos no como debería si se hiciera bien.
Publicado por primera vez en http://enavas.blogspot.com.es

Instalar libdvdcss2 para reproducir DVD's encriptados

En un post de septiembre os explicaba como convertir un dvd a mp4 desde la línea de comandos instalando el paquete handbrake-cli y os comentaba que también existe un paquete handbrake-gtk para hacer lo mismo desde el entorno gráfico.

En ese momento, se me olvidó mencionar que si el DVD se encuentra encriptado, es necesario tener instalada libdvdcss2, una librería para leer DVD's encriptados.

Podéis disponer de esta librería instalando el paquete libdvdcss2 desde los repositorios de VLC:
deb http://download.videolan.org/pub/debian/stable/ /

Primero, añadimos el repositorio a nuestra lista de repositorios:
echo "deb http://download.videolan.org/pub/debian/stable/ /" >> /etc/apt/sources.list.d/videolan.list
A continuación añadimos la clave del repositorio:
# wget -O - http://download.videolan.org/pub/debian/videolan-apt.asc | apt-key add -
Y por último, actualizamos índices e instalamos:
# apt-get update && apt-get -y install libdvdcss2
También podemos instalar el paquete desde el repositorio deb-multimedia. Publicado por primera vez en http://enavas.blogspot.com.es

viernes, 16 de octubre de 2015

Script para crear cuentas de profesores en mediagoblin a partir del fichero de exportación de Rayuela

Hace tiempo escribí un post explicando como instalar mediagoblin para disponer de una plataforma que permita a nuestros usuarios subir y poder visualizar vídeos y otros archivos multimedia que se usan habitualmente en el centro. 

Mediagoblin permite reproducir los archivos multimedia mediante un navegador a cualquier usuario que acceda al servidor, pero tan sólo permite subir contenidos a aquellos usuarios que tengan creada una cuenta en el servidor.

Como sé que varios compañeros montaron Mediagoblin en su centro siguiendo las instrucciones que publiqué, he pensado que les podría venir bien el script que he escrito para crear una cuenta a cada uno de los profesores del centro en el servidor Mediagoblin de forma automatizada a partir del fichero de exportación de datos de profesorado .xml que genera la plataforma Rayuela:

creacuentasmediagoblin.sh
#!/bin/bash
#
# Script para crear cuentas de profesores en mediagoblin a partir del fichero de Exportación de Datos
# de profesores generado por Rayuela.
# Observación: Colocar este script en el directorio de mediagoblin
# Esteban M. Navas Martín 
# 16/10/2015

PROFESORESXML="ExportacionDatosProfesorado.xml"
PROFESORESCSV="profesoresrayuela.csv"

dominio="iesvalledeljerteplasencia.es"

# Instalamos xmlstarlet si no estaba instalado
dpkg -l | grep ^"ii  xmlstarlet" > /dev/null || echo "Es necesario instalar el paquete xmlstarlet"

# Obtenemos la lista de profesores a partir del xml obtenido de Rayuela
xmlstarlet sel -t -m "/profesorado-centro/profesor" -v "concat(dni,':',nombre,':',primer-apellido,' ',segundo-apellido,':',departamento,':')" -m "datos-usuario-rayuela" -v "login" -n $PROFESORESXML | sed '/^$/d' >  $PROFESORESCSV

while read LINEA ;do
    nombre=`echo $LINEA | awk -F":" '{print $2}'`
    apellidos=`echo $LINEA | awk -F":" '{print $3}'`
    login=`echo $LINEA | awk -F":" '{print $5}' | sed 'y/áÁàÀãÃâÂéÉêÊíÍóÓõÕôÔúÚñÑçÇ/aAaAaAaAeEeEiIoOoOoOuUnNcC/'`
    email="$login@$dominio"
    password=`echo $LINEA | awk -F":" '{print $1}'`

    if [ $login ]; then 
       echo "Creando usuario mediagoblin $login con password $password y email $email"
       ./bin/gmg adduser -u $login -p $password -e $email
    else
       echo "$nombre $apellidos no tiene login" > profesoressinlogin.log
    fi
done < $PROFESORESCSV
Para utilizarlo, tan sólo tenéis que colocar el script y el fichero ExportacionDatosProfesorado.xml en el directorio de mediagoblin y ejecutarlo.
https://copy.com/6PDZ9cqOSxGct9q9

Publicado por primera vez en http://enavas.blogspot.com.es

La forma más sencilla de quitar acentos, eñes y cedillas en bash

En Linux hay muchas formas de lograr el mismo resultado. No obstante creo que la forma más sencilla de quitar acentos, eñes y cedillas en bash es utilizar el comando 'y' de 'sed':
$ sed -i 'y/áÁàÀãÃâÂéÉêÊíÍóÓõÕôÔúÚñÑçÇ/aAaAaAaAeEeEiIoOoOoOuUnNcC/' fichero
Si consultáis la ayuda de 'sed', veréis que el comando 'y' cambia cada caracter del patrón de búsqueda por el caracter correspondiente en el patrón de sustitución, de tal forma que:
  • La á se reemplazará por una a.
  • La Á se reemplazará por una A.
  • La à se reemplazará por una a.
  • Y así sucesivamente... Cada caracter del patrón fuente se sustituirá por el caracter en la misma posición del patrón en el destino.
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 15 de octubre de 2015

Cambiar los UID y GID de un usuario

Cambiar el UID y el GID de un usuario local puede ser una tarea un poco incómoda porque no sólo tenemos que cambiar los identificadores de usuario y grupo del propio usuario; sino que además tendremos que modificar el UID y el GID de todos aquellos ficheros que pertenezcan al usuario en el sistema para que sigan perteneciéndole una vez cambiados los identificadores del usuario.

Para facilitarme el trabajo, he escrito un script muy sencillo que pregunte los datos y me permita realizar todos estos cambios de una manera automática:

changeUserUidGid:
#!/bin/bash
#
# Cambiar el UID y el GID de un usuario determinado 
# Esteban M. Navas 
# 15/10/2015

read -p "Login del usuario: " LOGIN
read -p "Grupo del usuario: " GROUP

OLDUID=`id $LOGIN | cut -f1 -d" " | cut -f1 -d"(" | cut -f2 -d"="`
OLDGID=`id $LOGIN | cut -f2 -d" " | cut -f1 -d"(" | cut -f2 -d"="`

read -p "Nuevo UID: " NEWUID
read -p "Nuevo GID: " NEWGID

usermod -u $NEWUID $LOGIN
groupmod -g $NEWGID $GROUP
find / -user $OLDUID -exec chown -h $NEWUID {} \; 2>/dev/null
find / -group $OLDGID -exec chgrp -h $NEWGID {} \; 2>/dev/null
usermod -g $NEWGID $LOGIN

echo "Proceso concluido"
Como podéis ver, el script solicita que el usuario introduzca el login y el grupo del usuario junto con los nuevos uid y gid que quiera asignar. Una vez introducidos, cambiará el identificador de usuario:
usermod -u $NEWUID $LOGIN
Modificará el identificador del grupo:
groupmod -g $NEWGID $GROUP
Cambiará el uid de todos los ficheros pertenecientes al usuario:
find / -user $OLDUID -exec chown -h $NEWUID {} \; 2>/dev/null
Modificará el gid de todos los ficheros propiedad del usuario:
find / -group $OLDGID -exec chgrp -h $NEWGID {} \; 2>/dev/null
Y por último, modificará el gid principal del usuario:
usermod -g $NEWGID $LOGIN
Dejo a continuación el enlace por si queréis descargarlo:
https://copy.com/gKmTqMkh1w3pcGIW
Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 14 de octubre de 2015

GAM: Gestionar dominios de Google Apps desde la línea de comandos

En nuestro centro disponemos de un dominio de Google Apps for Education.

Pues bien, en cursos pasados he utilizado GADS (Google Apps Directory Sync) para crear las cuentas de Google de los usuarios del centro a partir de los datos almacenados en el servidor LDAP. La cuestión es que a principios de curso al menos, la aplicación de sincronización fallaba y me mostraba un mensaje informando de que no era posible contactar con el servidor. Así que, dado que necesitaba crear las cuentas lo antes posible, decidí pasar de esta aplicación y buscar una alternativa.

Enseguida encontré una solución que me encantó: GAM (Google Apps Manager), sobre todo por ser una herramienta de línea de comandos que me permitía crear scripts o aplicaciones ajustadas a mis necesidades.

GAM nos permite gestionar de una manera muy sencilla prácticamente todos los recursos de nuestro dominio de Google Apps:
  • Usuarios.
  • Grupos.
  • Alias.
  • Unidades organizativas.
  • Cloud Print.
  • Classroom.
  • Calendarios.
  • etc...
Además es multiplataforma, estando disponible tanto para Linux, como para Mac o Windows.

En Windows existe un instalador. En cambio, en Linux o Mac, tan sólo tenemos que descargar un fichero comprimido y descomprimirlo en un directorio de nuestra máquina. 

Para disponer de la aplicación tanto en el centro como en casa, lo que he hecho ha sido descomprimir el fichero en mi carpeta de Copy que tengo sincronizada en mis máquinas. Así puedo usar GAM directamente tanto en casa como en el trabajo.

Además, he creado un enlace en /usr/bin, de manera que pueda ejecutar la aplicación sin tener que especificar la ruta completa. Por ejemplo:
# ln -sf /home/enavas/Copy/GAM-3.61/gam.py /usr/bin/gam.py

Una vez descomprimido y creado el enlace, es necesario crear dos ficheros que nos proporcionarán una quota para realizar peticiones a la API:
  • client_secrets.json
  • oauth2service.json
Podéis crearlos y descargarlos siguiendo las siguientes instrucciones:
https://github.com/jay0lee/GAM/wiki/CreatingClientSecretsFile

Una vez descargados ambos ficheros, debemos guardarlos en la carpeta donde se encuentra la aplicación y ya podremos utilizarla.

Para conocer los comandos que podéis usar y su sintaxis os recomiendo consultar la guía de referencia de comandos de GAM:
https://github.com/jay0lee/GAM/wiki/GAM3DirectoryCommands

Veamos algunos ejemplos de uso:

Supongamos que quiero obtener información acerca de la unidad organizativa profesores de mi dominio:
$ gam.py info org profesores
Ésto me mostrará la información de la unidad organizativa y las direcciones de todos los miembros que forman parte de ella.

Ahora supongamos que quiero obtener información acerca de la unidad organizativa profesores de mi dominio sin que me muestre las direcciones de los miembros:
$ gam.py info org profesores nousers
Si quisiéramos crear un nuevo usuario, podríamos hacerlo de la siguiente manera:
$ gam.py create user enavas
   firstname 'Esteban' lastname 'Navas Martín'
   password 'mip@ssW0rd!'
Si quisiéramos crear un nuevo grupo, podríamos hacer lo siguiente:
$ gam.py create group profesores@midominio.es
Ahora supongamos que queremos añadir un nuevo usuario al grupo creado anteriormente. La cosa sería tan sencilla como:
$ gam.py update group profesores add member user enavas@midominio.es
Enfin. Consultando la guía de referencia, veréis que las posibilidades son muchas.

Lo mejor de todo es que podemos utilizar todos estos comandos en un script.
Un ejemplo:
#!/bin/bash

FICHERO="profesoresrayuela.csv"

gam.py info org PROFESORES > /tmp/profesoresgoogleapps.csv

while read LINEA ;do
    nombre=`echo $LINEA | awk -F"," '{print $1}'`
    apellidos=`echo $LINEA | awk -F"," '{print $2}'`
    email=`echo $LINEA | awk -F"," '{print $3}'`
    login=`echo $email | cut -f1 -d"@"`
    password=`echo $LINEA | awk -F"," '{print $4}'`

    if [ $login ] && ! [ "`grep $login /tmp/profesoresgoogleapps.csv`" ]; then 
       echo "Creando usuario $email con login $login"

       gam.py create user "$email" firstname "$nombre" lastname "$apellidos" password "$password"
       gam.py update org PROFESORES add users $email
    else
       echo "$nombre $apellidos no tiene login" > alumnossinlogin.log
    fi
done < $FICHERO

Publicado por primera vez en http://enavas.blogspot.com.es

sábado, 10 de octubre de 2015

¿Cómo puedo iniciar sesión en un portátil del IES si nunca antes lo he hecho y no estoy conectado a la red?

Ésta es una pregunta que recientemente me han hecho: ¿Cómo puedo iniciar sesión en un portátil del IES si nunca antes lo he hecho y no estoy conectado a la red?

La solución es sencilla: Vete a un terminal de texto con <ctrl>+<alt>+<f1> y cachea las credenciales del usuario de ldap con el que quieres iniciar sesión. Por ejemplo:
# cc_test -store any enavas mipassword
Luego vuelve al terminal gráfico e inicia sesión.

¿Por qué es posible hacer ésto? Bueno, pues básicamente por cuatro cosas:
  • Nuestros usuarios inician sesión mediante las cuentas del servidor ldap
  • Utilizamos nscd para cachear la información de usuarios y grupos y en la configuración de nscd tenemos definido un positive-time-to-live de 90 días
    positive-time-to-live
    .
  • Utilizamos libpam-ccreds para cachear las credenciales de un usuario localmente.
  • Utilizamos el módulo libpam_mkhomedir para crear el directorio home cuando un nuevo usuario inicia sesión.
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 8 de octubre de 2015

Definición de nodos en Puppet y problemas asociados

Ya ha habido varios compañeros que me han comentado el mismo problema: "Tengo bien configurado el cliente puppet, si hago un puppet agent --test veo que puppet se ejecuta correctamente, pero no se aplican las clases que tengo definidas para este cliente."

En este caso, el problema suele estar en que tenéis varias definiciones aplicables para un mismo nodo y Puppet sólo obtiene los contenidos de una única definición de nodo. 

Veamos un ejemplo típico: Supongamos que tenéis un nodo default cuyos contenidos se aplican a todos los nodos y definís un nodo concreto. Por ejemplo: node a02-pro { } 

Pues bien, una vez que hayáis definido expresamente el nodo a02-pro, a dicho nodo se le aplicarán los contenidos definidos en dicho nodo y no se le aplicarán los contenidos de default, a menos que hagáis que herede los contenidos del nodo default. ¿Por qué? Pues simplemente porque Puppet sólo obtiene los contenidos de una única definición de nodo.

Para decidir qué definición debe usar para un nodo, Puppet realiza las siguientes comprobaciones en orden:
  1. Si existe una definición de nodo con el nombre exacto del nodo, Puppet la utiliza.
  2. Si hay una expresión regular que coincide con el nombre del nodo, Puppet la usará. Pero, si hay varias expresiones regulares que coincidan, utilizará una de ellas sin garantizar cual.
  3. Si el nombre del nodo tiene forma de nombre completamente cualificado (fqdn), puppet extraerá la porción final del dominio y comenzará con el paso uno.
  4. En caso de que no se cumpla ninguno de los casos anteriores, Puppet utilizará el nodo default.
Publicado por primera vez en http://enavas.blogspot.com.es

lunes, 5 de octubre de 2015

Automatizar la instalación/actualización de Oracle VM VirtualBox Extension Pack

Cuando instalamos VirtualBox en un equipo aislado, no hay problema en descargar el VirtualBox Extension Pack desde la página oficial e instalarlo desde la línea de comandos o desde el propio VirtualBox. Pero el trabajo se multiplica cuando queremos hacer la instalación en un entorno educativo con muchas máquinas y usuarios. En este caso, se hace necesario buscar una solución que simplifique la tarea y de algún modo la automatice. 

Lo que yo hago es muy sencillo:
  1. Empaqueto el archivo VirtualBox Extension Pack en un paquete Debian al que he llamado virtualbox-extpack y le pongo como dependencia la versión de VirtualBox que le corresponde.
  2. Subo el paquete Debian a mi propio repositorio, creado con reprepro.
En las máquinas de mi centro está añadido mi repositorio particular, de manera que si quiero instalar el VirtualBox Extension Pack, tan sólo tengo que hacer un:
# apt-get install virtualbox-extpack
De este modo, cuando cree una nueva versión del paquete, la suba a mi repositorio y haga un apt-get upgrade, se actualizará a la versión más reciente.
Publicado por primera vez en http://enavas.blogspot.com.es

Instalar Virtualbox 5.0 en Debian Wheezy desde la línea de comandos

Aunque el procedimiento es el mismo que cuando instalamos VirtualBox 4.3, siempre hay a quien le surgen dudas. Así que veamos cómo instalar VirtualBox 5.0 en Debian Wheezy desde un terminal.
Para instalar VirtualBox en Debian Wheezy, lo más cómodo es hacerlo desde los repositorios oficiales. Así que, lo primero que tenéis que hacer es añadirlos a vuestra lista, si no los tenéis aún:
# echo "deb http://download.virtualbox.org/virtualbox/debian wheezy contrib non-free" > /etc/apt/sources.list.d/virtualbox.list
Una vez añadido el repositorio, descargamos la clave pública y la añadimos al anillo de claves:
# wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | apt-key add -
A continuación, actualizamos los índices de los repositorios:
# apt-get update
E instalamos el paquete VirtualBox:
# apt-get install virtualbox-5.0
Por último, descargamos el VirtualBox Extension Pack correspondiente a la versión que estamos instalando desde https://www.virtualbox.org/wiki/Downloads:
# wget http://download.virtualbox.org/virtualbox/5.0.6/Oracle_VM_VirtualBox_Extension_Pack-5.0.6-103037.vbox-extpack
Este paquete nos proporciona soporte para dispositivos USB 2.0, RDP y PXE para tarjetas de red intel. Cuando lo hayamos descargado, no tenemos más que instalarlo:
# VBoxManage extpack install http://download.virtualbox.org/virtualbox/5.0.6/Oracle_VM_VirtualBox_Extension_Pack-5.0.6-103037.vbox-extpack --replace
Si todo ha ido bien, veréis el progreso de la instalación:
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Successfully installed "Oracle VM VirtualBox Extension Pack".
Publicado por primera vez en http://enavas.blogspot.com.es

Instalar youtube-dl mediante pip

Como ya sabéis, youtube-dl es un script escrito en Python que nos va a permitir descargar vídeos de YouTube y otros sitios desde la línea de comandos.

En Debian Jessie podéis instalar youtube-dl desde los repositorios de Debian o una versión más actualizada desde Debian Backports porque se encuentra empaquetado. En cambio, en Debian Wheezy no podréis porque no se encuentra en los repositorios oficiales.

Ahora bien, tanto si usáis Debian Wheezy como si utilizáis Debian Jessie, si queréis disponer de la última versión de youtube-dl, lo mejor es que realicéis la instalación desde el repositorio de paquetes Python PyPi utilizando la herramienta pip.

Veamos cómo instalarlo:
Si en vuestro sistema tenéis instalado Python2, no tenéis más que ejecutar pip de la siguiente manera:
# pip install youtube-dl
Y si tenéis instalado Python3, no tenéis más que ejecutar pip3 de la siguiente manera:
# pip3 install youtube-dl
Cómo actualizarlo:
Si utilizáis Python2 y tenéis instalado youtube-dl, pero queréis actualizarlo, no tenéis más que indicárselo a pip de la siguiente manera:
# pip install --upgrade youtube-dl
Y si utilizáis Python3 y tenéis instalado youtube-dl, pero queréis actualizarlo, no tenéis más que ejecutar pip3 de la siguiente manera:
# pip3 install --upgrade youtube-dl
Y cómo desinstalarlo:
Si utilizáis Python2, tenéis instalado youtube-dl y queréis desinstalarlo, no tenéis más que indicárselo a pip de la siguiente manera:
# pip uninstall youtube-dl
Y si utilizáis Python3, tenéis instalado youtube-dl, pero queréis dseinstalarlo, no tenéis más que ejecutar pip3 de la siguiente manera:
# pip3 uninstall youtube-dl
Al tratar de desinstalar un paquete python nos pedirá confirmación antes de desinstalarlo.

Como habéis podido comprobar, es muy fácil instalar, desinstalar y actualizar paquetes python desde el repositorio PyPi.
Publicado por primera vez en http://enavas.blogspot.com.es

domingo, 4 de octubre de 2015

Acceso a https://rayuela.educarex.es: Esta conexión no está verificada

Si cuando tratáis de entrar en Rayuela (https://rayuela.educarex.es), el navegador os muestra un mensaje como el siguiente, es porque no habéis instalado el certificado subordinado de la FNMT AC Componentes Informáticos:


Podéis descargar el certificado directamente desde el enlace anterior o entrar en la página de la FNMT para descargarlo:


En el siguiente ejemplo podéis ver como al descargarlo con Firefox, el navegador os preguntará si queréis confiar en la Autoridad certificadora para diferentes fines:


Marcamos la casilla "Confiar en esta CA para identificar sitios web" y, a continuación, pulsamos el botón "Aceptar". 

En Google Chrome el procedimiento es similar.

Una vez instalado este certificado, al entrar en Rayuela el navegador no volverá a mostrar el mensaje de que la conexión no está verificada:



Publicado por primera vez en http://enavas.blogspot.com.es

pip: Una herramienta para instalar y gestionar paquetes Python

pip es un gestor de paquetes Python imprescindible para instalar paquetes Python que no se encuentran disponibles en Debian.

En Debian:
  • pip es el comando que tendremos que utilizar para instalar paquetes para Python 2.
  • pip3 es el comando que utilizaremos para instalar paquetes para Python 3.
Es posible instalar pip desde los repositorios de Debian instalando el paquete python-pip:
# apt-get install python-pip
Y si queréis instalar pip3, habrá que instalar el paquete python3-pip:
# apt-get install python3-pip
El ejecutable de pip, pip2 o pip3 se instalará en /usr/bin.

Ahora bien, si queréis disponer de la versión más reciente de pip, siempre podéis instalarlo de la siguiente manera:

Primero.- Descargáis el instalador desde https://bootstrap.pypa.io/get-pip.py:
# wget https://bootstrap.pypa.io/get-pip.py
Segundo.- Ejecutáis el instalador:
Para Python 2:
# python get-pip.py
Para Python 3:
# python3 get-pip.py
En el caso de que instaléis pip con el instalador get-pip.py, se instalará en /usr/local/bin
Publicado por primera vez en http://enavas.blogspot.com.es