PC1 - EndeavourOS KDE Plasma
EndeavourOS est une distribution GNU/Linux basée sur Arch Linux.
PC1
Description matériel mini tour PC1
Le réseau 2.5G est connecté
EndeavourOS USB Live
Création d’une clé USB EndeavourOS bootable
Dans un terminal linux
Télécharger le dernier fichier iSO : https://endeavouros.com/
EndeavourOS_Ganymede-Neo-2026.01.12.iso
Vérifier checksum
1
sha512sum -c EndeavourOS_Ganymede-Neo-2026.01.12.iso.sha512sum
Résultat de la commande ci dessus après quelques minutes
EndeavourOS_Ganymede-Neo-2026.01.12.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 USV est /dev/sdc
1
sudo dd if=EndeavourOS_Ganymede-Neo-2026.01.12.iso of=/dev/sdc bs=4M status=progress
Brancher le réseau filaire sur le DELL
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: USB, Partition 1
Vous arrivez sur la page de sélection

Valider le choix par défaut
Changer le language: Change Language –> French fr-FR
Ouvrir un terminal dans le live endeavour
Pour un accès sur la machine via SSH depuis un poste distant
Lancer le service :sudo systemctl start sshd
Créer un mot de passe à liveuser :sudo passwd liveuser
Relever l’adresse ip de la machine :ip a
Arrêter le parefeu:sudo systemctl stop firewalld
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) :
1
sgdisk --zap-all /dev/nvme0n1
Installer EndeavourOS
Basculer en Français
Démarrer installateur
Installation “en ligne”
Choix Plasma KDE
Pas de firewall
Printing support
systemd-boot
Utilisateur yann
Ordi pc1
Mot passe utilisateur identique admin
A la fin de l’installation
Valider “Redémarrer maintenant” et “Terminé”
EndeavourOS
Premier démarrage
Au message “Please enter passphrase for disk endeavouros…”, saisir la phrase mot de passe pour déchiffrer le disque
Sur la page de connexion utilisateur yann, saisir le mot de passe
Mise à jour Système
Au choix
A-Ligne de commande dans un terminal
1
yay -Syu
Activer SSH
Pour un accès sur la machine via SSH depuis un poste distant
Lancer et activer le service : sudo systemctl enable sshd --now
Relever l’adresse ip de la machine : ip a 192.168.0.20 dans notre cas
Se connecter depuis un poste distant ssh yann@192.168.0.20
Utilisateur droits sudo
Modifier sudoers pour accès sudo sans mot de passe à l’utilisateur yann
1
2
sudo -s # mot de passe root identique utilisateur
echo "yann ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/20-yann
Bluetooth
Activer Bluetooth
Bluetooth n’est pas actif par défaut, en raison de plusieurs risques de sécurité et pour éviter une consommation d’énergie inutile.
Les packages nécessaires sont installés, mais ils sont désactivés.
Pour pouvoir utiliser Bluetooth, vous devez démarrer le service ou l’activer si vous avez besoin que Bluetooth soit exécuté à chaque démarrage :
1
sudo systemctl enable bluetooth.service --now # à activer par défaut, s'exécutera après chaque démarrage.
Souris Bluetooth Pebble Mouse 2 M350s
Basculez entre 3 de vos dispositifs d’une simple pression sur le bouton Easy-Switch.
Position 1 pour le portable DELL latitude e6230

Pour effacer une configuration existante de la souris bluetooth , garder enfoncer le bouton Easy-Switch jusqu’au clignotement rapide de la led
Pour ajouter la souris bluetooth au portable DELL, clic droit sur l’icône bluetooth de la barre des tâches, Périphériques puis Rechercher et lorsque l’appareil est détecté , il faut l’appairer

Ecouteurs bluetooth

Soundcore Liberty Air 2
Utiliser le gestionnaire bluetooth et la recherche

Lorsque le périphérique est détecté, il faut l’appairer, clic-droit –> Appairer
Après appairage

Pour que le périphèrique fonctionne correctement, il est IMPERATIF de redémarrer la machine
Après redémarrage, il faut séléctionner le profil audio

Terminal historique ligne de commande
Ajoutez la recherche d’historique de la ligne de commande au terminal Se connecter en utilisateur debian 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.
1
2
3
# 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
Créer les dossiers et liens
1
2
3
4
5
6
7
8
9
sudo mkdir -p /srv/
sudo chown $USER:$USER -R /srv/
sudo ln -s $HOME/media /srv/
mkdir -p $HOME/{.ssh,.keepassx,Private}
mkdir -p /srv/media/Documents/Dossiers-Locaux-Thunderbird
mkdir -p /srv/media/Notes
mkdir -p $HOME/Private/.borg
sudo mkdir -p /mnt/ssd
sudo chown $USER:$USER -R /mnt/ssd
Disques UUID
lsblk
1
2
3
4
5
6
7
8
9
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 447,1G 0 disk
└─sda1 8:1 0 447,1G 0 part
sdb 8:16 0 476,9G 0 disk
└─sdb1 8:17 0 476,9G 0 part
└─ssd--512-virtuel 253:0 0 476,9G 0 lvm
nvme0n1 259:0 0 1,9T 0 disk
├─nvme0n1p1 259:1 0 2G 0 part /efi
└─nvme0n1p2 259:2 0 1,9T 0 part /
Les UUID
1
sudo blkid
1
2
3
4
5
/dev/nvme0n1p1: UUID="2D5E-1EE0" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI" PARTUUID="b8b29a24-a435-4457-b5c0-d355976b9d53"
/dev/nvme0n1p2: LABEL="endeavouros" UUID="5f9512d6-edc5-4407-baf4-3cfc0e3df88e" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="endeavouros" PARTUUID="7d5e3e49-d792-4f1d-abfc-c4b48e349e5a"
/dev/sdb1: UUID="AYko64-7Ysg-IK1P-2hCq-9MUo-VjQl-4NOuWY" TYPE="LVM2_member" PARTUUID="19dd6163-01"
/dev/mapper/ssd--512-virtuel: UUID="84bc1aa9-23ac-4530-b861-bc33171b7b42" BLOCK_SIZE="4096" TYPE="ext4"
/dev/sda1: UUID="e33c1e26-5c19-4647-980b-98db4d92591b" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="Linux filesystem" PARTUUID="c153121f-615f-4fd5-aad7-e83501798e1f"
Virtuel
Créer le dossier
1
2
3
4
5
# virtuel
sudo mkdir /srv/virtuel
sudo chown $USER:$USER -R /srv/virtuel
sudo ln -s /srv/virtuel /virtuel
sudo ln -s /srv/virtuel $HOME/virtuel
Modifier /etc/fstab
1
sudo nano /etc/fstab
Ajouter
1
2
3
4
# /dev/mapper/ssd--512-virtuel
UUID=84bc1aa9-23ac-4530-b861-bc33171b7b42 /srv/virtuel ext4 defaults 0 2
# /dev/sda1
UUID=e33c1e26-5c19-4647-980b-98db4d92591b /mnt/ssd auto defaults,nofail,x-systemd.automount 0 2
Recharger et monter
1
2
sudo systemctl daemon-reload
sudo mount -a
Restaurer le dossier media
Sauvegardé sur /mnt/ssd
Restauration
1
sudo rsync -avz /mnt/ssd/media /home/yann/
Clés Yubico et SoloKeys
Installer librairie libfido2 pour la prise en charge des clés Yubico et SoloKeys
1
sudo pacman -S libfido2
KDE Plasma
Epingler System sur la barre des tâches
Système de gestion de l’énergie, tout désactiver
Barre des tâches en haut (hauteur 36)
NFS sharenfs
nfs-utils installé par défaut
1
2
3
4
5
sudo mkdir -p /mnt/sharenfs
sudo chown $USER:$USER -R /mnt/sharenfs
ln -s /mnt/sharenfs $HOME/sharenfs
ln -s /mnt/sharenfs/scripts $HOME/scripts
ln -s /mnt/sharenfs $HOME/sharenfs
Ajout au fichier /etc/fstab
1
2
3
# Actualisé
#-------------------------------------
192.168.0.205:/sharenfs /mnt/sharenfs nfs defaults 0 0
1
2
3
# Obsolète
# Serveur debian 13 cwwk 192.168.0.205
192.168.0.205:/sharenfs /mnt/sharenfs nfs4 nofail,x-systemd.automount,x-systemd.requires=network-online.target,x-systemd.device-timeout=10s,rsize=8192,wsize=8192,retry=0 0 0
retry=nLe nombre de minutes que la commandemountréessaye une opération de montage NFS dans l’avant-plan sol ou fond avant d’abandonner. Si cette option n’est pas spécifiée, la valeur par défaut pour Les montages de premier plan sont de 2 minutes, et la valeur par défaut pour les supports d’arrière-plan est de 10000 minutes. Si une valeur de zéro est spécifiée, la commandemountsort immédiatement après le premier échec.
Recharger et monter
1
2
sudo systemctl daemon-reload
sudo mount -a
Partage disque freebox
Partage disque externe USB sur Freebox
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 : ln -s /mnt/FreeUSB2To $HOME/FreeUSB2To
Credential : /root/.smbcredentials avec 2 lignes
username=XXXXXX
password=XXXXXX
Droits
1
2
sudo chown -R root:root /root/.smbcredentials
sudo chmod -R 600 /root/.smbcredentials
Les fichiers systèmes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# /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
1
2
3
4
5
6
7
8
9
10
11
12
# /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
1
2
sudo systemctl daemon-reload
sudo systemctl enable mnt-FreeUSB2To.automount --now
/etc/fstab
Le fstab
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a device; this may
# be used with UUID= as a more robust way to name devices that works even if
# disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
UUID=2D5E-1EE0 /efi vfat fmask=0137,dmask=0027 0 2
UUID=5f9512d6-edc5-4407-baf4-3cfc0e3df88e / ext4 noatime 0 1
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
# /dev/mapper/ssd--512-virtuel
UUID=84bc1aa9-23ac-4530-b861-bc33171b7b42 /srv/virtuel ext4 defaults 0 2
# /dev/sda1
UUID=e33c1e26-5c19-4647-980b-98db4d92591b /mnt/ssd auto defaults,nofail,x-systemd.automount 0 2
#
192.168.0.205:/sharenfs /mnt/sharenfs nfs defaults 0 0
Applications
Client Nextcloud
Installation client nextcloud
1
yay -S nextcloud-client
Démarrer le client nextcloud , après avoir renseigné l’url https://cloud.rnmkcy.eu ,login et mot de passe pour la connexion
Paramétrage
- Menu → Lancer Client de synchronisation nextcloud
- Adresse du serveur : https://cloud.xoyaz.xyz
Se connecter avec un mot de passe application nextcloud “Synchro DELL e6230” - Nom d’utilisateur : yann
- Mot de passe : xxxxx

Puis saisir l’adresse : https://cloud.rnmkcy.eu
Le nagigateur s’ouvre sur l’adresse saisie



- Sauter les dossiers à synchroniser, Ignorer la configuration des dossiers

- Paramètres nextcloud

- Saisir les différents dossiers à synhroniser
Avant la synchronisation, vérifier si les dossiers existent
Exclusions de fichiers pour la synchronization du dossier .ssh
Les fichiers concernés: authorized_keys et known_hosts
Keepassxc (Mot de passe)
On utilise une clé matérielle pour déverrouiller la base de mot de passe
La clé matériel utilisée pour la connexion doit être insérée
Installer le gestionnaire de mot de passe keepassxc
1
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

Navigateurs
- firefox
- Navigateur LibreWolf
Installer Librewolf
1
yay -S librewolf-bin
Paramètrage commun aux navigateurs Firefox et compatibles (Floorp, LibreWolf, etc…)
- Vie privée et sécurité
- Protection reforcée contre le pistage: Stricte
- Pas de collecte de données
- DNS via HTTPS: https://doh.iceyan.xyz
- Activer le DNSvia HTTPS: Protection renforcée
scrpy émulation android
Utilise adb et le port USB
1
yay -S scrcpy
Les icônes pour lancer l’application sont générés à l’installation
Retext
Installation
1
yay -S retext
Pas de fonction recherche par “CTRL + F”
Utilisation du “filtre” avec “CTRL + i”

Restauration cp /mnt/ssd/yann/.config/ReText project/ReText.conf ~/.config/ReText project/ReText.conf
Fichier de configuration ~/.config/ReText project/ReText.conf
1
2
3
4
5
6
7
[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
1
2
3
4
QTextEdit {
color: black;
background-color: white;
}
Paquets supplémentaires
Lancer la commande
1
2
# qrencode zbar android-tools , installés par défaut
yay -S gedit jq gimp libreoffice-fresh-fr figlet tmux calibre bluefish terminator filezilla borg yt-dlp xclip nmap tigervnc xournalpp tree openbsd-netcat thunderbird-i18n-fr
Spécifique
1
2
3
4
5
6
7
8
9
10
11
12
13
# Outils réseau
yay -S net-tools
# Wake-on-LAN (WoL) est un standard des réseaux Ethernet
# qui permet à un ordinateur éteint d'être démarré à distance.
yay -S wakeonlan
# imagemagick installé par défaut
yay -S freetube-bin
# Signal
yay -S signal-desktop
# Multimédia audio
yay -S strawberry
# Navigation privée
yay -S tor-browser-bin
bashrc alias
Ajouter les alias au fichier $HOME/.bash_aliases
Etendre Réduire
alias aide='xdg-open https://static.rnmkcy.eu/aide-jekyll-text-theme.html#autres-styles'
alias androidauto='sh $HOME/scripts/androidauto.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/scripts/borglist.sh'
alias calibreraz='adb -s CNBT80D20191101145 shell -x rm /sdcard/Document/metadata.calibre'
alias certok='$HOME/scripts/ssl-cert-check'
alias chirpy='$HOME/scripts/chirpy.sh'
alias cockpit='sh $HOME/scripts/cockpit.sh'
alias compress='$HOME/scripts/compress'
alias dnsleak='$HOME/scripts/dnsleaktest.py'
alias etat='$HOME/scripts/etat_des_lieux_PC1.sh > /mnt/sharenfs/rnmkcy/site/etat_pc1.txt'
alias findh='cat $HOME/scripts/findhelp.txt'
alias homer="ssh -o ProxyCommand='ssh -W %h:%p -p 55205 -i $HOME/.ssh/yick-ed25519 yick@192.168.0.205' userone@192.168.100.40 -p 22 -i $HOME/.ssh/vm-debian01 '\''/home/userone/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/scripts/sav-yann-media.sh'
alias mediajour='/usr/bin/journalctl --no-pager -t sauvegardes --since today'
alias nmapl='echo "sudo nmap -T4 -sP 192.168.0.0/24" && sudo nmap -T4 -sP 192.168.0.0/24'
alias nmap10='echo "sudo nmap -T4 -sP 192.168.10.0/24" && sudo nmap -T4 -sP 192.168.10.0/24'
alias odt2html='$HOME/scripts/_odt2html.sh'
#alias odtprivate='$HOME/scripts/_odt2html+index_private'
alias orphelin='sudo pacman -Rsn $(pacman -Qdtq)'
alias otp='$HOME/scripts/generer-code-2fa-vers-presse-papier-toutes-les-30s.sh'
alias ovh='$HOME/scripts/ovh_api/ApiOvh/bin/python $HOME/scripts/ovh_api/domain.py xoyize.xyz cinay.eu xoyaz.xyz ouestline.xyz rnmkcy.eu yanfi.net icevps.xyz xoyize.net iceyan.xyz'
alias png2lqip='$HOME/scripts/png2lqip.sh'
alias rename='$HOME/scripts/remplacer-les-espaces-accents-dans-une-expression.sh'
alias service='systemctl list-units --type=service --state=running'
alias sshm='$HOME/scripts/ssh-manager.sh'
alias ssl='$HOME/scripts/ssl-cert-check -f $HOME/scripts/ssldomains'
alias status='$HOME/scripts/status.sh'
alias storage='echo -e "df -h" |sftp -P 23 -i ~/.ssh/bx11-yann-ed25519 u326239@u326239.your-storagebox.de'
alias synchro='journalctl --user -u media_yannstatic_site.service --no-pager --since today'
alias toc='$HOME/scripts/toc/toc.sh'
alias tocplus='$HOME/scripts/toc/tocplus.sh'
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 /run/media/yann/GARMIN/Garmin/GPX; sh /srv/media/osm-new/osm-new-synchro.sh"
alias traduc='/usr/local/bin/trans'
alias ttrss="bash $HOME/scripts/articles_remarquables_ttrss"
alias vimaide="firefox --new-window $HOME/sharenfs/rnmkcy/racine/memo-vim.html </dev/null &>/dev/null &"
alias vncasus='sh $HOME/scripts/vncasus.sh'
alias vncdell='sh $HOME/scripts/vncdell.sh'
alias vncmarina='sh $HOME/scripts/vncmarina.sh'
alias wgiceyan='sh $HOME/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'
alias youtube='yt-dlp -f bv*+ba --output "~/Vidéos/%(title)s.%(ext)s"'Recharger le fichier pour appliquer les modifications
1
source ~/.bash_aliases
Pour afficher les alias dans un terminal
1
alias
Synchro serveur calibre
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
1
nano ~/.config/systemd/user/media_BiblioCalibre_site.path
1
2
3
4
5
6
7
8
9
[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é :
1
nano ~/.config/systemd/user/media_BiblioCalibre_site.service
1
2
3
4
5
6
7
8
[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 0Activer et lancer
1
systemctl --user enable media_BiblioCalibre_site.path --now
Voir le fichier journal
1
journalctl --user -f -u media_BiblioCalibre_site.service
1
2
3
4
5
6
7
8
9
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
Générateur site statique chirpy
Ensemble d’applications basé sur ruby et jekyll qui permet la génération de site statique à partir de fichiers markdown
Ruby jekyll
Ruby jekyll yannstatic - générateur site statique
Sauvegardes
BorgBackup home et media
BorgBackup est installé et fonctionnel en local
Script borg_pc1_media.sh
Etendre Réduire...
#!/bin/bash
# Modifié 20/01/2026
#*******************************************************
#
# Départ script
#
#*******************************************************
# Mesure temps exécution
begin=$(date +"%s")
echo "Exécution script $0"
## PC1 - Sauvegarde Borg
export BORG_PASSPHRASE="`cat /home/yann/sharenfs/pc1/.borg/pc1.passphrase`"
export BORG_RSH='ssh -i /home/yann/sharenfs/pc1/.borg/pc1.borgssh'
BORG_REPOSITORY=ssh://u326239@u326239.your-storagebox.de:23/./backup/borg/pc1
BACKUP_DATE=`date +%Y-%m-%d-%Hh%M`
borg create -v --progress --stats --exclude-from /home/yann/sharenfs/pc1/.borg/pc1.exclusions ${BORG_REPOSITORY}::${BACKUP_DATE} /home/yann/
borg prune -v --list --stats --keep-daily=7 --keep-weekly=4 --keep-monthly=6 $BORG_REPOSITORY
## media - Sauvegarde Borg
export BORG_PASSPHRASE="`cat /home/yann/sharenfs/pc1/.borg/media.passphrase`"
export BORG_RSH='ssh -i /home/yann/sharenfs/pc1/.borg/media.borgssh'
BORG_REPOSITORY=ssh://u326239@u326239.your-storagebox.de:23/./backup/borg/media
BACKUP_DATE=`date +%Y-%m-%d-%Hh%M`
borg create -v --progress --stats --exclude-from /home/yann/sharenfs/pc1/.borg/media.exclusions ${BORG_REPOSITORY}::${BACKUP_DATE} /srv/media/
borg prune -v --list --stats --keep-daily=7 --keep-weekly=4 --keep-monthly=6 $BORG_REPOSITORY
# Calcul et affichage temps exécution
termin=$(date +"%s")
difftimelps=$(($termin-$begin))
temps_execution="$(($difftimelps / 60)) mn $(($difftimelps % 60)) s"
echo "Script $0 exécuté en $temps_execution"
# notification notify-send
DISPLAY=:0 notify-send "sav-yann-media.sh" "Fin sauvegarde\n Durée : $temps_execution" -i /home/yann/media/statique/images/information.png -t 10000
exit 0
##########################################################################
# annexe
# Création dépôt BOX
export BORG_PASSPHRASE="`cat /home/yann/sharenfs/pc1/.borg/pc1.passphrase`"
export BORG_RSH='ssh -i /home/yann/sharenfs/pc1/.borg/pc1.borgssh'
BORG_REPOSITORY='ssh://u326239@u326239.your-storagebox.de:23/./backup/borg/pc1'
borg init --encryption=repokey-blake2 $BORG_REPOSITORY
export BORG_PASSPHRASE="`cat /home/yann/sharenfs/pc1/.borg/media.passphrase`"
export BORG_RSH='ssh -i /home/yann/sharenfs/pc1/.borg/media.borgssh'
BORG_REPOSITORY='ssh://u326239@u326239.your-storagebox.de:23/./backup/borg/media'
borg init --encryption=repokey-blake2 $BORG_REPOSITORYPour le fichier service ~/.config/systemd/user/borg_pc1_media.service
1
2
3
4
5
6
7
8
[Unit]
Description=Sauvegarde jour
[Service]
Type=simple
ExecStart=/bin/bash /home/yann/scripts/borg_pc1_media.sh
StandardError=journal
Type=oneshot
Le fichier “timer” ~/.config/systemd/user/borg_pc1_media.timer
1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=Sauvegarde jour
[Timer]
OnBootSec=15min
OnUnitActiveSec=1d
Unit=borg_pc1_media.service
[Install]
WantedBy=timers.target
Activation et lancement
1
systemctl --user enable borg_pc1_media.timer --now
La sauvegarde démarre 15 minutes après la mise sous tension de PC1
Les logs : journalctl --user -u savyann.service
Liste des timers :
1
systemctl --user list-timers --all
1
2
NEXT LEFT LAST PASSED UNIT ACTIVATES
- - Tue 2026-01-20 17:36:31 CET 22s ago borg_pc1_media.timer borg_pc1_media.service
Réseau
Le périphérique réseau interne à la carte mère est désactivé dans le bios
Configuration DNS /etc/resolv.conf
Par défaut, NetworkManager met à jour dynamiquement le /etc/resolv.conf avec les paramètres DNS à partir de profils de connexion NetworkManager actifs. Cependant, vous pouvez désactiver ce comportement et configurer manuellement les paramètres DNS dans /etc/resolv.conf.
Désactiver le traitement DNS dans la configuration NetworkManager
Par défaut, NetworkManager gère les paramètres DNS dans le fichier /etc/resolv.conf, et vous pouvez configurer l’ordre des serveurs DNS.
Alternativement, vous pouvez désactiver le traitement DNS dans NetworkManager si vous préférez configurer manuellement les paramètres DNS dans /etc/resolv.conf.
En tant qu’utilisateur root
Créez le /etc/NetworkManager/conf.d/90-dns-none.conf avec le contenu suivant en utilisant un éditeur de texte:
1
2
[main]
dns=none
Recharger le service NetworkManager:
1
systemctl reload NetworkManager
Après avoir rechargé le service, NetworkManager ne met plus à jour le /etc/resolv.conf. Cependant, le dernier contenu du fichier est conservé.
Optionnel: Supprimer le Commentaire
Generated by NetworkManagerde/etc/resolv.confpour éviter la confusion.
Vérification
Modifier manuellement la configuration le /etc/resolv.conf
1
2
3
nameserver 192.168.0.205
nameserver 1.1.1.1
nameserver fd0f:ee:b0::1
Recharger le NetworkManagerservice:
1
systemctl reload NetworkManager
Afficher le /etc/resolv.conf:
1
cat /etc/resolv.conf
Si vous avez réussi à désactiver le traitement DNS, NetworkManager n’a pas remplacé les paramètres configurés manuellement.
Dépannage
Afficher la configuration NetworkManager pour s’assurer qu’aucun autre fichier de configuration avec une priorité plus élevée n’a effacé le paramètre:
1
NetworkManager --print-config
1
2
3
[...]
dns=none
[...]
Vérifier si le dns Unbound (192.168..205) est utilisé: dig google.com |grep 'SERVER'
1
;; SERVER: 192.168.0.205#53(192.168.0.205) (UDP)
Domaine local home.arpa
NetworkManager utilise le DNS Unbound 192.168.0.205 qui gère le domaine local home.arpa
Il faut ajouter au système le certificat de l’autorité de certification homearpaCA.crt
1
2
# en mode su
trust anchor --store homearpaCA.crt
On peut vérifier qu’il est bien dans la liste à partir de son nom: trust list | rg -C 2 "HOMEARPA"
1
2
3
4
5
pkcs11:id=%DB%27%7F%CB%40%17%42%F9%81%C2%6C%7F%32%EB%26%0E%01%BC%35%BE;type=cert
type: certificate
label: HOMEARPA CA
trust: anchor
category: authority
Vérifier le dns Unbound (192.168..205) sur un domaine local: dig cwwk.home.arpa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
; <<>> DiG 9.20.18 <<>> cwwk.home.arpa
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13518
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;cwwk.home.arpa. IN A
;; ANSWER SECTION:
cwwk.home.arpa. 86400 IN A 192.168.0.205
;; Query time: 1 msec
;; SERVER: 192.168.0.205#53(192.168.0.205) (UDP)
;; WHEN: Thu Feb 19 10:34:48 CET 2026
;; MSG SIZE rcvd: 59
VPN
Choix entre Mullvad et NordVPN
Mullvad
Installation
1
yay -S mullvad-vpn-gui
Au premier lancement, saisir le N° de compte , sélectionner le pays de connexion France
Pour la gestion du domaine local home.arpa
DNS 192.168.0.205
NordVPN
Installation Droits
1
2
3
4
5
6
7
yay -S nordvpn-bin
#sudo groupadd nordvpn
sudo usermod -aG nordvpn $USER
sudo systemctl enable --now nordvpnd
# Nouveau terminal
nordvpn connect
# ouvrir le lien, sec onnecter au compte nordvpn
Vérifier: id yann
1
uid=1000(yann) gid=1000(yann) groupes=1000(yann),3(sys),998(wheel),981(rfkill),960(nordvpn)
Redémarrer
Ouvrir terminal
1
nordvpn connect
Le nordvpn gui
1
yay -S nordvpn-gui
Désactiver NordVPN
1
2
sudo systemctl stop nordvpnd.service
sudo systemctl disable nordvpnd.service
Décocher nordvpntray (NordVPN Graphique) dans Paramètres -> Session et démarrage Démarrage automatique de session
KDE Plasma 6
Outils développement
Go
Archlinux Go
1
2
yay -S go
go version
go version go1.23.3 linux/amd64
NodeJS et nvm
Archlinux Node.js npm
1
2
yay -S nodejs npm
node --version && npm --version
v23.1.0
10.9.0
OPTION
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
1
2
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
source ~/.bashrc
Vérifier
1
nvm --version
0.39.2
Installer Node.js avec NVM
Pour lister toutes les versions disponibles Node.js
1
nvm list-remote
Vous obtiendrez une liste de toutes les versions
1
2
3
4
5
6
7
v22.9.0
v22.10.0
v22.11.0 (Latest LTS: Jod)
v23.0.0
v23.1.0
v23.2.0
v23.3.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 23.2.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 23.2.0
Virtuel Virt-Manager
- Virt-Manager Complete Edition - Installation simplifiée
- Accés aux machines virtuelles KVM distantes via virt-manager
- Pont réseau virtuel “host-bridge”

- Gestionnaire de machine virtuelles, activer “xml editing”

- Restaurer les configurations de VM
sudo cp ~/virtuel/etc-libvirt-qemu/*.xml /etc/libvirt/qemu/
Script pour une installation complète
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Créez des groupes kvm et libvirt
sudo groupadd -f kvm
sudo groupadd -f libvirt
# Ajouter l'utilisateur actuel
sudo usermod -a -G libvirt $USER
newgrp libvirt
sudo usermod -aG kvm $USER
# Installation complète Virt-Manager
sudo pacman -Syu --needed virt-manager qemu-desktop libvirt edk2-ovmf dnsmasq vde2 bridge-utils iptables-nft dmidecode swtpm libguestfs guestfs-tools
# activer le service libvirtd
sudo systemctl enable --now libvirtd.service
# Modifier le fichier /etc/libvirt/libvirtd.conf
sudo sed -i -e 's/#unix_sock_group = "libvirt"/unix_sock_group = "libvirt"/g' /etc/libvirt/libvirtd.conf
sudo sed -i -e 's/#unix_sock_rw_perms = "0777"/unix_sock_rw_perms = "0770"/g' /etc/libvirt/libvirtd.conf
#sudo sed -i -e 's/#unix_sock_ro_perms = "0777"/unix_sock_ro_perms = "0777"/g' /etc/libvirt/libvirtd.conf
sudo systemctl restart libvirtd.service
C’est la façon de permettre aux utilisateurs non root de gérer les machines virtuelles sur KVM en utilisant
virshouvirt-managersans autorisations sudo.
swtpm et qemu
1
2
3
4
5
6
7
8
9
10
11
# Créer utilisateur système swtpm
sudo useradd -r swtpm
sudo mkdir -p /var/lib/swtpm-localca
sudo chown swtpm:swtpm /var/lib/swtpm-localca
# Ajout lignes suivantes au fichier /etc/libvirt/qemu.conf
sudo sed -i -e 's/#swtpm_user = "tss"/swtpm_user = "swtpm"/g' /etc/libvirt/qemu.conf
sudo sed -i -e 's/#swtpm_group = "tss"/swtpm_group = "swtpm"/g' /etc/libvirt/qemu.conf
# Utilisateur ID (1000)
sudo sed -i -e 's/#user = "libvirt-qemu"/user = "1000"/g' /etc/libvirt/qemu.conf
sudo sed -i -e 's/#group = "libvirt-qemu"/group = "1000"/g' /etc/libvirt/qemu.conf
Déclarer le pont (bridge) à KVM
Créer un fichier de définition de réseau au format XML : nano router-tenda.xml
1
2
3
4
5
<network>
<name>router-tenda</name>
<forward mode="bridge"/>
<bridge name="bridge0" />
</network>
Appliquer la configuration :
1
2
3
virsh net-define router-tenda.xml # -> Réseau host-tenda défini depuis router-tenda.xml
virsh net-start router-tenda # -> Réseau router-tenda démarré
virsh net-autostart router-tenda # -> Réseau router-tenda marqué en démarrage automatique
Vérification
1
sudo virsh net-list --all
1
2
3
4
Nom État Démarrage automatique Persistant
--------------------------------------------------------------
default inactif non oui
router-tenda actif oui oui
La structure libvirt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# Les configurations xml
[root@pc1 yann]# tree -L 3 /etc/libvirt/qemu
/etc/libvirt/qemu
/etc/libvirt/qemu
├── autostart
├── networks
│ ├── autostart
│ │ └── router-tenda.xml -> /etc/libvirt/qemu/networks/router-tenda.xml
│ ├── default.xml
│ └── router-tenda.xml
├── vm-arch-clone.xml
├── vm-arch.xml
└── win11.xml
# les images sous KVM
[yann@pc1 ~]$ tree -L 2 /virtuel/
/virtuel/
├── eos
│ └── eos-chiffre_luks_backup.bin
├── KVM
│ ├── eos-lvm-luks-1.qcow2
│ ├── vm-arch-clone.qcow2
│ ├── vm-arch.qcow2
│ ├── Whonix-Gateway.qcow2
│ ├── Whonix-Workstation.qcow2
│ └── wineleven.qcow2
├── KVM_SAV
│ ├── etc-libvirt-qemu
│ └── images_qcow2
└── nspawn
├── alpine
├── alpine-container.sh
├── bookworm
├── nspbullseye
└── spawnalpine.sh
Paramétrage Edition –> Préférences –> Général
“Activer l’édition XML”
Pour activer la gestion des machines virtuelles distantes
KVM: virt-manager to connect to a remote console using qemu+ssh
Saisir la commande suivante en mode utilisateur
1
virt-manager -c 'qemu+ssh://yick@192.168.0.205:55205/system?keyfile=/home/yann/.ssh/yick-ed25519'
Ensuite ouvrir le “Gestionnaire de machines virtuelles”


Wing personal python IDE
Wing personal python IDE → Téléchargement
1
2
3
4
5
6
7
# Décompression de la version téléchargée
tar xjvf wing-personal-11.0.6.0-linux-x64.tar.bz2
# Passage en root
sudo -s
# Lancement procédure installation
cd wing-personal-11.0.6.0-linux-x64
./wing-install.py
Déroulement de la commande
1
2
3
4
5
6
7
8
9
10
11
12
Where do you want to install the support files for Wing Personal (default
= /usr/local/lib/wing-personal11)?
/usr/local/lib/wing-personal11 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)?
[...]
Creating symbolic link /usr/local/bin/wing-personal11 (->
../lib/wing-personal11/wing-personal)
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-personal11" to start Wing Personal.
Effacer les fichiers
1
2
3
4
5
# Suppression dossier et fichier
cd ..
rm -rf wing-personal*
# sortie root
exit
Python
Installer python pip pipx
1
yay -S python-pip python-pipx
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 installée : java --version
1
2
3
openjdk 23 2024-09-17
OpenJDK Runtime Environment (build 23)
OpenJDK 64-Bit Server VM (build 23, mixed mode, sharing)
Installation
1
yay -S dbeaver
1
2
3
4
5
6
7
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é): 1
MariaDB
Résumé des commandes en mode su
1
2
3
4
pacman -S mariadb
mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
systemctl enable mariadb --now
systemctl status --no-pager --full mariadb
Sécuriser
1
sudo mysql_secure_installation
Valider tous les choix par défaut SAUF le changement de mot de passe (n)
Correction en mode su
Ouvrir MariaDB
1
2
sudo -s
mysql -u root
Exécuter le sql : SELECT host, user, password FROM mysql.user;

Si le mot de passe de votre compte root est invalide (ou autre chose que la cellule vide)
Définir le mot de passe : ALTER USER 'root'@'localhost' IDENTIFIED BY 'Mot_passe_root_MariaDB';
Vérifier : SELECT host, user, password FROM mysql.user;

Sortie : exit;
Parefeu ufw
Installation et activation
1
2
yay -S ufw
sudo ufw enable
Outil cockpit (OPTIONNEL)
Administrer sa machine avec Cockpit (Fedora, Red Hat et dérivées)
Installation
1
yay -S cockpit cockpit-storaged cockpit-machines
Gestion par interface web https://cockpit.rnmkcy.eu

Liaison SSH avec clés entre le interface web cockpit et la machine PC1
Démarrer Eteindre une machine sur le réseau
Démarrer ou éteindre une machine distante sur le réseau via ssh et “wake on lan”
Copier la clé SSH d’accès à la machine Lenovo Proxmox vers /usr/local/bin et se connecter pour valider la clé
1
2
3
sudo -s
cp .ssh/lenovo-ed25519 /usr/local/bin/
/usr/bin/ssh root@192.168.0.215 -p 55215 -i /usr/local/bin/lenovo-ed25519
Les fichiers
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# /etc/systemd/system/stop_prox.service
[Unit]
Description=Exécuter commande seulement si arrêt
DefaultDependencies=no
Conflicts=reboot.target
Before=poweroff.target halt.target shutdown.target
Requires=poweroff.target
[Service]
Type=oneshot
ExecStart=/usr/bin/ssh root@192.168.0.215 -p 55215 -i /usr/local/bin/lenovo-ed25519 'systemctl poweroff'
RemainAfterExit=yes
[Install]
WantedBy=shutdown.target
# /etc/systemd/system/run-script-with-delay.timer
[Unit]
Description=Exécuter script 2 min après démarrage (timer)
[Timer]
OnBootSec=2min
[Install]
WantedBy=default.target
# /etc/systemd/system/run-script-with-delay.service
[Unit]
Description=Exécuter script 2 min après démarrage
[Service]
Type=oneshot
ExecStart=/usr/bin/wakeonlan -i 192.168.0.255 00:23:24:c9:06:86
TimeoutStartSec=0
Disque Interne SSD 480Go
Ajout disque SSD sata 480Go
Identifer le disque: lsblk
1
2
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 447,1G 0 disk
Effacement et formatage disque
1
2
3
4
5
6
# Ceci effacera de manière irréversible toutes les données disque
sgdisk --zap-all /dev/sda
# Partition entière Linux (code 8300) système de fichier EXT4
sgdisk --clear --new=1:0:0 --typecode=1:8300 /dev/sda
# Système de fichier EXT4
mkfs.ext4 /dev/sda1
Créer un point de montage
1
sudo mkdir -p /mnt/ssd
| UUID: sudo blkid | grep ‘/dev/sda1’ |
1
/dev/sda1: UUID="e33c1e26-5c19-4647-980b-98db4d92591b" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="Linux filesystem" PARTUUID="c153121f-615f-4fd5-aad7-e83501798e1f"
Ajouter au fichier /etc/fstab
1
2
# /dev/sda1
UUID=e33c1e26-5c19-4647-980b-98db4d92591b /mnt/ssd auto defaults,nofail,x-systemd.automount 0 2
Recharger la configuration et le montage
1
2
sudo systemctl daemon-reload
sudo mount -a
Liens issus de la VM ttrss
Dans la machine virtuelle ttrss, création d’un fichier markdown de liens remarquables (Liens - ttrss.md)
Importation du fichier ttrss.md dans le générateur statique
Script $HOME/scripts/articles_remarquables_ttrss
Etendre Réduire
#!/bin/bash
set -euo pipefail
trap 'echo "Une erreur est survenue."; exit 1' ERR
echo "Connexion SSH VM Alpine ttrss"
echo "Importation fichier ttrss.md dans /tmp/"
scp -o ProxyCommand="ssh -W %h:%p -p 55205 -i /home/yann/.ssh/yick-ed25519 yick@192.168.0.205" -i /home/yann/.ssh/ttrss_alpine-vm -P 55217 aluser@192.168.100.60:/home/aluser/ttrss.md /tmp/
LIENS_TTRSS="/tmp/liens_ttrss.md"
echo "Création fichier $LIENS_TTRSS"
cat << EOF > $LIENS_TTRSS
---
layout: article
titles: Liens ttrss au format HTML
---
/ lang="fr">
<body>
<head>
<meta charset="utf-8">
<title>Doc Html</title>
</head>
<div class="search-bar">
<div class="search-box js-search-box">
<input type="text" id="saisie-recherche" onkeyup="rechercheFonction()" placeholder="Rechercher..." title="Saisir" autofocus>
</div>
</div>
<ul id="articlesTTRSS">
EOF
echo "Ajout des liens /tmp/ttrss.md"
cat /tmp/ttrss.md >> $LIENS_TTRSS
echo "Ajout Javascript"
cat << EOF >> $LIENS_TTRSS
</ul>
<button onclick="topFunction()" id="myBtn" title="Haut de page">↑</button>
<script>
//Get the button
var mybutton = document.getElementById("myBtn");
// When the user scrolls down 20px from the top of the document, show the button
window.onscroll = function() {scrollFunction()};
function scrollFunction() {
if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) {
mybutton.style.display = "block";
} else {
mybutton.style.display = "none";
}
}
// When the user clicks on the button, scroll to the top of the document
function topFunction() {
document.body.scrollTop = 0;
document.documentElement.scrollTop = 0;
}
function rechercheFonction() {
var input, filter, ul, li, a, i, txtValue;
input = document.getElementById("saisie-recherche");
filter = input.value.toUpperCase();
ul = document.getElementById("articlesTTRSS");
li = ul.getElementsByTagName("li");
for (i = 0; i < li.length; i++) {
a = li[i].getElementsByTagName("a")[0];
txtValue = a.textContent || a.innerText;
if (txtValue.toUpperCase().indexOf(filter) > -1) {
li[i].style.display = "";
} else {
li[i].style.display = "none";
}
}
}
// Cacher le champ de recherche
var mysearchbox = document.getElementById("searchbox");
mysearchbox.style.visibility = "hidden";
</script>
</body>
</>
EOF
echo "Copier le fichier liens_ttrss.md dans le dossier yannstatic"
echo "cp $LIENS_TTRSS /srv/media/yannstatic/liens_ttrss.md"
cp $LIENS_TTRSS /srv/media/yannstatic/liens_ttrss.mdCréer un alias ttrss dans le fichier $HOME/.bash_aliases
1
alias ttrss='bash /home/yann/scripts/articles_remarquables_ttrss'
Activer
1
source $HOME/.bash_aliases
Maintenance
Etat des lieux
Ajouter un alias dans le fichier ~/.bash_aliases
1
alias etat='$HOME/scripts/etat_des_lieux.sh'
Recharger et exécuter
1
2
source ~/.bash_aliases
etat ### Hetzner Box liaison SSH
https://www.openssh.com/pq.html
Affichage de messages d’alerte sur les connexions ssh à la box hetzner
u326239.your-storagebox.de
1
2
3
Remote: ** WARNING: connection is not using a post-quantum key exchange algorithm.
Remote: ** This session may be vulnerable to "store now, decrypt later" attacks.
Remote: ** The server may need to be upgraded. See https://openssh.com/pq.html
Il faut créer un fichier SSH client hetzner-box.conf pour désactiver les messages
/etc/ssh/ssh_config.d/hetzner-box.conf
1
2
Match host u326239.your-storagebox.de
WarnWeakCrypto no
Redémarrer le service SSH
1
sudo systemctl restart sshd
Erreur de paquet ou signature PGP
En cas d’erreur de paquet ou signature PGP
1
sudo pacman -S endeavouros-keyring archlinux-keyring
Mise à jour impossible avec des erreurs de téléchargement
1
sudo rm -r /var/cache/pacman/pkg/*
Minicom
Installation
1
yay -S minicom
Paramétrage de l’application terminale minicom
1
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





















