Systemes-reseaux ( 10 / 39 articles - Voir la liste )

Astuce Prompt trop long à cause de nvm

Nvm est un outil qui permet d’utiliser plusieurs versions de Node.js en parallèle.

Il est simple à utiliser et ajoute automatiquement quelques lignes au fichier ~/.bashrc sur votre système Linux, pour pouvoir démarrer correctement.

Malheureusement, il peut ralentir le démarrage de votre bash de plusieurs secondes, et vous devrez même parfois attendre 10 secondes avant de voir le prompt apparaître, pour taper vos commandes.
Ce n’est pas dramatique, mais ce n’est vraiment pas idéal, surtout si vous n’avez pas besoin de nvm souvent (parce que vous lancez plutôt Node directement dans Docker, par exemple).

Typiquement, votre IDE utilise peut-être bash au lancement, pour trouver les exécutables dont il a besoin. Si bash est trop long à démarrer, l’IDE peut considérer que git n’est pas installé, par exemple.

Pour éviter cela, il faut déplacer les lignes ajoutées par nvm à votre .bashrc, dans un fichier .sh dédié, qui ne sera exécuté que lorsque vous avez besoin de nvm, et pas à chaque lancement de bash.

  • Créez un fichier load_nvm.sh, contenant
#!/bin/bash

# Delete the aliases
unalias nvm
unalias npm
unalias node

# (This is the loader code nvm put in my .bashrc)
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
  • Modifiez le fichier ~/.bashrc, pour remplacer
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

par

# nvm
alias nvm='. ~/load_nvm.sh; nvm "$@"'
alias npm='. ~/load_nvm.sh; npm "$@"'
alias node='. ~/load_nvm.sh; node "$@"'

Erreur Client version is too old

Si vous utilisez Gitlab CI pour builder des images docker, vous obtenez cette erreur, ce qui bloque la CI :

ERROR: Error response from daemon: client version 1.43 is too old. Minimum supported API version is 1.44, please upgrade your client to a newer version: driver not connecting

Cela veut dire que le client docker utilisé par la CI est trop ancien (ici 1.43 au lieu de 1.44).

Si Gitlab utilise le docker présent sur le système, à vous de le mettre à jour sur le serveur.

Sinon, vous utilisez une image docker qui contient un client docker permettant de builder une image docker 🤯.
Dans ce cas, pour utiliser un client plus récent, vous devez utiliser une image plus récente.

Vous pouvez spécifier cette version directement dans le fichier .gitlab-ci.yml à votre étape de build :

docker-build-backend-base:
    stage: docker-build-base
    only:
        refs:
            - merge_requests
        changes:
            - .gitlab-ci.yml
    image: docker:29.0.0
    interruptible: true
    variables:
        DOCKER_BUILDKIT: 1
        DOCKER_DRIVER: overlay2
    before_script:
        - apk update && apk add make
    script:
        - docker build -t gitlab.mydomain.com:1234/group/project/backend/base:latest -f ./docker/image/php/base/Dockerfile ./docker/image/php/base

La ligne importante ici est image: docker:29.0.0, qui force l’utilisation de la version 29 de l’image. Cette image contient un client Docker >= 1.44.

Astuce Ouvrir une application en tant qu’administrateur sous Windows

Sous Windows, la solution classique pour ouvrir une application en tant qu’administrateur, c’est d’utiliser sa souris :

  • Dans l’explorateur Windows, faites un clic-droit sur l’icône de l’application
  • Dans le menu contextuel qui apparaît, cliquer sur l’option « Exécuter en tant qu’administrateur ».

Note : parfois, cette option n’apparaît que si on maintient la touche Ctrl enfoncée lors du clic-droit.

Un autre raccourci clavier

Il existe une autre méthode, plus rapide, pour ouvrir les applications de la barre des tâches ou du menu Démarrer :

  • Maintenez les touches Windows + Ctrl + Shift
  • Cliquer sur l’icône de l’application à exécuter en tant qu’administrateur

Astuce Déployer un site statique vers Microsoft Azure

Le service Microsoft Azure permet d’héberger un site statique dans un espace de stockage. Voici comment réaliser le déploiement en lignes de commande.

Prérequis

  1. Installez la CLI Azure

    # pour Debian
    curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
    

    Documentation d’installation : https://learn.microsoft.com/fr-fr/cli/azure/install-azure-cli

  2. Activez les sites web statiques dans Azure Storage :

Paramétrage Azure storage

Déploiement

Variables d’environnement à configurer

  • AZURE_APP_ID (ex : 8514903f-ed49-48b6-b5f8-bc4ff676fce3) :

  • AZURE_CLIENT_SECRET (ex : TYY5A~I2d19dffcf938ImHBeS~-.S4db2318T.) :

  • AZURE_TENANT_ID (ex : 44db2318-9218-41b4-b935-2d19dffcf938) :

  • AZURE_STORAGE_ACCOUNT (ex : stmystaticwebsite) :

    AZURE_STORAGE_ACCOUNT

export AZURE_APP_ID='8514903f-ed49-48b6-b5f8-bc4ff676fce3'
export AZURE_CLIENT_SECRET='TYY5A~I2d19dffcf938ImHBeS~-.S4db2318T.'
export AZURE_TENANT_ID='44db2318-9218-41b4-b935-2d19dffcf938'
export AZURE_STORAGE_ACCOUNT='stmystaticwebsite'

Déploiement

# Authentification
az login --service-principal -u $AZURE_APP_ID -p $AZURE_CLIENT_SECRET --tenant $AZURE_TENANT_ID
# Suppression des fichiers statiques existants
az storage blob delete-batch \
  --account-name $AZURE_STORAGE_ACCOUNT --auth-mode login \
  --source '$web' --pattern '*'
# Envoi des nouveaux fichiers statiques
az storage blob upload-batch \
  --account-name $AZURE_STORAGE_ACCOUNT --auth-mode login \
  --destination '$web' -s my_static_app_dir

CDN

Au cas où Microsoft Azure CDN est activé pour servir le site statique, il faut penser à le purger.

Variables d’environnement à configurer

  • AZURE_RESOURCE_GROUP (ex : RG_MY_STATIC_WEBSITE) :

    AZURE_RESOURCE_GROUP

  • AZURE_CDN_PROFILE_NAME (ex : cdnpmystaticwebsite) :

    AZURE_CDN_PROFILE_NAME

  • AZURE_CDN_ENDPOINT_NAME (ex : cdnemystaticwebsite) : c’est le même qu’AZURE_CDN_PROFILE_NAME, mais avec cdne plutôt que cdnp en préfixe.

export AZURE_RESOURCE_GROUP='RG_MY_STATIC_WEBSITE'
export AZURE_CDN_PROFILE_NAME='cdnpmystaticwebsite'
export AZURE_CDN_ENDPOINT_NAME='cdnemystaticwebsite'

Purge du CDN

az cdn endpoint purge \
  --resource-group $AZURE_RESOURCE_GROUP \
  --profile-name $AZURE_CDN_PROFILE_NAME \
  --endpoint-name $AZURE_CDN_ENDPOINT_NAME \
  --content-paths '/*'

Astuce Qui utilise le port ?

Sous Windows, pour savoir quel processus utilise un port, lancez la commande Get-Process dans Powershell :

Exemple pour le port 5433 :

Get-Process -Id (Get-NetTCPConnection -LocalPort 5433).OwningProcess

Astuce Analyser l’occupation de l’espace disque

Sous Linux, l’utilitaire ncdu (pour NCurses Disk Usage) permet de trouver quel fichier ou répertoire vous bouffe tout votre espace disque.

Il est disponible sur les dépôts officiels Debian et Ubuntu et donc facile à installer.

sudo apt install ncdu
ncdu

Note : ncdu a été réécrit dans une v2 encore récente. Selon la version des dépôts, c’est peut-être la v1 qui sera installée.

Erreur Docker écrase le réseau VPN

Lorsque docker crée des réseaux virtuels entre ses conteneurs, il utilise des plages IP.
En général pas de problème, il utilise des plages non couramment utilisées.

Par contre, si ses plages habituelles ne sont pas disponibles (ou pour d'autres raisons ?), il est possible qu'il en utilise une autre, par exemple 192.168.x.x.
Cela peut alors être problématique, surtout si vous utilisez un VPN ou des ressources réseaux en parallèle, car cette plage est classiquement utilisée. On peut alors avoir un conflit d'adressage et les ressources réseaux ou du VPN peuvent ne plus être accessibles.

Pour corriger ça, une première approche consiste à killer le réseau (créé par docker) qui pose problème puis à le recréer.
Pour cela :

# Listage des réseaux créés par docker
docker network list

# Identifiez le réseau correspondant au conteneur qui a causé le problème (copiez son ID)
# Pour vérifier la plage IP qu'il utilise :
docker network inspect <ID>

# Suppression du réseau qui pose problème
docker network rm <ID>

Si cela ne suffit pas, essayez la suite de la procédure proposée ici.

Astuce Bypasser un runlevel

Pendant le lancement du système, des services sont démarrés.
L'ordre de lancement a une importance, car beaucoup de services ont besoin d'autres services pour fonctionner.

Sous linux il y a donc la notion de runlevel (cf. wikipédia). Les runlevels (niveau d'exécution) vont de 0 à 6 et se font un à un dans l'ordre croissant.

Il arrive qu'une erreur se produise lors du lancement d'un service à un certain runlevel, bloquant ainsi le démarrage.
Il est possible de forcer le passage au niveau suivant, même si tout n'est pas encore terminé.

Pour cela appuyez sur les touches suivantes durant l'initialisation : CTRL + ALT + F<NIVEAU>
Avec <NIVEAU> le niveau de runlevel vers lesquels passer (ex: CTRL + ALT + F4 pour passer au niveau 4).

Astuce Supprimer les images/conteneurs/volumes docker

Pour supprimer tous les conteneurs docker :

docker rm $(docker ps -a -q)

Pour supprimer toutes les images docker :

docker rmi $(docker images -q)

Pour supprimer tous les volumes docker :

docker volume prune

Astuce Savoir quel processus utilise un port

Sous Linux, vous pouvez utiliser la commande suivante pour savoir quel processus utilise un port :

# Pour le port 80
netstat -tlnp | grep 80

Cela retournera par exemple :

tcp6       0      0 :::80                   :::*                    LISTEN      32198/apache2

L'ID du processus étant ici 32198.

Remarque : Pour voir tous les processus, il sera peut-être nécessaire de lancer la commande en tant que root (ou avec sudo).