Logo carnetderootxzz@carnetderoot.net"La simplicité est la sophistication suprême" - Léonard De Vinci
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
mercredi 12 février 2020

:: 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 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 ]


dimanche 05 février 2017

:: Docker ::

Introduction

Commandes principales

Lister les containers

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Vérifier la version

$ docker version
Client:
 Version:      1.13.0
 API version:  1.25
 Go version:   go1.7.3
 Git commit:   49bf474
 Built:        Wed Jan 18 16:20:26 2017
 OS/Arch:      windows/amd64

Server:
 Version:      1.13.0
 API version:  1.25 (minimum version 1.12)
 Go version:   go1.7.3
 Git commit:   49bf474
 Built:        Wed Jan 18 16:20:26 2017
 OS/Arch:      linux/amd64
 Experimental: true

Infos supplémentaires

$  docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 1.13.0
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host ipvlan macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 03e5862ec0d8d3b3f750e19fca3ee367e13c090e
runc version: 2f7393a47307a16f8cee44a37b262e8b81021e3e
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
Kernel Version: 4.9.4-moby
Operating System: Alpine Linux v3.5
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.934 GiB
Name: moby
ID: 5GS5:CDLI:QBVM:CI6Q:7EZ3:3SXU:33E5:IBQQ:AWBX:H4WA:K3PU:L4UT
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
 File Descriptors: 13
 Goroutines: 21
 System Time: 2017-02-05T18:55:34.4573341Z
 EventsListeners: 0
Registry: https://index.docker.io/v1/
Experimental: true
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

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
78445dd45222: Pulling fs layer
78445dd45222: Verifying Checksum
78445dd45222: Download complete
78445dd45222: Pull complete
Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7
Status: Downloaded newer image for hello-world:latest

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

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

dimanche 04 décembre 2016

:: Archlinux - Aide mémoire ::

Systemd

Commandes

systemctl                                 # Contrôle systemd et gère les unités.
journalctl                                # Consultation du journal de systemd.
loginctl                                  # Contrôle des sessions utilisateurs (systemd-logind).

Commandes système

systemctl reboot
systemctl poweroff
systemctl suspend
systemctl hibernate

Opérations basiques

Gestion des unités

systemctl                                 # Liste des unités
systemctl list-units
systemctl status <unit>                   # Affiche le statut de l'unité
systemctl list-dependencies [<unit>]      # Liste des dépendances d'une unité

Opérations

systemctl start <unit>                    # Démarre l'unité
systemctl stop <unit>                     # Arrête l'unité
systemctl restart <unit>                  # Redémarre l'unité
systemctl reload <unit>                   # Recharge l'unité
systemctl enable <unit>                   # Active l'unité au démarrage
systemctl disable <unit>                  # Désactive l'unité au démarrage

Maintenance

Lister les services en échec

$ systemctl --failed
  UNIT                         LOAD   ACTIVE SUB    DESCRIPTION
● systemd-modules-load.service loaded failed failed Load Kernel Modules

On récupère ainsi le nom du service en échec à partir duquel on va pouvoir demander plus de détails.

Détails sur le service en échec

$ systemctl status systemd-modules-load.service
● systemd-modules-load.service - Load Kernel Modules
   Loaded: loaded (/usr/lib/systemd/system/systemd-modules-load.service; static; vendor preset: disabled)
   Active: failed (Result: exit-code) since Sun 2016-12-04 09:24:59 CET; 18min ago
     Docs: man:systemd-modules-load.service(8)
           man:modules-load.d(5)
  Process: 333 ExecStart=/usr/lib/systemd/systemd-modules-load (code=exited, status=1/FAILURE)
 Main PID: 333 (code=exited, status=1/FAILURE)

Ces informations nous permettent de récupérer le PID du process incriminé, et de cibler plus précisément notre recherche :

$ journalctl _PID=333
-- Logs begin at Mon 2016-11-21 08:22:44 CET, end at Sun 2016-12-04 09:40:41 CET. --
déc. 04 09:24:59 mani systemd-modules-load[333]: Failed to find module 'vboxdrv'
déc. 04 09:24:59 mani systemd-modules-load[333]: Failed to find module 'vboxpci'
déc. 04 09:24:59 mani systemd-modules-load[333]: Failed to find module 'vboxnetadp'
déc. 04 09:24:59 mani systemd-modules-load[333]: Failed to find module 'vboxnetflt'
déc. 04 09:24:59 mani systemd-modules-load[333]: Failed to find module 'vboxdrv'

Maintenant c'est déjà plus clair, le problème semble provenir de modules absents. Le nom de ces modules nous donne un indice sur l'application incriminée, ici VirtualBox.

Gestion du journal

$ journalctl --disk-usage                 # Taille occupée par les journaux sur le disque
$ journalctl --verify                     # Vérification de la "possible" corruption des fichiers journaux

Taille du journal

Editer le fichier /etc/systemd/journald.conf et modifier la valeur suivante :

[Journal]
...
SystemMaxUse=50M

Nettoyage du journal

$ sudo journalctl --vacuum-size=50M       # Suppression des journaux archivés jusqu'à ce que leur taille totale descende en deça de 50Mo
$ sudo journalctl --vacuum-time=2weeks    # Suppression des événements agés de plus de deux semaines

Gestion des paquets

Liste des miroirs

Générer la liste des miroirs

Site de référence : Archlinux - Pacman Mirrorlist Generator

Evaluer les miroirs

La liste des miroirs les plus rapides peut être déterminée à l'aide de l'utilitaire /usr/bin/rankmirrors.
Pour mettre à jour la liste des miroirs français en http/https et IPv4, lancer les commandes suivantes :

$ wget 'https://www.archlinux.org/mirrorlist/?country=FR&protocol=http&protocol=https&ip_version=4' -O mirrorlist.new
$ sed -i 's/^#Server/Server/' mirrorlist.new
$ rankmirrors -n 6 mirrorlist.new > mirrorlist
$ sudo cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
$ sudo cp mirrorlist /etc/pacman.d/mirrorlist

Automatiser la mise à jour de la liste des miroirs

Installer l'utilitaire update-pacman-mirrorlist

$ yaourt -S update-pacman-mirrorlist

Adapter la configuration (si besoin) :

$ sudo vi /etc/update-pacman-mirrorlist
$ sudo vi /usr/lib/systemd/system/update-pacman-mirrorlist.timer

Activer et lancer le timer :

$ sudo systemctl enable update-pacman-mirrorlist.timer
$ sudo systemctl start update-pacman-mirrorlist.timer

Pacman

Opérations de base

Synchronisation (-S)

$ sudo pacman -Sy                      # Synchronise la liste des paquets
$ sudo pacman -Syu                     # Synchronise la liste des paquets et effectue une mise à jour
$ sudo pacman -Ss <package>            # Cherche un paquet contenant le terme "package"
$ sudo pacman -Si <package>            # Information sur un paquet
$ sudo pacman -S  <package>            # Installe "package"
$ sudo pacman -S --asdeps              # Installe un paquet comme dépendance

Mise à jour (-U)

$ sudo pacman -U  <package>            # Met à jour "package"

Requête (-Q)

$ sudo pacman -Q                       # Liste les paquets installés
$ sudo pacman -Ql <package>            # Liste les fichiers d'un paquet
$ sudo pacman -Qo /path/file           # Demande à quel paquet appartient le fichier
$ sudo pacman -Qdtq                    # Liste des dépendances inutiles

Suppression (-R)

$ sudo pacman -Rs <package>            # Supprime un paquet et ses dépendances
$ sudo pacman -Rsn <package>           # Supprime un paquet, sa configuration et ses dépendances
$ sudo pacman -Rs $(pacman -Qtdq)      # Suppression des dépendances inutiles

Création de la liste des paquets installés pour réinstallation

$ sudo pacman -Qqet | grep -v "$(pacman -Qqg base)" > pkglist

Réinstallation à partir de la liste des paquets

$ sudo pacman -S $(cat pkglist)

Gestion du cache de paquets

Suppression des paquest non-installés du cache (anciennes versions ou non installées sur le système) :

$ sudo pacman -Sc

Il est aussi possible de vider complètement le cache. Il s’agit d’une très mauvaise pratique qui empêche toute réinstallation de paquets depuis le cache et impose donc de les télécharger à nouveau. Vous ne devriez jamais utiliser cette commande à moins d’un besoin absolu de récupérer de l’espace disque.

$ sudo pacman -Scc

AUR

$ yaourt (utilise la même syntaxe que pacman)

Mise à jour du système

$ yaourt -Syua                         # Mise à jour du système (pacman + aur)

Local

Attention ! Pour des raisons de sécurité, éviter d'utiliser makepkg en root. Préférer l'utilisation de sudo.

Création du paquet

$ sudo makepkg -s

Installation du paquet créé

$ sudo pacman -U <package>-pkg.tar.gz