Linux
- Commandes General
- Lister les services
- Quelques commandes
- Lancer une commande active même après la déconnexion
- NTP
- Drop RAM SWAP CPU & MEM
- Astuces Cron
- Extraction link web page
- Rechercher des fichier : find/locate/size
- LDAP
- Création Docker OPENLDAP image OSIXIA / GITHUB avec réplication
- Création OpenLdap
- Passage ldif, changement des information
- OpenLdap commande
- HA / CLUSTER
- Keepalived HA
- Verifier l'état d'un cluster sous PaceMaker
- Correction d'erreur drbd resynchronisation de la réplication
- HAproxy.conf
- Commande Tshoot Cluster NFS/PACEMAKER/COROSYNC
- Script de Nettoyage ressource sur un cluster NFS
- Patroni cluster
- CONFIG OS
- Config template
- Hiearchy file system
- Firewall
- Créer un environnement virtuel python
- Créer SERVER local REPOSITORY
- Logrotate
- NMTUI
- Ajout Key SSh
- Ajout Proxy
- Certificat
- DATA
- Lister fichiers les plus volumineux sur partition
- Espace disque manquant sur /var/crash - Disk-Usage-/var
- Mount un partage windows CIFS automatique
- configuration LVM + rajout de disque sur un lvm
- Augmentation Disque Linux avec LVM
- monter un LVM via 2 playbook
- Test remplissage d'un disque
- Helm
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
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
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
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
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
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
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
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
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/
Extraction link web page
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
Création Docker OPENLDAP image OSIXIA / GITHUB avec réplication
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 :
########################################################################################################################################
Outils en interface sur windows qui aide a rentrer des ldif ou troublehsoot des compte ect …
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.
Debug docker logs :
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
Création OpenLdap
Install package openldap, on utilise yum pour éviter les problèmes de dépendances
yum -y install openldap* migrationtools
Une fois installé, créé le Password admin du ldap
slappaswd
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
Modifier les paramètres "olcSuffix" et "olcRootDN" selon votre domaine et ajouter "olcRootPW"
Ajout des droits de monitor au compte en modifiant le fichier olcDatabase={1}monitor.ldif :
Modifier les paramètres "olcAccess" de votre domaine et ajouter
Verifier la configuration avec la commande suivante
slaptest -u
Nous pouvons ignorer les erreurs checksum
Démarrer le service, l'ajouter au démarrage automatique et vérifier le démarrage
Copier le sample de la base et attribuer les droits :
Créé les schéma pour le 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 .
OpenLdap commande
-
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
).
- Cette commande permet de s'authentifier avec l'utilisateur spécifié et affiche l'identité LDAP de l'utilisateur actuel (fonction
-
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 typedn
(distinguished name).
- Effectue une recherche dans l'annuaire LDAP en filtrant sur l'attribut
-
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
.
- Affiche les 5 lignes avant et après chaque occurrence de "granet" dans le fichier
-
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
.
- Ajoute des entrées LDAP à partir du fichier
-
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.
- Supprime des entrées récursivement dans l'OU
-
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.
- Effectue une recherche LDAP sur l'OU admin et récupère toutes les entrées de ce conteneur.
-
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.
- S'authentifie sur un serveur LDAP distant et affiche l'identité LDAP de l'utilisateur.
-
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
.
- Effectue une recherche sur le serveur LDAP distant et exporte les résultats dans un fichier
-
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.
- Recherche les objets dans l'OU
-
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.
- Recherche les objets dans l'OU
-
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'attributuid
.
- Recherche dans un fichier LDIF et compte le nombre d'entrées de type
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.conf
Configuration numéro 2, SLAVE dans /etc/keepalived/keepalived.conf
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
Une meilleur config pour apache 1 / master – check sur le service httpd.
Une meilleur config pour apache 2 / backup – check sur le service httpd.
Verifier l'état d'un cluster sous PaceMaker
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
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
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
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
HAproxy.conf
Config sur les machines proxy
Format json pour vérification :
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
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
Patroni cluster
Lister un cluster patroni :
patronictl -c /etc/patroni/patroni.yml list
CONFIG OS
Config template
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
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é
Firewall
Commande
iptables
: Interface de bas niveau, nécessite une gestion manuelle et convient mieux aux systèmes plus anciens ou aux configurations spécifiques.firewalld
: Plus haut niveau, offre une interface dynamique et facile à gérer via des zones.
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
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
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)
Ouverture des ports firewall-cmd 80/tcp & le service http :
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
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
Commande pour sync des repos d'internet sur le site web interne dans le chemin /var/www/html/......
Apres le reposync vous avez normalement quelque chose comme ca sur votre path : /var/www/html/
Vous pouvez désormais accéder sur une page web sur vos range ip local de votre server de repos :
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
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)
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
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
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
Create CSR CERTIFICATE OPENSSL
Certificat PFX EXTRACTION
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
Lister fichiers les plus volumineux sur partition
du -aBm /production 2>/dev/null | sort -nr | head -n 40
Commande pratique :
du -h -d 1 /chemin/
Espace disque manquant sur /var/crash - Disk-Usage-/var
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 automatique
//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 :
configuration LVM + rajout de disque sur un lvm
Augmentation Disque Linux avec LVM
Augmentation espace disque Linux sur SERVER par exemple :
Partition Racine pleine à 100%.
Augmenter la taille du deuxième disque dans Vmware:
Puis prendre un snapshot du serveur.
pvdisplay
ls /sys/class/scsi_device/
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
pvscan
cfdisk /dev/sdb
Sélectionner Ecrire et saisir oui
Partprobe
pvresize /dev/sdb1
Pvs
Vgs
lvs
Df -h
lvresize -l +100%FREE /dev/mapper/ubuntu--vg-root
Lvs
resize2fs -p /dev/mapper/ubuntu--vg-root
Df -h
Tout est bon les volumes physiques et logiques ont été augmentés. Bravo !!!! Penser à supprimer le snapshot après.
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
Test remplissage d'un disque
Remplir un disque :
dd if=/dev/zero of=/data/testfile bs=1M count=9500
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 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:
helm template
: C'est la commande principale qui indique à Helm que nous voulons générer un template.onyx
: C'est le nom du chart Helm que vous souhaitez utiliser comme base pour générer le manifest. Un chart Helm est un package qui contient les fichiers de configuration nécessaires pour déployer une application sur Kubernetes../
: Ce point indique le répertoire courant. Cela signifie que le chart Helmonyx
se trouve dans le répertoire où vous exécutez cette commande.-f values-recette.yaml
: Ce drapeau indique à Helm d'utiliser le fichiervalues-recette.yaml
comme fichier de valeurs. Ce fichier contient les valeurs spécifiques à votre déploiement, comme les noms d'hôtes, les ports, etc.--namespace onyx-recette
: Ce drapeau spécifie que le manifest généré sera déployé dans l'espace de nomsonyx-recette
de votre cluster Kubernetes.--debug
: Ce drapeau active le mode débogage, ce qui signifie que Helm affichera plus d'informations sur le processus de génération du template.
------------------------------------------------------------------------------------------------------------------------------------------------------
d'autre commande arrive seront placée par la suite