Table des matières
4 billet(s) pour janvier 2026
| AWX sur K8S Kind - partage de fichier pour les blob - Execution pods | 2026/01/26 10:15 | Jean-Baptiste |
| Notes rsh rcp | 2026/01/21 18:08 | Jean-Baptiste |
| Git - Duplication d'un dépôt | 2026/01/19 10:22 | Jean-Baptiste |
| Exemple simple de conf Nagios | 2026/01/14 10:07 | Jean-Baptiste |
Bash CSV
Petit script pour analyser les données d'un fichier CSV
get_info_csv.sh
#! /bin/bash CSV_FILE=$1 COUNT_FIELDS=$(head -1 "$CSV_FILE" | sed -e 's/[^;]//g' | wc | awk '{print $3}') GET_CSV_KEY() { local -i i i=$1 head -1 "$CSV_FILE" | cut -d';' -f"$i" } GET_COUNT_VALUE() { local -i i i=$1 sed -e 1d "$CSV_FILE" | cut -d';' -f"$i" | sort -u | wc -l } GET_UNIQUE_VALUE() { local -i i i=$1 sed -e 1d "$CSV_FILE" | cut -d';' -f"$i" | sort -u } for (( j=1; j<=COUNT_FIELDS; j++ )) do echo -n "[${j}_" COUNT=$(GET_COUNT_VALUE "$j") echo "$(GET_CSV_KEY "$j")]" if [[ COUNT -lt 200 ]] then GET_UNIQUE_VALUE "$j" else echo MUL fi echo "-----" done
Utilisation
source get_info_csv.sh plop.csv # Nom / entête du champ 1 GET_CSV_KEY 1 # Nombre de valeurs différente pour le champ 1 GET_COUNT_VALUE 1 # Récupère toutes les valeurs différentes pour un champ donné GET_UNIQUE_VALUE 4 # Nombre de champ / colonnes echo $COUNT_FIELDS
Autres
Type string vs int
Dans certains cas il est particulièrement gênant de voir le ou les zéros ne pas s'afficher. Exemple :
Agent 7
A la place d'agent 007
Pour faire interpréter (dans LibreOffice / excel..) les données numériques comme des strings et non pas comme des integer l'astuce consiste à faire précéder le chiffre par une tabulation.
Notes langue lang locale Temps timezone TZ
Voir :
Voir aussi :
SystemD
#timedatectl list-timezones timedatectl set-timezone Europe/Paris
Avant SystemD
echo "Europe/Helsinki" > /etc/timezone #dpkg-reconfigure tzdata dpkg-reconfigure --frontend noninteractive tzdata
Debian / Ubuntu
/etc/locale.gen
fr_FR.UTF-8 UTF-8
export LANG=fr_FR.UTF-8 export LANGUAGE=fr_FR:fr export LC_ALL=fr_FR.UTF-8 # LC_ALL=C.UTF-8 locale-gen dpkg-reconfigure locales update-locale LANG=fr_FR.UTF-8
Ou
locale-gen fr_FR.UTF-8 UTF-8 && dpkg-reconfigure locales
/etc/default/keyboard
# KEYBOARD CONFIGURATION FILE # Consult the keyboard(5) manual page. XKBMODEL="pc105" XKBLAYOUT="fr" XKBVARIANT="latin9" XKBOPTIONS="" BACKSPACE="guess"
sudu setupcon
Redhat / CentOS
Source :
Fichier de conf
/etc/locale.conf
LANG=en_US.utf8
Afficher les infos
localectl status
Langue
localectl list-locales #localedef set-locale LANG=en_US.utf8 localedef set-locale LANG=fr_FR.utf8
Clavier
Voir Comment mater le clavier sous Linux?
localectl list-keymaps #localectl set-keymap us localectl set-keymap fr #localectl set-x11-keymap fr
Pb
Pb 1
# loadkeys fr cannot open file fr
Solution
apt-get install kbd console-data
Pb 2
Debian 9
localectl set-keymap fr
Après reboot, lightdm est bien en français par défaut (même si c'est en_US.utf8 qui est affiché)
Par contre la console TTY est toujours en querty.
Il faut à chaque fois faire
loadkeys fr # idem pour X11 setxkbmap fr
loadkeys persistent, loadkeys permanent
Il est possible d'ajouter cette commande dans le bashrc, mais existe-il un autre moyen de rendre pour loadkeys persistent
Solution :
apt-get install console-setup
Si cela ne marche toujours pas
apt-get install console-data apt-get install console-setup apt-get install keyboard-configuration dpkg-reconfigure console-data dpkg-reconfigure console-setup dpkg-reconfigure keyboard-configuration reboot
Debian - set locale
WARNING! Your environment specifies an invalid locale.
The unknown environment variables are:
LC_CTYPE=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 LC_ALL=
This can affect your user experience significantly, including the
ability to manage packages. You may install the locales by running:
sudo apt-get install language-pack-en
or
sudo locale-gen en_US.UTF-8
To see all available language packs, run:
apt-cache search "^language-pack-[a-z][a-z]$"
To disable this message for all users, run:
sudo touch /var/lib/cloud/instance/locale-check.skip
Autres
a
/etc/initramfs-tools/initramfs.conf
#KEYMAP=n KEYMAP=y
update-initramfs -u -k all
b
GRUB_CMDLINE_LINUX=”rd.lvm.lv=centos/swap vconsole.keymap=us crashkernel=auto rd.lvm.lv=centos/root vconsole.font=latarcyrheb-sun16 rhgb quiet net.ifnames=0 biosdevname=0″
grub2-mkconfig -o /boot/grub2/grub.cfg
autres
locale-gen fr_FR.UTF-8 UTF-8
Ce qui revient à créer
/etc/locale.gen
# This file lists locales that you wish to have built. You can find a list # of valid supported locales at /usr/share/i18n/SUPPORTED, and you can add # user defined locales to /usr/local/share/i18n/SUPPORTED. If you change # this file, you need to rerun locale-gen. en_US.UTF-8 UTF-8 fr_FR.UTF-8 UTF-8
update-locale LANG=fr_FR.UTF-8
Ce qui revient à
/etc/default/locale
# File generated by update-locale LANG=fr_FR.UTF-8
dpkg-reconfigure -f noninteractive locales env DEBIAN_FRONTEND=noninteractive apt-get install console-setup
Notes langage C
Voir :
Voir aussi :
- ISO C99
#include <stdio.h> #include <string.h> #include <malloc.h> main(int argc, char **argv) { int i, size; #define SEPARATEUR " " char *cmdline; for (i=1; i < argc; i++) size += strlen(SEPARATEUR) + strlen(argv[i]); cmdline = malloc(size); if (cmdline ) { memset(cmdline, 0, size); for (i=1; i < argc; i++) { strcat(cmdline, argv[i]); strcat(cmdline, SEPARATEUR); } } printf("-- %s --", cmdline); system(cmdline); }
Surcharger un symbole
Voir : https://stackoverflow.com/questions/2146059/limiting-syscall-access-for-a-linux-application
Is the application linked statically?
If not, you may override some symbols, for example, let's redefine socket:
int socket(int domain, int type, int protocol) {
write(1,"Error\n",6);
return -1;
}
Then build a shared library:
gcc -fPIC -shared test.c -o libtest.so
Let's run:
nc -l -p 6000
Ok.
And now:
$ LD_PRELOAD=./libtest.so nc -l -p 6000 Error Can't get socket
What happens when you run with variable LD_PRELOAD=./libtest.so? It overrides with symbols defined in libtest.so over those defined in the C library.
Sécurité
$ man gets
...
(DEPRECATED)
Never use this function.
BUGS
Never use gets(). Because it is impossible to tell without knowing the data in advance how many characters gets() will read, and because gets() will continue to store characters past the end of the
buffer, it is extremely dangerous to use. It has been used to break computer security. Use fgets() instead.
For more information, see CWE-242 (aka "Use of Inherently Dangerous Function") at http://cwe.mitre.org/data/definitions/242.html
...
Notes SQL
Voir :
Requêtes SQL imbriquées :
SELECT unifiedjob_ptr_id FROM main_job WHERE unifiedjob_ptr_id IN (SELECT id FROM main_unifiedjob WHERE execution_environment_id=3 );
Notes Kubernetes k8s - Utilisation
Voir :
kubectl api-resources -o wide kubectl explain deploy kubectl get nodes kubectl get pods --all-namespaces kubectl --namespace=kube-system get all kubectl --kubeconfig .kube/config get nodes export KUBECONFIG=/etc/kubernetes/admin.conf #export KUBECONFIG=~/.kube/config cp /etc/kubernetes/admin.conf ~/.kube/config kubectl --server=https://192.168.56.21:6443 get nodes -o wide kubectl get deployment --all-namespaces kubectl get svc
Administration
Diagnostiquer le dysfonctionnement d'un pod Kubernetes
# Voir les logs kubectl logs monpod # Si le pod est en erreur kubectl describe po monpod # Si le pod n'existe pas, voir le replicaset qui devrait le créer (s'il y en a un) kubectl describe rs monreplicaset # Si le replicaset n'existe pas, voir son déploiement/statefulset/autre kubectl describe deploy mondeploiement kubectl describe sts mon statefulset
Vous pouvez consulter ce diagramme pour le troubleshooting d'un déploiement Consulter les logs de l'api server Kubernetes
On y trouvera notamment les requêtes récentes des utilisateurs et leur droits RBAC
kubectl -n kube-system logs -l component=kube-apiserver --tail 1000
Consulter les logs de plop
Peut permettre d'avoir des détails sur les messages d'erreurs de plop
kubectl -n plop logs -l app=plop -c plop --tail 1000
Note: on pourra passer plop en mode debug pour avoir des informations plus complètes (kubectl -n plop edit ds plop, puis “- --log-level=debug” dans les arguments du container) Lister les pvs de chaque node
Permet de voir les pvs (persistent volumes) disponibles sur chaque node, par exemple pour débugger un statefulset dont un pvc est en état “Pending”
export JSONPATH='{range .items[*]}{@.metadata.name} {@.spec.nodeAffinity.required.nodeSelectorTerms[*].matchExpressions[*].values[]} {@.status.phase} {@.spec.capacity.storage};{end}' kubectl get pv -o jsonpath="$JSONPATH" | tr ";" "\n"
Objets Kubernetes
Commandes pour retrouver le pod / daemonset / deploiement responsable du container “plop”:
# À utiliser sur un master, les noeuds n'ont pas la commande "kubectl" kubectl get pod -A | grep plop kubectl get ds -A | grep plop kubectl get deploy -A | grep plop
Attendre un état - ex que les pods soient prêts
An alternative approach is to use kubectl wait You could: <code bash> kubectl wait pod --all --for=condition=Ready --namespace=${ns} kubectl wait pod --all --for=condition=Ready -A
Procédures Restart des pods
Se placer dans le namespace des frontaux valplop
kubectl config set-context $(kubectl config current-context) --namespace=zzz-valplop
Vérifier qu'on accède bien au cluster k8s en listant les pods
kubectl get pods
Résultat attendu
NAME READY STATUS RESTARTS AGE bac-valplop-8686574455-bnplq 4/4 Running 0 6d21h bac-valplop-8686574455-ddxcf 4/4 Running 0 4d3h bac-valplop-8686574455-dr25b 4/4 Running 0 6d21h [...]
Vérifier quelle ressource deployment on veut relancer
kubectl get deployments.apps
Lancer un rollout (= restart des pods du deployment ciblé)
kubectl rollout restart deployment <nom du deployment>
On peut surveiller le restart séquentiel des pods avec l'utilitaire k9s, les nouveaux pods passeront successivement les états Pending, ContainerCreating, Running… les anciens passeront en Terminated et disparaitront
Restart pod récalcitrant
kubectl delete pod cassandra-cl02livebgl-a-0 --grace-period=0 --force
Je veux savoir ma conso sur mon namespace
kubectl -n $namespace get ResourceQuota kaas-compute-resources-$namespace -o yaml
Restart a resource
Resource rollout will be restarted.
kubectl rollout restart RESOURCE
Examples
# Restart all deployments in the test-namespace namespace kubectl rollout restart deployment -n test-namespace # Restart a deployment kubectl rollout restart deployment/nginx # Restart a daemon set kubectl rollout restart daemonset/abc # Restart deployments with the app=nginx label kubectl rollout restart deployment --selector=app=nginx
Notes install nodes
Clef SSH /root/.ssh/
apt-get install curl
Install kubectl Install kubeadm Install Docker
kubectl get nodes -o wide
kubectl version
kubectl cluster-info
To further debug and diagnose cluster problems, use kubectl cluster-info dump
kubectl get namespaces kubectl api-resources
# kubectl run hello --image=hello-world pod/hello created # kubectl get pods NAME READY STATUS RESTARTS AGE hello 0/1 CrashLoopBackOff 1 (4s ago) 10s
CrashLoopBackOff signifit que le container fait que de cracher, ce qui est normal pour le 'hello-word' qui se termine systématiquement
kubectl run nginx --image=nginx
kubectl describe pod nginx
Get a shell to the running container
kubectl exec -ti nginx -- /bin/bash
Get a shell to a specific running container
# Get containers list kubectl get pod awx-task-777db545b8-7npjl -o jsonpath='{.spec.containers[*].name }{"\n"}' kubectl exec -ti awx-task-777db545b8-7npjl --container awx-ee -- /bin/bash
Port mapping
kubectl port-forward nginx 8080:80
kubectl create deployment nginx-deployment --image=nginx kubectl expose deployment nginx-deployment --port=8080 --target-port=80 kubectl get services
# kubectl describe deployment nginx-deployment |grep ^Replicas: Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable # kubectl scale deployment nginx-deployment --replicas=2 deployment.apps/nginx-deployment scaled
Création d'un pod
nginx.yaml
apiVersion: v1 kind: Pod metadata: name: www spec: containers: - name: nginx image: nginx:1.12.2
kubectl create -f pod.yaml
