====== 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}}