Mejorar el rendimiento de la batería en Ubuntu

Entrada que se me antojaba sencilla mientras me recupero de destructivo fin de semana currando en el Pardiñas Rock, y que por problemas con máquinas virtuales, configuración de Windows y caídas constantes de la red (Carrefour Mobile, si llueve pierdes la mitad de la cobertura… menos mal que en Galicia llueve poco). ¿Cómo optimizar el rendimiento de la batería en Ubuntu Linux?

En fin, hace tiempo que tenía esto pendiente tras un debate con un Windolero que me decía que con el sistema de Mr. Gates la batería rinde más que con Linux. Realmente esto no es así, aunque si eres usuario de Ubuntu pueda paracerlo. El problema del rendimiento de la batería está en las derivaciones de Ubuntu (y no en todas, en Lubuntu, con LXDE, no he notado problemas de rendimiento, aunque tampoco he profundizado), no en todos los Linux, y no es complejo arreglarlo.

En todo caso, antes de meternos en configuraciones un consejo, válido además tanto para equipos Linux como para Windows: Si no usas el wifi ni el bluetooth no los tengas conectados, consumen muchísima batería.

Ahora vamos con cuestiones más técnicas: uno de los problemas de Ubuntu es que no diferencia entre si está instalado en un portátil o en equipo de sobremesa, lo cual hace que no haya un sistema de optimización de energía por defecto para este tipo de equipos. La solución no es compleja, y comienza por editar /etc/default/acpi-support y añadir al final ENABLE_LAPTOP_MODE=true y, tras esto, instalar laptop-mode-tools, ya sea desde el repositorio con un sudo apt-get install laptop-mode-tools o desde su página web. Luego en /etc/laptop-mode/conf.d/ puedes encontrar diversos archivos de configuración que tocar para lograr mejor rendimiento de la batería.

En Hotfixed recomiendan también instalar PowerTop, un software que te avisa de qué componentes están consumiendo más energía y cómo optimizarlos o desactivarlos. Con esto lograrás un menor consumo, aunque yo no lo he probado personalmente.

Añado por aquí que también he leído que existe un problema de rendimiento cuando el equipo tiene dos tarjetas gráficas: una NVIDIA y una integrada. Parece ser que el proceso Optimus, que tira de la NVIDIA sólo cuando hace falta toda la potencia gráfica y si no utiliza la integrada, en Linux no funciona, por lo que siempre recurre a la NVIDIA. ¿La solución? Parece que Bumblebee arregla esto, pero sólo para los casos de NVIDIA con Optimus. No he tenido oportunidad de comprobarlo, en este caso hablo de oídas.

En fin, con estos consejillos lograréis que vuestra batería en Ubuntu tenga la misma vida que con Windows, o incluso más.

Lubuntu 12.04 (faster than a bullet)

Faster than a bullet… así empieza el Painkiller de los Judas, y así se puede definir la versión de Ubuntu con escritorio LXDE. ¿Tienes un equipo viejo por casa que no es capaz de tirar con Windows Vista, 7 o con un Ubuntu normal? Dejarle un XP desactualizado, con todos sus agujerazos de seguridad por falta de actualizaciones, puede no ser una buena opción si pretendes navegar por internet con él. Cualquier experto en seguridad te lo dirá, el SO siempre actualizado a la última. ¿Quiere eso decir que hay que dejar el equipo morirse? No, Lubuntu te ofrece una alternativa ligera.

El sistema requiere como mínimo un Pentium II con 128 megas de RAM para arrancar. Con esta configuración debería ir un pelín justo, pero para lo básico ya furrula. Una curiosidad es que no incluye Firefox como navegador predeterminado, sino Chromium, por cuestiones de rendimiento (Firefox es más pesado). De hecho tampoco incluye Libre Office ni Open Office, sino una pequeña serie de programas ofimáticos más limitados pero con menor consumo. En todo caso, basta un apt-get install para hacerse con todo lo que queramos o, siendo más comodones, desde el gestor de aplicaciones.

Testeado sobre un máquina virtual de 1.5 GB de RAM primero, con instalación básica, y luego sobre una máquina física (1GB de RAM DDR2, Intel Centrino T2500 2GHZ) separando en 5 particiones (SWAP, /boot, /, /tmp y /home) el resultado es soprendentemente rápido.

A nivel de software dispondrás de todo el habido y por haber para Ubuntu, si bien ten en cuenta que si estás usando este sistema para tirar de máquina con pocos recursos, es posible que para cierto software andes justo en extremo (modificar una foto con GIMP 2.8 con 128 megas de RAM no se si es imposible pero harto complejo, seguro). En todo caso, si tu equipo tiene los mínimos para mover Ubuntu (que iría pelín lento y pesado en él), con Lubuntu lograrás que vaya como un tiro. Desde su gestor de aplicaciones, además, podrás instalar cómodamente todo el software libre que quieras. Y sobre seguridad, no te comes mucho la cabeza, todas las derivaciones de Ubuntu 12.04 son LTS (es decir, 5 años de actualizaciones de seguridad, tienes SO hasta abril de 2017 actualizado).

 

Lubuntu es una forma de revivir un viejo ordenador teniéndolo totalmente actualizado, o de mejorar tu rendimiento en un equipo que vaya justito. Realmente lo único es que tiene un entorno más feo que un Ubuntu normal, pero a nivel funcional igual hasta un usuario que venga de Windows se adapta mejor a LXDE que a Unity. En este vídeo puedes ver lo bien que furrula, y en este enlace descargarlo.

¿Qué tamaño doy a la partición boot?

Si ayer os hablaba de qué tamaño dar a la partición SWAP durante la instalación de Linux, hoy vamos con otra partición: La boot. En el caso de /boot no es obligatorio definirla, pero si la ubicas en una partición primaria al principio (después de la partición SWAP, que se recomienda que sea la primera) y le pones como sistema de archivos ext2 (más ligero que ext3 o ext4, que son los que habitualmente utilizaremos para el resto) lograrás una mayor velocidad de arranque. Que es posible que con ordenador muy potente no notes ninguna diferencia. En /boot se almacena el núcleo del sistema operativo y el sistema de arranque, así que no requiere mucho espacio.

Esto en caso de sistemas domésticos, porque cuando se trata de servidores con múltiples discos intercambiables o sistemas raid sí que puede volverse totalmente obligatorio tener el boot separado.

En todo caso ¿Qué tamaño le damos a /boot? Pues va dependiendo de la distribución de Linux y de si tenemos pensado tener varios kernels (ya sabéis que hay gente con el vicio de recompilarlo), pero en principio vamos a suponer un uso normal de usuario doméstico.

Todo esto lo comento basándome en lo leído en documentación y foros varios, y en alguna prueba doméstica con máquinas virtuales: para Ubuntu desde 10.10 hasta 11.10 dicen que 150 megas van sobrados, pero que para 12.04 mejor 250 . Para Debian 6 leo que se recomiendan 200. Para Fedora dicen que hasta  350, para ArchLinux leo que entre 100 y 150… Si tenéis un disco duro amplio lo mejor es no racanear y con 350 te aseguras no tener ningún problema de falta de espacio. La clave, como comentaba antes, está más en el sistema de archivos (ext2) y en ubicarla justo tras la SWAP.

¿Qué tamaño le asigno a la partición SWAP en Linux?

Si decides realizar una instalación manual en Linux ya sabes que necesitas al menos dos particiones: una para / y otra para el espacio de intercambio (SWAP). Aunque yo suelo hacer 4 particiones (/, swap, /boot y /home) para máquinas virtuales, y hasta 5 si el equipo va a usarse para editar vídeo, audio o trabajar con bases de datos muy grandes (ahí meto además separada /tmp); y tengo colegas que rara vez bajan de 7… (yo eso ya diría que es vicio). En todo caso suele surgir una duda ¿Qué espacio le asigno a SWAP durante la instalación?

Tradicionalmenet se decía «el doble de SWAP que lo que tengas de RAM«, pero es una teoría de los primeros tiempos de Linux, cuando los equipos andaban faltos de memoria. A día de hoy, tener 12 gigas de SWAP es una verdadera animalada, además de un desperdicio de recursos. Lo que sí se recomienda en varias páginas es que SWAP sea la primera partición del disco, por motivos de rendimiento.

Por lo que recomienda el señor Russell Coker la regla a seguir es la siguiente:

  • Si tienes hasta 1GB de RAM: El clásico «doble de SWAP que de RAM«
  • Si tienes entre 2GB y 4GB de RAM: Nueva teoría «La mitad de SWAP que de RAM«
  • Si tienes más de 4GB: Con 2 GB de SWAP vas que chutas.

Es más, si te fijas, todas las cuentas dan un máximo de 2GB de RAM. En fin, espero que esta minientrada te sea útil.

Instalación de OpenERP en Ubunto o Debian

OpenERP es una de las soluciones empresariales más populares dentro del software libre. Con una enorme escalabilidad, nos permite modificarlo para crear módulos específicos para las necesidades de una empresa determinada. Utiliza PostgreSQL como SGBD y está programado en Python, por lo que el conocimiento de este lenguaje será clave para la realización de módulos, aunque si ya has trabajado con C, Java o C# la sorpresa será mínima, incluso para programadores PHP (programadores, no diseñadores gráficos que hacen webs a base de Dreamweaver y módulos prefabricados). Pero el desarrollo de módulos puede que lo toquemos más adelante, hoy vamos con la instalación del servidor web de OpenERP 6.0 sobre Ubuntu o sobre Debian. Mayormente es una traducción de este artículo en inglés… bueno, una adaptación explicada con mis palabras.

Vamos al principio, first step, preparar el equipo para toda la instalación: instalar un servidor, crear el usuario, instalar Postgres… Ya sabes, por partes te lo pongo en el siguiente ejemplo:

#Preparar el servidor
apt-get install openssh-server denyhosts
apt-get update
apt-get dist-upgrade

#Crear el usuario
adduser –system –home=/opt/openerp –group openerp passwd openerp

#Instalamos PostgreSQL, creamos la base de datos y el usuario
apt-get install postgresql
su – postgres
createuser –createdb –username postgres –no-createrole –pwprompt openerp
exit

#Instalamos los paquetes y librerías de Python, que falta nos van a hacer (tochazo del 15)

apt-get install python python-psycopg2 python-reportlab python-egenix-mxdatetime python-tz python-pychart python-mako python-pydot python-lxml python-vobject python-yaml python-dateutil python-pychart python-pydot python-webdav

apt-get install python-cherrypy3 python-formencode python-pybabel python-simplejson python-pyparsing

Ahí estamos, todo el equipo listo para instalar OpenERP. La cuestión es descargar el server y el cliente web, descomprimir todo, dar permisos… En el ejemplo lo tenéis todo:


#Descargamos ambos paquetes
wget http://www.openerp.com/download/stable/source/openerp-server-6.0.3.tar.gz
wget http://www.openerp.com/download/stable/source/openerp-web-6.0.3.tar.gz

#Descomprimir, cambiar permisos... etc:
cd /opt/openerp
tar xvf ~/openerp-server-6.0.3.tar.gz
tar xvf ~/openerp-web-6.0.3.tar.gz
chown -R openerp: *
cp -a openerp-server-6.0.3 server
cp -a openerp-web-6.0.3 web

Ahora toca tocar el archivo de configuración del servidor, cambiando el password de la base de datos. En la carpeta /etc/ le metéis mano a openerp-server.conf con el editor Nano. Busca la línea db_password y allí añade la contraseña buena.

Tras esto, toca cambiar al propietario:

sudo chown openerp:root /etc/openerp-server.conf
sudo chmod 640 /etc/openerp-server.conf

Ahora toca crear, o modificar, el script para que arranque con el sistema, modificando /etc/initd.d/openerp-server, tal que así:

#!/bin/sh

### BEGIN INIT INFO
# Provides:             openerp-server
# Required-Start:       $remote_fs $syslog
# Required-Stop:        $remote_fs $syslog
# Should-Start:         $network
# Should-Stop:          $network
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Enterprise Resource Management software
# Description:          Open ERP is a complete ERP and CRM software.
### END INIT INFO

PATH=/bin:/sbin:/usr/bin
DAEMON=/opt/openerp/server/bin/openerp-server.py
NAME=openerp-server
DESC=openerp-server

# Specify the user name (Default: openerp).
USER=openerp

# Specify an alternate config file (Default: /etc/openerp-server.conf).
CONFIGFILE="/etc/openerp-server.conf"

# pidfile
PIDFILE=/var/run/$NAME.pid

# Additional options that are passed to the Daemon.
DAEMON_OPTS="-c $CONFIGFILE"

[ -x $DAEMON ] || exit 0
[ -f $CONFIGFILE ] || exit 0

checkpid() {
    [ -f $PIDFILE ] || return 1
    pid=`cat $PIDFILE`
    [ -d /proc/$pid ] && return 0
    return 1
}

case "${1}" in
        start)
                echo -n "Starting ${DESC}: "

                start-stop-daemon --start --quiet --pidfile ${PIDFILE} \
                        --chuid ${USER} --background --make-pidfile \
                        --exec ${DAEMON} -- ${DAEMON_OPTS}

                echo "${NAME}."
                ;;

        stop)
                echo -n "Stopping ${DESC}: "

                start-stop-daemon --stop --quiet --pidfile ${PIDFILE} \
                        --oknodo

                echo "${NAME}."
                ;;

        restart|force-reload)
                echo -n "Restarting ${DESC}: "

                start-stop-daemon --stop --quiet --pidfile ${PIDFILE} \
                        --oknodo

                sleep 1

                start-stop-daemon --start --quiet --pidfile ${PIDFILE} \
                        --chuid ${USER} --background --make-pidfile \
                        --exec ${DAEMON} -- ${DAEMON_OPTS}

                echo "${NAME}."
                ;;

        *)
                N=/etc/init.d/${NAME}
                echo "Usage: ${NAME} {start|stop|restart|force-reload}" >&2
                exit 1
                ;;
esac

exit 0

Tras eso cambiamos los permisos a root:

chmod 755 /etc/init.d/openerp-server
chown root: /etc/init.d/openerp-server

#Con el directorio de logs hay que hacer lo mismo
mkdir /var/log/openerp
chown openerp:root /var/log/openerp

#Y finalmente añadimos el servicio para que se inicie con el sistema:
update-rc.d openerp-server defaults

Ahora podéis probar a arrancar y ver si todo furrula: sudo /etc/init.d/openerp-server start y si la cosa va bien, en el puerto 8080 debería haber una página de prueba.

Pero claro, ahora toca el cliente web. El proceso es similar, tenéis que meterle mano a cd /etc/openerp-web.conf.

server.environment = "development"

# Some server parameters that you may want to tweak
server.socket_host = "0.0.0.0"
server.socket_port = 8080

# Sets the number of threads the server uses
server.thread_pool = 10

tools.sessions.on = True
tools.sessions.persistent = False

# Simple code profiling
server.profile_on = False
server.profile_dir = "profile"

# if this is part of a larger site, you can set the path
# to the TurboGears instance here
#server.webpath = ""

# Set to True if you are deploying your App behind a proxy
# e.g. Apache using mod_proxy
#tools.proxy.on = True

# If your proxy does not add the X-Forwarded-Host header, set
# the following to the *public* host url.
#tools.proxy.base = 'http://mydomain.com'

# logging
#log.access_file = "/var/log/openerp-web/access.log"
log.error_file = "/var/log/openerp/openerp-web-error.log"
log.access_level = "INFO"
log.error_level = "INFO"

# Set to false to disable CSRF checks
tools.csrf.on = True

# replace builtin traceback tools by cgitb
tools.log_tracebacks.on: False
tools.cgitb.on: True
# a default install can probably avoid logging those via cgitb as they're
# available in the server log
tools.cgitb.ignore=(
    openobject.errors.Concurrency,
    openobject.errors.TinyException)

# OpenERP Server
openerp.server.host = 'localhost'
openerp.server.port = '8070'
openerp.server.protocol = 'socket'
openerp.server.timeout = 450

# Web client settings
[openerp-web]
# filter dblists based on url pattern?
# NONE: No Filter
# EXACT: Exact Hostname
# UNDERSCORE: Hostname_
# BOTH: Exact Hostname or Hostname_

dblist.filter = 'NONE'

# whether to show Databases button on Login screen or not
dbbutton.visible = True

# will be applied on company logo
company.url = ''

Tras esto, de nuevo toca cambiar propietarios:

chown openerp:root /etc/openerp-web.conf
chmod 640 /etc/openerp-web.conf

Tras esto tocará automatizar el cliente web también, tocando /etc/init.d/nano openerp-web y dejando la cosa tal como en el ejemplo:

#!/bin/sh

### BEGIN INIT INFO
# Provides:             openerp-web
# Required-Start:       $remote_fs $syslog
# Required-Stop:        $remote_fs $syslog
# Should-Start:         $network
# Should-Stop:          $network
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    OpenERP Web - the Web Client of the OpenERP
# Description:          Open ERP is a complete ERP and CRM software.
### END INIT INFO

PATH="/sbin:/bin:/usr/sbin:/usr/bin"
DAEMON="/opt/openerp/web/openerp-web.py"
NAME="openerp-web"
DESC="openerp-web"

# Specify the user name (Default: openerp).
USER=openerp

# Specify an alternate config file (Default: /etc/openerp-web.conf).
CONFIGFILE="/etc/openerp-web.conf"

# pidfile
PIDFILE=/var/run/$NAME.pid

# Additional options that are passed to the Daemon.
DAEMON_OPTS="-c $CONFIGFILE"

[ -x $DAEMON ] || exit 0
[ -f $CONFIGFILE ] || exit 0

checkpid() {
    [ -f $PIDFILE ] || return 1
    pid=`cat $PIDFILE`
    [ -d /proc/$pid ] && return 0
    return 1
}

case "${1}" in
        start)
                echo -n "Starting ${DESC}: "

                start-stop-daemon --start --quiet --pidfile ${PIDFILE} \
                        --chuid ${USER} --background --make-pidfile \
                        --exec ${DAEMON} -- ${DAEMON_OPTS}

                echo "${NAME}."
                ;;

        stop)
                echo -n "Stopping ${DESC}: "

                start-stop-daemon --stop --quiet --pidfile ${PIDFILE} \
                        --oknodo

                echo "${NAME}."
                ;;

        restart|force-reload)
                echo -n "Restarting ${DESC}: "

                start-stop-daemon --stop --quiet --pidfile ${PIDFILE} \
                        --oknodo

                sleep 1

                start-stop-daemon --start --quiet --pidfile ${PIDFILE} \
                        --chuid ${USER} --background --make-pidfile \
                        --exec ${DAEMON} -- ${DAEMON_OPTS}

                echo "${NAME}."
                ;;

        *)
                N=/etc/init.d/${NAME}
                echo "Usage: ${NAME} {start|stop|restart|force-reload}" >&2
                exit 1
                ;;
esac

exit 0

En fin, de nuevo sólo nos queda cambiar los permisos de propietario e incluir el script en el inicio, para que todo vaya como la seda:

chmod 755 /etc/init.d/openerp-web
chown root: /etc/init.d/openerp-web

update-rc.d openerp-web defaults

Y con todo esto, el servidor y el cliente web ya están listos para trastear con OpenERP en vuestro equipo.

Instalar Ubuntu 12.04 Precise Pangolin en Virtual Box

Si eres usuario de Virtual Box y has intentado instalar la versión i386 de Ubuntu 12.04 (o en mi caso Kubuntu) en una máquina virtual te habrás encontrado con que «El kernel necesita algunas características que no están presentes en el CPU: pae…» ¿cómo solucionar esto? (tranquilo no va a ser una entrada larga):

En la versión de 32 bits de Ubuntu 12.04 se usa por defecto el Kernel PAE, por eso te está puteando la máquina vritual, porque en Virtual Box viene deshabilitado en principio. Ya puedes respirar tranquilo, se soluciona, y sin ningún problema: Te vas a la configuración de la máquina virtual, al apartado Sistema. Allí seleccionas la pestaña Procesador y en ella buscas el checkbox llamado Características Extendidas y marcas Habilitar PAE/NX.

Sólo con esto ya debería funcionar, así que ahora disfruta de tus pruebas con Linux, trasteando con máquinas virtuales.

Instalar PostgreSQL en Ubuntu / Debian / Linux Mint

PostgreSQL mola por muchos motivos: es libre (licencia BSD), es estable, puede usarse en aplicaciones comerciales, es muy escalable y tiene un elefante como logo (y todo el mundo que no es Borbón ama a los elefantes).

La instalación de PostgreSQL en tu linux (ya sea Debian, Ubuntu o Mint) es sencillita. Empezaré con Ubuntu/Mint, y tras esto, Debian.

Empezamos con el clásico:

sudo apt-get install postgresql  libpq-dev

En Debian la cosa sería prácticamente igual pero con aptitude en lugar de apt-get.

Luego toca lanzar una instancia del servidor de bases de datos y cambiar la

su -n postgres

psql -d postgres -U 

##ahora estaréis en la una instancia de Postgres, ya.
postgres=#
postgres=# alter user postgres with password 'El que toque' 
postgres=# q

Obviamente en vez de ‘El que toque» ponéis un password decente, uno que creáis seguro (nunca menos de 12 dígitos, con letras, número y símbolos)

Y tras esto sólo os queda instalar el entorno gráfico del servidor de la base de datos. Para esto basta un simple:

sudo apt-get install pgadmin3

PostgresAdmin es un cómodo y liviano entorno gráfico que os facilitará mucho la vida.

Ok ¿y en Debian? Similar y sencillito. Ya no explico los pasos, porque son los mismos, lo meto todo en un mismo bloque de texto:

aptitude install postgresql

##Cambiamos la contraseña

su postgres

psql

alter user postgres with password 'nuevopassword';

##Instalamos PostgresAdmin

aptitude install pgadmin3

Ya lo ves, clavadico en Debian.

En fin, es tarde y mañana tengo un examen de certificación de Oracle así que os dejo con esto. Estos días estoy menos activo porque he estado chapando para estas cosas y administrando y gestionando la página de WP del festival Pardiñas Rock.

Instalar ICECAST2 en Ubuntu o Debian

¿Quieres instalar un servidor de radio en tu Ubuntu o Debian? Icecast2 es una buena solución para esto, un servidor de streaming libre, para linux, con soporte para .ogg y .mp3. Irá todo hecho por línea de comandos, porque si quieres montar un servidor de verdad lo más probable es que uses una distribución sin entorno gráfico.

El servidor icecast requiere de un cliente que le provea los contenidos, que pueden ser archivos ubicados en una carpeta en el PC, un reproductor de CD, un micrófono conectado a la tarjeta de sonido. En este ejemplo utilizaremos Ices2.

El primer paso será instalar icecast con el siguiente comando:

sudo apt-get install icecast2 ices2 vorbis-tools

Una vez instalado el servidor seguimos con la configuración del mismo. Empieza por editar el xml con la configuración:

sudo gedit /etc/icecast2/icecast.xml

Dentro te tocará definir los password para las fuentes y del administrador, así como el nombre del servidor. Busca la siguiente sección y rellena entre las etiquetas con los datos que correspondan:

<authentication>
<!-- Sources log in with username 'source' -->
<source-password>PASSWORD_FUENTE</source-password>
<!-- Relays log in username 'relay' -->
<relay-password>PASSWORD_RELAY</relay-password>

<!-- Admin logs in with the username given below -->
<admin-user>ADMINISTRADOR</admin-user>
   <admin-password>PASSWORD_ADMINISTRADOR</admin-password>
</authentication>

Y tras poner esto tal cual busca la siguiente línea para indicar el nombre del servidor que vamos a utilizar. Si emitimos desde nuestro equipo en local ponemos localhost

<!-- This is the hostname other people will use to connect to your server.
It affects mainly the urls generated by Icecast for playlists and yp
listings. -->
<hostname>www.miservidor.com</hostname>

También puedes modificar el listen socket para elegir el puerto, pero si va a ser desde tu equipo local deja por defecto el 8000

Ahora te toca habilitar el servicio, que por defecto viene deshabilitado para obligarte a cambiar la contraseña y el administrador.

sudo gedit /etc/default/icecast2

Ahí encontrarás esta línea, donde el valor estará a false y debes dejarlo a true como en el ejemplo:

# Edit /etc/icecast2/icecast.xml and change at least the passwords.
 # Change this to true when done to enable the init.d script
 ENABLE=true

Una vez habilitado, lo único que nos queda es activarlo:

sudo /etc/init.d/icecast2 start

La parte jodida llega ahora, ya que Ices2 no viene con archivos de configuración por defecto. En /usr/share/doc/ices2/examples se encuentran ejemplos para configuraciones de alsa, ogg y playlist. Como lo más habitual es utilizar esta última (usamos un playlist con música y con los programas previamente grabados), creamos una carpeta en etc llamada ices y copiamos el archivo allí. De paso, ya creamos la carpeta para el archivo log de ices y le damos permisos

sudo mkdir /etc/ices2
sudo cp /usr/share/doc/ices2/examples/ices-playlist.xml /etc/ices2/
sudo chmod +x /etc/ices2/ices-playlist.xml
sudo mkdir /var/log/ices
sudo chmod 777 /var/log/ices

Ahora toca modificar el xml:

sudo gedit /etc/ices2/ices-playlist.xml

Ahora os explico todo del tirón y luego ya os pongo debajo el documento completo para que veáis el ejemplo. Lo primero es en background cambiar el 0 por un 1, para así ejecutar en segundo plano el cliente y no tener el terminal abierto todo el tiempo. En la sección metadata configuramos el nombre, género y descripción de la estación de radio. En la sección input establecemos la ruta del archivo con la lista de reproducción (parámetro file), si queremos que la reproducción sea aleatoria (parámetro random, siendo 1 que sí y 0 que no) y si queremos que al acabar se corte la emisión o que se siga emitiendo en bucle (parámetro once). Finalmente en la sección instance configuramos el servidor, puerto, la contraseña de las fuentes (usa los mismos que pusiste antes al configurar el servidor) y el punto de montaje (pon algún nombre que sea descriptivo, sin espacios y acabado en .ogg

<?xml version="1.0"?>
<ices>
    <!-- run in background -->
    <background>1</background>
    <!-- where logs, etc go. -->
    <logpath>/var/log/ices</logpath>
    <logfile>ices.log</logfile>
    <!-- 1=error,2=warn,3=info,4=debug -->
    <loglevel>4</loglevel>
    <!-- set this to 1 to log to the console instead of to the file above -->
    <consolelog>0</consolelog>

    <!-- optional filename to write process id to -->
    <!-- <pidfile>/home/ices/ices.pid</pidfile> -->

    <stream>
        <!-- metadata used for stream listing (not currently used) -->
        <metadata>
            <name>Donnie Rock Radio</name>
            <genre>Rock'n'fuckin'roll</genre>
            <description>Lemmy en la cabeza y el corazón</description>
        </metadata>

        <!-- input module

            The module used here is the playlist module - it has 
            'submodules' for different types of playlist. There are
            two currently implemented, 'basic', which is a simple
            file-based playlist, and 'script' which invokes a command
            to returns a filename to start playing. -->

        <input>
            <module>playlist</module>
            <param name="type">basic</param>
            <param name="file">/home/donato/musicaradio/playlist.txt</param>
            <!-- random play -->
            <param name="random">0</param>
            <!-- if the playlist get updated that start at the beginning -->
            <param name="restart-after-reread">0</param>
            <!-- if set to 1 , plays once through, then exits. -->
            <param name="once">1</param>
        </input>

        <!-- Stream instance
            You may have one or more instances here. This allows you to 
            send the same input data to one or more servers (or to different
            mountpoints on the same server). Each of them can have different
            parameters. This is primarily useful for a) relaying to multiple
            independent servers, and b) encoding/reencoding to multiple
            bitrates.
            If one instance fails (for example, the associated server goes
            down, etc), the others will continue to function correctly.
            This example defines two instances as two mountpoints on the
            same server.  -->
        <instance>
            <!-- Server details:
                You define hostname and port for the server here, along with
                the source password and mountpoint.  -->
            <hostname>localhost</hostname>
            <port>8000</port>
            <password>XYZw3c676</password>
            <mount>/lista_programa.ogg</mount>

            <!-- Reconnect parameters:
                When something goes wrong (e.g. the server crashes, or the
                network drops) and ices disconnects from the server, these
                control how often it tries to reconnect, and how many times
                it tries to reconnect. Delay is in seconds.
                If you set reconnectattempts to -1, it will continue 
                indefinately. Suggest setting reconnectdelay to a large value
                if you do this.
            -->
            <reconnectdelay>2</reconnectdelay>
            <reconnectattempts>5</reconnectattempts> 

            <!-- maxqueuelength:
                This describes how long the internal data queues may be. This
                basically lets you control how much data gets buffered before
                ices decides it can't send to the server fast enough, and 
                either shuts down or flushes the queue (dropping the data)
                and continues. 
                For advanced users only.
            -->
            <maxqueuelength>80</maxqueuelength>

            <!-- Live encoding/reencoding:
                Currrently, the parameters given here for encoding MUST
                match the input data for channels and sample rate. That 
                restriction will be relaxed in the future.
            -->
            <encode>  
                <nominal-bitrate>64000</nominal-bitrate> <!-- bps. e.g. 64000 for 64 kbps -->
                <samplerate>44100</samplerate>
                <channels>2</channels>
            </encode>
        </instance>

    </stream>
</ices>

Ahí tenéis el ejemplo completo.

En fin, ya estamos acabando. Nos falta configurar el archivo de canciones a reproducir, siguiendo una de estas dos opciones:

##Opción 1: Crear una ruta hacia el archivo con la lista de canciones con el siguiente comando
sudo find /Ruta_Archivo -iname "*.ogg" > /Ruta_Archivo/LISTA.TXT

##Opción 2: Editamos el archivo y tecleamos la ruta completa para cada canción
sudo gedit /Ruta_Archivo/LISTA.TXT

##Y las vas agregando con esta este formato:
##/Ruta_Archivo/cancion1.ogg
##/Ruta_Archivo/cancion2.ogg

Ahora simplemente tienes que lanzar ices2:

sudo ices2 /etc/ices2/ices-playlist.xml &

Tras todo esto si vamos a http://localhost:8000 encontraremos un link al punto de montaje y, al picar en él podremos escuchar nuestro servidor de radio.

El servicio se para como cualquier otro servicio, con un sudo /etc/init.d/icecast2 stop mientras que para parar el cliente ices deberás buscar el pid del proceso y matarlo.

Si en lugar de un playlist lo que queréis es emitir radio en directo La cosa no cambia mucho. Lo primero que necesitáis, claro está, es tener una tarjeta de sonido que os deje enchufar un micrófono. Aunque si queréis algo más profesional lo mejor es meter una mesa de mezclas para poder alternar entre música (desde otro dispositivo reproductor conectado a la mesa) y el micro. La gran diferencia es que en lugar del xml de configuración playlist de ices2 debes copiar y editar el alsa. Con lo cual la cosa quedaría más o menos así:

sudo cp /usr/share/doc/ices2/examples/ices-alsa.xml /etc/ices2/
sudo gedit /etc/ices2/ices-alsa.xml

Mayormente la configuración es casi igual que la del playlist, pero obviamente sin la ruta a la lista de canciones, que en este caso no existe.

También cambia la instrucción para lanzar el ices, que ahora será sudo ices2 /etc/ices2/ices-alsa.xml & así que tenlo en cuenta a la hora de ejecutarlo.

La emisión en vivo es más coñazo, pero por otra parte te da las ventajas de emitir en directo en lugar de hacerlo con canciones o programas ya pregrabados.

En fin, ahora sólo os queda buscar un alojamiento en Islandia o Rusia desde el que poder emitir sin preocuparos de la persecución de la SGAE.

Crear nuestra propia VPN en Ubuntu

Ya hace unos días hablamos de cómo configurar una IP estática en Ubuntu (y MacOS de regalo). Esto, como ya comenté en el artículo en cuestión, es necesario para ciertos servicios, como el que hoy nos atañe: Crear nuestra propia VPN en Ubuntu. Además, el puerto PPTP (1723 TCP) debe estar abierto. Como también necesitamos tener abierto otro puerto que soporte el protocolo GRE, lo mejor es usar la regla para PPTP del router. Manualmente no podemos realizar esta operación, pero las reglas predefinidas sí la realizan.

Una vez con la configuración previa lista, tocará irse al terminal para descargar e instalar el paquete PPTP, con permisos de administrador como para toda instalación. Tal que así:

sudo apt-get install pptpd

Como ya sabéis sudo nos permite realizar una instrucción con permisos de administrador (la primera vez que lo usas en el terminal te pedirá la contraseña). Cuando comience la instalación también os preguntará si queréis instalar el paquete bcrelay, pulsad la S para confirmar y vía.

Cuando termine la instalación, se lanzará de forma automática el servidor PPTP. Ahora toca meter mano en la configuración, con el editor de texto Nano.

sudo nano /etc/pptpd.conf

Al final de todo tenéis que añadir las líneas localip seguida de la ip que queráis tener como servidor local en la VPN (ojo, poned una que esté fuera del rango de IP locales, para evitar conflictos) y remoteip seguido del rango de direcciones que usaremos para asignar a los clientes, podéis poner un rango o varias separadas por comas. Aquí un ejemplo:

localip 10.11.0.1
remoteip 10.11.0.100-150,10.10.10.245

Ya tenéis un ejemplo con ambas opciones. Tras esto tocará añadir usuarios a nuestra VPN, configurando el archivo chap-secrets.

sudo nano /etc/ppp/chap-secrets

El formato es el siguiente, con los elementos separados por tabulaciones: nombre_usuario pptpd password *. El primero es el nombre de usuario (ponéis el que queráis darle a ese usuario en la red), lo siguiente el nombre del servidor (en este caso pptpd), la contraseña (poned algo seguro, no abc123) y la ip (un *, que ya nos ocuparemos de eso después).

En fin, tras esto, y como ya he dicho, toca ocuparse de las ip, concretamente configurando el cortafuegos. Como en todo lo primero es que nuestro amigo «el nano» nos abra el archivo rc.local:

sudo nano rc.local

En este caso vamos a la penúltima línea (justo antes de exit 0) del script y añadimos:

iptables -t nat -A POSTROUTING -s 10.11.0.0/24 -o eth0 -j MASQUERADE

El argumento 10.11.0.0/24 es el rango de direcciones que elegimos cuando estábamos configurando PPTPD, si pusiste otro configúralo en consecuencia. El argumento eth0 es el nombre de la tarjeta de red, asegúrate de poner la tuya. Guarda cambios y sigue porque ahora tocará editar otro archivo, el del ip forwarding:

sudo nano /etc/sysctl.conf

Ahí busca la línea comentada #net.ipv4.ip_forward=1 y quítale el # para descomentarla. Guarda cambios y sal.

Y con todo esto nuestro servidor de VPN en Ubuntu está configurado. Ahora sólo te queda configurar los clientes y ya tienes tu propia VPN creada, para poder comunicarte con seguridad con sus miembros, de forma que vuestros datos no estén expuestos a espionajes varios (eso sí, recuerda que toda seguridad no vale de nada si la contraseña de alguno de los usuarios es revelada, la seguridad perfecta no existe, ni existirá mientras haya un factor humano)

Configurando una IP estática en Ubuntu

Aunque pueda parecer un anacronismo a algunos usuarios menos veteranos, configurar una ip estática no es algo de los años 90. Para configurar cualquier servidor (VPN, servidor de aplicaciones, sistema de intercambio de archivos) necesitaremos que la ip sea estática para dirigir hacia ella los puertos del router.

Voy a explicar como podéis hacerlo por medio del entorno gráfico. Lo primero es que busquéis Configuración del sistema y allí a Red, que está dentro de la sección hardware. Configuración del sistema está, por defecto, en el panel de inicio de Unity, a la izquierda.

Ya en la ventana de red selecciona la tarjeta a configurar y pulsa Opciones. Ahí vete a la pestaña Ajustes de IPV4. En Nombre de conexión pon lo que creas oportuno para no liarte. Método es lo más importante, por defecto debería estar DHCP así que cámbialo por Manual.

Ahora toca configurar la Dirección pulsado el botón Añadir. Ahí te toca elegir la ip que quieres, la máscara de subred y la puerta de enlace predeterminada. Daré por hecho que si quieres configurar una ip estática tienes estos conceptos básicos sobre redes claros, pero si tenéis dudas ponedlo en un comentario y me curro una entrada sobre esos conceptos.

Finalmente, nos queda elegir el servidor DNS. La práctica habitual es elegir al menos 2, por si uno se cae. Introduce las diferentes direcciones ip separadas por comas. Si quieres, aquí tienes un listado con algunos.

Ok, has ido siguiendo los pasos y ya tienes configurada tu ip estática. Pero como todo en Linux, requiere reiniciar el servicio. Al pulsar Guardar al terminar la configuración volverás a la ventana de Red. Ahí fíjate en un botón tipo interruptor que tienes en la parte superior derecha. Púlsalo una vez para desmontar la conexión y otra para reconectar. Si todo ha ido bien aparecerán los datos de conexión que has configurado antes.

Con todo esto tienes tu ip estática configurada en Ubuntu. Si eres usuario de Apple (además de darte mis condolencias y de decirte que te pases a Linux cuanto ants) te puedo comentar que los pasos para esto son los mismos para configurar una ip estática en un Mac, en lugar de Configuración del sistema, creo que el primer menú es Preferencias, luego allí vas a Red, luego a Ethernet, Avanzado y Configurar IPv4. Luego sigues los mismos pasos (ponerlo en Manual, configurar la dirección y elegir los DNS)

En fin, esto servirá de base para algunos artículos futuros.