Linux

Commandes General

Commandes General

Lister les services

Sur CentOS/RedHat Tous :

systemctl list-units --type service --all

En cours :

systemctl list-units --type service --all | grep running

Sur Debian :

service --status-all
Commandes General

Quelques commandes

Commandes simples :

\ : utilisation des apostrophes

Lire les fichiers : cat, more, less

nmtui : modifier connexion via interface graphique
ctrl + alt + f1 ou f2 : changer de terminal
# : utilisation compte root
$ : utilisation autre utilisateur
~ : répertoire de connexion
ctrl + s : Pause du terminal
ctrl + q : Reprendre le terminal
ctrl + w : Effacer le mot
ctrl + i : efface l'affichage
ctrl + u : efface ligne entière
man -k : recherche pages du manuel associés à un mot

who : liste utilisateurs connectés
whoami : affiche utilisateur actuel connecté
finger : affiche informations plus précises sur l'utilisateur connecté
pwd : affiche répertoire courant
Cd ~ => renvoie dans le répertoire /home personnel.


/bin/bash : Shell par défaut | Boîte de l'invite de commande.
passwd : modifier mot de passe | commandes liés au mot de passe
passwd -l : verrouiller compte
passwd -u : déverrouiller compte
passwd -d : désactiver saisie du mot de passe pour un compte

wc : compter le nombre de lignes, mots, caractères contenus dans un fichier.
wc -l -w -c (line, word, caracter)

env : affiche varaibles d'environnement
echo : afficher valeur d'environnement
date : affiche date
exit or logout : déconnecter utilisateur
which [commande] : affiche le chemin complet d'une commande

Changement de valeur d'une variable d'environnement
export PS1=’[\u@\h \W \t]$’
Export valide la nouvelle variable.
$TMOUT : Variable qui déconnectee automatiquement au bout d'un temps défini.
La commande export ne marche que pour la session en cours. (temporaire)

==Recherche==
* : substitue le caractères générique ? par n'impoorte quel caractère.
[] : remplace le caractère par un des caractères donnés. Exemple
[abc] remplace le caractère par a ou b ou c
[f-z] : caractère entre f et z. Respect de la casse.
exemple : ls [fr]?tab
! : cherche les caractères ne se trouvant pas entre les
{} : Cherche tous les noms de fichiers commençant par une chaîne de caractères au lieu
d'un seul caractère.
Avec des doubles apostrophes, les caractères spéciaux sont interprétés mais pas le * .

alias : remplace une ligne de commandes complexe par son alias.
pour l'avoir de manière permanente pour tous les utilisateurs, l'ajouter dans .bashrc
qui se trouve dans le dossier de connexion de l'utilisateur.

unalias -a nom_alias : supprimer alias
type : affiche les informations à propos d'une commande et son interprétation.
cat : sert à lire un fichier
whereis : localiser rapidement une commande externe ainsi que les fichiers
aide et sources associées.

source .bash_profile : recharger le fichier profile sans se déconnecter.
set -o : affiche l'état (actif ou inactif) des options
set -o [nom_option] : activer
set +o [nom_option] : désactiver

Tous les fichiers qui commencent par p ou se terminent par d :
ls -d {p*,*.d}

==Avancé==
processus associé à des descripteurs de fichiers.
point d'entrée = paramètre rentré sur le clavier
sortie = résultat affiché à l'écran
Entrée (0) => Processus => Sortie (1)
||
Erreur (2)

< : rediriger l'entrée
> : rediriger la sortie vers un fichier
>> : permet d'ajouter dans un fichier existant
2> : redirection de l'erreur standard
n>&m : avoir une sortie + erreur dans un seul fichierr
où n est numéro du descripteur à rediriger et m : numéro de celui vers
lequel il faut renvoyer les données . exemple : Ou > ficsortie 1>&2

/dev/null : puit sans fond. Tout ce qui est envoyé est supprimé du système
exemple : ps -ef > /tmp/test
ls bin dev bleu > ficout 2>> ficerr2

/dev : fichiers qui sont des pointeurs vers des périphériques
touch : permet de changer l'heure du fichier et créé un fichier vide.

tubes (pipe) : |
tee : lis l'entrée,  génèree le fichier et effectue une copie sur la sortie intermédiaire
grep : filtre et garde que ce qui contient après ce paramètre

su : switch user | changer d'utilisateur
su - [nom_user] : tirer permet de garder l'environnement de l'utilisateur actuel
Lancer une commande en tant qu'utilisateur test :
su - test -c "ps -ef"
chaque commande lancé via su crée une exécution en shell.

sudo : exécution de commandes en tant que sans élévation de compte /etc/sudoers


[Commandes Avancées]
Dmesg : verbosité du noyau. Les informations sur des périphériques attachés ou détachés apparaissent dedans.
Fdisk –l : commandes de table de partition
mount : monter le périphérique à un répertoire. | affiche la liste des montages
df : fourni la quantité d'espace occupé des systèmes de fichiers.
mkfs -t ext4 /dev/sdx : formater au format ext4

editeurs de texte : vi, nano, emacs
cd - => renvoie dans le répertoire précédent
file : permet de déterminer le type d'un fichier
stat : indique les informations du bloc où est stocké le fichier
mkdir -p : crée arborescence du répertoire

cp -R : Copier contenu d'un répertoire avec les droits associés.
mv : renommer ou déplacer fichiers
rename : renommer fichier

find : rechercher des fichiers
exemple : find / -name
find -size +1M : fichiers de plus d'un megaoctet
find -mtime : heure de modification

Grep permet de filtrer des lignes.
Grep –i => prend en compte les minuscules et majuscules
Grep –l => affiche uniquement les noms des fichiers possédant des lignes qui correspondent à la valeur donnée.

Cut => supprimer une partie de chaque ligne d’un fichier
Sort => trier les lignes d’un fichier.
Head => consulter le début d’un fichier
Tail => consulter la fin d’un fichier.

La commande watch permet d’exécuter un programme périodiquement en affichant le résultat à l’écran

ln : lien dur (hard link) -> seconde entrée pointant vers le même inode
ln -s : lien symbolique -> raccourci

Commandes General

MAIL

Pour voir la file d'attente :

mailq

Pour le journal des logs :

journalctl -u postfix

Pour forcer le renvoi des mails bloqués dans la file d'attente :

postfix flush

Pour tester l'envoi :

Mail email@addresse.com

et suivre les étape

Pour reload le service

postfix reload

Commandes General

Lancer une commande active même après la déconnexion

Précéder la commande par la commande nohup
S'il est nécessaire de récupérer la console, terminer la ligne avec une esperluette & exemple :

nohup  wget ftp://...../Fedora-8-i386-rescuecd.iso &

La sortie de la commande est loggué dans un fichier nohup.out
il est possible de consulter soit en direct en lançant immédiatement 

tail -f nohup.out

Soit après coup :

less nohup.out
Commandes General

NTP

Pour voir l'heure et le status du service

/etc/init.d/hwclock.sh show

Pour checker l'heure du matériel :

date; hwclock

Pour synchro :

hwclock --systohc

Pour debugguer :

hwclock --systohc --debug
Commandes General

Drop RAM SWAP CPU & MEM

lister les process qui occupe le swap :  

for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n -r | less

DROP mémoire cache + voir résultat 

free -h && sudo sysctl vm.drop_caches=3 && free –h

Relancer le swap

sudo swapoff –a && sudo swapon -a

Problème lié au swap

Déplacer le cache de Swap vers la mémoire si elle est pas trop sollicitée en exécutant la commande : 

swapoff -a

changer le swappiness à 10 au lieu de 40 (valeur recommandée sur postgre) ce qui a permis de soulager le swap
il ne sera sollicité que la mémoire passe en full (ce qui n'était pas le cas avant ce changement, le swap se remplit fréquemment même si la RAM est vide )


Pour modifier la valeur sans redémarrer le système d'exploitation, exécutez la commande suivante :

sysctl -w vm.swappiness=10

Pour modifier la valeur temporairement (après le redémarrage la valeur sera sautée)

htop

Pour reloader la config :

sysctl --system

une fois le swap vidé passer la commande suivante pour réactiver le swap :

swapon -a

La config swappiness se trouve : 
/etc/sysctl.conf

droper cache mem et swap autrement : 

sync; echo 3 > /proc/sys/vm/drop_caches

image.png

trier le CPU ou la mémoire sur la machine : 
top ou htop

commande avancée pour trier la mémoire: 

ps -eo size,pid,user,command --sort -size |    awk '{ hr=$1/1024 u; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' |    cut -d "" -f2 | cut -d "-" -f1

image.png

autres commande pour CPU et mem triez par top:

ps -eo pid,user,comm,%mem --sort=-%mem | head -n 6
ps -eo pid,user,comm,%mem --sort=-%cpu | head -n 6

Vous pouvez faire des teste de stress sur une machine pour voir comment elle réagit via :

Yum install stress

Commande stress mémoire : 

stress --vm 1 --vm-bytes 1G --timeout 30s

Commandes General

Astuces Cron

Vérifier la crontab système :

cat /etc/crontab

Lister les crontab de tous les utilisateurs  

for user in $(cut -f1 -d: /etc/passwd); do echo $user; crontab -u $user -l; done

Lister les crontab d'un user spécifique

crontab -l -u "user"

CRONTAB
mm hh jj MMM JJJ tâche
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0, Monday=1, and so on)
# |  |  |  |  |
# *  *  *  *  * user-name  command-to-be-executed

crontab -l
ls -al /etc/cron.*
cat /etc/cron.d/* | grep "votre recherche"

Valider la planification avec crontab guru :  
https://crontab.guru

Aide à la création de la cron:
https://crontab-generator.org/

Commandes General

Extraction link web page

image.png

image.png

Commandes General

Rechercher des fichier : find/locate/size

• Rechercher tous les fichiers avec l'extension .txt dans le répertoire courant :

find . -name "*.txt"

• Rechercher tous les fichiers avec l'extension .txt dans tous les sous-répertoires du répertoire courant :

find . -name "*.txt" -type f -exec ls -lh {} \;

• Rechercher tous les fichiers dont la taille est supérieure à 100 Mo :

find . -size +100M

• Rechercher tous les fichiers modifiés au cours des 7 derniers jours :

find . -mtime -7

Pour utiliser la commande locate, vous devez d'abord vous assurer que la base de données locate est à jour. Pour ce faire, exécutez la commande suivante :

sudo updatedb

Une fois la base de données locate à jour, vous pouvez commencer à rechercher des fichiers. La syntaxe de base de la commande locate est la suivante :

locate [options] nom_de_fichier

Par exemple, pour rechercher tous les fichiers avec l'extension .txt, vous pouvez exécuter la commande suivante :

locate *.txt

Recherche dans l'historique des commande taper sur le shell:

CRTL + R : 

LDAP

LDAP

Création Docker OPENLDAP image OSIXIA / GITHUB avec réplication

image.png

creation fake Docker sur le serveur : CREATION LDAP TEST SANS REPLICATION POUR TESTER un LDIF.

LDAP_CID=$(docker run --restart always --name ldap-test --hostname "hostname" --env LDAP_BASE_DN="DC" --env LDAP_ORGANISATION="NOM" --env LDAP_DOMAIN="domaine" --env LDAP_ADMIN_PASSWORD=PASSWORD --env LDAP_TLS=false -v /data2/ldap:/var/lib/ldap -v /data2/slapd.d:/etc/ldap/slapd.d -p 1389:389 --detach osixia/openldap:1.5.0)


 

########################################################################################################################################

 
creation Vrai Docker sur srv 1 avec replication et sécurité certificat ect.. = c'est une commande entiere a cp

LDAP_CID=$(docker run --restart always --name ldap --hostname "hostname" --env LDAP_BASE_DN="DC" --env LDAP_ORGANISATION="NOM" --env LDAP_DOMAIN="domaine"  --env LDAP_ADMIN_PASSWORD=PASSWORD  --env LDAP_TLS=true --env LDAP_TLS_VERIFY_CLIENT=never --env LDAP_REPLICATION=true --env LDAP_REPLICATION_HOSTS="#PYTHON2BASH:['ldap://noomduldap','ldap://noomduldap']" --env LDAP_TLS_CRT_FILENAME=cert.crt --env LDAP_TLS_KEY_FILENAME=cert.key --env LDAP_TLS_CA_CRT_FILENAME=ca.crt -v /data/ldap:/var/lib/ldap -v /data/slapd.d:/etc/ldap/slapd.d --volume /etc/pki/openldap/pprod-2:/container/service/slapd/assets/certs -p 389:389 -p 636:636 --detach osixia/openldap:1.5.0)


 
creation Vrai Docker sur srv 2 avec replication sur le 1 et sécurité certificat ect.. = c'est une commande entiere a cp

LDAP_CID=$(docker run --restart always --name ldap --hostname "hostname" --env LDAP_BASE_DN="DC" --env LDAP_ORGANISATION="NOM" --env LDAP_DOMAIN="domaine"  --env LDAP_ADMIN_PASSWORD=PASSWORD --env LDAP_TLS=true --env LDAP_TLS_VERIFY_CLIENT=never --env LDAP_REPLICATION=true --env LDAP_REPLICATION_HOSTS="#PYTHON2BASH:['ldap://noomduldap','ldap://noomduldap']" --env LDAP_TLS_CRT_FILENAME=cert.crt  --env LDAP_TLS_KEY_FILENAME=cert.key --env LDAP_TLS_CA_CRT_FILENAME=ca.crt  -v /data/ldap:/var/lib/ldap -v /data/slapd.d:/etc/ldap/slapd.d --volume /etc/pki/openldap/pprod-2:/container/service/slapd/assets/certs -p 389:389 -p 636:636 --detach osixia/openldap:1.5.0)


Suppresion du docker et des data docker, vite fait et efficace, vous pouvez après recréer le ldap dockeriser avec les commande du dessus : 

image.png


########################################################################################################################################

Outils en interface sur windows qui aide a rentrer des ldif ou troublehsoot des compte ect … 

image.png

commande test ldap et autres voir si il répond. 

ldapsearch -x -H ldap://noomduldap  -b dc=,dc= -D "cn=,dc=,dc=" -W
ldappasswd -D "cn=,dc=,dc=" -W -S "uid=mail@domaine.com,ou=,ou=,dc=,dc="
ldapwhoami -x -D "uid=mail@domaine.com,ou=,ou=,dc=,dc=" -W -v
ldapsearch -x -H ldap://noomduldap -b dc=,dc= -D "cn=,dc=,dc=" -W
ldapwhoami -x -D "uid=mail@domaine.com,ou=,ou=,dc=,dc=" -W -v
ldapwhoami -x -D "uid=,ou=,ou=,dc=,dc=" -W –v

grep  -5ni 'test.test,' LdapExt-Prod-FINAL.ldif   = = pour rechercher les user ou erreur dans un contexte chaine de caractère sur du dn ou uid


commande test ldap et autres voir si il répond. 

image.png


Debug docker logs : 

image.png

Créer un ldif : 

ldapsearch -x -H ldap://localhost -D "cn=admin,dc=example,dc=com" -w admin_password -b "dc=example,dc=com" "(objectClass=*)" > backup.ldif
LDAP

Création OpenLdap

Install package openldap, on utilise yum pour éviter les problèmes de dépendances

 

yum -y install openldap* migrationtools

image.png

Une fois installé, créé le Password admin du ldap

slappaswd

image.png

Copier le SHA pour l'intégrer plus tard dans le fichier de configuration
Accéder au dossier config du ldap et modifier le fichier olcDatabase={2}hdb.ldif

image.png

Modifier les paramètres "olcSuffix" et  "olcRootDN" selon votre domaine et ajouter "olcRootPW"image.png

Ajout des droits de monitor au compte en modifiant le fichier olcDatabase={1}monitor.ldif :image.png

Modifier les paramètres "olcAccess" de votre domaine et ajouterimage.png

Verifier la configuration avec la commande suivante

slaptest -u

image.png

Nous pouvons ignorer les erreurs checksum

Démarrer le service, l'ajouter au démarrage automatique et vérifier le démarrageimage.png

Copier le sample de la base et attribuer les droits :
image.png

Créé les schéma pour le ldap :

image.png

image.pngimage.png

LDAP

Passage ldif, changement des information

Passage d'un ldif qui parvient d'une autre entité, il faut passer ce script pour retirer les informations du fichier ldif pour ne pas avoir l'erreur CONSTRAINTE 61

#SCRIPT 
#!/bin/bash
echo "inupt file LdapExt-Prod.ldif "cat $1 | grep --binary-files=text -vi structuralObjectClass > tmp1.ldif
cat tmp1.ldif | grep --binary-files=text -vi entryUUID > tmp2.ldif
cat tmp2.ldif | grep --binary-files=text -vi creatorsName > tmp3.ldif
cat tmp3.ldif | grep --binary-files=text -vi createTimestamp > tmp4.ldif
cat tmp4.ldif | grep --binary-files=text -vi entryCSN > tmp5.ldif
cat tmp5.ldif | grep --binary-files=text -vi modifiersName > tmp6.ldif
cat tmp6.ldif | grep --binary-files=text -vi modifiersName > tmp7.ldif
cat tmp7.ldif | grep --binary-files=text -vi modifyTimestamp > tmp8.ldif
cat tmp8.ldif | grep --binary-files=text -vi contextCSN > $1-final.ldif
echo "conversion en cours ...\n ...\n...."
echo " fin Conversion , OutPUT file : import-v2.ldif  "
# + suppression de l'ou et de l'admin


Il faut aussi ouvrir le ldif et retirer les 2 premieres description ADMIN + OU à la fin du script .image.png

LDAP

OpenLdap commande

  1. ldapwhoami -x -D "uid=*** -W -v

    • Cette commande permet de s'authentifier avec l'utilisateur spécifié et affiche l'identité LDAP de l'utilisateur actuel (fonction whoami).

  2. ldapsearch -x -LLL -D "cn=admin,dc=***,dc=***" -W -b "ou=extern,ou=users,dc=***,dc=***" "(uid=*)" | grep dn

    • Effectue une recherche dans l'annuaire LDAP en filtrant sur l'attribut uid et extrait les entrées de type dn (distinguished name).

  3. cat comptes_geode_extern.ldif | grep -5ni granet

    • Affiche les 5 lignes avant et après chaque occurrence de "granet" dans le fichier comptes_geode_extern.ldif.

  4. ldapadd -x -D "cn=admin,dc=***,dc=***" -W -f comptes_geode_extern.ldif

    • Ajoute des entrées LDAP à partir du fichier comptes_geode_extern.ldif.
  5. ldapdelete -x -r "ou=users,dc=***,dc=***" -W -D "cn=admin,dc=***,dc=***"

    • Supprime des entrées récursivement dans l'OU users de l'annuaire LDAP.

  6. ldapsearch -x -LLL -D "cn=admin,dc=***,dc=***" -W -b "cn=admin,dc=***,dc=***" "(objectClass=*)"

    • Effectue une recherche LDAP sur l'OU admin et récupère toutes les entrées de ce conteneur.

  7. ldapwhoami -x -D "cn=admin-byzance,dc=***,dc=***" -W -H ldap://***

    • S'authentifie sur un serveur LDAP distant et affiche l'identité LDAP de l'utilisateur.

  8. ldapsearch -x -H ldap://*** -D "cn=admin,dc=***,dc=***" -W -b "dc=***,dc=***" "(objectClass=*)" > backup-jimmy-test.ldif

    • Effectue une recherche sur le serveur LDAP distant et exporte les résultats dans un fichier  backup-jimmy-test.ldif.

  9. ldapsearch -x -H ldap://*** -D "cn=admin,dc=***,dc=***" -W -b "ou=vm,ou=users,dc=***,dc=***" "(objectClass=*)" > ou-vm.ldif

    • Recherche les objets dans l'OU vm de l'annuaire LDAP distant et exporte les résultats dans le fichier OU-VM.ldif.

  10. ldapsearch -x -H ldap://*** -D "cn=admin,dc=***,dc=***" -W -b "ou=byzance,ou=users,dc=***,dc=***" "(objectClass=*)" | grep -c "^dn: "

    • Recherche les objets dans l'OU byzance et compte le nombre d'entrées dans le résultat.

  11. grep -c "^dn: uid=" OU-FULL-BACKUP-PROD/full-backup-prod-09-09-2024.ldif > directement sur un file.ldif

    • Recherche dans un fichier LDIF et compte le nombre d'entrées de type dn pour l'attribut uid.

HA / CLUSTER


HA / CLUSTER

Keepalived HA

Nous avons setup un Keepalived pour les base de donnée avec une VIP (virtual adresse IP), pour qu'en cas de shutdown sur la base de donnée MAITRE, le standby reprennent directement le rélais 

 

Configuration numéro 1, MAITRE dans /etc/keepalived/keepalived.confimage.png

Configuration numéro 2, SLAVE dans /etc/keepalived/keepalived.conf

image.png

Nous avons focaliser notre flipping de VIP sur le service Pgsql14 via script :
Si il est down sur le maitre, il partira sur les intervalle définit dans le fichier de conf sur le slave. 
La BDD sera donc hautement disponible le tant de débuger le nœud 1 

image.png

Une meilleur config pour apache 1 / master – check sur le service httpd.

image.png

Une meilleur config pour apache 2 / backup – check sur le service httpd. 

image.png

HA / CLUSTER

Verifier l'état d'un cluster sous PaceMaker

image.png

image.png

Pour l'alerte suivante : App-DRBD-Monitor --> DRBD: 1 crit, 0 okay:
Le service drbd ne doit pas être démarré manullement : il est géré par pacemaker via les commandes pcs

image.png

Identifier l'état du cluster :
drbdadm status
drbdmon (ne doit pas afficher d'alerte )

Mettre les sonde drbd en maintenance et procéder à une resynchronisation drbd

image.png

image.png

image.png

Déplacement des ressoures action préreboot/maj :

Vérifier l'etat du cluster
pcs status --full drbdadm status
drbdmon (ne doit pas afficher d'alerte )

Si drbd ok: déplacer les ressources sur le nœud sur lequel il n'y aura pas d'opération pcs resource move NOM_DU_GROUP_DE_RESOURCE (exemple ci dessus : MYSQL )

Vérifier le déplacement des resource avec pcs status mettre le nœud secondaire (sur lequel on va faire la mise à jour ou le reboot)  en maintenance
pcs node maintenance nomdunoeud

mettre ensuite le nœud en standby
pcs node standby nomdunoeud

procéder aux opérations de maintenance

HA / CLUSTER

Correction d'erreur drbd resynchronisation de la réplication

Correction d'erreur drbd resynchronisation de la réplication :
Identifier le noeud maitre

pcs status --full

mettre le nœud secondaire en maintenance avec pcs  
pcs node maintenance nomdunoeudpcs

Identifier la ou les ressources drbd avec la commande :
drbdadm dump

 sur le nœud secondaire invalider les données de réplication drbd pour chacune des ressources :
drbdadm invalidate Nom_de_ressource_drbd

Sur le nœud primaire préparer pour une resynchronisation forcée  
drbdadm invalidate-remote Nom_de_ressource_drbd  

Sortir le nœud secondaire de maintenance
pcs node unmaintenance nomdunoeudpcs  

Vérifier la synchronisation drbd sur les deux nœud avec d'un coté :
drbdmon

et sur l'autre nœud:
watch -n1 drbdadm status

HA / CLUSTER

HAproxy.conf

Config sur les machines proxy 

image.png

Format json pour vérification :

image.png

HA / CLUSTER

Commande Tshoot Cluster NFS/PACEMAKER/COROSYNC


lors de l'installation de votre cluster il faut que cette requête soit en état OK sur les 2 nœuds sinon votre cluster ne basculeras pas, j'ai eu le problème sur mes proxy ouvert, j'ai du les désactivé pour que la bascule fonctionne: 
curl -k https://*****.fr:2224/remote/status/

Commande pour cleanup vos ressource si elles sont KO: 
crm_resource --cleanup -r p_drbd_ha_nfs
crm_resource --cleanup -r p_fs_drbd1

Commande pour disable ou remettre un noeud dans le cluster:

sudo pcs cluster standby <nom_du_nœud>
sudo pcs cluster unstandby <nom_du_nœud>

disable les ressource sur un noeuds isolé:

pcs resource disable p_exportfs_openshift_prod
pcs resource disable p_exportfs_prod
pcs resource disable p_nfsserver
pcs resource disable p_fs_drbd1
pcs resource disable p_drbd_ha_nfs

crm_resource --resource p_drbd_ha_nfs --node ****.fr --demote

réactiver les ressource sur un noeuds isolé:

pcs resource enable p_drbd_ha_nfs
pcs resource enable p_fs_drbd1
pcs resource enable p_nfsserver
pcs resource enable p_exportfs_prod
pcs resource enable p_exportfs_openshift_prod

crm_resource --resource p_drbd_ha_nfs --node ****.fr --promote

deconnecter ou connecter drbd sur le noeud isolé

drbdadm disconnect ha_nfs

sudo drbdadm connect ha_nfs

Forcer la synchronisation avec les données du nœud primaire

drbdadm connect --discard-my-data ha_nfs

Status du drbd 

drbdadm status

HA / CLUSTER

Script de Nettoyage ressource sur un cluster NFS

Script à appliquer sur une crontab de 24h pour effectuer un nettoyage de vos ressource, si le NFS est consommé fréquemment, toujours choisir la première ressource de votre cluster cela nettoieras le reste à la suite peu importe le nombre de ressource derrière, le script rajoute un print sur des logs si cela a bien fonctionner

#!/bin/bash

# Variable pour le fichier de log
LOG_FILE="/var/log/cleanup_p_drbd_ha_nfs.log"

# Bloc conditionnel pour exécuter le nettoyage
if sudo crm_resource -cleanup -r p_drbd_ha_nfs && sudo crm_resource -cleanup -r p_exportsfs_pprod; then
  # Si les deux commandes se sont exécutées avec succès
  echo "$(date +'%Y-%m-%d %H:%M:%S') - Clean up successful" >> "$LOG_FILE"
else
  # Si au moins une des commandes a échoué
  echo "$(date +'%Y-%m-%d %H:%M:%S') - Clean up failed" >> "$LOG_FILE"
fi
HA / CLUSTER

Patroni cluster

Lister un cluster patroni :

patronictl -c /etc/patroni/patroni.yml list

image.png

CONFIG OS

CONFIG OS

Config template

image.png

Cat /etc/ntp/step-tickers
 
Timedatectl status
Timedatectl set-ntp true
hwclock
Iptables -F
Rm -fr  .bash_history
 
sudo useradd -M -s /sbin/nologin ansible
sudo -u ansible ssh-keygen -t rsa
CONFIG OS

Hiearchy file system

/bin : binaire 
/lib : librairie de programme  
/boot : fichier du système démarage  
/usr : 
/usr/local :  
/opt : fichier optionnel  
/etc : editable text configuration  
/srv : service héberger par d'autre système, http, ftp, cvs, DB  
/var : donnée type variable, log mail ect  
/home : donnée aux utilisateurs spécifique  

/root : donné aux système  
/tmp : donnée temporaire, pour pouvoir créer un programme dans le système  
/mnt : monter tous les différents de système de fichier temporaire  
/media : monter les média amovible '(clé usb, cd-rom, ID périphérique)' 
/dev : Fichier virtuel, pas besoin de partitions  

btrfs : système de fichier plus moderne + révolutionnaire + snapshot  

ext : extend file system  

reseirfs : premier système de fichier sur linux plus accessible aujd  

jfs : système de fichier constante et super éléver + gestionnaire de base de donnée  

xfs : système de fichier constante et super élever particulièrement sur les entrées et sorties // favorisation pour les grosses hiérarchie à grosse données; meta donnée lente  

fat: file allocation table  

ntfs : new technologie file system   

hfs : héarchie file système  

udf : permet de gérer la création, suppression et modification des fichiers de disque optiques 

dumpe2fs : récupérer des informations  

tune2fs : modifier certain paramètre lié aux information récupérer de deumpe2fs 

debugfs : relis tune2fs + dumpe2fs + autres outils = débugger un système de fichier  

xfs_metadump : permet de copié les métadonnées du système de fichier vers un fichier  
 
vim /etc/cups/cupsd.conf : configuration du pool cups : Imprimante 


syslogd = log application  

klogd = log pour le kernel k 

Tous les messages d'erreur a fouiller :  Authpriv, cron, kern, lpr, mail, new, syslog, user, uucp  

/var/log  

Logger = permet d'enregistrer des information dans le /var/log/syslog 

/etc/init.d/atd "stop"or "start" :pour mettre en actif nos tache planifié  

CONFIG OS

Firewall

Commande


la commande suivante permet de lister les ports ouverts et les services en écoute sur un système, en utilisant netstat :

netstat -tulnp

lister les règles/filtrage: 

Iptables -L -n -v
Firewall-cmd --list-all-zones

Pour ajouter une nouvelle règle de pare-feu à la zone par défaut, vous pouvez utiliser les commandes suivante :

firewall-cmd --permanent --add-rule type=tcp protocol=80 port=80
 firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.242.0.0/27" port protocol="tcp" port="22" accept'
 firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.242.0.0/27" port protocol="tcp" port="389" accept'
 firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.242.0.0/27" port protocol="tcp" port="636" accept'

Pour appliquer les modifications à votre pare-feu, vous pouvez utiliser la commande suivante :

firewall-cmd --reload
CONFIG OS

Créer un environnement virtuel python

Créer un environnement virtual sur sa machine pour ne pas toucher au versionning des paquets directement de votre OS.

Création d'un environnement virtuel Python

mkvirtualenv -p /usr/bin/python3 le_nom_de_ton_env


Action: Cette commande crée un nouvel environnement virtuel Python nommé "le_nom_de_ton_env". L'option -p /usr/bin/python3 spécifie que cet environnement utilisera Python 3 comme interpréteur.

TMP=/var/tmp pip3 install --upgrade pip



Action: Cette commande met à jour le gestionnaire de paquets pip dans l'environnement virtuel nouvellement créé.
L'option TMP=/var/tmp spécifie un répertoire temporaire pour effectuer l'installation.

Activation et utilisation de l'environnement virtuel

workon le_nom_de_ton_env



Action: Cette commande active l'environnement virtuel que vous avez créé précédemment. Une fois activé, les commandes pip s'exécuteront dans le contexte de cet environnement isolé, vous pouvez exemple installer un nouvelle version d'ansible sur votre environnement virtuel

CONFIG OS

Créer SERVER local REPOSITORY

Yum install httpd –y 


Mettre en place un disque avec bcp de GB selon les repo que vous allez synchroniser, Exemple ( le repos Appstream = prend 120G) image.png

Ouverture des ports firewall-cmd 80/tcp & le service http :image.png


Aller dans /etc/httpd/conf.d/httpd.conf et changer le server name par l'adresse IP de votre server sur lequel vous pourrez acceder depuis internet via cette ip 
image.png

N'oublier pas de mettre le port  sur le httpd.conf vous pouvez désormais sortir du fichier de conf et activer le service :
systemctl start httpd.service
image.png

Commande pour sync des repos d'internet sur le site web interne dans le chemin /var/www/html/......

image.pngimage.pngimage.png


Apres le reposync vous avez normalement quelque chose comme ca sur votre path : /var/www/html/image.png


Vous pouvez désormais accéder sur une page web sur vos range ip local de votre server de repos : 

image.png

 

Repos Important : 
---
- name: ums
  hosts: L
  tasks:
    - name: Create ums8.repo file
      ansible.builtin.copy:
        dest: /etc/yum.repos.d/ums8.repo
        content: |
          [UMS8OB]
          name=UMS8 epel
          baseurl=http://ip/epel/
          enabled=yes
          gpgcheck=no

 

CONFIG OS

Logrotate

# cat /etc/logrotate.d/prod 

/production/www/clients/prod.log{
        daily
        missingok
        compress
        delaycompress
        notifempty
        copytruncate
        create 644 nom nom
}

/production/www/clients/dev.log{
        daily
        missingok
        compress
        delaycompress
        notifempty
        copytruncate
        create 644 nom nom
}


Pour lancer logrotate:
logrotate -f /etc/logrotate.d/(ta conf)

CONFIG OS

NMTUI

#nmtui
 
Activate a connection
Set system hostname
 
Edit connection
Wired connection
Check device mac
 
Ipv4 configuration
Manual > show
Never use this network for ipm
 
Ipv4 configuration
Manual > show
Automatically connect
 
Deactivate et reactivate pour appliquer les changements

CONFIG OS

Ajout Key SSh

#!/bin/bash
if [ "$#" -ne 2 ]; then
    echo "Usage: $0 <username> <remote_host>"
    exit 1
fi
 
username="$1"
remote_host="$2"
 
### COPY
If ssh-copy-id "$username@$remote_host" 2>/dev/null; then
    cat ~/.ssh/id_rsa.pub | ssh $username@$remote_host 'mkdir -p ~/.ssh && cat  >> ~/.ssh/authorized_keys'
    echo " COPY OK to host : $remote_host"
    echo "you can Test with   >>>   ssh $username@remote_host"
else
    echo "Failed to copy public key on host : $remote_host "
    exit 1
fi
CONFIG OS

Ajout Proxy

Il faut mettre le script sous /etc/profile.d/proxy.sh 
 

PROXY_URL=http://adresseip:port/
export http_proxy="$PROXY_URL"
export https_proxy="$PROXY_URL"
export ftp_proxy="$PROXY_URL"
export no_proxy="127.0.0.1,localhost"

 
Puis il faut exécuter : 

source /etc/profile.d/proxy.sh

Certificat

Certificat

Create CSR CERTIFICATE OPENSSL

image.png

image.png

Certificat

Certificat PFX EXTRACTION

image.png

image.png

 

image.png

Certificat

script extract certificat.pfx

#!/bin/bash

# mettre son fichier pfx
read -p "Entre le chemin de ton fichier PFX : " pfx_file

if [ -f "$pfx_file" ]; then
  echo "le fichier pfx na pas été trouver"
  exit 1
fi

# mettre le nom du certificat a extraire
read -p "Entre le nom du certificat : " cert_name

# extrait la clé privée
openssl pkcs12 in "$pfx_file" -nocerts -out "${cert_name}-encrypted.key"
openssl rsa in "${cert_name}-encrypted.key" -out "${cert_name}.key"

# extrait le certificat
openssl pkcs12 in "$pfx_file" clcerts nokeys out "${cert_name}.crt"

# extrait le CA
openssl pkcs12 in "$pfx_file" -nokeys nodes cacerts -out "${cert_name}-ca.crt"

DATA

DATA

Lister fichiers les plus volumineux sur partition

du -aBm /production 2>/dev/null | sort -nr | head -n 40

image.png

image.png

Commande pratique :

du -h -d 1 /chemin/

DATA

Espace disque manquant sur /var/crash - Disk-Usage-/var

LIN-Diskspace-Plus
Disk-Usage-/var

Espace plein sur le point de montage /var.
Il s'agit en général de fichiers crash dump qui prennent de la place à l'emplacement :  /var/crash


Sonde/Service :
Disk-Usage-/var

image.png



Hôte : 
Action : 
- Se connecter via winscp ou putty
- Supprimer ces fichiers pour récupérer l'espace disque.

Note :
- Lister les fichiers puis consulter/ouvrir le fichier tree_result via commande : 
# du -hax --time /var | sort -hr > /tmp/tree_result

Modification du fichier /ect/sysctl.conf en ajoutant la ligne 
fs.suid_dumpable = 0

#Désactive la création de core dump pour les processus avec élévations de privilèges.
Puis chargement de la configuration sysctl -p

sysctl pour optimiser/tuner le système (fichier sysctl.conf déjà existant)

 

DATA

Mount un partage windows CIFS automatique

Je te transmets ci-dessous une procédure pour reproduire cette configuration sur les autres serveurs.
 
Procédure : 
yum install cifs-utils 
mkdir /data
 mount -t cifs //idfm-ob.fr/idfm-nas-hprod/ortelius-rec /data -o username=ortelius-svc-rec-srv
 Rentrer le password de ortelius demander sur le shell
df -h pour voir si il est bien monté 

Création de la partition en automatique : 
vi /etc/cifs-credentials
 username=********
password=********

save & quit 
 
chmod 600 /etc/cifs-credentials
 
vi /etc/fstab  : rajouter cette conf suivante pour que le reboot soit automatiqueimage.png

//idfm-ob.fr/idfm-nas-hprod/ortelius-rec /data cifs      credentials=/etc/cifs-credentials,rw,vers=3.0,nofail,noauto,x-systemd.automount 0 0 


Save & quit 
 
reboot monter automatiquement :

image.png

DATA

configuration LVM + rajout de disque sur un lvm

Schémas de finalisation de procédure : 
après avoir effectué cette procédure vous avez normalement ce schémas la en tapant : lsblk 

image.png



nous allons créer le VG et le LV depuis le début. Suivez ces étapes pour configurer LVM sur le nouveau disque /dev/sdb.
Créer une nouvelle partition sur /dev/sdb :

• Appuyez sur n pour créer une nouvelle partition.
• Choisissez le type de partition primaire en appuyant sur p.
• Appuyez sur Enter pour accepter le numéro de partition par défaut (p. ex., 1).
• Appuyez sur Enter pour accepter la première sector par défaut.
• Appuyez sur Enter pour accepter la dernière sector par défaut (utilisez toute la capacité disponible).
• Appuyez sur t pour modifier le type de partition et entrez 8e pour le type LVM.
• Appuyez sur w pour enregistrer les modifications.


Créer un Physical Volume (PV) sur la nouvelle partition :
pvcreate /dev/sdb1
 
Créer un Volume Group (VG) :
vgcreate data /dev/sdb1
Cela crée un VG appelé data qui inclut le PV /dev/sdb1.
 
Créer un Logical Volume (LV) :
lvcreate -n data -l 100%FREE data
Cela crée un LV appelé data dans le VG data en utilisant tout l'espace disponible.

Formatage du système de fichiers XFS sur le LV :
mkfs.xfs /dev/data/data
 
Créer le point de montage :
mkdir /data
 
Mettre à jour /etc/fstab pour le montage persistant :
echo '/dev/mapper/data-data   /data   xfs   defaults   0 0' >> /etc/fstab

Monter tous les volumes :
mount –a


END 

 

DATA

Augmentation Disque Linux avec LVM

Augmentation espace disque Linux sur SERVER par exemple :

image.png

Partition Racine pleine à 100%.

 

image.png

Augmenter la taille du deuxième disque dans Vmware:

image.png

Après ajout :

image.png

Puis prendre un snapshot du serveur.
pvdisplay

image.png

ls /sys/class/scsi_device/

image.png

echo 1 > /sys/class/scsi_device/2\:0\:0\:0/device/rescan
echo 1 > /sys/class/scsi_device/32\:0\:0\:0/device/rescan
echo 1 > /sys/class/scsi_device/32\:0\:1\:0/device/rescan


fdisk -l

image.png

pvscan

image.png

cfdisk /dev/sdb

image.png

Resize puis faire entrée

image.png

image.png
Sélectionner Ecrire et saisir oui

image.png
Quitter


Partprobe

Pvscan
image.png

image.png

pvresize /dev/sdb1

image.png

Pvs

image.png

Vgs

image.png

lvs

image.png

Df -h

image.png

lvresize -l +100%FREE /dev/mapper/ubuntu--vg-root

image.png

Lvs

image.png

resize2fs -p /dev/mapper/ubuntu--vg-root

image.png

Df -h

image.png

Tout est bon les volumes physiques et logiques ont été augmentés. Bravo !!!! Penser à supprimer le snapshot après.

DATA

monter un LVM via 2 playbook

Playbook monter un lvm sur /data

---
- name: Post-configure machine
  hosts: virtual_machines
  become: yes
  gather_facts: yes

  vars:
    data_devices:
      - /dev/sdb

  tasks:
    - name: Create volume group 'Vodata'
      community.general.lvg:
        vg: Vodata
        pvs: "{{ data_devices|join(',') }}"

    - name: Create logical volume 'data'
      community.general.lvol:
        lv: data
        vg: Vodata
        size: +100%FREE
        resizefs: yes
        force: yes

    - name: Format /data
      community.general.filesystem:
        dev: /dev/VGdata/data
        fstype: xfs
        opts: "{{ additional_options }}"
      vars:
        additional_options: >-
          -i metadata_csum,64bit
          {% if ansible_kernel.version|version_compare('3.18', '>=') %}
          -i delalloc
          {% endif %}

    - name: Mount /data
      ansible.posix.mount:
        path: /data
        src: LABEL=DATA
        fstype: xfs
        opts: rw,defaults
        passno: 2
        state: mounted



-------------------------------------------------------------------------------------------

Playbook gestion création entre 2 stockage de lvm : playbook pour la certification RHCE. 

 

---

name: create lvm in the system
become: true
hosts: all

tasks:
  - name: Create LVM data as 1500MB
    block:
      - name: Create LVM data
        community.general.lvol:
          vg: research
          lv: data
          size: 1500M
      when: ansible_lvm.vgs.research.size_gb > 1500
  - name:
    block:
      - debug:
          msg: "The Required size of lv is less then 1500 MB so creating a 800 MB LVM"
      when: ansible_lvm.vgs.research.size_gb < 1500 and ansible_lvm.vgs.research.size_gb > 800
      - name: Create LVM Data as 800MB
        community.general.lvol:
          vg: research
          lv: data
          size: 800M
      when: ansible_lvm.vgs.research.size_gb < 1500
  - name: create file system on lvm
    block:
      - community.general.filesystem:
          fstype: ext4
          dev: /dev/research/data
      when: ansible_lvm.vgs.research is defined
  - name:
    block:
      - debug:
          msg: "The Required Volume Group does not exits in this system"
      when: ansible_lvm.vgs.research is not defined



DATA

Test remplissage d'un disque

Remplir un disque :

dd if=/dev/zero of=/data/testfile bs=1M count=9500

Helm

Helm

Installation HelmCLI

Installation helm, regarder si vous allez bien pointé sur là dernière version d'helm par rapport à la publication de cette rubrique. 

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
ls /usr/local/bin/helm
export PATH=$PATH:/usr/local/bin
./get_helm.sh

TEST HELM INSTALL :

helm version
helm repo add stable https://charts.helm.sh/stable
helm repo update
Helm

Helm commande

Commande helm pour tester son template values sur un cluster openshift ou kubernetes :
helm template onyx ./ -f values-recette.yaml --namespace onyx-recette --debug

Décomposition de la commande:

------------------------------------------------------------------------------------------------------------------------------------------------------

d'autre commande arrive seront placée par la suite