991 private links
Tu viens de télécharger Python, Node.js ou Git, et là … surprise : impossible de lancer la commande dans PowerShell.
'python' n'est pas reconnu en tant que commande...Classique.Le coupable ? Ton PATH Windows qui n’a aucune idée de l’endroit où se planque ton programme fraîchement installé. Pas de panique : ajouter un programme au PATH Windows est plus simple qu’installer YAML sur un serveur Ubuntu (et ça, c’est déjà un exploit).
Dans ce guide, je te montre 3 méthodes pour ajouter un programme au PATH Windows : l’interface graphique (pour les prudents), PowerShell (pour les pros), et CMD (pour les nostalgiques). Avec en bonus : cas d’usage réels, troubleshooting, et tout ce qu’il faut pour ne plus jamais galérer.
Pendant plus d'une décennie, nous avons traité le Web comme une collection d'affiches statiques imprimées sur du papier : une pour mobile, une pour tablette, une pour desktop. Mais le Web n'est pas une série de tailles d'écrans fixes. C'est un fluide continu.
Bienvenue dans l'ère de l'Intrinsic Web Design (ou Design Intrinsèque), un terme introduit par Jen Simmons en 2018 où le contenu dicte la mise en page, et non l'inverse. L'objectif est de créer des composants qui s'adaptent à leur contexte, qu'ils soient dans une sidebar réduite ou dans un header très large.
Pour un article qui sortira peut-être sur papier (je croise les doigts), j’avais besoin de tester différents types d’OS à installer sur un Raspberry Pi Zero 2 W.
Comme je ne connaissais ni Alpine, ni les spécificités du Pi Zero 2 W, je suis tombé sur pas mal de trucs que je ne connaissais pas.
Même si au final, l’article papier ne traite pas d’installation d’Alpine Linux (ni même ne l’utilise), je me suis dit que c’était dommage de ne pas publier cette expérience Alpine + RPi Zero, donc la voici.
Kubernetes (K8s) est devenu l’orchestrateur de conteneurs standard en production. Que vous soyez développeur qui déploie ses applications, ops qui maintient l’infrastructure, ou simplement curieux de comprendre comment fonctionne le cloud moderne — ce parcours vous rend autonome sur les gestes essentiels : créer un déploiement, exposer un service, diagnostiquer une erreur, sécuriser un cluster. Pas besoin de viser une certification pour en tirer profit : l’objectif est de vous donner les compétences pratiques utilisables dès demain dans vos projets.
Comment ça se passe ? Vous commencez par comprendre l’architecture, puis vous manipulez les objets de base (Pods, Deployments, Services), avant d’aborder les sujets avancés (sécurité, autoscaling, outils de déploiement). Chaque concept est illustré par des exemples concrets, des commandes à tester, et des liens vers des TP pratiques sur GitHub. À la fin de chaque niveau, un contrôle de connaissances interactif valide vos acquis. Si vous préparez la CKA ou la CKAD, les parcours sont alignés sur les domaines de l’examen.
Au terme de ce parcours, vous serez capable de :
Section intitulée « Au terme de ce parcours, vous serez capable de : »
- Déployer une application de bout en bout (Pod → Deployment → Service → exposition)
- Diagnostiquer les erreurs : CrashLoopBackOff, ImagePullBackOff, OOMKilled, Pending
- Sécuriser un cluster avec RBAC et Network Policies
- Automatiser les déploiements avec Helm ou Kustomize
- Scaler automatiquement avec HPA
- Préparer les certifications CKA (admin) ou CKAD (dev)
- Run a Container
- Container Lifecycle Commands
- List Containers
- Container Logs
- Inspect Containers
- Execute Commands in Container
- Copy Files
- Image Management
- Image Inspection & Export
- Build Images
- Dockerfile: Base & Metadata
- Dockerfile: Files & Commands
- Dockerfile: Ports, Volumes, Health
- Dockerfile: CMD & ENTRYPOINT
- Multi-Stage Build
- Volume Management
- Mount Types
- Network Management
- Container Networking
- Compose CLI Commands
- Compose: Basic Service
- Compose: Build from Dockerfile
- Compose: Dependencies & Health
- Compose: Networks & Resources
- Compose: Variables & Extensions
- System Cleanup
- System Info & Registry
- One-Liner Patterns
- Debugging Containers
- Security Best Practices
Raising Notifications From Terminal
When executing long-running jobs in the terminal, it's useful to get notified when they complete so you can do other things while waiting. Here are a few ways to achieve this.
Using notify-send (Linux)
The simplest approach is to chain your command with
notify-send:slow-job; notify-send "done"If You Already Started the Job
If you've already started a long-running job and forgot to add a notification, you can still do it:
- Press
Ctrl-Zto suspend the job and put it in the background- Run
fg; notify-send "done"The job will resume in the foreground, and you'll get notified when it finishes.
It's very common to intentionally break up long, expensive tasks over multiple ticks of the event loop. But there are sure are a lot of approaches to choose from. Let's explore them.
It's not hard to bork your site's user experience by letting a long, expensive task hog the main thread. No matter how complex an application becomes, the event loop can still do only one thing at a time. If any of your code is squatting on it, everything else is on standby, and it usually doesn't take long for your users to notice.
These are the settings in the
about:configsection and in the user.js file. The parameters are divided into sections, you can see it in Index of Sections below, and in the[INDEX]entry in theuser.jsfile.There are some keywords used for the configuration parameters, you can see this keywords also in the comments of the
user.jsfile, and are as follows:
[Windows], [Linux], [macOS]- The option is valid only for the indicated operating system.[Non-Windows]- The option is valid for all operating systems other than Windows.[HIDDEN PREF]- Option that must be enabled first, in order to change its default value or to be used.[DEFAULT: true/false]- Specifies the existing default value.NOTE: Settings that specify values equal (redundant) to the defaults are not listed (with some exceptions for clarity).
For further information, please read here: arkenfox’s user.js.
Some notes on setting up an
apt-cacher-ngbased cache server for Debian apt packages in my home operations ("homeops") context, including a section on using SSL/TLS origin servers.
Présentation (succinte) pour vous et pense-bête pour moi des choses notables que je configure sur Firefox.
Mes objectifs pour l’architecture étaient les suivants :
- Pas d’ouverture de port sur ma box (NAT)
- Gérer une contrainte d’IP dynamique sur ma connexion internet personnelle
- Faire passer le trafic dans un tunnel sécurisé VPN
- Utiliser BorgBackup pour les sauvegardes
- Utiliser BorgMatic côté client
- Utiliser BorgWarehouse pour gérer les repositories BorgBackup du serveur de backup
Pour les trois premières contraintes, je vais y répondre aisément avec Wireguard. J’avais d’ailleurs fait un article en 2022 avec un petit benchmark de perf (vs OpenVPN) si ça vous intéresse.
WireGuard va me permettre plusieurs choses :
- Encapsuler le trafic réseau dans un tunnel chiffré entre mes serveurs dans le datacenter et mon serveur de backup à domicile.
- Initier la connexion VPN uniquement depuis mon domicile vers les endpoints de mes serveurs
- Et par conséquent m’éviter d’ouvrir un port chez moi, de faire du NAT ou même de connaître mon IP publique
Dans cet article, nous allons apprendre à récupérer et lire le contenu d’un certificat x.509 en utilisant la commande "openssl".
Les certificats x.509 sont très importants pour sécuriser les communications entre clients et serveurs sur Internet. Nous ferons d'abord un bref rappel de ce qu'est un certificat x.509, puis nous détaillerons les méthodes pour obtenir ces certificats via un navigateur ou directement avec "openssl", et enfin, nous verrons comment extraire les informations contenues dans un certificat.
openssl s_client -connect shaarli.mickge.fr.eu.org:443 2>/dev/null </dev/null | openssl x509 -noout -enddateTL;DR:
linux /casper/vmlinuz boot=casper automatic-ubiquity url=http://192.168.X.X/preseed.cfg _iso-scan/filename=${isopath} quiet splash noprompt --
#!/usr/bin/env bash
# Run this script on a debian compatible distro
# Needed installs: xorriso isolinux
# Licence: GNU GPL 3
# Script Setup
set -e # Exit script on any error
print_heading() {
printf "\n\n"
printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' "="
echo $1
printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' "="
printf "\n\n"
}
# Variable Setup ####################################################################################################################################
ISO_TORRENT_URL="https://linuxmint.com/torrents/linuxmint-20.3-cinnamon-64bit.iso.torrent"
ISO_CHECKSUM_URL="https://ftp.heanet.ie/mirrors/linuxmint.com/stable/20.3/sha256sum.txt"
ISO_CHECKSUM_SIGNATURE_URL="$ISO_CHECKSUM_URL.gpg"
SIGNING_KEY="27DEB15644C6B3CF3BD7D291300F846BA25BAE09"
PRESEED_TEMPLATE_FILE="preseed_template.cfg"
PRESEED_FILE="preseed.cfg"
CREDENTIALS_FILE="credentials.env"
ISO_NAME="ISO"
# Internal variables ################################################################################################################################
ISO_FILE=$(basename "$ISO_TORRENT_URL" | rev | cut -c 9- | rev)
ISO_WORKDIR="isofiles"
# Download ISO FILE #################################################################################################################################
download_iso() {
print_heading "Downloading ISO File"
aria2c --follow-torrent=mem --rpc-save-upload-metadata=false --check-integrity --seed-time=0 --summary-interval=60 $ISO_TORRENT_URL
}
# Validate ISO File #################################################################################################################################
validate_iso(){
print_heading "Validating ISO File"
ISO_CHECKSUM_FILE="$(basename $ISO_CHECKSUM_URL)"
ISO_CHECKSUM_SIGNATURE_FILE="$(basename $ISO_CHECKSUM_URL).gpg"
wget -nc $ISO_CHECKSUM_URL
wget -nc $ISO_CHECKSUM_SIGNATURE_URL
gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-key $SIGNING_KEY
gpg --verify $ISO_CHECKSUM_SIGNATURE_FILE $ISO_CHECKSUM_FILE
sha256sum --ignore-missing -c $ISO_CHECKSUM_FILE
rm -f $ISO_CHECKSUM_FILE
rm -f $ISO_CHECKSUM_SIGNATURE_FILE
}
# Unpack ISO ########################################################################################################################################
unpack_iso() {
print_heading "Unpacking ISO"
rm -rf $ISO_WORKDIR
7z x $ISO_FILE -o$ISO_WORKDIR
}
# Add Preseed File to ISO ###########################################################################################################################
add_preseed_file_to_iso() {
print_heading "Adding Preseed File to ISO"
set -a
source $CREDENTIALS_FILE
envsubst < $PRESEED_TEMPLATE_FILE > $ISO_WORKDIR/preseed/auto.seed
set -a
}
# Configure Boot Options ############################################################################################################################
configure_boot_options() {
print_heading "Configuring ISO Boot Options"
tee -a $ISO_WORKDIR/boot/grub/grub.cfg <<- "EOF"
menuentry "Auto Install" --class linuxmint {
set gfxpayload=keep
linux /casper/vmlinuz file=/cdrom/preseed/auto.seed automatic-ubiquity boot=casper iso-scan/filename=${iso_path} quiet splash --
initrd /casper/initrd.lz
}
set default=4
set timeout=5
EOF
}
# Recompile ISO #####################################################################################################################################
recompile_iso() {
print_heading "Recompiling ISO"
rm -f "$ISO_NAME.iso"
dd if=$ISO_FILE bs=1 count=432 of=isohdpfx.bin
xorriso -as mkisofs \
-r -V "$ISO_NAME" \
-o "$ISO_NAME.iso" \
-J -joliet-long \
-cache-inodes \
-isohybrid-mbr isohdpfx.bin \
-b isolinux/isolinux.bin \
-c isolinux/boot.cat \
-boot-load-size 4 -boot-info-table -no-emul-boot \
-eltorito-alt-boot \
-e boot/grub/efi.img \
-no-emul-boot \
-isohybrid-gpt-basdat \
-isohybrid-apm-hfsplus \
"$ISO_WORKDIR"
rm isohdpfx.bin
}
# Cleanup ###########################################################################################################################################
cleanup() {
print_heading "Cleaning Up"
rm -rf $ISO_WORKDIR
echo "Done"
}
# download_iso
# validate_iso
unpack_iso
add_preseed_file_to_iso
configure_boot_options
recompile_iso
cleanupVous avez une tablette Android ou iOS, un ordinateur sous Linux, Windows, MacOS ? Même un vieux modèle ? Ne jetez pas ! Pourquoi ne pas les utiliser comme second écran ?
Il y a quelques jours, je posais une question sur la tribune de LinuxFR, et Bubar, sans répondre à ma question directement, s'est lancé dans l'aventure du streaming de jeux sur ses machines, et en a fait un journal. J'ai dit que j'écrirais un journal en réponse, avec des solutions plus simples pour les utilisateurs. Dont acte.
Une solution 100% open-source pour mieux cerner l'IA en éducation
Bibliothèque de prompts
- Prompts pour l'inclusion scolaire
- Prompts pour vos chatbots éducatifs
- Prompts pour vos scénario d'escape-games
- Prompts pour vos énigmes en escape-games
- Prompts pour vos images
- Prompts pour vos séquences pédagogiques
- Prompts généraux et pertinents
- Prompts pour vos dictées
Générateurs de contenu avec l'IA
- Pataprompt - générateur de prompts intelligent
- MKD'Quiz - Créez des quiz depuis un markdown
- Markdownizer - Transformez vos documents en format markdown
- Créez vos propres images avec l'IA
Agents conversationnels (chatbots)
- Didak'bot 3 - le chatbot pédagogique amélioré
- Didak'bot 2 - le chatbot pédagogique
- Manabot - chatbot pédagogique collaboratif
- Discutez avec l'IA gratuitement sans compte
- Entraînez votre propre chatbot
Expérimenter avec l'IA
On m'a demandé dernièrement d'installer Primtux sur 2 "anciens" ordinateurs portables fournis par la région Occitanie/Languedoc-Roussillon aux lycéens. Autant il n'y a eu aucun problème sur le modèle le plus ancien mais ça n'a pas du tout été le cas pour le plus récent qui est un modèle HP Probook x360 11 G1 EE avec écran tactile.
En effet, impossible de booter directement sur mes clés USB habituelles sous Easy2Boot ou Ventoy ! Ceci est dû à un sale tour de HP/Microsoft empêchant le démarrage à partir du booloader GRUB que l'on trouve dans beaucoup de distributions GNU/Linux. Qu'à cela ne tienne car il est possible de contourner cet obstacle. Comme quoi même en compliquant la vie des simples utilisateur⋅rices, il existe souvent une solution de contournement aux blocages des constructeurs (mais c'est vrai que ça complique quand même les choses). En tout cas, cela conforte mon idée d'éviter d'acheter du HP et du Microsoft.
Sources :
Why else would so many tumble down the rabbit hole of building their own
<input>replacement, stringing multiple<input>elements together, or burdening their project with yet another third-party dependency?If you find yourself in a similar situation, I have good news! You can ship a fully functional OTP input today without any CSS hacks or JavaScript frameworks.
All you need is some HTML.
If you’re like me, prior to using Proxmox you had virtual machines running in something like VirtualBox or Virt Manager. You may have spent a lot of time configuring these VMs and now that you’re migrating to Proxmox you really don’t want to start from scratch on those existing VMs. Luckily, you can import those into Proxmox and I’ll show you how to do that here, so let’s get started.
An archive of useful Linux commands shared in Self-Host Weekly
TL;DR:
For simplicity, this shows how to copy a word and paste it over other words. However, the visual selection could be varied to use any text.
yiw Yank inner word (copy word under cursor, say "first"). ... Move the cursor to another word (say "second"). viwp Select "second", then replace it with "first". ... Move the cursor to another word (say "third"). viw"0p Select "third", then replace it with "first". Copy a word and paste it over other words:
yiw Yank inner word (copy word under cursor, say "first"). ... Move the cursor to another word (say "second"). ciw Ctrl-R 0 Esc Change "second", replacing it with "first". ... Move the cursor to another word (say "third"). . Repeat the operation (change word and replace it with "first"). ... Move the cursor to another word and press . to repeat the change. Copy text in quotes, and paste it over other quoted text:
yi" Yank inner text (text containing cursor which is in quotes). ... Move the cursor to other quoted text. ci" Ctrl-R 0 Esc Change the quoted text, replacing it with the copied text. ... Move the cursor to more quoted text. . Repeat the operation (change the quoted text and replace it with the copy). ... Move the cursor to more quoted text and press . to repeat the change. Copy a line and paste it over other lines:
yy Yank current line (say "first line"). ... Move the cursor to another line (say "second line"). Vp Select "second line", then replace it with "first line". ... Move the cursor to another line (say "third line"). V"0p Select "third line", then replace it with "first line". Deleting, changing and yanking text copies the affected text to the unnamed register (
""). Yanking text also copies the text to register 0 ("0). So the commandyiwcopies the current word to""and to"0.Typing
viwselects the current word, then pressingppastes the unnamed register over the visual selection. The visual selection that was just replaced is then stored in the default unnamed register.