Ceci est une ancienne révision du document !
Table des matières
Libretime dans container LXC sans privilèges
Pour faire cohabiter différentes instances de Libretime, installation de chacune dans un container LXC sans privilèges pour plus de sécurité …
Installer LXC et créer un premier container
Sur une base d'Ubuntu 18.04
sudo apt-get install lxc
Créer un utilisateur spécifique pour exécuter les containers
adduser lxcrunner
Permettre à cet utilisateur de créer des devices réseau virtuels
nano /etc/lxc/lxc-usernet
y ajouter
lxcrunner veth lxcbr0 10
Se logguer en tant que user
adduser lxcrunner
Fix environmental variables. Otherwise you might have issues creating containers later
lxcrunner> unset XDG_RUNTIME_DIR XDG_SESSION_ID
Find out the namespaces allowed for the user lxc. The wildcard in the command below will match both suid and guid files. We will map the LXC container to these regions.
lxcrunner> cat /etc/s*id|grep $USER lxcrunner:624288:65536 lxcrunner:624288:65536
From the output, we can see that both assigned suid and guid values start at 624288 and runs through the next 65536 integers.
Let us set up configuration files as required by LXC before starting a container. The required file is in ~/.config/lxc/default.conf.
lxcrunner> mkdir -p ~/.config/lxc/ lxcrunner> vim ~/.config/lxc/default.conf
Add in the following lines. Notice that the syntax might be different from what you find online. I am using the latest version of LXC, v3.0.3.
We are setting the network interface type to be veth and creating a new bridge lxcbr0. We will come back to these later. Your hwaddr may differ; you can see the default values in /etc/lxc/default.conf. .
lxc.net.0.type = veth lxc.net.0.link = lxcbr0 lxc.net.0.flags = up lxc.net.0.hwaddr = 00:16:3e:xx:xx:xx lxc.idmap = u 0 624288 65536 lxc.idmap = g 0 624288 65536
Création du premier container
Créer le container en tant qu'utilisateur lxcrunner
lxcrunner>lxc-create -n musique -t download
Choisir ubuntu bionic amd64 ou faire directement :
lxcrunner>lxc-create -n musique -t download -- -d ubuntu -r bionic -a amd64
A noter pour le backup que les containers sont stockés à cet emplacement :
/home/lxcrunner/.local/share/lxc/musique (pour le container musique)
A cet endroit, on trouve le fichier config propre au container et le répertoire rootfs qui contient le filesystem habituel d'un linux
Le démarrer
lxcrunner>lxc-start musique
Vérifier que ça marche
lxcrunner>lxc-ls -f
Installer Libretime dans le container
Entrer dans le container
lxcrunner>lxc-attach musique
On obtient un shell root, installer quelques outils :
apt update apt upgrade apt install git nano nload htop locate nmap
Lancer l'installation de Libretime
cd /home/ubuntu/ git clone https://github.com/LibreTime/libretime cd libretime ./install -fiap
Une fois l'installation finie, sortir du container
exit
Créer les vhost apache pour proxy le traffic vers le container
Identifier l'IP du container :
lxc-ls -f NAME STATE AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED musique RUNNING 1 - 10.0.3.116 - true
Pour que le apache du serveur principal renvoie le traffic vers le container, il faut créer les vhost correspondants
nano /etc/apache2/sites-available/musique.radiocampus.org.conf
<VirtualHost *:80> ServerAdmin mail@domaine.org ServerName musique.domaine.org ErrorLog ${APACHE_LOG_DIR}/musique.domaine.org-error.log CustomLog ${APACHE_LOG_DIR}/musique.domaine.org-access.log combined ProxyPreserveHost On ProxyPass / http://10.0.3.116/ ProxyPassReverse / http://10.0.3.116/ <Proxy *> Order deny,allow Allow from all </Proxy> RewriteEngine on RewriteCond %{SERVER_NAME} =musique.domaine.org RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </VirtualHost>
Et pour le https
nano /etc/apache2/sites-available/musique.domaine.org-le-ssl.conf
<IfModule mod_ssl.c> <VirtualHost *:443> ServerAdmin mail@domaine.org ServerName musique.domaine.org ErrorLog ${APACHE_LOG_DIR}/musique.domaine.org-error.log CustomLog ${APACHE_LOG_DIR}/musique.domaine.org-access.log combined ProxyPreserveHost On ProxyPass / http://10.0.3.116/ ProxyPassReverse / http://10.0.3.116/ <Proxy *> Order deny,allow Allow from all </Proxy> SSLEngine on SSLProxyEngine On SSLProxyVerify none SSLProxyCheckPeerCN off SSLProxyCheckPeerName off SSLProxyCheckPeerExpire off SSLCertificateFile /etc/letsencrypt/live/musique.domaine.org/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/musique.domaine.org/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> </IfModule>
Ajouter ces vhost aux sites activés
a2ensite musique.domaine.org.conf musique.domaine.org-le-ssl.conf
Relancer Apache
systemctl reload apache2
Créer les certificats ssl pour le https
En utilisant certbot
Étant donné que les requêtes sont renvoyés au container, il faut utiliser une méthode particulière pour que certbot puisse valider le domaine, à suivre
Voir aussi https://discourse.libretime.org/t/lt-behind-a-proxy/
Finaliser l'installation de Libretime
Pour ce faire, il faut se rendre à l'adresse web définie : http://musique.domaine.org et suivre la procédure proposée : création de la base de donnée, config rabbitmq, définition de l'url et du port puis relancer les services depuis l'intérieur du container
lxc-attach musique systemctl start libretime-playout systemctl start libretime-liquidsoap systemctl start libretime-analyzer systemctl start libretime-celery
Si tout va bien on atterit sur la page d'accueil de Libretime, pour se logguer la première fois : admin / admin (ne pas oublier de changer ce mdp)
Troubleshooting
Désactiver ipv6 si ping images.linuxcontainers.org est résolu en ipv6
Désactiver le serveur icecast dans les containers si pas utilisés
root@musique:~# systemctl stop icecast2 root@musique:~# systemctl disable icecast2
Ressources
- LXC container unpriviledged https://blog.warmwolf.com/2020/04/securing-wordpress-unprivileged-lxc-container-on-ubuntu/2/
- Créer un répertoire partagé entre les containers https://askubuntu.com/questions/691039/adding-a-shared-host-directory-to-an-lxc-lxd-container