Radxa X2L Docker Portainer Pi Hosted

Dans un premier sujet on prenait en main (Debian sur la ligne de commande) la Radxa X2L.

Ce coup-ci on va l’utiliser pour installer Docker, Portainer et Pi Hosted. Pi Hosted est un ensemble génial qui permet d’installer facilement des logiciels sous forme de container, cela pour l’architecture ARM ou AMD64. Ca veut dire que ça marche pour une Raspberry (d’où le nom) ou un “PC”.

L’interface est essentiellement dans “portainer” qui est une GUI via le navigateur pour gérer les containers Dockers. Il n’y a presque plus besoins de la ligne de commande.

Il y a un ensemble de vidéos sur le sujet dont voici le premier épisode : https://www.youtube.com/watch?v=cO2-gQ09Jj0&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=2

Le git du projet.

Avec ce “système”, arrive un ensemble de containers déjà tout bien configurés pour fonctionner sur la machine : il s’agit la plupart du temps de sélectionner dans une liste de templates, cliquer sur “install” et en quelques secondes le container est installé et prêt à l’emploi.

Ca ressemble à ça :


Docker + Portainer

Bon, ChatGPT indique que Docker simplifie le déploiement d’applications en utilisant des conteneurs légers pour isoler et exécuter des logiciels, facilitant la portabilité.

Vous pouvez installer Docker et Portainer à la main, mais pi hosted propose aussi un script.

Si vous souhaitez le faire selon pi hosted, c’est avec une seule ligne de commande et un reboot :

wget -qO- https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/install_docker.sh | bash

Wha de mon côté j’ai ma recette de cuisine :slight_smile:

Installer Docker et portainer “à la main”

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Voilà comment je fais moi :

  1. créer les dossiers qui nous serviront plus tard,
  2. docker télécharge l’image de portainer
  3. on crée le container avec l’image et on le lance lance.
sudo mkdir -p /portainer/Files/AppData/Config
sudo docker pull portainer/portainer-ce:latest
sudo docker run -d -p 9051:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

La suite se situe dans le navigateur à l’adresse de la radxa et sur le port 9051 pour moi :

Une fois la session ouverte dans Settings, App Templates, URL, copiez le lien récupéré ici depuis la section Login to Portainer to update the App Template :

Ensuite dans la partie App Templates, faites votre marché :


Quelques Remarques

  • pi hosted fonctionne sur arm et sur AMD64, il ne faut pas considérer qu’une machine arm, même peu puissante, n’est pas fonctionnelle. Par exemple j’installe des containers sur des Raspberry Pi Zero 2
  • il y a presque une vingtaine de vidéos dans le tube sur pi hosted, regardez-les, ça vous donnera certainement plein d’idées
  • la liste des templates est facile à utiliser, mais elle n’est pas du tout limitative. Vous pouvez installer tous les containers compatibles avec le matériel qui l’accueille, pour AMD64 il y en a certainement des milliers et des milliers Le magasin est ici.

Installation d’un player audio de compet’

Par ailleurs (sur une vénérable Orange Pi Zero 2) on a installé le Logitech Media Server. On va transformer notre Radxa X2L en “player audio de compet” en installant un container contenant squeezelite et on va faire de l’upsampling à fond (aucun intérêt, mais on peut le faire !). Un DAC SMSL M300SE est connecté à un port USB de la Radxa (120€, performances mesurées exemplaires).

Sur le hub docker on a plusieurs versions dont celle-ci.

Dans portainer on va télécharger l’image du container :

Ensuite dans le menu Containers, on va créer un nouveau container avec le bouton en haut à droite.

Il faut :

  • nommer le container
  • indiquer quelle image utiliser (celle que l’on vient de télécharger)

Ensuite, dans la partie env il faut armer quelques variables (sélectionnez advanced mode pour pouvoir copier le texte d’un bloc) :

SQUEEZELITE_AUDIO_DEVICE=hw:CARD=AUDIO,DEV=0
SQUEEZELITE_MAC_ADDRESS=00:1A:2B:3C:DD:EE
SQUEEZELITE_NAME=RADXA_XL
SQUEEZELITE_SERVER_PORT=192.168.1.120
SQUEEZELITE_RATES=44100,48000,88200,96000,176400,192000,352800,384000,705600,768000
SQUEEZELITE_UPSAMPLING=v::4:32:95:105:45
  • hw:CARD=AUDIO,DEV=0 correspond au DAC SMSL
  • une adresse MAC bidon parce que le serveur LMS identifie les players via l’adresse mac, il en faut une par lecteur
  • RADXA_XL est le nom du lecteur
  • 192.168.1.120 est l’adresse du serveur LMS
    Les deux derniers paramètres :
    *SQUEEZELITE_RATES=44100,48000,88200,96000,176400,192000,352800,384000,705600,768000
    SQUEEZELITE_UPSAMPLING=v::4:32:95:105:45

permettent de convertir le signal jusqu’à 768kHz et en 32 bits.

Cela n’a aucun intérêt car les DAC modernes utilisent des convertisseurs qui convertissent le 16 et le 24 bits en 32 bits et l’interpolation est automatiquement effectuée en x8.

Autre paramètre super important, dans la partie Runtime & Resources il faut ajouter un device pour pouvoir communiquer avec le DAC sur le port USB :

Ensuite cliquer sur le bouton Deploy Container. Le résultat est un nouveau container en train de tourner :

Et donc on vient de créer un nouveau lecteur client du LMS:


Ressources

Maintenant la machine n’est plus en idle. Qu’est ce que ça donne d’un point de vue ressources ?
Bpytop nous indique que squeezelite consomme presque 4% de CPU (le vilain) :

La consommation passe de 3.8W (idel) à 4.6W avec Docker + Portainer et la lecture de musique + conversion en 32 bits et maximal upsampling.

A noter que les opérations décrites sur cette pages sont parfaitement réalisables sur, par exemple une Orange Pi Zero 3 : processeur ARM Allwiner H618 - Quad Core A53.

D’ailleurs, dans le même cas de lecture, que nous dit bpytop :

Sur le petit (mais vaillant) H618 le processus squeezelite avec les même paramètres consomme 4.2% de CPU (la consommation électrique est d’environ 0.8W en alimentant en plus un LCD2004).


Consommation et mesures

Christopher vient de publier une vidéo de comparaison entre Intel N100 et Raspberry Pi 5.

Reprenons ses mesures de CPU et de consommation pour comparer cela au vaillant Celeron et à la Orange Pi 5 équipée du RK3588 très performant (pour un ARM sur une SBC).

On execute sur la ligne de commande le test suivant :

sysbench cpu --cpu-max-prime=20000 --threads=4 --time=0 --events=10000 run

Les résultats sont les suivants :

* N100  = 2.25s
* RPI5  = 2.42s
* OPI5  = 2.53s
* J4125 = 4.2s

Sans trop de surprise le Celeron de la Radxa ferme la marche, les trois autres sont très proches.

La consommation des machines est la suivante, en Watts en idle / load CPU :

* N100  = 11 / 30
* RPI5  = 6 / 16
* OPI5  = 2 / 10
* J4125 = 3 / 10

Les mesures donnent une idée, Christopher fait tourner Ubuntu avec un Desktop, la Orange Pi 5 et la Radxa n’ont que Debian sur la ligne de commande. Quelques remarques :

  • le N100 est le plus puissant et le plus gourmand (surtout en Idle)
  • le Celeron J4125 est peu gourmand mais peu puissant
  • la Orange Pi 5 n’est pas gourmande et les perfs sont (d’après les mesures de Jeff Geerling) supérieures à la Raspberry Pi 5.

La consommation mesurée de la carte Radxa est très intéressante. A la très grosse louche, en 2024 1W c’est 2€ par an.

La Radxa est la moins chère des quatre options et presque la moins gourmande. Elle a un très belle connectivité - le pire étant la Raspberry qui a besoin d’une carte supplémentaire pour connecter un nvme - et son moteur AMD64 représente l’assurance d’une grande bibliothèque d’applications.

Plus tard on fera un test avec Ubuntu pour voir si un bureau est envisageable ou si ça rame trop.


Conclusion

Ben rien, juste on a installé Docker et portainer pour du confort, maintenant on a liste de templates et on choisi ce que l’on veut installer, par exemple octoprint ou Postgres ou PiHole ou FileZilla ou SAMBA (plus facile à installer en tant que container). Il doit bien y avoir 200+ templates.

De mon expérience de Docker, ce n’est pas tant le processeur qui limite mais la mémoire. Ceci dit, sur une vieille Orange Pi Zero 2 (H616) avec un 1Go, j’ai une quinzaine de containers qui tournent en permanence. Avec plus de RAM, on peut installer plus de containers pour s’amuser davantage.

Mmm… A bientôt peut-être.

1 « J'aime »