¿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.

Miniordenadores ¿qué opciones hay?

Todavía no he probado ninguno de estos miniordenadores, pero tras el susto que me llevé con el portátil hace unos días he estado pensando en hacerme con uno. A fin de cuentas, para lo más básico (consultar el correo electrónico, picar código) permiten ir tirando.

De momento los procesadores ARM se están llevando la palma en estos dispositivos, generalmente con SO Android o Linux. Aunque Intel ha anunciado la idea de sacar un modelo con arquitectura x86 bajo el nombre de NUC, pero en principio parece que este diseño iba destinado sólo a sistemas embebidos.

El proyecto inglés Raspberry Pi ha recibido muchos aplausos en los últimos timpos. Se trata de un proyecto orientado al campo educativo, pretendiendo ofrecer un sistema funcional a muy bajo coste orientado a la enseñanza de la programación a jóvenes estudiantes. Con 256 MB compartidos entre la RAM y la GPU, un CPU ARM mononúcleo a 700 MHz, salida vídeo HDMI y RCA y almacenamiento en tarjeta SD, se comercializan dos versiones: una de 25$ con un solo puerto USB y sin conexión a la red, y otro a 35$ con conexión 10/100 Ethernet RJ-45 y dos puertos USB (2.0). Aunque la idea de la fundación es que funcione con RISC-OS, existe soporte de Arch Linux, Debian o Fedora.

Como no, cuando se trata de producto barato los chinos tienen que sacar la cabeza. Los Allwiner 10 MK802, con aspecto de un usb grande (en esto ganan al Raspberry Pi por goleada), son equipos pensados originalmente para operar con Android (soportan la versión 4.0) aunque no deberían dar problemas con las versiones de Linux para procesadores ARM. Con un precio alrededor de los 74$, son bastante más potentes que el Pi: procesador mononúcleo de 1.5 GHz, 512 megas de RAM, GPU Mali 400, un puerto USB 2.0, un mini USB y una ranura para MicroSD. La salida de vídeo es HDMI e incluye receptor wifi interno.

La taiwanesa VIA Technologies también ha sacado una placa estilo Raspberry Pi por 49$. Montra un procesador ARM de 800 MHz, 512 megas de RAM DDR3, 2 gigas de memoria flash interna ampliable mediante tarjetas micro SD, salida de video VGA y HDMI, entrada y salida de audio por jack de 3.5», cuatro USB 2.0, Ethernet LAN RJ-45… En principio viene con Android 2.3 y lo que no está claro es cómo será de abierto el sistema, si permitirá actualizar el Android libremente o habrá que esperar a que lo haga el fabricante, o si se podrán instalar versiones de Linux para ARM.

Finalmente la TXI Cotton Candy presenta un precio más caro (alrededor de los 199$) acompañado de un diseño atractivo, similar a un pen USB de 8 centímetros, con un conector USB macho que permite conectarlo a televisores, monitores o equipos que tengan puerto USB sin necesidad de cable HDMI. En todo casi también incorpora salida de vídeo HDMI para dispositivos sin USB, puerto micro USB, posiblidad de ampliar la memoria interna con tarjeta MicroSD hasta 64 gigas, 1 giga de RAM, GPU Mali-400 y procesador ARM de 1,2 GHz. Además permite conectividad wifi y bluetooth. Trabaja con SO Android y Ubuntu, e incluye un cliente de vitualización para Windows, MacOS y Linux.

¿Utilidad? Son equipos baratos y muy portátiles. Para mucha gente que sólo necesita el ordenador para surfear por la web pueden ser sobradamente potentes, y para otra pueden funcionar como un equipo de repuesto.

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)

Entorno gráfico en FreeBSD

A nivel usuario los sistemas libres BSD, desarrollados por la universidad de Berkeley, no son muy populares. No es así a nivel de servidores, donde han ganado popularidad en los últimos tiempos, ya que varios especialistas afirman que son los sistemas menos vulnerables a ataques DDOS. Por otra parte, a nivel software son casi totalmente compatibles con Linux, por lo que no aporta apenas handicaps frente a un servidor Linux.

Por defecto FreeBSD no incluye entorno gráfico, pero existe la posibilidad de instalarle uno (GNOME o KDE). Lo primero es que para hacer esto es más recomendable haber descardo una versión STABLE que una RELEASE. Aunque se recomienda RELEASE para entornos de servidores el instalar paquetes del repositorio STABLE en equipos con ese Kernel puede provocar problemas de estabilidad en el sistema.

En fin, si estáis instalando desde cero os dejo por aquí este enlace a un tutorial de instalación (es del 8.0, pero vale perfectamente para el 8.1). Cuando ya tengáis el SO instalado en vuestro equipo es cuando toca instalar. Podéis elegir, como dije antes, entre GNOME o KDE (también puedes instalar ambos, probar y luego quedarte con el que más te guste). Yo, por mi parte, para este sistema creo que KDE es la mejor opción: más austero, pero más robusto y estable. Los comandos serían:

#primero hazte root con 
su -root

#para ambos casos ejecuta
pkg_add -r xorg

#para instalar KDE
pkg_add -r kde4

#para GNOME
pkg_add -r gnome3

Con esto ya tienes instalado tu entorno gráfico, pero si reinicias el equipo verás que sigue arrancando con el entorno de consola. Esto es porque tenéis que cambiar la configuración para que, por defecto, el equipo arranque con él.

Para activar el entorno gráfico GNOME por defecto hay que editar el fichero rc.conf y añadir al final la línea gnome_enable=»YES». Para editar el fichero basta con teclear lo siguiente, teniendo todavía permisos de root

ee  /etc/rc.conf

Cuando hayas añadido la línea antes citada sal pulsando ESC y guardando los datos. Si ejecutas un reboot debría arrancar ya con el entorno gráfico.

Podrías pensar que para KDE la cosa es igual, pero no. El caso de KDE prueba con el siguiente comando:

echo “exec /usr/local/kde4/bin/startkde” > ~/.xinitrc

Con esto lograrás que arranque KDE al escribir startx en la consola.

Piens que BSD no es un Ubuntu, el instalar el entorno gráfico vendrá seguido de tener que ir agregando a mano todas las utilidades y herramientas de aplicacion que deseamos tener en nuestro entorno, no os saldrá preconfigurado.

Y un apunte final, si no queréis romperos la cabeza con esto, existe GhostBSD, un sistema operativo BSD con entorno gráfico GNOME ya instalado. No lo he probado, pero por comentarios que he leído parece que es bastante estable. Si alguno lo ha instalado ya, puede comentarlo por aquí.

Instalar complemento de PHP para MongoDB

Como complento a la entra sobre cómo instalar MongoDB en Linux, toca ver cómo se instala la extensión para PHP.

Algunas distribuciones de MongoDB ya traen de por si la citada extensión, así que antes de hacer nada prueba con lo siguiente:

php --re mongo

Si tras esto nos devuelve Extension mongo does not exist es que tenemos que instalarlo. Lo más fácil es usar los repositorios PECL, aunque recuerda que tienes que tener instalada una versión de PHP compatible, porque si no te dará error (si tienes PHP 5 no hay problema, si no instálalo). El código sería el siguiente:

sudo pecl install mongo

##Si necesitas instalar PHP lo puedes hacer con la siguiente instrucción##
sudo apt-get install php5-dev

Ahora, tras reiniciar el servidor basta con volver a ejecutar php –re mongo para comprobar que sí está instalada la extensión.

Con esto ya tienes la extensión para PHP de MongoDB instalada en tu equipo Linux.

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.

Instalar JBoss en Linux.

El servidor de aplicaciones Java JBoss es uno de los más populares y utilizados. Su instalación en Linux no plantea demasiados problemas siguiendo unos sencillos pasos:

Lo primero es descargar JBoss desde su página oficial. Tenéis que tener en cuenta qué versión del JDK de Java tienes instalado, para saberlo basta con ejecutar java -version en el terminal, y nos devolverá la información sobre la versión de Java instalada. Recuerda, la versión del JDK y la de JBoss han de ser compatibles entre sí.

Luego debes desempaquetar el .zip descargado en algún directorio donde tengas permisos de
lectura y escritura.

Tras descomprimir el zip queda ajustar las variables de entorno, más concretamente que la variable JBOSS_HOME apunte al directorio de instalación de JBoss. En el archivo .bashrc localizado en el home agrega la sentencia: export JBOSS_HOME= seguida del fichero donde descomprimieras el .ZIP en el paso anterior. También tienes que comproba que JAVA_HOME esté apuntando al directorio de instalación del JDK.

Si vas a utilizar el API de persistencia de Java (JPA), tendrás que instalar el archivo jar del driver JDBC en el directorio $JBOSS_HOME/server/default/lib; donde default es la configuración utilizada por JBoss.

A la hora de arrancar JBoss tenéis varias opciones (all, default, minimal, standard, web). Por defecto arranca en default, pero para iniciar JBoss con una configuración distinta a esta se debe ejecutar: $JBOSS_HOME/bin/run.sh -c, seguido de la opción (por ejemplo $JBOSS_HOME/bin/run.sh -c all).