# Build automatique de l'image Raspberry Pi OS

**URL:** <https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124>\
**Category:** Développement\
**Created:** [Février 22, 2021, 3:56 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124 "2021-02-22T15:56:57Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Février 22, 2021, 3:56 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/1 "2021-02-22T15:56:58Z")

</div>

@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 ? 🙂

---

<div class="post-metadata">

**Author:** ![VonOx](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/vonox/32/10128_2.png) [@VonOx](https://community.gladysassistant.com/u/VonOx)\
**Post date:** [Février 22, 2021, 4:06 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/2 "2021-02-22T16:06:48Z")

</div>

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 🙂

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Février 22, 2021, 4:13 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/3 "2021-02-22T16:13:35Z")

</div>

> [@VonOx](#):
>
> 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 ).

Je vois l’idée !

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

En fait ce que je vois:

- Un container qui sert une simple page HTML qui dit «&nbsp;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&nbsp;»

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

> [@VonOx](#):
>
> si port 80 utilisé , Gladys ne se lancera pas

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

1. Pull + lance le container «&nbsp;d’attente&nbsp;» 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à 🙂

---

<div class="post-metadata">

**Author:** ![VonOx](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/vonox/32/10128_2.png) [@VonOx](https://community.gladysassistant.com/u/VonOx)\
**Post date:** [Février 22, 2021, 4:25 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/4 "2021-02-22T16:25:46Z")

</div>

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  
[https://github.com/VonOx/gladys-pi-gen/blob/gladys/gladys/02-init-gladys/files/init-containers.sh](https://github.com/VonOx/gladys-pi-gen/blob/gladys/gladys/02-init-gladys/files/init-containers.sh)

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Février 22, 2021, 4:28 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/5 "2021-02-22T16:28:00Z")

</div>

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

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

---

<div class="post-metadata">

**Author:** ![VonOx](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/vonox/32/10128_2.png) [@VonOx](https://community.gladysassistant.com/u/VonOx)\
**Post date:** [Février 22, 2021, 4:34 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/6 "2021-02-22T16:34:50Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![VonOx](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/vonox/32/10128_2.png) [@VonOx](https://community.gladysassistant.com/u/VonOx)\
**Post date:** [Février 22, 2021, 5:27 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/7 "2021-02-22T17:27:51Z")

</div>

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

```auto
#!/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

```

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Février 22, 2021, 5:39 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/8 "2021-02-22T17:39:05Z")

</div>

ç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 🙂
- 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 🙂 Je l’ai rajoutée sur le site aujourd’hui: [Docker | Gladys Assistant](https://gladysassistant.com/fr/docs/installation/docker)

---

<div class="post-metadata">

**Author:** ![VonOx](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/vonox/32/10128_2.png) [@VonOx](https://community.gladysassistant.com/u/VonOx)\
**Post date:** [Février 22, 2021, 5:44 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/9 "2021-02-22T17:44:35Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Février 22, 2021, 5:52 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/10 "2021-02-22T17:52:57Z")

</div>

Le scheduling ?

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

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 🙂

---

<div class="post-metadata">

**Author:** ![VonOx](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/vonox/32/10128_2.png) [@VonOx](https://community.gladysassistant.com/u/VonOx)\
**Post date:** [Février 22, 2021, 6:06 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/11 "2021-02-22T18:06:42Z")

</div>

> [@pierre-gilles](#):
>
> C’est déjà bon, 24h c’est le default désormais

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

> [@pierre-gilles](#):
>
> 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 🙂

Tu parles de quoi, du «&nbsp;preparing container&nbsp;»?

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

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Février 22, 2021, 6:35 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/12 "2021-02-22T18:35:02Z")

</div>

> [@VonOx](#):
>
> Tu parles de quoi, du « preparing container »?

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

> [@VonOx](#):
>
> gladys-waiting ça te va comme container/image ?

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

---

<div class="post-metadata">

**Author:** ![VonOx](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/vonox/32/10128_2.png) [@VonOx](https://community.gladysassistant.com/u/VonOx)\
**Post date:** [Février 22, 2021, 6:45 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/13 "2021-02-22T18:45:12Z")

</div>

> [@pierre-gilles](#):
>
> gladys-setup-in-progress sinon ? C’est verbose mais c’est explicite je trouve

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

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

---

<div class="post-metadata">

**Author:** ![VonOx](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/vonox/32/10128_2.png) [@VonOx](https://community.gladysassistant.com/u/VonOx)\
**Post date:** [Février 28, 2021, 7:18 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/14 "2021-02-28T19:18:04Z")

</div>

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

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/4/438c4b97ac0bbd6fb9cab8a3804f1965ace9ef7d.png) .

Si tu vois du blabla à rajouter…

L’image docker fait 23Mb

Edit:

J’ai voulu transférer le repo mais  
 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/5/524b4575dc4c48d9966e74597a737d733feb5557.png)  
Faudra qu’on regarde à l’occaze

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Mars 1, 2021, 4:05 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/15 "2021-03-01T04:05:37Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![VonOx](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/vonox/32/10128_2.png) [@VonOx](https://community.gladysassistant.com/u/VonOx)\
**Post date:** [Mars 1, 2021, 7:48 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/16 "2021-03-01T07:48:45Z")

</div>

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) 😅

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Mars 1, 2021, 7:56 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/17 "2021-03-01T07:56:30Z")

</div>

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

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

 ![Screenshot 2021-03-01 at 14.55.00](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/5/5660fc757938ddec4501b3b908583cbb826c3fe1.png)

Cf: [client package - github.com/ph/moby/client - pkg.go.dev](https://pkg.go.dev/github.com/ph/moby/client#Client.ImagePull)

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…

---

<div class="post-metadata">

**Author:** ![VonOx](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/vonox/32/10128_2.png) [@VonOx](https://community.gladysassistant.com/u/VonOx)\
**Post date:** [Mars 6, 2021, 11:59 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/18 "2021-03-06T11:59:50Z")

</div>

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](https://gladys-os-rpi-lite.zip)

---

<div class="post-metadata">

**Author:** ![GBoulvin](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/gboulvin/32/10006_2.png) [@GBoulvin](https://community.gladysassistant.com/u/GBoulvin)\
**Post date:** [Mars 6, 2021, 1:07 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/19 "2021-03-06T13:07:32Z")

</div>

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/](https://gladys-os-rpi-lite.zip/)”…

---

<div class="post-metadata">

**Author:** ![GBoulvin](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/gboulvin/32/10006_2.png) [@GBoulvin](https://community.gladysassistant.com/u/GBoulvin)\
**Post date:** [Mars 6, 2021, 1:53 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/20 "2021-03-06T13:53:22Z")

</div>

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

[Page suivante](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124.md?page=2)
