Build automatique de l'image Raspberry Pi OS

@VonOx Je créé un sujet pour parler du développement !

Du coup, on se fait un nginx-proxy léger pour indiquer que l’image est en cours d’installation ? :slight_smile:

La page ( l’app plutôt ) doit pouvoir checker la partie docker , c’est pour ça que c’est en Go pour HA je penses ( histoire de pas chopper 200Mb de packages npm ).

L’idée c’est de renvoyer une landing page sur le même port que celui utilisé par Gladys avec tous les tracas qui vont avec ( si port 80 utilisé , Gladys ne se lancera pas ). J’ai pas trop réfléchi à ça , je sais pas si tu as déjà quelque chose en tête :slight_smile:

Je vois l’idée !

On peut se faire un petit backend en Go aussi, ça doit pas être si compliqué que ça :slight_smile:

En fait ce que je vois:

  • Un container qui sert une simple page HTML qui dit « Gladys est entrain d’être configurée. Nous téléchargeons la dernière version de Gladys depuis internet, selon votre connexion internet cela peut prendre de quelques minutes à une heure »

  • Idéalement, une progress bar affiche la progression du download, et les erreurs en cas d’erreur.

En fait, le process de first install peut limite faire:

  1. Pull + lance le container « d’attente » qui affiche la page d’attente, sur le port 80 (rapide si on fait un petit container qui est dispo en quelques Mo)
  2. Pull Gladys
  3. Stoppe + rm le container d’attente
  4. Lance Gladys + Watchtower

Pas de problème de port là :slight_smile:

J’avais fais un petit service qui s’occupait de créer les conteneurs , j’ai juste à gérer le docker d’attente en + . Une image qui sert une page statique ou non mais ultra léger. C’est l’OS qui gère

D’ailleurs je viens de m’apercevoir qu’il est pas à jour

Mais du coup on part sur la piste docker load ou docker pull ? :slight_smile:

Si on fait une page d’attente, le docker pull peut être ok, non ?

Oui oui docker pull , faut que j’update les scripts car plus besoin d’inclure les images docker à l’OS.

1 Like

Vite fait ça donne ceci

Creation du container landing
Pull du reste
Juste avant de créer le conteneur gladys, je stop delete le landing

#!/bin/sh

TIMEZONE=$(cat /etc/timezone)

docker_images_watchtower=$(docker images -q containrrr/watchtower)
docker_images_gladys=$(docker images -q gladysassistant/gladys)
docker_images_gladyslanding=$(docker images -q gladysassistant/gladyslanding)

# First boot, we need to be sure Landing image / container exist
if [ -n "$docker_images_gladyslanding" ]; then
  logger -t "gladys-init" "Gladys Landing image exist, Cool...."
else
  logger -t "gladys-init" "Gladys Landing image is missing, creating them...."
  docker run -d \
    --name gladys-landing \
    TODODODODODODODOD
fi

if [ -n "$docker_images_watchtower" ]; then
  logger -t "gladys-init" "Watchtower container exist, Cool...."
else
  logger -t "gladys-init" "Watchtower container missing, creating them...."
  docker run -d \
    --name watchtower \
    --restart=always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower \
    --cleanup
fi

if [ -n "$docker_images_gladys" ]; then
  logger -t "gladys-init" "Gladys container exist, Cool...."
else
  logger -t "gladys-init" "Gladys image is missing, pulling them...."
  docker pull gladysassistant/gladys:v4
  logger -t "gladys-init" "Gladys image is pulled, deleting landing container"
  docker stop gladys-landing && docker rm gladys-landing
  logger -t "gladys-init" "Gladys container is missing, creating them...."
  docker run -d \
    --restart=always \
    --privileged \
    --network=host \
    --log-opt max-size=10m \
    --name gladys \
    -e NODE_ENV=production \
    -e SERVER_PORT=80 \
    -e TZ=${TIMEZONE} \
    -e SQLITE_FILE_PATH=/var/lib/gladysassistant/gladys-production.db \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /var/lib/gladysassistant:/var/lib/gladysassistant \
    -v /dev:/dev \
    -v /run/udev:/run/udev:ro \
    gladysassistant/gladys:v4
fi

ça me semble bien dans l’idée !

Juste 2 choses:

  • Il faut trouver un autre nom que « gladys-landing ». Une landing page c’est un terme marketing, ça n’a rien à voir avec ce qu’on fait ici :slight_smile:
  • Pense à rajouter l’option --include-restarting à watchtower, ça permet à watchtower de mettre à jour même les containers qui sont en restart permanent, et donc de fixer une image complètement cassée :slight_smile: Je l’ai rajoutée sur le site aujourd’hui: https://gladysassistant.com/fr/docs/installation/docker

OK, pour le nom pas de soucis c’est une ébauche, j’ai rien push.

A watchtower il faut que je rajoute le scheduling aussi.
C’est du script mais ça fait le boulot.

Le scheduling ?

C’est déjà bon, 24h c’est le default désormais :slight_smile:

Sinon, je sais pas dans quelle repo tu as fais ça mais à mon avis fait le dans un repo séparé du repo Gladys principal :slight_smile:

Ah ok je savais pas, je pensais qu’il fallait d’autres settings

Tu parles de quoi, du « preparing container »?

gladys-waiting ça te va comme container/image ?

Je parle de tout ça ! Le build, le script, etc…

gladys-setup-in-progress sinon ? C’est verbose mais c’est explicite je trouve :slight_smile:

Ok on part sur ça, j’ai pas trop d’avis là dessus , c’est un peu comme les noms de variables… :slight_smile:

Il y’a déjà un repo pour le build de l’OS, je vais en faire pour le setup in progress

1 Like

J’ai fait une page statique avec un auto refresh toutes les 60 secondes

.

Si tu vois du blabla à rajouter…

L’image docker fait 23Mb

Edit:

J’ai voulu transférer le repo mais
image
Faudra qu’on regarde à l’occaze

1 Like

Nice! Ah du coup on abandonne le coup de l’image en Go? ^^

ça me va aussi l’image avec nginx, mais du coup on a pas de progress bar

Exact, le go c’était pour reprendre l’exemple HA, mais j’ai déjà du mal avec le javascript alors le GO ( je connais pas du tout) :sweat_smile:

1 Like

Je suis pas expert en Go mais ça a l’air assez simple :slight_smile:

Exemple d’un getContainers en Go avec le docker client:

Cf: client · pkg.go.dev

Après, je suis d’accord un container Nginx avec une image peut-être suffisant. Le seul truc qui m’inquiète c’est que l’utilisateur n’a aucun retour en cas d’erreur…

J’ai build une version de test que je n’ai pas testé en réél

Faut que je m’achète un rpi ( mes 2 autres sont utilisés )

https://github.com/VonOx/gladys-pi-gen/releases/download/v1.0.1/gladys-os-rpi-lite.zip

Salut !
Je l’ai téléchargée, extraite, « gravée » et insérée dans un RPi 2 (headless) et… rien.
J’ai mal fait qqch ?
Elle est prévue pour un RPi 2 ou je dois la mettre dans le RPi 4 ?
En passant, le lien que tu as fourni renvoie vers « https://gladys-os-rpi-lite.zip/ »…

J’ai branché le RPi sur un écran et j’ai un bootloop. Le dernier message que j’ai aperçu est ‹ failed to come online ›
Je réessayerai plus tard depuis le début mais après plusieurs reboot ça a fini par se stabiliser. Malheureusement, j’ai un ‹ connection refused › quand j’essaye d’accéder à la page d’accueil