Instalando Airsonic-Advanced En Raspberry Pi

Logo de Airsonic

Airsonic-Advanced es el sucesor de Airsonic, un software de servidor multimedia enfocado en la música. Una de sus principales características es la posibilidad de reproducir música en el hardware de audio que tenga integrado nuestro servidor, por lo que si lo montamos en una Raspberry Pi podremos conectar esta a un amplificador de audio para escuchar nuestra música estando en casa. Para hacerlo funcionar en una Raspberry Pi o cualquier servidor basado en Debian (o Ubuntu) necesitamos instalar Java 11 o superior, lo cual haremos de la siguiente manera en Ubuntu 20.04, Debian 10 y posteriores

sudo apt install default-jre

Si vamos a utilizar la reproducción local necesitamos instalar ALSA

sudo apt install alsa-utils

Abrimos el mezclador de audio

alsamixer

Ajustamos los niveles de volumen y probamos la salida

speaker-test -c2 -twav -l7

Deberíamos escuchar un sonido de prueba

Creamos el directorio de trabajo de Arisonic-Advanced reemplazando $USER y $GROUP por el nombre de usuario y grupo de nuestra preferencia (el cual debe estar dentro del grupo audio para poder utilizar la reproducción local)

sudo mkdir /var/airsonic/
sudo chown -R $USER:$GROUP /var/airsonic/

Buscamos la última versión disponible en el siguiente enlace (recomiendo usar la versión Edge en lugar de la estable) y descargamos el ejecutable .war reemplazando $AIRSONIC_EXECUTABLE por la URL del ejecutable

sudo wget -O /var/airsonic/airsonic.war $AIRSONIC_EXECUTABLE

Creamos el servicio para Systemd

sudo nano /etc/systemd/system/airsonic.service

Colocamos lo siguiente reemplazando $USER y $GROUP por el usuario y grupo asignados

[Unit]
Description=Airsonic Media Server
After=remote-fs.target network.target
AssertPathExists=/var/airsonic

[Service]
Type=simple
Environment="JAVA_JAR=/var/airsonic/airsonic.war"
Environment="JAVA_OPTS=-Xmx700m"
Environment="AIRSONIC_HOME=/var/airsonic"
Environment="PORT=8008"
Environment="CONTEXT_PATH=/airsonic"
Environment="JAVA_ARGS="
EnvironmentFile=-/etc/sysconfig/airsonic
ExecStart=/usr/bin/java \
          $JAVA_OPTS \
          -Dairsonic.home=${AIRSONIC_HOME} \
          -Dserver.servlet.contextPath=${CONTEXT_PATH} \
          -Dserver.port=${PORT} \
          -jar ${JAVA_JAR} $JAVA_ARGS
User=$USER
Group=$GROUP

# See https://www.freedesktop.org/software/systemd/man/systemd.exec.html
# for details
DevicePolicy=closed
DeviceAllow=char-alsa rw
NoNewPrivileges=yes
PrivateTmp=yes
PrivateUsers=yes
ProtectControlGroups=yes
ProtectKernelModules=yes
ProtectKernelTunables=yes
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
RestrictNamespaces=yes
RestrictRealtime=yes
SystemCallFilter=~@clock @debug @module @mount @obsolete @privileged @reboot @setuid @swap
ReadWritePaths=/var/airsonic

# You can uncomment the following line if you're not using the jukebox
# This will prevent airsonic from accessing any real (physical) devices
#PrivateDevices=yes

# You can change the following line to `strict` instead of `full`
# if you don't want airsonic to be able to
# write anything on your filesystem outside of AIRSONIC_HOME.
ProtectSystem=full

# You can uncomment the following line if you don't have any media
# in /home/…. This will prevent airsonic from ever reading/writing anything there.
#ProtectHome=true

# You can uncomment the following line if you're not using the OpenJDK.
# This will prevent processes from having a memory zone that is both writeable
# and executeable, making hacker's lifes a bit harder.
#MemoryDenyWriteExecute=yes


[Install]
WantedBy=multi-user.target

Instalamos ffmpeg para que la transcodificación funcione

sudo apt install ffmpeg
sudo mkdir /var/airsonic/transcode
cd /var/airsonic/transcode/
sudo ln -s /usr/bin/ffmpeg
sudo chown -Rh $USER:$GROUP ffmpeg

Configuramos nuestro servidor web existente en caso de necesitar cifrado SSL

En caso de usar Apache necesitamos habilitar los siguientes módulos

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod ssl
sudo a2enmod headers

Nuestro archivo de configuración sería similar a este

<IfModule mod_ssl.c>
<VirtualHost *:443>
DocumentRoot /var/www/html
ServerName frank.asgardius.company
<Directory /var/www/html>
Options -Indexes +FollowSymLinks
AllowOverride All
</Directory>


ProxyPass         /airsonic http://127.0.0.1:8008/airsonic
ProxyPassReverse  /airsonic http://127.0.0.1:8008/airsonic
RequestHeader     set       X-Forwarded-Proto "https"

SSLCertificateFile /etc/letsencrypt/live/frank.asgardius.company/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/frank.asgardius.company/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

En caso de usar NGINX sería similar a este otro

server {
    server_name frank.asgardius.company;
    root /var/www/html;

    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    location /airsonic {
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Host  $http_host;
        proxy_set_header Host              $http_host;
        proxy_max_temp_file_size           0;
        proxy_pass                         http://127.0.0.1:8008;
        proxy_redirect                     http:// https://;
    }

    location ~ /\.ht {
        deny all;
    }


    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/frank.asgardius.company/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/frank.asgardius.company/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = frank.asgardius.company) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80;
    server_name frank.asgardius.company;
    return 404; # managed by Certbot


}

Iniciamos Airsonic-Advanced

sudo systemctl daemon-reload
sudo systemctl enable --now airsonic

Después de un par de minutos podremos acceder a nuestra instancia de Airsonic-Advanced desde el navegador accediendo a https://domnio.example.com/airsonic. e iniciamos sesión con el nombre de usuario admin y contraseña admin (la página de inicio de sesión nos lo indica)

Nos vamos a los ajustes en la sección de usuarios. Seleccionamos el usuario inicial y agregamos credenciales nuevas

Nos vamos a sección Credenciales, marcamos la que tiene el ID 0 y la eliminamos. Nos vamos a la sección de carpetas multimedia y agregamos carpetas con música, las escaneamos y le damos acceso a nuestro usuario desde la sección usuarios. Actualmente soporta los formatos mp3, ogg, flac y aac. El codec opus no está soportado

Recomiendo crear una cuenta con privilegios limitados para el uso diario. Es compatible con la mayoría de clientes de Subsonic, yo recomiendo DSub, el cual se puede descargar desde F-Droid o desde su repositorio en Github

Referencias

https://airsonic.github.io/docs/

Dejar un comentario