Projet

Général

Profil

Habib Belaribi

Entretien d'entrée

cadre du stage : "licence pro Adsillh": https://dept-info.labri.fr/adsillh
dates de stage : de septembre 2021 à janvier 2022 (16 semaines)


Journal de bord

Machine personnelle : Thinkpad Lenovo L540 avec Debian 10.

  • Accès :
    • en SSH au serveurs :
    • au NAS (serveurs de stockage de fichiers) du fablab : ?
  • Liens fréquemment utilisés :
  • Missions du stage :
    • ré-écriture de la BDD d'adhésions (pgsql) et de ses liaisons avec les outils de documentation (redmine) et d'information (mail) : [[serveur:Base_de_données]]
    • évolution de l'environnement de documentation des usagers du fablab, et mise en place technique : [[serveur:Portail_web]]
    • conception, mise en place technique et documentation sous licence libre des capteurs de température-humidité "thermo_bibli" (nom provisoire) : Thermo-Bibli
      • basculement du serveur (en tant que client) d'OpenVPN à [[serveur:VPN_Wireguard]]
      • diagnostic RGPD
      • projets qui se présentent en cours de route : SSL_light

fin mars

-- projet [[serveur:Portail_web]] : portfolios [17,18,19]

---- Tutoriel pour les étudiants

Nouvelle version avec les retours de la précédente réunion de mi-mars.

J'ai réalisé 3 documents à imprimer comme supports lors de la création d'un portfolio:
  • capture d'écran légendée de la 1ère section du site
  • tableau des FICHIERS SOURCE
  • tableau des types d'ACTIONS D'EDITION

Nouvelle réunion (visio) le 25 mars avec retours de Thierry et de Jean-Baptiste.

---- Création d'un daemon pour le déploiement continu

(NB : solution temporaire en attendant la résolution du "git hook" + "un script unique pour tous les portfolios"
En attendant, il est nécessaire de créer un service avec script dédié pour chaque portfolio créé !)

Sources utiles : https://www.commandlinux.com/man-page/man5/systemd.service.5.html , https://tecadmin.net/run-shell-script-as-systemd-service/

1. Créer un nouvel utilisateur etudiant et une Bifurcation du modèle de protfolio (sur git.cohabit.fr)

a. On crée un nouveau compte utilisateur pour l'étudiant avec le nommage suivant : <prenomdeletudiant>.<nomdeletudiant>
b. Puis, en se connectant à partir de son compte (ou directement côté serveur), on "fork" le dépôt suivant : https://git.cohabit.fr/portfolios/modele-de-depart
NB. nommer le nouveau dépôt ainsi : <prenomdeletudiant>-<nomdeletudiant>

2. Créer le fichier de conf du service

Après plusieurs essais erreurs de la configuration d'un nouveau service portfolios-test-thierry-bombardier.service, puis portfolios-thierry-bombardier.service dans /etc/systemd/system, voici le contenu du fichier de configuration actuellement fonctionnel.

[Unit]
Description=déploiement continu du portfolio thierry-bombardier
After=networking.service gitea.service

[Service]
Type=idle
ExecStart=/bin/bash /home/habsinn/projets.cohabit.fr/portfolios/scripts/thierry-bombardier.sh

Restart=on-success
RemainAfterExit=yes
StartLimitInterval=30

[Install]
WantedBy=multi-user.target
3. Créer un fichier bash du script de déploiement continu

En veillant à indiquer le même chemin que sur le fichier de configuration du .service (actuellement : /home/habsinn/projets.cohabit.fr/portfolios/scripts/* )

Exemple du script /home/habsinn/projets.cohabit.fr/portfolios/scripts/thierry-bombardier.sh :

#!/bin/bash

#on copie le dépot gitea du portfolio de l'étudiant
prenom=thierry #indiquer ici le prénom de l'étudiant tel qu'il a été créé sur git.cohabit.fr
nom=bombardier #indiquer ici le nom de famille de l'étudiant tel qu'il a été créé sur git.cohabit.fr
giteaDir=$prenom-$nom
deployDir=$giteaDir
deployPath=/var/www/html/portfolios

cd $deployPath
git clone /var/lib/gitea/data/gitea-repositories/$prenom.$nom/${giteaDir}.git
cd $deployPath/$deployDir #on se rend dans le dossier de déploiement des portfolios
git config pull.rebase false

while true
do
  git pull /var/lib/gitea/data/gitea-repositories/$prenom.$nom/${giteaDir}.git #clonage directement depuis l'emplacement du dépôt gitea sur le serveur, pas de passage par le réseau
  echo "le git pull a donné le stdout suivant : $?" 
  sleep 2
done
4. Démoniser le service

Remplacer "thierry" et "bombardier" par le nom de l'étudiant concerné :

systemctl enable portfolios-thierry-bombardier.service
systemctl start portfolios-thierry-bombardier.service
systemctl status portfolios-thierry-bombardier.service

Le démon fait tourner le script /home/habsinn/projets.cohabit.fr/portfolios/scripts/thierry-bombardier.sh qui contient les instructions suivantes :

DIFFICULTÉ : comment redémarrer le script en permanence ?
  • options Restart=OnSuccess + StartLimitInterval=30 insuffisantes
  • solution temporaire : ajout d'une boucle infinie dans le script bash exécuté "while true // do // ... //done"

première moitié de mars

-- projet [[serveur:Portail_web]] : portfolios [13,14,15,16]

QQOQCP du projet

Réunion avec Léa, Thierry, Jean-Baptiste.

Création d'une page simple de description générale du projet avec les enjeux :

# Tâche : ajouter les 3 arguments :
# - lettrisme numérique
# - collaboration (enseignant-étudiant, étudiant-étudiant) VS relation plateformePrivative-étudiantIsolé
# - pérennité (langages, hébergement : nom de domaine + adresse email personnelle)

Tutoriel de création d'un site portfolio pour les étudiants

Choix pédagogique : pour la pérennité, on axe le lettrisme sur la découverte du html+css+js uniquement (dont on peut raisonnablement présumer qu'ils existeront encore dans 20 ans, ce qui n'est pas le cas du framework Hugo)
  • on abandonne l'idée de modifier les fichier Hugo sur le gitea, le tutoriel s'axera sur la modifications des fichiers et images contenus dans le dossier /public du site en Hugo (qui correspond au site en Hugo transpilé en html+css+js)

Retour utilisatrice de Léa :
Liste des fichiers les plus utilisés.

Améliorations du portfolio de Léa (alpha testeuse)

Son portfolio : https://projets.cohabit.fr/portfolios/lea-jean/

Affichage des images dans les pages de réalisation
  • problème : "impossible d'afficher l'image"
  • fichier-chemin concerné dans le code en Hugo : /content/project/distributeur/*
  • résolu : mauvais chemin des images dans le index.md /portfolios/lea-jean
Bouton "Lire mon CV"
  • problème : mauvaise redirection d'URL dans le site déployé
  • ficher-chemin concerné dans le code en Hugo : /layouts/partials/widget/hero.html
  • résolu : remplacer le href="files/cv.pdf" en href="/portfolios/lea-jean/files/cv.pdf"
Bouton "En savoir plus..."
  • problème : le widget /layouts/partials/widget/accomplishments.html ne s'affiche pas via /content/knowmore/*
  • ficher-chemin concerné dans le code en Hugo : /content/authors/admin , /layouts/partials/widget/about.html et /layouts/partials/widget/accomplishments.html
  • résolu : piste à tester par Léa

Déploiement du portfolio de Léa

Script de déploiement manuel :
  • chemin : /home/habsinn/projets.cohabit.fr/portfolios
  • modification du script (ajout de variables, changement du chemin vers le dossier déployé):
    #!/bin/bash
    
    #on copie le dépot gitea du portfolio de l'ét>
      giteaDir=portfolios_lea-jean
      deployDir=lea-jean
      deployPath=/var/www/html/portfolios
    
      cd $deployPath #on se rend dans le dossier >
      rm -rf $giteaDir #on supprime la version de>
      git clone https://git.cohabit.fr/lea.jean/$>
      cd $giteaDir #on se rend dans le dépôt du p>
      hugo --destination public #on transpile le >
      cp -r public/* ${deployPath}/${deployDir}/ >
    
    #on redémarre le serveur web
    systemctl restart apache2
    

mi-février

-- projet [[serveur:Portail_web]] : portfolios [13,14,15,16]

Création du script de déploiement continu (git hook)

1. choix du hook : update ? post-update ?
2. finalement post-receive
3. questions des droits pour chaque commande lancée dans le script par l'utilisateur gitea:gitea

gitea@projets:/var/lib/gitea/data/gitea-repositories/habib/hook_test.git/hooks$ ./post-receive
rm: impossible de supprimer '/home/habsinn/projets.cohabit.fr/portfolios/hook_test': Permission non accordée
mkdir: impossible de créer le répertoire « /home/habsinn/projets.cohabit.fr/portfolios/hook_test2 »: Permission non accordée
Clonage dans 'hook_test'...
remote: Énumération des objets: 861, fait.
remote: Décompte des objets: 100% (861/861), fait.
remote: Compression des objets: 100% (564/564), fait.
remote: Total 861 (delta 212), réutilisés 770 (delta 183), réutilisés du pack 0
Réception d'objets: 100% (861/861), 50.06 Mio | 90.40 Mio/s, fait.
Résolution des deltas: 100% (212/212), fait.
./post-receive: ligne 17: /tmp/commit-master: Permission non accordée
Error: Unable to locate config file or config directory. Perhaps you need to create a new site.
       Run `hugo help new` for details.
Total in 0 ms
cp: impossible d'évaluer '/home/habsinn/projets.cohabit.fr/portfolios/hook_test/public/*': Aucun fichier ou dossier de ce type
rm: impossible de supprimer '/home/habsinn/projets.cohabit.fr/portfolios/hook_test': Permission non accordée
mv: impossible d'évaluer '/home/habsinn/projets.cohabit.fr/portfolios/hook_test2': Aucun fichier ou dossier de ce type
fatal: le chemin de destination 'hook_test' existe déjà et n'est pas un répertoire vide.
./post-receive: ligne 16 : cd: /home/habsinn/projets.cohabit.fr/portfolios/hook_test: Aucun fichier ou dossier de ce type
Error: Unable to locate config file or config directory. Perhaps you need to create a new site.
       Run `hugo help new` for details.

Total in 0 ms
cp: impossible d'évaluer '/home/habsinn/projets.cohabit.fr/portfolios/hook_test/publigitea@pgitggitea@projegigggitea@projets:/var/lib/gitea/data/gitea-repositories/habib/hook_test.git/hooks$ ./post-receive
fatal: le chemin de destination 'hook_test' existe déjà et n'est pas un répertoire vide.
./post-receive: ligne 16 : cd: /home/habsinn/projets.cohabit.fr/portfolios/hook_test: Aucun fichier ou dossier de ce type
Error: Unable to locate config file or config directory. Perhaps you need to create a new site.
       Run `hugo help new` for details.

Total in 0 ms
cp: impossible d'évaluer '/home/habsinn/projets.cohabit.fr/portfolios/hook_test/public/*': Aucun fichier ou dossier de ce type

mercredi 2, jeudi 3,vendredi 4 février

-- projet [[serveur:Portail_web]] : portfolios [12]

Création du script de déploiement continu (git hook)

Objets qui forment l'app gitea sur le serveur du fablab :
  • 1 fichier de configuration : /etc/gitea/app.ini
  • 1 dossier avec les dossiers .git / spécifiques à chaque dépôt : /var/lib/gitea/data/gitea-repositories/*
  • 1 base de données postgresl nommée "gitea" (/var/lib/gitea/data/gitea.db , 127.0.0.1:5432 ) . Pour s'y connecter et lister ses tables, faire dans l'ordre :

sudo -i -u gitea
psql

\l
\conninfo
\dt

---
Questions :

  • comment éviter de cloner un dépôt en sortant sur le réseau avec l'adresse publique https://git.cohabit.fr ?
    • idée : hardlink vers l'endroit où les dépôts sont directement stockés

1. Création d'un dépôt test hook_test sur le serveur dans /home/habsinn/projets.cohabit.fr/portfolios/

2. Création d'un dépôt distant : https://git.cohabit.fr/habib/hook_test

3. Liaison avec le dépôt distant : git remote add origin https://git.cohabit.fr/habib/hook_test

4. Test de la suite de commande du script :
  • On veut récupérer (uniquement) le hash du dernier commit via le stdout d'un git log : git log -n 1 --pretty=format:"%H" > /tmp/commit-master (source : https://stackoverflow.com/questions/15677439/command-to-get-latest-git-commit-hash-from-a-branch )
  • On teste de modifier le dépôt sur l'interface gitea et de pusher sur master pour voir si le stdout de git log -n 1 --pretty=format:"%H" change : c'est le cas.
  • On teste si le fichier "../hooks/update" est bien affecté lorsqu'on push sur master via l'interface gitea, en y ajoutant une ligne de commande simple : git log -n 1 --pretty=format:"%H" > /tmp/commit-master
    • ça marche avce un commit de retard
    • on remet le contenu du fichier update par défaut (update.sample)
    • on modifie le fichier post-update à la place
    • on refait un push directement sur l'interface gitea dans le dépôt hook_test
    • cette fois, le hook fonctionne : onr etrouve le bon numéro du dernier commit à l'intérieur du fichier /tmp/commit-master
  • suite du script post-update (en cours de test) :
    git log -n 1 --pretty=format:"%H" > /tmp/commit-master #ça fonctionne
    cd /var/www/html/portfolios #on va là où se trouvent tous les dépôts des portfolios
    mkdir hook_test #ça ne marche pas à partir de cette ligne (ou de la précédente)
    # rm -rf hook_test #on supprime un dossier existant portant le même nom$
    # git clone https://git.cohabit.fr/habib/hook_test.git #on clone le dép$
    # hugo --destination public
    # cp -r hook_test/public/* ./hook_test2/ #on copie le contenu compilé à$
    # rm -rf hook_test
    # mv hook_test2 hook_test
    

---
Il est important de différencier les hooks côté client des hooks côté server.
Tous les hooks côté server doivent être écrit dans un fichier "update" uniquement.

chmod u+x .git/hooks/update

Source : https://git-scm.com/book/en/v2/Customizing-Git-An-Example-Git-Enforced-Policy
---

5. je cherche où se trouve les contenus fichiers des dépôts gitea. Trouvé les .git/ de chaque dépôt mais pas le contenu code source des dépôts.

zshrc

Ajout d'alias pour aller plus vite sur certaines suites de commandes :

alias zshrc="cd /root && nano --linenumbers .zshrc" #ouvrir le fichier de config zshrc pour le modifier
alias hooktest="cd /var/lib/gitea/data/gitea-repositories/habib/hook_test.git/hooks" #se rendre dans le dossier des tests de hook pour le projet portfolios

mardi 1er février

-- projet [[serveur:Portail_web]] : portfolios [11]

Workflow local>gitea pour Léa

Script à adapter pour tous les futurs étudiants qui voudront se créer un portfolio avec le fablab :

#!/bin/bash

# Pour qui ?
############
## Les étudiants qui souhaitent travailler en local sur leur propre ordinateur, ou celui prêté par l'université ou leur entreprise.
## Ceux qui travaillent sur un ordinateur sous Debian (ou une distribution Linux).
## Ce script n'est prévu que pour 1 utilisateur par dépôt (l'étudiant), pour éviter une utilisation trop compliquée de git. 
## Licence CC0
############

#Pré-requis
###########
# 1. créer le compte utilisateur de l'étudiant, ici Léa Jean --> A AUTOMATISER !
# 2. créer un fichier .gitignore pour ne pas faire suivre le fichier .hugo_build.lock
# 3. créer un dépôt sur git.cohabit.fr et lui donner un nom de type 'portfolios_prenom-nom', ici on choisit 'portfolios_lea-jean'
# 4. renseigner le bon nom de dépôt dans le script, côté serveur
# Attention :  en local, ne pas travailler en utilisateur 'root' pour lancer ce script, mais avec son utilisateur habituel

#Variables : 
#############
prenom = $1
nom = $2
mondossier = $3
marevision = $4

#Corps du script :
##################

#renseigner le chemin du dossier dans lequel se trouve le code source complet de votre portfolio 
cd $mondossier

#création du .gitignore (à faire uniquement la première fois)
git init
touch .gitignore
echo ".hugo_build.lock" > .gitignore

#remplacement de la baseURL dans le fichier config (version Hugo du site internet)
sed -i 's/baseURL\ =\ "\/"/baseURL\ =\ "\/portfolios\/${prenom}-${nom}"/g' ./config/_default/config.toml

#build-er le site portfolio Hugo en site internet classique (html, css, js)
hugo --destination public

#ajout des modifications faites en local sur mon site portfolio, dans une révision ('commit')
git status
git add .
git commit -m "$marevision" 

#envoi d'une copie du site local vers le dépôt de l'étudiant sur git.cohabit.fr (à faire uniquement la première fois)
git remote add origin ssh://gitea@git.cohabit.fr:22222/${prenom}.${nom}/portfolios_${prenom}-${nom}.git
git push -u origin master

mardi 18, mercredi 19 janvier

-- projet [[serveur:Portail_web]] : portfolios [10]

Travail sur les tickets #426 et #428 :

  • #but : mettre une image Avatar OU supprimer le texte 'Avatar'
    Résolution: Dans /layouts/partials/widgets/about.html:

Suppression lignes 24 de:

{{ if site.Params.gravatar }}
<img class="portrait img-fluid" src="https://s.gravatar.com/avatar/{{ md5 $person.email }}?s=200')" 
        itemprop="image" alt="Avatar">
{{ else }}
<!--lignes sur avatar_image-->
{{ end }}

+ suppression des lignes qui peuvent porte à confusion :
  • 'avatar_image' dans /content/authors/admin/_index.md
  • 'gravatar = ' dans /content/home/about.md
  • #accueil et #but : justifier le texte des blocs texte de présentation

Dans ./layouts/partials/widgets/hero.html: repérage de la class 'text-md-left' qui effectue l'alignement à gauche.

Mais choix d'ajouter ce code CSS, à l'ensemble des paragraphes <p> du site, dans le fichier ./assets/sass/academia/_root.scss , lignes 46,
et de créer une classe "justify-text" dans le même fichier CSS, ligne 56 :

/* Body text */
p {
  margin-top: 0;
  margin-bottom: 1rem;
  margin-right: 1.5rem; /* ajout : pour aérer les blocs texte */
  text-align: justify; /* ajout 1 : pour justifier et centrer les blocs texte */
  display: flex; /* ajout 2 : pour justifier et centrer les blocs texte */
  justify-content: center; /* ajout 3 : pour justifier et centrer les blocs texte */
}

.justify-text-left {
  text-align: left; /* ajout 4 : pour overrider certains blocs textes justifiés, en les alignant à gauche */
}

Ajout de la classe "justify-text" dans le paragraphe concerné :

{{ with $page.Params.subtitle }}<p class="justify-text">{{ . | markdownify }}</p>{{ end }}

  • pages de description de chaque réalisation ./project/* : supprimer les icônes de medii sociaux
    Solution : inspecteur sur la zone concernée + git grep 'share-btn'
{{ if and site.Params.sharing (ne .Params.share false) }}
<!--div class="share-box" aria-hidden="true">
  <ul class="share">
    {{ range where site.Data.page_sharer.buttons "enable" true }}
      {{ $pack := or .icon_pack "fas" }}
      {{ $pack_prefix := $pack }}
      {{ if in (slice "fab" "fas" "far" "fal") $pack }}
        {{ $pack_prefix = "fa" }}
      {{ end }}
      {{ $link := replace .url "{url}" ($.Permalink | htmlEscape) }}
      {{ $link = replace $link "{title}" ($.Title | htmlEscape) }}
      <li>
        <a href="{{$link|safeURL}}" target="_blank" rel="noopener" class="share-btn-{{.id}}">
          <i class="{{$pack}} {{$pack_prefix}}-{{.icon}}"></i>
        </a>
      </li>
    {{ end }}
  </ul>
</div-->
{{ end }}

-- miscellanées

Coups de main à un stagiaire sur des opérations de réinstallation de distributions Debian (upgrade à debian 11) :
  • opérations d'optimisation après une nouvelle installation Debian ( swap , sudo , boot time )
  • problème pour trouver le boot order

lundi 17 janvier

-- projet [[serveur:Portail_web]] [9]

  • réunion avec Léa J !
    • retours sur l'usage du thème Hugo des [[serveur:Portail_web]]
    • création du groupe de tickets #426 par Léa
      • scinder les évolutions qui sont propres au portfolio de Léa, avec les évolutions mutualisables pour tous les portfolios étudiants à venir
  • création d'une page wiki sur la maintenance et l'intégration du site vitrine :
    • Tutoriel admin sys : [[serveur:Maintenance-du-site-vitrine]]

-- projet Thermo Bibli [9]

  • sur-consommation de données web sur le forfait 3G 200Mo du hotspot
    • suppression du réseau Wifi thermo bibli de la liste des réseaux disponibles sur le laptop d'Hassirou (la machine s'y connectait automatiquement)

-- visite de stage

Réunion avec Olivier Delmas et Pierre et Jean-Baptiste.


lundi 10 au vendredi 14 janvier

(notes papiers à retranscrire !! )

-- projet [[serveur:Portail_web]] [8]

  • réunion avec Pierre et jean-Baptiste
    • création de tickets :

jeudi 6, vendredi 7 janvier

-- projet [[serveur:Portail_web]] [7]

Changement de stratégie technique après échange avec Jean-Baptiste et Pierre:
  • on abandonne : intégrer le site en Hugo dans la page d'accueil du Redmine
  • on part sur : créer un site en Hugo directement à la racine du sous-domaine principal ( https://projets.cohabit.fr/ ), en modifiant le CSS pour ajouter un simili de la barre principale ("header" avec menu) du Redmine au-dessus du thème principale
1. Nettoyage :
  • remise en ligne du site vitrine précédent : https://projets.cohabit.fr/fablab/
  • remplacement du pointage vers les fichiers du site portfolio de Léa par un lien symbolique
2. Mise en ligne du thème Hugo de base reveal.js

SUITE : ajout des contenus et échange avec JB et Pierre & ajout de la barre "header" du redmine dans le css du site en Hugo & revoir les hyperliens

3. Retour à la STRATÉGIE #1 : d'intégration page d'accueil redmine : 4. Nouvelle idée proposée par Pierre: intégration d'u iframe :
  • intégration classique problème d'affichage de l'iframe sur écrans tablette/mobile
    • IMPORTANT AVANTAGE RESEAU : pas de risque de problème de certification SSL de la source cible de l'iframe, car la source est aussi hébergée sur notre propre serveur, comme le redmine. On a la main dessus !
  • passage à un iframe responsive en intégrant les lignes de codes suivantes :
  • dans le fichier /opt/redmine/redmine-4.2.1/app/views/layouts/base.html.erb , dans le <head> :
    <!-- AJOUT : par @habsinn du style CSS pour rendre l'iframe d'accueil responsive -->
    <style>
    .container-responsive-iframe {
      position: relative;
      width: 100%;
      overflow: hidden;
      padding-top: 45%; /* Hauteur:Largeur --> Aspect Ratio */
    }
    
    .responsive-iframe {
      position: absolute;
      top: 0;
      left: 0;
      bottom: 0;
      right: 0;
      width: 100%;
      height: 100%;
      border: none;
    }
    </style>
    <!-- FIN DE : ajout par @habsinn du style pour rendre l'iframe d'accueil responsive -->
    
  • dans le fichier /opt/redmine/redmine-4.2.1/app/views/welcome:index.html.erb , dans le <head> :
    <!--h2><%= l(:label_home) %></h2-->
    
    <div class="container-responsive-iframe">
      <div align="center"><iframe class="responsive-iframe" src="https://projets.cohabit.fr/vitrine/"></iframe></div>
    </div>
    

-- projet [[serveur:Base_de_données]] [7]

Échange et recueil de besoins avec Morgane Jacquet sur le thème des automatisations possibles des paiements/facturations des usagers du fablab.


mercredi 5 janvier

-- projet [[serveur:Portail_web]] [6]

Modification de la page d'accueil de l'app web Redmine (écrite principalement en Ruby on Rails) :

A. CHEMINS ET FICHIERS UTILES :

Dans /opt/redmine/redmine-4.2.1 :

/app/views/layouts/base.html.erb
/app/helpers/application_helper.rb
/app/views/welcome/index.html.erb
/public/stylesheets/vitrine/
/public/javascripts/vitrine/

B. CODE et FICHIERS COPIéS DEDANS :

####
CSS
####

<link rel="stylesheet" href="/reveal-js/css/reset.css">
<link rel="stylesheet" href="/reveal-js/css/reveal.css">
<link rel="stylesheet" href="/reveal-hugo/themes/robot-lung.css" id="theme">
<link rel="stylesheet" href="/highlight-js/color-brewer.min.css">

<style>
.reveal section pre {
  box-shadow: none;
  margin-top: 25px;
  margin-bottom: 25px;
  border: 1px solid lightgrey;
}
.reveal section pre:hover {
  border: 1px solid grey;
  transition: border 0.3s ease;
}
.reveal section pre > code {
  padding: 10px;
}
.reveal table {
  font-size: 0.65em;
}
.reveal section.side-by-side h1 {
  position: absolute;
}
.reveal section.side-by-side h1:first-of-type {
  left: 25%;
}
.reveal section.side-by-side h1:nth-of-type(2) {
  right: 25%;
}
.reveal section[data-background-image] a,
.reveal section[data-background-image] p,
.reveal section[data-background-image] h2 {
  color: white;
}
.reveal section[data-background-image] a {
  text-decoration: underline;
}
</style>

###########
JAVASCRIPT
###########

<script type="text/javascript" src=/reveal-hugo/object-assign.js></script>

<script src="/reveal-js/js/reveal.js"></script>

<script type="text/javascript">
  function camelize(map) {
    if (map) {
      Object.keys(map).forEach(function(k) {
        newK = k.replace(/(\_\w)/g, function(m) { return m[1].toUpperCase() });
        if (newK != k) {
          map[newK] = map[k];
          delete map[k];
        }
      });
    }
    return map;
  }

  var revealHugoDefaults = { center: true, controls: true, history: true, progress: true, transition: "slide" };
  var revealHugoSiteParams = JSON.parse(document.getElementById('reveal-hugo-site-params').innerHTML);
  var revealHugoPageParams = JSON.parse(document.getElementById('reveal-hugo-page-params').innerHTML);

  var options = Object.assign({},
    camelize(revealHugoDefaults),
    camelize(revealHugoSiteParams),
    camelize(revealHugoPageParams));
  Reveal.initialize(options);
</script>

<script type="text/javascript" src="/reveal-js/plugin/markdown/marked.js"></script>
<script type="text/javascript" src="/reveal-js/plugin/markdown/markdown.js"></script>
<script type="text/javascript" src="/reveal-js/plugin/highlight/highlight.js"></script>
<script type="text/javascript" src="/reveal-js/plugin/zoom-js/zoom.js"></script>
<script type="text/javascript" src="/reveal-js/plugin/notes/notes.js"></script>

<script type="text/javascript">
Reveal.addEventListener('slidechanged', function(event) {
  console.log("🎞️ Slide is now " + event.indexh);
});
</script>

######MIS DE côté#####
<!--script type="application/json" id="reveal-hugo-site-params">{"history":true,"slide_number":true,"templates":{"grey":{"background":"#424242","transition":"convex"}},"transition_speed":"fast"}</script-->
<!--script type="application/json" id="reveal-hugo-page-params">{"custom_theme":"reveal-hugo/themes/robot-lung.css","highlight_theme":"color-brewer","margin":0.1,"templates":{"hotpink":{"background":"#ff923f","class":"hotpink"}},"transition":"slide","transition_speed":"fast"}</script-->


lundi 3, mardi 4 janvier

-- projet [[serveur:Portail_web]] [5]

portfolios

Réunion avec Pierre : "dessiner une feuille de route" :
  • documentation sur [[serveur:Portail_web]]

Réunion avec Thierry et Léa : "retours sur le portfolio de Léa"

page vitrine

Incorporation du site Hugo (thème reveal.js) dans la page d'accueil redmine

(cf prise de notes papier à retranscrire !!!)

1. Installation d'un environnement redmine pour faire des tests localement sur ma machine (source utile : https://redmine.org/projects/redmine/wiki/HowTo_Install_Redmine_on_Debian_9 )

2. Installation d'un virtualhost Apache en production sur ma machine : en guise de zone de test

Sources utiles :

lundi 13 déc

-- oh-my-zsh

  • Alias créés :
    #ces 3 là fonctionnent : 
    alias zshrc="cd /home/habsinn && nano .zshrc" 
    alias vaportfolios="cd /home/habsinn/Documents/0.stage-fablab/4.portfolios/portfolios_fablab" 
    alias varedmine="cd /home/habsinn/Documents/0.stage-fablab/3.redmine_repo/redmine" 
    #la dernière ne fonctionne pas encore : 
    va () {
      cd $1 && ls -ail | grep $2
    }
    

prochaine étape : faire fonctionner le dernier alias à 2 paramètres.

-- projet [[serveur:Portail_web]] [4]

a.portfolios

Liste des prochaines étapes :
  • 1. Léa, première usagère du portfolio, regroupe les contenus qu'elle souhaite mettre en ligne
  • 2. Session de travail pour repérer les blocs de code markdown/html utiles à une mise en forme souhaitée
  • 3. Simplification des blocs de création de contenus markdown/html de base, avec leur équivalent en Shortcodes Hugo

Discussion avec Thierry Bombardier sur la demande de tester 2 autres thèmes Hugo de type CV en ligne, avec hyperliens qui renvoient vers des réalisations d'étudiants.
https://github.com/themefisher/academia-hugo
https://github.com/uicardioHQ/hugo-uilite

Mise en œuvre :

# script bash permettant la copie locale et le lancement en localhost d'un thème hugo :
./0.creerunsitewebenhugo.sh lea-jean_exemple3 https://github.com/uicardioHQ/hugo-uilite.git
# 
# connexion au serveur du fablab :
ssh habsinn@projets.cohabit.fr -p 55555
# 
# choix d'un modèle de renommage (<prenom-nom_exempleX>)
mv lea-jean lean-jean_exemple1

Prochaine étape :
  • 1. faire un rsync dans /home/habsinn/.. (car pas les droits dans /var/www/html.. )
  • 2. se connecter en ssh sur le serveur du fablab
  • 3. se mettre en root
  • 4. faire un cp de /home/habsinn/.. à /var/www/html..

b. page d'accueil

  • Grâce à la puissance de git grep pour chercher des termes et leur chemin dans un dépôt git (ATTENTION: pré-requis = qu'il y ait au moins un commit d'enregistré dans le dépôt git) :
    • 1. recherche avec les mots clés "redmine translate app" : https://redmine.org/projects/redmine/repository/entry/trunk/config/locales
    • 2. git grep "locales" , git grep "Accueil" (cf texte du contenu html dans le <h2 class="splitcontentleft"> de la page accueil)
      git grep "label_home"  
      git grep "<h2><%= l(:label_home) %></h2>" 
      
    • 3.
      nano --linenumbers /opt/redmine/redmine-4.2.1/app/views/welcome/index.html.erb
      nano --linenumbers /opt/redmine/redmine-4.2.1/public/stylesheets/application.css
      systemctl restart apache2
      #puis IMPORTANT: "f5" pour rafraîchir le cache !
      
Prochaines étapes :
  • choix avec Pierre d'un thème Hugo 1-pager qui convienne à la page d'accueil souhaitée
  • Collecte des contenus texte et images : [[serveur:Ergonomie]]

lundi 6, mardi 7 déc

ACTIONS

-- projet [[serveur:Portail_web]] [3]

1. ajout de ma clé SSH publique aux paramètres de mon compte gitea
  • notion revue : ssh-agent : https://smallstep.com/blog/ssh-agent-explained/
  • petite galère pour se connecter en ssh à gitea:
    • a. commande de connexion en ssh aux dépôts gitea du fablab:
      sudo ssh -T -v gitea@git.cohabit.fr -p 22222
      
    • b. message d'erreur : gitea@git.cohabit.fr: Permission denied (publickey).
    • c. changement de paramètre dans le fichier : /etc/ssh/ssh_config
      #on décommente 
      IdentityFile /root/.ssh/id_rsa
      #on remplace par :
      IdentityFile /home/habsinn/.ssh/id_rsa
      

source utile : https://stackoverflow.com/questions/2643502/git-how-to-solve-permission-denied-publickey-error-when-using-git

2. Re-création d'un dépôt git dans l'équipe admin-sys : https://git.cohabit.fr/admin-sys/projets.cohabit.fr_slash_redmine
  • ajout du dépôt distant sur la branche principale (ici appelée "gitea-main", nom au choix) :
    git remote add gitea-main ssh://gitea@git.cohabit.fr:22222/admin-sys/projets.cohabit.fr_slash_redmine.git
    

-- travail sur le portfolio [1]

1.tutoriel : comment installer un site web statique en Hugo : http://habib.outlandish.academy/view/welcome-visitors/view/creating-a-hugo-website

2.recherche de l'accès aux informations DNS (OVH) du redmine ( NDD : projets.cohabit.fr )

3.téléchargement du template Reveal.js (pas la version originale, qui s'installe avec npm : https://revealjs.com/installation/ ) : en Hugo (version en Hugo : https://github.com/dzello/reveal-hugo )

4. pourquoi ce choix ? Tableau :

point de vue fonctions actions à réaliser-sources utiles
lecteur du portfolio rendu visuel plaisant : narration sur 2 axes (horizontal et vertical) + medii par diapositive : texte, images, vidéos exemple : https://chateau.association-tedua.fr
usager du fablab facilité de création de contenus (avec accompagnement au départ) : il existe un choisir un des 2 CMS open source existants (ou en créer 1 plus léger) : https://www.netlifycms.org/docs/add-to-your-site/ , https://github.com/julianoappelklein/hokus/blob/master/README.md#getting-started
usager du fablab aide sur le choix du Nom de Domaine : sous-domaine de projets.fablab.cohabit OU domaine acheté et maîtrisé par l'usager OU autre ?
admin sys Hugo : générateur de sites internet statiques flexibles, léger. Pas de maintenance de back-end/BDD nécessaire. tutoriel à créer et écrire sur le https://git.cohabit.fr/ pour une prise en main la plus autonome possible par les usagers du fablab

5. MAJ et recette d'un script bash pour que Léa (service civique) puisse installer et créer automatiquement son propre site web portfolio, avec le thème "reveal.js", sur sa propre machine, avec une copie distante sur le gitea du fablab (avec pré-requis à réaliser manuellement pour l'instant) : creerunsitewebenhugo.sh

6. Installation d'hugo et clonage du dépôt https://git.cohabit.fr/admin-sys/portfolios sur le serveur du fablab :

wget https://github.com/gohugoio/hugo/releases/download/v0.89.4/hugo_0.89.4_Linux-64bit.deb
sudo dpkg -i ./hugo_0.89.4_Linux-64bit.deb
hugo env

mkdir portfolios
cd portfolios/

7. Script bash pour convertir le site hugo en un site internet statique standard (html, css, javascript):

hugo --destination public

8. Configuration d'un nouvel Alias dans le virtual host "redmine_ssl" d'Apache


Note : prochaines étapes :
  • si elle préfère avoir la main sur le code source en Hugo : script bash pour que Léa puisse travailler en local > générer son dossier public une fois ses modifications apportées > push en ssh sur le serveur projet sur le bon chemin
  • installation et test du CMS "netlify opencms" : délicat sur ce thème en javascript, voir comment faire correspondre <section></section> et sous-section (<section><section></section></section>)

Liste de fonctionnalités particulières du thème du site portfolio:

fonctionnalité source
choix de la navigation des flèches : "default" ou "grid" https://revealjs.com/vertical-slides/
{{% section }} {{ /section %}}

9. Modification de la page d'accueil du site web portfolio de Léa et copie sur le serveur du fablab pour mettre à jour : https://projets.cohabit.fr/portfolios/lea-jean

#une fois des modifications apportées : 
hugo --destination public
git status
git add .
git comit -m "<nom-des-modifs>" 
#puis on copie le contenu du dossier public au bon endroit sur le serveur du fablab

rsync -v -a -e "ssh -p 55555" ./public/ habsinn@projets.cohabit.fr:/var/www/html/portfolios/lea-jean/


jeudi 2, vendredi 3 déc

ACTIONS

-- projet Thermo-Bibli [7]

Tests et observations sur le système d’alimentation :
  • observation 1 : arrêt de réception des données côté serveur 2 jours de suite au bout de 4h30 environ (mardi 30 nov, mercredi 1er déc)
    • constat 1 : oubli de rebrancher le câble micro-usb du hotspot
      • itération 1 : rebranchement permanent du câble USB et changement des 4 piles par 4 piles pleines pour relancer un test
    • constat 2 : la batterie principale se décharge beaucoup plus vite que les 3 autres ( au bout de 4h : environ 20% de charge au lieu de 80% pour les 3 autres)
      • itération 2 : retrait de 2 piles sur les 3 piles en parallèle
  • observation 2 : arrêt de réception des données au bout de 13h30 (jeudi 2 déc)

-- projet [[serveur:Portail_web]] [2]

  • Téléchargement du code source de l'application Redmine depuis le serveur du Fablab.
    git clone ssh://habsinn@projets.cohabit.fr:55555/opt/redmine
    cd redmine/
    
  • Création d'un dépôt "Redmine"* sur https://git.cohabit.fr/habib/Redmine.
    • Ajout comme dépôt distant pour travailler dessus avec Pierre et d'autres :
      git remote add https-git.cohabit.fr https://git.cohabit.fr/habib/Redmine.git #en https, en attendant de configurer le ssh
      
  • Outillage git , et git grep notamment pour rechercher facilement dans l’arborescence d'un dossier gité : [[serveur:Commandes_admin_sys_utiles#section-38]]

lundi 29, mardi 30 novembre, mercredi 1

ACTIONS

-- projet Thermo-Bibli [6]

Tentatives de réparer le port usb physique du micro-controleur ESP32 (via Arduino tx Rx, via FTDI, en soudant aà la loupe binoculaire):
Carte_Micro_contrôleur
  • Résultat : finalement réussie par Pierre avec une loupe binoculaire

---- Enquête : comment téléverser du code dans l'ESP32 sans câble USB ?

Contexte : port usb de l'ESP32 cassé. Sans possibilité certaine de le réparer.

------ Étape par étape

source : https://www.programmingboss.com/2021/04/esp32-arduino-serial-communication-with-code.html

1. dans la carte Arduino : ont téléverse les lignes de code qui lui permettre de transmettre des données via le Tx Rx

// this sample code provided by www.programmingboss.com
void setup() {
  Serial.begin(9600);
}
void loop() {
  Serial.println("Hello Boss");
  delay(1500);
}

2. on connecte physiquement la carte Arduino à l'ESP32 (cf schéma du tutoriel)

3. dans la carte Arduino : ont téléverse les lignes de codes qui lui permettre de recevoir des données via le Tx Rx

// this sample code provided by www.programmingboss.com
#define RXp2 16
#define TXp2 17
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial2.begin(9600, SERIAL_8N1, RXp2, TXp2);
}
void loop() {
    Serial.println("Message Received: ");
    Serial.println(Serial2.readString());
}

CCL: finalement non testé, car impossibilité de téléverser la partie du code relative à l'esp32 puisqu'on ne peut pas s'y connecter.
Entre-temps, une soudure fine a été réussie manuellement par Pierre, à la loupe binoculaire avec une panne fine de fer à souder portable (comme celui de Pine64 en Pologne).

------ Miscellanées+ **

Autre source :
https://technoreview85.com/how-to-program-esp-32-cam-using-arduino-uno-board/

Autre solution : Question : Arduino peut-il se comporter comme un FTDI ? Travail dans le code source Arduino en C++ (main.cpp) :
  • vérification de l'existence d'une boucle infinie en cas d'échec de connexion Wifi : ligne 33
    • ajout d'une condition dans la boucle while : (millis() <= 60000)
  • ajout de plusieurs serial.println() pour ajouter de la verbose côté moniteur en série ( serial monitor )
  • warning : découverte de la notion d'"overflow" du secteur mémoire d'une variable de type entier (int) : http://www.cplusplus.com/articles/DE18T05o/
  • nouveau commit et nouveau push sur la branche site_carreire du Git du fablab : https://git.cohabit.fr/thermo-bibli/code-grappe/src/branch/site_carreire
  • changement du pin 2 au pin 35 (pin 13 abandonné également)
  • changement du temps d'envoi des données : toutes les heures

Dernier push sur le git : https://git.cohabit.fr/thermo-bibli/code-grappe/commit/e1180bef4e914976c20b61b18ae28328e17ae2af

-- problème connexion au wifi "cohabit"

source:
https://itectec.com/superuser/linux-how-to-delete-ssid-data-from-debian-wifi-interface/

1. Supprimer le sifhciers de configuration du SSID cohabit et /etc/NetworkManager/system-connections/

2. systemctl restart NetworkManager

-- assitant de Pierre : remorque à vélo

Mesures de contrôle de la bonne taill des pièces découpées pour solidariser la caisse de la remorque à vélo.

-- Installation_du_VPN_Wireguard : test ouverture de ports

Via le réseau du wifi Cohabit :

sudo nmap -sU -p 50000 185.233.100.9

Starting Nmap 7.70 ( https://nmap.org ) at 2021-11-29 17:33 CET
Nmap scan report for hypnos.aquilenet.fr (185.233.100.9)
Host is up (0.029s latency).
PORT STATE SERVICE
50000/udp open|filtered unknown
Nmap done: 1 IP address (1 host up) scanned in 0.66 seconds


mardi 23, mercredi 24, jeudi 25, vendredi 26 novembre

ACTIONS

-- projet Thermo Bibli [2,3,4,5]

1. visio avec David Bruant (développeur web)
  • Je lui raconte l'état de mon enquête du lundi 22 novembre.
  • il est nécessaire de remonter la chaîne pour voir d'où vient l'élément manquant ou le bogue
  • ccl : pour remonter plus vite la châine, on cherche d'abord au milieu de celle-ci: le Broker MQTT reçoit-il des données ssur le topic "test1" sur lequel le esp32 (client MQTT) publie

2. Recherche active de sources présentant des solutions légères pour faire un suivi des données réceptionnées par MQTT Broker vers la BDD InfluxDB qui les enregistrera.
3. Appel téléphonique avec Alexander Dales :
  • en fouillant dans ses souvenirs, il se rappelle d'un script développé par Bastien, nom du fichier : mqtt_script
  • on le déplace dans /root/ et on le renomme mqtt_script.py
  • on repère qu'il ne tourne pas sur la VM avec crontab ( source : https://ostechnix.com/a-beginners-guide-to-cron-jobs/ ) :
    crontab -l
    

    Résultat :
    #2 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
    26 2 1 * * /cert/script-shell-acme/script_cert.sh >> /var/log/cert/script_acme.log
    
  • CCL : pas de job cron pour exécuter le script à une certaine fréquence.

4. "l'Enfer" pip3 install (brouillon)
_https://stackoverflow.com/questions/7807315/daemonizing-a-python-script-in-debian-using-virtualenv
On installe un environnement virtuel dans le dossier du projet /root/scripts-faits-maison/forwarder-mqt-influxdb
https://linuxconfig.org/how-to-set-up-a-python-virtual-environment-on-debian-10-buster

python3 mqtt_script.py
Traceback (most recent call last):
File "mqtt_script.py", line 2, in <module>
import paho.mqtt.client as mqttClient
ModuleNotFoundError: No module named 'paho'
(virtual-env)

  • Installation du paquet paho.mqtt :
    source : https://pypi.org/project/paho-mqtt/
    source /root/scripts-faits-maison/forwarder-mqtt-influxdb/virtual-env/bin/activate
    pip3 install paho-mqtt
    

: erreur lors de l'installation

  • Redémarrage de la VM cohabit-capteurs : demandée lors de l'installation de paquets (nouvelle version du kernel)
  • Dans l'environnement virtuel :
pip3 install --upgrade pip
pip3 install paho-mqtt  

: fonctionne

Traceback (most recent call last):
File "mqtt_script.py", line 3, in <module>
from influxdb import InfluxDBClient
ModuleNotFoundError: No module named 'influxdb'

pip3 install influxdb 

: l'erreur persiste
  • Même opération dans le système (sans environnement virtuel) :
    pip3 -V
    Traceback (most recent call last):
    File "/usr/bin/pip3", line 6, in <module>
    from pip._internal.cli.main import main
    ModuleNotFoundError: No module named 'pip'
python -m pip install --upgrade --force-reinstall pip

Problèmes avec pip3 et pip, meilleure explication (très longue) : https://github.com/pypa/pip/issues/5599

IMPORTANT : Bonnes pratiques d'usage de pip :

  • pour installer un paquet, ne jamais utiliser : pip3 install -U <nomdupaquet> (si on n'est pas sur un système qui utilise pip comme gesitonnaire de paquets principal)
    Utiliser uniquement apt (ou son système de gestion de paquets habituel)
  • ne jamais utiliser sudo (ni root donc) avec pip
  • utiliser --user

IL A FALLU désinstaller ET RÉINSTALLER PIP ET TOUTES SES DÉPENDANCES
APT AUTOREMOVE PURGE python3-pip
puis l’installation du paquet influxdb a fonctionné : pip3 install influxdb (ou mieux : python3 -m pip install influxdb )


5. Reste à démoniser le script python écrit par Bastien sous systemd :

Démoniser avec /etc/init.d

( /etc/init.d/mqtt-influxdbd est activé sur capteurs.cohabit : mais pas testé avec des données bien réceptionnées ?)

Source pour activer un service défini dans /etc/init.d/ :
http://blog.scphillips.com/posts/2013/07/getting-a-python-script-to-run-in-the-background-as-a-service-on-boot/

chmod 755 </path-to/fichier-du-service>
# créer les liens symboliques dans /etc/rc*.d/ :
/etc/init.d/<fichier-du-service> defaults
# démarrer le service :
/etc/init.d/<fichier-du-service> start 
# voir son statut
/etc/init.d/<fichier-du-service> status
Erreurs d'abord rencontrées :
  • message d'erreur 1 :
    sudo update-rc.d forwarder-mqtt-influxdb enable
    

Failed to enable unit: Unit /run/systemd/generator.late/forwarder-mqtt-influxdb.service is transient or generated.

  • message d'erreur 2 :
    update-rc.d forwarder-mqtt-influxdb start  
    

update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
Use of uninitialized value in string eq at /usr/sbin/update-rc.d line 432.
update-rc.d: warning: start runlevel arguments (none) do not match forwarder-mqtt-influxdb Default-Start values (2 3 4 5)
update-rc.d: warning: stop runlevel arguments (none) do not match forwarder-mqtt-influxdb Default-Stop values (0 1 6)

Démoniser avec /etc/systemd/system/

(testé mais erreur non résolue sur capteurs.cohabit :"Failed to enable unit: Invalid Argument" . Abandon pour l'instant.)

sources lues :
https://medium.com/codex/setup-a-python-script-as-a-service-through-systemctl-systemd-f0cc55a42267
https://tecadmin.net/setup-autorun-python-script-using-systemd/
https://github.com/systemd/systemd/issues/4209

Plus détaillé, à parcourir : https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units

que signifie : active exited ?
source: https://unix.stackexchange.com/questions/241970/what-does-status-active-exited-mean-for-a-systemd-service
CCl : pas un problème a priori : ue fois le script mqtt-influxdbd.sh exécuté, le script se ferme (car pas de boucle infinie). Le & en fin de denrière commande devrait suffire à maintenir la commande en exéution dans le background.


Prochaines étapes :
  • Changer la pile du capteur et tester si le démon fonctionne pendant que des données sont publiées par le capteur._
  • On ne reçoit plus les données du capteur1 sur le pin23 (cf code dans le programme main.cpp).
    Ca n'a fonctionné qu'une fois en fait, sur l'envoi de données suivant :
    2021-11-23T17:10:45Z 0 45.60 capteur1 22.50
    Pourquoi ?

https://img.staticbg.com/images/oaupload/banggood/images/33/EE/51a8d415-7b17-4ae3-8274-b8317b03465f.jpg


*6. Vérification que le script est bien démonisé sur le serveur en envoyant des trames bine formatées

  • On rebranche le capteur par USB.
  • On regarde le statut du démon installé la veille : "systemctl status mqtt-influxdbd"
    erreur de syntaxe : "influxdb" au lieu de "influxdbd"*
    systemctl status mqtt-infludb
    

    Warning: The unit file, source configuration file or drop-ins of mqtt-influxdb.service changed on disk. Run 'systemctl daemon-reload'
    systemctl daemon-reload
    
systemctl status mqtt-influxdbd.service

● mqtt-influxdbd.service - MQTT to Influxdb forwarder
Loaded: loaded (/etc/systemd/system/mqtt-influxdbd.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-11-25 09:17:29 CET; 8s ago
Main PID: 12618 (python3)
Tasks: 2 (limit: 1145)
Memory: 13.3M
CGroup: /system.slice/mqtt-influxdbd.service
└─12618 /usr/bin/python3 /root/scripts-faits-maison/forwarder-mqtt-influxdb/mqtt-influxdb.py
nov. 25 09:17:29 cohabit-capteurs systemd[1]: Started MQTT to Influxdb forwarder.
systemctl enable mqtt-influxdbd.service

Synchronizing state of mqtt-influxdbd.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable mqtt-influxdbd

lundi 22 novembre

ACTIONS

-- MAJ notes du journal de bord 15,16 nov

Cf lundi 15, mardi 16 novembre.

-- projet Thermo Bibli : test du code [1]

1. copie locale du dépôt Git du Fablab : https://git.cohabit.fr/thermo-bibli/code-grappe/src/branch/site_carreire

2. réalisation du circuit avec 1 ESP32 et 1 capteur :
  • fil noir : GND
  • fil rouge : VCC
  • fil jaune : Analog (captation des data) - pin 19
3. compilation interne :
  • oubli de changement de branche
  • on ouvre un terminal dans platform.io pour changer de branche : git checkout site-carreire (auto-complétion)
  • nouvelle compilation interne : il n'y a plus d'erreur
  • explication d ela notion de header par Pierre : main.h et secret. h --> rassemblent les librairies, les variables principales, et les fonctions principales du programme afin d'être toutes mises en mémoire dès le départ (évite les erreurs de mémoire liées au mauvais ordre d'écriture des fonctions)
4. téléversement du code via l'interface de platform.io
  • erreur : problème de droits sur le port série /dev/ttyUSB0
  • solution : ajout du user au groupe dialout pour avoir le droit de communiquer avec les ports séries (/dev/tty*) : https://esp32.com/viewtopic.php?t=6444
  • nouveau téléversement : OK
5. * lecture des données échangées via le moniteur série* :
  • erreur : [WiFiClient.cpp:258] connect(): socket error on fd 60, errno: 113, "Software caused connection abort"
  • ouverture d'un ticket: anomalie #369
6. Enquête sur l'anomalie #369 : 7. Résolution de #369 :
Parcours des fichiers dans /etc/mosquitto/
  • dans le fichier de configuration mosquitto.conf : on commente des lignes relatives à l'installation de connexions chiffrées en tls
  • on redémarre Mosquitto : systemctl restart mosquitto.service
  • on vérifie que le service tourne bien : systemctl status mosquitto.service
  • On téléverse à nouveau le code dans l'ESP32. Cette fois la connexion semble bien s’établir avec le broker MQTT
    Connecting to Thermo-Bibli.....
    Connection established!
    IP address: 192.168.0.138
    Connecting to MQTT Broker...
    .Connected.

8. On consulte la BDD influxdb pour voir si elle reçoit les données sur grappe1 :
Voir liste des commandes pour requêter avec influxdb sur la page wiki suivante : Installation-grafana-influxdb.
Pas de nouvelles données réceptionnées dans la BDD.

> SELECT * FROM "grappe1"
name: grappe1
time batterie humidite numero_capteur temperature
---- -------- -------- -------------- -----------
2021-06-16T14:40:30Z 42 50.00 capteur1 19.33
2021-06-16T14:40:30Z 42 50.50 capteur2 19.32
2021-06-16T14:40:30Z 42 50.51 capteur3 19.32
2021-06-16T14:40:30Z 42 50.52 capteur5 19.31
2021-06-16T14:40:30Z 42 50.54 capteur4 19.33
2021-06-16T14:50:30Z 42 50.00 capteur1 19.33
2021-06-16T14:50:30Z 42 50.50 capteur2 19.32
2021-06-16T14:50:30Z 42 50.51 capteur3 19.32
2021-06-16T14:50:30Z 42 50.52 capteur5 19.31
2021-06-16T14:50:30Z 42 50.54 capteur4 19.33

9. Test de la configuration de MQTT

source : https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-the-mosquitto-mqtt-messaging-broker-on-debian-8

  • On ouvre 2 terminaux côte à côte ("side-by-side") :
    • On subscribe au topic "test" sur l'hôte "localhost":
      mosquitto_sub -h localhost -t test
      Lorsqu'on appuie sur la touche ENTREE, on ne voit rien s'afficher car mosquitto_sub attend que des messages lui arrivent sur ce topic :
    • dans le 2ème terminal, on publish un,deux messages sur le même topic :
      mosquitto_pub -h localhost -t test -m "hello world"
      mosquitto_pub -h localhost -t test -m "hello world"
    • Ils sont bien réceptionnés de l'autre côté.
      • NB : pour cela, j'ai dû désactiver la connexion par mot de passe qui était paramétrée dans /etc/mosquitto/mosquitto.conf , et permettre les connexions anonymes.
    • Puis nouvel essai en "side-by-side" , cette fois-ci en dé-commentant les lignes de connexion par mot de passe avec le user et le password indiqués dans le code source du dépôt Git :
      mosquitto_sub -h localhost -t test -u "sammy" -P "password"
      mosquitto_pub -h localhost -t "test" -m "hello world" -u "sammy" -P "password"

lundi 15, mardi 16 novembre

ACTIONS

-- Ergonomie : début de production (évolution #364) [1]

Début de la recherche technique pour pouvoir modifier la structure de la page d'accueil du Redmine servie sur projets.cohabit.fr .
Documentation poursuivie sur cette page : [[serveur:Ergonomie]] .

-- basculement vers une connexion VPN Wireguard [6]

Poursuite de la documentation sur la page [[serveur:VPN_Wireguard]].

WIREGUARD
Tuto Wireguard très complet et simple. Notamment pour comprendre allowed-ips, et ce qui se passe côté serveur :
https://www.smarthomebeginner.com/linux-wireguard-vpn-server-setup/

Diffrence between endpoint ans allowed ips :
https://stackoverflow.com/questions/65444747/what-is-the-difference-between-endpoint-and-allowedips-fields-in-wireguard-confi
How does a peer A know what the endpoint of peer B os, since it can change along with where peer B moves across the network (egs. from home network to any public internet café hotspot)??

Section cryptokey routine pour comprendre allowed ips:
https://www.wireguard.com/

Différence wg et wg-quick.
Conflicts of local networks:
https://www.stavros.io/posts/how-to-configure-wireguard/

-- Tutoriel ADMIN RESEAU

Comprendre le fonctionnement du réseau internet de manière simple et détaillée : très bonne base:

Ajouté à la page [[serveur:Commandes_admin_sys_utiles]]
https://www.netfilter.org/documentation/HOWTO/networking-concepts-HOWTO-2.html

QUESTIONS, ATTITUDE DE L'ADMINSYS-RESEAU

Lorsqu'on recherche la solution à un problème : ne pas fonctionner à l'aveugle d'URL en URL qui semblent bien expliquer la solution.
Les explications de chaque source ont leurs angles morts, liés au style de documentation et aux pré-requis implicites

Comment dépasser cela?

En ouvrant plusieurs sources, en les lisant toutes en diagonale d'abord, puis en détail pour celles qui paraissent toujours pertinentes.

Des questions apparaissent sur les zones d'ombres (ex: allowed ips dans Wireguard).
Avancer dans l'élucidation de l'enquête que représente ce problème à résoudre en écrivant chaise question qui apparaît et en y répondant spécifiquement (ex: endpoint vs allowed ips? comment donner un ennpoint à un peer qui n'a pas d'IP statique?)


lundi 8, mardi 9 novembre

ACTIONS

-- basculement vers une connexion VPN Wireguard [5]

Poursuite des tests sur ma machine personnelle (hostname : habsinnn.chateau.org ) :
https://www.wireguard.com/quickstart/
https://www.wireguard.com/#conceptual-overview
https://wiki.archlinux.org/title/WireGuard#Key_generation

Nouvelles sources à lire :
https://wiki.debian.org/NetworkConfiguration
https://www.debian.org/doc/manuals/debian-reference/ch05.fr.html
https://www.debian.org/doc/manuals/debian-handbook/sect.network-config

-- travail sur des projets personnels de fabrication numérique

  • Réalisation de portions de décor :
    • dessin vectoriel
    • utilisation de la découpe laser avec du MDF et du plexiglas
  • Décors réalisés pour le spectacle Le Clown et la Fée ( https://leclownetlafee.fr) :
    • portion de décors en bois attelé à une échelle de 3m de haut pour un décor de Montagne imaginaire
    • boîte lumineuse faisant ressorti un logo : découpe de plexiglas blanc et peinture d'un logo à la bombe vert avec un pochoir fait en MDF 8mm

jeudi 28 octobre, vendredi 29 octobre

ACTIONS

-- liste mail SYMPA ( anomalie #336 ) [3]

tests de changement syntaxique en tentant des remplacements par approximation successive entre :
  • ce morceau de code ( message de désabonnement ) qui s'affiche correctement côté utilisateur abonné dans le message type "rappel individualisé":

[% IF conf.wwsympa_url -]
[|loc%]List information: [%END ]
[ 'info' | url_abs([list.name]) ]
[|loc%]To unsubscribe:[%END%] [%""%]
[% 'signoff' | url_abs([list.name]) ]
[ ELSE -]
[|loc%]List information: [%END ]
[ "${conf.email}${domain}" | mailtourl({subject => "info${list.name}"}) ]
[|loc%]To unsubscribe:[%END%] [%""%]
[% "${conf.email}\@${domain}" | mailtourl({subject => "sig
${list.name} ${user.email}"}) ]
[ END -%]

  • et ce morceau de code ( message d'abonnement )qui ne s'affiche pas correctement côté utilisateur abonné dans le message type "suppression" de la liste d'abonnés:

[% | mailtourl({subject => "sub ${list.name}"}) ]
[
conf.email ]@[ domain ]
[
END %]

-- recherche dans l'historique des nouveaux travaux faits par Grégoire sur le dispositif Junior SSL [3]

Documentation sur cette page : SSL_light .

-- formation d'un étudiant de la Junior SSL

Poursuite de la documentation SSL_light.

Plusieurs problèmes rencontrés avec les robots qui ne communiquaient pas avec le game controller:
  • Résolution en ré-exécutant le fichier ~/bt.sh

Puis présentation auprès d'un étudiant de la Junior SSL.

Prochaine étape : faire s'exécuter le fichier automatiquement au démarrage du game controller.


mercredi 27 octobre

ACTIONS

-- liste mail SYMPA ( anomalie #336 ) [2]

( suite du vendredi 22 octobre )

Jean-Baptiste me fait suivre l'email reçu par Alexander (utilisateur abonné à la liste). On constate que le message en "attachement de fin" n'est pas traduit du langage de templating en langue utilisateur (ici français).

Bonjour,
le Fablab sera fermé la semaine prochaine ( semaine 44 ) et rouvrira
ses portes le mardi 9 novembre .

A bientôt !

L'équipe du Fablab

[%# remind.tt2 ~]
From: [
fromlist ]
Subject: [
"Reminder of your subscription to
1"|loc(list.name)|qencode]

[%|loc(list.name,domain,user.email,user.password)%]You are receiving
this mail because you are subscribed to the mailing list 1@%2 with
email address %3.[%END
]

[%|loc%]It is important to us to not send mail to people that don't
want to receive it. If you do not want to be on this mailing list,
please follow the instructions below to remove yourself.[%END%]

[% IF conf.wwsympa_url -]
[
|loc%]List information: [%END ]
[
'info' | url_abs([list.name]) ]
[
|loc%]To unsubscribe:[%END%] [%""
%]
[% 'signoff' | url_abs([list.name]) ]
[
ELSE -]
[
|loc%]List information: [%END ]
[
"${conf.email}${domain}" | mailtourl({subject => "info
${list.name}"}) ]
[
|loc%]To unsubscribe:[%END%] [%""
%]
[% "${conf.email}\@${domain}" | mailtourl({subject => "sig
${list.name} ${user.email}"}) ]
[
END -%]

-- atelier avec les collégiens : robots Junior SSL [2]

  • Accompagnement à la prise en main du programme python permettant de controler les robots, via les 4 laptops configurés la veille.
  • Documentation des actions et corrections effectuées par le concepteur-développeur du dispositif sur la page SSL_light

-- reprise du ticket #255 : VPN wireguard [4]

Lecture du tutoriel d'installation manuelle (sans passer par wg-quick , leur paquet d'installation rapide en gros) : https://wiki.archlinux.org/title/WireGuard

lundi 25 octobre, mardi 26 octobre

ACTIONS

-- installation d'un logiciel de screen recording fonctionnel

Pour Léa (service civique du Fablab) , son logiciel ne fonctionnant pas sous debian 10 : enregistrements d'écran noir.
  • problème : des instabilités pour la plupart des logiciels d'enregistrement vidéo d'écran sous Wayland.
  • solution : passer sous X11
  1. vérification du serveur graphique utilisé : echo $XDG_SESSION_TYPE . Résultat renvoyé : wayland.
  2. installer sudo (car pas déjà fait)
  3. ouvrir le fichier /etc/gdm3/daemon.conf ( source : https://wiki.debian.org/Wayland#KDE_Plasma_.28supported_since_5.4.2B-.29 )
  4. décommenter la ligne #WaylandEnable = false
    #redémarrer la machine
  5. vérification du serveur graphique utilisé : echo $XDG_SESSION_TYPE . Résultat renvoyé : x11.
  6. test du logiciel Simple Screen Recorder ( apt-get install simplescreenrecorder ) : l'enregistrement a bien fonctionné.

-- poursuite des tests d'installation pour la Junior SSL [1]

Documentation sur cette page : SSL_light .

vendredi 22 octobre

ACTIONS

-- Tests - liste mail SYMPA du fablab ( anomalie #336 ) [1]

  • 1. Après remontée de l'anomalie rencontrée par Jean-Baptiste ( #336 ), demande d'accès en tant que sudo au serveur listes.aquilenet.fr auprès de Sacha.
  • 2. Sacha me renvoie vers l'accès sur l'interface web en tant qu'utilisateur au profil "propriétaire" de listes mail. Invitaiton à consulter la documentation suivante : https://sympa-community.github.io/manual/customize/basics-templates.html
  • 3. Découverte de :
    • la fonction loc qui apparaît dans certains messages types (mail_tt2) : s'applique à une suite de caractères qui sont traduits dans la langue par défaut du navigateur
    • de la déclaration d'arguments dans un message type (%1, %2...)
  • 4. tests d'inscription, désinscription, avec changement des contenus de messages types avec une adresse email personnelle de test
    • 4.a. changement du message type "suppression" de la liste en y ajoutant des éléments désabonnement de fin du message type "attachement de fin de message", afin de voir s'il n'y pas de problème syntaxe : en désabonnant l'utilisateur, celui-ci reçoit bien le message escompté (cf fichier joint ).
  • 4.b. la fin du "message de suppression" ne fonctionne pas côté abonné:

Vous pouvez cependant vous réabonner en cliquant ici :

mailto:?subject=sub%20fablab.cohabit

  • correspond au code suivant dans le template du message prédéfini :

[% | mailtourl({subject => "sub ${list.name}"}) ~%]

[% conf.email ]@[ domain %]

[%~ END %]

  • 4.c. Test : tentative d'ajouter la ligne de template [%# remind.tt2 ~%] en début de message de "suppression de la liste" pour voir si cela influe.
    • Résultat : Non. L'affichage est identique côté utilisateur abonné.
  • 4.d. Test : Remplacement de l'ensemble du template de "suppression" par le template de "rappel individualisé"
    • Résultat : Côté utilisateur abonné, il reçoit un message de "rappel individualisé" sans problème d'affichage (cf mercredi 27 octobre)

-- Conversation sur l'expérience de documentation des usagers avec Charlotte :

Prise de notes sur : [[serveur:Ergonomie]].


jeudi 21 octobre

ACTIONS

-- Robot Cup : résolution de l'anomalie ( #336 )

( source : dépôt du programme junior-ssl : https://github.com/Rhoban/junior-ssl/blob/master/docs/programming.md )

Jean-Baptiste me fait remonter un problème au niveau de l'installation nécessaire au fonctionnement d'un programme en python, junior-ssl, sur certaines machines debian 10 et pas d'autres.

  • Message d'erreur concernant le QTWebEngine :
    XXXXXXXXXXXXXXXX (reprendre la machine testée : demander à Jean-Baptiste)

Approche : comparaison entre une machine où l'installation a fonctionné et une où l'installation donne le message d'erreur.

  • 0. On relance le script qui n'a pas fonctionné pour réobserver le retour du terminal, et le message d'erreur.
  • 1. listage des versions python installées :
    ls -ls /usr/bin/python*
    

Résultat : on a une version 3.7.3 installée. Or, la documentation recommand eune version 3.8 au minimum.

  • 2. comparaison des versions pip3 installées :
    pip3 -V
    

    Résultat : il y a bien une différence de versions entre les 2 machines : version 18 versus version 21 sur la fonctionnelle.
  • 3. upgrade de la version de pip3 :
    pip3 install --upgrade pip
    
  • 4. on relance la commande d'installation du paquet junior-ssl :
    python -m jssl.game_controller
    

Résultat : à ce moment-là, le paquet s'installe correctement car on n'a plus l'erreur d'origine.
Toutefois, un message suggère de travailler au sein d'environnements virtuels pipenv et autres.
Explication de cette bonne pratique permettant de lancer chacune des applications python dans leur environnement virtuel dédié, avec ses paramètres spécifiques (version de python, version de pip, librairies propres au fonctionnement de l'application ) : https://towardsdatascience.com/why-you-should-use-a-virtual-environment-for-every-python-project-c17dab3b0fd0 .

-- Présence avec le groupe d'étudiants ENSC (cognitique)


lundi 18 octobre, mardi 19 octobre

ACTIONS

-- ticket #255 : VPN wireguard [3]

Poursuite de la retro-ingénierie de l'VPN_Wireguard, documentée sur la page [[serveur:VPN_Wireguard]]


vendredi 15 octobre

ACTIONS

-- ticket #255 : VPN wireguard [2]

  • Création d'une page à propos de la retro-ngénierie de l'[[serveur:VPN_Wireguard]] (voir page VPN wireguard dans système d'information )

NB: pendant les opérations de scan d'adresses IP, attention à ne pas oublier si l'on est connecté par ailleurs en VPN, car cela change notre adresse IP de sortie (celle du serveur VPN de notre FAI VPN en l'occurrence)


jeudi 14 octobre

ACTIONS

--tutoriel Commandes admin sys [3]

http://papy-tux.legtux.org/doc1058/index.html
  • notamment pas mal de temps passé sur le concept de * loopback* et son fonctionnement
    • installation du paquet nmap ( outil d'exploration du réseau et scanneur de ports ) sur le serveur projets

-- lecture du ticket #255 : VPN wireguard [1]

  • 1.Lecture du tutoriel suivant :https://upcloud.com/community/tutorials/get-started-wireguard-vpn/
    • côté serveur
    • côté client
  • 2. Plusieurs intrigues apparaissent lorsque je compare ce qu'il y a sur le serveur projets, et la configuration à mener indiquée dans le tutoriel :
    • dans le fichier /etc/sysctl.conf , l'option permettant le forward de paquets doit être activée (décommentée) : net.ipv4.ip_forward=1 **

mardi 12 octobre

ACTIONS

--tutoriel Commandes admin sys [2]

Poursuite du tutoriel et de sa correction (pour moi, et pour alimenter la page :

-- découpe laser : réalisation d'une boîte en MDF

  • création du SVG à partir d'un boite type issue de https://festi.info/boxes.py/CardBox?language=fr
    • déchiffrage des paramètres pris en compte par l'auteur
    • les paramètres clés indique la taille de la surface disponible à l'intérieur de la boite (plus simple)
    • puis modifiction du SVG pour ajouter des formes particulières à partir d'une photo
      (insérer photo du 4 renversé!]
    • puis code couleur pour la laser selon le type de découpe, gravure
  • puis utilisation de la découpe :
    • ouverture sur inkscape, puis job control (cf tutoriel imprimé dans la salle de la découpe laser)
    • placement de la plaque de MDF 3mm
    • calibrage de la distance entre le laser et la plaque
    • test du laser n'importe où
    • placement du pointeur du laser tout en haut à gauche (1mm de marges)
    • c'est parti !
      • conseil pour la rapidité : aligner les éléments qui devront être gravés car c'est sur l'axe horizontal que la laser est la plus rapide : gain de temps potentiellement considérable !

Résultat :


lundi 11 octobre

ACTIONS

-- grafana, influxdb , sqlite [2]

( Source : https://cohabit-capteurs.aquilenet.fr/datasources/edit/2/ )

En lien avec le fichier de configuration de la base de données influxdb qui enregistre les données récoltées par les capteurs de température-humidité: /etc/influxdb/influxdb.conf (cf projet Thermo_Bibli]].

{{figure(grafana_visualisation_datasources1.png,width=50%,height=auto, title="Visualisation des datasources de Grafana")}}

-- boucle interne

Pierre me parle de l'existence d'une boucle interne dans le serveur, pour éviter de passer par le réseau de l'université (+ de trajet pour rien, et en + on subit les limitations des règles de contrôle du réseau de l'université) quand on veut accéder aux données qui sont hébergées dans notre serveur physiquement localisé au fablab #cestBête .

-- nouveau ticket

  • ouverture d'un nouveau ticket pour une anomalie : ticket #322, pour un bogue sur les liens vers les pages internes du wiki. Pourquoi ?

-- réunion hebdomadaire avec Estèle, Jean-Baptiste et Pierre

Echanges sur :
  • la nouvelle grille tarifaire de l'ensemble des usagers
    • traduction dans l'expérience d'accueil au fablab
      • conséquence sur les supports et les narrations numériques
        • ouverture de nouveaux tickets : #318, #319, #320, #321, #323, #324, #325

vendredi 8 octobre

ACTIONS

-- grafana, influxdb , sqlite [1]

Sur le serveur : cohabit-capteurs.aquilenet.fr

  • installation de nmap : permet de scanner un réseau donné et vérifier les ports ouverts sur une ou plusieurs machines données par ligne de commande.
  1. recherche de documentation éventuelle par les prédécesseurs dans Thermo-Bibli : je découvre que la BDD utilisée est influxDB ( source utile : https://bentek.fr/influxdb-grafana-raspberry-pi/ )
    • question : quel lien avec le sqlite3 défini dans le fichier de configuration /etc/grafana/grafana.ini ?
  2. du coup, je recherche si influxdb est installé, et constate que c'est le cas :
    influx --version
    
  3. (source utile : https://devconnected.com/how-to-create-a-database-on-influxdb-1-7-2-0/ ) Je vais regarder le fichier de configuration :
    sudo nano /etc/influxdb/influxdb.conf
  4. y a-t-il une BDD déjà créée ?
    1. j'ouvre le CLI d'influxdb :
      influx -precision rfc3339
      
    2. je tente d'ouvrir une BDD existante avec un nom au hasard :
      > use <nomauhasard>
    3. j'obtiens un message d'erreur avec une aide : ERR: Database iotdb doesn't exist. Run SHOW DATABASES for a list of existing databases.
      DB does not exist!
    4. je liste les BDD créées : > show databases
  5. Je veux afficher les champs créés dans la base thermo-bibli :
    > show field keys

name: grappe1
fieldKey fieldType
-------- ---------
batterie string
humidite string
temperature string

name: grappe2
fieldKey fieldType
-------- ---------
batterie string
humidite string
temperature string

InfluxDB

syntaxe : https://docs.influxdata.com/influxdb/v2.0/query-data/influxql/

Sqlite3

  • Reconfiguration du mot de passe administrateur résolue :
    RESOLU : en mettant le mot de passe avec le bon hashage et le bon salt pour un utilisateur (admin, admin). Puis changement du mot de passe admin.

-- Prochaines étapes

--

jeudi 7 octobre

ACTIONS

Accueil

  • accueil d'Audrey Linguet : designeuse d'objets de décoration d'intérieur
    • conversation : crée des objets en 3D pour des architectes, et le fait en collaboration avec des artisans
    • création d'un compte Redmine pour éventuellement documenter
  • accueil de 4 étudiants en Ecole de Cognitique:
    • présentation du fablab par Pierre
    • discussion sur leur Cahier des Charges : poursuite du projet Wiki
    • premier travail proposé : état des lieux du projet qu'ils reprennent
    • création d'un compte utilisateur pour chacun et d'un journal de bord

Tutoriel SQL

Ajouté à la page Commandes_adminsys_utiles

VM du projet (cf Thermo-Bibli)

  • Problème rencontré : aujourd'hui le réseau Eduroam plante, rendant l' accès en ssh à la VM d'Aquilenet impossible, le réseau de l'université (accessible via le SSID "cohabit") bloquant les connexions ssh
    • installation d'un vpn pour pouvoir accéder tout de même à la VM par tunnel chiffré de point-à-point
      • suivi du tutoriel d'installation documenté chez Aquilenet.fr (il est nécessaire d'être adhérent à l'association pour cela)
      • on peut ensuite se connecter en ssh étant connecté via le réseau de cohabit via la commande (cf [[serveur:wiki]] )
  • ajout du compte utilisateur de Pierre au groupe des administrateurs ( sudo -ers)
    • vérification de sa clé ssh dans authorized_keys : OK
  • comment ajouter un utilisateur sur l'interface web de grafana à l'URL https://cohabit-capteurs.aquilenet.fr ?
    1. recherche manuelle dans le fichier /etc/grafana/grafana.ini
    2. recherche dans la documentation officielle (peu de choses sur le CLI):
    3. comment modifier le mot de passe de l'administrateur de la BDD sqlite3 manuellement ? ( source : https://codesposts.com/Wg04jK59 )
    4. dans le fichier .ini , on trouve l'emplacement de la BDD :
      /var/lib/grafana/grafana.db
      
    5. la commande sqlite3 pour tenter de changer le mot de passe du user "admin" ne fonctionne pas : commande introuvable
  1. recherche du paquet sqlite3 dans la liste de paquets installés :
    apt list --installed | grep
    
  2. il n'est pas installé, donc je l'installe :
    sudo apt-get sqlite3
    
  1. puis on lance :
    sqlite3 /var/lib/grafana/grafana.db
  2. commande .tables pour lister les tables. On y voit la table user . On affiche son contenu :
  3. select * from user; (ne pas oublier le ";" !) : s'affiche alors le contenu de la ligne d'un user "admin"
  4. on redémarre le service :
    sudo systemctl restart grafana-server.service
    

-- recherche de patrons svg de boite en bois MDF

Jean-Baptiste me présente ce site : https://festi.info/boxes.py/CardBox?language=fr
  • Gestion des paramètres :
    • choisir les hauteur et largeur de la boîte (taille de l'intérieur!)
    • mettre le paramètre burn à 0.0 mm
  • remarque écologique: la laser va plus vite dans l'axe horizontal.
    il est donc pertinent disposer les endroits où une forme est gravée par la laser alignés horizontalement sur la même ligne : gain de temps donc d'énergie à la découpe laser !

--

mardi 5 octobre

ACTIONS

-- Reprise de la documentation de Thermo_bibli #2

avec Pierre

  • Notions d'électronique :
    • composants pour l'horodatage :
      • NTP :
      • RTC (real-time clock): https://en.wikipedia.org/wiki/Real-time_clock . Ses bénéfices :
        • consommation énergétique faible (important quand on fonctionne au courant alternatif)
        • libère le système électronique des tâches critiques par rapport au temps
        • parfois plus précis que d'autres méthodes
        • source d'énergie alternative à celle du système (en cas d'arrêt brutal du système, elle continue de fonctionner)
        • utiliser un oscillateur en cristal ( https://en.wikipedia.org/wiki/Crystal_oscillator), comme pour les montres à quartz : un cristal qui vibre au rythme de la résonance mécanique d'un piezo-électrique
          • 1. voltage des électrodes aux extrémités du cristal
          • 2. change la forme du cristal de quartz
          • 3. le voltage est supprimé
          • 4. le cristal revient alors sa position initiale en générant un petit voltage
          • 5. 1, 2, 3 et 4 se répètent, ce qui renvoie un signal électrique de fréquence constante
    • MOSFET :
      • un type de transistor particulier qui permet de créer des portes logiques plus facilement qu'avec des transistors classiques
      • on en a dans la salle Bill Gostper : modèle bs170

-- Rencontre avec Jorge - développeur mécano-électro du Techshop

langues de Jorge : fr, es (colombie)

  • IDE pour développer les programmes informatiques pour l'embarqué platform.io : https://docs.platformio.org/en/latest/home/#quick-start
    • utilisable via atom.io (mais abandonné par Microsoft depuis qu'il a racheté Github : met en valeur VS Code commercialement qu'il veut seul maintenir)

-- Création d'une page : Commandes adminsys utiles

Page wiki : Commandes adminsys utiles

-- problème de dépendances

Sur ma machine personnelle, problème avec le paquet bdii.service (source : https://askubuntu.com/questions/261250/dpkg-invoke-rc-d-initscript-mysql-action-start-failed )
  • 1. pour identifier les paquets problématiques:
    sudo dpkg -S etc/bdii 
    bdii: /etc/bdii
    bdii: /etc/bdii/DB_CONFIG
    bdii: /etc/bdii/DB_CONFIG_top
    bdii: /etc/bdii/bdii.conf
    bdii: /etc/bdii/BDII.schema
    
  • 2. pour résoudre :
    Puis suppression des paquets corrompus qui semblent gênants :
    sudo apt-get remove --purge mysql-server mysql-client mysql-common
    sudo apt-get autoremove
    sudo apt-get autoclean
    

TUTORIELS A LA MAISON

lundi 4 octobre

ACTIONS

-- réunion hebdomadaire

Avec Estèle, Jean-Baptiste et Pierre.
  • Discussion notamment sur OpenBadges, comme outil potentiellement utile pour que les étudiants puissent montrer leurs compétences validées par le fablab et un tiers de confiance académique (en l'occurence l'université de Bordeaux) : https://www.u-bordeaux.fr/Formation/Open-Badges
    • Proposition d'Estèle et Pierre : intégrer cet outil dans le site internet " carnet de compétences " généré automatiquement pour chaque usager du fablab lors de leur inscription (cf [[serveur:Ergonomie]].
    • Objectif : créer un référentiel de compétences pour les (avec niveaux de savoir-faire)
    • Proposition de mise en lien pour partage d'expérience avec Stéphanie Vincent des Compagnons du Dev par Habib : https://co-dev.org/la-fabrique-numerique-de-gonesse-oriente-les-jeunes-decrocheurs-vers-le-numerique/
  • Discussion sur des grands thèmes de société :
    • autonomie alimlentaire d'une métropole comme Bordeaux
    • enjeux fonciers de la relocalisation agricole en polyculture

-- Reprise de la documentation de Thermo_bibli #1

  • J'ai assisté à la description par Pierre de toute la chaîne du projet Thermo_Bibli , depuis les capteurs d'humidité température à l'affichage des données sous formes de graphiques sur Grafana et l'envoi d'alertes mail.
  • Liste des actions à venir relatives au projet ( tickets : #210, #217, #222, #241, #275, #310, ) :
    • précision des capteurs à revoir (hardware) - voir ticket
    • faire fonctionner le hotspot - ne prend pas la data réseau (réseau - firmware)
    • faire fonctionner le ssl de la carte mcu au serveur Aquilenet (réseau) - voir ticket
    • faire fonctionner les alertes mail depuis la VM vers X mails (réseau) - voir ticket

vendredi 1 octobre

ACTIONS

-- la Brique Internet

poursuite de l'installation de la Brique Internet ( https://labriqueinter.net/ ) :

h3 -- virsh
découverte de l'outil logiciel virsh, qui permet de configurer une machine virtuelle QEMU/KVM en lien de commande : https://computingforgeeks.com/virsh-commands-cheatsheet/


jeudi 30 septembre

ACTIONS

Discussion autour de La Brique Internet

  • Discussion ad hoc sur la Brique Internet (tout petit serveur fait maison) : https://labriqueinter.net/
    • et notamment sur le système de charge pour éviter qu'elle ne soit lente si l'on y ajoute un disque dur

Découverte de Grafana

projet https://projets.cohabit.fr/redmine/projects/projets-du-fablab/wiki/Thermo-Bibli via anomalie #300 : https://projets.cohabit.fr/redmine/issues/300 _
_documentation officielle de Grafana : https://grafana.com/tutorials/grafana-fundamentals/

systemctl start grafana-server.service 
FAILED
  • Recherche des erreurs dans les logs de grafana :
    less /var/log/grafana.log | grep eror
    • on découvre une erreur de "//" sur une ligne du fichier de configuration grafana.ini et un erreur de permissions sur les certificats .pem :
      • modification erreur de syntaxe dans le fichier grafana.ini :
        sudo nano /etc/grafana/grafana.ini
        
      • modification des droits du dossier /cert/live/cohabit-capteurs.aquilenet.fr :
        cd /cert/live/cohabit-capteurs.aquilenet.fr
        chown root:cert ./*
        
      • modification des droits des fichiers .pem contenus dans le dossier /cert/live/cohabit-capteurs.aquilenet.fr (plus restrictif sur la clé privé...:
        ls -l
        chmod 664 cert.pem
        chmod 664 fullchain.pem
        chmod 660 key.pem
        
      • redémarrage du service grafana :
        systemctl start grafana-server
        systemctl status grafana-server
        

Nouveau projet : "réécriture de la BDD Usagers du Fablab"

  • avons passé un moment avec Jean-Baptiste à discuter de l'usage actuel de la BDD qu'il a créée via Libreoffice Base pour gérer les adhésions au fablab et comme support pour les listes mails
  • avons créé cette page wiki pour commencer à écrire les souhaits d'évolution, et notamment :
    *connecter la BDD aux autres outils numériques du fablab (prio : redmine, tchat element?)
    *la documenter et la rendre facilement lisible aux prochains administrateurs du fablab de Cohabit
    *publier cette documentation pour qu'elle soit utile à tous les fablabs de France avec un fonctionnement associatif
    *outil ultime : "annuaire de compétences", et avoir une visualisation et un "goût" de l'ambiance du réseau d'usagers

La page wiki :
https://projets.cohabit.fr/redmine/projects/administration-du-fablab/wiki/Réécriture_de_la_BDD_"Usagers_du_Fablab"/

Pourquoi avoir choisi grafana plutôt qu'un autre ?


lundi 27, mardi 28 septembre

ACTIONS

Mise en place de l'accès SSH à la VM du projet termo_bibli

sur capteurs-cohabit.aquilenet.fr

Résolution du ticket #292

"ajouter des lignes dans l'aide syntaxique redmine"

QUESTIONS


vendredi 24 septembre

ACTIONS

h3.Travail sur anomalie #292

ticket: https://projets.cohabit.fr/redmine/issues/292

MAJ du fichier *wiki_syntax_textile.html dans le sous-dossier ./redmine/public/fr/
1ère phase:
modification de 2 lignes html dans la table "images"
puis, redémarrage du service en redémarrant apache
*Résultat intrigant : le changement n'est pas pris en compte

2ème phase :
étude rapide de l'arborescence et recherche dans les forums "update redmine front end" update redmine html"
**tentative de vider le cache, paragraphe "Step 5 : clean up" : https://www.redmine.org/projects/redmine/wiki/RedmineUpgrade
  • redémarrage d'Apache
    ***Résultat: toujours pas de changement dans l'aide...

3ème phase :
*échange avec Alexander. Après quelques essais-recherche : un simple fn+F5 (cache refresh côté client) : a permis de recevoir la modification.


vendredi 24 septembre

ACTIONS

erreur sur ma machine personnelle...

...lors d'une MAJ de paquets:
sept. 24 10:19:50 habsinn systemd[1]: bdii.service: Failed with result 'exit-code'.
sept. 24 10:19:50 habsinn systemd[1]: Failed to start LSB: BDII.
  • recherche,rappel sur les services ( source : https://vitux.com/how-to-start-stop-and-restart-services-in-debian-10/ ):
    • Commandes courantes :
      • pour lister les services sous Debian :
        ls /etc/init.d/
      • pour lister les services avec leur état :
        systemctl list-unit-files
        
      • pour vérifier le statut d'un service en particulier :
        /etc/init.d/{servicename} status
        
      • on remplace status par stop (pour arrêter le service) et restart (pour le redémarrer)

Réunion "parcours de documentation usager" #2 :

(poursuite de la réunion commencée la veille avec Pierre)

tableau-blanc
tableau-blanc

  • outils (avec automatisation éventuelle) à créer :
    • passer d'un " formulaire d'inscription Fablab+planning papier --> bdd libreoffice" à "formulaire d'inscription en ligne --> bdd posgres"
    • organiser les listes mails (SYMPA d'Aquilenet) avec Jean-Baptiste:
      • en définissant de nouvelles listes à créer ?
      • avec un script qui les crée à partir de la bdd existante ?
  • objectif pour les stages court/atelier des collégiens/lycéens : groupes d'élèves narrent par petites groupes de 4-5 des choses qu'ils ont vu au fablab
    • ajout d'un plugin video dans redmine : https://github.com/cforce/redmine_embedded_video (-->voir syntaxe), en suivant le tutoriel suivant ( https://www.redmine.org/projects/redmine/wiki/Plugins )
      ****test d'upload d'une vidéo de 75Mo (durée:1min30s) après installation du plugin. La vidéo ne se charge pas...:
      syntax:
      Loading the player ...
      • commandes utiles pour couper des vidéos existantes en quelques secondes et pour convertir un fichier vidéo webm à mp4:
        ffmpeg -i 'Game.of.Thrones.S06E07.720p.HDTV.x264-AVS.mkv' -ss 00:14:00 -t 00:00:20 -c:v copy -c:a copy output.mkv
        

        ffmpeg -fflags +genpts -i 1.webm -r 24 1.mp4
        
      • NB : les vidéos produites devront être faites directement au format .mp4 pour éviter d'avoir à faire un réencodage
      • NB : quid de la taille maximale de fichiers (195 Mo) actuellement ?
      • Test d'embed de vidéos depuis leur URL tube.aquilenet.fr puis youtube. Ne fonctionne pas non plus... :
        Loading the player ...
      • On recherche un nouveau plugin toujours maintenu dans le Répertoire des Plugins Redmine : https://www.redmine.org/plugins .
      • COnclusion : pas de plugin vidéo adéquat. On part sur las olution suivante : pour chaque vidéo, on insère une image + son hyperlien vers son URL tube.aquilenet.fr

réunion #1- projet termo_bibli

(insérer photo)

POUR LA PROCHAINE FOIS

- poursuivre la réunion sur les capteurs de température/humidité

QUESTIONS

- pour les services : différence entre init.d et systemctl ?


jeudi 23 septembre

ACTIONS

Réunion "parcours de documentation usager" #1

(1ère réunion avec Pierre autour de l'expérience de documentation des usagers du fablab
photo_schema_tableau-blanc)

tâche (anomalie): MAJ d'un plugin Redmine

- introduction au manipulations des plugins sur Redmine : https://www.redmine.org/projects/redmine/wiki/Plugins
- sur papier : schéma de l'application redmine installée sur le serveur Apache du fablab
- l'application Redmine se trouve dans un sous-dossier situé dans le dossier `/opt` , qui contient les progiciels (cf http://www.linux-france.org/article/sys/fichiers/fichiers-2.html). Il y a les 2 dernières versions de redmine: pourquoi? pourquoi comme sous-dossiers?
- 3ème question : quel backup avant d'upgrader un plugin ou carrément une nouvelle version de redmine ?
- je décide d'appeler Alexander après indice de Jean-Baptiste concernant des backups froids sur un disque dur au fablab...
- ccl :
- il y a backupninja : à démêler selon Alexander, qui n'aimait pas trop s'en servir si j'ai bien compris
- fichier utile : /etc/backup.d/10...
- contient le chemin de la bdd posgres

Tâche (anomalie): "nom d'hôte non reconnu"

- reconnaissance du paysage des DNS au fablab :
- pour tester localement avant de déployer :
- "For example, you may want to test a website locally with a custom domain name before going live publicly by modifying the /etc/hosts file on your local system to point the domain name to the IP address of the local DNS server you configured. The /etc/hosts is an operating system file that translate hostnames or domain names to IP addresses. This is useful for testing websites changes or the SSL setup before taking a website publicly live.
- `Host` command is a minimal and easy-to-use CLI utility for performing DNS lookups which translate domain names to IP addresses and vice versa.

habsinn@projets:/etc/apache2/sites-enabled
$ host projets.cohabit.fr
projets.cohabit.fr has address 185.233.101.20

- IP publique du serveur du fablab : ` 185.233.101.20`
- puis : `cat /etc/hosts` nous donne les informations du localhost :
```
127.0.0.1 localhost.projets.cohabit.fr localhost
#192.168.23.32 projets.cohabit.fr projets
```

- `cat /etc/hostname` pour obtenir le nom de la machine (serveur de coh@bit): elle se nomme `projets`

- problème résolu en remplacant `localhost` par `projets` à la fin de la première ligne du fichier `/etc/hosts`

Visites-accueil

- accueil de Loic Arnaud : sur décor de montagne pour un spectacle Le Clown et la fée (https://www.leclownetlafee.fr/)

- accueil d'Ida, étudiante en master de game design : pour son projet personnel avec un labo de recherche (le Cedric au CNAM : https://cedric.cnam.fr/)

A FAIRE LA PROCHAINE FOIS :

- finir l'upgrade du plugin "wiki

QUESTIONS

- quelle est la stratégie de backup adoptée ? en est-on satisfait (plaisir, temps passé par rappport au reste) ?


mardi 21 septembre

ACTIONS

- ajout d'anomalie 288 : hyperlien "blog_actus"
- étude de l'anomalie
- remplacement de lignes de html la avec commande `find` + `sed`
- `find <path_to_directory> -type f -exec sed -i 's/<search_text>/<replace_text>/g' {} \;`
- remarque : le code est fourni, avec beaucoup de lignes en doublon d'une page html à l'autre, et peu de modularité : risque d'erreurs élevé.
- ccl : il y a une refonte du site à considérer. Ca tombe bien : réunion avec Pierre le surlendemain, car le parcours de documentation par les usagers du fablab est à revoir

- différentes manières de redémarrer le serveur Apache (quand on a fait une mise à jour par exemple): https://www.cyberciti.biz/faq/star-stop-restart-apache2-webserver/
-

A FAIRE LA PROCHAINE FOIS :

- revoir le menu de projets.cohabit.fr/fablab dans chaque projet :
- voir comment créer des raccourcis bash récurrents
- ajouter module markdown dans redmine

QUESTIONS :

  1. LISTE DES RACCOURCIS BASH RECURRENTS
    - `sudo service apache2 restart`

lundi 20 septembre

ACTIONS

- Installation du client desktop Element, outil de discussion du Fablab (source : https://element.io/get-started )

- tutoriel : https://debianmalaysia.gitlab.io/posts/matrix-element-desktop-debian/  (remarque: erreur dans le tuto pour la commande "chmod". Il n'y a pas de "*s*" au fichier .gpgs)

- recherche des imprimantes réseau 'sans demander :p) :-1:
- tutoriel : installation de `nmap` pour scanner les ports ouverts : https://www.cyberciti.biz/faq/install-nmap-debian-ubuntu-server-desktop-system/
- le routeur est sur : http://192.168.0.1 (et pas http://192.168.1.1)
![](https://i.imgur.com/ukB5tIJ.png)

- Commande pour scanner les ports: `nmap -Al 192.168.0.1-254`
- Standard output:

@Starting Nmap 7.70 ( https://nmap.org ) at 2021-09-20 10:55 CEST
Nmap scan report for 192.168.0.1
Host is up (0.0014s latency).
Not shown: 993 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
1900/tcp open upnp
2008/tcp open conf
49152/tcp open unknown
49153/tcp open unknown

Nmap scan report for 192.168.0.108
Host is up (0.000030s latency).
Not shown: 999 closed ports
PORT STATE SERVICE
80/tcp open http

Nmap scan report for 192.168.0.174
Host is up (0.020s latency).
All 1000 scanned ports on 192.168.0.174 are closed

Nmap scan report for 192.168.0.242
Host is up (0.016s latency).
Not shown: 999 closed ports
PORT STATE SERVICE
22/tcp open ssh

Nmap done: 254 IP addresses (4 hosts up) scanned in 45.40 seconds@

- découverte de PInePHone (smartphone au hardware totalement libre (à part puce GPRS): https://pine64.com/product-category/pinephone/?v=0446c16e2e66
- mobian: https://wiki.mobian-project.org/doku.php?id=install-android

- chiffrer un fichier en 2 secondes : `gpg -c cpt.txt`

- accès au serveur du fablab :
- une fois la clé rsa publique copiée par le root du serveur dans `/home/habsinn/.ssh` dans le fichier (à créer éventuellement) `authorized_keys`
- https://www.simplified.guide/ssh/connect-to-different-port
- `ssh `:
- erreur:
- `sudo apt-get install openssh-server ii.`
- SERVER: `projets.cohabit.fr : 185.233.101.20 sur le port 55555 !!
- Test if the port that the SSH server listens to is reachable from the client host.

nc -zv projets.cohabit.fr 55555
Connection to remotehost 2022 port [tcp/*] succeeded!

- mon ordinateur personnel ne démarre plus après une manipulation :
- hypothèse: manque d'espace sur le disque dur
- solution : insertion clé bootable
- transfert de données sur une autre machine
- suppression de 4Gb données sur ma machine
- on enlève la clé bootable et on redémarre :
- ca a marché, ouf!

A FAIRE LA PROCHAINE FOIS :

ajouter notif mails des tickets redmine
- ajouter module markdown dans redmine

QUESTIONS :