diff --git a/app/CHANGELOG.md b/app/CHANGELOG.md index 35bed35..a7d5a71 100644 --- a/app/CHANGELOG.md +++ b/app/CHANGELOG.md @@ -1,5 +1,26 @@ # Changelog — Alpinux Static +## [2.0.0] — 2026-05-06 + +### Ajouté +- **Erreurs 404 (#53)** : barre de résumé rouge/verte affichant le total requêtes·IPs ventilé entre erreurs actives et résolues (calculé après vérification batch) +- **Erreurs 404 (#54)** : titre de l'onglet navigateur mis à jour avec le nombre d'erreurs non résolues (`Erreurs 404 (12) — Static Alpinux`) +- **Resize (#2)** : boutons « Tout / Aucun » pour les groupes Tailles et Formats +- **Resize (#7)** : nom du fichier backup affiché dans les résultats de génération +- **Upload (#8)** : message de résumé après upload (X envoyé(s), Y sauvegardé(s), Z ignoré(s)…) +- **Renommage (#6)** : bouton ✏️ disponible sur les pages `preview_text` et `preview_other` (idem `preview_image`) +- **Corbeille (#23)** : filtre texte + tri par nom / taille / date +- **Corbeille (#20)** : sélection multiple — cases à cocher, « Tout sélectionner », restaurer/supprimer en lot +- **Sitemap (#45)** : route `/sitemap.xml` listant les assets publics (logo/, wiki/, error/) +- **Ignorer IP (#52)** : « Ignorer cette IP » ajoute/retire automatiquement l'IP dans `fail2ban ignoreip global-blacklist` +- **SVG (#1)** : `cairosvg>=2.7` ajouté à `requirements.txt` (`libcairo2` disponible sur le serveur) + +### Corrigé +- **Déploiement (#51)** : `ignored_ips.json` exclu du rsync `--delete` — les IPs ignorées ne sont plus effacées au déploiement +- **Déploiement (#48)** : `as_cache/` exclu du rsync `--delete` — le cache RIPE local est préservé entre déploiements + +--- + ## [1.10.0] — 2026-05-06 ### Modifié diff --git a/app/VERSION b/app/VERSION index 81c871d..227cea2 100644 --- a/app/VERSION +++ b/app/VERSION @@ -1 +1 @@ -1.10.0 +2.0.0 diff --git a/app/app.py b/app/app.py index b35e3f7..1bfe58c 100644 --- a/app/app.py +++ b/app/app.py @@ -24,7 +24,8 @@ except ImportError: from PIL import Image from flask import (Flask, redirect, url_for, session, request, - render_template, abort, send_from_directory, jsonify) + render_template, abort, send_from_directory, jsonify, flash, + get_flashed_messages) from authlib.integrations.flask_client import OAuth from werkzeug.middleware.proxy_fix import ProxyFix from werkzeug.utils import secure_filename @@ -1260,6 +1261,14 @@ def errors_ignore(): ips.add(ip) if action == "add" else ips.discard(ip) _save_ignored_ips(ips) _invalidate_404_cache() + try: + fb_action = "addignoreip" if action == "add" else "delignoreip" + subprocess.run( + ["/usr/bin/sudo", "/usr/bin/fail2ban-client", "set", "global-blacklist", fb_action, ip], + capture_output=True, timeout=10, check=False + ) + except Exception: + pass return jsonify({"ok": True, "action": action, "ip": ip}) @@ -1506,6 +1515,44 @@ def trash_preview(subpath): return render_template("preview_other.html", **ctx) +@app.route("/trash/restore-batch", methods=["POST"]) +def trash_restore_batch(): + redir = _require_admin() + if redir: + return jsonify({"error": "not authorized"}), 403 + paths = request.form.getlist("paths") + result = {"ok": 0, "error": 0, "conflict": []} + for p in paths: + ok, r = _trash_restore(p, "rename") + if ok: + result["ok"] += 1 + elif r == "conflict": + result["conflict"].append(p) + else: + result["error"] += 1 + return jsonify(result) + + +@app.route("/trash/delete-batch", methods=["POST"]) +def trash_delete_batch(): + redir = _require_admin() + if redir: + return jsonify({"error": "not authorized"}), 403 + paths = request.form.getlist("paths") + ok = 0 + for trash_rel in paths: + target = (TRASH_ROOT / trash_rel).resolve() + if not str(target).startswith(str(TRASH_ROOT)): + continue + if target.is_file(): + target.unlink() + ok += 1 + info = Path(str(target) + ".trashinfo") + if info.exists(): + info.unlink() + return jsonify({"ok": ok}) + + @app.route("/trash/empty", methods=["POST"]) def trash_empty(): redir = _require_admin() @@ -1613,6 +1660,7 @@ def upload_file(): if conflict not in ("backup", "overwrite", "rename", "skip"): conflict = "overwrite" + stats = {"ok": 0, "backup": 0, "renamed": 0, "skipped": 0, "error": 0} for f in files: name = secure_filename(f.filename or "") if not name: @@ -1620,15 +1668,32 @@ def upload_file(): out_path = dest / name if out_path.exists(): if conflict == "skip": + stats["skipped"] += 1 continue elif conflict == "backup": try: out_path.rename(_backup_path(out_path)) + stats["backup"] += 1 except Exception: + stats["error"] += 1 continue elif conflict == "rename": out_path = _auto_rename(out_path) - f.save(out_path) + stats["renamed"] += 1 + try: + f.save(out_path) + stats["ok"] += 1 + except Exception: + stats["error"] += 1 + + parts = [] + if stats["ok"]: parts.append(f"{stats['ok']} envoyé(s)") + if stats["backup"]: parts.append(f"{stats['backup']} sauvegardé(s)") + if stats["renamed"]: parts.append(f"{stats['renamed']} renommé(s)") + if stats["skipped"]: parts.append(f"{stats['skipped']} ignoré(s)") + if stats["error"]: parts.append(f"{stats['error']} erreur(s)") + if parts: + flash(", ".join(parts), "upload") return redirect(url_for("browse", subpath=subpath) if subpath else url_for("browse")) @@ -1783,6 +1848,7 @@ def resize_image(): out_path = parent / out_name out_rel = str(out_path.relative_to(ASSETS_ROOT)) + bak_name = None if out_path.exists(): if conflict == "skip": errors.append({"name": out_name, "reason": "Fichier existant, ignoré"}) @@ -1791,6 +1857,7 @@ def resize_image(): try: bak = _backup_path(out_path) out_path.rename(bak) + bak_name = bak.name except Exception as exc: errors.append({"name": out_name, "reason": f"Backup impossible : {exc}"}) continue @@ -1799,10 +1866,15 @@ def resize_image(): out_name = out_path.name out_rel = str(out_path.relative_to(ASSETS_ROOT)) + def _cr(n, p): + d = {"name": n, "path": p} + if bak_name: d["backup"] = bak_name + return d + try: if fmt == "svg" and is_svg: shutil.copy2(target, out_path) - created.append({"name": out_name, "path": out_rel}) + created.append(_cr(out_name, out_rel)) elif fmt == "svg" and not is_svg: errors.append({"name": out_name, "reason": "Conversion raster→SVG non supportée"}) @@ -1828,7 +1900,7 @@ def resize_image(): buf.seek(0) img = Image.open(buf).convert("RGB") img.save(out_path, format="JPEG", quality=90) - created.append({"name": out_name, "path": out_rel}) + created.append(_cr(out_name, out_rel)) else: img = Image.open(target) @@ -1846,7 +1918,7 @@ def resize_image(): elif fmt == "ico": img = img.convert("RGBA") img.save(out_path, format="ICO", sizes=[(w, h)]) - created.append({"name": out_name, "path": out_rel}) + created.append(_cr(out_name, out_rel)) except Exception as exc: errors.append({"name": out_name, "reason": str(exc)}) @@ -1869,6 +1941,24 @@ def robots(): return send_from_directory(ASSETS_ROOT, "robots.txt") +@app.route("/sitemap.xml") +def sitemap(): + base = "https://static.alpinux.org" + urls = [] + for top in sorted(_PUBLIC_TOP): + d = ASSETS_ROOT / top + if d.is_dir(): + for f in sorted(d.rglob("*")): + if f.is_file(): + urls.append(f"{base}/{f.relative_to(ASSETS_ROOT).as_posix()}") + xml = ['', + ''] + for u in urls: + xml.append(f" {u}") + xml.append("") + return app.response_class("\n".join(xml), mimetype="application/xml") + + @app.route("/") def cdn_file(subpath): top = Path(subpath).parts[0] diff --git a/app/requirements.txt b/app/requirements.txt index e9c7f5b..714e802 100644 --- a/app/requirements.txt +++ b/app/requirements.txt @@ -5,3 +5,4 @@ gunicorn>=21.0 python-dotenv>=1.0 Pillow>=10.0 psycopg2-binary>=2.9 +cairosvg>=2.7 diff --git a/app/static/app.css b/app/static/app.css index d882d92..29da5ad 100644 --- a/app/static/app.css +++ b/app/static/app.css @@ -404,3 +404,31 @@ footer { background: var(--blue-dark); color: rgba(255,255,255,.6); margin-top: .sec-tab--active { background: var(--blue); color: #fff; border-color: var(--blue); font-weight: 600; } .tab-badge { display: inline-flex; align-items: center; justify-content: center; background: rgba(255,255,255,.25); border-radius: 9px; font-size: .72rem; font-weight: 700; min-width: 1.2rem; padding: 0 .3rem; margin-left: .3rem; vertical-align: middle; } .sec-tab:not(.sec-tab--active) .tab-badge { background: #e5e7eb; color: #6b7280; } + +/* ── Résumé erreurs 404 ────────────────────────────────────────── */ +.err-summary { display: flex; gap: 1rem; flex-wrap: wrap; margin-bottom: .75rem; } +.err-summary-item { display: inline-flex; align-items: center; gap: .35rem; font-size: .82rem; font-weight: 600; padding: .2rem .65rem; border-radius: 20px; } +.err-summary-item--active { background: #fee2e2; color: #991b1b; } +.err-summary-item--ok { background: #dcfce7; color: #166534; } + +/* ── Backup hint dans les résultats de resize ──────────────────── */ +.resize-backup-hint { font-size: .75rem; color: var(--muted); margin-left: .4rem; } + +/* ── Sélecteur Tout/Aucun (resize) ────────────────────────────── */ +.resize-sel-btns { font-size: .75rem; margin-left: .5rem; } +.resize-sel-btns a { color: var(--blue); text-decoration: none; cursor: pointer; } +.resize-sel-btns a:hover { text-decoration: underline; } + +/* ── Flash messages (upload) ───────────────────────────────────── */ +.flash-bar { padding: .55rem 1.25rem; border-radius: 6px; font-size: .88rem; margin: .5rem 0; } +.flash-bar--upload { background: #f0fdf4; color: #166534; border: 1px solid #bbf7d0; } + +/* ── Corbeille : filtre + tri ──────────────────────────────────── */ +.trash-toolbar { display: flex; align-items: center; gap: .75rem; flex-wrap: wrap; margin-bottom: .75rem; } +.trash-filter { padding: .35rem .75rem; border: 1px solid var(--border); border-radius: 6px; font-size: .88rem; width: 220px; } +.trash-sort-btn { background: none; border: 1px solid var(--border); border-radius: 6px; padding: .25rem .6rem; font-size: .8rem; cursor: pointer; color: var(--muted); white-space: nowrap; } +.trash-sort-btn.active { background: var(--blue-light); color: var(--blue); border-color: var(--blue); font-weight: 600; } +.trash-batch-bar { display: none; align-items: center; gap: .5rem; background: var(--blue-light); border-radius: 6px; padding: .4rem .75rem; font-size: .85rem; } +.trash-batch-bar.visible { display: flex; } +.col-check { width: 2rem; text-align: center; } +.trash-select-count { font-weight: 600; color: var(--blue); } diff --git a/app/templates/_file_table.html b/app/templates/_file_table.html index 4768481..90ced4e 100644 --- a/app/templates/_file_table.html +++ b/app/templates/_file_table.html @@ -8,9 +8,10 @@ subpath – chemin courant (browse uniquement, pour la ligne "..") breadcrumb – liste de crumbs (browse uniquement) #} - +
+ {% if mode == 'trash' %}{% endif %} {% if mode == 'trash' %} @@ -44,7 +45,8 @@ {% endif %} {% for e in entries %} - + + {% if mode == 'trash' %}{% endif %}
Nom
{%- if e.is_dir -%}📁 {%- elif e.is_image -%}🖼 diff --git a/app/templates/base.html b/app/templates/base.html index 2756893..2fddfd2 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -52,6 +52,11 @@
+ {% with msgs = get_flashed_messages(with_categories=true) %} + {% for cat, msg in msgs %} +
{{ msg }}
+ {% endfor %} + {% endwith %} {% block content %}{% endblock %}
diff --git a/app/templates/errors_404.html b/app/templates/errors_404.html index c6827ca..473870d 100644 --- a/app/templates/errors_404.html +++ b/app/templates/errors_404.html @@ -28,6 +28,7 @@ + @@ -273,19 +274,43 @@ dot.title = still_404 ? 'Toujours actif' : 'Résolu'; } + function updateSummary() { + const el = document.getElementById('err-summary'); + if (!el) return; + let aReqs = 0, aIPs = 0, oReqs = 0, oIPs = 0; + errRows.forEach(row => { + if (row.style.display === 'none') return; + const dot = row.querySelector('.err-status-dot'); + const reqs = parseInt(row.querySelector('.hits-badge')?.textContent, 10) || 0; + const ips = parseInt(row.querySelector('.col-err-ips')?.textContent, 10) || 0; + if (dot?.classList.contains('err-status-dot--active')) { aReqs += reqs; aIPs += ips; } + else if (dot?.classList.contains('err-status-dot--ok')) { oReqs += reqs; oIPs += ips; } + }); + if (!aReqs && !oReqs) { el.style.display = 'none'; return; } + el.style.display = ''; + el.innerHTML = + `● ${aReqs} req. · ${aIPs} IPs actives` + + `● ${oReqs} req. · ${oIPs} IPs résolues`; + const stillActive = document.querySelectorAll('.err-status-dot--active').length; + document.title = stillActive > 0 + ? `Erreurs 404 (${stillActive}) — Static Alpinux` + : `Erreurs 404 — Static Alpinux`; + } + document.querySelectorAll('.err-status-dot').forEach(dot => { dot.style.cursor = 'pointer'; dot.addEventListener('click', async () => { dot.textContent = '○'; dot.className = 'err-status-dot'; const r = await fetch(DETAIL_URL + '?path=' + encodeURIComponent(dot.dataset.path)).then(r => r.json()); applyDotResult(dot, r.still_404); + updateSummary(); }); }); /* Auto-vérification au chargement : tous les dots actifs (rouges) */ (async () => { const activeDots = Array.from(document.querySelectorAll('.err-status-dot--active')); - if (!activeDots.length) return; + if (!activeDots.length) { updateSummary(); return; } activeDots.forEach(d => { d.textContent = '○'; d.className = 'err-status-dot'; }); try { const paths = activeDots.map(d => d.dataset.path); @@ -298,6 +323,7 @@ } catch { activeDots.forEach(d => { d.textContent = '●'; d.className = 'err-status-dot err-status-dot--active'; }); } + updateSummary(); })(); /* ═══════════════════════════════════════════════ diff --git a/app/templates/preview_image.html b/app/templates/preview_image.html index 6066684..25580ec 100644 --- a/app/templates/preview_image.html +++ b/app/templates/preview_image.html @@ -110,7 +110,9 @@
-
Tailles (px)
+
Tailles (px) + Tout · Aucun +
{% for size in [32, 64, 100, 128, 200, 300, 500, 600, 1024] %}
-
Formats
+
Formats + Tout · Aucun +
{% for fmt in ['png', 'jpg', 'ico'] %}
+ {% if not from_trash %} + + + {% endif %}
Taille : {{ filesize }} Modifié : {{ mtime.strftime('%d/%m/%Y %H:%M') }} diff --git a/app/templates/preview_text.html b/app/templates/preview_text.html index cad7c86..7dbb5d2 100644 --- a/app/templates/preview_text.html +++ b/app/templates/preview_text.html @@ -11,9 +11,20 @@ ← Retour {% endif %} -

{{ filename }}

- {% if not from_trash %}{% include '_preview_nav.html' %}{% endif %} +

{{ filename }}

+ {% if not from_trash %} + + {% include '_preview_nav.html' %} + {% endif %}
+ {% if not from_trash %} + + {% endif %}
Taille : {{ filesize }} Modifié : {{ mtime.strftime('%d/%m/%Y %H:%M') }} @@ -23,6 +34,41 @@
+{% if not from_trash %} + +{% endif %}
{{ filename }} diff --git a/app/templates/trash.html b/app/templates/trash.html index a95f9a0..2be01f3 100644 --- a/app/templates/trash.html +++ b/app/templates/trash.html @@ -20,6 +20,17 @@

Les fichiers sont supprimés définitivement après 30 jours.

{% if entries %} +
+ + + + +
+
+ 0 sélectionné(s) + + +
{% set mode = 'trash' %} {% include '_file_table.html' %} {% else %} @@ -41,7 +52,9 @@ diff --git a/error/400.html b/error/400.html new file mode 100755 index 0000000..1b55e26 --- /dev/null +++ b/error/400.html @@ -0,0 +1,61 @@ + + + + ERROR 400 - Bad Request! + + + + + +
+ +
+

The following error occurred:

+

You have used invalid syntax.

+

Please contact the webmaster with any queries.

+
+ +
+ + diff --git a/error/401.html b/error/401.html new file mode 100755 index 0000000..2b7d8a0 --- /dev/null +++ b/error/401.html @@ -0,0 +1,61 @@ + + + + ERROR 401 - Unauthorized! + + + + + +
+ +
+

The following error occurred:

+

The URL requested requires authorisation.

+

Please contact the webmaster with any queries.

+
+ +
+ + diff --git a/error/403.html b/error/403.html new file mode 100755 index 0000000..ab630ed --- /dev/null +++ b/error/403.html @@ -0,0 +1,61 @@ + + + + ERROR 403 - Forbidden! + + + + + +
+ +
+

The following error occurred:

+

You are not permitted to access the requested URL.

+

Please contact the webmaster with any queries.

+
+ +
+ + diff --git a/error/404.html b/error/404.html new file mode 100755 index 0000000..62f6ddd --- /dev/null +++ b/error/404.html @@ -0,0 +1,61 @@ + + + + ERROR 404 - Not Found! + + + + + +
+ +
+

The following error occurred:

+

The requested URL was not found on this server.

+

Please check the URL or contact the webmaster.

+
+ +
+ + diff --git a/error/405.html b/error/405.html new file mode 100755 index 0000000..dade7de --- /dev/null +++ b/error/405.html @@ -0,0 +1,61 @@ + + + + ERROR 405 - Method Not Allowed! + + + + + +
+ +
+

The following error occurred:

+

The method used is not permitted.

+

Please contact the webmaster with any queries.

+
+ +
+ + diff --git a/error/500.html b/error/500.html new file mode 100755 index 0000000..549a06d --- /dev/null +++ b/error/500.html @@ -0,0 +1,61 @@ + + + + ERROR 500 - Internal Server Error! + + + + + +
+ +
+

The following error occurred:

+

The requested URL caused an internal server error.

+

If you get this message repeatedly please contact the webmaster.

+
+ +
+ + diff --git a/error/502.html b/error/502.html new file mode 100755 index 0000000..11f4b1e --- /dev/null +++ b/error/502.html @@ -0,0 +1,61 @@ + + + + ERROR 502 - Bad Gateway! + + + + + +
+ +
+

The following error occurred:

+

This server received an invalid response from an upstream server it accessed to fulfill the request.

+

If you get this message repeatedly please contact the webmaster.

+
+ +
+ + diff --git a/error/503.html b/error/503.html new file mode 100755 index 0000000..a25d071 --- /dev/null +++ b/error/503.html @@ -0,0 +1,61 @@ + + + + ERROR 503 - Service Unavailable! + + + + + +
+ +
+

The following error occurred:

+

The Service is not available at the moment due to a temporary overloading or maintenance of the server. Please try again later.

+

Please contact the webmaster with any queries.

+
+ +
+ + diff --git a/logo/alpinux-logo.jpg b/logo/alpinux-logo.jpg new file mode 100644 index 0000000..a00eff9 Binary files /dev/null and b/logo/alpinux-logo.jpg differ diff --git a/logo/alpinux-logo.png b/logo/alpinux-logo.png new file mode 100644 index 0000000..1983d81 Binary files /dev/null and b/logo/alpinux-logo.png differ diff --git a/logo/favicon.ico b/logo/favicon.ico new file mode 100644 index 0000000..3de6046 Binary files /dev/null and b/logo/favicon.ico differ diff --git a/robots.txt b/robots.txt new file mode 100755 index 0000000..7d329b1 --- /dev/null +++ b/robots.txt @@ -0,0 +1 @@ +User-agent: * diff --git a/scripts/deploy-app.sh b/scripts/deploy-app.sh index aaabcce..ebf2c32 100755 --- a/scripts/deploy-app.sh +++ b/scripts/deploy-app.sh @@ -40,7 +40,9 @@ echo "" echo -e "${CYAN}[1/4] Synchronisation des fichiers…${RESET}" RSYNC_OPTS=(-rlcz --delete --human-readable --exclude='.env' --exclude='__pycache__/' --exclude='*.pyc' - --exclude='venv/' --exclude='.env.example') + --exclude='venv/' --exclude='.env.example' + --exclude='ignored_ips.json' + --exclude='as_cache/') if $DRY_RUN; then rsync --dry-run --itemize-changes "${RSYNC_OPTS[@]}" "$APP_DIR/" "$REMOTE_HOST:$REMOTE_DEST/" diff --git a/standard_index.html b/standard_index.html new file mode 100755 index 0000000..266094d --- /dev/null +++ b/standard_index.html @@ -0,0 +1,60 @@ + + + + Welcome! + + + + + + +
+ +
+

This is the default index page of your website.

+

This file may be deleted or overwritten without any difficulty. This is produced by the file index.html in the web directory.

+

For questions or problems please contact support.

+
+ +
+ + diff --git a/stats/.htaccess b/stats/.htaccess new file mode 100644 index 0000000..1de87cf --- /dev/null +++ b/stats/.htaccess @@ -0,0 +1,9 @@ +AuthType Basic +AuthName "Members Only" +AuthUserFile /var/www/clients/client1/web17/web/stats/.htpasswd_stats +require valid-user +DirectoryIndex index.html index.php +Header set Content-Security-Policy "default-src * 'self' 'unsafe-inline' 'unsafe-eval' data:;" + +AddDefaultCharset UTF-8 + diff --git a/stats/index.php b/stats/index.php new file mode 100644 index 0000000..86eec8a --- /dev/null +++ b/stats/index.php @@ -0,0 +1,68 @@ +function load_content(url){var iframe = document.getElementById(\"content\");iframe.src = url;}\n"; + +if ($handle = opendir('.')) +{ + while(false !== ($file = readdir($handle))) + { + if (substr($file,0,1) != "." && is_dir($file)) + { + $orderkey = substr($file,0,4).substr($file,5,2); + if (substr($file,5,2) < 10 ) + { + $orderkey = substr($file,0,4)."0".substr($file,5,2); + } + $awprev[$orderkey] = $file; + } + } + + $month = date("n"); + $year = date("Y"); + + if (date("d") == 1) + { + $month = date("m")-1; + if (date("m") == 1) + { + $year = date("Y")-1; + $month = "12"; + } + } + + $current = $year.$month; + if ( $month < 10 ) { + $current = $year."0".$month; + } + $awprev[$current] = $year."-".$month; + + closedir($handle); +} + +arsort($awprev); + +$options = ""; +foreach ($awprev as $key => $value) { + // Define name for the index file + $awstatsindex = 'awsindex.html'; + if(!file_exists($value.'/awsindex.html') && file_exists($value.'/goaindex.html')) { + $awstatsindex = 'goaindex.html'; + } + // Set name for first entry in month list + if($key == $current) $options .= "\n"; + else $options .= "\n"; +} + +$html = "\n\n\nStats\n"; +$html .= "\n\n\n"; +$html .= $script; +$html .= "
{$yearmonth_text}\n"; +$html .= "\n
\n\n"; +$html .= ""; +echo $html; +?> diff --git a/wiki/pasted/20230505-195953.png b/wiki/pasted/20230505-195953.png new file mode 100644 index 0000000..379043e Binary files /dev/null and b/wiki/pasted/20230505-195953.png differ diff --git a/wiki/pasted/20230506-113625.png b/wiki/pasted/20230506-113625.png new file mode 100644 index 0000000..ccc373f Binary files /dev/null and b/wiki/pasted/20230506-113625.png differ diff --git a/wiki/pasted/20230506-113828.png b/wiki/pasted/20230506-113828.png new file mode 100644 index 0000000..b3f2e19 Binary files /dev/null and b/wiki/pasted/20230506-113828.png differ diff --git a/wiki/technique/2020-12-10_18_24_12.png b/wiki/technique/2020-12-10_18_24_12.png new file mode 100644 index 0000000..b8f9a26 Binary files /dev/null and b/wiki/technique/2020-12-10_18_24_12.png differ diff --git a/wiki/technique/ateliers-dynalab/pasted/20220128-092031.png b/wiki/technique/ateliers-dynalab/pasted/20220128-092031.png new file mode 100644 index 0000000..b2cbdc1 Binary files /dev/null and b/wiki/technique/ateliers-dynalab/pasted/20220128-092031.png differ diff --git a/wiki/technique/ateliers-dynalab/pasted/20220204-113653.png b/wiki/technique/ateliers-dynalab/pasted/20220204-113653.png new file mode 100644 index 0000000..60d8f9d Binary files /dev/null and b/wiki/technique/ateliers-dynalab/pasted/20220204-113653.png differ diff --git a/wiki/technique/ateliers-dynalab/pasted/20220204-114029.png b/wiki/technique/ateliers-dynalab/pasted/20220204-114029.png new file mode 100644 index 0000000..dc57f35 Binary files /dev/null and b/wiki/technique/ateliers-dynalab/pasted/20220204-114029.png differ diff --git a/wiki/technique/ateliers-dynalab/pasted/20220204-114228.png b/wiki/technique/ateliers-dynalab/pasted/20220204-114228.png new file mode 100644 index 0000000..a19e268 Binary files /dev/null and b/wiki/technique/ateliers-dynalab/pasted/20220204-114228.png differ diff --git a/wiki/technique/ateliers-dynalab/pasted/20220204-114346.png b/wiki/technique/ateliers-dynalab/pasted/20220204-114346.png new file mode 100644 index 0000000..f90cc74 Binary files /dev/null and b/wiki/technique/ateliers-dynalab/pasted/20220204-114346.png differ diff --git a/wiki/technique/ateliers-dynalab/pasted/20220204-115237.png b/wiki/technique/ateliers-dynalab/pasted/20220204-115237.png new file mode 100644 index 0000000..5922398 Binary files /dev/null and b/wiki/technique/ateliers-dynalab/pasted/20220204-115237.png differ diff --git a/wiki/technique/ateliers-dynalab/pasted/20220204-123551.png b/wiki/technique/ateliers-dynalab/pasted/20220204-123551.png new file mode 100644 index 0000000..ba5bad1 Binary files /dev/null and b/wiki/technique/ateliers-dynalab/pasted/20220204-123551.png differ diff --git a/wiki/technique/ateliers-dynalab/pasted/20220204-123823.png b/wiki/technique/ateliers-dynalab/pasted/20220204-123823.png new file mode 100644 index 0000000..0ce50ad Binary files /dev/null and b/wiki/technique/ateliers-dynalab/pasted/20220204-123823.png differ diff --git a/wiki/technique/ateliers-dynalab/sbc-nodemcu-esp32-01.png b/wiki/technique/ateliers-dynalab/sbc-nodemcu-esp32-01.png new file mode 100644 index 0000000..9f50e5b Binary files /dev/null and b/wiki/technique/ateliers-dynalab/sbc-nodemcu-esp32-01.png differ diff --git a/wiki/technique/capture_d-ecran_du_2022-12-08_18-36-49.png b/wiki/technique/capture_d-ecran_du_2022-12-08_18-36-49.png new file mode 100644 index 0000000..899fee3 Binary files /dev/null and b/wiki/technique/capture_d-ecran_du_2022-12-08_18-36-49.png differ diff --git a/wiki/technique/esp/arduino_software_1.8.7.png b/wiki/technique/esp/arduino_software_1.8.7.png new file mode 100644 index 0000000..90ee724 Binary files /dev/null and b/wiki/technique/esp/arduino_software_1.8.7.png differ diff --git a/wiki/technique/esp/pasted/20220123-224734.png b/wiki/technique/esp/pasted/20220123-224734.png new file mode 100644 index 0000000..4de7789 Binary files /dev/null and b/wiki/technique/esp/pasted/20220123-224734.png differ diff --git a/wiki/technique/esp/pasted/20220123-224819.png b/wiki/technique/esp/pasted/20220123-224819.png new file mode 100644 index 0000000..929eaeb Binary files /dev/null and b/wiki/technique/esp/pasted/20220123-224819.png differ diff --git a/wiki/technique/esp/pasted/20220123-224907.png b/wiki/technique/esp/pasted/20220123-224907.png new file mode 100644 index 0000000..8342a00 Binary files /dev/null and b/wiki/technique/esp/pasted/20220123-224907.png differ diff --git a/wiki/technique/esp/pasted/20220123-224934.png b/wiki/technique/esp/pasted/20220123-224934.png new file mode 100644 index 0000000..6a35897 Binary files /dev/null and b/wiki/technique/esp/pasted/20220123-224934.png differ diff --git a/wiki/technique/esp/terminal_alternatives_config_java.png b/wiki/technique/esp/terminal_alternatives_config_java.png new file mode 100644 index 0000000..c8a15a6 Binary files /dev/null and b/wiki/technique/esp/terminal_alternatives_config_java.png differ diff --git a/wiki/technique/esp/terminal_install_arduino.png b/wiki/technique/esp/terminal_install_arduino.png new file mode 100644 index 0000000..2cfeafe Binary files /dev/null and b/wiki/technique/esp/terminal_install_arduino.png differ diff --git a/wiki/technique/matrix/pasted/20231006-005234.png b/wiki/technique/matrix/pasted/20231006-005234.png new file mode 100644 index 0000000..102cdb0 Binary files /dev/null and b/wiki/technique/matrix/pasted/20231006-005234.png differ diff --git a/wiki/technique/matrix/pasted/20231006-005313.png b/wiki/technique/matrix/pasted/20231006-005313.png new file mode 100644 index 0000000..4989b2b Binary files /dev/null and b/wiki/technique/matrix/pasted/20231006-005313.png differ diff --git a/wiki/technique/matrix/pasted/20231006-005403.png b/wiki/technique/matrix/pasted/20231006-005403.png new file mode 100644 index 0000000..016072b Binary files /dev/null and b/wiki/technique/matrix/pasted/20231006-005403.png differ diff --git a/wiki/technique/matrix/pasted/20231006-005404.png b/wiki/technique/matrix/pasted/20231006-005404.png new file mode 100644 index 0000000..016072b Binary files /dev/null and b/wiki/technique/matrix/pasted/20231006-005404.png differ diff --git a/wiki/technique/matrix/pasted/20231006-005439.png b/wiki/technique/matrix/pasted/20231006-005439.png new file mode 100644 index 0000000..016072b Binary files /dev/null and b/wiki/technique/matrix/pasted/20231006-005439.png differ diff --git a/wiki/technique/matrix/pasted/20231006-005458.png b/wiki/technique/matrix/pasted/20231006-005458.png new file mode 100644 index 0000000..4a0bbe9 Binary files /dev/null and b/wiki/technique/matrix/pasted/20231006-005458.png differ diff --git a/wiki/technique/pasted/20201219-092558.png b/wiki/technique/pasted/20201219-092558.png new file mode 100644 index 0000000..01fe730 Binary files /dev/null and b/wiki/technique/pasted/20201219-092558.png differ diff --git a/wiki/technique/pasted/20201219-092818.png b/wiki/technique/pasted/20201219-092818.png new file mode 100644 index 0000000..c2f5856 Binary files /dev/null and b/wiki/technique/pasted/20201219-092818.png differ diff --git a/wiki/technique/pasted/20230504-211805.png b/wiki/technique/pasted/20230504-211805.png new file mode 100644 index 0000000..aba5674 Binary files /dev/null and b/wiki/technique/pasted/20230504-211805.png differ diff --git a/wiki/technique/pratique/10_-_partition_du_disque.png b/wiki/technique/pratique/10_-_partition_du_disque.png new file mode 100644 index 0000000..34dcb37 Binary files /dev/null and b/wiki/technique/pratique/10_-_partition_du_disque.png differ diff --git a/wiki/technique/pratique/12_-_parametres_systeme_-_choix_du_francais.png b/wiki/technique/pratique/12_-_parametres_systeme_-_choix_du_francais.png new file mode 100644 index 0000000..f5df5a9 Binary files /dev/null and b/wiki/technique/pratique/12_-_parametres_systeme_-_choix_du_francais.png differ diff --git a/wiki/technique/pratique/13_-_verifier_que_tout_est_bien_francise.png b/wiki/technique/pratique/13_-_verifier_que_tout_est_bien_francise.png new file mode 100644 index 0000000..7f23bbb Binary files /dev/null and b/wiki/technique/pratique/13_-_verifier_que_tout_est_bien_francise.png differ diff --git a/wiki/technique/pratique/2_-_herite_egale_bios.png b/wiki/technique/pratique/2_-_herite_egale_bios.png new file mode 100644 index 0000000..397b271 Binary files /dev/null and b/wiki/technique/pratique/2_-_herite_egale_bios.png differ diff --git a/wiki/technique/pratique/2_-_herite_egale_bios_2.png b/wiki/technique/pratique/2_-_herite_egale_bios_2.png new file mode 100644 index 0000000..29b5941 Binary files /dev/null and b/wiki/technique/pratique/2_-_herite_egale_bios_2.png differ diff --git a/wiki/technique/pratique/3_-_desactiver_le_demarrage_rapide.png b/wiki/technique/pratique/3_-_desactiver_le_demarrage_rapide.png new file mode 100644 index 0000000..1f8db25 Binary files /dev/null and b/wiki/technique/pratique/3_-_desactiver_le_demarrage_rapide.png differ diff --git a/wiki/technique/pratique/4_-_autoriser_windows_a_eteindre_ce_peripherique.png b/wiki/technique/pratique/4_-_autoriser_windows_a_eteindre_ce_peripherique.png new file mode 100644 index 0000000..e75758f Binary files /dev/null and b/wiki/technique/pratique/4_-_autoriser_windows_a_eteindre_ce_peripherique.png differ diff --git a/wiki/technique/pratique/6_-_welcome_sous_linux_mint.png b/wiki/technique/pratique/6_-_welcome_sous_linux_mint.png new file mode 100644 index 0000000..46ee285 Binary files /dev/null and b/wiki/technique/pratique/6_-_welcome_sous_linux_mint.png differ diff --git a/wiki/technique/pratique/7_-_installation_de_linux_mint.png b/wiki/technique/pratique/7_-_installation_de_linux_mint.png new file mode 100644 index 0000000..08877a6 Binary files /dev/null and b/wiki/technique/pratique/7_-_installation_de_linux_mint.png differ diff --git a/wiki/technique/pratique/801400013054pompe-vide-cave-pour-eaux-claires-vc200ecl-debit-3500-l-h.pdf b/wiki/technique/pratique/801400013054pompe-vide-cave-pour-eaux-claires-vc200ecl-debit-3500-l-h.pdf new file mode 100644 index 0000000..26290dc Binary files /dev/null and b/wiki/technique/pratique/801400013054pompe-vide-cave-pour-eaux-claires-vc200ecl-debit-3500-l-h.pdf differ diff --git a/wiki/technique/pratique/8_-_choisir_clavier_francais.png b/wiki/technique/pratique/8_-_choisir_clavier_francais.png new file mode 100644 index 0000000..9cf1510 Binary files /dev/null and b/wiki/technique/pratique/8_-_choisir_clavier_francais.png differ diff --git a/wiki/technique/pratique/9_-_choix_des_logiciels_non_libres.png b/wiki/technique/pratique/9_-_choix_des_logiciels_non_libres.png new file mode 100644 index 0000000..abe61e1 Binary files /dev/null and b/wiki/technique/pratique/9_-_choix_des_logiciels_non_libres.png differ diff --git a/wiki/technique/pratique/boot_unlock.png b/wiki/technique/pratique/boot_unlock.png new file mode 100644 index 0000000..e235de7 Binary files /dev/null and b/wiki/technique/pratique/boot_unlock.png differ diff --git a/wiki/technique/pratique/img_20230511_163727.jpg b/wiki/technique/pratique/img_20230511_163727.jpg new file mode 100644 index 0000000..630401c Binary files /dev/null and b/wiki/technique/pratique/img_20230511_163727.jpg differ diff --git a/wiki/technique/pratique/pasted/20200930-133822.png b/wiki/technique/pratique/pasted/20200930-133822.png new file mode 100644 index 0000000..0280516 Binary files /dev/null and b/wiki/technique/pratique/pasted/20200930-133822.png differ diff --git a/wiki/technique/pratique/pasted/20200930-204053.png b/wiki/technique/pratique/pasted/20200930-204053.png new file mode 100644 index 0000000..c3ec321 Binary files /dev/null and b/wiki/technique/pratique/pasted/20200930-204053.png differ diff --git a/wiki/technique/pratique/pasted/20201001-205950.png b/wiki/technique/pratique/pasted/20201001-205950.png new file mode 100644 index 0000000..9d64b94 Binary files /dev/null and b/wiki/technique/pratique/pasted/20201001-205950.png differ diff --git a/wiki/technique/pratique/pasted/20201110-193625.png b/wiki/technique/pratique/pasted/20201110-193625.png new file mode 100644 index 0000000..4b8e086 Binary files /dev/null and b/wiki/technique/pratique/pasted/20201110-193625.png differ diff --git a/wiki/technique/pratique/pasted/20211008-004231.png b/wiki/technique/pratique/pasted/20211008-004231.png new file mode 100644 index 0000000..8c7a95e Binary files /dev/null and b/wiki/technique/pratique/pasted/20211008-004231.png differ diff --git a/wiki/technique/pratique/pasted/20211008-004245.png b/wiki/technique/pratique/pasted/20211008-004245.png new file mode 100644 index 0000000..5c811a0 Binary files /dev/null and b/wiki/technique/pratique/pasted/20211008-004245.png differ diff --git a/wiki/technique/pratique/pasted/20220408-224502.png b/wiki/technique/pratique/pasted/20220408-224502.png new file mode 100644 index 0000000..01b2a4e Binary files /dev/null and b/wiki/technique/pratique/pasted/20220408-224502.png differ diff --git a/wiki/technique/pratique/pasted/20221112-070510.png b/wiki/technique/pratique/pasted/20221112-070510.png new file mode 100644 index 0000000..3836d14 Binary files /dev/null and b/wiki/technique/pratique/pasted/20221112-070510.png differ diff --git a/wiki/technique/pratique/pasted/20221112-070544.png b/wiki/technique/pratique/pasted/20221112-070544.png new file mode 100644 index 0000000..e9159e3 Binary files /dev/null and b/wiki/technique/pratique/pasted/20221112-070544.png differ diff --git a/wiki/technique/pratique/pasted/20221112-070632.png b/wiki/technique/pratique/pasted/20221112-070632.png new file mode 100644 index 0000000..671f0ce Binary files /dev/null and b/wiki/technique/pratique/pasted/20221112-070632.png differ diff --git a/wiki/technique/pratique/pasted/20221112-071102.png b/wiki/technique/pratique/pasted/20221112-071102.png new file mode 100644 index 0000000..b42e500 Binary files /dev/null and b/wiki/technique/pratique/pasted/20221112-071102.png differ diff --git a/wiki/technique/pratique/pasted/20221112-071144.png b/wiki/technique/pratique/pasted/20221112-071144.png new file mode 100644 index 0000000..f360c35 Binary files /dev/null and b/wiki/technique/pratique/pasted/20221112-071144.png differ diff --git a/wiki/technique/pratique/pasted/20221112-071231.png b/wiki/technique/pratique/pasted/20221112-071231.png new file mode 100644 index 0000000..1da0f6d Binary files /dev/null and b/wiki/technique/pratique/pasted/20221112-071231.png differ diff --git a/wiki/technique/pratique/pasted/20221112-071250.png b/wiki/technique/pratique/pasted/20221112-071250.png new file mode 100644 index 0000000..34547b9 Binary files /dev/null and b/wiki/technique/pratique/pasted/20221112-071250.png differ diff --git a/wiki/technique/pratique/pasted/20221112-071411.png b/wiki/technique/pratique/pasted/20221112-071411.png new file mode 100644 index 0000000..ef632af Binary files /dev/null and b/wiki/technique/pratique/pasted/20221112-071411.png differ diff --git a/wiki/technique/pratique/pasted/20221112-071503.png b/wiki/technique/pratique/pasted/20221112-071503.png new file mode 100644 index 0000000..5c90100 Binary files /dev/null and b/wiki/technique/pratique/pasted/20221112-071503.png differ diff --git a/wiki/technique/pratique/pasted/20221112-071548.png b/wiki/technique/pratique/pasted/20221112-071548.png new file mode 100644 index 0000000..9b1bd36 Binary files /dev/null and b/wiki/technique/pratique/pasted/20221112-071548.png differ diff --git a/wiki/technique/pratique/pasted/20221112-071623.png b/wiki/technique/pratique/pasted/20221112-071623.png new file mode 100644 index 0000000..2def7af Binary files /dev/null and b/wiki/technique/pratique/pasted/20221112-071623.png differ diff --git a/wiki/technique/pratique/pasted/20221112-071657.png b/wiki/technique/pratique/pasted/20221112-071657.png new file mode 100644 index 0000000..1f7ea57 Binary files /dev/null and b/wiki/technique/pratique/pasted/20221112-071657.png differ diff --git a/wiki/technique/pratique/pasted/20221201-193135.png b/wiki/technique/pratique/pasted/20221201-193135.png new file mode 100644 index 0000000..642ee48 Binary files /dev/null and b/wiki/technique/pratique/pasted/20221201-193135.png differ diff --git a/wiki/technique/pratique/pasted/20221201-193257.png b/wiki/technique/pratique/pasted/20221201-193257.png new file mode 100644 index 0000000..63500f0 Binary files /dev/null and b/wiki/technique/pratique/pasted/20221201-193257.png differ diff --git a/wiki/technique/pratique/pasted/20221201-200839.png b/wiki/technique/pratique/pasted/20221201-200839.png new file mode 100644 index 0000000..5f78d93 Binary files /dev/null and b/wiki/technique/pratique/pasted/20221201-200839.png differ diff --git a/wiki/technique/pratique/pasted/20221213-230255.png b/wiki/technique/pratique/pasted/20221213-230255.png new file mode 100644 index 0000000..7d026a3 Binary files /dev/null and b/wiki/technique/pratique/pasted/20221213-230255.png differ diff --git a/wiki/technique/pratique/pasted/20221213-230333.png b/wiki/technique/pratique/pasted/20221213-230333.png new file mode 100644 index 0000000..d229761 Binary files /dev/null and b/wiki/technique/pratique/pasted/20221213-230333.png differ diff --git a/wiki/technique/pratique/pasted/20221213-230452.png b/wiki/technique/pratique/pasted/20221213-230452.png new file mode 100644 index 0000000..08c5e2a Binary files /dev/null and b/wiki/technique/pratique/pasted/20221213-230452.png differ diff --git a/wiki/technique/pratique/pasted/20221213-230516.png b/wiki/technique/pratique/pasted/20221213-230516.png new file mode 100644 index 0000000..cd38d77 Binary files /dev/null and b/wiki/technique/pratique/pasted/20221213-230516.png differ diff --git a/wiki/technique/pratique/pasted/20221213-232715.png b/wiki/technique/pratique/pasted/20221213-232715.png new file mode 100644 index 0000000..c3d09d8 Binary files /dev/null and b/wiki/technique/pratique/pasted/20221213-232715.png differ diff --git a/wiki/technique/pratique/pasted/20230922-173451.png b/wiki/technique/pratique/pasted/20230922-173451.png new file mode 100644 index 0000000..e19f9e4 Binary files /dev/null and b/wiki/technique/pratique/pasted/20230922-173451.png differ diff --git a/wiki/technique/pratique/pasted/20230922-173926.png b/wiki/technique/pratique/pasted/20230922-173926.png new file mode 100644 index 0000000..9368297 Binary files /dev/null and b/wiki/technique/pratique/pasted/20230922-173926.png differ diff --git a/wiki/technique/pratique/pasted/20230922-174300.png b/wiki/technique/pratique/pasted/20230922-174300.png new file mode 100644 index 0000000..448cf3a Binary files /dev/null and b/wiki/technique/pratique/pasted/20230922-174300.png differ diff --git a/wiki/technique/pratique/pasted/20231014-174219.png b/wiki/technique/pratique/pasted/20231014-174219.png new file mode 100644 index 0000000..10e2810 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231014-174219.png differ diff --git a/wiki/technique/pratique/pasted/20231117-124559.png b/wiki/technique/pratique/pasted/20231117-124559.png new file mode 100644 index 0000000..da998b9 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231117-124559.png differ diff --git a/wiki/technique/pratique/pasted/20231117-130123.png b/wiki/technique/pratique/pasted/20231117-130123.png new file mode 100644 index 0000000..2c05224 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231117-130123.png differ diff --git a/wiki/technique/pratique/pasted/20231117-130417.png b/wiki/technique/pratique/pasted/20231117-130417.png new file mode 100644 index 0000000..885a0a9 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231117-130417.png differ diff --git a/wiki/technique/pratique/pasted/20231117-130429.png b/wiki/technique/pratique/pasted/20231117-130429.png new file mode 100644 index 0000000..885a0a9 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231117-130429.png differ diff --git a/wiki/technique/pratique/pasted/20231117-130609.png b/wiki/technique/pratique/pasted/20231117-130609.png new file mode 100644 index 0000000..7e6b7f2 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231117-130609.png differ diff --git a/wiki/technique/pratique/pasted/20231117-145654.png b/wiki/technique/pratique/pasted/20231117-145654.png new file mode 100644 index 0000000..fa1a755 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231117-145654.png differ diff --git a/wiki/technique/pratique/pasted/20231118-011009.png b/wiki/technique/pratique/pasted/20231118-011009.png new file mode 100644 index 0000000..69c605c Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-011009.png differ diff --git a/wiki/technique/pratique/pasted/20231118-011515.png b/wiki/technique/pratique/pasted/20231118-011515.png new file mode 100644 index 0000000..86396b3 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-011515.png differ diff --git a/wiki/technique/pratique/pasted/20231118-011723.png b/wiki/technique/pratique/pasted/20231118-011723.png new file mode 100644 index 0000000..606fe6b Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-011723.png differ diff --git a/wiki/technique/pratique/pasted/20231118-012419.png b/wiki/technique/pratique/pasted/20231118-012419.png new file mode 100644 index 0000000..ff91fb3 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-012419.png differ diff --git a/wiki/technique/pratique/pasted/20231118-012755.png b/wiki/technique/pratique/pasted/20231118-012755.png new file mode 100644 index 0000000..632ba72 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-012755.png differ diff --git a/wiki/technique/pratique/pasted/20231118-012911.png b/wiki/technique/pratique/pasted/20231118-012911.png new file mode 100644 index 0000000..bcad7da Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-012911.png differ diff --git a/wiki/technique/pratique/pasted/20231118-013009.png b/wiki/technique/pratique/pasted/20231118-013009.png new file mode 100644 index 0000000..469be23 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-013009.png differ diff --git a/wiki/technique/pratique/pasted/20231118-013133.png b/wiki/technique/pratique/pasted/20231118-013133.png new file mode 100644 index 0000000..359adae Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-013133.png differ diff --git a/wiki/technique/pratique/pasted/20231118-013250.png b/wiki/technique/pratique/pasted/20231118-013250.png new file mode 100644 index 0000000..657d892 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-013250.png differ diff --git a/wiki/technique/pratique/pasted/20231118-013612.png b/wiki/technique/pratique/pasted/20231118-013612.png new file mode 100644 index 0000000..2bc3f00 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-013612.png differ diff --git a/wiki/technique/pratique/pasted/20231118-013806.png b/wiki/technique/pratique/pasted/20231118-013806.png new file mode 100644 index 0000000..3443841 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-013806.png differ diff --git a/wiki/technique/pratique/pasted/20231118-013914.png b/wiki/technique/pratique/pasted/20231118-013914.png new file mode 100644 index 0000000..ea7f203 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-013914.png differ diff --git a/wiki/technique/pratique/pasted/20231118-014316.png b/wiki/technique/pratique/pasted/20231118-014316.png new file mode 100644 index 0000000..8495b73 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-014316.png differ diff --git a/wiki/technique/pratique/pasted/20231118-014445.png b/wiki/technique/pratique/pasted/20231118-014445.png new file mode 100644 index 0000000..51639b0 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-014445.png differ diff --git a/wiki/technique/pratique/pasted/20231118-014609.png b/wiki/technique/pratique/pasted/20231118-014609.png new file mode 100644 index 0000000..70109b1 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-014609.png differ diff --git a/wiki/technique/pratique/pasted/20231118-014709.png b/wiki/technique/pratique/pasted/20231118-014709.png new file mode 100644 index 0000000..a7742cc Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-014709.png differ diff --git a/wiki/technique/pratique/pasted/20231118-014835.png b/wiki/technique/pratique/pasted/20231118-014835.png new file mode 100644 index 0000000..7c93122 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-014835.png differ diff --git a/wiki/technique/pratique/pasted/20231118-014959.png b/wiki/technique/pratique/pasted/20231118-014959.png new file mode 100644 index 0000000..01712d7 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-014959.png differ diff --git a/wiki/technique/pratique/pasted/20231118-015337.png b/wiki/technique/pratique/pasted/20231118-015337.png new file mode 100644 index 0000000..3c980b0 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-015337.png differ diff --git a/wiki/technique/pratique/pasted/20231118-015439.png b/wiki/technique/pratique/pasted/20231118-015439.png new file mode 100644 index 0000000..01712d7 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-015439.png differ diff --git a/wiki/technique/pratique/pasted/20231118-015957.png b/wiki/technique/pratique/pasted/20231118-015957.png new file mode 100644 index 0000000..47fec70 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-015957.png differ diff --git a/wiki/technique/pratique/pasted/20231118-020022.png b/wiki/technique/pratique/pasted/20231118-020022.png new file mode 100644 index 0000000..6968f73 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-020022.png differ diff --git a/wiki/technique/pratique/pasted/20231118-021958.png b/wiki/technique/pratique/pasted/20231118-021958.png new file mode 100644 index 0000000..95348dd Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-021958.png differ diff --git a/wiki/technique/pratique/pasted/20231118-022109.png b/wiki/technique/pratique/pasted/20231118-022109.png new file mode 100644 index 0000000..fbc8668 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-022109.png differ diff --git a/wiki/technique/pratique/pasted/20231118-022318.png b/wiki/technique/pratique/pasted/20231118-022318.png new file mode 100644 index 0000000..517796e Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-022318.png differ diff --git a/wiki/technique/pratique/pasted/20231118-022619.png b/wiki/technique/pratique/pasted/20231118-022619.png new file mode 100644 index 0000000..63a42b9 Binary files /dev/null and b/wiki/technique/pratique/pasted/20231118-022619.png differ diff --git a/wiki/technique/pratique/premiers_secours.pdf b/wiki/technique/pratique/premiers_secours.pdf new file mode 100644 index 0000000..7eede52 Binary files /dev/null and b/wiki/technique/pratique/premiers_secours.pdf differ diff --git a/wiki/technique/pratique/slash_boot_creation.png b/wiki/technique/pratique/slash_boot_creation.png new file mode 100644 index 0000000..db055a5 Binary files /dev/null and b/wiki/technique/pratique/slash_boot_creation.png differ diff --git a/wiki/technique/pratique/ubiquity_recap.png b/wiki/technique/pratique/ubiquity_recap.png new file mode 100644 index 0000000..2daaf8c Binary files /dev/null and b/wiki/technique/pratique/ubiquity_recap.png differ diff --git a/wiki/technique/pratique/volume_creation.png b/wiki/technique/pratique/volume_creation.png new file mode 100644 index 0000000..bda1b7d Binary files /dev/null and b/wiki/technique/pratique/volume_creation.png differ