Outils pour utilisateurs

Outils du site


installer_icecast2_debian_support_ssl

Installer Icecast2 avec support SSL sur Debian

Pour ce tutoriel, on utilisera Debian Buster (10) et certbot de LetsEncrypt pour le certificat SSL.

Aussi bizarrement que cela puisse paraître, le paquet Icecast2 disponible pour Debian n'est pas compilé avec le support SSL, on ne peut donc pas l'utiliser en HTTPS. Ça n'est pas indiqué dans le détail du paquet, ni sur le site officiel d'Icecast2. Il faut remonter à la fondation Xiph, éditrice du programme Icecast, pour trouver l'info sur le wiki, dans la partie concernant son installation depuis les serveurs de la fondation plutôt que d'utiliser le paquet fourni par Debian.

Et bizzarrement aussi, il n'y a pas de paquet pour Debian 11 chez Xiph…

Il faut donc d'abord ajouter le dépôt logiciel de la fondation xiph avant d'installer Icecast2.

Installer depuis le dépôt Xiph

Pour ajouter le dépôt aux sources d'apt, executer cette commande (en root) :

sh -c "echo deb http://download.opensuse.org/repositories/multimedia:/xiph/Debian_10/ ./ >>/etc/apt/sources.list.d/icecast.list"

Puis il faut ajouter la clef de vérification pour légitimer cette nouvelle source en exécutant :

wget -qO - http://icecast.org/multimedia-obs.key | sudo apt-key add -

Enfin, on met à jour les sources, et on vérifie que le paquet sera installé à la place de celui provenant de Debian en exécutant la commande :

apt update && apt upgrade
apt-cache policy icecast2

qui donne sur notre serveur de test :

icecast2:
  Installed: None
  Candidate: 2.4.4-1
  Version table:
     2.4.4-1 500
        500 http://mirrors.online.net/debian buster/main amd64 Packages
     2.4.4-1 500
        500 http://download.opensuse.org/repositories/multimedia:/xiph/Debian_10 ./ Packages
        100 /var/lib/dpkg/status

On voit que le paquet choisi proviendra de Debian car :

  • la version du paquet est la même chez Debian et chez Xiph
  • le “poids” de chaque source de dépôt est identique (500)
  • le poids de chaque paquet est identique (500)

Il y a égalité, du coup c'est le premier (Debian) qui gagne.

Il faut expliquer à APT que l'on veut le paquet provenant de Xiph, et ce, indéfiniment dans le temps : on ne veut pas qu'à la prochaine mise à jour, celui de Debian écrase celui installé depuis Xiph. Pour ça, il faut utiliser l'APT Pinning : cela permet de donner + d'importance (+ de poids) à une source et/ou pour un paquet donné.

Pour expliquer à APT que l'on veut systématiquement le paquet provenant de Xiph, il faut créer un fichier dans /etc/apt/preferences.d/ : appelons-le par exemple 99icecastfromxiph. Ajouter dedans :

Package: icecast2
Pin: release o=obs://build.opensuse.org/multimedia:xiph/Debian_10
Pin-Priority: 600

La priorité (Pin-Priority) doit être supérieure à 500 donc pour prendre le dessus sur le paquet du dépôt Debian.

Le Pin: est une sorte de rédérence du dépôt. On la trouve dans les infos affichées par la commande suivante qui liste les différents dépôts actuels et leurs priorités (= poids) :

apt-cache policy

qui affiche pour notre serveur de test :

Package files:
 100 /var/lib/dpkg/status
     release a=now
 500 http://download.opensuse.org/repositories/multimedia:/xiph/Debian_10 ./ Packages
     release o=obs://build.opensuse.org/multimedia:xiph/Debian_10,n=Debian_10,l=multimedia:xiph,c=
     origin download.opensuse.org
 500 http://security.debian.org/debian-security buster/updates/non-free amd64 Packages
     release v=10,o=Debian,a=stable,n=buster,l=Debian-Security,c=non-free,b=amd64
     origin security.debian.org
     .
     .
     .
Pinned packages:
     icecast2 -> 2.4.4-1 with priority 600

Désormais, nous pouvons installer Icecast2 avec la commande :

apt install icecast2

Puis se laisser guider par la configuration interactive (ce n'est pas l'objet ici de la détailler), en prenant soin de spécifier un hostname correspondant à un vrai nom de domaine ou sous-domaine, ce qui permettra de créer le certificat SSL.

Configurer

Créer un certificat SSL avec Certbot

Si Certbot n'est pas installé, il suffit de le faire :

apt install certbot

Puis, considérant que vous avez par exemple le sous-domaine streams.mondomaine.org pointant vers votre serveur, et configuré dans Apache, Nginx…, il faut créer un certificat pour ce sous-domaine de la façon suivante :

certbot certonly --webroot -w /home/userfolder/www/streams.mondomaine.org -d streams.mondomaine.org

en adaptant le path à votre situation bien entendu.

Cela créera les certificats et les clefs dans le dossier /etc/letsencrypt/live/streams.mondomaine.org.

Icecast demande à ce que le fichier de certificat qu'on lui fournit contienne à la fois la clef publique (fichier fullchain.pem) et la clef privée (fichier privkey.pem). On crée ce fichier comme suit, en le plaçant dans le dossier /usr/share/icecast2 :

cat /etc/letsencrypt/live/streams.mondomaine.org/fullchain.pem /etc/letsencrypt/live/streams.mondomaine.org/privkey.pem > /usr/share/icecast2/icecast.pem

Pour automatiser la création de ce fichier à chaque fois que Certbot renouvelle automatiquement la validité du certificat de ce sous-domaine, il faut lui expliquer quoi faire juste après l'avoir renouvellé en modifiant le fichier /etc/letsencrypt/renewal/streams.mondomaine.org.conf et en ajoutant dans la partie [renewalparams] le paramètre suivant qui concaténera les 2 clefs dans le fichier comme fait précédemment et redémarrera Icecast pour qu'il le prenne en compte :

post_hook = cat /etc/letsencrypt/live/streams.labomedia.org/fullchain.pem /etc/letsencrypt/live/streams.labomedia.org/privkey.pem > /usr/share/icecast2/icecast.pem && systemctl restart icecast2.service

Configurer Icecast2 pour le support SSL

Normalement, dans le fichier /etc/icecast2/icecast.xml, vous avez le sous-domaine configuré comme hostname :

<hostname>streams.labomedia.org</hostname>

Il faut maintenant dire à Icecast qu'on veut du SSL sur le port 8443 (le port par défaut, sans SSL est le 8000) en décommentant (ou ajoutant) la partie :

<listen-socket>
    <port>8443</port>
    <ssl>1</ssl>
</listen-socket>

Et plus bas dans le fichier, dans la partie <paths>, il faut décommenter (ou ajouter) la ligne :

<ssl-certificate>/usr/share/icecast2/icecast.pem</ssl-certificate>

Et voilà. Reste à redémarrer Icecast avec la commande :

systemctl restart icecast2.service

Vous pourrez alors vous connecter à l'admin à l'adresse https://streams.mondomaine.org:8443/admin et les flux seront streamés sur les adresses https://streams.mondomaine.org:8443/nom_du_stream.

installer_icecast2_debian_support_ssl.txt · Dernière modification : 2023/12/12 22:28 de Labomedia