tag:linuxfr.org,2005:/tags/auto-hebergement/publicLinuxFr.org : les contenus étiquetés avec « auto-hébergement »2023-10-03T10:12:11+02:00/favicon.pngtag:linuxfr.org,2005:Diary/408922023-09-30T15:01:57+02:002023-09-30T16:17:39+02:00Importer des "issues" GitHub dans des "tickets" TracLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Bon, je me suis laissé entraîner. Je savais que ça finirait mal. Il y a quelques années, j'ai ouvert un compte Github. J'en avais probablement besoin pour participer à un projet hébergé sur cette plateforme. Et puis j'ai commencé à y mettre mes propres projets, parce que c'était pratique de pouvoir créer un dépôt Git en 3 clics. Je me suis bientôt retrouvé avec plus de 100 projets sur Github.</p>
<p>Seulement voilà, Github, ce n'est pas un logiciel libre. Et en plus, maintenant ils se concentrent sur l'intelligence artificielle et plus sur les outils pour écrire du logiciel. Et en plus, ils ont rendu l'authentification à 2 facteurs bientôt obligatoire et j'ai pas envie de leur donner mon numéro de téléphone (surtout que j'ai eu des problèmes avec mon téléphone il y a quelques jours et c'était déjà assez pénible comme ça).</p>
<p>J'aurais pourtant dû le voir venir: j'avais déjà dû quitter Google Code Project Hosting ainsi que BerliOS il y a quelques années. Je m'étais mis en place un Trac et un Subversion sur mon serveur personnel pour héberger mes projets.</p>
<p>Ces derniers mois j'ai commencé à migrer quelques-uns de mes petits projets à nouveau sur mon propre serveur. J'ai remis Trac à jour (la version 1.6 vient de sortir il y a quelques jours, c'est la première version stable à supporter Python 3, mais j'utilisais déjà les versions 1.5 qui sont aussi en Python 3 depuis longtemps). J'avais aussi installé Gerrit pour pouvoir recevoir des patchs pour mes projets. Il ne reste plus qu'à déplacer les projets en essayant de ne pas perdre trop d'informations.</p>
<p>Migrer le dépôt Git est la partie facile: Git est un système décentralisé, on peut récupérer les commits, branches, tags, etc et les pousser ailleurs très facilement (avec l'option --mirror par exemple). Le problème, c'est tout le reste, c'est à dire dans le cas de GitHub, les pages de wiki et les "issues", qui sont l'endroit ou un peu tout l'historique de l'activité du projet est conservé: tous les bugs corrigés, les discussions sur comment implémenter une nouvelle fonctionnalité, etc.; et aussi le futur du projet: les bugs encore à corriger et les nouvelles fonctionalités à implémenter.</p>
<p>Étrangement, personne n'avait encore écrit de script pour faire cette migration. J'ai dû donc m'atteler à la tâche, en m'inspirant fortement d'un script destiné à migrer de Mantis vers Trac. Ce dernier n'avait été mis à jour ni pour Python 3, ni pour les changements d'APIs survenus dans les versions 1.0, 1.2, 1.4 et 1.6 de Trac. Le premier problème a été rapidement corrigé par 2to3, et le deuxième par une lecture de la documentation d'API et un changement assez répétitif sur le code.</p>
<p>Du côté de Github, l'interfaçage est plutôt simple avec une API REST exposant toutes les informations nécessaires. Du côté de Trac, il s'agit d'une API Python permettant, au choix, d'utiliser des classes fournissant une interface haut niveau, soit de manipuler directement la base de données de Trac à l'aide de requêtes SQL.</p>
<p>Au total, l'implémentation du script a demandé moins d'une journée (j'ai commencé hier soir et je termine aujourd'hui en début d'après-midi). Il me reste encore quelques petites choses à faire, mais je vais peut-être les faire à la main pour aller plus vite. Ainsi que finaliser la configuration du Trac pour le projet que je viens d'importer (avec un joli thème, un logo, la description du projet, etc).</p>
<p>En tout cas, si l'envie vous prend de quitter Github pour rejoindre Trac, le script est à votre disposition dans le wiki trac-hacks: <a href="https://trac-hacks.org/wiki/GithubImportScript">https://trac-hacks.org/wiki/GithubImportScript</a></p>
<div><a href="https://linuxfr.org/users/pulkomandy/journaux/importer-des-issues-github-dans-des-tickets-trac.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/133495/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/pulkomandy/journaux/importer-des-issues-github-dans-des-tickets-trac#comments">ouvrir dans le navigateur</a>
</p>
pulkomandyhttps://linuxfr.org/nodes/133495/comments.atomtag:linuxfr.org,2005:Bookmark/70292023-08-29T14:29:39+02:002023-08-29T14:29:39+02:00Faire une économie annuelle de 2 millions de dollar en serveur chez Pinterest avec Elixir <a href="https://paraxial.io/blog/elixir-savings">https://paraxial.io/blog/elixir-savings</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/133118/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/vendrediouletrollsauvage/liens/faire-une-economie-annuelle-de-2-millions-de-dollar-en-serveur-chez-pinterest-avec-elixir#comments">ouvrir dans le navigateur</a>
</p>
voltshttps://linuxfr.org/nodes/133118/comments.atomtag:linuxfr.org,2005:Diary/408512023-08-27T16:48:50+02:002023-08-27T16:48:50+02:00Activer Elasticsearch pour son instance MastodonLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p><em>Cet article est la suite de <a href="//linuxfr.org/users/julieng-2/journaux/heberger-son-instance-mastodon-seulement-en-profil-individuel">l'article pour héberger une instance Mastodon</a>.</em></p>
<hr>
<p>Mastodon (<3) évolue encore avec une belle nouveautée dans sa version stable de rentrée, comme l'indique <a href="https://mastodon.nothus.fr/@ericfreyss@mastodon.social/110961140969134182">par un <em>toot</em> d'Eric F.</a> : </p>
<blockquote>
<p>La #recherche plein texte (contenu des toots) est disponible sur la toute dernière version du logiciel #mastodon (en version bêta, déploiement dans la branche stable prévue en septembre selon @renchap)</p>
</blockquote>
<p>Encore faut-il avoir un Elasticsearch (ou son <em>fork</em> à licence bien plus permissive, <a href="https://opensearch.org/">Opensearch</a>) d'actif à disposition. Et comme <a href="https://mastodon.nothus.fr/@renchap@oisaur.com/110961306515686903">le rappelle Renaud C.</a>, <em>Mastodon core team member</em> (et MERCI à toute votre équipe !) : </p>
<blockquote>
<p>"(…) la fonctionnalité requiert ElasticSearch (comme les fonctionnalités de recherche hors hashtag des versions précédentes).<br>
On va clarifier la doc et indiquer plus clairement que <strong>ElasticSearch n'est plus vraiment considéré comme optionnel, vu que pas mal de fonctionnalités vont dépendre dessus.</strong>"</p>
</blockquote>
<p>Car, peut-être comme moi, vous vous êtes dits qu'Elasticsearch est (1) consommateur (pour mon NUC) ; (2) parfois un peu "subtil" (pénible) à administrer, pour assez peu d’intérêts lorsque vous êtes sur de très petites instances comme la mienne (mono-usager). Vous auriez volontairement zappé ce point…</p>
<p>Hélas il faut désormais se mettre à la page !</p>
<p>Voici les modifications à apporter afin de préparer l'environnement de cette nouvelle version. D'abord avec l'ajout du service concerné dans <code>docker-compose.yml</code> :</p>
<p><code><br>
es01:<br>
container_name: es01<br>
image: elasticsearch:8.9.1<br>
volumes:<br>
- ./elasticsearch8:/usr/share/elasticsearch/data<br>
environment:<br>
- "node.name=es01"<br>
- "discovery.type=single-node"<br>
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" # à adapter<br>
- "ELASTIC_PASSWORD=mon_super_mot_de_passe" # à changer <br>
</code>`</p>
<p>N'hésitez pas à ajouter un <em>healthcheck</em> si vous le souhaitez. Attention pour le point de montage du dossier dans le conteneur, Elasticsearch écrit en <em>root</em> par défaut. </p>
<p>Puis on charge la modification : </p>
<pre><code class="bash">docker compose up -d</code></pre>
<p>Ce qui lancera la récupération de l'image et son instanciation. Si vous avez plusieurs réseaux Docker voire plusieurs <em>stacks</em>, il est possible que vous ayez des redémarrages plus larges à prévoir. </p>
<p>Alors on regardera que l'instance va bien : </p>
<pre><code class="bash">capp@nothusserv1:~/mastodon$ docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
db postgres:14.6 <span class="s2">"docker-entrypoint.s…"</span> db <span class="m">8</span> months ago Up <span class="m">27</span> minutes <span class="o">(</span>healthy<span class="o">)</span>
es01 elasticsearch:8.9.1 <span class="s2">"/bin/tini -- /usr/l…"</span> es01 <span class="m">24</span> minutes ago Up <span class="m">24</span> minutes
mastodon-sidekiq-1 tootsuite/mastodon:v4.1.4 <span class="s2">"/usr/bin/tini -- bu…"</span> sidekiq <span class="m">23</span> minutes ago Up <span class="m">23</span> minutes <span class="o">(</span>healthy<span class="o">)</span> <span class="m">3000</span>/tcp, <span class="m">4000</span>/tcp
mastodon-streaming-1 tootsuite/mastodon:v4.1.4 <span class="s2">"/usr/bin/tini -- no…"</span> streaming <span class="m">23</span> minutes ago Up <span class="m">23</span> minutes <span class="o">(</span>healthy<span class="o">)</span> <span class="m">3000</span>/tcp, <span class="m">127</span>.0.0.1:4000->4000/tcp
mastodon-web-1 tootsuite/mastodon:v4.1.4 <span class="s2">"/usr/bin/tini -- ba…"</span> web <span class="m">23</span> minutes ago Up <span class="m">23</span> minutes <span class="o">(</span>healthy<span class="o">)</span> <span class="m">3000</span>/tcp, <span class="m">4000</span>/tcp
redis redis:7-alpine <span class="s2">"docker-entrypoint.s…"</span> redis <span class="m">58</span> minutes ago Up <span class="m">27</span> minutes <span class="o">(</span>healthy<span class="o">)</span></code></pre>
<p>Je vous conseille aussi de surveiller les journaux d'Elasticsearch (attention les yeux) : </p>
<pre><code class="bash">docker compose logs es01</code></pre>
<p>Vous pouvez également vérifier que l'instance ES tourne correctement en demandant le statut (comme pour un <em>healthcheck</em>), directement dans le conteneur visé : </p>
<pre><code class="bash">julien@julien-Vostro-7580:~/Developpement/mastodon/article$ docker compose <span class="nb">exec</span> -it -u root es01 bash
root@a0276a607959:/usr/share/elasticsearch# curl -u elastic:mon_super_mot_de_passe http://es01:9200
<span class="o">{</span>
<span class="s2">"name"</span> : <span class="s2">"es01"</span>,
<span class="s2">"cluster_name"</span> : <span class="s2">"docker-cluster"</span>,
<span class="s2">"cluster_uuid"</span> : <span class="s2">"***-***"</span>,
<span class="s2">"version"</span> : <span class="o">{</span>
<span class="s2">"number"</span> : <span class="s2">"8.9.1"</span>,
<span class="s2">"build_flavor"</span> : <span class="s2">"default"</span>,
<span class="s2">"build_type"</span> : <span class="s2">"docker"</span>,
<span class="s2">"build_hash"</span> : <span class="s2">"***"</span>,
<span class="s2">"build_date"</span> : <span class="s2">"***"</span>,
<span class="s2">"build_snapshot"</span> : false,
<span class="s2">"lucene_version"</span> : <span class="s2">"9.7.0"</span>,
<span class="s2">"minimum_wire_compatibility_version"</span> : <span class="s2">"7.17.0"</span>,
<span class="s2">"minimum_index_compatibility_version"</span> : <span class="s2">"7.0.0"</span>
<span class="o">}</span>,
<span class="s2">"tagline"</span> : <span class="s2">"You Know, for Search"</span>
<span class="o">}</span></code></pre>
<p>Parfait ! </p>
<p>On modifiera alors le fichier <code>.env.production</code> pour que l'instance la prenne en compte, en prenant garde à ce que le nom résolvable de votre conteneur soit bien déclaré dans <code>ES_HOST</code> (ici c'est "es01") : </p>
<pre><code class="text"># Elasticsearch (optional)
# ------------------------
ES_ENABLED=true
ES_HOST=es01
ES_PORT=9200
# Authentication for ES (optional)
ES_USER=elastic
ES_PASS=mon_super_mot_de_passe</code></pre>
<p>Ce qui va nous obligé à redémarrer (pas la peine de recréer) le conteneur Mastodon, ici s'appelant "web" : </p>
<pre><code class="bash">docker compose restart web</code></pre>
<p>Enfin vous pouvez rentrer dedans pour demander la création de l'index. Cela prend un peu de temps, soyez patient : </p>
<pre><code class="bash">julien@julien-Vostro-7580:~/Developpement/mastodon/article$ docker compose <span class="nb">exec</span> -it -u root web bash
root@21a0039cfad6:/opt/mastodon# <span class="nv">RAILS_ENV</span><span class="o">=</span>production bin/tootctl search deploy
Done! <span class="m">100529</span>/100529 <span class="p">|</span><span class="o">=========================================================================================================================================================================================</span><span class="p">|</span> Time: <span class="m">00</span>:00:17 <span class="o">(</span><span class="m">5913</span> docs/s<span class="o">)</span>
Indexed <span class="m">74684</span> records, de-indexed <span class="m">0</span></code></pre>
<p>Voilà, votre instance a sa propre indexation, comme une grande. Dans mon cas, les index nouvellement créés représentent 17 Mo au démarrage sur le disque, 4% de mon CPU et près d'1 Go de RAM - mais garder à l'esprit que mon instance est <em>mono-utilisateur</em> : cela peut être considérablement plus ! Laissez toujours Elasticsearch "souffler" et avoir du rab', il peut vite être erratique en cas de stress de ressources. </p>
<p>Évidemment on n'expose <strong>jamais</strong> son instance Elasticsearch au reste du monde, particulièrement avec aussi peu de sécurité que je viens de le décrire. Si vous avez un doute, n'hésitez jamais à demander dans un forum : mieux vaut s’embêter une heure avant, que tout perdre après ! </p>
<p>Vivement la rentrée… </p>
<div><a href="https://linuxfr.org/users/julieng-2/journaux/activer-elasticsearch-pour-son-instance-mastodon.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/133099/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/julieng-2/journaux/activer-elasticsearch-pour-son-instance-mastodon#comments">ouvrir dans le navigateur</a>
</p>
JulienGhttps://linuxfr.org/nodes/133099/comments.atomtag:linuxfr.org,2005:Bookmark/64552023-05-13T15:25:45+02:002023-05-13T15:25:45+02:00Toi aussi, fais ton serveur d'emails jetables!<a href="https://github.com/psarna/edgemail">https://github.com/psarna/edgemail</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/131213/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/orfenor/liens/toi-aussi-fais-ton-serveur-d-emails-jetables#comments">ouvrir dans le navigateur</a>
</p>
orfenorhttps://linuxfr.org/nodes/131213/comments.atomtag:linuxfr.org,2005:Post/435342023-03-17T19:27:04+01:002023-03-17T19:27:04+01:00proxmox derrière une freebox en ipv6<p>Bonjour,<br>
Bon vous direz je suis gourmant.. <br>
je cherche à utiliser les ipV6 fournis par free en mode routeur pour des machines sur un proxmox.</p>
<p>je met le lien local du proxmox en next hop<br>
le container sur le bridge avec le même réseau.<br>
ça fonctionne 1 journée de l’extérieur je joins le container sur son nom de domaine <br>
puis je met en cluster le proxmox et là badaboom le container devient injoignable.</p>
<p>le proxmox sort et est accessible depuis l’extérieur.<br>
le container sort sur l’extérieur, il est joignable depuis les machines de son réseau </p>
<p>par contre impossible de joindre le container de l’extérieur. les traceroute6 s’arrêtent à l'ip de la box !<br>
évidement l'assistance n'a sut que me renvoyer que vers une doc pour accélérez netlfix grace à ipV6 :'( </p>
<p>quelqu'un aurait ça qui fonctionne ou qui héberge avec une freebox ? </p>
<p>Tonton</p>
<div><a href="https://linuxfr.org/forums/linux-general/posts/proxmox-derriere-une-freebox-en-ipv6.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/130640/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/linux-general/posts/proxmox-derriere-une-freebox-en-ipv6#comments">ouvrir dans le navigateur</a>
</p>
tontonMaxhttps://linuxfr.org/nodes/130640/comments.atomtag:linuxfr.org,2005:Diary/404962022-12-07T22:38:16+01:002022-12-07T22:38:16+01:00Petit exemple de plugin AnsibleLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<h2 class="sommaire">Sommaire</h2>
<ul class="toc">
<li>
<ul>
<li><a href="#toc-liens-vers-dautres-journaux">Liens vers d'autres journaux</a></li>
</ul>
</li>
</ul>
<p>Pour ceux qui utilisent Ansible, voici un petit exemple de filtre, que je viens de coder pour des besoins personnels. Je suis entrain d'intégrer un "Web Keys Directory (WKD)" à une solution d'auto-hébergement.</p>
<p>J'avais besoin d'obtenir le <em>hash</em> de l'utilisateur. Par exemple, pour une adresse email <a href="mailto:andre@homebox.space">andre@homebox.space</a>, le nom d'utilisateur est "andre", et le hash est <code>z1cybqqife1c333kqxqifnz64w9tb3xh</code>.</p>
<p>Petite parenthèse, sur le web keys directory, qui permet de publier votre clé, ou d'obtenir automatiquement les clés GPG de vos contacts, lors de l'envoi d'un email. Par exemple, Thunderbird recherche la clé publique, et vous propose de l'importer pour le chiffrage.</p>
<p>Si vous hébergez votre domaine, vous pouvez publier votre clé publique, en utilisant deux paradigmes possibles, la méthode avancée ou la méthode directe, la seule différence étant l'adresse:</p>
<ul>
<li>Adresse directe: <a href="https://homebox.space/.well-known/openpgpkey/hu/z1cybqqife1c333kqxqifnz64w9tb3xh?l=andre">https://homebox.space/.well-known/openpgpkey/hu/z1cybqqife1c333kqxqifnz64w9tb3xh?l=andre</a>
</li>
<li>Adresse avancée: <a href="https://openpgpkey.homebox.space/.well-known/openpgpkey/homebox.space/hu/z1cybqqife1c333kqxqifnz64w9tb3xh?l=andre">https://openpgpkey.homebox.space/.well-known/openpgpkey/homebox.space/hu/z1cybqqife1c333kqxqifnz64w9tb3xh?l=andre</a>
</li>
</ul>
<p>Plus de détails dans les deux excellent journaux plus bas (du même auteur).</p>
<p>Problème: Il n'existe pas de filtre Ansible pour obtenir ce hash, voici donc le code, très simple, sans doute perfectible:</p>
<pre><code class="python"><span class="c1"># WKD hash encoder ansibleplugin</span>
<span class="c1"># Thanks to</span>
<span class="c1"># - https://github.com/artisanofcode/python-zbase32</span>
<span class="c1"># - https://www.uriports.com/blog/setting-up-openpgp-web-key-directory/</span>
<span class="c1"># for the implementation</span>
<span class="c1"># GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="p">(</span><span class="n">absolute_import</span><span class="p">,</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span><span class="p">)</span>
<span class="kn">import</span> <span class="nn">collections.abc</span>
<span class="kn">import</span> <span class="nn">math</span>
<span class="kn">import</span> <span class="nn">hashlib</span>
<span class="vm">__metaclass__</span> <span class="o">=</span> <span class="nb">type</span>
<span class="n">DOCUMENTATION</span> <span class="o">=</span> <span class="sa">r</span><span class="s1">'''</span>
<span class="s1"> name: wkd_hash</span>
<span class="s1"> version_added: "1.0"</span>
<span class="s1"> short_description: Return a user ID encoded using GPG WKD</span>
<span class="s1"> description:</span>
<span class="s1"> - Return a hashed version of a user ID for a GPG Web keys directory</span>
<span class="s1"> positional: _input, query</span>
<span class="s1"> options:</span>
<span class="s1"> _input:</span>
<span class="s1"> description: String to encode</span>
<span class="s1"> type: str</span>
<span class="s1"> required: true</span>
<span class="s1">'''</span>
<span class="n">EXAMPLES</span> <span class="o">=</span> <span class="sa">r</span><span class="s1">'''</span>
<span class="s1"> parts: '{{ "andre" | wkd_hash }}'</span>
<span class="s1"> # => "z1cybqqife1c333kqxqifnz64w9tb3xh"</span>
<span class="s1">'''</span>
<span class="n">RETURN</span> <span class="o">=</span> <span class="sa">r</span><span class="s1">'''</span>
<span class="s1"> _value:</span>
<span class="s1"> description:</span>
<span class="s1"> - Compute a WKD hash from a user ID</span>
<span class="s1"> type: str</span>
<span class="s1">'''</span>
<span class="kn">from</span> <span class="nn">ansible.errors</span> <span class="kn">import</span> <span class="n">AnsibleFilterError</span>
<span class="kn">from</span> <span class="nn">ansible.utils</span> <span class="kn">import</span> <span class="n">helpers</span>
<span class="k">def</span> <span class="nf">_chunks</span><span class="p">(</span><span class="nb">buffer</span><span class="p">:</span> <span class="nb">bytearray</span><span class="p">,</span> <span class="n">size</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="n">collections</span><span class="o">.</span><span class="n">abc</span><span class="o">.</span><span class="n">Generator</span><span class="p">[</span><span class="nb">bytearray</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="bp">None</span><span class="p">]:</span>
<span class="sd">"""</span>
<span class="sd"> chunks.</span>
<span class="sd"> :param buffer: the buffer to chunk</span>
<span class="sd"> :param size: the size of each chunk</span>
<span class="sd"> :return: an iterable of chunks</span>
<span class="sd"> """</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="nb">buffer</span><span class="p">),</span> <span class="n">size</span><span class="p">):</span>
<span class="k">yield</span> <span class="nb">buffer</span><span class="p">[</span><span class="n">i</span> <span class="p">:</span> <span class="n">i</span> <span class="o">+</span> <span class="n">size</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">wkd_hash_fn</span><span class="p">(</span><span class="n">input_str</span><span class="p">):</span>
<span class="n">_ALPHABET</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">"ybndrfg8ejkmcpqxot1uwisza345h769"</span>
<span class="n">_INVERSE_ALPHABET</span> <span class="o">=</span> <span class="p">{</span><span class="n">key</span><span class="p">:</span> <span class="n">value</span> <span class="k">for</span> <span class="n">value</span><span class="p">,</span> <span class="n">key</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">_ALPHABET</span><span class="p">)}</span>
<span class="c1"># We should use string only on imput</span>
<span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">input_str</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span>
<span class="c1"># Encode using sha1sum</span>
<span class="n">hashed</span> <span class="o">=</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">sha1</span><span class="p">(</span><span class="n">input_str</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">"utf-8"</span><span class="p">))</span>
<span class="c1"># Convert to a byte array</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">hashed</span><span class="o">.</span><span class="n">digest</span><span class="p">()</span>
<span class="n">result</span> <span class="o">=</span> <span class="nb">bytearray</span><span class="p">()</span>
<span class="k">for</span> <span class="n">chunk</span> <span class="ow">in</span> <span class="n">_chunks</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="mi">5</span><span class="p">):</span>
<span class="nb">buffer</span> <span class="o">=</span> <span class="nb">bytearray</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
<span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">byte</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">chunk</span><span class="p">):</span>
<span class="nb">buffer</span><span class="p">[</span><span class="n">index</span><span class="p">]</span> <span class="o">=</span> <span class="n">byte</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">_ALPHABET</span><span class="p">[((</span><span class="nb">buffer</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">&</span> <span class="mh">0xF8</span><span class="p">)</span> <span class="o">>></span> <span class="mi">3</span><span class="p">)])</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">_ALPHABET</span><span class="p">[((</span><span class="nb">buffer</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">&</span> <span class="mh">0x07</span><span class="p">)</span> <span class="o"><<</span> <span class="mi">2</span> <span class="o">|</span> <span class="p">(</span><span class="nb">buffer</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">&</span> <span class="mh">0xC0</span><span class="p">)</span> <span class="o">>></span> <span class="mi">6</span><span class="p">)])</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">_ALPHABET</span><span class="p">[((</span><span class="nb">buffer</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">&</span> <span class="mh">0x3E</span><span class="p">)</span> <span class="o">>></span> <span class="mi">1</span><span class="p">)])</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">_ALPHABET</span><span class="p">[((</span><span class="nb">buffer</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">&</span> <span class="mh">0x01</span><span class="p">)</span> <span class="o"><<</span> <span class="mi">4</span> <span class="o">|</span> <span class="p">(</span><span class="nb">buffer</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">&</span> <span class="mh">0xF0</span><span class="p">)</span> <span class="o">>></span> <span class="mi">4</span><span class="p">)])</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">_ALPHABET</span><span class="p">[((</span><span class="nb">buffer</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">&</span> <span class="mh">0x0F</span><span class="p">)</span> <span class="o"><<</span> <span class="mi">1</span> <span class="o">|</span> <span class="p">(</span><span class="nb">buffer</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">&</span> <span class="mh">0x80</span><span class="p">)</span> <span class="o">>></span> <span class="mi">7</span><span class="p">)])</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">_ALPHABET</span><span class="p">[((</span><span class="nb">buffer</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">&</span> <span class="mh">0x7C</span><span class="p">)</span> <span class="o">>></span> <span class="mi">2</span><span class="p">)])</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">_ALPHABET</span><span class="p">[((</span><span class="nb">buffer</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">&</span> <span class="mh">0x03</span><span class="p">)</span> <span class="o"><<</span> <span class="mi">3</span> <span class="o">|</span> <span class="p">(</span><span class="nb">buffer</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="o">&</span> <span class="mh">0xE0</span><span class="p">)</span> <span class="o">>></span> <span class="mi">5</span><span class="p">)])</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">_ALPHABET</span><span class="p">[(</span><span class="nb">buffer</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="o">&</span> <span class="mh">0x1F</span><span class="p">)])</span>
<span class="n">length</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">ceil</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">*</span> <span class="mf">8.0</span> <span class="o">/</span> <span class="mf">5.0</span><span class="p">)</span>
<span class="k">return</span> <span class="nb">bytes</span><span class="p">(</span><span class="n">result</span><span class="p">[:</span><span class="n">length</span><span class="p">])</span><span class="o">.</span><span class="n">decode</span><span class="p">()</span>
<span class="c1"># ---- Ansible filters ----</span>
<span class="k">class</span> <span class="nc">FilterModule</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">''' WKD hash filter '''</span>
<span class="k">def</span> <span class="nf">filters</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="p">{</span>
<span class="s1">'wkd_hash'</span><span class="p">:</span> <span class="n">wkd_hash_fn</span>
<span class="p">}</span></code></pre>
<p>on peut maintenant écrire avec Ansible, quelque chose commen ça:</p>
<pre><code class="yml"><span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">name</span><span class="p p-Indicator">:</span> <span class="l l-Scalar l-Scalar-Plain">Loop over wkd hashes for the direct method</span>
<span class="l l-Scalar l-Scalar-Plain">set_fact</span><span class="p p-Indicator">:</span>
<span class="l l-Scalar l-Scalar-Plain">encoded_uid</span><span class="p p-Indicator">:</span> <span class="s">'{{</span><span class="nv"> </span><span class="s">key_info.uid</span><span class="nv"> </span><span class="s">|</span><span class="nv"> </span><span class="s">wkdhash</span><span class="nv"> </span><span class="s">}}'</span></code></pre>
<p>Par défaut, les filtres doivent être stockés au même niveau que les "playbooks", mais je préfère rester maître de ma hiérarchie, donc j'utilise une option dans ansible.cfg:</p>
<pre><code class="ini"><span class="k">[defaults]</span>
<span class="na">retry_files_enabled</span> <span class="o">=</span> <span class="s">False</span>
<span class="k">[...]</span>
<span class="na">filter_plugins</span> <span class="o">=</span> <span class="s">{{ playbook_dir }}/../../common/filter-plugins/</span></code></pre>
<p>Lorsque l'on utilise Ansible, certaines tâches à réaliser sont complexes, et on se retrouve vite à faire de la programmation en YAML… Écrire un filtre en Python permet de conserver la simplicité des tâches, en déplaçant la complexité vers un vrai langage de programmation.</p>
<h3 id="toc-liens-vers-dautres-journaux">Liens vers d'autres journaux</h3>
<ul>
<li><a href="//linuxfr.org/users/gouttegd/journaux/deployer-un-service-d-annuaire-de-clefs-openpgp-pour-son-domaine">https://linuxfr.org/users/gouttegd/journaux/deployer-un-service-d-annuaire-de-clefs-openpgp-pour-son-domaine</a></li>
<li><a href="//linuxfr.org/users/gouttegd/journaux/de-la-distribution-des-clefs-openpgp">https://linuxfr.org/users/gouttegd/journaux/de-la-distribution-des-clefs-openpgp</a></li>
</ul>
<div><a href="https://linuxfr.org/users/arodier/journaux/petit-exemple-de-plugin-ansible.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/129565/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/arodier/journaux/petit-exemple-de-plugin-ansible#comments">ouvrir dans le navigateur</a>
</p>
Andre Rodierhttps://linuxfr.org/nodes/129565/comments.atomtag:linuxfr.org,2005:Post/431812022-10-01T21:07:47+02:002022-10-01T21:13:34+02:00AutoHebergement matrix synapse pour remplacer whatsapp<p>Bonjour la compagnie,</p>
<p>Dans ma quête de remplacer les séduisants outils mis à disposition par les GAFAM de mon écosystème mobile/informatique (et de celui de mes proches) pour les remplacer par de l'auto-hébergé, je souhaite remplacer whatsapp.<br>
Après quelques recherches matrix-synapse couplé au client élément, semble représenter une bonne option.</p>
<p>Si à tout hasard l'un de vous a réussi à mettre en place quelque-chose de similaire à ce que j'essaye de faire, a des conseils, des suggestions, des pistes ou des réponses, alors je suis preneur :)</p>
<p>Quelques contraintes perso :<br>
- Pas de nom de domaine acheté pour l'instant, je souhaite ne dépendre d'aucun service externe, à voir si ce choix tiendra dans le temps (j'ai d'ailleurs prévu d'héberger mon serveur DNS)<br>
- Hébergement sur un serveur maison sur une connexion ADSL modeste, le débit montant est donc très faible, mais je compte faire avec au moins pour toute la phase de tests et puis éventuellement par la suite passer sur une connexion fibre<br>
- J'utilise encore la box du fournisseur d'accès internet (et pas juste en mode bridge puisse que j'ai encore besoin de la VOIP fournie par par le FAI)<br>
- J'ai plusieurs (mauvais) routeurs (sous openwrt) qui composent mon réseau pour couvrir une surface plus grande, par commodité d'accès (provisoire) le serveur se trouve derrière l'un d'eux.<br>
- J'ai compartimenté les services du serveurs et ai choisi d'utiliser lxc sur un serveur debian avec des conteneurs debian.</p>
<p>L'installation et configuration basique de matrix-synapse sur le conteneur dédié du serveur c'est bien passé et après queqlues ports redirigés, les clients de l'extérieur ainsi que ceux connectés au routeur du serveur peuvent sans problème utiliser la messagerie, l'envoi de photo/vidéos/messages audios, c'est super chouette :)</p>
<p>Voici l'architecture:<br>
<img src="//img.linuxfr.org/img/68747470733a2f2f7774662e726f666c636f707465722e66722f706963732f30706976476d72432f4c7742596567724c2e706e67/LwBYegrL.png" alt="architecture" title="Source : https://wtf.roflcopter.fr/pics/0pivGmrC/LwBYegrL.png"></p>
<p>Là ou cela se corse:<br>
1. Je n'arrive pas à me connecter au serveur matrix-synapse depuis les clients derrières les routeurs 52 et 53<br>
2. Je n'arrive pas à mettre en place le proxy inversé avec nginx sur le port ssl 8448 (certificat auto-signé). En suivant la doc matrix-synapse, l'adresse:port m'envoie sur la page du serveur nginx mais pas sur la page de matrix-synapse comme avec le port initial. <br>
3. Avec ma petite connexion internet, l'échange de vidéos pose vite problème dans un sens, est-il possible de paramétrer le niveau de compression soit sur les clients, soit sur le serveur afin de limiter le besoin de bande passante?<br>
4. Les appels audio et vidéo ne passent pas en dehors des appareils branchés sur le réseau privé. D'après la doc il faut un serveur coturn si l'on a des NAT sur le réseau:<br>
- Est-il possible de faire les appels vidéo/audio sans webRTC (par exemple en utilisant la même mécanique que l'envoi de fichiers mais en temps réeel) avec le serveur matrix-synapse afin de se passer de coturn ?<br>
- J'ai tenté de mettre en place un serveur coturn. Je sais que la doc indique clairement qu'il y a de grandes chances que cela ne puisse pas être utilisé si le serveur est derrière un NAT mais comme il y a des paramètre pour et que je ne peux me résoudre à passer cela chez un tiers, j'aimerais vraiment à le faire fonctionner en interne si je ne peux pas m'en passer. <strong>journalctl -u coturn</strong> reste malheureusement silencieux.</p>
<p>Ce que j'ai dans les fichiers de configuration:</p>
<p><em>xxx.xxx.xxx.xxx correspond à mon ip publique</em></p>
<p><strong>/etc/matrix-synapse/homeserver.yaml</strong></p>
<pre><code>pid_file: "/var/run/matrix-synapse.pid"
listeners:
- port: 8008
tls: false
type: http
x_forwarded: true
bind_addresses: ['0.0.0.0']
resources:
- names: [client, federation]
compress: true
log_config: "/etc/matrix-synapse/log.yaml"
media_store_path: /var/lib/matrix-synapse/media
signing_key_path: "/etc/matrix-synapse/homeserver.signing.key"
trusted_key_servers:
- server_name: "messagerie"
tls_certificate_path /etc/nginx/mesclefs/messagerie.pem
tls_private_key_path /etc/nginx/mesclefs/messagerie.key
allow_public_rooms_without_auth: false
allow_public_rooms_over_federation: false
turn_uris: [ "turn:xxx.xxx.xxx.xxx:3478?transport=udp", "turn:xxx.xxx.xxx.xxx:3478?transport=tcp" ]
turn_shared_secret: s€cr€t
turn_user_lifetime: 86400000
turn_allow_guests: True
</code></pre>
<p><strong>/etc/turnserver.conf</strong></p>
<pre><code> listening-port=3478
external-ip=xxx.xxx.xxx.xxx/10.0.3.5
external-ip=xxx.xxx.xxx.xxx/192.168.11.5
min-port=49152
max-port=49155
use-auth-secret
static-auth-secret=s€cr€t
realm=xxx.xxx.xxx.xxx
syslog
allowed-peer-ip=10.0.0.1
allowed-peer-ip=10.0.3.4
</code></pre>
<p><strong>/etc/nginx/sites-available/messagerie</strong></p>
<pre><code>server {
server_name messagerie;
# Client port
listen 80;
listen [::]:80;
return 301 https://$host$request_uri;
}
server {
server_name messagerie;
# Client port
listen 443 ssl http2;
listen [::]:443 ssl http2;
# Federation port
listen 8448 ssl;
listen [::]:8448 ssl;
# TLS configuration
# ssl_certificate /etc/letsencrypt/live/matrix.example.org/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/matrix.example.org/privkey.pem;
ssl_certificate /etc/nginx/mesclefs/messagerie.pem;
ssl_certificate_key /etc/nginx/mesclefs/messagerie.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location ~ ^(/_matrix|/_synapse/client) {
proxy_pass http://localhost:8008;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
# Default Synapse upload size.
# If you change max_upload_size in Synapse config, update it here too.
client_max_body_size 50M;
}
}
</code></pre>
<div><a href="https://linuxfr.org/forums/linux-debian-ubuntu/posts/autohebergement-matrix-synapse-pour-remplacer-whatsapp.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/128918/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/linux-debian-ubuntu/posts/autohebergement-matrix-synapse-pour-remplacer-whatsapp#comments">ouvrir dans le navigateur</a>
</p>
ROUGEXIIIhttps://linuxfr.org/nodes/128918/comments.atomtag:linuxfr.org,2005:Bookmark/51172022-09-05T12:10:11+02:002022-09-05T12:10:11+02:00Self-Hosted email is the hardest it's ever been, but also the easiest.<a href="https://vadosware.io/post/its-never-been-easier-or-harder-to-self-host-email/">https://vadosware.io/post/its-never-been-easier-or-harder-to-self-host-email/</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/128664/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/psychofox/liens/self-hosted-email-is-the-hardest-it-s-ever-been-but-also-the-easiest#comments">ouvrir dans le navigateur</a>
</p>
Psychofoxhttps://linuxfr.org/nodes/128664/comments.atomtag:linuxfr.org,2005:Post/430912022-08-22T16:15:34+02:002022-08-22T16:15:34+02:00Debuggage accès serveur en 4G<p>Bonjour,<br>
Je fais appel aux bonnes âmes avec des meilleurs connaissances réseau pour essayer de comprendre mon problème.</p>
<p>J'ai un serveur derrière ma freebox, ce serveur héberge quelques applis comme Wallabag ou MiniFlux, par exemple. J'ai un nom de domaine déposé chez Gandi, qui pointe vers la freebox et tout est pour le mieux ou presque.</p>
<p>Je peux accéder à mon serveur de n'importe quelle point internet, ça fonctionne sans aucun problème.</p>
<p>Je peux accéder à mon serveur depuis mes lignes 4G Orange quand je suis en Afrique (pour mon travail), aucun problème.</p>
<p>Si je suis en France, en 4G, je ne peux pas accéder à mon serveur sans devoir passer par un VPN type CloudFlare. Et je ne comprends pas pourquoi. J'ai testé avec Orange, SFR et Bouygues, rien à faire.</p>
<p>J'ai tenté d'analyser selon mes compétences.</p>
<h2 id="toc-en-wifi">En Wifi</h2>
<p>Je trace bien la route jusqu'à mon serveur<br>
<a href="https://www.dropbox.com/s/458o83pnpi5ioto/IMG_4607.PNG?dl=0">https://www.dropbox.com/s/458o83pnpi5ioto/IMG_4607.PNG?dl=0</a></p>
<p>Mon infra répond au Ping.<br>
<a href="https://www.dropbox.com/s/2nranm4kufxkexh/IMG_4611.PNG?dl=0">https://www.dropbox.com/s/2nranm4kufxkexh/IMG_4611.PNG?dl=0</a></p>
<p>Je peux faire un Curl de la home page de wallabag.<br>
<a href="https://www.dropbox.com/s/lw00sn3qsnuc5kt/IMG_4609.PNG?dl=0">https://www.dropbox.com/s/lw00sn3qsnuc5kt/IMG_4609.PNG?dl=0</a></p>
<h2 id="toc-en-4g">En 4G</h2>
<p>Je trace bien la route judqu'à mon serveur.<br>
<a href="https://www.dropbox.com/s/eahfc0kfg7d1l2c/IMG_4608.PNG?dl=0">https://www.dropbox.com/s/eahfc0kfg7d1l2c/IMG_4608.PNG?dl=0</a></p>
<p>Pas de réponse au Ping.<br>
<a href="https://www.dropbox.com/s/2s3jazr41h7mlyl/IMG_4612.PNG?dl=0">https://www.dropbox.com/s/2s3jazr41h7mlyl/IMG_4612.PNG?dl=0</a></p>
<p>Echec de Curl<br>
<a href="https://www.dropbox.com/s/fur3inlzc0ir3kv/IMG_4610.PNG?dl=0">https://www.dropbox.com/s/fur3inlzc0ir3kv/IMG_4610.PNG?dl=0</a></p>
<p>===========</p>
<p>J'en suis là, et je cale côté compétences pour analyser le problème plus avant. Côté opérateur, les services support ne sont pas assez pointus pour ça, voire ne répondent même pas à ce genre de demande.</p>
<p>Alors si quelqu'un voit ma bouteille à la mer, et peut m'apporter quelques idées pour diagnostiquer plus avant, c'est cool.</p>
<p>Merci.</p>
<div><a href="https://linuxfr.org/forums/general-general/posts/debuggage-acces-serveur-en-4g.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/128556/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/general-general/posts/debuggage-acces-serveur-en-4g#comments">ouvrir dans le navigateur</a>
</p>
romuhttps://linuxfr.org/nodes/128556/comments.atomtag:linuxfr.org,2005:Post/430762022-08-14T18:56:21+02:002022-08-14T18:56:21+02:00Mastodon, seul de mon côté<p>Je cherche depuis quelques temps à m'inscrire sur Mastodon, pour finaliser ma disparition sur les réseaux sociaux des GAFAMs. Le choix d'instance n'est pas facile :<br>
- Il faut prêter attention à leurs règles pour qu'elles me correspondent<br>
- Il faut faire attention à la pérennité de l'instance, si la structure derrière n'est pas stable, elle peut fermer très prochainement<br>
- Beaucoup d'instances ont les inscriptions fermées, que ce soit par manque de financement ou autre</p>
<p>Face à tout cela, une idée me trotte dans la tête : faire une instance pour moi et moi seul.<br>
- Ce sera mon instance donc elle aura mes règles<br>
- La pérennité ne tient qu'à moi et je n'ai pas à faire confiance aux autres<br>
- Le financement ne devrait pas poser de soucis, je serai seul et ne poste pas beaucoup de médias, donc l'instance ne sera pas lourde.</p>
<p>En plus, de par le fonctionnement de Mastodon, je pourrai interagir avec tout le monde comme si de rien n'était; je me trompe ? Y'a-t-il des potentiels problèmes à se positionner comme cela ?<br>
À titre indicatif, si je me lance dans cette aventure, ce sera probablement avec un VPS quelque part (car je suis en ADSL).</p>
<div><a href="https://linuxfr.org/forums/astucesdivers/posts/mastodon-seul-de-mon-cote.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/128504/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/astucesdivers/posts/mastodon-seul-de-mon-cote#comments">ouvrir dans le navigateur</a>
</p>
Élafruhttps://linuxfr.org/nodes/128504/comments.atomtag:linuxfr.org,2005:News/411472022-08-12T18:53:57+02:002022-08-13T16:15:59+02:00Sortie de YunoHost 11.0 (Bullseye)Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<div><p>Bonjour !</p>
<p>Nous, l'équipe de développement de YunoHost, sommes heureux d'annoncer la publication de YunoHost 11, basée sur Debian Bullseye !</p>
<p><strong>Qu'est-ce que YunoHost ?</strong><br>
YunoHost est un système d'exploitation qui vise à simplifier autant que possible l'administration d'un serveur pour ainsi démocratiser l'auto-hébergement tout en restant fiable, sécurisé, éthique et léger.</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f79756e6f686f73742e6f72672f5f696d616765732f686f6d655f70616e656c2e6a7067/home_panel.jpg" alt="portail YunoHost" title="Source : https://yunohost.org/_images/home_panel.jpg"></p>
<p><strong>Pour quoi faire ?</strong> Administrer sa propre machine, c'est héberger soi-même ses données personnelles, celles de ses amis et de sa famille, en fournissant des services en ligne sans se reposer sur des entités privées.</p>
</div><ul><li>lien nᵒ 1 : <a title="https://forum.yunohost.org/t/yunohost-11-0-bullseye-release-sortie-de-yunohost-11-0-bullseye/20590" hreflang="fr" href="https://linuxfr.org/redirect/110902">Détails de la sortie de YunoHost 11.0 (Bullseye)</a></li><li>lien nᵒ 2 : <a title="https://yunohost.org/try" hreflang="fr" href="https://linuxfr.org/redirect/110903">Démo en ligne</a></li><li>lien nᵒ 3 : <a title="https://yunohost.org/howtohostyourself" hreflang="fr" href="https://linuxfr.org/redirect/110904">Guide sur YunoHost</a></li></ul><div><p>Par exemple, avec l’interface web simple et épurée de YunoHost, vous pouvez, pêle-mêle :</p>
<ul>
<li><p>tenir un site internet avec Wordpress,</p></li>
<li><p>gérer vos boîtes mail avec Snappymail,</p></li>
<li><p>avoir un cloud à la maison avec Nextcloud,</p></li>
<li><p>vous lancer dans la domotique avec HomeAssistant,</p></li>
<li><p>jouer à des jeux rétro avec Retroarch,</p></li>
<li><p>ou encore organiser des visios avec Jitsi.</p></li>
</ul>
<p>Nous venons de passer la barre des 400 applications dont 200 applications de très bonne qualité dans le catalogue des apps.</p>
<p>Comme toujours, nous avons beaucoup de fonctionnalités en cours de développement (environ 50 demandes d’ajout de code sur notre forge de code rien que sur le noyau au moment d’écrire ces lignes).<br>
Tandis que YunoHost 11.0 est axé sur l’adaptation à Debian Bullseye, les versions 11.1 et 11.2 devraient apporter des fonctionnalités très attendues par les utilisateur·ices, telles que :</p>
<ul>
<li><p>🌍 la mise à disposition des paramètres « globaux » de YunoHost depuis l’administrateur Web</p></li>
<li><p>🔑 la possibilité de définir un mot de passe de récupération pour les domaines nohost.me / noho.st / ynh.fr</p></li>
<li><p>👥 support pour plusieurs administrateurs (ouvrant la voie à l’authentification multifacteurs)</p></li>
<li><p>📦 pour les packagers d’applications : un nouveau format simplifié de packaging d’applications (ouvrant la voie à une interface utilisateur améliorée pour le catalogue d’applications)</p></li>
<li><p>🌀 sous le capot, une refonte du SSO/portail (ouvrant la voie à l’auto-enregistrement des utilisateurs, à la récupération des mots de passe des utilisateurs, à la création de portails personnalisés…)</p></li>
<li><p>✨ et comme toujours, diverses améliorations de l’ergonomie de l’interface</p></li>
</ul>
<p>…et bien plus encore !</p>
<p>Quant à cette version 11.0, les diverses améliorations et refontes de l’architecture sont souvent liées à la transition à Debian Bullseye 11. Celles-ci comprennent :<br>
- une meilleure intégration avec la gestion des versions de Debian et moins de modifications de la configuration standard<br>
- l’utilisation par défaut de Python 3.9, PHP 7.4 et PostgreSQL 13<br>
- une refonte de l’architecture du code<br>
- un mécanisme de mises à jour automatiques plus intelligent qui permet une meilleure expérience utilisateur<br>
- des améliorations de la sécurité, empêchant les utilisateurs de voir quels programmes d’autres personnes utilisent sur la machine</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f79756e6f686f73742e6f72672f5f696d616765732f77656261646d696e5f66722e706e67/webadmin_fr.png" alt="Webadmin YunoHost" title="Source : https://yunohost.org/_images/webadmin_fr.png"></p>
</div><div><a href="https://linuxfr.org/news/sortie-de-yunohost-11-0-bullseye.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/128485/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/sortie-de-yunohost-11-0-bullseye#comments">ouvrir dans le navigateur</a>
</p>
Ketsapiwiqbobble bubblePierre JarillonBenoît Sibaudhttps://linuxfr.org/nodes/128485/comments.atomtag:linuxfr.org,2005:Diary/403292022-07-17T15:42:02+02:002022-07-17T15:42:02+02:00Serveur perso basse consommationLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>'lut journal,</p>
<p>J'utilise un serveur Dell PowerEdge T310 acheté d'occasion depuis maintenant 7 ans après avoir utilisé pendant 5 ans un PowerEdge 840. Il tourne 24h/24, 7j/7 avec de multiples services (authentification utilisateur, gestion des mails, serveur web, VPN, serveur de fichiers, etc.) utilisés par les postes de mon réseau local ou à distance sur ordinateur portable ou smartphone.<br>
Il se trouve qu'en ces temps où on parle de sobriété énergétique, j'ai quand même un peu honte de faire tourner en permanence une machine énergivore avec ses 6 disques durs (2 SAS en RAID 1 et 4 SATA en RAID 5). Au doigt mouillé, en prenant une consommation de 150W par heure avec un <a href="https://www.kelwatt.fr/prix">coût au kwh de 0,1740€</a>, j'arrive à un coût global de 225€ par an, alors certes ce chiffre pourrait être affiné notamment avec un contrôleur de consommation, mais ça donne un ordre de grandeur qui ne parait pas délirant et qui est loin d'être négligeable.<br>
Cette machine est dimensionnée d'abord pour le stockage des fichiers multimédia auxquels j'accède finalement assez peu et je pourrais finalement me contenter de bien plus modeste pour les autres services permanents comme l'authentification utilisateur ou la gestion des mails.</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f6f6c69766965722e686f617261752e6f72672f77702d636f6e74656e742f75706c6f6164732f323032322d30372d31372d743333302d373638783933382e6a7067/2022-07-17-t330-768x938.jpg" alt="Mon serveur T310 dans le garage" title="Source : https://olivier.hoarau.org/wp-content/uploads/2022-07-17-t330-768x938.jpg"><br>
Alors j'ai bien songé à programmer une extension la nuit du serveur, mais je crains pour les disques avec les arrêts marches à répétition, d'autant que je n'ai pas oublié la perte de données que j'ai subie il y a quelques temps et qui m'a inspiré ici même tout <a href="//linuxfr.org/users/funix/journaux/sauvegarde-suite-et-fin">une série de journaux sur la sauvegarde</a>.</p>
<p>Finalement l'idée retenue est de garder mon serveur T310 que j'utiliserai uniquement quand j'aurai besoin d'accéder aux fichiers multimédia, pour regarder un film par exemple et de monter un serveur basse consommation pour les services auxquels j'ai besoin d'accéder régulièrement au quotidien. Je n'ai pas retenu l'idée de déplacer ces services sur le cloud qui n'est pas un <a href="https://librairie.ademe.fr/cadic/2351/guide-pratique-face-cachee-numerique.pdf?modal=false">modèle de sobriété énergétique</a>.<br>
Pour ce serveur basse consommation, j'ai d'abord pensé à monter un serveur sur la base d'un Raspberry PI 4, mais en creusant un peu le sujet, j'en suis arrivé à la conclusion que ce n'est pas forcément le meilleur choix.</p>
<p>Ainsi j'ai trouvé sur un célèbre site de vente aux enchères un mini PC Lenovo M92p d'occasion avec 8Go de RAM pour 119€ frais de port compris, alors certes il n'est pas de première jeunesse (il est de 2013 presque 10 ans !), mais le rapport coût/performance est largement à son avantage par rapport à un Raspberry. Le Lenono M92p est équipé d'un processeur Intel G2030T, et si je me fie à <a href="https://www.cpu-monkey.com/fr/compare_cpu-raspberry_pi_4_b_broadcom_bcm2711-vs-intel_pentium_g2030">cette comparaison</a> entre un G2030 et un Raspberry PI 4B, le G2030 écrase le PI 4B en terme de performance. Le G2030T est une évolution du G2030 consommant moins (35W au lieu de 55W) pour des performances à peine inférieures.<br>
<img src="//img.linuxfr.org/img/68747470733a2f2f6f6c69766965722e686f617261752e6f72672f77702d636f6e74656e742f75706c6f6164732f323032322d30372d31372d7468696e6b63656e7465722d373638783933392e6a7067/2022-07-17-thinkcenter-768x939.jpg" alt="Lenovo M92p" title="Source : https://olivier.hoarau.org/wp-content/uploads/2022-07-17-thinkcenter-768x939.jpg"><br>
En résumé en considérant que le M92p consomme entre 15W et 35W (d'après <a href="https://www.zdnet.com/pictures/lenovo-thinkcentre-m92p-tiny-review/2/">ce site</a>), je peux espérer diviser par 10 la consommation électrique par rapport au T310, d'autant plus si je prévois une extinction la nuit, j'aurai moins de scrupule à craindre une panne disque. Alors certes j'aurais pu faire encore mieux avec un Raspberry qui tourne autour de 5W mais les performances me paraissent clairement insuffisantes pour mes services de serveur et le prix peu compétitif. </p>
<p>Et le logiciel libre dans tout ça ? Je n'allais pas oublier de dire que mon serveur T310 tourne sous Mageia 8 et que j'ai installé également Mageia 8 sur le mini PC M92p. J'ai commencé sa configuration qui est assez lourde et me prendra du temps.</p>
<p>En attendant j'aurais souhaité avoir votre RETEX dans une situation équivalente, entre le choix du cloud ou du serveur perso.</p>
<div><a href="https://linuxfr.org/users/funix/journaux/serveur-perso-basse-consommation.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/128314/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/funix/journaux/serveur-perso-basse-consommation#comments">ouvrir dans le navigateur</a>
</p>
Funixhttps://linuxfr.org/nodes/128314/comments.atomtag:linuxfr.org,2005:Diary/403132022-07-02T16:12:44+02:002022-07-02T16:12:44+02:00Autohéberger sa brasserie avec qbrewLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Bonjour Nal,</p>
<p>Je t'écris pour te parler de <a href="https://tracker.debian.org/pkg/qbrew">qbrew</a>, un logiciel pour composer des recettes de bière.</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f7774662e726f666c636f707465722e66722f706963732f486f557a6641314e2f7465786657645a6a2e706e67/texfWdZj.png" alt="screenshot" title="Source : https://wtf.roflcopter.fr/pics/HoUzfA1N/texfWdZj.png"></p>
<p>Il permets de calculer à partir des ingrédients des caractéristiques importantes pour le rendu (amertume, degré d'alcool, couleur), mais aussi pour le brassage (densités initiales et finales).</p>
<p>Ma dernière recette exportée en markdown :</p>
<pre><code>DarkDave85
----------
Brewer: Dave Newton
Style: Dry Stout
Batch: 8.00 L All Grain
License: WTFPL
Characteristics
---------------
Recipe Gravity: 1.087 OG
Recipe Bitterness: 39 IBU
Recipe Color: 39° SRM
Estimated FG: 1.022
Alcohol by Volume: 8.5%
Alcohol by Weight: 6.6%
Ingredients
-----------
American chocolate malt 0.40 kg, Grain, Mashed
Flaked oats 0.10 kg, Adjunct, Mashed
German vienna 2.00 kg, Grain, Mashed
Maris Otter Malt 0.60 kg, Grain, Mashed
Magnum 11.00 g, Pellet, 60 minutes
Ale yeast 1.00 unit, Yeast
</code></pre>
<p>Pour le brassage lui même, il suffit de suivre les étapes:</p>
<ol>
<li>Concasser le malt ;</li>
<li>Faire chauffer à 67°C pendant une heure ;</li>
<li>Égoutter puis rincer les drêches ;</li>
<li>Faire bouillir pendant une heure avec le houblon ;</li>
<li>Laisser fermenter dans une dame Jeanne pendant un mois ;</li>
<li>Ajouter 7g de sucre par litre et mettre en bouteille ;</li>
<li>Attendre trois semaines et déguster !</li>
</ol>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f7774662e726f666c636f707465722e66722f706963732f58414468624f55642f6530526b794e6a662e706e67/e0RkyNjf.png" alt="Le brassage en images" title="Source : https://wtf.roflcopter.fr/pics/XADhbOUd/e0RkyNjf.png"></p>
<p>Et toi Nal, qu'est-ce que tu as autohébergé ces temps-ci ?</p>
<div><a href="https://linuxfr.org/users/devnewton/journaux/autoheberger-sa-brasserie-avec-qbrew.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/128181/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/devnewton/journaux/autoheberger-sa-brasserie-avec-qbrew#comments">ouvrir dans le navigateur</a>
</p>
devnewton 🍺https://linuxfr.org/nodes/128181/comments.atomtag:linuxfr.org,2005:Post/429292022-05-29T21:36:04+02:002022-05-29T21:36:04+02:00Proxmox: Quel system de fichier pour un serveur maison ?<p>Bonjour,</p>
<p>J'ai posté un message sur le forum Proxmox demandant grosso modo si l'organisation au nivaux du file-system que je prévoyais pouvait être amélioré et si oui comment.<br>
L'organisation est la suivante: <br>
- regrouper les 4ssd WD red de 1To en un "pool" en raidZ<br><br>
- regrouper les 5 HDD WD red de 5to en un "pool" en raidZ.</p>
<p>J'ai eu une réponse mais celle-ci m'a un peu « déboussolé » …<br>
En effet, la personne me dit de faire attentions, car les SSD/HDD que j'ai sont des SSD « grands publique » et que le ZFS nécessite plutôt des moyens de stockage professionnel ( au risque d'avoir des problèmes au niveau de la synchronisation de l'écriture).</p>
<p>En soit je suis d'accord ce ne sont pas des ssd pro. Mais du coup je ne sais pas vers quelle solution partir (surtout qu'il m'est aussi dit que Proxmox de supporte pas officiellement mdadm ) !</p>
<p>Vous vers quelle solution partiriez-vous ?</p>
<p>Raid lvm + ext4 ? pas de raid ? </p>
<p>Merci pas avance pour vos réponses.</p>
<div><a href="https://linuxfr.org/forums/general-general/posts/proxmox-quel-system-de-fichier-pour-un-serveur-maison.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/127870/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/general-general/posts/proxmox-quel-system-de-fichier-pour-un-serveur-maison#comments">ouvrir dans le navigateur</a>
</p>
Skilgannonhttps://linuxfr.org/nodes/127870/comments.atomtag:linuxfr.org,2005:Diary/402632022-05-12T16:54:55+02:002022-05-12T16:54:55+02:00Lancement de la Coloc, partage de serveurs chez un particulierLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Bonjour à tous,</p>
<p>Il y a quelques années j'avais l'envie de créer ma propre entreprise d'hébergement informatique. Pour ça j'avais acheté des serveurs d'occasion (pour me faire la main) et du matériel réseau, ainsi qu'une baie.</p>
<p>Entre temps, COVID, vie de famille, enfants, tout ça… Ma vie a pris un tournant différent et le projet d'entreprise ne s'est jamais réalisé.</p>
<p>Mais je n'ai jamais eu le cœur de me séparer de tout ce matériel. Alors je l'ai ramené à la maison dans mon garage et j'ai commencé mon auto-hébergement. Hélas, les besoin de mon auto-hébergement sont très petits par rapport aux ressources proposées par mes serveurs. En plus ça consomme ces bêtes là…</p>
<p>J'ai donc élaboré un projet pour accueillir des projets web d'autre personnes et entités à but non lucratif, à prix libre. Cela permettra de rentabiliser l'énergie dépensée par les serveurs, et si les gens sont généreux, de couvrir une partie des frais de fonctionnement. Je ferai ça sur mon temps libre (j'ai un taf à plein temps à côté) donc il ne faut pas attendre des SLA, GTR ou GTI. C'est purement du service en mode "j'ai un pote qui peut te rendre service".</p>
<p>C'est comme ça que j'ai pondu <a href="https://coloc.gugod.fr">la coloc</a>. Je n'ai pas encore mis tout au carré pour prétendre être un CHATON (j'ai encore pas fait de page publique présentant mon infrastructure par exemple), ça viendra en son temps.</p>
<p>Plus d'information sur <a href="https://coloc.gugod.fr">le site web</a>.</p>
<div><a href="https://linuxfr.org/users/raspbeguy/journaux/lancement-de-la-coloc-partage-de-serveurs-chez-un-particulier.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/127727/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/raspbeguy/journaux/lancement-de-la-coloc-partage-de-serveurs-chez-un-particulier#comments">ouvrir dans le navigateur</a>
</p>
raspbeguyhttps://linuxfr.org/nodes/127727/comments.atom