Logo carnetderootxzz@carnetderoot.net"La simplicité est la sophistication suprême" - Léonard De Vinci
mardi 09 avril 2024

:: Docker ::

Principes

-------------- -------------- --------------
| ---------- | | ---------- | | ---------- |
| |  App1  | | | |  App2  | | | |  App3  | |
| ---------- | | ---------- | | ---------- |
| ---------- | | ---------- | | ---------- |
| |  Deps  | | | |  Deps  | | | |  Deps  | |
| ---------- | | ---------- | | ---------- |
|            | |            | |            |
| Conteneur1 | | Conteneur2 | | Conteneur3 |
-------------- -------------- --------------
--------------------------------------------                ------------
|                  Images                  | <-----get----- | Registry |
--------------------------------------------                ------------
--------------------------------------------
|              Moteur Docker               |
--------------------------------------------
--------------------------------------------
|                    OS                    |
--------------------------------------------
--------------------------------------------
|                 Serveur                  |
--------------------------------------------

Installation

Nettoyage

$ sudo apt remove docker docker-engine docker.io conteneurd runc

Déclaration du dépôt Docker

$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

Installation de docker

$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli conteneurd.io docker-buildx-plugin docker-compose-plugin

Ajout de l'utilisateur au groupe docker

$ sudo usermod -aG docker $USER

Premiers pas

Vérifier la version

$ docker version
Client:
[...]
Server:
[...]

Infos supplémentaires

$ docker info
conteneurs: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
[...]

Test du bon fonctionnement de l'installation

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
[...]
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
[...]

Commandes principales

Lister les conteneurs

conteneurs actifs

$ docker ps
conteneur ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
3dbec964fa3a   nginx:latest   "/docker-entrypoint.…"   7 minutes ago   Up 7 minutes   80/tcp    agitated_dubinsky

Tous les conteneurs

$ docker ps -a [--all]
conteneur ID   IMAGE          COMMAND                  CREATED          STATUS                      PORTS     NAMES
3dbec964fa3a   nginx:latest   "/docker-entrypoint.…"   6 minutes ago    Up 7 minutes                80/tcp    agitated_dubinsky
882f5d50bdab   nginx:latest   "/docker-entrypoint.…"   13 minutes ago   Exited (0) 12 minutes ago             dreamy_yalow
[...]

Lancer un conteneur

$ docker run nginx:latest

Options

  • -d : lance le conteneur en arrière-plan (detached)
  • -ti : mode interactif (text interactive)
  • --rm : supprime le conteneur lorsqu'il est stoppé
  • --name : assigne un nom au conteneur
  • --hostname : modifie le hostname du système dans le conteneur
  • --dns : précise le serveur DNS à utiliser dans le conteneur

Exemple :

$ docker run -d -ti --rm --name c1 --hostname h1 --dns 192.168.0.254 debian:latest

Manipuler les conteneurs

Note : on peut utiliser soit le nom du conteneur, soit son id.

Stopper un conteneur

$ docker stop c1

Démarrer un conteneur

$ docker start c1

Supprimer un conteneur

Note : on ne peut pas supprimer un conteneur actif, il faut d'abord le stopper ou forcer sa suppression avec l'argument "--force" ou "-f"

$ docker rm c1
$ docker rm -f c1

Pour supprimer tous les conteneurs :

$ docker rm -f $(docker ps)
$ docker rm -f $(docker ps -a)

Gestion des volumes

Lister les volumes

$ docker volume ls

Créer un volume

$ docker volume create mynginx

$ docker volume ls
DRIVER    VOLUME NAME
local     mynginx

Consulter les métadatas

$ docker volume inspect mynginx
[
    {
        "CreatedAt": "2024-04-04T17:31:23+02:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/mynginx/_data",
        "Name": "mynginx",
        "Options": null,
        "Scope": "local"
    }
]

Supprimer un volume

Note : on ne peut pas supprimer un volume en cours d'utilisation

$ docker volume rm mynginx

Utiliser le volume dans un conteneur

$ docker run -d --name c1 -v mynginx:/usr/share/nginx/html/ nginx:latest

$ docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
c43d0ade1d09   nginx:latest   "/docker-entrypoint.…"   4 seconds ago   Up 3 seconds   80/tcp    c1

Pour vérifier, on lance un shell bash interactif dans le conteneur et on affiche le contenu du fichier index.html par défaut de nginx :

$ docker exec -ti c1 bash
root@c43d0ade1d09:/# cat /usr/share/nginx/html/index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
[...]
</body>
</html>

mercredi 05 avril 2023

:: Cheatsheet FreeBSD ::

Mise à jour

Mise à jour système

# freebsd-update fetch
# freebsd-update install

Mise à jour paquets

# pkg update
# pkg upgrade [-y]

Gestion des paquets pré-compilés

Recherche

$ pkg search neovim

Installation

# pkg install [-y] neovim

Téléchargement (sans installation)

$ sudo pkg fetch -y -d -o /usr/home/xzz/packages/ neovim

Options :

  • -d : téléchargement des dépendances
  • -o : répertoire cible
  • -y : sans confirmation

Téléchargement (sans installation) dans le répertoire cache par défaut

Par défaut pkg utilise le répertoire cache définit par la variable PKG_CACHEDIR du fichier /usr/local/etc/dpkg.conf (défaut /var/cache/pkg).

Installation d'un paquet téléchargé

$ sudo pkg install /usr/home/xzz/packages/All/neovim-0.8.2.pkg

Suppression de paquets

$ sudo pkg delete neovim

Suppression automatique des paquets inutilisés

$ sudo pkg autoremove

Note : relancer la commande plusieurs fois si nécessaire jusqu'à obtenir un résultat similaire au retour ci-dessous.

Checking integrity... done (0 conflicting)
Nothing to do.

Informations sur les paquets installés

Liste de tous les paquets installés

$ pkg info

Liste des paquets explicitement installés

$ pkg prime-list

Avec le repository d'origine :

$ pkg prime-origins

Informations sur un paquet

$ pkg info neovim
neovim-0.8.2
Name           : neovim
Version        : 0.8.2
[...]

Déterminer quel package a installé un fichier

$ pkg which /usr/local/bin/perl

Auditer les paquets installés

$ pkg audit -F
vulnxml file up-to-date
0 problem(s) in 0 installed package(s) found.

Option :

  • -F : met à jour la base avant de vérifier

Nettoyage du cache

Cette commande permet de ne garder que la dernière version des paquets en cache.

# pkg clean

Pour vider intégralement le cache :

# pkg clean -a

Gestion des utilisateurs

Ajout d'un nouvel utilisateur

# pw useradd -n xzz -c "Xzz" -s /bin/sh -m -w random

Options :

  • -n : Utilisateur
  • -c : Commentaire
  • -s : Emplacement du shell
  • -m : Création du répertoire personnel
  • -w : Mode de génération du mot de passe

Suppression d'un utilisateur et de son répertoire personnel

# pw userdel -n xzz -r

Option :

  • -r : Suppression du répertoire utilisateur

Ajout d'un utilisateur au groupe wheel

# pw groupmod wheel -m xzz

Références


mercredi 23 juin 2021

:: Bash - Trucs utiles ::

Couleurs

Afficher les couleurs supportées par le terminal

for color in {0..255}; do
    tput setab $color
    echo -n "$color "
done
tput sgr0
echo

~/.bashrc

Equivalence de couleurs

Couleur Code
Black 0;30
Blue 0;34
Green 0;32
Cyan 0;36
Red 0;31
Purple 0;35
Brown 0;33
Light Gray 0;37
Dark Gray 1;30
Light Blue 1;34
Light Green 1;32
Light Cyan 1;36
Light Red 1;31
Light Purple 1;35
Yellow 1;33
White 1;37

Eléments basiques

Code Elément affiché
\a Echappement
\d Date (Sun Jun 20)
\e Caractère 'Bell'
\h Nom d'hôte (hostname)
\H Nom d'hôte complet (hostname.domain.tld)
\j Nombre de process lancés par le shell
\l Nom du terminal
\n Retour à la ligne
\r Retour chariot
\u Nom d'utilisateur
\v Version de Bash
\w Répertoire courant
\W Chemin complet du répertoire courant
! Numéro d'historique de la commande en cours

Exemples

Couleur du prompt en rouge

PS1='\[\033[31m\][\u@\h \W]\$\[\033[0m\] '

Couleur du prompt en bleu

PS1='\[\033[34m\][\u@\h \W]\$\[\033[0m\] '

Bashrc

#
# ~/.bashrc
#

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

####################
# SHELL OPTS
###############
#PS1='[\u@\h \W]\$ '
PS1='\[\033[34m\][\u@\h \w]\$\[\033[0m\] '

####################
# ENV
###############
# Editor
export EDITOR=vim

####################
# ALIAS
###############
# Colorization of outputs
alias diff='diff --color=auto'
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias ls='ls --color=auto'
alias dir='dir --color=auto'
alias vdir='vdir --color=auto'
alias ip='ip --color=auto'
alias dmesg='dmesg --color=always'

# Commands alias
alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'
alias cls='clear'
alias vi='vim'

# Tricks & Useful aliases
alias cd..='cd ..'
alias env='env | sort'
# -> if the second argument is an alias, it will get expanded prior to passing to sudo
alias sudo='sudo '
alias keygen='keygen -C "$(whoami)@$(uname -n)-$(date -I)"'

Références


lundi 05 avril 2021
jeudi 02 juillet 2020

:: Xresources ::

Le fichier Xresources, habituellement ~/.Xresources, peut être utilisé pour configurer les applications X.

Configuration de xterm

Xterm.termName: xterm
Xterm.vt100.locale: true
XTerm.vt100.metaSendsEscape: true
XTerm.vt100.backarrowKey: false
XTerm.ttyModes: erase ^?
XTerm.vt100.saveLines: 4096
XTerm.vt100.scrollBar: true
XTerm.vt100.scrollbar.width: 8
!-------------------------------------------------------------------------------
! Fonts
XTerm.vt100.faceName: DejaVu Sans Mono:size=9:antialias=true
XTerm.vt100.font: 7x13
!-------------------------------------------------------------------------------
! Colors
*background: #181818
*foreground: #c0c0c0
*cursorColor: #93a1a1
!! black dark/light
*color0: #121212
*color8: #2e3436
!! red dark/light
*color1: #a35b66
*color9: #ab6b74
!! green dark/light
*color2: #99ab6f
*color10: #acb972
!! yellow dark/light
*color3: #ca9733
*color11: #ccaa69
!! blue dark/light
*color4: #495d6e
*color12: #687987
!! magenta dark/light
*color5: #825969
*color13: #977381
!! cyan dark/light
*color6: #839191
*color14: #98a4a4
!! white dark/light
*color7: #e0e0e0
*color15: #e5e5e5

mercredi 12 février 2020

:: ALSA ::

Liste des périphériques audio

$ cat /proc/asound/cards
 0 [PCH            ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xf2520000 irq 30

Liste des périphériques de capture

$ arecord -l
**** Liste des Périphériques Matériels CAPTURE ****
carte 0: PCH [HDA Intel PCH], périphérique 0: CX20590 Analog [CX20590 Analog]
  Sous-périphériques: 1/1
  Sous-périphérique #0: subdevice #0

Test du microphone

Enregistrement

$ arecord -d 10 /tmp/test-mic.wav

Lecture

$ aplay /tmp/test-mic.wav

Utilitaires Alsa

Mixeur Alsa

$ alsamixer

Enregistrmeent des paramètres

$ sudo alsactl store

:: Création et montage d'une partition chiffrée LUKS sur sdx1 ::

Note : remplacer sdx1 par le périphérique concerné

Installation de cryptsetup

$ sudo apt-get install cryptsetup

Créez une partition non-formatée (fdisk, gdisk, etc.)

Création de la partition chiffrée

$ sudo cryptsetup luksFormat /dev/sdx1

En précisant un format (exemple de chiffrement fort) :

$ sudo cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 /dev/sdx1

Ouverture

$ sudo cryptsetup luksOpen /dev/sdx1 sdx1_crypt

Création du répertoire de montage

$ sudo mkdir /mnt/sdx1_crypt

Formatage

$ sudo mkfs.ext4 /dev/mapper/sdx1_crypt

Montage

$ sudo mount /dev/mapper/sdx1_crypt /mnt/sdx1_crypt

Modifications des permissions pour que le répertoire appartienne à l'utilisateur courant et au groupe 'users'

$ sudo chown $USER:users /mnt/sdx1_crypt/ -R

Démontage du volume

$ cd / && sudo umount /mnt/sdx1_crypt    

Fermeture

$ sudo cryptsetup luksClose sdx1_crypt

Utilisation du volume

Ouverture

$ sudo cryptsetup luksOpen /dev/sdx1 sdx1_crypt

Montage

$ sudo mount /dev/mapper/sdx1_crypt /mnt/sdx1_crypt

Instructions pour démonter et fermer

Démontage

$ cd / && sudo umount /mnt/sdx1_crypt    

Fermeture

$ sudo cryptsetup luksClose sdx1_crypt

One-liner

Ouverture

$ sudo cryptsetup luksOpen /dev/sdx1 sdx1_crypt && sudo mount /dev/mapper/sdx1_crypt /mnt/sdx1_crypt

ou, si on est root :

# echo 'passphrase' | cryptsetup luksOpen /dev/sdx1 sdx1_crypt && mount /dev/mapper/sdx1_crypt /mnt/sdx1_crypt

Fermeture

$ cd / && sudo umount /mnt/sdx1_crypt && sudo cryptsetup luksClose sdx1_crypt

ou, si on est root :

# cd / && umount /mnt/sdx1_crypt && cryptsetup luksClose sdx1_crypt

dimanche 06 mai 2018

:: Git ::

Introduction

Fichiers de configuration

Git utilise une série de fichiers de configuration pour déterminer son comportement. Les emplacements sont lus dans un ordre précis et les valeurs lues en dernier écrasent les précédentes ("C'est le dernier qui parle qui a raison"). Vous pouvez positionner ces valeurs manuellement en éditant ces fichiers, mais je vous recommande d'utiliser la commande git config, ne serait-ce que pour éviter des erreurs de syntaxe.

/etc/gitconfig

Contient des valeurs pour tous les utilisateurs du système et tous leurs dépôts. Pour lire et modifier ce fichier, utiliser l'option --system avec git config.

$ git config --system [...]

~/.gitconfig

Spécifique à chaque utilisateur. Pour lire et modifier ce fichier, utiliser l'option --global.

$ git config --global [...]

.git/config

Le dernier emplacement lu par git est le fichier de configuration du dépôt en cours d'utilisation. Ces valeurs sont spécifiques à un unique dépôt. Pour lire et modifier ce fichier, utiliser l'option --local.

$ git config --local [...]

git-config

Pour modifier le comportement de git, il est nécessaire de spécifier certains paramètres de configuration à l'aide de la commande git-config.

Synopsis

$ git config [<file-option>] [type] [--show-origin] [-z|--null] name [value [value_regex]]
$ git config [<file-option>] [type] --add name value
$ git config [<file-option>] [type] --replace-all name value [value_regex]
$ git config [<file-option>] [type] [--show-origin] [-z|--null] --get name [value_regex]
$ git config [<file-option>] [type] [--show-origin] [-z|--null] --get-all name [value_regex]
$ git config [<file-option>] [type] [--show-origin] [-z|--null] [--name-only] --get-regexp name_regex [value_regex]
$ git config [<file-option>] [type] [-z|--null] --get-urlmatch name URL
$ git config [<file-option>] --unset name [value_regex]
$ git config [<file-option>] --unset-all name [value_regex]
$ git config [<file-option>] --rename-section old_name new_name
$ git config [<file-option>] --remove-section name
$ git config [<file-option>] [--show-origin] [-z|--null] [--name-only] -l | --list
$ git config [<file-option>] --get-color name [default]
$ git config [<file-option>] --get-colorbool name [stdout-is-tty]
$ git config [<file-option>] -e | --edit

Paramètres de configuration

Identité

Note importante : ces informations sont utilisées par Git de manière indélébile (on ne peut changer l'auteur d'un commit après-coup, ni son adresse email).

$ git config --global user.name "Xzz"
$ git config --global user.email "xzz@carnetderoot.net"

Editeur de texte

A ne pas oublier, mon éditeur de texte préféré (parce que nano par défaut, hein, sérieux...) :

$ git config --global core.editor vi

Colorisation de la sortie de git

Pour faire simple on peut activer la colorisation de plusieurs paramètres en une seule commande :

$ git config --global color.ui auto

Si on préfère agir de manière spécifique, on peut modifier les paramètres un par un

$ git config --global color.branch auto
$ git config --global color.diff auto
$ git config --global color.interactive auto
$ git config --global color.status auto

Pour plus de détails sur les paramètres disponibles et leurs effets, je vous invite à consulter la documentation de référence git-config

Vérification des paramètres

$ git config --list
user.name=Xzz
user.email=xzz@carnetderoot.net
color.ui=auto
core.editor=vi

Utilisation de Git

Utilisation courante

Initialisation d'un projet

$ cd projet
$ git init
Dépôt Git vide initialisé dans /path/to/projet/.git/

Ajout des fichiers au projet

$ git add .

Supprimer des fichiers de l'index (ne plus les suivre)

$ git rm --cached fichier_a_ne_plus_suivre.pm

Attention à ne pas oublier l'option --cached ! Si vous omettez ce commutateur, la commande supprimera aussi le fichier du système de fichier :-)

Commit initial

$ git commit -m "Mon premier commit"
[master (commit racine) 6337a68] Commit initial
 89 files changed, 61074 insertions(+)
 create mode 100644 MANIFEST
 create mode 100644 MANIFEST.SKIP
 ...

Retirer des éléments de la synchronisation

Certains fichiers n'ayant pas besoin d'être synchronisés (fichiers temporaires, fichiers de swap, répertoire de sessions, etc.), on crée un fichier .gitignore contenant la liste des fichiers et répertoires à ignorer.

$ vi .gitignore

Contenu de .gitignore :

# Commentaire
# Ignorer les fichiers journaux
logs/
# Ignorer les fichiers temporaires
tmp/
# Ignorer les fichiers en cours d'edition
*.swp
...

Ajout du fichier au repository

$ git add .gitignore
$ git commit -m "Ajout du fichier .gitignore"
[master 8896d55] Ajout du fichier .gitignore
 1 file changed, 6 insertions(+)
 create mode 100644 .gitignore

Ignorer des fichiers déjà commités

Dans le cas où on ne veut plus synchroniser des fichiers déjà commités, ni avoir un retour lors d'un git status, il est préférable de réindexer l'ensemble des fichiers à synchroniser.

Pour cela, le moyen radical est de supprimer l'index existant, rajouter les fichiers puis faire un commit.

Attention : penser à commiter les dernieres modifications de code avant de lancer les commandes ci-dessous

$ git rm -r --cached
$ git add .
$ git commit -m "Suppression de tous les fichiers de l'index puis re-ajout pour bonne prise en compte du fichier .gitignore"

Vérification

$ git status
Sur la branche master
rien à valider, la copie de travail est propre

Historique des commits

$ git log

Création d'un dépôt distant

Sur le serveur distant

$ cd /opt/git
$ mkdir projet.git
$ cd projet.git/
$ git --bare init
Dépôt Git vide initialisé dans /opt/git/projet.git/

Sur le poste hébergeant le dépôt local

$ cd projet
$ git init
$ git add .
$ git commit -m "Mon premier commit"
$ git remote add nom_depot user@serveur:/opt/git/projet.git
$ git push nom_depot master

Clonage du dépôt sur un autre poste

$ git clone user@serveur:/opt/git/projet.git

Pousser ses modifications

$ git push nom_depot master

Gestion des dépôts

Afficher les dépôts enregistrés

$ git remote
$ git remote -v

Ajouter un dépôt

$ git remote add nom_depot url

Modifier un dépôt

$ git remote set-url nom_depot url

Supprimer un dépôt

$ git remote rm nom_depot

Références


dimanche 04 février 2018

:: Rundeck ::

Rappel

Aller dans le répertoire "rundeck"

PS C:\> cd D:\rundeck

rd-queue

Synopsis

rd-queue [*action*] [-h] [-e id] [-p project]

Actions

  • list (default) : liste les exécutions en cours
  • follow : suit le retour de l'exécution spécifiée par son id
  • kill : tue l'exécution en cours spécifié par son id

Options

Option Description Actions
-h, --help Affiche l'aide
-p Nom du projet list
-e, --eid Id d'exécution follow, kill
-q, --quiet Mode silencieux follow
-r, --progress Affiche la progression de l'exécution follow
-t, --restart Affiche la log depuis le début follow

Lister exécutions en cours

> .\tools\bin\rd-queue list -p MyProject
Queue: x items
[id] NomJob <http://lien_vers_details_du_job>
...

Suivre exécution d'un job

Avec affichage de la sortie

> .\tools\bin\rd-queue follow -e 183
[...]
[183] execution status: success

Avec l'indicateur de progression

> .\tools\bin\rd-queue follow -e 183 --progress
################
[183] execution status: success

rd-jobs

[ à suivre ]


:: MultiMarkdown ::

Basics

What Syntax
Italic *Italic* or _Italic_
*Bold * **Bold** or __Italic__
Both ***Both*** or ___Both___
Block Quote > Block Quote (like email)
List *, + or -
Ordered 1. on first item,
Header ### Header
HRule --- or *** on empty line

Links

What Syntax
Basic [CNN](http://cnn.com)
Reference [link][linkid] for [link][linkid] then [linkid]: http://cnn.com "title" on its own line elsewhere.
Def Link [linkid]: http://cnn.com "title" on its own line elsewhere.
Short <http://cnn.com> <pierce@twinforces.com>
Internal [Links][] (any header name)
Footnote1 [^footnote] def footnote later
Def Footnote [^footnote]: text
Image ![Image Name](URL "title") for an image
![Image Ref] then later def
![Caption][Image Ref] then later def
Image Def ```[Image Ref]: URL "Title" width="45px" height="45px"

Tables

Table caption, also works as a reference
First Header Second Header Third Header
First row Bold Very long data entry
Second row Cell that spans across two columns

| First Header | Second Header | Third Header | | :------------ | :-----------: | -------------------: |
| : Left align | : centered : | Right align : | | First row | **Bold** | Very long data entry | | Second row | Cell that spans across two columns ||
[Table caption, also works as a reference][section-mmd-tables-table1]

Critic

What Syntax
{--a delete. --} a delete. {-- remove --}
{++an add. ++} {++ add++}
swap {~~from~>to~~} {\~\~\from\~>to\~\~}
{==a highlight==} {\=\=highlight\=\=}
Comment, which you can't see{>>What is it a test of?<<}. {>>Comment?\<\<}

  1. This is the footnote ↩