Jekyll2024-10-31T20:08:43+01:00https://static.rnmkcy.eu/feed.xmlYannStaticExpérimentations et tests Réseau NetworkManager - nmcli2024-10-31T00:00:00+01:002024-10-31T00:00:00+01:00https://static.rnmkcy.eu/2024/10/31/NetworkManager-nmcli ifname ` **Modifier une connexion réseau existante** Avec nmcli, on peut apporter des ajustements et des configurations à une connexion réseau existante, comme basculer entre les configurations statiques et DHCP `sudo nmcli connection modify ` les configurations que nous pouvons ajouter et modifier une connexion à l’aide de nmcli. Tout d’abord, nous allons créer un nouveau profil de connexion, par exemple sous le nom “gl-inet” nmcli connection add con-name gl-inet ifname enp3s0f1 type ethernet On obtient la sortie suivante Connexion « gl-inet » (afec2e60-eb76-476c-8046-5ace62449019) ajoutée avec succès. Le problème est que l'on se connecte immédiatement à cette interface qui n'est pas encore configurée {:.warning} Pour définir le démarrage automatique (ou pas) de la connexion réseau nmcli connection modify gl-inet connection.autoconnect yes nmcli connection modify gl-inet connection.autoconnect no **Définir une adresse IPv4 statique avec un masque de sous-réseau /24** sudo nmcli connection modify gl-inet ipv4.address 192.168.8.2/24 **Définir une adresse IPv6 statique avec un masque de sous-réseau /64** (facultatif) sudo nmcli connection modify gl-inet ipv6.addresses 2001:db8:1::1/64 **Configurer une passerelle par défaut en IPv4 ou IPv6** ```bash #IPv4 sudo nmcli connection modify gl-inet ipv4.gateway 192.168.8.1 #IPv6 sudo nmcli connection modify gl-inet ipv6.gateway 2001:db8:1::fffe ``` **Configurer un serveur DNS en IPv4 ou IPv6** Pour spécifier les serveurs DNS sur votre connexion internet, utilisez ces commandes : ```bash #IPv4 sudo nmcli connection modify gl-inet ipv4.dns "192.168.0.254" #IPv6 nmcli connection modify gl-inet ipv6.dns "2001:db8:1::ffbb" ``` **Définir la méthode de connexion IPv4 et IPv6 en DHCP (IP automatique)** Pour configurer votre connexion en DHCP : ```bash #For IPv4 sudo nmcli connection modify gl-inet ipv4.method auto #For IPv6 sudo sudo nmcli connection modify gl-inet ipv6.method auto ``` Pour que les modifications apportées prennent effet, vous devez activer le profil. ```bash sudo nmcli connection up gl-inet ```]]>Lenovo Serveur MySpeed2024-10-29T00:00:00+01:002024-10-29T00:00:00+01:00https://static.rnmkcy.eu/2024/10/29/Lenovo_Serveur_MySpeed ### Analyse vitesse internet MySpeed est un logiciel d'analyse de test de vitesse qui enregistre votre vitesse internet pendant 30 jours. Caractéristiques * 📊 MySpeed génère des statistiques claires sur la vitesse, le ping, et plus encore. * ⏰ MySpeed automatise les tests de vitesse et vous permet de définir le temps entre les tests à l'aide d'expressions Cron. * 🗄️ Ajouter plusieurs serveurs directement à une instance MySpeed * 🩺 Configurez des contrôles de santé pour vous notifier par email, Signal, WhatsApp ou Telegram en cas d'erreurs ou de temps d'arrêt * 📆 Les résultats des tests peuvent être stockés jusqu'à 30 jours * 🔥 Prise en charge de Prometheus et Grafana * 🗳️ Choisissez entre les serveurs de test de vitesse Ookla, LibreSpeed et Cloudflare * 💁 En savoir plus sur MySpeed sur [notre site web](https://myspeed.dev/) ### Installer MySpeed Prérequis ```bash # debian sudo apt install wget curl unzip # alpine linux sudo apk add wget curl unzip ``` Vous n'avez besoin de faire cela que si vous n'avez pas encore installé NodeJS ```bash curl -sSL https://deb.nodesource.com/setup_18.x | bash sudo apt-get install nodejs -y ``` Versions installées: `node -v && npm -v` node v20.10.0 npm 10.8.3 Créer un dossier mkdir ~/sharenfs/rnmkcy/myspeed && cd ~/sharenfs/rnmkcy/myspeed Télécharger la dernière version ``` wget $(curl -s https://api.github.com/repos/gnmyt/myspeed/releases/latest | grep browser_download_url | cut -d '"' -f 4) unzip MySpeed-*.zip && rm MySpeed-*.zip npm install npm audit fix ``` ### Proxy nginx Créer le proxy sur le domaine `speed.rnmkcy.eu` qui écoute sur le port 5216 ``` server { listen 80; listen [::]:80; server_name speed.rnmkcy.eu; # redirect all plain HTTP requests to HTTPS return 301 https://speed.rnmkcy.eu$request_uri; } server { # ipv4 listening port/protocol listen 443 ssl http2; # ipv6 listening port/protocol listen [::]:443 ssl http2; server_name speed.rnmkcy.eu; include /etc/nginx/conf.d/security.conf.inc; location / { proxy_pass http://127.0.0.1:5216; } } ``` ### Lancement MySpeed Lancer le serveur manuellement NODE_ENV=production node server ![](/images/alpine-MySpeed01.png) Depuis un navigateur, ouvrir le lien https://speed.rnmkcy.eu ![](/images/alpine-MySpeed02.png) ![](/images/alpine-MySpeed03.png) ![](/images/alpine-MySpeed04.png) ![](/images/alpine-MySpeed05.png) ![](/images/alpine-MySpeed06.png) Après lancement du test ![](/images/alpine-MySpeed07.png) Sur le terminal ![](/images/alpine-MySpeed08.png) ### MySpeed 24/7 Créez un fichier nommé `myspeed.service` sous `/etc/systemd/system` sudo nano /etc/systemd/system/myspeed.service ``` [Unit] Description=MySpeed After=network.target [Service] Type=simple ExecStart=/home/leno/.nvm/versions/node/v20.10.0/bin/node server Restart=always User=leno Environment=NODE_ENV=production WorkingDirectory=/sharenfs/rnmkcy/myspeed [Install] WantedBy=multi-user.target ``` Enregistrer le fichier, CTRL + X, puis Y et enfin Entrée Rechargez systemd sudo systemctl daemon-reload Si vous voulez que MySpeed démarre au démarrage de systemd sudo systemctl enable myspeed --now Vérifiez maintenant le statut de MySpeed systemctl status myspeed ![](/images/MySpeed-service.png) Ouvrir le lien ![](/images/MySpeed-web01.png) ![](/images/MySpeed-web02.png) ![](/images/MySpeed-web03.png) ![](/images/MySpeed-web04.png)]]>Lenovo KVM - SearXNG Alpine Linux (alpine-searx)2024-10-22T00:00:00+02:002024-10-22T00:00:00+02:00https://static.rnmkcy.eu/2024/10/22/KVM-Alpine-Linux-Docker-SearXNGAlpine Linux est une distribution Linux ultra-légère…

Alpine Linux

Création machine virtuelle Alpine de type KVM avec 2 Go de RAM, 1 cœur de processeur et 5 Go de disque dur.

Créer alpine-searx sur un serveur

Les dernières images Alpine Linux

Création d’une image virtuelle alpine-searx sous le serveur Lenovo rnmkcy.eu
On se connecte sur le serveur Lenovo en SSH, puis on exécute la commande suivante pour créer une machine virtuelle Alpine avec 2 Go de RAM, 1 cœur de processeur et 5 Go de disque dur

sudo virt-install \
--osinfo alpinelinux3.17 \
--name alpine-searx \
--memory 2048 \
--vcpus 1 \
--cpu host \
--hvm \
--disk path=/srv/kvm/libvirt/images/alpine-searx.qcow2,format=qcow2,size=5 \
--cdrom /srv/kvm/libvirt/boot/alpine-standard-3.20.3-x86_64.iso \
--network bridge=br0 \
--graphics vnc  

Note: La dernière version Alpine Linux est alpinelinux3.20 au 10/07/2024 mais KVM ne connait que alpinelinux3.17 (sudo virt-install --osinfo list |grep alpine)

Après exécution dans un terminal de la commande ci dessus, on arrive sur l’écran suivant

Configurer alpine-searx

Le serveur Lenovo n’a pas d’affichage, il faut créer un tunnel ssh depuis un poste client

ssh -L 5900:127.0.0.1:5900 leno@192.168.0.215 -p 55215 -i /home/yann/.ssh/lenovo-ed25519

Puis lancer de ce même poste un client VNC

la console s’affiche

Une fois l’image ISO lancée, on arrive à un invite de connexion.
Indiquez root comme nom d’utilisateur, aucun mot de passe ne vous sera demandé à cette étape.

Le système est utilisable, mais on veut l’installer, ce qui passe par la commande suivante (clavier qwerty)

setup-alpine # saisir setup)qlpine

Une suite de questions :

mot de passe root (toorrtyuiop)

APK mirror (f) ,patienter …

user : alsearx
password: MoelleEndetteSingle

Relever l’adresse ip allouée : ip a –> 192.168.0.31
Puis redémarrer : reboot
La fenêtre vnc se ferme

Explications sur la procédure

Normalement, vous n’avez rien à faire, les paramètres par défaut doivent convenir. Mais si vous le désirez, vous pouvez les modifier pour utiliser une interface particulière, une IP fixe, un serveur proxy, etc.
Une soixantaine de serveurs mirroir vous seront proposés pour télécharger les paquets. Choisissez un numéro dans la liste ou demandez au système de les tester et de sélectionner le plus rapide. Vous pouvez aussi modifier le fichier des sources. Il vous faudra ensuite choisir votre serveur SSH : OpenSSH, Dropbear ou aucun.

On termine par la méthode d’installation. Il en existe quatre :

  • none : le système et ses données sont placés en RAM et seront perdus après le redémarrage
  • sys : le système et ses données sont placés sur un HDD/SSD
  • data : le système est placé en RAM, les données sur un HDD/SSD
  • lvm : utilisation de Logical Volume Manager, les deux choix précédents seront proposés (lvmsys, lvmdata)

Si vous stockez le système en mémoire, il faudra trouver un moyen de sauvegarder la configuration. Vous pourrez le faire uniquement depuis un lecteur de disquettes (!) ou une clé USB. Une fois le système installé, vous pourrez l’utiliser directement s’il est placé en mémoire ou redémarrer si vous avez opté pour un stockage classique.

Il n’est pas conseillé d’utiliser directement le compte root pour les actions du quotidien.
Si utilisateur non créé dans la procédure d’installation, le créer avec son propre espace dans /home/

adduser alsearx

Vous pouvez utiliser l’utilisateur pour vous connecter via SSH (impossible avec le compte root)

Connexion alpine-searx via SSH

Sur un poste linux du réseau

ssh alsearx@192.168.0.31

Une fois connecté ,vous pouvez accéder au “root” de manière classique avec la commande :

su -

Mise à jour

apk update
apk upgrade 
# Vous pouvez fusionner les deux lignes avec 
apk -U upgrade

Editeur nano (Vous pouvez aussi opter pour vi qui est nativement présent sur le système)

apk add nano

Réseau - IP statique

How to configure static IP address on Alpine Linux

Le fichier de configuration /etc/network/interfaces

/etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 192.168.0.216/24
        gateway 192.168.0.254

Fichier de résolution dns

/etc/resolv.conf
nameserver 1.1.1.1
nameserver 9.9.9.9

Les modifications apportées à /etc/network/interfaces peuvent être activées en exécutant

service networking restart 

OpenSSH avec clés

Connexion ssh sur un autre port avec un jeu de clés

Générer une paire de clé sur l’ordinateur de bureau PC1
Générer une paire de clé curve25519-sha256 (ECDH avec Curve25519 et SHA2) pour une liaison SSH avec le serveur.

ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/vm-alpine-searx

Copier la clé publique cat ~/.ssh/vm-alpine-searx.pub dans le presse-papier

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBQu0LRiDjPM7BJAfjECl22fnEchVuxnw38RV2IJs0+l yann@yann-pc1

On se connecte sur la machine virtuelle alpine linux “ttrss alpine-searx”

ssh alsearx@192.168.0.216

Créer le répertoire et ouvrir nouveau fichier

mkdir -p $HOME/.ssh/
nano $HOME/.ssh/authorized_keys

Coller le contenu du presse-papier , sauver le fichier et sortir

Modifier les droits

chmod 600 $HOME/.ssh/authorized_keys

Passer en mode su

su -

Modifier la configuration serveur SSH

nano /etc/ssh/sshd_config

Modifier

Port = 55216
PasswordAuthentication no

Relancer le serveur

service sshd restart

Test connexion

ssh -p 55216 -i ~/.ssh/vm-alpine-searx alsearx@192.168.0.216

sudo

Passer en root

su -

Editer la configuration des dépôts

nano /etc/apk/repositories

Trouvez maintenant la ligne qui se termine dans /community Ensuite, retirez le # au début de la ligne. Le fichier résultant devrait ressembler à ceci

#/media/cdrom/apks
http://alpinelinux.mirrors.ovh.net/v3.20/main
http://alpinelinux.mirrors.ovh.net/v3.20/community

Mise à jour des dépôts

apk update

Installer sudo

apk add sudo

Pas de mot de passe sudo pour l’utilisateur alouest

echo "alsearx     ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

Docker

Installer docker sur Alpine Linux

Install docker & docker-compose on Alpine Linux

Passer en root

su -

Editer la configuration des dépôts

nano /etc/apk/repositories

Trouvez maintenant la ligne qui se termine dans /community Ensuite, retirez le # au début de la ligne. Le fichier résultant devrait ressembler à ceci

#/media/cdrom/apks
http://alpinelinux.mirrors.ovh.net/v3.20/main
http://alpinelinux.mirrors.ovh.net/v3.20/community

Installer docker et docker-compose

apk update
apk add docker docker-compose

Activer autostart sur boot en utilisant

rc-update add docker default

puis vous pouvez lancer le service docker en utilisant la commande

/etc/init.d/docker start
# ou
service docker start

SearxNG

SearXNG est un métamoteur qui recherche ses informations à travers plusieurs moteurs de recherche généralistes

Image docker

Si vous prévoyez de construire et de maintenir une image Docker par vous-même, assurez-vous que Docker est installé. Sous Linux, n’oubliez pas d’ajouter votre utilisateur au groupe Docker (déconnectez-vous et reconnectez-vous pour que votre appartenance au groupe soit réévaluée) :

sudo adduser $USER docker

L’image docker est basée sur git://Dockerfile et disponible sur searxng/searxng @dockerhub. L’utilisation de l’image docker est assez simple, par exemple vous pouvez extraire l’image searxng/searxng @dockerhub et déployer une instance locale en utilisant docker run:

mkdir YannSearXNG
cd YannSearXNG
export PORT=8080
docker pull searxng/searxng

Pour avoir un démarrage automatique au boot : --restart=always --name restart_always

cd ~/YannSearXNG
export PORT=8080

docker run   -d -p ${PORT}:8080 \
             --restart=always \
             --name searxng \
             -v "${PWD}/searxng:/etc/searxng" \
             -e "BASE_URL=http://localhost:$PORT/" \
             -e "INSTANCE_NAME=YannSearXNG" \
             searxng/searxng

Sans démarrage auto…

cd ~/YannSearXNG
export PORT=8080

docker run --rm \
             -d -p ${PORT}:8080 \
             -v "${PWD}/searxng:/etc/searxng" \
             -e "BASE_URL=http://localhost:$PORT/" \
             -e "INSTANCE_NAME=YannSearXNG" \
             searxng/searxng

Les variables d’environnement UWSGI_WORKERS et UWSGI_THREADS remplacent le nombre par défaut de processus UWSGI et de threads UWSGI spécifiés dans le fichier /etc/searxng/uwsgi.ini.

Ouvrez votre navigateur WEB et visitez l’URL :

xdg-open http://192.168.0.216:8080 

Paramétrage searxng

Dans ${PWD}/searxng, vous trouverez settings.yml et uwsgi.ini. Vous pouvez modifier ces fichiers selon vos besoins

# résultat sur un nouvel onglet
sudo sed -i -e "s/\# results_on_new_tab: false/results_on_new_tab\: true/g" $HOME/YannSearXNG/searxng/settings.yml

Identifier le container : docker ps

CONTAINER ID   IMAGE             COMMAND                  CREATED              STATUS              PORTS                                       NAMES
97cf004cd5d0   searxng/searxng   "/sbin/tini -- /usr/…"   About a minute ago   Up About a minute   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   searxng

et redémarrer l’image Docker.

docker container restart 97cf004cd5d0

Mise à jour automatique

Les stratégies pour automatiser le processus de mise à jour des conteneurs Docker lorsque leurs images de base sont mises à jour. Nous examinerons des scripts Bash personnalisés et des outils tiers tels que Watchtower, qui offrent un éventail de solutions(Auto-Update Docker Containers for Latest Base Images)

Watchtower est un outil open-source qui automatise le processus de mise à jour des conteneurs Docker. Il interroge le registre Docker pour vérifier les mises à jour des images à partir desquelles les conteneurs ont été initialement instanciés.
Supposons que Watchtower détecte qu’une image a été mise à jour. Dans ce cas, elle arrête le conteneur exécutant l’image périmée, extrait la nouvelle image du registre Docker et démarre un nouveau conteneur avec les mêmes configurations que le précédent. Cela garantit que nos conteneurs exécutent toujours la dernière version de l’image de base sans intervention manuelle.

Exécution du conteneur Watchtower
Paramètres

  • fixer l’intervalle à 86400 secondes, ce qui demande à Watchtower de vérifier les mises à jour une fois par jour
    Le paramètre --schedule prend comme valeur une expression crontab. Sinon, le paramètre --interval peut-être utilisé pour définir le nombre de secondes entre chaque vérification.
    --schedule "0 0 4 * * *"
    --interval 86400
    Cela permet de trouver un équilibre entre l’immédiateté et la consommation des ressources du système.
  • Pour configurer les notifications par courriel, nous pouvons configurer les variables d’environnement et exécuter Watchtower:
      -e WATCHTOWER_NOTIFICATIONS=email \
      -e WATCHTOWER_NOTIFICATION_EMAIL_FROM=your-email@example.com \
      -e WATCHTOWER_NOTIFICATION_EMAIL_TO=target-email@example.com \
      -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.example.com \    
      -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587 \
      -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=your-email@example.com \
      -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=your-email-password \

nous devons d’abord lancer le conteneur Watchtower lui-même en exécutant une commande Docker :

docker run -d \
  --name watchtower \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e WATCHTOWER_NOTIFICATIONS=email \
  -e WATCHTOWER_NOTIFICATION_EMAIL_FROM=your-email@example.com \
  -e WATCHTOWER_NOTIFICATION_EMAIL_TO=target-email@example.com \
  -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.example.com \
  -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587 \
  -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=your-email@example.com \
  -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=your-email-password \
  containrrr/watchtower \
  --schedule "0 0 4 * * *"

Ainsi, nous exécutons Watchtower en mode détaché, ce qui lui donne accès au socket Docker, qui est nécessaire à Watchtower pour surveiller et mettre à jour les conteneurs.
Notre sortie montre l’identifiant unique du conteneur Watchtower qui s’exécute maintenant en arrière-plan.
694862e2a2a6fbf61da8e7336fca4b4bac5f45c459024d5338224007c8838c5c

Voir journal : docker logs watchtower

time="2024-10-22T13:19:49Z" level=info msg="Watchtower 1.7.1"
time="2024-10-22T13:19:49Z" level=info msg="Using notifications: smtp"
time="2024-10-22T13:19:49Z" level=info msg="Checking all containers (except explicitly disabled with label)"
time="2024-10-22T13:19:49Z" level=info msg="Scheduling first run: 2024-10-23 04:00:00 +0000 UTC"
time="2024-10-22T13:19:49Z" level=info msg="Note that the first check will be performed in 14 hours, 40 minutes, 10 seconds"

Commandes docker

Utilisez la commande container ls pour lister les conteneurs en cours d’exécution, ajoutez le drapeau -a pour lister les conteneurs éteints également. La commande container stop permet d’arrêter un conteneur en cours d’exécution. Pour se débarrasser d’un conteneur, utilisez la commande container rm:

localhost:~/YannSearXNG$ docker container ls

CONTAINER ID   IMAGE             COMMAND                  CREATED              STATUS              PORTS                                       NAMES
e8557899b8e9   searxng/searxng   "/sbin/tini -- /usr/…"   About a minute ago   Up About a minute   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   nice_chaplygin

Si vous n’utilisez plus Docker et que vous souhaitez vous débarrasser de tous les conteneurs et images, utilisez la commande prune suivante :

docker stop $(docker ps -aq)       # stop all containers
docker system prune                # make some housekeeping
docker rmi -f $(docker images -q)  # drop all images

Mise à jour automatique du container
Watchtower est un outil open-source permettant d’automatiser ces mises à jour. Il se présente sous la forme d’une image Docker à lancer très simplement

docker run \
    --name watchtower \
    --volume /var/run/docker.sock:/var/run/docker.sock \
    --detach \
    v2tec/watchtower \
    --interval "30"

Le paramètre --volume est obligatoire pour que Watchtower puisse communiquer avec le démon Docker sur le système hôte.

Proxy nginx searx.rnmkcy.eu

Sur le serveur Lenovo rnmkcy.eu, créer un proxy pour SearXNG /etc/nginx/conf.d/searx.rnmkcy.eu.conf

server {
    listen 80;
    listen [::]:80;
    server_name  searx.rnmkcy.eu;

    # redirect all plain HTTP requests to HTTPS
    return 301 https://searx.rnmkcy.eu$request_uri;
}

server {
    # ipv4 listening port/protocol
    listen       443 ssl http2;
    # ipv6 listening port/protocol
    listen           [::]:443 ssl http2;
    server_name  searx.rnmkcy.eu;

    include /etc/nginx/conf.d/security.conf.inc;

    location / {
	proxy_pass http://192.168.0.216:8080;
    }
}

Recharger nginx

sudo systemctl reload nginx

Ouvrir le lien https://searx.rnmkcy.eu

]]>
Cartographie2024-10-14T00:00:00+02:002024-10-14T00:00:00+02:00https://static.rnmkcy.eu/2024/10/14/OSM_PythonCartographie python

virtualenv est un outil utilisé pour créer un espace de travail isolé pour une application Python. Il présente divers avantages tels que la possibilité d’installer des modules localement, d’exporter un environnement de travail et d’exécuter un programme Python dans cet environnement

OsmScripts

Python 3.3+ est livré avec un module appelé venv.

$HOME/media identique /srv/media

Environnement python

Créer un dossier osm_python

mkdir $HOME/media/osm-new/osm_python
cd $HOME/media/osm-new/osm_python

Pour créer un environnement, utilisez la commande python -m venv <environment name> Créer un environnement pour l’application

python3 -m venv OsmScripts

activer l’environnement virtuel

source OsmScripts/bin/activate

On arrive sur un prompt : (OsmScripts) [yann@pc1 osm_python]$

Mettre à jour pip dans l’environnement

python -m pip install --upgrade pip

Installer des paquets à l’aide de pip
Install packages in a virtual environment using pip and venv

Lorsque votre environnement virtuel est activé, vous pouvez installer des paquets. Utilisez la commande pip install pour installer des paquets.Par exemple, installons la bibliothèque Requests à partir de l’index des paquets Python (PyPI) : python3 -m pip install requests

Rechercher et installer les paquets gpxpy et geopy sur https://pypi.org/ qui sont utilisés dans le projet

pip install gpxpy
pip install geopy

Wing Personal projet OsmScripts
Dans le dossier $HOME/media/osm-new

Projet –> Nouveau projet
{width=”400”}
{width=”400”}
{width=”500”}
{width=”400”}

Projet : $HOME/media/osm-new/osm_python/OsmScripts.wpr
Structure

[yann@pc1 ~]$ tree -L 2 -d /srv/media/osm-new/
/srv/media/osm-new/
├── archives
├── css
│   └── images
├── file
│   ├── photos
│   └── tmp
├── fonts
├── images
├── js
└── osm_python
    └── OsmScripts

Le script python
Le script python $HOME/media/osm-new/osm_python/OsmScripts/tracesgpxnew.py

Etendre Réduire
  
#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
tracesgpxnew.py 
Créé le 10 juin 2021
Modifié le 14 octobre 2024
"""

import pdb

import sys as mod_sys
import logging as mod_logging
import math as mod_math

import gpxpy as mod_gpxpy
import os, fnmatch
import sys
import shutil
import json
from xml.dom import minidom
import datetime 
import calendar 
import geopy.geocoders
from geopy.geocoders import Nominatim

def format_time(time_s):
    if not time_s:
        return 'n/a'
    else:
        minutes = mod_math.floor(time_s / 60.)
        hours = mod_math.floor(minutes / 60.)
        return '%s:%s:%s' % (str(int(hours)).zfill(2), str(int(minutes % 60)).zfill(2), str(int(time_s % 60)).zfill(2))

def format_date(date_s):
    if not date_s:
        return 'n/a'
    else:
        #start_time.strftime("%d %b %Y")
        return '%s' % (date_s.strftime("%d %b %Y"))

def format_heure(heure_s):
    if not heure_s:
        return 'n/a'
    else:
        #start_time.strftime("%H:%M:%S") 
        return '%s' % (heure_s.strftime("%H:%M:%S"))

def format_long_length(length):
    return '{:.3f}km'.format(length / 1000.)

def format_long_length_num(length):
    return '{:.3f}'.format(length / 1000.)

def format_short_length(length):
    return '{:.2f}m'.format(length)

def format_short_length_num(length):
    return '{:.2f}'.format(length)

def format_speed(speed):
    if not speed:
        speed = 0
    else:
        #return '{:.2f}m/s = {:.2f}km/h'.format(speed, speed * 3600. / 1000.)
        return '{:.2f}km/h'.format(speed * 3600. / 1000.)

def format_speed_num(speed):
    if not speed:
        speed = 0
    else:
        #return '{:.2f}m/s = {:.2f}km/h'.format(speed, speed * 3600. / 1000.)
        return '{:.2f}'.format(speed * 3600. / 1000.)

def quelJour(date): 
    jour = datetime.datetime.strptime(date, '%d %m %Y').weekday() 
    return (calendar.day_name[jour]) 

def nblignes(nf):
    #  
    return len(open(nf).readlines(  ))

def print_gpx_part_info(gpx_part,jsTraces,dataTraces,fichier,dataIndex):

    data = gpx_part.tracks[0].segments[0].points
    data = gpx_part.tracks[0].segments[0].points
    lati=data[0].latitude
    longi=data[0].longitude
    # Nominatim
    geopy.geocoders.options.default_user_agent = 'gxinforep'
    geopy.geocoders.options.default_timeout = None
    geolocator = Nominatim()
    location = geolocator.reverse(str(lati) + "," + str(longi))
    y=location.address.split(",")
    z=0
    for x in y:
        z=z+1
    nom=y[z-8] + ' ' + y[z-7] + ' ' + y[z-2]  
    lieu=y[z-8].strip()
    commune=y[z-7].strip()
    cposte=y[z-2].strip()

    length_2d = gpx_part.length_2d()
    moving_time, stopped_time, moving_distance, stopped_distance, max_speed = gpx_part.get_moving_data()
    uphill, downhill = gpx_part.get_uphill_downhill()
    start_time, end_time = gpx_part.get_time_bounds()
    vmoy=(format_speed(moving_distance / moving_time) if moving_time > 0 else "?")
    vmoy_num=(format_speed_num(moving_distance / moving_time) if moving_time > 0 else "?")
    # les randonnées du dimanche sont par défaut privées
    # si dimanche (Sunday) --> private sinon public
    privpub = "public"
    if quelJour(start_time.strftime("%d %m %Y")) == "Sunday":
        privpub = "private"
   
    # latitude longitude lieu commune cp distance vitesse niveau jour gpx indexation
    #  { genre: 'Rap', band: 'Migos', albums: 2},
    jsTraces.write('{\n "id": ' + str(dataIndex) + ',"latitude": ' + str(lati) + ', "longitude": ' + str(longi) + ', "lieu": "' + lieu \
        + '", "commune": "' + commune + '", "cp": "' + cposte + '", "distance": "' + format_long_length_num(length_2d) \
        + '", "vitesse": "' + vmoy_num + '", "niveau": "' + format_short_length_num(uphill) \
        + '", "jour": "' + start_time.strftime("%Y-%m-%d") + '", "gpx": "' + fichier + '"\n}')

    #
    if dataIndex == initial_count - 1:
        jsTraces.write('\n')
    else:
        jsTraces.write(',\n')
    
    dataChaine='[' + str(lati) + ',' + str(longi) + ',"' + lieu + '","' + commune + '","' + cposte + '","' + format_long_length_num(length_2d) + '","' + vmoy_num \
        + '","' + format_short_length_num(uphill) + '","' + start_time.strftime("%Y-%m-%d") + '","' + fichier + '",' + str(dataIndex) + '],\n'
    dataTraces.write(dataChaine)
    
  

if __name__ == '__main__':
    # Le dossier qui contient les traces gpx
    dossier=os.getcwd()+'/'
    # on teste si arguments
    if len( sys.argv ) > 1:
        for strParam in sys.argv[1:]:
            dossier=strParam+'/'
    # parsing folder
    print("Dossier gpx: " + dossier)
    # ---------------
    # le nom du fichier sans extension : ztest ou traces
    NomSansExt = "tracestableau" 
    jsonFile= dossier + NomSansExt + ".json"
    jsonFileExist = False
    # Fichier utilisé dans osm-new
    dataFile= dossier + "tracesdataset.js"
    dataFileExist = False
    

    if os.path.exists(jsonFile):
        #os.remove(jsonFile)
        jsonFileExist = True
    if os.path.exists(dataFile):
        #os.remove(dataFile)
        dataFileExist = True    
    
    # Les fichiers gpx à traiter sont dans /tmp
    listOfFiles = sorted(os.listdir(dossier + 'tmp/'))
    pattern = "*.gpx" 
    if len(listOfFiles) == 0:
        print("pas de fichier à traiter")
        quit()

    # Nb fichiers
    initial_count = 0
    dir = dossier + 'tmp/'
    for path in os.listdir(dir):
        if os.path.isfile(os.path.join(dir, path)):
            initial_count += 1
    print("Nombre de fichiers: " + str(initial_count))
    
    # Traitement du fichier jsonFile suivant existance ou pas 
    if not jsonFileExist:
        jsTraces = open(jsonFile, "a+") 
        jsTraces.write("[\n")
    else:
        #supprimer la dernière ligne du fichier jsonFile
        os.system('sed -i "$ d" {0}'.format(jsonFile))
        jsTraces = open(jsonFile, "a+") 
        
    # Traitement du fichier dataFile suivant existance ou pas 
    if not dataFileExist:
        dataIndex = 0
        dataTraces = open(dataFile, "a+") 
        dataTraces.write("var addressPoints = [\n")
    else:
        # fichier existe , nombre de lignes
        dataIndex = nblignes(dataFile) - 2
        #supprimer la dernière ligne du fichier dataFile
        os.system('sed -i "$ d" {0}'.format(dataFile))
        dataTraces = open(dataFile, "a+") 
      

        
    for fichier in listOfFiles:  
        if fnmatch.fnmatch(fichier, pattern):
            try:
                print('gpx : %s' % fichier)
                gpx = mod_gpxpy.parse(open(dossier +'tmp/' + fichier))
                print_gpx_part_info(gpx,jsTraces,dataTraces,fichier,dataIndex)
                # Déplacer le fichier gpx après traitement:
                shutil.move(dossier +'tmp/' + fichier, dossier + fichier)
                # Incrémenter l'index:
                dataIndex = dataIndex + 1
               
            except Exception as e:
                mod_logging.exception(e)
                print('Error processing %s' % dossier +'/' + fichier)
                mod_sys.exit(1)  
    print('Ecriture fichier ' + jsonFile)
    jsTraces.write(']')
    jsTraces.close()
    
    print('Ecriture fichier ' + dataFile)
    dataTraces.write('];')
    dataTraces.close()

Utilisation ‘tracesgpxnew.py’

Le lancement du script tient compte de l’environnement python, du chemin complet du script et du paramètre dossier qui contiendra le(s) fichiers gpx

/srv/media/osm-new/osm_python/OsmScripts/bin/python /srv/media/osm-new/osm_python/OsmScripts/tracesgpxnew.py /srv/media/osm-new/file

Synchronisation distante

Après intégration des nouveaux fichiers gpx par le script python, faire une mise à jour des dossiers distants par rsync

#!/bin/bash

echo "-----------------------------------------------
Synchro osm-new avec xoyize.xyz" 
rsync -avz --delete --exclude 'archives' --exclude 'osm_python' --rsync-path="sudo rsync" -e "ssh -p 55249 -i /home/yann/.ssh/xoyize-ed25519 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" /srv/media/osm-new yako@xoyize.xyz:/home/yunohost.multimedia/share/Divers/

echo "-----------------------------------------------
Synchro osm-new avec nfs sharenfs/multimedia/Divers/osm-new" 
rsync -avz --delete --exclude 'archives' --exclude 'osm_python' /srv/media/osm-new /home/yann/sharenfs/multimedia/Divers/

exit

Exécuter sh /srv/media/osm-new/osm-new-synchro.sh

Alias local ‘tracesgpx’

Alias ‘tracesgpx’ dans .bashrc

alias tracesgpx="/srv/media/osm-new/osm_python/OsmScripts/bin/python /srv/media/osm-new/osm_python/OsmScripts/tracesgpxnew.py /srv/media/osm-new/file"

Ajout synchronisation à l’alias ‘tracesgpx’ dans .bashrc

alias tracesgpx="/srv/media/osm-new/osm_python/OsmScripts/bin/python /srv/media/osm-new/osm_python/OsmScripts/tracesgpxnew.py /srv/media/osm-new/file; sh /srv/media/osm-new/osm-new-synchro.sh"
]]>
PC1 - Endeavour Neo XFCE sur partition LVM chiffrée2024-10-07T00:00:00+02:002024-10-07T00:00:00+02:00https://static.rnmkcy.eu/2024/10/07/PC1-EndeavourOS-XFCE-nvme_2To-LVM-ChiffreEndeavourOS est une distribution GNU/Linux basée sur Arch Linux

  • LVM/LUKS, flexibilité de partitionnement en utilisant LVM dans une seule partition cryptée LUKS.
    • Avantages:
      • partitionnement simple avec connaissance de LVM
      • Une seule clé nécessaire pour déverrouiller tous les volumes (p. ex. installation facile de récupération de disque)
      • Mise en page du volume non visible lorsque verrouillé
      • Méthode la plus facile pour permettre la suspension du disque
    • Inconvénients:
      • LVM ajoute une couche de mappage supplémentaire et un “hook”
      • Moins utile, si un volume doit recevoir une clé séparée

Installer une distribution EndeavourOS chiffrée sur une partition LVM est impossible avec l'outil "Calamarès"

EndeavourOS temporaire

Pour une installation EndavourOS LVM/LUKS, il faut passer par une installation temporaire

Création Eos USB Live

Création d’une clé USB EndeavourOS bootable

Dans un terminal linux
Télécharger le dernier fichier iSO : https://endeavouros.com/latest-release/
EndeavourOS_Endeavour_neo-2024.09.22.iso

Vérifier checksum

sha512sum -c EndeavourOS_Endeavour_neo-2024.09.22.iso.sha512sum

Résultat de la commande ci dessus après quelques minutes
EndeavourOS_Endeavour_neo-2024.09.22.iso: Réussi

Créer la clé bootable
Pour savoir sur quel périphérique, connecter la clé sur un port USB d’un ordinateur et lancer la commande sudo dmesg ou lsblk
Dans le cas présent , le périphérique USB est /dev/sdc

sudo dd if=EndeavourOS_Endeavour_neo-2024.09.22.iso of=/dev/sdc bs=4M --progress

Démarrer sur Eos USB Live

Insérer la clé USB EndeavourOS, redémarrer la machine, sur Eos live
Démarrage avec la clé USB insérée dans le Mini tour PC1 et appui sur F8 pour un accès au menu
Choisir UEFI: KingstonDataTraveler 2.0PMAP (3820MB)

Vous arrivez sur la page de sélection

Valider le choix par défaut

  1. basculer en FR
  2. ouvrir un terminal

Clavier QWERTY!!!


1 –> System Settings –> Keyboard
Remove Us…
Apply

On va se connecter en SSH

ip a # relever adresse IP
sudo systemctl start sshd
passwd liveuser  # changer le mot de passe liveuser --> rtyuiop
sudo firewall-cmd --zone=public --add-port=22/tcp

Se connecter depuis un poste sur le même réseau: ssh liveuser@adresse_IP

Partionnement

en mode su

sudo -s

Le disque : lsblk

nvme0n1               259:0    0 1,9T  0 disk 

On partitionne un disque en 3 avec gdisk

  • Partition 1 : 512M EFI (code ef00) système de fichier FAT32
  • Partition 2 : 1895G LVM (code 8e00) système de fichier EXT4
  • Partition restante pour Installation temporaire

Zapper le disque,

(Attention Ceci effacera de manière irréversible toutes les données de votre disque, veuillez sauvegarder toutes les données importantes) :

sgdisk --zap-all /dev/nvme0n1

Partitionnement du disque NVME 2To GPT + LVM
Créer une table de partition GPT à l’aide de la commande sgdisk :

sgdisk --clear --new=1:0:+512MiB --typecode=1:ef00 --new=2:0:+1885G --typecode=2:8e00 /dev/nvme0n1

Format la partition EFI

mkfs.fat -F32 /dev/nvme0n1p1

Installer Eos XFCE

Utilisation de Calamarès, cliquer sur Démarrer l’installateur
Installation “en ligne”
Bureau: XFCE4
Paquets : Tout sauf LTS Kernel Chargeur: systemd-boot
Partitions:

Utilisateur: yann
Ordi: PC1
mot passe utilisateur identique admin
Résumé:

Cliquer sur Installer


L’installation est terminée, cliquer “Redémarrer maintenant” et sur Terminé

Créer nouveau système

Clé USB Eos Live insérée, redémarrer dans l'environnement Live-Cd

Clavier QWERTY!!!
Ouvrir un terminal
Créer un accès sur la machine via SSH depuis un poste distant
Lancer le service : sudo systemctl start sshd
Ouvrir le port 22 firewall: sudo firewall-cmd --zone=public --add-port=22/tcp
Créer un mot de passe à liveuser : passwd liveuser –> rtyuiop Relever l’adresse ip de la machine : ip a

Déchiffrer système temporaire

Le système temporaire chiffré /dev/nvme0n1p3

Dans l’environnement live-CD, ouvrez un Terminal ,basculez en mode su et tapez (ou marquez et copiez la ligne avec ctrl-c et collez dans le terminal avec shift-ctrl-v ) …

cryptsetup luksOpen /dev/nvme0n1p3 crypttemp # saisir la phrase mot de passe de l'installation
mkdir -p /media/crypttemp
mount /dev/mapper/crypttemp /media/crypttemp 

Nos données d’installation temporaires sont désormais accessibles sous /media/crypttemp

bin  boot  dev	efi  etc  home	lib  lib64  lost+found	mnt  opt  proc	root  run  sbin  srv  sys  tmp	usr  var

Créer nouveau système

Chiffrer la partition /dev/nvme0n1p2,saisir la passphrase définitive

cryptsetup luksFormat --type luks2 /dev/nvme0n1p2

Une demande de confirmation est exigée

WARNING!
========
This will overwrite data on /dev/nvme0n1p2 irrevocably.

Are you sure? (Type 'yes' in capital letters): YES
Enter passphrase for /dev/nvme0n1p2: 
Verify passphrase: 

Choisissez un mot de passe sécurisé ( https://xkcd.com/936/ )

Ouvrir le nouveau système chiffré

cryptsetup luksOpen /dev/nvme0n1p2 crypt
#    Enter passphrase for /dev/nvme0n1p2:
pvcreate /dev/mapper/crypt
#    Physical volume "/dev/mapper/crypt" successfully created.
vgcreate vg0 /dev/mapper/crypt
#    Volume group "vg0" successfully created

Une bonne taille de départ pour le volume racine (lvroot) est d’environ 30 Go. Si vous envisagez d’utiliser ultérieurement un fichier d’échange résidant sur root, vous devez en tenir compte.
Le redimensionnement ultérieur des volumes est assez facile, alors n’y réfléchissez pas trop.
Vous pouvez attribuer tout l’espace libre restant au volume d’accueil,
lvcreate --extents 100%FREE vg0 -n lvhome
mais pour augmenter les volumes plus tard et pour les instantanés , il faut de l’espace vide à l’intérieur du groupe de volumes, donc je choisis généralement une taille pour lvhome qui laisse environ 30 Go d’espace inutilisé global dans le volume groupe (en supposant un lecteur de 500 Go, par exemple 500 – 0,512 – 40 – 430 = 29,488)

# 40G root dont 8 swapfile
lvcreate -L 40G vg0 -n lvroot   #  Logical volume "lvroot" created.
lvcreate -L 150G vg0 -n lvhome  #  Logical volume "lvhome" created.
lvcreate -L 300G vg0 -n lvmedia  #  Logical volume "lvmedia" created.
#lvcreate -l 100%FREE vg0 -n lvhome  #  Logical volume "lvhome" created.

Créez un système de fichiers ext4 sur les volumes logiques.

mkfs.ext4 -L root /dev/mapper/vg0-lvroot
mkfs.ext4 -L home /dev/mapper/vg0-lvhome
mkfs.ext4 -L home /dev/mapper/vg0-lvmedia

Montage sur “mnt”

Monter le nouveau système sur /mnt pour les systèmes UEFI

mount /dev/mapper/vg0-lvroot /mnt
mkdir -p /mnt/home
mount /dev/mapper/vg0-lvhome /mnt/home
mkdir -p /mnt/efi
mount /dev/nvme0n1p1 /mnt/efi
lsblk

devrait maintenant fournir une sortie similaire à la suivante (ignorez les tailles, celles-ci proviennent d’une installation de test) …

pour les systèmes UEFI :

nvme0n1              259:0    0   1.9T  0 disk  
├─nvme0n1p1          259:1    0   512M  0 part  /mnt/efi
├─nvme0n1p2          259:2    0   1.8T  0 part  
│ └─crypt            254:3    0   1.8T  0 crypt 
│   ├─vg0-lvroot     254:4    0    40G  0 lvm   /mnt
│   ├─vg0-lvhome     254:5    0   150G  0 lvm   /mnt/home
│   └─vg0-lvmedia    254:6    0   300G  0 lvm   
└─nvme0n1p3          259:3    0  22.2G  0 part  
  └─crypttemp        254:2    0  22.2G  0 crypt /media/crypttemp

Cloner système temporaire

pour remplir les nouveaux points de montage

rsync -avA /media/crypttemp/ /mnt

Veuillez patienter quelques minutes

Démonter système temporaire

umount /media/crypttemp
cryptsetup luksClose crypttemp

lsblk

nvme0n1              259:0    0   1.9T  0 disk  
├─nvme0n1p1          259:1    0   512M  0 part  /mnt/efi
├─nvme0n1p2          259:2    0   1.8T  0 part  
│ └─crypt            254:3    0   1.8T  0 crypt 
│   ├─vg0-lvroot     254:4    0    40G  0 lvm   /mnt
│   ├─vg0-lvhome     254:5    0   150G  0 lvm   /mnt/home
│   └─vg0-lvmedia    254:6    0   300G  0 lvm   
└─nvme0n1p3          259:3    0  22.2G  0 part  

Configurer “crypttab”

Configuration /etc/crypttab

cryptsetup luksUUID /dev/nvme0n1p2

renvoie 5fa90f9d-ac40-4c70-8f58-730a423ce76b
Votre UUID sera différent, alors **assurez-vous d'utiliser votre UUID à l'étape suivante !**

nano /mnt/etc/crypttab

contient une ligne non commentée commençant par luks-
Remplacez cette ligne par la suivante ; **n'oubliez pas d' utiliser votre UUID**

cryptlvm UUID=5fa90f9d-ac40-4c70-8f58-730a423ce76b     none luks

Sauvegarder et quitter.

Basculer en chroot

Passer en chroot

arch-chroot /mnt

le prompt [root@EndeavourOS /]#

Configurer “fstab”

Configurer /etc/fstab

blkid -s UUID -o value /dev/mapper/vg0-lvroot

renvoie l’UUID du volume racine : 04b9e250-1fcd-485b-989f-e753c89bf60f.

blkid -s UUID -o value /dev/mapper/vg0-lvhome

renvoie l’UUID du volume d’accueil : c35a3f8b-583b-4952-9ceb-f9a19194fa6c.

nano /etc/fstab

contient une ligne commençant par /dev/mapper/luks-
Supprimez cette ligne et ajoutez ce qui suit (**n'oubliez pas d' utiliser vos UUID**)

UUID=04b9e250-1fcd-485b-989f-e753c89bf60f / ext4 noatime 0 0
UUID=c35a3f8b-583b-4952-9ceb-f9a19194fa6c /home ext4 noatime 0 0

Sauvegarder et quitter.

Options du noyau

Dans systemd-boot, vous éditez le fichier d’entrée approprié qui se trouve sur votre partition EFI dans le répertoire loader/entries
Chaque entrée est une option de démarrage dans le menu et chacune a une ligne appelée options. Vous pouvez modifier ces entrées directement, mais ces changements peuvent être écrasés lors de l’installation ou de la mise à jour de paquets.

UUID de /dev/nvme0n1p2 : blkid -s UUID -o value /dev/nvme0n1p2

Pour effectuer les changements, au lieu de modifier les entrées, modifiez le fichier /etc/kernel/cmdline qui est un fichier d’une ligne contenant une liste d’options du noyau.

nano /etc/kernel/cmdline
nvme_load=YES nowatchdog rw rd.luks.uuid=5fa90f9d-ac40-4c70-8f58-730a423ce76b root=/dev/mapper/vg0-lvroot

Exécutez ensuite sudo reinstall-kernels qui remplira les entrées et régénérera les initrds.

reinstall-kernels

Sortie chroot

exit
umount -R /mnt

Oter la clé USB , redémarrer

reboot

FINI! Vous devriez maintenant avoir un système LVMonLUKS fonctionnel avec un volume logique séparé pour /home

EndeavourOS chiffré LVM/LUKS

Premier démarrage

La partition est chiffrée

Au message “Please enter passphrase for disk endeavouros…”, saisir la phrase mot de passe pour déchiffrer le disque

Activation SSH

Activer et lancer le service

sudo systemctl enable sshd --now

Autoriser ssh

sudo firewall-cmd --zone=public --add-port=22/tcp

Relever adresse : ip a –> 192.168.0.37

Se connecter depuis un poste sur le même réseau: ssh yann@192.168.0.37

Accès sudo

Modifier sudoers pour accès sudo sans mot de passe à l’utilisateur yano

su               # mot de passe root identique utilisateur
echo "yann     ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/20-yann
exit # sortie su

Historique de la ligne de commande

Ajoutez la recherche d’historique de la ligne de commande au terminal
Se connecter en utilisateur
Tapez un début de commande précédent, puis utilisez shift + up (flèche haut) pour rechercher l’historique filtré avec le début de la commande.

# Global, tout utilisateur
echo '"\e[1;2A": history-search-backward' | sudo tee -a /etc/inputrc
echo '"\e[1;2B": history-search-forward' | sudo tee -a /etc/inputrc

Unités disques

Liste : lsblk

NAME                                          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
sda                    8:0    0 111,8G  0 disk  
└─sda1                 8:1    0 111,8G  0 part  
  └─ssd--120-lv120   254:1    0 111,8G  0 lvm   
sdb                    8:16   0 476,9G  0 disk  
└─sdb1                 8:17   0 476,9G  0 part  
  └─ssd--512-virtuel 254:0    0 476,9G  0 lvm   
nvme0n1              259:0    0   1,9T  0 disk  
├─nvme0n1p1          259:1    0   512M  0 part  /efi
├─nvme0n1p2          259:2    0   1,8T  0 part  
│ └─cryptlvm         254:2    0   1,8T  0 crypt 
│   ├─vg0-lvroot     254:3    0    40G  0 lvm   /
│   ├─vg0-lvhome     254:4    0   150G  0 lvm   /home
│   └─vg0-lvmedia    254:5    0   300G  0 lvm   
└─nvme0n1p3          259:3    0  22,2G  0 part  

Créer les points de montage

sudo mkdir -p /srv/media
sudo chown $USER:$USER /srv/media
sudo mkdir -p /mnt/{ssd,sharenfs,FreeUSB2To}
sudo chown $USER:$USER /mnt/{ssd,sharenfs,FreeUSB2To}
sudo mkdir -p /virtuel
sudo chown $USER:$USER /virtuel

Relever les UUID des unités : sudo blkid

/dev/mapper/ssd--120-lv120: UUID="6b48e98c-9b85-461b-9371-040765aae682" BLOCK_SIZE="4096" TYPE="ext4"
/dev/nvme0n1p3: UUID="1a64bf47-fa14-4c9f-b8c4-7c3484f60e94" TYPE="crypto_LUKS" PARTLABEL="endeavouros" PARTUUID="22e5c948-0f32-44d2-9040-cde9534e34e7"
/dev/nvme0n1p1: UUID="E522-8D8D" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="114324a5-4aa7-4ee5-a57e-8568ac5f2f74"
/dev/nvme0n1p2: UUID="5fa90f9d-ac40-4c70-8f58-730a423ce76b" TYPE="crypto_LUKS" PARTUUID="c9640813-16da-4fde-87f6-98a5620e7b72"
/dev/sdb1: UUID="AYko64-7Ysg-IK1P-2hCq-9MUo-VjQl-4NOuWY" TYPE="LVM2_member" PARTUUID="19dd6163-01"
/dev/mapper/vg0-lvhome: LABEL="home" UUID="c35a3f8b-583b-4952-9ceb-f9a19194fa6c" BLOCK_SIZE="4096" TYPE="ext4"
/dev/mapper/cryptlvm: UUID="LwRekN-16qI-L1Nf-WfEY-OLgo-rd3A-XTE3Fg" TYPE="LVM2_member"
/dev/mapper/ssd--512-virtuel: UUID="84bc1aa9-23ac-4530-b861-bc33171b7b42" BLOCK_SIZE="4096" TYPE="ext4"
/dev/sda1: UUID="o2NaLz-2Biv-Dx3C-LYJD-vuyp-1Ogl-Oa4Iu2" TYPE="LVM2_member" PARTLABEL="Linux LVM" PARTUUID="3eee16e4-fe68-42bf-861a-cd9e46d22805"
/dev/mapper/vg0-lvmedia: LABEL="home" UUID="0e48444f-104c-4ba0-8b55-5d38ea0583ee" BLOCK_SIZE="4096" TYPE="ext4"
/dev/mapper/vg0-lvroot: LABEL="root" UUID="04b9e250-1fcd-485b-989f-e753c89bf60f" BLOCK_SIZE="4096" TYPE="ext4"

Ajout au fichier /etc/fstab

# /dev/mapper/vg0-lvmedia
UUID=0e48444f-104c-4ba0-8b55-5d38ea0583ee 	/srv/media      ext4            rw,relatime     0 2

# /dev/mapper/ssd--512-virtuel
UUID=84bc1aa9-23ac-4530-b861-bc33171b7b42 	/virtuel    ext4    	defaults	0 2

# /dev/mapper/ssd--120-lv120
UUID=6b48e98c-9b85-461b-9371-040765aae682 	/mnt/ssd    ext4    	defaults	0 2

Recharger et monter les unités

sudo systemctl daemon-reload
sudo mount -a

Restauration des données /srv/data

sudo -s
rsync -avA /mnt/ssd/lvmedia/ /srv/media

Les dossiers musicyan et dplus sont ailleurs

mkdir /srv/media/{musicyan,dplus}
sudo -s
rsync -avA /virtuel/musicyan/* /srv/media/musicyan/
rsync -avA /virtuel/dplus/* /srv/media/dplus/

Suppression des dossiers de sauvegardes

sudo rm -r /mnt/ssd/lvmedia
sudo rm -r /virtuel/{musicyan,dplus}

Mise à jour Système

Mode terminal

yay -Syu

Mode graphique

Réseau

Interface pont (bridge)

Créer une interface de pont

nmcli connection add type bridge con-name bridge0 ifname bridge0

Connexion « bridge0 » (c692299c-5076-4b84-adfb-913e154ebf46) ajoutée avec succès.

Affichez les interfaces réseau et notez les noms des interfaces que vous souhaitez ajouter au pont

nmcli device status
DEVICE       TYPE       STATE                                         CONNECTION    
enp0s31f6    ethernet   connecté                                      eth_enp0s31f6 
bridge0      bridge     connexion (obtention de la configuration IP)  bridge0       
lo           loopback   connecté (en externe)                         lo            
wg0-mullvad  wireguard  connecté (en externe)                         wg0-mullvad   
enp3s0f0     ethernet   déconnecté                                    --            
enp3s0f1     ethernet   indisponible                                  --            

Attribuer les interfaces au pont.
Si les interfaces que vous souhaitez affecter au pont ne sont pas configurées, créez de nouveaux profils de connexion pour elles

nmcli connection add type ethernet slave-type bridge con-name bridge0-port1 ifname enp3s0f0 master bridge0

Connexion « bridge0-port1 » (34425bb4-3d61-4e6c-81c1-6f76ffe78539) ajoutée avec succès.

Paramétrage pont

  • Utiliser le DHCP, aucune action n'est nécessaire
  • Définir une adresse IPv4 statique, un masque de réseau, une passerelle par défaut pour la connexion bridge0 :
    nmcli connection modify bridge0 ipv4.addresses '192.168.10.2/24' ipv4.gateway '192.168.10.1' ipv4.method manual
  • Désactiver ipv6 : nmcli connection modify bridge0 ipv6.method disabled

Activer la connexion pont

nmcli connection up bridge0

Connexion activée (controller waiting for ports) (Chemin D-Bus actif : /org/freedesktop/NetworkManager/ActiveConnection/6)

Vérifiez que les ports sont connectés et que la colonne CONNECTION affiche le nom de connexion du port

nmcli device
DEVICE     TYPE      STATE                  CONNECTION    
enp0s31f6  ethernet  connecté               eth_enp0s31f6 
bridge0    bridge    connecté               bridge0       
enp3s0f0   ethernet  connecté               bridge0-port1 
lo         loopback  connecté (en externe)  lo            
enp3s0f1   ethernet  indisponible           --            

Priorité réseau

L’ordinateur de bureau PC1 a 3 cartes réseau

Souvent, les périphériques intégrés disposent de plusieurs interfaces réseau disponibles simultanément, comme les routeurs réseau dotés d’interfaces filaires et sans fil. Ces périphériques doivent pouvoir sélectionner automatiquement une interface réseau préférée. Pour y parvenir sur une machine Linux, chaque interface possède une valeur métrique qui indique le coût d’utilisation de l’interface. (Changing the Network Routing Metric Permanently)

La connexion au réseau 192.168.0.0/24 via NetworkManager ne se fait pas correctement car il peut se connecter au réseau 192.168.10.0/24

Il faut donner la priorité au réseau 192.168.0.0/24

Commande nmcli device

enp0s31f6    ethernet   connecté               eth_enp0s31f6 
bridge0      bridge     connecté               bridge0       
enp3s0f0     ethernet   connecté               bridge0-port1 
...

Obtenir la valeur métrique
Obtenons la valeur métrique initiale de nos interfaces réseau.
Pour cela, nous utilisons la commande suivante

ip route
default via 192.168.0.254 dev enp0s31f6 proto static metric 100 
default via 192.168.10.1 dev bridge0 proto static metric 425 
...

Il s’agit de la table de routage pour les interfaces enp0s31f6 et bridge0
A la fin de chaque ligne, nous pouvons voir une valeur métrique

Modifier la valeur métrique
Commande nmcli pour modifier la valeur métrique de l’ interface

sudo nmcli connection modify 'eth_enp0s31f6' ipv4.route-metric 10

Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)

La connexion avec une nouvelle valeur métrique est désormais active.
Si nous vérifions la table de routage, nous devrions pouvoir voir la nouvelle valeur métrique

ip route
default via 192.168.0.254 dev enp0s31f6 proto static metric 10 
default via 192.168.10.1 dev bridge0 proto static metric 425 
...

L’ interface enp0s31f6 a désormais une valeur métrique de 10

Partage disque

Partage disque externe USB sur Freebox

Disque freebox partagé FreeUSB2To

FreeBox
HDD Mobile 2To connecté en USB sur la freebox
Nom de partage : FreeUSB2To + EXT4 + vérification après formatage
Partage windows activé : yannfreebox + mot de passe

PC1
Partage linux samba : sudo pacman -S cifs-utils Installé par défaut
Point de montage : sudo mkdir -p /mnt/FreeUSB2To
Lien : sudo ln -s /mnt/FreeUSB2To $HOME/FreeUSB2To

Credential : /root/.smbcredentials avec 2 lignes
username=XXXXXX
password=XXXXXX

Droits

sudo chown -R root:root /root/.smbcredentials
sudo chmod -R 600 /root/.smbcredentials

Les fichiers systèmes

# /etc/systemd/system/mnt-FreeUSB2To.mount 
[Unit]
  Description=cifs mount script
  Requires=network-online.target
  After=network-online.service

[Mount]
  What=//192.168.0.254/FreeUSB2To
  Where=/mnt/FreeUSB2To
  Options=credentials=/root/.smbcredentials,rw,uid=1000,gid=1000,vers=3.0
  Type=cifs

[Install]
  WantedBy=multi-user.target

# /etc/systemd/system/mnt-FreeUSB2To.automount 
[Unit]
  Description=cifs mount script
  Requires=network-online.target
  After=network-online.service

[Automount]
  Where=/mnt/FreeUSB2To
  TimeoutIdleSec=10

[Install]
  WantedBy=multi-user.target

Activation

sudo systemctl enable mnt-FreeUSB2To.automount --now

Partage avec Lenovo serveur NFS

PC1
Points de montage : sudo mkdir -p /mnt/sharenfs
Lien : sudo ln -s /mnt/sharenfs $HOME/sharenfs

Ajouter les points de montage du serveur nfs au fichier /etc/fstab

# Les montage NFS du serveur lenovo 192.168.0.215
192.168.0.215:/sharenfs	/mnt/sharenfs nfs4 nofail,x-systemd.automount,x-systemd.requires=network-online.target,x-systemd.device-timeout=10s,rsize=8192,wsize=8192 0 0

Rechargement et montage

sudo systemctl daemon-reload && sudo mount -a

Points de montage : sudo mkdir -p /mnt/nfs-ssd
Lien : sudo ln -s /mnt/nfs-ssd $HOME/nfs-ssd

Ajouter les points de montage du serveur nfs au fichier /etc/fstab

192.168.0.215:/mnt/nfs-ssd /mnt/nfs-ssd nfs4 nofail,x-systemd.automount,x-systemd.requires=network-online.target,x-systemd.device-timeout=10s,rsize=8192,wsize=8192 0 0 

Rechargement et montage

sudo systemctl daemon-reload && sudo mount -a

Dossiers et Liens

Les dossiers et Liens sur les autres unités et les dossiers .keepassx , Notes , scripts statique/images et statique/_posts

sudo mkdir -p /srv/media/{Notes,statique}  
sudo mkdir -p /srv/media/statique/{images,_posts}
sudo ln -s /srv/media $HOME/media
sudo mkdir -p /virtuel  
sudo ln -s /virtuel $HOME/virtuel 
mkdir -p ~/{.ssh,.keepassx}
sudo mkdir -p /mnt/sharenfs/scripts
sudo chown $USER:$USER -R /mnt/sharenfs/scripts

Créer liens sharenfs

ln -s /mnt/sharenfs/pc1/.borg $HOME/Private/.borg
ln -s /mnt/sharenfs/scripts $HOME/scripts

Liens “statique” et “Notes”
les liens pour la rédaction des posts markdown et le dossier des fichiers

# Lien pour affichage des images avec éditeur Retext
sudo ln -s /srv/media/statique/images /images
# Lien pour les fichiers autres
sudo ln -s /srv/media/statique/files /files

Dossiers Documents et Musique
Supprimer les dossiers par défaut Documents et Musique et créer des liens

# suppression Documents et Musique
sudo rm -r $HOME/Documents
sudo rm -r $HOME/Musique
#Création des liens
sudo ln -s /srv/media/Documents $HOME/Documents
sudo ln -s /mnt/sharenfs/Musique $HOME/Musique

Mise à jour EndeavourOS

Mode graphique








Résumé

Paramètres XFCE

On déplace le tableau de bord du bas vers le haut de l’écran
Gestion des 2 écrans

  • Sharp en primaire

Modification du tableau de bord , clic-droit → Tableau de bord → Préférences de tableau de bord → Eléments

Affichage date et heure

ou format personnalisé dans Horloge : %e %b %Y %R

Gestionnaire d’alimentation

Supprimer icône alimentation dans la barre des tâches

Apparence

Economiseur d’écran

Deux cartes réseau sont installés


LightDM

Utilise lightdm-slick-greeter Un greeter basé sur GTK plus axé sur l’apparence que lightdm-gtk-greeter

Les paramètres sont dans le fichier /etc/lightdm/slick-greeter.conf

[Greeter]
background=/srv/media/dplus/images/Fonds/wp2618258.jpg
draw-user-backgrounds=false
draw-grid=false
theme-name=Arc-Dark
icon-theme-name=Qogir
cursor-theme-name=Qogir
cursor-theme-size=16
show-a11y=false
show-power=false
background-color=#000000

Démarre auto ou pas de la session, modifier le fichier /etc/lightdm/lightdm.conf ‘, (début ligne sans ou avec commentaire #)

sudo nano /etc/lightdm/lightdm.conf
[Seat:*]
autologin-user=yann

Ecran principal pour la fenêtre de connexion : EndeavourOS XFCE - LightDM sur les systèmes multi-affichages

Si vous changez l’image de fond, il désactiver draw-grid

background=/usr/share/endeavouros/backgrounds/light_sky_stars_85555_1366x768_yano.jpg
draw-grid=false

Déverrouillage des volumes LUKS2

Description

  • Slot 0 pour le déverrouillage du volume par saisie d’une phrase mot de passe.
  • Slot 1 ,2 et 3 pour le déverrouillage par des clés avec un appui sur une touche.
  • Slot 4 - Ajout d’une phrase mot de passe pour le recovery (OPTION)

Au final nous aurons 4 “slot” utilisés

Installer librairie libfido2 pour la prise en charge des clés Yubico et SoloKeys

sudo pacman -S libfido2

Enroler clé USB YubiKey 5 NFC

Vérifier que la YubiKey est insérée dans un port USB

Lister et enroler la yubikey

sudo systemd-cryptenroll --fido2-device=list
PATH         MANUFACTURER PRODUCT              
/dev/hidraw5 Yubico       YubiKey OTP+FIDO+CCID

Enroler la clé pour le déverrouillage du disque chiffré nvme0n1p2

sudo systemd-cryptenroll --fido2-device=auto /dev/nvme0n1p2
🔐 Please enter current passphrase for disk /dev/nvme0n1p2: *********************   
Requested to lock with PIN, but FIDO2 device /dev/hidraw5 does not support it, disabling.
Initializing FIDO2 credential on security token.
👆 (Hint: This might require confirmation of user presence on security token.)
Generating secret key on FIDO2 security token.
👆 In order to allow secret key generation, please confirm presence on security token.
New FIDO2 token enrolled as key slot 1.

Le Y de la clé se met à clignoter , il suffit de poser son doigt sur l’emplacement du Y pour le déverrouillage

Retirer la première clé et répéter l’opération ci-dessus pour les autres clés

Enroler une passphrase de recouvrement (OPTION)

Les jetons et puces de sécurité FIDO2, PKCS#11 et TPM2 s’associent bien avec les clés de recouvrement : puisque vous n’avez plus besoin de taper votre mot de passe tous les jours, il est logique de vous en débarrasser et d’enregistrer à la place une clé de recouvrement à forte entropie que vous imprimez ou scannez hors écran et conservez dans un endroit physique sûr.
Voici comment procéder :

sudo systemd-cryptenroll --recovery-key /dev/nvme0n1p2
🔐 Please enter current passphrase for disk /dev/nvme0n1p2: ***********             
A secret recovery key has been generated for this volume:

    🔐 vbcrnbjn-vkrkihte-rctbufne-nlihihjl-tegudteu-rkjthcgd-hvhuvgik-rugeregh

Please save this secret recovery key at a secure location. It may be used to
regain access to the volume if the other configured access credentials have
been lost or forgotten. The recovery key may be entered in place of a password
whenever authentication is requested.
New recovery key enrolled as key slot 3.

Cette opération génère une clé, l’enregistre dans le volume LUKS2, l’affiche à l’écran et génère un code QR que vous pouvez scanner en dehors de l’écran si vous le souhaitez.
La clé possède la plus grande entropie et peut être saisie partout où vous pouvez saisir une phrase d’authentification.
C’est pourquoi il n’est pas nécessaire de modifier le fichier /etc/crypttab pour que la clé de récupération fonctionne.

Enroler une clé USB SoloKeys (OPTIONNEL)

Lister la clé

systemd-cryptenroll --fido2-device=list
PATH         MANUFACTURER PRODUCT   
/dev/hidraw4 SoloKeys     Solo 4.1.5

Ajout de la solokeys

sudo systemd-cryptenroll --fido2-device=auto /dev/nvme0n1p2
🔐 Please enter current passphrase for disk /dev/nvme0n1p2: ***********             
Requested to lock with PIN, but FIDO2 device /dev/hidraw1 does not support it, disabling.
Initializing FIDO2 credential on security token.
👆 (Hint: This might require confirmation of user presence on security token.)
Generating secret key on FIDO2 security token.
👆 In order to allow secret key generation, please confirm presence on security token.
New FIDO2 token enrolled as key slot 3.

Lors du boot , le S de la SoloKeys passe au ROUGE et il suffit d’appuyer sur le voyant pour qu’il repasse au vert afin de lancer le processus de déchiffrement et finir le démarrage

Prise en charge YubiKey et SoloKey

Les options timeout de crypttab

timeout=
           Spécifie le délai d'attente pour la demande d'un mot de passe. Si aucune unité
           n'est spécifiée, l'unité utilisée est la seconde. Les unités prises en charge sont s, ms, us,
           min, h, d. Un délai de 0 permet d'attendre indéfiniment (valeur par défaut).

token-timeout=
           Spécifie le temps d'attente maximum pour que les dispositifs de sécurité configurés (c'est-à-dire FIDO2, PKCS#11, TPM2) apparaissent.
           configurés (c'est-à-dire FIDO2, PKCS#11, TPM2). Prend une valeur
           en secondes (mais d'autres unités de temps peuvent être spécifiées,
           voir systemd.time(7) pour les formats supportés). La valeur par défaut est 30s.
           Une fois le délai spécifié écoulé, l'authentification par
           mot de passe est tentée. Notez que ce délai s'applique à
           l'attente de l'apparition du dispositif de sécurité - il ne s'applique pas
           ne s'applique pas à la demande de code PIN pour le dispositif (le cas échéant)
           ou autre. Passez 0 pour désactiver le délai et attendre indéfiniment.

Configurer /etc/crypttab pour la prise en charge des clés

sudo nano /etc/crypttab
# <name>               <device>                         <password> <options>
#cryptlvm UUID=5fa90f9d-ac40-4c70-8f58-730a423ce76b /crypto_keyfile.bin luks
cryptlvm UUID=5fa90f9d-ac40-4c70-8f58-730a423ce76b - fido2-device=auto,token-timeout=20s

token-timeout=20s –> Si aucune clé n’est connectée , le mot de passe devra être saisi après 20 secondes de délai

Sauvegarder et quitter.

Réinitialiser

sudo reinstall-kernels

Redémarrer la machine

Plymouth - Processus de démarrage graphique

Plymouth - Processus de démarrage graphique

Installation Paquets

On commence par tout ce qui est graphique : gimp, cups (gestion de l’imprimante) et hplip (si vous avez une imprimante scanner Hewlett Packard). Le paquet python-pyqt5 est indispensable pour l’interface graphique de HPLIP+scan. Webkigtk2 étant indispensable pour la lecture de l’aide en ligne de Gimp. outil rsync, Retext éditeur markdown, firefox fr, thunderbird, libreoffice, gdisk, bluefish, Double Commander , Menulibre pour la gestion des menus , outils android clementine

yay -S cups system-config-printer gimp hplip libreoffice-fresh-fr thunderbird-i18n-fr jq figlet p7zip tmux  calibre retext bluefish gedit doublecmd-gtk2 terminator filezilla minicom zenity android-tools yt-dlp qrencode zbar xclip nmap jre-openjdk-headless openbsd-netcat borg xterm gparted tigervnc xournalpp qbittorrent ldns strawberry

# Autres avec compilation
yay -S freetube-bin signal-desktop xsane

# Gestion des menus du bureau, construction du paquet avant installation
 yay -S menulibre 
  • System-config-printer est une interface graphique écrite en Python et qui utilise Gtk+ pour configurer un serveur CUPS. Son but premier est de configurer le système d’impression sur l’hôte local, mais il peut également configurer une imprimante distante.
  • HPLIP est un ensemble de pilotes pour l’impression sous GNU / Linux des imprimantes Hewlett Packard.
  • FIGlet est un logiciel qui crée des bannières textuelles dans différentes polices d’écriture
  • Jq est un programme qui permet de filtrer, découper, transformer et grouper des données JSON facilement.
  • p7zip est le portage en ligne de commande Unix de 7-Zip, un archiveur de fichier qui compresse avec des gros ratios de compression.
  • Tmux est un outil qui permet d’exploiter plusieurs terminaux au sein d’un seul affichage.
  • calibre est un logiciel gratuit et open source qui vous permet de gérer, convertir et synchroniser vos livres numériques.
  • ReText est multiplateforme et écrit en Python. Il permet d’éditer des documents au balisage léger, en particulier le Markdown, et peut afficher le rendu HTML, en écran partagé
  • Bluefish est un éditeur de texte dédié à la programmation informatique. Il se distingue notamment par ses nombreux outils et par la longue liste de langages de développement compatibles.
  • Double Commander est un gestionnaire de fichiers multiplateforme au source ouvert avec deux panneaux côte à côte.
  • Terminator est un terminal virtuel qui a la particularité de permettre de partager la fenêtre selon vos envies et ainsi organiser plus simplement vos différentes fenêtres.
  • FileZilla est un logiciel qui vous permet de transférer des fichiers entre votre ordinateur et un serveur distant. Il est compatible avec Windows, Mac, Linux et les protocoles FTP, FTPS et SFTP.
  • Minicom est un programme de contrôle de modem et d’émulation de terminal pour les Unix-like. Il permet de configurer des équipements réseaux via leur port console, comme les routeurs Cisco.
  • Zenity est un outil qui permet d’afficher des boîtes de dialogue GTK+ depuis la ligne de commandes ou au travers de scripts shell
  • Android SDK Platform-Tools (ADB) est l’outil officiel de Google qui permet d’utiliser les commandes ADB sur les appareils Android.
  • yt-dlp, script écrit en Python, est un logiciel open source qui permet de télécharger des vidéos à partir de plusieurs sites de partage de vidéos, notamment YouTube
  • Qrencode est une bibliothèque rapide et compacte pour l’encodage de données en QR Code, un symbole 2D qui peut être scanné par un téléphone portable
  • ZBar est un logiciel de lecture de codes-barres à partir de diverses sources, telles que les flux vidéo, les fichiers d’images et les capteurs d’intensité brute. Il prend en charge de nombreuses symbologies courantes, dispose d’une mise en œuvre souple et en couches et d’un code de petite taille, et convient à une utilisation embarquée.
  • Xournal est un outil open source permettant d’annoter des fichiers PDF. Il prend en charge la saisie au stylo, à la souris et au clavier. Il est couramment utilisé, avec Xournal++, pour ajouter des annotations et des signatures électroniques aux fichiers PDF, en particulier sur les ordinateurs de bureau Linux.
  • TigerVNC (de l’anglais, « Tiger Virtual Network Computing ») est un système pour le partage de bureau graphique vous permettant de contrôler d’autres ordinateurs à distance.
  • Borg Backup (Borg en abrégé) est un programme de sauvegarde incrémentielle en ligne de commande.
  • qBittorrent est un client Bittorrent gratuit et fiable qui vous permet de télécharger et de partager des fichiers via le protocole BitTorrent
  • Xclip Cette application permet d’utiliser le presse-papier en ligne de commande. Elle permet notamment de rediriger la sortie standard d’une commande directement vers le presse-papier, afin de pouvoir s’en servir immédiatement.
  • ldns est une bibliothèque DNS rapide avec le but de simplifier la programmation DNS et pour permettre aux développeurs de facilement créer des programmes qui soient conformes aux RFC actuelles et aux brouillons Internet.
  • Nmap (« Network Mapper ») est un outil open source d’exploration réseau et d’audit de sécurité. Il a été conçu pour rapidement scanner de grands réseaux, mais il fonctionne aussi très bien sur une cible unique.
  • GParted est une application de gestion et d’organisation de partitions distribuée sous licence libre GPLv2. Elle permet de créer, d’effacer et de modifier les partitions de vos disques durs, clés USB, cartes SD, etc.
  • openbsd-netcat L’utilitaire nc (ou netcat) est utilisé pour tout ce qui concerne TCP, UDP ou les sockets du domaine UNIX. Il peut ouvrir des connexions TCP, envoyer des paquets UDP, écouter sur des ports TCP et UDP arbitraires, effectuer un balayage des ports et gérer à la fois IPv4 et IPv6.
  • xterm est l’émulateur de terminal standard pour l’environnement graphique X Window System. Un utilisateur peut disposer de plusieurs instances de xterm simultanément dans le même écran, chacune d’entre elles offrant des entrées/sorties indépendantes pour les processus qui s’y exécutent
  • Strawberry Music Player excelle par la richesse de ses fonctionnalités. Outre la lecture de musique, l’utilisateur peut créer et gérer des playlists, organiser aisément sa collection selon divers critères, et même éditer les tags des pistes audio.
  • FreeTube est un client privé multiplateforme qui vous permet de regarder YouTube sur votre ordinateur en toute tranquillité.
  • Signal, l’équivalent libre de WhatsApp. Signal est une application de messagerie similaire à WhatsApp, mais étant plus indépendante. Elle permet aux utilisateurs de se transmettre des messages, des photos, des vidéos et des documents. La transmission des messages est chiffrée de bout en bout.
  • XSane a été conçu pour l’acquisition d’images avec votre scanner. Vous pouvez scanner un fichier, faire une photocopie, créer un fax, créer un courriel, et enfin démarrer xSane à partir de GIMP avec un greffon spécifique.
  • MenuLibre est un éditeur de menu pour les environnements de bureau tels que Budgie, LXDE (Lubuntu), XFCE (Xubuntu), et également GNOME ou Unity.

ReText

Fichier de configuration ~/.config/ReText project/ReText.conf

[General]
appStyleSheet=/home/yann/.config/ReText project/retext.qss
defaultPreviewState=normal-preview
recentFileList=
styleSheet=/home/yann/.config/ReText project/retext.css
useWebEngine=true
useWebKit=true

Les fichiers retext.css et retext.qss

Etendre Réduire retext.css
  
body {
  font-family: Helvetica, Arial, sans-serif;
  font-size: 15px;
  line-height: 1.3;
  color: #f6e6cc;
  width: 700px;
  margin: auto;
  /*background: #27221a;*/
  background: #121212;
  position: relative;
  padding: 0 30px;
}

body>:first-child
{
  margin-top:0!important;
}

img {
  max-width: 100%;
}

table {
  width: 100%;
  border-collapse: collapse;
}

th {
  background-color: rgba(0, 0, 0, 0.3);
}

table, th, td {
  padding: 5px;
  border: 1px solid rgba(0, 0, 0, 0.3);
  border-radius: 0.4em;
  -moz-border-radius: 0.4em;
  -webkit-border-radius: 0.4em;
}

tr:nth-child(even) {
  background-color: rgba(0, 0, 0, 0.3);
}

p, ul, ol, dl, table, pre {
  margin-bottom: 1em;
}

ul {
  margin-left: 20px;
}

a {
  text-decoration: none;
  cursor: pointer;
  color: #ba832c;
  font-weight: bold;
}

a:focus {
  outline: 1px dotted;
}

a:visited {}

a:hover, a:focus {
  color: #d3a459;
  text-decoration: none;
}

a *, button * {
  cursor: pointer;
}

hr {
  display: none;
}

small {
  font-size: 90%;
}

input, select, button, textarea, option {
  font-family: Arial, "Lucida Grande", "Lucida Sans Unicode", Arial, Verdana, sans-serif;
  font-size: 100%;
}

button, label, select, option, input[type=submit] {
  cursor: pointer;
}

sup {
  font-size: 80%;
  line-height: 1;
  vertical-align: super;
}

h1, h2, h3, h4, h5, h6 {
  line-height: 1.1;
  font-family: Baskerville, "Goudy Old Style", "Palatino", "Book Antiqua", serif;
}

h1 {
  font-size: 24pt;
  margin: 1em 0 0.1em;
}

h2 {
  font-size: 22pt;
}

h3 {
  font-size: 20pt;
}

h4 {
  font-size: 18pt;
}

h5 {
  font-size: 16pt;
}

h6 {
  font-size: 14pt;
}

h1 a, h1 a:hover {
  color: #d7af72;
  font-weight: normal;
  text-decoration: none;
}

::selection {
  background: #745626;
}

::-moz-selection {
  background: #745626;
}

pre {
  background: #1B1812;
  color: #fff;
  padding: 8px 10px;
  overflow-x: hidden;
}

pre code {
  font-size: 10pt;
}

Fichier retext.qss

QTextEdit {
  color: black;
  background-color: white;
}

Tmux

Etendre Réduire fichier de configuration "~/.tmux.conf"
 
#Configuration de tmux
#Origine : http://denisrosenkranz.com
#Yannick juin 2017
# Copier/Coller par la souris se fait avec la touche "Shift" appuyée
 
##################################
#Changements des raccourcis claviers
##################################
#On change Control +b par Control +x
#set -g prefix C-x
#unbind C-b
#bind C-x send-prefix
 
#On utilise control + flèches pour naviguer entre les terminaux
bind-key -n C-right next
bind-key -n C-left prev
 
#on utilise alt + flèches our naviguer entre les panels
bind-key -n M-left select-pane -L
bind-key -n M-right select-pane -R
bind-key -n M-up select-pane -U
bind-key -n M-down select-pane -D
 
#On change les raccourcis pour faire du split vertical et horizontal
#On utilise la touche "|" (pipe) pour faire un split vertical
bind | split-window -h
#Et la touche "-" pour faire un split horizontal
bind - split-window -v
 
##################################
#Changements pratiques
##################################
#On permet l'utilisation de la souris pour changer de terminal et de panel
set -g mouse on

# Sélection zone par clic gauche souris (texte sélectionné sur fond jaune)
# Après relachement du clic , le texte sélectionné est copié dans le presse-papier 
# Le fond jaune disparaît
set-option -s set-clipboard off
# For emacs copy mode bindings
# Il faut installer l'utilitaire 'xclip' (sudo pacman -S xclip)
bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"

#Les fenêtres commencent par 1 et non par 0
set -g base-index 1
 
##################################
#Changements visuels
##################################
#On met les panneaux non actif en gris
#set -g pane-border-fg colour244
#set -g pane-border-bg default
 
#On met le panneau actif en rouge
#set -g pane-active-border-fg colour124
#set -g pane-active-border-bg default
 
#On met la barre de status en gris
set -g status-fg colour235
set -g status-bg colour250
#set -g status-attr dim
 
# On surligne les fenêtres actives dans la barre de status en gris foncés
#set-window-option -g window-status-current-fg colour15
#set-window-option -g window-status-current-bg colour0

Minicom

Paramétrage de l’application terminale minicom

 sudo minicom -s

Seul les paramètres à modifier sont cités

Configuration du port série

A - Port série : /dev/ttyUSB0
F - Contrôle de flux matériel : Non

Echap
Enregistrer config. sous dfl

Sortir de Minicom

Flameshot (copie écran)

Copie écran (flameshot)
Flameshot c’est un peu THE TOOL pour faire des captures d’écrans

yay -S flameshot

Lancer l’application XFCE Flameshot et l’icône est visible dans la barre des tâches

Paramétrage de flameshot, clic droit sur icône , Configuration

Paramétrage de flameshot

scrpy émulation android

Utilise adb et le port USB

yay -S scrcpy

Client Nextcloud

Installation client nextcloud

yay -S nextcloud-client libgnome-keyring gnome-keyring  

Démarrer le client nextcloud , après avoir renseigné l’url ,login et mot de passe pour la connexion

Trousseau de clé avec mot de passe idem connexion utilisateur

Paramétrage

  • Menu → Lancer Client de synchronisation nextcloud
  • Adresse du serveur : https://cloud.xoyaz.xyz
  • Nom d’utilisateur : yann
  • Mot de passe : xxxxx


  • Sauter les dossiers à synchroniser, Ignorer la configuration des dossiers
  • Trousseau de clés = mot de passe connexion utilisateur
  • Paramètres nextcloud

Saisir les différents dossiers à synhroniser

Au prochain redémarrage, il faudra confirmer le mot de passe du trousseau

Gestion mot de passe (keepassxc)


Ajouter une synchronisation de dossier nextcloud : /home/yann/.keepassx (local) → Home/.keepasx (serveur)

Installer keepassxc

yay -S keepassxc

Ajouter aux favoris “KeepassXC” et lancer l’application → Ouvrir une base de données existante
Base de données –> Ouvrir une base de données (afficher les fichiers cachés) : ~/.keepassx/yannick_xc.kdbx –> Ouvrir

Affichage → Thème : Sombre
Affichage → Mode compact , un redémarrage de l’application est nécessaire

Déverrouillage avec clé matérielle

SSHFS (facultatif)


SSHFS sert à monter sur son système de fichier, un autre système de fichier distant, à travers une connexion SSH, le tout avec des droits utilisateur.

Installer paquet SSHFS

sudo pacman -S sshfs 

sshfs est installé par défaut sur la distribution EndeavourOS

Création des partages utilisés par sshfs (facultatif)

mkdir -p $HOME/vps/{borgbackup,lxc,vdb,xoyaz.xyz,xoyize.xyz}

Exemple de montage manuel
sshfs -oIdentityFile=<clé privée> utilisateur@domaine.tld:<dossier distant> <dossier local> -C -p <port si dfférent de 22>

Gestionnaire de fichiers

Double Commander est un gestionnaire de fichiers open source multiplateforme avec deux panneaux côte à côte. Il s’inspire de Total Commander

Application GTK

yay -S doublecmd-gtk2

Les paramètres sont stockés dans le dossier ~/.config/doublecmd

Thunderbird

Lancer thunderbird à l’ouverture de session xfce
Paramètres → Session et démarrage → Démarrage automatique d’application

Ajouter thunderbird aux favoris et lancer

bashrc alias

Dans le fichier ~/.bashrc

alias
alias ls='ls --color=auto'
alias ll='ls -lav --ignore=..'   # show long listing of all except ".."
alias l='ls -lav --ignore=.?*'   # show long listing but no hidden dotfiles except "."
alias aide='xdg-open https://static.rnmkcy.eu/aide-jekyll-text-theme.html#autres-styles'
alias android='/home/yann/virtuel/KVM/bliss.sh'
alias audio='yt-dlp --extract-audio --audio-format m4a --audio-quality 0 --output "~/Musique/%(title)s.%(ext)s"'
alias audiomp3='yt-dlp --extract-audio --audio-format mp3 --audio-quality 0 --output "~/Musique/%(title)s.%(ext)s"'
alias borglist='/home/yann/scripts/borglist.sh'
alias calibreraz='adb -s CNBT80D20191101145 shell -x rm /sdcard/Document/metadata.calibre'
alias certok='/home/yann/scripts/ssl-cert-check'
alias compress='/home/yann/scripts/compress'
alias dnsleak='/home/yann/scripts/dnsleaktest.py'
alias findh='cat /home/yann/scripts/findhelp.txt'
alias homer="ssh bookvm@192.168.0.225 -p 55215 -i /home/yann/.ssh/vm-debian12 '/home/bookvm/homer/remoh.py'"
alias iceyanwg="sh /mnt/sharenfs/pc1/scripts/wgiceyan.sh"
alias ipleak='curl https://ipv4.ipleak.net/json/'
alias l='ls -lav --ignore=.?*'
alias ll='ls -lav --ignore=..'
alias ls='ls --color=auto'
alias mediasync='/home/yann/scripts/sav-yann-media.sh'
alias mediajour='/usr/bin/journalctl --no-pager -t sauvegardes --since today'
alias nmapl='sudo nmap -T4 -sP 192.168.0.0/24'
alias odt2html='/home/yann/scripts/_odt2html+index'
alias odtprivate='/home/yann/scripts/_odt2html+index_private'
alias orphelin='sudo pacman -Rsn $(pacman -Qdtq)'
alias otp='/home/yann/scripts/generer-code-2fa-vers-presse-papier-toutes-les-30s.sh'
alias ovh="ssh leno@192.168.0.215 -p 55215 -i /home/yann/.ssh/lenovo-ed25519 'cd /home/leno/ovh_api/; /home/leno/ovh_api/ApiOvh/bin/python domain.py xoyize.xyz cinay.eu xoyaz.xyz ouestline.xyz rnmkcy.eu yanfi.net icevps.xyz xoyize.net iceyan.xyz; cd /home/leno'"
alias rename='/home/yann/scripts/remplacer-les-espaces-accents-dans-une-expression.sh'
alias service='systemctl --type=service'
alias sshm='/home/yann/scripts/ssh-manager.sh'
alias ssl='/home/yann/scripts/ssl-cert-check'
alias static='cd /home/yann/media/yannstatic; /home/yann/.rbenv/shims/bundle exec jekyll build -d /home/yann/media/yannstatic/static; cd ~'
alias status='/home/yann/scripts/status.sh'
alias synchro='journalctl --user -u media_yannstatic_site.service --no-pager --since today'
alias toc='/home/yann/scripts/toc/toc.sh'
alias tocplus='/home/yann/scripts/toc/tocplus.sh'
alias tracesgpx="ssh bookvm@192.168.0.225 -p 55215 -i /home/yann/.ssh/vm-debian12 'tracesgpxnew /home/bookvm/media/osm-new/file'"
alias traduc='/usr/local/bin/trans'
alias vncasus='sh /home/yann/scripts/vncasus.sh'
alias vncdell='sh /home/yann/scripts/vncdell.sh'
alias vncmarina='sh /home/yann/scripts/vncmarina.sh'
alias wgiceyan='sh /home/yann/scripts/wgiceyan.sh'
alias x96='adb connect 192.168.0.22:5555'
alias youtube='yt-dlp -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best" --output "~/Vidéos/%(title)s.%(ext)s" --ignore-errors'

nous rechargeons le fichier pour appliquer les modifications

source ~/.bashrc

Imprimante et scanner

Prérequis , paquets cups cups-filters cups-pdf system-config-printer hplip installés (Pilotes HP pour DeskJet, OfficeJet, Photosmart, Business Inkjet et quelques modèles de LaserJet aussi bien qu’un certain nombre d’imprimantes Brother)…

Installer graphiquement l’imprimante



Pour contourner le problème , éditer le fichier /etc/nsswitch.conf
Ajouter mdns_minimal [NOTFOUND=return] avant resolve
hosts: mymachines mdns_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] files myhostname dns

Après correctif

Avec cups : http://localhost:631/

Installation du scanner
Coté logiciel il vous faudra sane et son interface graphique xsane, ainsi qu’éventuellement xsane-gimp le plugin pour gimp.

yay -S xsane xsane-gimp 

Vérifier si le scaner est reconnu : sudo scanimage -L

device `escl:https://192.168.0.24:443' is a HP OfficeJet 7510 series [C22036] platen,adf scanner
device `hpaio:/net/officejet_7510_series?ip=192.168.0.24&queue=false' is a Hewlett-Packard officejet_7510_series all-in-one

Test scan, placer un original pour photocopie

scanimage --device hpaio:/net/officejet_7510_series?ip=192.168.0.24 --format=png > test.png

Floorp est un navigateur basé sur Firefox qui bloque les traceurs malveillants, offre une mise en page flexible et personnalisable, et ne collecte pas les données des utilisateurs. Découvrez ses fonctionnalités, ses thèmes, ses mises à jour et son code source ouvert.

yay -S floorp-bin

Application Mullvad

Générateur site statique

Ensemble d’applications basé sur ruby et jekyll qui permet la génération de site statique à partir de fichiers markdown

Installation sur archlinux

sudo pacman -S ruby ruby-erb base-devel

Pour ne pas installer les paquets RubyGems (appelés gems) en tant qu’utilisateur root. A la place, mettez en place un répertoire d’installation de gem pour votre compte utilisateur.

Les commandes suivantes ajoutent des variables d’environnement à votre fichier ~/.bashrc pour configurer le chemin d’installation des gems

echo '# Install Ruby Gems to ~/gems' >> ~/.bashrc
echo 'export GEM_HOME="$HOME/gems"' >> ~/.bashrc
echo 'export PATH="$HOME/gems/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

Puis, installer Jekyll et Bundler

gem install jekyll bundler

Les versions installées

Suite installation –> yannstatic - générateur site statique

Ntfy

Ntfy, qui se prononce “notify”, est un service de notification ultra léger, permettant d’envoyer des messages vers un smartphone ou un ordinateur via de simples scripts, sans besoin de compte et totalement gratuitement !

Ntfy service de notification

yay -S ntfy-bin

FreeTuxTv

FreetuxTV est une application qui permet de regarder et enregistrer facilement les chaînes de télévision sous GNU/Linux et les chaînes de télévision de votre fournisseur d’accès internet.

En mode su

echo "192.168.0.254 mafreebox.freebox.fr" >> /etc/hosts

Installation

sudo pacman -S freetuxtv

Paramétrage du parefeu firewalld (Configuration de firewalld pour le multicast VLC freebox)

Créer les services /etc/firewalld/services//mafreebox.xml et /etc/firewalld/services//vlc.xml pour firewalld

mafreebox.xml

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>mafreebox</short>
  <description>Permission pour mafreebox et vlc</description>
  <port protocol="udp" port=""/>
</service>

vlc.xml

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>vlc2</short>
  <description>Permission pour mafreebox et vlc</description>
  <port protocol="udp" port="15947"/>
  <destination ipv4="228.67.43.91"/>
</service>

Les ajouter à la zone public pour rendre ces règles permanentes

/etc/firewalld/zones/public.xml

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="dhcpv6-client"/>
  <service name="ipp-client"/>
  <service name="mdns"/>
  <service name="ipp"/>
  <service name="mafreebox"/>
  <service name="vlc"/>
  <forward/>
</zone>

Recharger le parefeu

firewall-cmd --reload

Virtuel QEMU KVM VMM

Installation Virt-Manager

  1. Virt-Manager Complete Edition - Installation simplifiée
  2. Accés aux machines virtuelles KVM distantes via virt-manager
  3. Pont réseau virtuel “host-bridge”
  4. Gestionnaire de machine virtuelles, activer “xml editing”
  5. Restaurer les configurations de VM
    sudo cp ~/virtuel/etc-libvirt-qemu/*.xml /etc/libvirt/qemu/

Déclarer le pont (bridge) à KVM Créer un fichier de définition de réseau au format XML : nano router-tenda.xml

<network>
  <name>router-tenda</name>
  <forward mode="bridge"/>
  <bridge name="bridge0" />
</network>

Appliquer la configuration :

sudo virsh net-define router-tenda.xml # -> Réseau host-tenda défini depuis router-tenda.xml
sudo virsh net-start router-tenda # -> Réseau router-tenda démarré
sudo virsh net-autostart router-tenda # -> Réseau router-tenda marqué en démarrage automatique

Vérification

sudo virsh net-list --all
 Nom           État      Démarrage automatique   Persistant
-------------------------------------------------------------
router-tenda   actif     oui                     oui

La structure libvirt

# Les configurations xml
[root@pc1 yann]# tree -L 2 /etc/libvirt/qemu
/etc/libvirt/qemu
├── autostart
│   └── vm-debian12.xml -> /etc/libvirt/qemu/vm-debian12.xml
├── EndeavourOS.xml
├── networks
│   ├── autostart
│   ├── default.xml
│   └── router-tenda.xml
└── win11.xml

# les images sous KVM
[yann@pc1 ~]$ tree -L 2 ~/virtuel/
/home/yann/virtuel/
├── eos
│   └── eos-chiffre_luks_backup.bin
├── KVM
│   ├── eos-lvm-luks-1.qcow2
│   └── wineleven.qcow2
├── KVM_SAV
│   ├── etc-libvirt-qemu
│   └── images_qcow2
└── nspawn
    └── nspbullseye

Développement

Wing personal python IDE

Wing personal python IDETéléchargement

# Décompression de la version téléchargée
tar xjvf wing-personal-10.0.6.0-linux-x64.tar.bz2
# Passage en root
sudo -s
# Lancement procédure installation
cd wing-personal-10.0.6.0-linux-x64
./wing-install.py

Déroulement de la commande

Where do you want to install the support files for Wing Personal (default
     = /usr/local/lib/wing-personal9)? 
/usr/local/lib/wing-personal9 does not exist, create it (y/N)? y
Where do you want to install links to the Wing Personal startup scripts
     (default = /usr/local/bin)? 
[...]
Writing file-list.txt
Icon/menu install returned err=0
Done installing.  Make sure that /usr/local/bin is in your path and type
     "wing-personal9" to start Wing Personal.

Effacer les fichiers

# Suppression dossier et fichier
cd ..
rm -rf wing-personal*
# sortie root
exit

Go et NodeJS

Archlinux Go

yay -S go
go version

go version go1.23.2 linux/amd64

Archlinux Node.js npm

yay -S nodejs npm
node --version && npm --version

v22.9.0
10.8.3

NVM, également appelé « Node Version Manager », est un outil utilisé pour installer et gérer plusieurs versions de Node.js sur le système.
Installer la dernière version de NVM à l’aide de la commande suivante

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
source ~/.bashrc

Vérifier

nvm --version

0.39.2

Installer Node.js avec NVM
Pour lister toutes les versions disponibles Node.js

nvm list-remote

Vous obtiendrez une liste de toutes les versions

       v20.17.0   (LTS: Iron)
       v20.18.0   (Latest LTS: Iron)
        v22.2.0
        v22.3.0
        v22.4.0
        v22.4.1
        v22.5.0
        v22.5.1
        v22.6.0
        v22.7.0
        v22.8.0
        v22.9.0

Pour installer la dernière version de Node.js
nvm install node

Pour installer la dernière version stable de Node.js
nvm install --lts

Pour installer une version spécifique de Node.js
nvm install 18.10.0

Pour lister toutes les versions installées de Node.js
nvm ls

Pour modifier la version Node.js par défaut à 19.0.0
nvm utilisation 19.0.0

Dbeaver

DBeaver est basé sur le framework Eclipse, il est open source et il supporte plusieurs types de serveurs de bases de données comme : MySQL, SQLite, DB2, PostgreSQL, Oracle…

Version java si installé : java --version

openjdk 22.0.2 2024-07-16
OpenJDK Runtime Environment (build 22.0.2+9)
OpenJDK 64-Bit Server VM (build 22.0.2+9, mixed mode, sharing)

Installation

yay -S dbeaver
Sync Explicit (1): dbeaver-24.2.1-1
résolution des dépendances…
:: Il y a 6 fournisseurs disponibles pour java-runtime>=17 :
:: Dépôt extra
   1) jdk-openjdk  2) jdk17-openjdk  3) jdk21-openjdk  4) jre-openjdk  5) jre17-openjdk  6) jre21-openjdk

Entrer un nombre (par défaut, 1 est sélectionné): 4
recherche des conflits entre paquets…
:: jre-openjdk - 22.0.2.u9-1 et jre-openjdk-headless - 22.0.2.u9-1 sont en conflit. Supprimer jre-openjdk-headless ? [o/N] o

MariaDB

MariaDB archlinux

Résumé des commandes en mode su

pacman  -S mariadb
mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
systemctl enable mariadb --now
systemctl status --no-pager --full mariadb --full

Sécuriser

sudo mysql_secure_installation

PostgreSQL

Installation sur archlinux yay -S postgresql

Relever version postgres --version
postgres (PostgreSQL) 16.3

Configurer le serveur PostgreSQL

Pour configurer le serveur PostgreSQL sur Arch Linux, vous devez installer le paquetage Postgresql. Ensuite, vous pouvez démarrer le service en initialisant le cluster de base de données. Vous pouvez définir un mot de passe pour le super-utilisateur et créer des bases de données et des tables.
Comme nous avons déjà installé PostgreSQL, nous devons maintenant le configurer. Pour cela, passez d’abord à l’utilisateur Postgres avec cette commande :

sudo -iu postgres

Prompt : [postgres@pc1 ~]$

initialiser le répertoire pour les données.
PostgreSQL stockera ses données dans ce répertoire. Vous pouvez utiliser l’emplacement par défaut /var/lib/postgres/data ou en choisir un autre.

initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data/'

Démarrer et activer PostgreSQL

sudo systemctl enable postgresql --now

Vérifier : systemctl status postgresql

Pour accéder

psql -U postgres

Pour importer une base SQL

# Créer une base 
psql -U postgres -c "CREATE DATABASE ttrss"
# Importer
psql -U postgres ttrss < nom_fichier.sql

OPTIONS
Vous pouvez également activer les sommes de contrôle des données pour renforcer l’intégrité des données en ajoutant l’argument --data-checksums à la commande précédente. Pour savoir si les sommes de contrôle des données sont activées, exécutez la commande suivante :

sudo -iu postgres
psql --tuples-only -c "SHOW data_checksums"

Pour initialiser le répertoire de données avec les sommes de contrôle activées

initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data/' --data-checksums

Cela créera un nouveau répertoire de données dans /var/lib/postgres/data/ avec la locale et l’encodage spécifiés. De plus, il effectue une vérification de la somme de contrôle des données pour chaque page écrite sur le disque. Cela permet de détecter les corruptions de données causées par un matériel défectueux.

Vous pouvez également modifier les méthodes d’authentification pour les connexions locales et distantes en ajoutant l’argument ci-dessous à la commande précédente :

--auth-local=peer --auth-host=scram-sha-256

La méthode par défaut est la confiance, ce qui signifie que n’importe qui sur l’hôte peut se connecter en tant qu’utilisateur de la base de données. Cette méthode n’étant pas très sûre, vous pouvez en utiliser une autre.

Maintenance

Sauvegardes locales

Sauvegardes locales avec systemd utilisateur service et timer

La sauvegarde démarre 3 minutes après la mise sous tension de PC1

Les logs : journalctl --user -u savyann.service
Liste des timers : systemctl --user list-timers --all

Pacman Hooks

Liste paquets installés
Ce hook sauvegardera une liste de vos paquets natifs et étrangers (AUR) installés. Cela garantit que vous aurez toujours une liste à jour de tous vos paquets que vous pourrez réinstaller.

Prérequis pour la création du hook et des scripts, créez des sous-répertoires

sudo mkdir -p /etc/pacman.d/{hooks,hooks.bin}

Créez le hook

sudo nano /etc/pacman.d/hooks/50-pacman-list.hook
#/etc/pacman.d/hooks/50-pacman-list.hook
[Trigger]
Type = Package
Operation = Install
Operation = Upgrade
Operation = Remove
Target = *

[Action]
Description = Création liste des paquets installés
When = PostTransaction
Exec = /bin/sh -c '/usr/bin/pacman -Qqe > /mnt/sharenfs/pc1/PC1_eos_pkg_list.txt'

Pour installer des paquets depuis une sauvegarde antérieure de la liste des paquets, tout en ne réinstallant pas ceux qui sont déjà installés et à jour, lancer:

sudo pacman -S --needed - < PC1_eos_pkg_list.txt
sudo pacman -S --needed $(comm -12 <(pacman -Slq | sort) <(sort pkglist.txt))

Changer Nvme ou SSD chiffré

Remplacer M.2 2280 NVMe 1To par une 2To

Boot sur usb live EndeavourOS

Passer en mode su

Les partitions du disque chiffré nvme0n1

nvme0n1              259:0    0 931.5G  0 disk  
├─nvme0n1p1          259:1    0   512M  0 part  
├─nvme0n1p2          259:2    0   920G  0 part  
│ └─crypttemp        254:3    0   920G  0 crypt 
│   ├─vg0-lvroot     254:4    0    70G  0 lvm   
│   ├─vg0-lvhome     254:5    0   120G  0 lvm   
│   └─vg0-lvmedia    254:6    0   600G  0 lvm   
└─nvme0n1p3          259:3    0    11G  0 part  

Déchiffrer la partition nvme0n1p2

cryptsetup luksOpen /dev/nvme0n1p2 crypttemp

Créer et monter le système à sauvegarder sur /media

mkdir -p /media
mkdir -p /media/home
mkdir -p /media/efi
mount /dev/vg0/lvroot /media
mount /dev/vg0/lvhome /media/home
mount /dev/nvme0n1p1 /media/efi

Monter le système qui va recevoir la sauvegarde

mount /dev/vg-nas-one/sav /mnt
mkdir -p /mnt/pc1
mkdir -p /mnt/pc1/efi
mkdir -p /mnt/pc1/home

Sauvegarder le système actuel (racine,home et efi)

rsync -avA /media/ /mnt/pc1

Patienter plusieurs minutes, suivant la taille

Arrêter la machine PC1

Remplacer la carte SSD M2
Redémarrer la machine sur un USB Live EndeavourOS

Zapper le nouveau disque SSD M.2

sgdisk --zap-all /dev/nvme0n1

Partitionnement du disque NVME 2To GPT + LVM

gdisk /dev/nvme0n1

Créer 2 partitions
Partition 1 : 512M EFI (code ef00) système de fichier FAT32
Partition 2 : le reste LVM (code 8e00) système de fichier EXT4

Formater partition EFI

mkfs.fat -F32 /dev/nvme0n1p1

Chiffrer la partition /dev/nvme0n1p2

cryptsetup luksFormat --type luks2 /dev/nvme0n1p2

Ouvrir la partition chiffrée

cryptsetup luksOpen /dev/nvme0n1p2 crypt

Créer LVM

pvcreate /dev/mapper/crypt
vgcreate vg0 /dev/mapper/crypt

Créer les volumes

lvcreate -L 60G vg0 -n lvroot   #  Logical volume "lvroot" created.
lvcreate -L 120G vg0 -n lvhome  #  Logical volume "lvhome" created.

Système de fichier

mkfs.ext4 -L root /dev/mapper/vg0-lvroot
mkfs.ext4 -L home /dev/mapper/vg0-lvhome

Monter le nouveau système sur /mnt

mount /dev/mapper/vg0-lvroot /mnt
mkdir -p /mnt/home
mount /dev/mapper/vg0-lvhome /mnt/home
mkdir -p /mnt/efi
mount /dev/nvme0n1p1 /mnt/efi

Monter la sauvegarde sur media

mount /dev/vg-nas-one/sav /media

Restaurer le système

rsync -avA /media/pc1/ /mnt

Patienter plusieurs minutes, suivant la taille

Création volume logique LVM media et montage

lvcreate -L 800G vg0 -n lvmedia
mkfs.ext4 -L media /dev/mapper/vg0-lvmedia

mkdir -p /mnt/srv/media
mount /dev/vg0/lvmedia /mnt/srv/media

Restaurer la sauvegarde multimedia

rsync -avA /media/pc1_20240201/media/srv/media/ /mnt/srv/media

Démonter le système de sauvegarde

umount /media

Ajouter un fichier de clé existant LUKS

cryptsetup luksAddKey /dev/nvme0n1p2 /mnt/crypto_keyfile.bin  

Il faut saisir le phrase mot de passe

Configuration /etc/crypttab

cryptsetup luksUUID /dev/nvme0n1p2

Renvoie UUID ae37e59d-35f7-4920-8428-be8be8d15243

Modifier /mnt/etc/crypttab

Contenu

# <name>               <device>                         <password> <options>
cryptlvm UUID=ae37e59d-35f7-4920-8428-be8be8d15243 /crypto_keyfile.bin luks

Passer en chroot

arch-chroot /mnt

Relever les UUID

blkid -s UUID -o value /dev/mapper/vg0-lvroot

renvoie l’UUID du volume racine : 2a6cab35-6c52-4382-9aee-06a376a8acc0

blkid -s UUID -o value /dev/mapper/vg0-lvhome

renvoie l’UUID du volume d’accueil : b4e52069-a8c9-459e-b39f-6ac1b682b0d6

blkid -s UUID -o value /dev/mapper/vg0-lvmedia

renvoie l’UUID du volume media : 1ca4bfc7-3d31-4859-aeb3-656214fab490

blkid -s UUID -o value /dev/nvme0n1p1

renvoie l’UUID du volume media : E5E4-A4AE

Configurer /etc/fstab

nano /etc/fstab
UUID=E5E4-A4AE                            /efi           vfat    defaults,noatime 0 2
tmpfs                                     /tmp           tmpfs   defaults,noatime,mode=1777 0 0
UUID=2a6cab35-6c52-4382-9aee-06a376a8acc0 / ext4 defaults,acl,noatime,discard 0 0
UUID=b4e52069-a8c9-459e-b39f-6ac1b682b0d6 /home ext4 defaults,acl,noatime,discard 0 0
/swapfile                                 none  swap defaults,pri=-2 0 0

# /dev/mapper/vg0-lvmedia
UUID=86a7c58c-8f30-42e2-bd39-d1ae7464c837 	/srv/media      ext4            rw,relatime     0 2

# /dev/mapper/ssd--512-virtuel
UUID=84bc1aa9-23ac-4530-b861-bc33171b7b42       /virtuel    ext4        defaults        0 2

# /dev/mapper/vg--nas--one-sav
UUID=c5b9eefc-1daa-4a0d-8a72-6169b3c8c91f       /sauvegardes    ext4            defaults        0 2

# /dev/vg-nas-one/iso - Volume logique 200G du disque 4To
UUID=58f4b6c7-3811-41d5-9964-f47ac32375f6           /iso        ext4            defaults        0 2

options du noyau

blkid -s UUID -o value /dev/nvme0n1p2 # --> ae37e59d-35f7-4920-8428-be8be8d15243

Modifier /etc/kernel/cmdline

nano /etc/kernel/cmdline
nvme_load=YES nowatchdog rw rd.luks.uuid=ae37e59d-35f7-4920-8428-be8be8d15243 root=/dev/mapper/vg0-lvroot

Réinstaller noyau

reinstall-kernels

Sortie du chroot , retirer la clé USB Live et reboot de la machine

Mise à jour , si erreur de paquet ou signature PGP

En cas d’erreur de paquet ou signature PGP

sudo pacman -S endeavouros-keyring archlinux-keyring

Redémarrer la machine

Etat des lieux

Ajouter un alias dans le fichier ~/.bashrc

alias etat='$HOME/scripts/etat_des_lieux.sh'

Recharger et exécuter

source ~/.bashrc
etat

Ajout disque LVM

Exemple disque SSD 120Go

Disque sda

lsblk
NAME                 MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
sda                    8:0    0 111,8G  0 disk  

gdisk

sudo gdisk /dev/sda

o : nouvelle partion dos
n : nouvelle partition typt LVM 8e00

Format fichier ext4

sudo mkfs.ext4 /dev/sda1

LVM (Logical Volume Manager, ou gestionnaire de volumes logiques en français) permet la création et la gestion de volumes logiques sous Linux. L’utilisation de volumes logiques remplace en quelque sorte le partitionnement des disques.

Volume physique : sudo pvcreate /dev/sda1
GroupevVolumes : sudo vgcreate ssd-120 /dev/sda1
Volume logique : sudo lvcreate -n lv120 -l +100%FREE ssd-120
Fichier ext4 : sudo mkfs.ext4 /dev/ssd-120/lv120

Relever UUID sudo blkid |grep lv120

/dev/mapper/ssd--120-lv120: UUID="6b48e98c-9b85-461b-9371-040765aae682" BLOCK_SIZE="4096" TYPE="ext4"

Création point de montage

sudo mkdir -p /mnt/ssd

Ajouter les lignes suivantes au fichier /etc/fstab

# /dev/mapper/ssd--120-lv120
UUID=6b48e98c-9b85-461b-9371-040765aae682 	/mnt/ssd    ext4    	defaults	0 2

Rechargement et montage

sudo systemctl daemon-reload
sudo mount -a

Vérification : df -h /mnt/ssd/

Sys. de fichiers           Taille Utilisé Dispo Uti% Monté sur
/dev/mapper/ssd--120-lv120   110G    2,1M  104G   1% /mnt/ssd

Droits en écriture à l’utilisateur

sudo chown $USER:$USER /mnt/ssd/

Synchro serveurs

Dossier “BiblioCalibre”

Le but est de synchroniser le dossier /srv/media/BiblioCalibre avec le(s) serveur(s) web distant(s)
Avec les unités de chemin, vous pouvez surveiller les fichiers et les répertoires pour certains événements. Si un événement spécifique se produit, une unité de service est exécutée, et elle porte généralement le même nom que l’unité de chemin

Nous allons surveiller dans le dossier /srv/media/BiblioCalibre/ toute modification du fichier metadata.db qui entrainera l’exécution d’un script

Dans le répertoire systemd utilisateur nous créons une unité de cheminement media_BiblioCalibre_site.path

nano ~/.config/systemd/user/media_BiblioCalibre_site.path
[Unit]
Description=Surveiller metadata.db pour les changements

[Path]
PathChanged=/srv/media/BiblioCalibre/metadata.db
Unit=media_BiblioCalibre_site.service

[Install]
WantedBy=default.target

Dans la section [Path], PathChanged= indique le chemin absolu du fichier à surveiller, tandis que Unit= indique l’unité de service à exécuter si le fichier change. Cette unité (media_BiblioCalibre_site.path) doit être lancée lorsque le système est en mode multi-utilisateur.

Ensuite, nous créons l’unité de service correspondante, media_BiblioCalibre_site.service, dans le répertoire ~/.config/systemd/user/
Si le fichier metadata.db change (c’est-à-dire qu’il est à la fois écrit et fermé), l’unité de service suivante sera appelée pour exécuter le script spécifié :

nano ~/.config/systemd/user/media_BiblioCalibre_site.service
[Unit] 
Description="Exécute le script si metadata.db a été modifié."

[Service]
ExecStart=/mnt/sharenfs/scripts/media_BiblioCalibre_site.sh

[Install]
WantedBy=default.target

Le script media_BiblioCalibre_site.sh lance une synchronisation locale distante via rsync ssh

Etendre Réduire media_BiblioCalibre_site.sh
#!/bin/bash

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Modification mode rsync suivant serveur distant
#
# Chaque modification du fichier metadata.db dans le dossier local /srv/media/BiblioCalibre 
# déclenche une synchronisation du dossier local  avec le dossier distant '/sharenfs/multimedia/eBook/BiblioCalibre' 
# des serveurs VPS Yunohost
# le dossier local est également sauvegardé dans le dossier 'backup/datayan/static' de la boîte de stockage
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

# Fonction pour tester si le serveur est présent
# Host=$1 et Port=$2
# Réponse $?=0 -> OK  $?=1 -> NOK
host_ok () {
 nc -4 -d -z -w 1 $1 $2 &> /dev/null
}

synchro () {
# Synchronisation locale distante du dossier _site
host_ok $SERVER $PORT 
if [[ $? == 0 ]]
then



echo 'rsync -avz --progress --stats --human-readable --delete -e "ssh -p '$PORT' -i '$PRIVKEY'" '$REPLOC' '$USERDIS':'$REPDIS'/eBook/'
rsync -avz --progress --stats --human-readable --delete --rsync-path="$RSYNCMOD" -e "ssh -p $PORT -i $PRIVKEY" $REPLOC $USERDIS:$REPDIS/eBook/ > /dev/null

	 # Analyse résultat de la commande rsync
	 if [ ! $? -eq 0 ]; then 
		 #echo "Synchro $REPLOC avec $SERVER -> OK" | systemd-cat -t BiblioCalibre -p info 
		 #echo "Synchro $REPLOC avec $SERVER -> OK"
	 #else 
		 echo "Synchro $REPLOC avec $SERVER -> ERREUR" | systemd-cat -t BiblioCalibre -p emerg 
		 #echo "Synchro $REPLOC avec $SERVER -> ERREUR"
	 fi
else
    echo "Site $SERVER port $PORT Inaccessible !" | systemd-cat -t BiblioCalibre -p emerg
    #echo "Site $SERVER port $PORT Inaccessible !"
fi

}

#*******************************************************************
#
# DEPART SCRIPT
#
#*******************************************************************

# Tester la présence du fichier des serveurs distants
if [ ! -f /home/yann/scripts/serveurs.csv ]; then
    echo "Fichier serveurs.csv inexistant!" | systemd-cat -t BiblioCalibre -p emerg
    exit 1
fi

# Mesure temps exécution
begin=$(date +"%s")
echo "***DEPART*** Exécution script $0"
echo "***DEPART*** Exécution script $0" | systemd-cat -t BiblioCalibre -p info
#echo "Exécution script $0"

# Dossier local
REPLOC="/srv/media/BiblioCalibre" 

# Synchro serveurs
while IFS="," read -r SERVER REPDIS USERDIS PORT PRIVKEY RSYNCMOD LOCAL
do
  #echo " $SERVER $REPDIS $USERDIS $PORT $PRIVKEY $RSYNCMOD $LOCAL"
 
   if [[ "$SERVER" = "rnmkcy.eu" ]]; then
  	synchro
        echo "ssh $USERDIS -p $PORT -i $PRIVKEY 'sudo systemctl restart calibreweb'"
  	ssh $USERDIS -p $PORT -i $PRIVKEY 'sudo systemctl restart calibreweb'  
   fi
done < <(tail -n +2 /home/yann/scripts/serveurs.csv)

# Calcul et affichage temps exécution
termin=$(date +"%s")
difftimelps=$(($termin-$begin))
echo "***FIN*** $0 exécuté en $(($difftimelps / 60)) mn $(($difftimelps % 60)) s" | systemd-cat -t BiblioCalibre -p info
echo "***FIN*** $0 exécuté en $(($difftimelps / 60)) mn $(($difftimelps % 60)) s"

exit 0

Activer et lancer

systemctl --user enable media_BiblioCalibre_site.path --now

Voir le fichier journal

journalctl --user -f -u media_BiblioCalibre_site.service
juin 06 09:39:32 yann-pc1 systemd[1537]: Started "Exécute le script si metadata.db a été modifié.".
juin 06 09:39:32 yann-pc1 media_BiblioCalibre_site.sh[11100]: ***DEPART*** Exécution script /home/yann/scripts/media_BiblioCalibre_site.sh
juin 06 09:39:32 yann-pc1 media_BiblioCalibre_site.sh[11100]: rsync -avz --progress --stats --human-readable --delete -e "ssh -p 55215 -i /home/yann/.ssh/lenovo-ed25519" /srv/media/BiblioCalibre leno@192.168.0.215:/sharenfs/multimedia/Divers/
juin 06 09:39:33 yann-pc1 media_BiblioCalibre_site.sh[11100]: ***FIN*** /home/yann/scripts/media_BiblioCalibre_site.sh exécuté en 0 mn 1 s
juin 06 09:44:40 yann-pc1 systemd[1537]: Started "Exécute le script si metadata.db a été modifié.".
juin 06 09:44:40 yann-pc1 media_BiblioCalibre_site.sh[11278]: ***DEPART*** Exécution script /home/yann/scripts/media_BiblioCalibre_site.sh
juin 06 09:44:40 yann-pc1 media_BiblioCalibre_site.sh[11278]: rsync -avz --progress --stats --human-readable --delete -e "ssh -p 55215 -i /home/yann/.ssh/lenovo-ed25519" /srv/media/BiblioCalibre leno@192.168.0.215:/sharenfs/multimedia/Divers/
juin 06 09:44:41 yann-pc1 media_BiblioCalibre_site.sh[11278]: ssh leno@192.168.0.215 -p 55215 -i /home/yann/.ssh/lenovo-ed25519 'sudo systemctl restart calibreweb'
juin 06 09:44:42 yann-pc1 media_BiblioCalibre_site.sh[11278]: ***FIN*** /home/yann/scripts/media_BiblioCalibre_site.sh exécuté en 0 mn 2 s

On peut créer un accès graphique sur le poste archlinux

~/.local/share/applications/suivi_BiblioCalibre_site.desktop
[Desktop Entry]
Version=1.1
Type=Application
Name=Synchro BiblioCalibre
Comment=synchro site rnmkcy.eu
Icon=xterm-color_48x48
Exec=xterm -rv -geometry 250x30+10+50 -T suivi_BiblioCalibre_site -e 'journalctl --user -u media_BiblioCalibre_site.service --no-pager; read -p "Touche Entrée pour sortir..."'
Actions=
Categories=Utility;
Path=
Terminal=false
StartupNotify=false
]]>
Moteur de routage (BRouter) + Visualisation et édition traces gpx (gpx.studio)2024-10-01T00:00:00+02:002024-10-01T00:00:00+02:00https://static.rnmkcy.eu/2024/10/01/Visualisation_et_edition_des_traces_gpx_studioTracer des itinéaires à l’aide du moteur de routage BRouter. Visualiser, éditer et créer des traces gpx avec un fork de l’application web https://gpx.studio

BRouter


BRouter est un moteur de routage conçu pour calculer des itinéraires optimaux en utilisant OpenStreetMap et des données d’élévation.
Comme alternative à la version en ligne, le serveur autonome de BRouter peut également être exécuté localement (https://github.com/nrenner/brouter-web).

Prérequis

Installer java

sudo apt install default-jre

Version : java --version

openjdk 17.0.12 2024-07-16
OpenJDK Runtime Environment (build 17.0.12+7-Debian-2deb12u1)
OpenJDK 64-Bit Server VM (build 17.0.12+7-Debian-2deb12u1, mixed mode, sharing)

Procédure installation

Télécharger et décompresser la dernière archive autonome (brouter-web-standalone.<version>.zip) à partir de https://github.com/nrenner/brouter-web/releases, par exemple pour Linux (remplacez ~/opt/ par votre répertoire d’installation préféré et 0.11.0 par la dernière version) :

sudo mkdir -p /opt/brouter
sudo chown $USER:$USER /opt/brouter
cd /opt/brouter
wget https://github.com/nrenner/brouter-web/releases/download/0.18.1/brouter-web-standalone.0.18.1.zip
unzip brouter-web-standalone.0.18.1.zip
rm brouter-web-standalone.0.18.1.zip

Données rd5

Télécharger un ou plusieurs fichiers de données rd5 depuis le download directory ou le grid map dans le répertoire /opt/segments4.

wget -P /opt/brouter/segments4 https://brouter.de/brouter/segments4/W5_N45.rd5
wget -P /opt/brouter/segments4 https://brouter.de/brouter/segments4/E0_N50.rd5
wget -P /opt/brouter/segments4 https://brouter.de/brouter/segments4/E0_N45.rd5
wget -P /opt/brouter/segments4 https://brouter.de/brouter/segments4/E5_N45.rd5
wget -P /opt/brouter/segments4 https://brouter.de/brouter/segments4/E5_N40.rd5
wget -P /opt/brouter/segments4 https://brouter.de/brouter/segments4/E0_N40.rd5
wget -P /opt/brouter/segments4 https://brouter.de/brouter/segments4/W5_N40.rd5

Veuillez patienter quelques minutes…

Le script de lancement

Création d’un script /opt/brouter/srv.sh , Port d’écoute 11955

#!/bin/sh

BINDADDRESS="localhost"
# BRouter standalone server
# java -cp brouter.jar btools.brouter.RouteServer <segmentdir> <profile-map> <customprofiledir> <port> <maxthreads> [bindaddress]

# maxRunningTime is the request timeout in seconds, set to 0 to disable timeout
JAVA_OPTS="-Xmx128M -Xms128M -Xmn8M -DmaxRunningTime=300"

# If paths are unset, first search in locations matching the directory structure
# as found in the official BRouter zip archive
CLASSPATH=${CLASSPATH:-"/opt/brouter/brouter.jar"}
SEGMENTSPATH=${SEGMENTSPATH:-"/opt/brouter/segments4"}
PROFILESPATH=${PROFILESPATH:-"/opt/brouter/profiles2"}
CUSTOMPROFILESPATH=${CUSTOMPROFILESPATH:-"/opt/brouter/customprofiles"}


java $JAVA_OPTS -cp $CLASSPATH btools.server.RouteServer "$SEGMENTSPATH" "$PROFILESPATH" "$CUSTOMPROFILESPATH" 11955 1 $BINDADDRESS

Le rendre exécutable

chmod +x /opt/brouter/srv.sh

Systemd service brouter

Créer un service brouter

sudo nano /etc/systemd/system/brouter.service
[Unit]
Description=brouter server
 
[Service]
Type=exec
User=leno
WorkingDirectory=/opt/brouter
ExecStart=sh /opt/brouter/srv.sh
 
[Install]
WantedBy=multi-user.target

Recharger , activer et lancer le service brouter

sudo systemctl daemon-reload
sudo systemctl enable brouter --now

Vérifier : systemctl status brouter

● brouter.service - brouter server
     Loaded: loaded (/etc/systemd/system/brouter.service; enabled; preset: enabled)
     Active: active (running) since Wed 2024-10-02 13:40:18 CEST; 32s ago
   Main PID: 283776 (sh)
      Tasks: 20 (limit: 14161)
     Memory: 28.5M
        CPU: 247ms
     CGroup: /system.slice/brouter.service
             ├─283776 sh /opt/brouter/srv.sh
             └─283778 java -Xmx128M -Xms128M -Xmn8M -DmaxRunningTime=300 -cp /opt/brouter/brouter.jar btools.server.RouteServer /opt/brouter/segments4 /opt/brouter/profiles2 /opt/brouter/customprofiles 11955 1 localhost

oct. 02 13:40:18 rnmkcy.eu systemd[1]: Starting brouter.service - brouter server...
oct. 02 13:40:18 rnmkcy.eu systemd[1]: Started brouter.service - brouter server.
oct. 02 13:40:18 rnmkcy.eu sh[283778]: BRouter 1.6.3 / 21122021

Proxy nginx

Proxy nginx brouter /etc/nginx/conf.d/routeur.rnmkcy.eu.conf

server {
    # ipv4 listening port/protocol
    listen       443 ssl http2;
    # ipv6 listening port/protocol
    listen           [::]:443 ssl http2;
    server_name  routeur.rnmkcy.eu;

    include /etc/nginx/conf.d/security.conf.inc;

  location / { 
      proxy_pass              http://127.0.0.1:11955 ;
  } 

}

Vérification et rechargement nginx

sudo nginx -t
sudo systemctl reload nginx

gpx.studio


https://github.com/gpxstudio

Cloner dans /sharenfs/rnmkcy/

cd /sharenfs/rnmkcy/
git clone https://github.com/gpxstudio/gpx.studio.git

Le code est divisé en deux parties:

  • gpx: une bibliothèque de typescript pour parser et manipuler des fichiers GPX,
  • site web: le site lui-même, qui est une application SvelteKit.

Vous aurez besoin de Node.js pour construire et exécuter ces deux parties.

Construction bibliothèque gpx

Construction bibliothèque gpx

cd gpx.studio/gpx
npm install
npm run build

Pour pouvoir charger la carte, vous devrez créer votre propre Mapbox access token et le stocker dans un fichier .env dans le répertoire website.

cd ../website
echo "PUBLIC_MAPBOX_TOKEN={YOUR_MAPBOX_TOKEN}" >> .env
npm install

Mode production

Les modifications des sources “website” avant construction
Dossier /sharenfs/rnmkcy/gpx.studio/website/src

Avant toute modification de la zone “website/src”, effectuer une sauvegarde des sources

mkdir $HOME/FreeUSB2To/rnmkcy.eu/sauvegardes/gpx_website_src
rsync -av /sharenfs/rnmkcy/gpx.studio/website/src $HOME/FreeUSB2To/rnmkcy.eu/sauvegardes/gpx_website_src

Les pages par défaut en fr

find /sharenfs/rnmkcy/gpx.studio/website/src/ -name "*" -type f -exec sed -i "s#'en'#'fr'#g" {} \;

Remplacer gpx.studio par gpx.rnmkcy.eu

find /sharenfs/rnmkcy/gpx.studio/website/src/ -name "*" -type f -exec sed -i "s#gpx.studio#gpx.rnmkcy.eu#g" {} \;

Modifier Export.svelte

			<div style="display: none"
				class="w-full flex flex-row items-center justify-center gap-4 border rounded-md p-2 bg-secondary"
			>
				<span>⚠️</span>
				<span class="max-w-[80%] text-sm">
					{$_('menu.support_message')}
				</span>
				<Button class="bg-support grow" href="https://ko-fi.com/gpxstudio" target="_blank">
					{$_('menu.support_button')}
					<span class="ml-2">🙏</span>
				</Button>
			</div>
			<div class="w-full flex flex-row flex-wrap gap-2">
				<Button
					variant="outline"
					class="grow"
					on:click={() => {
						if ($exportState === ExportState.SELECTION) {
							exportSelectedFiles(exclude);
						} else if ($exportState === ExportState.ALL) {
							exportAllFiles(exclude);
						}
						open = false;
						$exportState = ExportState.NONE;
					}}
				>
					<Download size="16" class="mr-1" />
					{#if $fileObservers.size === 1 || ($exportState === ExportState.SELECTION && $selection.size === 1)}
						{$_('menu.download_file')}
					{:else}
						{$_('menu.download_files')}
					{/if}
				</Button>
			</div>

Menu.svelte , supprimer button

			<Button
				variant="ghost"
				href="https://ko-fi.com/gpxstudio"
				target="_blank"
				class="cursor-default h-fit rounded-sm font-bold text-support hover:text-support px-3 py-0.5"
				aria-label={$_('menu.donate')}
			>
				<HeartHandshake size="18" class="md:hidden" />
				<span class="hidden md:flex flex-row items-center">
					{$_('menu.donate')}
					<Heart size="16" class="ml-1" fill="rgb(var(--support))" />
				</span>
			</Button>

Utilisation avec BRouter
Il faut modifier l’adresse de routing ligne 50 fichier Routing.ts
let url = https://routing.gpx.studio?lonlats=$…….`
Remplacer “https://routing.gpx.studio” par “https://routeur.rnmkcy.eu”

Fichier: /sharenfs/rnmkcy/gpx.studio/website/src/lib/components/toolbar/tools/routing/Routing.ts

# fichier /sharenfs/rnmkcy/gpx.studio/website/src/lib/components/toolbar/tools/routing/Routing.ts
# ligne 11
export const brouterProfiles: { [key: string]: string } = {
    bike: 'trekking',
    racing_bike: 'fastbike',
    foot: 'hiking-beta',
    water: 'river',
    railway: 'rail'
};

#ligne 47
    let url = `https://routeur.rnmkcy.eu?lonlats=${points.map(point => `${point.lon.toFixed(8)},${point.lat.toFixed(8)}`).join('|')}&profile=${brouterProfile + (privateRoads ? '-private' : '')}&format=geojson&alternativeidx=0`;

# On supprime '-private'

    let url = `https://routeur.rnmkcy.eu?lonlats=${points.map(point => `${point.lon.toFixed(8)},${point.lat.toFixed(8)}`).join('|')}&profile=${brouterProfile + (privateRoads ? '' : '')}&format=geojson&alternativeidx=0`;

Construire le site

cd /sharenfs/rnmkcy/gpx.studio/website
echo "PUBLIC_MAPBOX_TOKEN={YOUR_MAPBOX_TOKEN}" >> .env
npm install

export NODE_OPTIONS=--max-old-space-size=4096
npm run build

En cas d’erreur du type:
FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
Solution : export NODE_OPTIONS=--max-old-space-size=4096
Solved: How to Fix “JavaScript Heap Out of Memory Error”

gpx.rnmkcy.eu

Après la construction on copie le dossier build sous /var/www/gpx

sudo cp -r /sharenfs/rnmkcy/gpx.studio/website/build /var/www/gpx.studio
# les droits
sudo chown www-data:www-data -R /var/www/gpx.studio

Le site est accessible dans le dossier /sharenfs/rnmkcy/gpx.studio/website/build/
Configuration nginx /etc/nginx/conf.d/gpx.rnmkcy.eu.conf

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name gpx.rnmkcy.eu;

    include /etc/nginx/conf.d/security.conf.inc;
    root /var/www/gpx.studio/;

    location / {
      index index.html;
    }
}

Vérifier et recharger nginx

sudo nginx -t
sudo systemctl reload nginx

Accès par le lien https://gpx.rnmkcy.eu

Reconstruction

Après modification des sources, exécution du script rebuild

Création script /usr/local/bin/rebuild

sudo nano /usr/local/bin/rebuild
#!/bin/bash

echo "Départ exécution script"

# Construction
cd /sharenfs/rnmkcy/gpx.studio/website
rm -r build/  # si existant
export NODE_OPTIONS=--max-old-space-size=4096
npm run build

# Mise à jour site nginx
sudo rm -r /var/www/gpx.studio
sudo cp -r /sharenfs/rnmkcy/gpx.studio/website/build /var/www/gpx.studio
sudo chown www-data:www-data -R /var/www/gpx.studio
# Recharger nginx
sudo systemctl reload nginx
echo "Fin exécution script"

Droits en exécution

sudo chmod +x /usr/local/bin/rebuild

Crédits

Ce projet utilise les projets open source suivants:

Annexe

gpx.studio mode dev

npm run dev

Le serveur est accessible sur le lien http://localhost:5173/, q pour sortir

> website@0.0.1 dev
> vite dev

Forced re-optimization of dependencies

  VITE v5.4.8  ready in 1305 ms

  ➜  Local:   http://localhost:5173/
  ➜  Network: use --host to expose
  ➜  press h + enter to show help
Browserslist: caniuse-lite is outdated. Please run:
  npx update-browserslist-db@latest
  Why you should do it regularly: https://github.com/browserslist/update-db#readme

L’exécution a lieu sur un serveur, utilisation de SSH tunneling, sur un poste ayant un accès SSH, ouvrir un terminal et exécuter la commande suivante

ssh -L 9500:localhost:5173 leno@192.168.0.215 -p 55215 -i /home/yann/.ssh/lenovo-ed25519

Puis ouvrir le lien suivant dans un navigateur : localhost:9500

]]>
Visualisation et édition des traces gpx (gpxstudio.github.io)2024-09-30T00:00:00+02:002024-09-30T00:00:00+02:00https://static.rnmkcy.eu/2024/09/30/Visualisation_et_edition_des_traces_gpxAffichez, éditez et créez des fichiers GPX en ligne avec des outils avancés de planification et de traitement de fichiers, de magnifiques cartes et des visualisations de données détaillées

gpx.rnmkcy.eu


https://github.com/gpxstudio

Création dossier

sudo mkdir -p /sharenfs/rnmkcy/
sudo chown $USER:$USER -R /sharenfs/rnmkcy

Aller dans le dossier

cd /sharenfs/rnmkcy/

Cloner gpxstudio.github.io

Dépôt source

git clone https://github.com/gpxstudio/gpxstudio.github.io.git

Modifier la clé API mapbox ainsi que routing_url dans le fichier /sharenfs/rnmkcy/gpxstudio.github.io/res/config.json

{
    "mapbox": "pk.cG1yZTNwcnJ3MzkifQ.YZnNs9sZDBjcjkzZXJ4bHZ1GlvIiwiYSI6ImNrdTowYkn-xmoUszyIOIDYw",
    "mapbox_dev": "pk.eyJ1IjoiZ3B4c3R1ZGlvIiwiYSI6ImNrdHVoM2pjNTBodmUycG1yZTNwcnJ3MzkifQ.YZnNs9s9oCQPzoXAWs_SLg",
    "routing_url": "https://routeur.rnmkcy.eu"
}

Le fichier index.html

Le fichier layers

/sharenfs/rnmkcy/gpxstudio.github.io/js/layers.js
/sharenfs/rnmkcy/gpxstudio.github.io/js/buttons.js

Configuration nginx

Configuration nginx site https://gpx.rnmkcy.eu

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name gpx.rnmkcy.eu;

    include /etc/nginx/conf.d/security.conf.inc;
    root /sharenfs/rnmkcy/gpxstudio.github.io/;

    location / {
      index index.html;
    }
}

Recharger

sudo systemctl reload nginx


https://gpx.exemple.fr/l/fr/

Afficher les autres cartes

Pour afficher les autres cartes

brouter-web

https://github.com/nrenner/brouter-web

Comme alternative à la version en ligne, le serveur autonome de BRouter peut également être exécuté sur votre bureau local.

Prérequis:
Installer java

sudo apt install default-jre

Version : java --version

openjdk 17.0.12 2024-07-16
OpenJDK Runtime Environment (build 17.0.12+7-Debian-2deb12u1)
OpenJDK 64-Bit Server VM (build 17.0.12+7-Debian-2deb12u1, mixed mode, sharing)

Dossier
Créer le dossier brouter dans /sharenfs/rnmkcy/gpxstudio.github.io/

Procédure

  1. téléchargez et décompressez la dernière archive autonome (brouter-web-standalone.<version>.zip) à partir de https://github.com/nrenner/brouter-web/releases, par exemple pour Linux (remplacez ~/opt/ par votre répertoire d’installation préféré et 0.11.0 par la dernière version) :

     mkdir -p /sharenfs/rnmkcy/gpxstudio.github.io/brouter
     cd /sharenfs/rnmkcy/gpxstudio.github.io/brouter
     wget https://github.com/nrenner/brouter-web/releases/download/0.11.0/brouter-web-standalone.0.11.0.zip
     unzip brouter-web-standalone.0.11.0.zip
     rm brouter-web-standalone.0.11.0.zip
    
  2. téléchargez un ou plusieurs fichiers de données rd5 depuis le download directory ou le grid map dans le répertoire segments4.


https://brouter.de/brouter/segments4/W5_N45.rd5

La structure

/sharenfs/rnmkcy/gpxstudio.github.io/brouter
.
├── brouter.jar
├── brouter-web
├── brouter-web-standalone.0.11.0.zip
├── customprofiles
├── profile_developers_guide.txt
├── profiles2
├── run.sh
├── segments4
├── srv.sh
└── standalone

Les dossiers

leno@rnmkcy:/sharenfs/rnmkcy/gpxstudio.github.io/brouter$ ls
brouter.jar                        customprofiles                run.sh     standalone
brouter-web                        profile_developers_guide.txt  segments4
profiles2                     srv.sh

leno@rnmkcy:/sharenfs/rnmkcy/gpxstudio.github.io/brouter$ ls segments4/
W5_N45.rd5

leno@rnmkcy:/sharenfs/rnmkcy/gpxstudio.github.io/brouter$ ls profiles2/
car-eco.brf                  Hiking-Alpine-SAC6.brf          shortest.brf
car-fast.brf                 Hiking-Alpine-SAC6-private.brf  trekking.brf
car-vario.brf                hiking-beta.brf                 trekking-ignore-cr.brf
dummy.brf                    lookups.dat                     trekking-noferries.brf
fastbike-asia-pacific.brf    moped.brf                       trekking-nosteps.brf
fastbike.brf                 rail.brf                        trekking-steep.brf
fastbike-lowtraffic.brf      river.brf                       vm-forum-liegerad-schnell.brf
fastbike-verylowtraffic.brf  safety.brf                      vm-forum-velomobil-schnell.brf

brouter-server

Le bash /sharenfs/rnmkcy/gpxstudio.github.io/brouter/srv.sh

#!/bin/sh

BINDADDRESS="localhost"
# BRouter standalone server
# java -cp brouter.jar btools.brouter.RouteServer <segmentdir> <profile-map> <customprofiledir> <port> <maxthreads> [bindaddress]

# maxRunningTime is the request timeout in seconds, set to 0 to disable timeout
JAVA_OPTS="-Xmx128M -Xms128M -Xmn8M -DmaxRunningTime=300"

# If paths are unset, first search in locations matching the directory structure
# as found in the official BRouter zip archive
CLASSPATH=${CLASSPATH:-"/sharenfs/rnmkcy/gpxstudio.github.io/brouter/brouter.jar"}
SEGMENTSPATH=${SEGMENTSPATH:-"/sharenfs/rnmkcy/gpxstudio.github.io/brouter/segments4"}
PROFILESPATH=${PROFILESPATH:-"/sharenfs/rnmkcy/gpxstudio.github.io/brouter/profiles2"}
CUSTOMPROFILESPATH=${CUSTOMPROFILESPATH:-"/sharenfs/rnmkcy/gpxstudio.github.io/brouter/customprofiles"}


java $JAVA_OPTS -cp $CLASSPATH btools.server.RouteServer "$SEGMENTSPATH" "$PROFILESPATH" "$CUSTOMPROFILESPATH" 17777 1 $BINDADDRESS

Créer un service brouter

sudo nano /etc/systemd/system/brouter.service
[Unit]
Description=brouter server
 
[Service]
Type=exec
User=leno
WorkingDirectory=/sharenfs/rnmkcy/gpxstudio.github.io/brouter
ExecStart=sh /sharenfs/rnmkcy/gpxstudio.github.io/brouter/srv.sh
 
[Install]
WantedBy=multi-user.target

Recharger , activer et lancer le service brouter

sudo systemctl daemon-reload
sudo systemctl enable brouter --now

Serveur web brouter : https://routeur.rnmkcy.eu

server {
    # ipv4 listening port/protocol
    listen       443 ssl http2;
    # ipv6 listening port/protocol
    listen           [::]:443 ssl http2;
    server_name  routeur.rnmkcy.eu;

    include /etc/nginx/conf.d/security.conf.inc;

  location / { 
      proxy_pass              http://127.0.0.1:17777;
  } 

}

Vérifier et recharger nginx

sudo nginx -t
sudo systemctl reload nginx

Le site https://gpx.rnmkcy.eu est opérationnel

]]>
VSCodium, éditeur de code source multiplateforme et multi langage2024-09-24T00:00:00+02:002024-09-24T00:00:00+02:00https://static.rnmkcy.eu/2024/09/24/VSCodiumVSCodium, l’alternative open source à Microsoft Visual Studio Code

VSCodium

Prérequis

Installation sur archlinux yay -S vscodium-bin pose problème de dépendances installées par une autre application.
Installation de VSCodium se fera par flatpak

Installer flatpak sur archlinux

yay -S flatpak

Installation via flatpak

How to Install VSCodium on Ubuntu 24.04, 22.04, or 20.04

Installer VSCodium via la commande Flatpak
Avec le dépôt Flathub, nous pouvons passer à l’installation de VSCodium. Cela implique la commande flatpak install. Pour démarrer le déploiement de VSCodium, utilisez la commande suivante :

flatpak install flathub com.vscodium.codium -y

Cette commande récupère VSCodium directement depuis Flathub et assure une installation optimale sur votre système.

Méthode CLI pour lancer VSCodium

Pour ceux qui préfèrent une interaction rapide avec le terminal, utilisez la commande suivante pour lancer VSCodium

flatpak run com.vscodium.codium

Si vous voulez lancer codium /path/to/file du terminal hôte, ajoutez simplement ceci dans le fichier bashrc

alias codium="flatpak run com.vscodium.codium "

Fichier de bureau (.desktop)

Créer un fichier bureau ~/.local/share/applications/com.vscodium.codium.desktop

[Desktop Entry]
Version=1.1
Type=Application
Name=VSCodium
GenericName=Editeur de code source multiplateforme et multi langage
Comment=Gestionnaire de bases de données universel et Client SQL.
Icon=vscodium
Exec=/usr/bin/flatpak run com.vscodium.codium
Categories=Development;IDE;

Mise à jour VSCodium

Pour maintenir VSCodium à jour, vous devez régulièrement vérifier la présence de mises à jour. Linux rend ce processus relativement simple.

flatpak update

Les commandes ci-dessus vérifieront en bloc les mises à jour de VSCodium et de tous les paquets installés à l’aide du gestionnaire de paquets de votre choix.

Supprimer VSCodium

Pour les installations Flatpak de VSCodium, exécutez la commande suivante pour supprimer le logiciel :

flatpak uninstall com.vscodium.codium

Utilisation

Première utilisation de VSCodium

Pour mettre VSCodium en français

  1. Menu View>Command Palet (ou Ctrl+Maj+P).
  2. Saisir Configure Display Language dans la zone de recherche qui s’est ouverte, puis valider.
  3. Choisir français puis Cliquez sur le bouton Restart qui est alors proposé.




Python

A gauche, dans la rubrique “Extension” (ou Ctrl+Maj+X), installer l’extension Python (de l’éditeur ms-python avec comme descriptif : IntelliSense (Pylance), Linting, Debugging (multi-threaded, remote), code formatting, …)

Aller dans le menu Affichage>Palette de commandes... (ou Ctrl+Maj+P).

Saisir Python: Select Interpreter dans la zone de recherche qui s’est ouverte, puis valider.

Choisir à présent l’interpréteur (ex : Python 3.11)

Menu Fichier>Nouveau fichier..., saisir main.py puis appuyer sur la touche Entrée.
Choisir toujours le même dossier, par exemple : ~/media/devel/vscodium/ puis valider.

Saisir le code source d’un premier programme simple, comme :
print("Bonjour !")
puis cliquer sur le bouton d’exécution (de forme triangulaire : Run Python File) en haut à droite.

Cela devrait afficher en bas de l’écran le Terminal, avec le texte “Bonjour !”.

Markdown

Astuces pour VSCodium

Changer la couleur des titres Markdown

Quand on commence à créer des fichiers Markdown à la pelle, on a un peu tendance à voir ses yeux couler sur son clavier, notamment à cause des titres de niveau 1, de niveau 2, de niveau 3, etc., qui, par défaut, ont tous la même couleur ! Faut-il installer une extension pour changer ça ? Non !

Ouvrir les préférences (raccourci Ctrl + ,

Dans la barre de recherche, cherche editor.tokenColorCustomizations
Clic sur “Modifier dans settings.json”
Là, VSCode t’as prérempli le paramètre :

Tu peux alors remplacer ces 5 lignes par cette nouvelle configuration, qui va appliquer des couleurs sur tes titres Markdown de niveaux 2, 3 et 4 :

"editor.tokenColorCustomizations": {
    "textMateRules": [
        {
            "scope": "heading.2.markdown entity.name.section.markdown, heading.2.markdown punctuation.definition.heading.markdown",
            "settings": {
                "foreground": "#FF6B6B",
            }
        },
        {
            "scope": "heading.3.markdown entity.name.section.markdown, heading.3.markdown punctuation.definition.heading.markdown",
            "settings": {
                "foreground": "#FABE28",
            }
        },
        {
            "scope": "heading.4.markdown entity.name.section.markdown, heading.4.markdown punctuation.definition.heading.markdown",
            "settings": {
                "foreground": "#4ECDC4",
            }
        }
    ]
}

Sauvegarder

Résultat

]]>
Serveur vpn wireguard2024-09-15T00:00:00+02:002024-09-15T00:00:00+02:00https://static.rnmkcy.eu/2024/09/15/Ubound_Wireguard_Wg-WebWireGuard est un serveur VPN à code source ouvert, gratuit, moderne et rapide, doté d’un chiffrement de pointe. Il est plus rapide et plus simple que l’IPSec et l’OpenVPN. Il est associé à Unbound qui améliore le DNS et à un parefeu UFW pour la sécurité.

Unbound

Un problème majeur avec beaucoup de configurations VPN/Wireguard est que le DNS n’est pas suffisant. Cela finit par une fuite de connexion client et de détails d’emplacement (test via le site http://ipleak.net/

Pour l’installation complète Unbound qui ajoute la mise à jour des serveurs “racine”, le blocage des publicités et des DMP (Data Management Platforms), voir lien Résolveur DNS Unbound

Nous allons sécuriser le trafic DNS avec la solution unbound qui offre les caractéristiques suivantes

  • Léger et rapide
  • Facile à installer et à configurer
  • Orienté sécurité
  • Prise en charge DNSSEC

Nous allons le configurer de manière à contrer les fuites DNS, les attaques plus sophistiquées comme la fausse configuration de proxy, les routeurs escrocs et toutes sortes d’attaques MITM sur HTTPS et autres protocoles.

Nous installons unbound sur le serveur

ATTENTION : Le programme resolvconf est en général seulement nécessaire quand un système a plusieurs programmes qui ont besoin de modifier de façon dynamique les informations sur les serveurs de noms de domaine. Sur un système simple où les serveurs de noms de domaine ne changent pas souvent ou bien ne sont modifiés que par un programme, le fichier de configuration **resolv.conf** est suffisant.
Il faut installer resolvconf, sinon on a une erreur unbound-resolvconf
Une fois le paquet « resolvconf » installé, il ne faut plus modifier le fichier « /etc/resolv.conf », car le contenu de celui-ci sera automatiquement géré et remplacé par resolvconf

Installation des outils dns, des paquets Unbound et resolv :

sudo apt install unbound resolvconf -y

Ajout d’un fichier de configuration unbound-wg.conf

sudo nano /etc/unbound/unbound.conf.d/unbound-wg.conf 
server:
    # ne rien enregistrer dans les journaux hormis les erreurs
    verbosity: 0

    # n'écouter que sur l'interface locale en IPv4
    # unbound nécessite d'être relancé si modifié
    interface: 127.0.0.1

    port: 53

    # refuser tout le monde sauf les connexions locales (pas forcément
    # nécessaire vu que le serveur n'écoute que sur la boucle locale en IPv4)
    access-control: 0.0.0.0/0 refuse
    access-control: 127.0.0.1/32 allow

    # par défaut, unbound ne log pas les requêtes ni les réponses
    # on peut le rappeler au cas où
    log-queries: no
    log-replies: no

    # imposer la QNAME minimisation (RFC 7816)
    # Pour mieux protéger la vie privée
    qname-minimisation: yes
    # même si le serveur faisant autorité ne le veut pas
    #   après discussion, il est possible que cette option ne soit
    #   pas recommandée dans le cadre d'un résolveur ouvert
    qname-minimisation-strict: yes

Vérifier la validité du fichier de configuration avec la commande suivante :

sudo unbound-checkconf /etc/unbound/unbound.conf.d/unbound-wg.conf

unbound-checkconf: no errors in /etc/unbound/unbound.conf.d/unbound-wg.conf

Toutes les règles disponibles sont détaillées dans le manuel man 5 unbound.conf ou dans le manuel en ligne.

Démarrer le résolveur.

sudo systemctl start unbound.service

S’assurer que tout fonctionne bien à l’aide de la commande dig disponible dans le paquet bind9-dnsutils ou dnsutils. Pour cela il suffit de spécifier l’adresse de notre résolveur, ici 127.0.0.1 ou ::1 et d’effectuer une requête DNS. Ici on demande à Unbound de récupérer l’enregistrement AAAA associé au nom de domaine afnic.fr.

dig @127.0.0.1 A afnic.fr

Résultat commande

; <<>> DiG 9.18.28-1~deb12u2-Debian <<>> @127.0.0.1 A afnic.fr
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37353
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;afnic.fr.			IN	A

;; ANSWER SECTION:
afnic.fr.		600	IN	A	51.178.83.21

;; Query time: 232 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Sun Sep 15 14:53:14 GMT 2024
;; MSG SIZE  rcvd: 53

Une réponse est bien renvoyée. Le résolveur fonctionne.Vérifier que tout est opérationnel en IPv4, et en utilisant UDP et TCP.

$ dig +notcp @127.0.0.1 A afnic.fr  # connexion UDP en IPv4 au résolveur
$ dig +tcp @127.0.0.1 A afnic.fr    # connexion TCP en IPv4 au résolveur

À ce stade, un résolveur Unbound est configuré en local et écoute sur le port 53. Il peut donc être utilisé pour résoudre toutes les requêtes en provenance de la machine.

Parefeu UFW

Installation

sudo apt install ufw

Ajout des règles pour ssh et wireguard

sudo ufw allow 52255/udp # wireguard
sudo ufw allow 55027/tcp # ssh
sudo ufw allow DNS

Activation

sudo ufw enable

Status sudo ufw status

Status: active

To                         Action      From
--                         ------      ----
55027/tcp                  ALLOW       Anywhere                  
52255/udp                  ALLOW       Anywhere                  
DNS                        ALLOW       Anywhere                  
55027/tcp (v6)             ALLOW       Anywhere (v6)             
52255/udp (v6)             ALLOW       Anywhere (v6)             
DNS (v6)                   ALLOW       Anywhere (v6)             

Désactiver les règles IPv6 utilisant UFW sur Linux
Le désactivation des règles IPv6 dans UFW est relativement facile. Ouvrez simplement le fichier de configuration UFW /etc/default/ufw
Remplacer IPV6=yes par IPV6=no
Recharger : sudo ufw reload

Wireguard

wireguard
WireGuard est un serveur VPN à code source ouvert, gratuit, moderne et rapide, doté d’un chiffrement de pointe. Il est plus rapide et plus simple que l’IPSec et l’OpenVPN

Wireguard est dans le noyau 5.6+

sudo apt install wireguard

Autorisations

**Autoriser le serveur Wireguard à relayer les paquets **

Autoriser le serveur Wireguard à relayer les paquets venant de ces clients vers l’internet et de traiter les paquets retours (modifier /etc/sysctl.conf)
On passe en mode su : sudo -s

sed -i 's/^#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
sed -i 's/^#net.ipv6.conf.all.forwarding=1/net.ipv6.conf.all.forwarding=1/' /etc/sysctl.conf
sysctl -p # prise en compte immédiate

Résultat

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1

Générer une paire de clés

On passe en mode su : sudo -s

On se positionne dans le dossier /etc/wireguard/

cd /etc/wireguard

WireGuard repose sur une authentification par clé publique/privée (cryptographie asymétrique), vous devez donc créer ces clés avec les sous-commandes wg genkey et wg pubkey
La création de la clé privée se fait avec wg genkey et la clé publique est générée en la canalisant dans wg pubkey

umask 077; wg genkey | tee wg0.key | wg pubkey > wg0.pub

Configuration wg0.conf

Fichier de configuration /etc/wireguard/wg0.conf

Récupérer le nom de la carte réseau et l’adresse IP, ip a :
carte réseau ens3
adresse IP 91.194.161.27

La première étape consiste à choisir une plage IPV4 privée, Random IPV4 Private Address Generator, qui sera utilisée par le serveur : 10.30.55.0/8

Pour une adresse IPV6 Local IPv6 Address Generator : fd27:4ae2:2ed9::/64

Les adresses locales uniques (ULA) IPv6 sont utilisées de la même manière que les adresses locales IPv4, telles que 10.0.0.0/8. Les adresses privées IPv4 ont été définies par la RFC 1918, tandis que les ULA IPv6 ont été définies par la RFC 4193. Contrairement à leur équivalent IPv4, les adresses locales IPv6 ont une partie aléatoire de 40 bits, ce qui les rend uniques. L’objectif des adresses locales IPv6 est que si vous connectez deux réseaux IPv6 privés ensemble - tels que deux sites privés connectés par VPN - il est très peu probable que vous rencontriez des conflits d’adressage.

Le serveur aura l’adresse IP suivante: 10.30.55.1 . Il est également nécessaire de choisir un port, qui sera exposé publiquement, pour que le serveur écoute.Le port de documentation standard est généralement 51820.

Créer le fichier /etc/wireguard/wg0.conf serveur wg0

/etc/wireguard/wg0.conf
[Interface]
Address = 10.30.55.1, fd27:4ae2:2ed9::1
ListenPort = 52255
PostUp = ufw route allow in on wg0 out on ens3
PostUp = iptables -t nat -I POSTROUTING -o ens3 -j MASQUERADE; ip6tables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PreDown = ufw route delete allow in on wg0 out on ens3
PreDown = iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE; ip6tables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
# wg0_PRIVATE_KEY
PrivateKey = 5Z........................................mk=
DNS = 10.30.55.1, fd27:4ae2:2ed9::1

Address , fixer l’adresse IP privée du serveur à l’intérieur du VPN.Les adresses du réseau VPN de 10.30.55.0 à 10.30.55.255 sont fixées par le masque /24 et fd27:4ae2:2ed9::1 à fd27:4ae2:2ed9::ffff sont fixées par le masque /128
PostUp , pour la mise en place des règles iptables de translation d’adresses à l’activation du VPN (autoriser le routage des paquets réseau venant des clients vers internet)
PostDown , pour la suppression des règles iptables de translation d’adresses à l’arrêt du VPN
PrivateKey , clé privée du serveur (wg0.key)
DNS = Pour utiliser un pair comme serveur DNS, définissez DNS = wireguard_internal_ip_address_of_peer dans la section [Interface]. Les domaines de recherche sont également définis avec l’option DNS =. Séparez toutes les valeurs dans la liste par des virgules. AllowedIPs = Pour acheminer tout le trafic du tunnel vers un pair spécifique, ajoutez l’itinéraire par défaut (0.0.0.0/0 pour IPv4 et ::/0 pour IPv6) à AllowedIPs. Par exemple, AllowedIPs = 0.0.0.0/0, ::/0. wg-quick se chargera automatiquement de configurer le routage correct et fwmark [5] pour que le réseau fonctionne toujours.

Modifier les droits des fichiers wg0.conf (lecture uniquement par “root”)

chmod 600 /etc/wireguard/wg0.conf

Activer wireguard

Pour une activation permanente de wireguard

sudo systemctl enable wg-quick@wg0.service

Modifier unbound

Modifier le fichier de configuration unbound-wg.conf pout y ajouter l’adresse IP privée 10.30.55.1

sudo nano /etc/unbound/unbound.conf.d/unbound-wg.conf 
server:
    # ne rien enregistrer dans les journaux hormis les erreurs
    verbosity: 0

    # n'écouter que sur l'interface locale en IPv4
    # unbound nécessite d'être relancé si modifié
    interface: 127.0.0.1
    interface: 10.30.55.1

    port: 53

    # refuser tout le monde sauf les connexions locales (pas forcément
    # nécessaire vu que le serveur n'écoute que sur la boucle locale en IPv4)
    access-control: 0.0.0.0/0 refuse
    access-control: 127.0.0.1/32 allow
    access-control: 10.30.55.0/24 allow

    # par défaut, unbound ne log pas les requêtes ni les réponses
    # on peut le rappeler au cas où
    log-queries: no
    log-replies: no

    # imposer la QNAME minimisation (RFC 7816)
    # Pour mieux protéger la vie privée
    qname-minimisation: yes
    # même si le serveur faisant autorité ne le veut pas
    #   après discussion, il est possible que cette option ne soit
    #   pas recommandée dans le cadre d'un résolveur ouvert
    qname-minimisation-strict: yes

Relancer unbound

sudo systemctl restart unbound

Wireguard wg-gen-web

Le but est d’exécuter Wg Gen Web dans un espace et WireGuard sur le système hôte.wg-gen-web (original)

Caractéristiques

  • Libre-service et basé sur le web
  • QR-Code pour une configuration pratique du client mobile
  • Support optionnel multi-utilisateurs derrière un proxy d’authentification
  • Prise en charge de l’authentification simple
  • Zéro dépendance externe - juste un binaire unique utilisant le module noyau wireguard
  • Déploiement de binaires et de conteneurs

Prérequis

Installer go

cd ~
wget https://go.dev/dl/go1.23.1.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.23.1.linux-amd64.tar.gz
echo "export PATH=$PATH:/usr/local/go/bin"  >> ~/.bashrc
source ~/.bashrc

Version go version –> go version go1.23.1 linux/amd64

Installer node

curl -fsSL https://deb.nodesource.com/setup_20.x | sudo bash -
sudo apt-get install -y nodejs

Versions node -v && npm -v
v20.17.0
10.8.2

Vous devez avoir WireGuard installé sur la machine qui exécute wg-ui

Application web

Création dossier application web

sudo mkdir -p /opt/appwg

Construction du site

cd ~/wg-webui-fr/
go mod tidy
go build -o wg-ui main.go
cd ui
export NODE_OPTIONS=--openssl-legacy-provider
export VUE_APP_API_BASE_URL=http://localhost:8080/api/v1.0
npm install
npm run build
sudo mkdir -p /opt/appwg/ui
sudo cp ../wg-ui /opt/appwg
sudo cp -r dist /opt/appwg/ui/

Environnement

l’autorisation à 2 facteurs n’est pas utilisée, le fichier /opt/appwg/.env se résume à remplir la zone correspondante SMTP de la messagerie et désactiver l’autorisation

/opt/appwg/.env
SERVER=127.0.0.1
PORT=8090
# Gin framework release mode
#GIN_MODE=release
GIN_MODE=debug

WG_CONF_DIR=/etc/wireguard
WG_INTERFACE_NAME=wg0.conf

SMTP_HOST=127.0.0.1
SMTP_PORT=587
SMTP_USERNAME=""
SMTP_PASSWORD=""
SMTP_FROM="wg-web-ui@wg-web-ui.xyz"

On modifie dans /opt/appwg/.env ,le paramètre WG_CONF_DIR=./wireguard → WG_CONF_DIR=/etc/wireguard

Créer service wgweb

Créer un service systemd wgweb qui lance le serveur avec journalisation

sudo nano /etc/systemd/system/wgweb.service
[Unit]
Description=Wireguard web
After=network.target

[Service]

Type=simple

Restart=on-failure
RestartSec=10

WorkingDirectory=/opt/appwg
ExecStart=/opt/appwg/wg-ui

[Install]
WantedBy=multi-user.target

Créer et configurer server.json

wireguard (wg0.conf et server.json)

Modifier les fichiers existants pour être identique au paramétrage de wireguard wg0.conf situé sous /etc/wireguard

/etc/wireguard/server.json 
{
 "address": [
    "10.30.55.1", 
    "fd27:4ae2:2ed9::1"
  ],
  "listenPort": 51820,
  "mtu": 0,
  "privateKey": "A----------------------------------------c=",
  "publicKey": "v----------------------------------------c=",
  "endpoint": "91.194.161.27:52255",
  "persistentKeepalive": 16,
  "dns": [
    "10.30.55.1", 
    "fd27:4ae2:2ed9::1"
  ],
  "allowedips": [
    "0.0.0.0/0",
    "::/0"
  ],
  "preUp": "",
  "postUp": "ufw route allow in on wg0 out on ens3; iptables -t nat -I POSTROUTING -o ens3 -j MASQUERADE; ip6tables -t nat -A POSTROUTING -o ens3 -j MASQUERADE",
  "preDown": "ufw route delete allow in on wg0 out on ens3; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE; ip6tables -t nat -D POSTROUTING -o ens3 -j MASQUERADE",
  "postDown": "",
  "updatedBy": "Yann",
  "created": "2024-09-15T18:00:50.589913433Z",
  "updated": "2024-09-15T18:00:50.589913433Z"
}

Recharger systemd puis démarrer le service:

sudo systemctl daemon-reload
sudo systemctl start wgweb.service
sudo systemctl status wgweb.service
● wgweb.service - Wireguard web
[...]
sept. 15 16:57:25 icevps.xyz wg-ui[14292]: [GIN-debug] Listening and serving HTTP on 127.0.0.1:8090

Démarrer service wireguard

Lancer wireguard

sudo systemctl start wg-quick@wg0.service

Accès page Web Wireguard

On utilise la redirection port SSH (Tunneling SSH)

Vérification,ouvrir un terminal sur le client linux qui dispose des clés ssh et lancer la commande

ssh -L 9500:localhost:8090 hallmar@91.194.161.27 -p 55027 -i /home/yann/.ssh/icevps_xyz

Ouvrir un navigateur sur le client et saisir localhost:9500 pour afficher le gestionnaire web de wireguard

wg-cx11 Activer le service si tout fonctionne

sudo systemctl enable wgweb.service

Reconstruire wg-web

On peut recompiler l’application wg-web suite à des modifications

Procédure de reconstruction $HOME/reconstruire.sh

cat > $HOME/reconstruire.sh << EOF
#!/bin/bash

echo "Arrêt wgweb.service"
sudo systemctl stop wgweb.service
echo "Sauvegarde"
sudo cp /opt/appwg/.env _.env
echo "Supprimer appwg"
sudo rm -r /opt/appwg
echo "Construire wg-ui main.go"
cd $HOME/wg-webui-fr/
go mod tidy
go build -o wg-ui main.go
cd ui
export NODE_OPTIONS=--openssl-legacy-provider
export VUE_APP_API_BASE_URL=http://localhost:8080/api/v1.0
npm install
npm run build
sudo mkdir -p /opt/appwg/ui
sudo cp ../wg-ui /opt/appwg
sudo cp -r dist /opt/appwg/ui/
echo "Restaurer environnement"
sudo cp $HOME/_.env /opt/appwg/.env
echo "Démarrer le service"
sudo systemctl start wgweb.service
echo "FIN reconstruction"
EOF

La rendre exécutable

chmod +x $HOME/reconstruire.sh
]]>
Mullvad 20242024-09-14T00:00:00+02:002024-09-14T00:00:00+02:00https://static.rnmkcy.eu/2024/09/14/Mullvad-2024Mullvad VPN/Wireguard : Débits excellents en filaire et 4G, Gère IPv6, Obfuscation et protection post-quantique avec WireGuard, Confidentialité irréprochable, Vraie interface graphique pour Linux

Mullvad

Mullvad VPN ne propose pas d’extension pour navigateur. À défaut, le fournisseur a développé son propre navigateur en collaboration avec Tor Project, Mullvad Browser, disponible sur l’ensemble des systèmes d’exploitation desktop.

On peut installer Mullvad sur un routeur, ce qui leur permet de profiter de la protection VPN sur tous leurs équipements connectés au réseau, contre cinq appareils autorisés en temps normal. Des explications détaillées pour plusieurs modèles sont disponibles dans un guide dédié (en anglais).

Protection des données et vie privée

Le code de Mullvad VPN est open source et disponible sur GitHub.
Mullvad semble être l’un des VPN les plus à cheval sur l’anonymat de ses utilisateurs.

Chiffrement, protocole et DNS

Mullvad VPN utilise les protocoles suivants :

  • OpenVPN TCP/UDP (Windows, macOS, Linux)
  • WireGuard (tous les systèmes d’exploitation desktop et mobiles pris en charge)

Concernant WireGuard, Mullvad propose quelques réglages avancés

  • permettant de sélectionner des ports préconfigurés ou personnalisés
  • obfusquer le trafic (dissimulation du trafic VPN dans du trafic HTTPS standard via UDP sur TCP)
  • activer une protection contre les attaques quantiques (échange supplémentaire de clés résistantes aux qbits)
  • activer la prise en charge IPv6 pour les appareils dépossédés d’IPv4
  • forcer les connexions multihop (trafic routé par plusieurs serveurs VPN compatibles WireGuard pour brouiller les tentatives de pistage).

Mullvad VPN dispose de ses propres serveurs DNS pour garantir un niveau de confidentialité élevé sur Internet. En les mettant à l’épreuve avec dnsleaktest.com, nous n’avons pas repéré de fuites. Pour le chiffrement, ce VPN utilise le standard AES (Advanced Encryption Standard) 256.

Streaming vidéo

Côté streaming, il y a du mieux avec la version 2024 de Mullvad, nous avons débloqué sans problèmes les catalogues US et UK des services de SVoD Netflix et BBC.
En revanche, Amazon détecte toujours l’utilisation du VPN. Si vous êtes abonné à Prime Video et souhaitez poursuivre vos séries à l’étranger, il faudra opter pour un fournisseur concurrent de Mullvad, comme Surfshark, NordVPN ou Proton VPN.

Torrents/P2P

Mullvad VPN ne propose pas de serveurs spécifiques pour le téléchargement de fichiers torrent, mais nous n’avons rencontré aucune difficulté pour télécharger une image ISO d’une distribution Linux en mode P2P.

Options avancées

De prime abord, Mullvad VPN propose peu d’options avancées et le service lui-même est assez basique. Il est toutefois possible de retrouver quelques fonctionnalités classiques

  • le kill switch qui coupe la connexion Internet en cas de panne du VPN pour ne pas compromettre vos données
  • le split tunneling qui permet d’exclure le trafic de certaines applications du tunnel VPN.
  • dans les paramètres de connexion du VPN, on découvre aussi un mode de verrouillage, sorte de kill switch très strict qui bloque toute connexion entrante et sortante lorsque le VPN est volontairement désactivé
  • un mode multihop (compatible WireGuard uniquement, sans possibilité de sélectionner manuellement les serveurs entrants et sortants)
  • des options de dissimulation du trafic et de résistance aux attaques quantiques
  • Divers bloqueurs de contenu DNS font office de bloqueurs de pub, de traqueurs, de malwares et de contrôle parental.

Mullvad fait partie des rares services capables de fonctionner en IPv6.

Conclusion

Mullvad a connu de nettes améliorations.

  • Toujours à la pointe en matière de débits (filaires et 4G, en France et à l’étranger), il surpasse de loin ses concurrents et s’impose comme le service VPN le plus rapide.
  • On apprécie ses engagements forts pour la confidentialité et la sécurité des données privées qui, outre les protections VPN traditionnelles, bénéficient d’un soin particulier apporté par la mise à disposition de fonctionnalités avancées, peut-être trop bien cachées.
  • Si l’on devait lui trouver des défauts, on insisterait principalement sur son interface manquant de flexibilité et son organisation en sous-menus trop complexe.
  • Dans l’ensemble, Mullvad gagnerait à être davantage connu.

Archlinux Mullvad

Installation

yay -S mullvad-vpn-bin

Si erreur gpg

[yano@e6230 ~]$ gpg --keyserver hkps://keys.openpgp.org --recv-keys  A1198702FC3E0A09A9AE5B75D5A1D4F266DE8DDF
gpg: clef D5A1D4F266DE8DDF : clef publique « Mullvad (code signing) <admin@mullvad.net> » importée
gpg:       Quantité totale traitée : 1
gpg:                     importées : 1

Paramétrage


]]>