From b4b26986c9ecae4c1ea5bf76fc8bf101f9634fee Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Tue, 4 Oct 2022 21:56:52 +0000 Subject: [PATCH] =?UTF-8?q?Update=20R=C3=A9unions/CR=5F2022=5F10.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Réunions/CR_2022_10.md | 732 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 732 insertions(+) create mode 100644 Réunions/CR_2022_10.md diff --git a/Réunions/CR_2022_10.md b/Réunions/CR_2022_10.md new file mode 100644 index 0000000..b6f0b0e --- /dev/null +++ b/Réunions/CR_2022_10.md @@ -0,0 +1,732 @@ +# Compte-rendu de réunion mensuelle - octobre 2022 + +Mardi 4 octobre 2022, 20h30-23h00 + +*SALON COMINFRA : xmpp:cominfra@salons.a-lec.org?join + +*En audio dans le salon Mumble Cominfra : [https://audio.a-lec.org/](https://audio.a-lec.org/) + +Réunion Cominfra + +# Prologue + +Pad précédente réunion : [https://pad.chalec.org/p/Réunion\_Cominfra\_Septembre\_2022](https://pad.chalec.org/p/Réunion\_Cominfra\_Septembre\_2022) + + + +Présents : + + * Cpm + * neox + * croax + + +Excusé : + + * Echolib + + +**Pas excusé : ** + + * + + + +Rappel : faire le revue de tous les sujets de la commission Infrastructure de Libre en Communs. + + + +## Statistiques + +Machines : + + * routeurs : 2 (routeur, turris) + * pm : 4 (mother, aunt, britt, anthea) + * vm : 24 + 3 non supervisées + + +Sites : + + * La Varenne : routeur, mother, aunt, 1 ventilo + * Fontainebleau : anthea + * Gisors : turris, britt + + +Tickets : + + * [https://git.a-lec.org/groups/a-lec/commissions/infrastructure/-/boards](https://git.a-lec.org/groups/a-lec/commissions/infrastructure/-/boards) + * non fermés : 53, 41~~, 60~~ + * actifs : 41, 31 , ~~31 39~~ + * ouverts : 34, 26, ~~26 29 21 19~~ + * en cours: 4, 2, ~~2 3 3~~ + * bloqué : 3, 3, ~~2 7 6~~ + * rejeté: 0, 2, ~~ 2 1 0~~ + * résolus : 12, 27, 8 ~~23 28 01~~ + + +Encouragement à faire des tickets pour toutes les actions (même un ticket rapide), cela reflète l'activité (et historise) + + + +## Gestion de la commission + + * [https://git.a-lec.org/a-lec/commissions/infrastructure/gestion-de-commission/-/issues](https://git.a-lec.org/a-lec/commissions/infrastructure/gestion-de-commission/-/issues) + * RAS + + +# Services techniques + +## Infra générale + + * [https://git.a-lec.org/a-lec/commissions/infrastructure/infra-generale](https://git.a-lec.org/a-lec/commissions/infrastructure/infra-generale) + + + * Nouveau matériel + + + * Routeur Turris Omnia installé et fonctionnel \o/ + * Il manque la doc de l'accès; todo neox + * Section spéciale pour le routeur dans git ? + * Nommage ? + * On sait pas encore + * Un projet pour tous les routeurs ? + * non + * Un projet pour chaque routeur + * des noms de nains ? de hobbits ? + * La config n'est pas sauvegardée + + + * SSDs dans mother et aunt + * Kingston DC500M + * TODO faire sonde vieillissement pour graphique dans Grafana + * Pour les prochains RAIDs SSD : 2x même marques ou marques différentes ? + * Pas de réponse évidente, il faut chercher + * Performance vs fiabilité + + + * Fin de mise à disposition du local de La Varennes + * [https://git.a-lec.org/a-lec/commissions/infrastructure/infra-generale/-/issues/49](https://git.a-lec.org/a-lec/commissions/infrastructure/infra-generale/-/issues/49) + * date prévisionnelle : 07/11 accès au nouvel emplacement + * Comment s'organiser ? + * Le CA a discuté + * [https://git.a-lec.org/a-lec/vie-associative/administratif/-/blob/master/CA/2022.09.23\_CA/2022.09.24\_CA.pdf](https://git.a-lec.org/a-lec/vie-associative/administratif/-/blob/master/CA/2022.09.23\_CA/2022.09.24\_CA.pdf) + + + * virtualisation/réplication disque : + * Pas de split brain DRBD ce mois-ci + * Changer les IPs ! + * TODO ticket + + + * état des machines physiques : + * routeur + * RAS + + + * mother + * SSD Samsung remplacé par un Kingston + + + * aunt + * SSD Samsung remplacé par un Kingston + + + * britt + * [https://git.a-lec.org/a-lec/commissions/infrastructure/infra-generale/-/issues/39](https://git.a-lec.org/a-lec/commissions/infrastructure/infra-generale/-/issues/39) + * TODO documenter l'installation initiale + * TODO ticket + * profil de britt : + * 32 coeurs + * C'est probablement trop, il serait possible de récupérer un CPU (16 coeurs) pour l'utiliser ailleurs + * Pas nécessaire actuellement, toutes nos machines sont pleines + * 16 Go de RAM + * C'est probablement trop, il serait possible de récupérer de la RAM pour en placer ailleurs + * + + * 1 To de disque dur mécanique à étendre + * echolib se charge des mises à jour + * Il y a manque d'eau dans britt + * Il faut lui donner à boire + * Beaucoup de problèmes réseaux détectés par isengard : le ping échoue fréquemment. + * [https://isengard.libre-en-communs.org/monitoring/host/history?host=britt.libre-en-communs.org](https://isengard.libre-en-communs.org/monitoring/host/history?host=britt.libre-en-communs.org) + * Site secondaire, donc pas "trop" grave + * Périmètre secondaire, fibre dégradée moins problématique + * serait bien d'évaluer plus précisément les pertes ; espoir d'amélioration (FreeTm + OrangeTm) + * passage à FDN pour essayer d'avoir une nouvelle ligne ? + * Nouvelles machine virtuelle : ns0.libre-en-communs.org, DNS secondaire + * Vu les problèmes de connectivité, l'avoir en fallback mais pas comme DNS secondaire "principal" + * achat de disque dur, car destiné à etre une sauvegarde secondaire : + * critères : prix, capacité, bruit + * décision à prendre + * actuellement VPN FDN sur fibre OrangeTM + * Il faut restructurer la chose prochainement + + + * anthéa : + * Enfin installé et fonctionnelle ! + * profil : + * TODO documenter l'installation initiale + * 32 coeurs (puissance similaire à mother et aunt) + * 32 Go de RAM + * 1 To hdd, à étendre + * ssd 128 Go à prix modique ? + * Pour l'instant pas de budget pour ça + * prévision des samsung en retour de support + * Connexion fibre dédiée (payée par l'asso) commandée + * Des difficulté côté FDN (et Kosc) pour la mise en place + * En attente de plus d'infos de la part de FDN + * Finalement validé et problèmes résolus + * En attente d'un coup de fil de Kosc pour l'installation + * Prévision opérationnel pour début novembre + * actuellement sur VPN FDN sur fibre OrangeTM + * Nouvelles machine : ns1.libre-en-communs.org + * Prévisions 2023 : + * Doublons de services coeurs ? + * Profiter de la fibre indépendante pour répartir les services gourmands en bande passante + * Fournir de la puissance de calcul à des universités ? + * Ouvrir un miroir debian ? + + + * Consommation d'énergie La Varenne + * [https://git.a-lec.org/a-lec/commissions/infrastructure/infra-generale/-/issues/51](https://git.a-lec.org/a-lec/commissions/infrastructure/infra-generale/-/issues/51) + * [https://git.a-lec.org/a-lec/commissions/infrastructure/infra-generale/-/issues/52](https://git.a-lec.org/a-lec/commissions/infrastructure/infra-generale/-/issues/52) + * [https://git.a-lec.org/a-lec/commissions/infrastructure/infra-generale/-/issues/62](https://git.a-lec.org/a-lec/commissions/infrastructure/infra-generale/-/issues/62) + * actuellement mesure manuelle + * serait bien de trouver un matériel permettant les mesures automatiques + * Cpm à chercher : c'est ... compliqué. + * TODO voir wiki de LibrePlanet + * TODO demander à gnutoo + * TASMOTA + * [https://templates.blakadder.com/](https://templates.blakadder.com/) + * [https://tasmota.github.io/docs/](https://tasmota.github.io/docs/) + * [https://templates.blakadder.com/ketotek\_KTEM06.html](https://templates.blakadder.com/ketotek\_KTEM06.html) + * MQTT + + + * #3 Hébergement web pour le projet gem-graph[https://git.a-lec.org/groups/a-lec/commissions/infrastructure/-/boards](https://git.a-lec.org/groups/a-lec/commissions/infrastructure/-/boards) + * en attente + * RAS + * Bientôt remplacé par une page sur le site www.a-lec.org + + + * #28 HSTS Preload pour a-lec.org et chalec.org + * Neox :~ + * ouvrir un ticket dédié Chalec Fait neox + + + * #33 URL autoconfiguration mail + * planifié => résolu + + + * #34 Création de la machine virtuelle status.chalec.org + * Fait neox + + + * #36 Décentralisation de l'infrastructure Libre en Communs + * planifié + * en cours + + + * #37 Virer les messages on/off de fail2ban + * Fait neox + + + * #63 Remplacer les SSD défaillants + * en cours + + + * #65 Créer une machine DNS à Fontainebleau + * en cours + + + * #72 Point consommation d'énergie La Varenne novembre 2022 + * TODO + + + * #73 Créer une machine virtuelle stats.a-lec.org + * TODO + + + * authentifcation forte : + * pousser l'adoption de l'A2F aux membres de l'équipe ? + * neox +1 + * solution de clé : + * Solokey : [https://solokeys.com/](https://solokeys.com/) + * neox en achète une perso + * cpm en utilise déjà une sur l'infra a-lec (coffre, git…) + * prendre absolument la version usb-c + * Nitrokey : [https://www.nitrokey.com/fr](https://www.nitrokey.com/fr) + * pas de usb-c disponible + * du flou dans la spéc open-hardware + * ~~YubiKey~~ : pas libre /o\ + * bonne pratique => 2 clés ? + * À étudier + * commande groupée ? + * neox : 2 + * croax : 2 + * cpm : 2 + * echolib: 1 + + +## Coffre + + * documentation + * Todo neox + + + * y a des majs à faire + * il manque un protocole clair pour le faire + * todo avec la doc + * /!\ + * tickets : [https://git.a-lec.org/a-lec/commissions/infrastructure/service-coffre/-/issues](https://git.a-lec.org/a-lec/commissions/infrastructure/service-coffre/-/issues) + * RAS + + +## Coreboot + + * l'infra tourne sous coreboot 4.6 et Dasharo 4.11 + * Installation de Libreboot (build de Dasharo) effectuée sur mother + * Échec pour aunt. A enquêter + * tickets : [https://git.a-lec.org/a-lec/commissions/infrastructure/coreboot/-/issues](https://git.a-lec.org/a-lec/commissions/infrastructure/coreboot/-/issues) + * RAS + * Libreboot pour KGPE-D16 ne fonctionne pas donc en attendant une prochaine release, on construit Coreboot avec les méthodes de Libreboot + * TODO attente prochaine version de Libreboot compatible KGPE-D16 + + +## DNS + + * [https://git.a-lec.org/a-lec/commissions/infrastructure/dns](https://git.a-lec.org/a-lec/commissions/infrastructure/dns) + + + * #1 [DNS] Enregistrement TLSA en zone du DNS pour se décentraliser de Let's Encrypt + * planifié+bloqué + * todo neox + + + * #5 Ajouter un enregistrement CAA + * bloqué + + + * #8 DANE/TLSA mail + + +## Forge / git.a-lec.org + + * neox : + * Une grosse maj + + + * tickets : [https://git.a-lec.org/a-lec/commissions/infrastructure/git/-/issues](https://git.a-lec.org/a-lec/commissions/infrastructure/git/-/issues) + + + * #5 Mettre à jour en 15.2.3 + * FAIT neox + * #6 Mettre à jour en 15.3.2 + * FAIT neox + * #7 Mettre à jour en 15.4.1 + * FAIT neox + + + * questions : + * surveiller la gouvernance + * RAS + + +## Forge / Sid bot XMPP + + * Neox en action + * [https://git.a-lec.org/a-lec/commissions/infrastructure/sid-xmpp-bot](https://git.a-lec.org/a-lec/commissions/infrastructure/sid-xmpp-bot) + * sera déployé un jour + * tickets : RAS + + +## Mail + + * Équipe : croax + wilder + * Événements : + * RAS + * Statut : + * VM + * Disques : 9.9/50GB (22%) + * RAM : 0.392/2GB + * Nombre total de boites : 42 + * Nombre de boites humaines : 38 + * Redirections : 17 + * Espace disque des boites : + * Total : 2.9, 3.3, 3.4, 3.5, 3.8, 3.1G + * Quasi totalité < 100Mo + * Liste Tickets : [https://git.a-lec.org/a-lec/commissions/infrastructure/mail/-/issues?](https://git.a-lec.org/a-lec/commissions/infrastructure/mail/-/issues?) + * Résolus Ouverts : 7 + * Rejeté : 0 + * Non résolus : 3 + * Rejeté : + * + + * Résolu + * 91 Création de compte courriel membre n°40. + * 106 Création d'un compte courriel membre n°42. + * 107 Création d'un compte courriel membre n°43. + * 108 Création d'un compte courriel membre n°45. + * 109 Création d'un compte courriel membre n°41. + * 110 Utiliser quoted-printable pour les mails de notification de mise en place de services + * 111 Rendre l'adresse "membres" non autorisée depuis l'extérieur + * todo restreindre encore plus + * En cours + * + + * À faire + * 33 Roundcube : Impossible de changer le mot de passe + * 74 Automatiser l'inscription de nouveaux membres + * Vu le repo des outils de trésorerie (y a du code pour accéder aux issues gitlab) + * 85 Quota + + +Questions : + + * + + + +## Sauvegardes + + * nous avons : + * backup quotidien (avec historique de 3 jours) + * backup hebdomadaire (avec historique de deux semaines) + * backup mensuel (avec historique de deux mois) + * comment accéder à la doc Git si le SI est hors service ? + * faire un miroir sur une autre forge + * TODO Neox + * TODO faire script pour détecter les projets GitlabCE non mirrorés + + + + + * tickets : [https://git.a-lec.org/a-lec/commissions/infrastructure/sauvegardes/-/issues](https://git.a-lec.org/a-lec/commissions/infrastructure/sauvegardes/-/issues) + + + * #2 Sauvegardes – Dump automatique des bases de données sur les vm + * ex [https://git.a-lec.org/a-lec/commissions/infrastructure/infra-generale/-/issues/25](https://git.a-lec.org/a-lec/commissions/infrastructure/infra-generale/-/issues/25) + * planifié + + + * #4 Créer une ou des sondes de vérification des sauvegardes + * il faut ajouter des sondes + * todo + + + * #7 Incident fallocate + * Résolu + + + * #8 Choisir une solution alternative de sauvegarde + * TODO + * [https://git.a-lec.org/a-lec/commissions/infrastructure/sauvegardes/-/issues/8](https://git.a-lec.org/a-lec/commissions/infrastructure/sauvegardes/-/issues/8) + * Tentative d'analyse comparative + * [https://pad.chalec.org/p/analyse\_comparative\_sauvegarde\_bmPrhUnq](https://pad.chalec.org/p/analyse\_comparative\_sauvegarde\_bmPrhUnq) + + + * #9 Absence de sauvegarde depuis 2 jours + * Phénomène inexpliqué + + + * #10 Sauvegarder la configuration du routeur + * TODO + + + * questions : + * Ce système de sauvegarde est-il vraiment fiable et efficace ? + * non + + +## Supervision + + * [https://git.a-lec.org/a-lec/commissions/infrastructure/isengard](https://git.a-lec.org/a-lec/commissions/infrastructure/isengard) + * #6 Créer une procédure pour ajouter une sonde locale à une vm + * TODO neox quand ça marchera + * #8 Étudier le déploiement de sondes à l'extérieur du SI + * TODO + * #9 Configurer correctement l'ajout de sondes locales sur les machines virtuelles + * oui mais marche pas, todo neox + * des essais avec www.chalec.org : marche toujours pas + * Des nouvelles, il faut s'y remettre \o/ + + +Questions : + + * documentation ? + * fait neox et cpm + * données stockées dans grafana ? + * ça commence à grossir, TODO voir purge + + + + +# Services généraux + +## Audio.a-lec.org + + * équipe : Cpm + * [https://git.a-lec.org/a-lec/commissions/infrastructure/audio](https://git.a-lec.org/a-lec/commissions/infrastructure/audio) + * tickets : RAS + * questions : + * RAS + + +## Gestion (membre et comptabilité) + + * [https://gestion.a-lec.org/](https://gestion.a-lec.org/) + * tickets : [https://git.a-lec.org/a-lec/commissions/infrastructure/gestion/-/issues](https://git.a-lec.org/a-lec/commissions/infrastructure/gestion/-/issues) + * documentation d'installation ? + * todo neox + + + * #6 Réception multiple de cron en erreur + * Résolu + + + * #7 Export PDF + * TODO + + + * #8 Réparer le script de gestion des dons + * TODO + + + * Remarques/questions + * garradin va changer de nom (snif) + + +## toot.a-lec.org + + * équipe : echolib + neox + * instance Mastodon + * gros pics de consommation pas expliqués + * volonté de passer à Pleroma ++ + * TODO migrer vers Pleroma + * ~~3 comptes~~ 1 seul : + * **a-lec** + * comcom responsable + * suppression ok + * des messages envoyés + * plusieurs fois cités + * doc d'install spécifique a-lec ? + * cela vaut-il le coup si migration à Pleroma ? NOOOOOOON. + * évaluer Friendica + * rejeté + + +Dès que GSL est push, je m'occuper de voir pour friendica + + * ~~questions :~~ + * ~~quel rapport entre toot.a-lec.org et friendica ?~~ + * ~~friendica est une potentiellement une alternative à Mastodon, en concurence à Pleroma~~ + * ~~pour la migration, la question de l'export des toots se pose car campagnes etc~~ + * Rejeté pour des raisons de performances et de bugs soulevées par un chaton + * Reflexion : migrer toot vers pleroma seulement si toot chalec est stable ? + * Reflexion 2 : si on migre jamais, on tootera jamais sur pleroma, donc peut-être qu'il faut tooter maintenant sur pleroma et migrer l'historique quand ça marchera ? + + +## www.a-lec.org + + * équipe : echolib + neox + * migration vers la nouvelle version de STL + * FAIT + * #8 AJout d'un bouton vers le compte fédivers en pied de page + * nouveau todo + * #10 revoir la structure du site + * en cours, ça avance + * #11 Améliorer la page "Projets et Commissions" + * rédactionnel + * #12 Améliorer la page "Contact" + * rédactionnel + * #13 page d'accueil : contenu + * 7 demandes en un ticket => demander de scinder + * #14 page d'accueil : menu + * #15 page d'accueil : liens + + + * questions/remarques : + * + + + +## www.a-lec.org / Template STL pour www.a-lec.org + + * équipe : neox + * CSS ok (mais évolution) + * todo echolib un readme pour le repo GSL de l'infra pour expliquer ce que c'est + * Fait echolib + * todo echolib gérer les allers-retour de wip à www et inversement + * Fait echolib + * source : [https://git.a-lec.org/echolib/gsl](https://git.a-lec.org/echolib/gsl) + * tickets : [https://git.a-lec.org/a-lec/commissions/infrastructure/template-gsl/-/issues](https://git.a-lec.org/a-lec/commissions/infrastructure/template-gsl/-/issues) + * #2 Utiliser la fonte Luciole + * Ça a l'air plutôt agréable + * echolib valide + * TODO Cpm lien vers fichiers web FAIT (voir ticket) + * TODO intégrer !!! + * CC BY-SA (et non pas CC-BY-SA) + + + + +## echolib's Tyto (dépôt en attente) + +Changement de nom : GSL -> STL->Tyto. + + + +On salue le travail réalisé par echolib pour la gestion arborescente, qui est vraiment capitale pour notre activité. Bravo et merci ! + + + +## xmpp.a-lec.org + + * équipe : Neox + * [https://git.a-lec.org/a-lec/commissions/infrastructure/xmpp](https://git.a-lec.org/a-lec/commissions/infrastructure/xmpp) + * ça tourne tranquillement + * **Rapport d'activité septembre 2022** + * Nombre de domaines couverts: 1 + * Nombre de comptes (tous domaines confondus): 23 + * actifs: 17, 15, 14 + * inactifs: 8, 8, 9 + * suppressibles : 0 + * + + * Un compte inactif est un compte ne s'étant pas connecté durant le mois écoulé. + * Un compte suppressible n'a jamais lu le message de bienvenue et ne s'est pas connecté durant les six derniers mois. + + + * Occupation d'espace disque des archives de messages (MAM): 236Mio, 216Mio, 190 Mio + * Salons XMPP actifs: 25, 28 ~~25~~ + + + * Occupation d'espace disque téléversement de fichiers: 2.9Gio, 2.6Gio, 1,9Gio + * maximum: 1.3Gio, 919Mio + * minimum: 16Mio, 15Mio, 1,1Mio + * moyenne: 263Mio, 241Mio, 171Mio + + + * Nombre d'appels audio/vidéo transmis: 52, 41, 81 + * Quantité de données relayée (UDP): moyenne 0.55 MiB, max 5 MiB, total 29 MiB + + + * déclaration auprès d'observers + * todo neox + + + * Documentation + * TODO neox + + + + +# Services aux projets externes + +Note : ces services doivent soutenir des projets externes qui rencontrent nos buts et à but non lucratifs. + + + +[https://git.a-lec.org/services-aux-projets-externes](https://git.a-lec.org/services-aux-projets-externes) + + + +Questions : + + * Odile demande l'hébergement de pages web d'un sous-domaine à elle pour des articles sur les Communs + * sur le principe : OUI + * compatible avec la contrainte intérêt général : OUI (car sur les communs) + * où + comment + qui ? + * nouvelle vm : + * nom ? + * déléguer la gestion de la vm à Odile + * En attente de la demande explicite par ticket ou courriel + * relancer Odile en septembre + * dès que possible + * !!! + * créer un projet spécifique sur l'hébergement de fichiers statiques + * nommage : web.a-lec.org vs ~~cdn.a-lec.org~~ + * TODO créer groupe dans Services aux projets externes + logo + description + + +## Zones DNS pour projets externes + + * équipe : neox + * [https://git.a-lec.org/services-aux-projets-externes/zone-dns](https://git.a-lec.org/services-aux-projets-externes/zone-dns) + * tickets : [https://git.a-lec.org/groups/services-aux-projets-externes/zone-dns/-/issues](https://git.a-lec.org/groups/services-aux-projets-externes/zone-dns/-/issues) + * todo neox continuer l'automatisation + * en cours + * Pas avancé + * questions : + * description de groupe : présenter qui fait quoi pour qui pour quoi ? FAIT neox + * TODO ajouter logo au groupe + + +# Divers + +Des projets divers, où les ranger ? + + * [https://git.a-lec.org/a-lec/commissions/infrastructure/captchas](https://git.a-lec.org/a-lec/commissions/infrastructure/captchas) + * Là où il est + * [https://git.a-lec.org/a-lec/commissions/infrastructure/adhesion.a-lec.org](https://git.a-lec.org/a-lec/commissions/infrastructure/adhesion.a-lec.org) + * [https://git.a-lec.org/a-lec/commissions/infrastructure/don.a-lec.org](https://git.a-lec.org/a-lec/commissions/infrastructure/don.a-lec.org) + * Réfléchir sur la création d'un groupe GESTION ? + * Avoir un nom commençant par "GESTION -" ? + + +Déployer StatoolInfos ? + + * Déploiement sur une vm stats + * todo neox + * [https://git.a-lec.org/a-lec/commissions/infrastructure/infra-generale/-/issues/73](https://git.a-lec.org/a-lec/commissions/infrastructure/infra-generale/-/issues/73) + * services visés : www, audio, xmpp, git, toot + + +# Épilogue + +## ~~Vacances/indisponibilité~~ + + * + + + +## Prochaine réunion + +Date prochaine réunion : + + * 26 octobre : + * pour : croax, cpm, neox + * autre ? + + +Horaire de début : + + * 20h30 + * pour : croax, Cpm, neox + * autre ? + + +Horaire de fin : + + * 23h00 + * pour : Cpm, croax + * autre ? + + +Fin de la réunion à 23h44 + + + + + + + + + + + + + + + +