Como instalar un servidor para emitir radio en archlinux

Cómo crear un servidor Icecast en Arch Linux (actualizado 2025)

Icecast es un servidor de streaming (audio/vídeo) que permite crear radios online y otros servicios de streaming usando formatos como MP3, Ogg Vorbis, Opus, etc.

En este tutorial vas a:

  1. Instalar Icecast desde los repos oficiales de Arch.

  2. Configurar lo básico del fichero /etc/icecast.xml.

  3. Ajustar permisos para que el servicio arranque sin errores.

  4. Iniciar el servicio con systemd y probar la interfaz web.

  5. Conectar un cliente de emisión como BUTT o Liquidsoap.

     

Prerrequisitos

  • Arch Linux instalado y actualizado.

  • Usuario con permisos sudo.

  • Conexión a Internet.

  • Puertos abiertos en el firewall (por defecto Icecast escucha en el 8000/TCP).

     

Paso 0: Actualizar el sistema

No es obligatorio, pero sí recomendable:

sudo pacman -Syu
 

Paso 1: Instalar Icecast

Icecast está en los repos oficiales de Arch Linux:

sudo pacman -S icecast

El paquete instala:

  • El binario icecast.

  • El fichero de configuración principal en /etc/icecast.xml.

  • Ficheros web y plantillas en /usr/share/icecast/.

     

Paso 2: Ajustar la configuración básica (/etc/icecast.xml)

Edita el fichero principal:

sudo nano /etc/icecast.xml

2.1. Límites y datos básicos del servidor

Comprueba/ajusta estas secciones:

<limits>
    <clients>100</clients>         <!-- Máx. oyentes -->
    <sources>4</sources>           <!-- Máx. fuentes simultáneas -->
    <queue-size>524288</queue-size>
    <burst-size>65535</burst-size>
</limits>

<hostname>radio.midominio.com</hostname>
<location>Mi ciudad</location>
<admin>tu-correo@ejemplo.com</admin>

2.2. Socket de escucha (puerto)

Por defecto, Icecast escucha en el puerto 8000:

<listen-socket>
    <port>8000</port>
    <!-- <bind-address>0.0.0.0</bind-address>  para todas las interfaces -->
</listen-socket>
  • Si quieres limitar a una IP concreta, descomenta y ajusta <bind-address>.

  • Deja el port en 8000 mientras pruebas. Más adelante puedes usar un reverse proxy (Nginx/Caddy) para exponerlo en 80/443, en lugar de mover Icecast a esos puertos directamente.

2.3. Usuarios, grupo y permisos

En muchas instalaciones de Arch, el icecast.xml viene con:

<user>nobody</user>
<group>nobody</group>

y las rutas de logs apuntan a /var/log/icecast.

Asegúrate de que el directorio existe y tiene permisos para ese usuario:

sudo mkdir -p /var/log/icecast
sudo chown nobody:nobody /var/log/icecast

Importante:

  • No actives <changeowner> dentro de <security> si vas a usar el servicio systemd; systemd ya arranca el proceso con el usuario configurado y puede entrar en conflicto.

2.4. Autenticación (ADMIN / SOURCE / RELAY)

La sintaxis actual recomendada para contraseñas es la de Icecast 2.4:

<authentication>
    <!-- Password por defecto para todas las fuentes (user = "source") -->
    <source-password>una_password_fuerte_para_fuentes</source-password>

    <!-- Usuario y password para relays -->
    <relay-user>relay</relay-user>
    <relay-password>otra_password_fuerte_para_relays</relay-password>

    <!-- Acceso a la interfaz y administración -->
    <admin-user>admin</admin-user>
    <admin-password>una_password_admin_muy_fuerte</admin-password>
</authentication>
  • No uses los valores de ejemplo hackme, cámbialos siempre.

  • El usuario por defecto para las fuentes es source y usará la source-password, salvo que definas credenciales específicas en un <mount>.

2.5. Montaje principal /stream

Para un uso típico (una sola radio), basta con definir un mountpoint simple:

<mount>
    <mount-name>/stream</mount-name>

    <!-- Credenciales específicas opcionales para este mount -->
    <username>source</username>
    <password>password_específica_para_este_mount</password>

    <!-- Límite de oyentes en este mount -->
    <max-listeners>100</max-listeners>

    <!-- Metadatos que verán los oyentes -->
    <public>1</public>
    <stream-name>Mi Radio en Icecast</stream-name>
    <stream-description>Lo mejor de mi música</stream-description>
    <genre>variety</genre>
</mount>
  • mount-name será la URL del stream: http://TU_SERVIDOR:8000/stream.

  • Aquí ya no se usa <file> como en tu ejemplo original; lo habitual hoy en día es que el audio venga de un cliente como BUTT, Liquidsoap, etc.

     

Paso 3: Comprobar la sintaxis del XML (opcional pero muy recomendable)

Un error de cierre de etiqueta puede impedir que el servicio arranque. Puedes validar el XML con xmllint (paquete libxml2):

sudo pacman -S libxml2
sudo xmllint /etc/icecast.xml

Si no muestra errores, la sintaxis es correcta.

 

Paso 4: Iniciar y habilitar el servicio de Icecast

En Arch, el servicio se llama simplemente icecast:

# Iniciar ahora
sudo systemctl start icecast

# Habilitar al arranque
sudo systemctl enable icecast

Puedes comprobar el estado con:

systemctl status icecast

Deberías ver el servicio como active (running) sin errores de permisos en los logs.

 

Paso 5: Abrir el puerto en el firewall (si aplica)

Si usas ufw:

sudo ufw allow 8000/tcp
sudo ufw reload

Si usas nftables o iptables, crea una regla equivalente para permitir conexiones entrantes al puerto 8000/TCP.

 

Paso 6: Probar la interfaz web

Desde el propio servidor:

Desde otro equipo de la red:

  • http://IP_DEL_SERVIDOR:8000

Deberías ver la página de estado de Icecast. Si accedes a /admin se te pedirá el usuario/contraseña definidos en <admin-user> y <admin-password>.

 

Paso 7: Transmitir contenido a Icecast

Icecast no genera el audio, solo lo sirve. Necesitas un cliente de emisión (source client) que se conecte al servidor.

7.1. Emisión sencilla con BUTT (Broadcast Using This Tool)

BUTT es un cliente gráfico muy fácil de usar, compatible con Icecast y Shoutcast.

En Arch lo más sencillo hoy en día es instalarlo como snap (si ya usas snaps) o desde AUR/paquete nativo si lo prefieres:

# Si ya tienes snapd funcionando:
sudo snap install butt
sudo snap connect butt:audio-record

En la configuración de BUTT:

  • Server type: Icecast

  • Address: IP o dominio de tu servidor (p.ej. radio.midominio.com)

  • Port: 8000 (o el que pusiste en <listen-socket>).

  • Password:

    • Si usas las credenciales globales: source-password de <authentication>.

    • Si definiste <username>/<password> en el <mount>, usa esas.

  • Mountpoint: /stream

Pulsa Connect y deberías ver el stream activo en la página web de Icecast.

7.2. Emisión avanzada con Liquidsoap (radio automatizada)

Para montajes más complejos (auto-DJ, playlists, jingles, varios formatos simultáneos…), Liquidsoap es la opción típica.

La idea general es:

  1. Instalar OPAM.

  2. Instalar Liquidsoap con OPAM.

  3. Crear un script sencillo, por ejemplo:

    # Radio básica: reproduce una carpeta de música y la envía a Icecast
    default = playlist(mode="random", "/ruta/a/tus/mp3")
    
    output.icecast(
      %mp3(bitrate=128),
      host = "radio.midominio.com",
      port = 8000,
      password = "password_específica_para_este_mount",
      mount = "stream",
      name = "Mi Radio con Liquidsoap",
      default
    )
    
  4. Ejecutar el script y comprobar en la interfaz web que el mount /stream aparece con oyentes.

     

Paso 8 (Opcional): HTTPS y dominio público

Para producción es buena idea:

  • Poner Icecast detrás de Nginx/Caddy/Apache como reverse proxy en:

    • https://radio.midominio.com/stream

  • Conseguir certificados gratuitos con Let’s Encrypt.

  • Mantener Icecast escuchando solo en localhost:8000 y exponer al público únicamente el proxy HTTPS.

Esto te evita complicarte moviendo Icecast a los puertos 80/443 directamente y mejora la seguridad.

 

Resumen de mejoras frente al tutorial original

  • Sintaxis de <authentication> actualizada a la usada por Icecast 2.4 (source-password, admin-user, etc.), en lugar de <admin><username>….

  • Eliminado el uso de <file> en <mount>, que no es el flujo típico hoy (se usa un cliente externo para emitir).

  • Explicado el tema de usuarios, grupo y permisos del directorio de logs en Arch (evita el clásico error de Permission denied al arrancar).

  • Añadido paso para validar el XML con xmllint.

  • Añadidos ejemplos concretos de conexión con BUTT y Liquidsoap.

  • Comentado el uso de reverse proxy para HTTPS en entornos públicos.

Comentarios

Entradas populares de este blog

Mejorar rendimiento Firestorm Viewer

Nuestro Primeros Minutos en second life