# 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:** 2

<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, 2:41 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/21 "2021-03-06T14:41:35Z")

</div>

Ne ré essaye pas je sais pourquoi ça déconne, je vais refaire un build ce soir en corrigeant le problème. ( j’ai des bandes à faire avant qu’il fasse noir 😅)

Merci pour le retour.

---

<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 8, 2021, 9:59 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/22 "2021-03-08T09:59:09Z")

</div>

J’ai amélioré le CI

Nouveau build =\> [Release v1.0.3 · VonOx/gladys-pi-gen · GitHub](https://github.com/VonOx/gladys-pi-gen/releases/tag/v1.0.3)

Pas testé en réél non plus

**1er démarrage**

Partition de la carte SD étendue  
Reboot  
Création du conteneur de setup puis Watchtower et Gladys

**Note:**

Lors de la 1ère connexion en SSH vous devrez modifier le password ( gladys/raspberry par défaut )  
Pendant la phase de création des conteneurs une page d’attente est disponible à [http://IP.DU.PI](http://IP.DU.PI) ou [http://gladys](http://gladys)

---

<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 15, 2021, 9:33 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/23 "2021-03-15T09:33:09Z")

</div>

Je up un peu si certain ont du temps pour tester et faire un feedback , je fais tout un peu à l’aveugle car j’ai pas de PI pour tester.

Merci d’avance 🙏

---

<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 15, 2021, 10:05 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/24 "2021-03-15T10:05:46Z")

</div>

@VonOx Je sais pas si tu connais:

> **[GitHub - lukechilds/dockerpi: A Virtualised Raspberry Pi inside a Docker image](https://github.com/lukechilds/dockerpi)**
>
> A Virtualised Raspberry Pi inside a Docker image. Contribute to lukechilds/dockerpi development by creating an account on GitHub.

ça te permettra de tester tes images 😉

Sinon il existe des Raspberry Pi qu’on peut louer en ligne:

> **[Dedicated server: Raspberry Pi 4 micro server](https://www.ikoula.com/en/dedicated-server/raspberry-pi-4-micro-server)**
>
> Discover the new raspberry pi 4 micro server by Ikoula for € 9.99

C’est des serveurs cloud Raspberry Pi, à 4.99€/mois. Tu peux en faire pop un pour tester, je sais pas si c’est possible de payer à la minute, si oui c’est vraiment clé en main pour les tests comme ça ^^

Si non il y a aussi: [Raspberry Pi - Mythic Beasts](https://www.mythic-beasts.com/order/rpi)

---

<div class="post-metadata">

**Author:** ![cicoub13](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/cicoub13/32/4482_2.png) [@cicoub13](https://community.gladysassistant.com/u/cicoub13)\
**Post date:** [Mars 20, 2021, 10:03 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/25 "2021-03-20T10:03:42Z")

</div>

Hello. J’ai testé ce matin avec un RPI3A+ et ça a marché du premier coup 💪

Environ 1 minute avant l’affichage de la page :

 ![Capture d’écran 2021-03-20 à 10.54.00](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/d/d981a8c441f2d6a0d4fc417dce1c1a36a6cda5da.jpeg)

Puis 4-5 minutes pour télécharger Gladys et l’installer (direct en dernière version 😍)

 ![Capture d’écran 2021-03-20 à 11.00.00](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/f/f4767351c38a1245ed11569dcb381befa107bb37.png)

Juste un petit détail, j’ai l’impression que la page d’attente se rafraichit toute seule, mais il y a un moment (je pense quand l’image Gladys démarre) où la page affiche une erreur. Il faut alors rafraichir manuellement. Je pense que ça va être dur de faire mieux.

---

<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 20, 2021, 10:20 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/26 "2021-03-20T10:20:51Z")

</div>

Oui j’ai mis un autorefresh pour que ça tombe sur Gladys quand le conteneur est détruit ( 60 secondes ) peut être que je devrai mettre plus. Tu as du tomber pile quand le conteneur d’attente est détruit et que Gladys n’est pas complétement up ( joue au loto car c’est une histoire de seconde ^^ )

Merci pour le feedback @cicoub13

---

<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 20, 2021, 10:54 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/27 "2021-03-20T10:54:24Z")

</div>

> [@VonOx](#):
>
> joue au loto car c’est une histoire de seconde ^^ )

😂😂

Beau boulot en tout cas @VonOx !

Il te manque des trucs du coup pour que cette image raspberry pi soit “parfaite” ?

---

<div class="post-metadata">

**Author:** ![Tlse-vins](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/tlse-vins/32/6054_2.png) [@Tlse-vins](https://community.gladysassistant.com/u/Tlse-vins)\
**Post date:** [Mars 20, 2021, 11:06 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/28 "2021-03-20T11:06:40Z")

</div>

C’est une bonne nouvelle, ça évitera d’attendre 24h.

---

<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 20, 2021, 11:17 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/29 "2021-03-20T11:17:45Z")

</div>

> [@VonOx](#):
>
> Oui j’ai mis un autorefresh pour que ça tombe sur Gladys quand le conteneur est détruit ( 60 secondes )

Tu voudrais pas mettre une requête GET en JS sans refresh pour éviter que l’utilisateur se retrouve sur une page “cassée” ?

Genre tu poll toutes les 10 secondes le endpoint de Gladys pour savoir si elle est up et tu refresh quand c’est finalement plus en 404

---

<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 20, 2021, 11:24 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/30 "2021-03-20T11:24:20Z")

</div>

Le hic c’est que gladys ne se lancera pas si le port ( 80) est déjà utilisé.

C’est pour ça que j’ai mis un auto refresh côté browser, mais c’est un peu roulette russe comme méthode.

Quand @cicoub13 à eu l’erreur, le conteneur de setup n’existe plus

---

<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 20, 2021, 11:35 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/31 "2021-03-20T11:35:36Z")

</div>

Je redétail un peu le flow de l’image:

- 1er démarrage , préparation OS ( expand partition / génération nouvelle clé ssh etc )
- Reboot
- Création du conteneur de setup ( nginx sur port 80 ) , la page se refresh toute les 60s
- Création du conteneur Watchtower
- Pull de la dernière image Gladys
- Quand l’image est pull, le conteneur de setup est détruit et Gladys est lancée sur le port 80 libéré juste avant.

Y’a probablement moyen de faire mieux ou plus smart. Je suis ouvert à toute suggestion

---

<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 20, 2021, 12:04 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/32 "2021-03-20T12:04:59Z")

</div>

> [@VonOx](#):
>
> Le hic c’est que gladys ne se lancera pas si le port ( 80) est déjà utilisé.

Oui oui, mais si le frontend est déjà lancé il restera dans le navigateur de l’utilisateur, même après le stop du container

Je parle de faire un GET en silencieux en JS (en gardant la page sans refresh) pour détecter justement tout ce lifecycle

---

<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 20, 2021, 12:43 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/33 "2021-03-20T12:43:51Z")

</div>

OK je penses avoir pigé l’idée

Je garde le flux actuel avec les conteneurs, je vire le refresh.

Dans la page de setup un bout de js qui refresh quand le endpoint est dispo

---

<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 20, 2021, 2:09 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/34 "2021-03-20T14:09:34Z")

</div>

Yes c’est ça 🙂 mais sinon GG pour le reste, ça rendra l’installation bien plus comprehensible pour tout le monde !

---

<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 20, 2021, 2:24 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/35 "2021-03-20T14:24:07Z")

</div>

C’est fait j’ai build une nouvelle image docker pour le container setup, pas besoin de build une nouvelle image raspberry 🙂

Le js que j’ai ajouté ( merci stackoverflow 😃 )

```auto
setInterval(detectGladysContainer, 30000);

var currentHostname = window.location.hostname;
var gladysUrl = 'http://' + currentHostname + '/signup';

function detectGladysContainer() {
    var myRequest = new Request(gladysUrl);
    fetch(myRequest).then(function (response) {
        if (response.status == '200') {
            window.location.replace(gladysUrl);
        }
    });
};

detectGladysContainer();

```

---

<div class="post-metadata">

**Author:** ![cicoub13](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/cicoub13/32/4482_2.png) [@cicoub13](https://community.gladysassistant.com/u/cicoub13)\
**Post date:** [Mars 20, 2021, 2:54 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/36 "2021-03-20T14:54:21Z")

</div>

Ça marche nickel 👌

 ![Capture d’écran 2021-03-20 à 15.53.39](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/2/2b61e55ebc894026bd310123df387558d59b9b50.jpeg)

---

<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 20, 2021, 3:16 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/37 "2021-03-20T15:16:18Z")

</div>

Cool ça fait plaisir

Faudra qu’on voit pour le transfert de repos @pierre-gilles et que je rebuild l’image raspberry pour pull la bonne 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:** [Mars 21, 2021, 11:12 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/38 "2021-03-21T11:12:52Z")

</div>

Tu peux mettre plus rapide que 30 secondes à mon avis, 5 secondes ça me parait mieux ! C’est pas une petite requête qui va faire de mal 🙂

Pour le transfert de repo comme tu veux, il y a quoi à faire ? Juste copier le repo ?

Après il faudra setup le CI (ou tu l’as déjà fais?)

Sinon autre questions:

- le hostname est bien gladys ?
- par rapport à l’image actuelle, qu’est ce qui diffère ?

Sinon beau boulot j’ai hâte de mettre ça en prod! Je vais essayer de faire un test demain pour voir ce que ça donne 🙂

---

<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 21, 2021, 12:05 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/39 "2021-03-21T12:05:20Z")

</div>

> [@pierre-gilles](#):
>
> Tu peux mettre plus rapide que 30 secondes à mon avis, 5 secondes ça me parait mieux ! C’est pas une petite requête qui va faire de mal

Oui j’avais mis 5 secondes puis ça m’as semblé un peu bourrin 😃

> [@pierre-gilles](#):
>
> Pour le transfert de repo comme tu veux, il y a quoi à faire ? Juste copier le repo ?

Soit tu récupère tel quel ( tout en manuel et perte de l’historique ), soit je fais un transfert de owner côté github ( actuellement je ne peux pas transfert sur l’org car il faut avoir le droit de créer un repo ).

> **[Transferring a repository - GitHub Docs](https://docs.github.com/en/repositories/creating-and-managing-repositories/transferring-a-repository)**
>
> You can transfer repositories to other users or organization accounts.

> [@pierre-gilles](#):
>
> Après il faudra setup le CI (ou tu l’as déjà fais?)

Le CI est prêt mais configuré avec mon dockerhub pour les tests etc… mais il est fonctionnel.  
Aussi bien pour l’image RPI que l’image docker de setup

> [@pierre-gilles](#):
>
> le hostname est bien gladys ?

Oui

> [@pierre-gilles](#):
>
> par rapport à l’image actuelle, qu’est ce qui diffère ?

L’utilisateur par défaut ( gladys )  
Nécessité de changer le pass lors de la 1ère connexion SSH  
Règles UDEV ( pas exploité aujourd’hui )

Faut que je récupère ce que tu as définie au niveau update de sécurité

---

<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 21, 2021, 12:15 UTC](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124/40 "2021-03-21T12:15:26Z")

</div>

> [@VonOx](#):
>
> Soit tu récupère tel quel ( tout en manuel et perte de l’historique )

On perdra pas l’historique si je pousse le repo, pas juste les fichiers 🙂 git clone + git push sur un autre origine

> [@VonOx](#):
>
> L’utilisateur par défaut ( gladys )

Est-ce qu’on veut vraiment changer ça?

J’aimais bien l’idée de garder les mêmes identifiants que l’image Raspberry Pi OS officielle pour que ce soit facile à comprendre que c’est juste la même image Raspberry Pi que l’image officielle, et que les identifiants sont les mêmes.

> [@VonOx](#):
>
> Faut que je récupère ce que tu as définie au niveau update de sécurité

Yes ça c’est crucial. Tu as juste à installer un paquet c’est pas dur

> [@VonOx](#):
>
> Nécessité de changer le pass lors de la 1ère connexion SSH

Autre remarque, est-ce que tu sais si on aurait moyen d’exposer à l’image Docker les droits pour pouvoir changer le mot de passe de l’utilisateur linux ?

Pour moi, il faut vraiment penser l’image Raspberry Pi OS qu’on va fournir comme un produit qu’on distribue dans la grande distribution, pour un public qui veut juste utiliser Gladys, il branche le pi et il y touche plus. 90% des utilisateurs ne se connecteront jamais en SSH à Gladys.

Du coup, si on veut que ce soit secure pour tout le monde par défaut, il faudrait limite que Gladys change le mot de passe linux dès le premier boot, et expose ce mot de passe à l’utilisateur dans l’UI (l’utilisateur pourrait aussi changer le mot de passe dans l’UI). Donc il faudrait que le container Gladys ait les droits pour ça.

T’en pense quoi ?

Ou alors, il faudrait que l’image rasp change d’elle même le mot de passe et expose le nouveau mot de passe à Gladys au lancement. Je sais pas 🙂

[Page précédente](https://community.gladysassistant.com/t/build-automatique-de-limage-raspberry-pi-os/6124.md?page=1)

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