====== Installer Icecast2 avec support SSL sur Debian ======
Pour ce tutoriel, on utilisera [[https://www.debian.org/releases/buster/|Debian Buster]] (10) et [[https://certbot.eff.org/|certbot de LetsEncrypt]] pour le certificat SSL.
Aussi bizarrement que cela puisse paraître, le paquet [[https://packages.debian.org/buster/icecast2|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 [[https://icecast.org/|site officiel d'Icecast2]]. Il faut remonter à la [[https://wiki.xiph.org/Icecast_Server/Installing_latest_version_(official_Xiph_repositories)|fondation Xiph]], éditrice du programme Icecast, pour [[https://wiki.xiph.org/Icecast_Server/Installing_latest_version_(official_Xiph_repositories)|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'[[https://wiki.debian.org/AptConfiguration|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 [[https://certbot.eff.org/|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 :
streams.labomedia.org
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 :
8443
1
Et plus bas dans le fichier, dans la partie ////, il faut décommenter (ou ajouter) la ligne :
/usr/share/icecast2/icecast.pem
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%%**.
{{tag> n1c0 tutoriel streaming icecast}}