Table des matières
3 billet(s) pour janvier 2026
| 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 |
Doublon avec scriptinitsysvroot
Script init Wrapper
Lancement du serveur BCM sous un compte utilisateur (non-root) sous Debian.
1) Création d’un nouvel utilisateur dédie au serveur BCM.
Dans notre exemple il s’agit de « bcm »
TODO Commande de création utilisateur système
2) Création du script /etc/init.d/BMC
/etc/init.d/BMC
#! /bin/bash # chkconfig: 35 85 15 # description: Startup script for BMC Client Management agent ### BEGIN INIT INFO # Provides: BMC # Required-Start: $network $local_fs $remote_fs $time $syslog # Required-Stop: $network $local_fs $remote_fs $time $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Wrapper pour lancer les scripts sysVinit avec un compte utilisateur (non root) # Description: Wrapper pour lancer les scripts sysVinit avec un compte utilisateur (non root) ### END INIT INFO BCM_USER=bcm BCM_INITSCRIPT=/etc/init.d/BMCClientManagementAgent su - $BCM_USER -c "$BCM_INITSCRIPT" "$@"
Note : Les commentaires du scripts sont nécessaire. Voir
3) Gestion des services
Placer les droits d’exec :
chmod +x /etc/init.d/BMC
Désactivation du démarrage de l’ancien script.
update-rc.d BMCClientManagementAgent remove
Activation du nouveau script
update-rc.d BMC defaults
On vérifie :
find /etc/rc* -iname "*bmc*"
4) Fin
Arrêt process lancé en root /etc/init.d/BMCClientManagementAgent stop
Ici l’utilisateur « bcm » devient le nouveau propriétaires des fichiers
chown bcm: /opt/bcm/ -R
On démarre BCM
/etc/init.d/BCM start
En cas de Pb
Refaire point 3 et 4. Idem si application patch.
NB : il convient dans la supervision de s’assurer que le process tourne sous le bon compte. Exemple :
pgrep -u bcm mtxagent && echo OK || echo NOK
Script HA supersivion Nagios routeur actif par SNMP
check_snmp_active_router.sh
#! /bin/bash # Creative Commons CC0 Public Domain Licence set -euo pipefail IFS=$' \t\n' export LC_ALL=C OID_HOSTNAME=.1.3.6.1.2.1.1.5.0 LABEL="ACTIVE_ROUTER" ALL_ARGS=("$@") exec 6>&1 # Link file descriptor #6 with stdout. Saves stdout. # FIX IGNORED ~/.snmp/snmp.conf WHEN 'sudo -u nagios check_snmp_host.sh' HOME=$(getent passwd "$(whoami)" | cut -d: -f6) PATH="/sbin:/usr/sbin:$PATH" exit_malfunction() { exec 1>&6 6>&- # Restore stdout and close file descriptor #6 echo "${LABEL} ${STATUS_MSG} - ERROR $*" exit 3 } # NAGIOS EXIT STATUS # STATE_OK=0 ; STATE_WARNING=1 ; STATE_CRITICAL=2 ; STATE_UNKNOWN=3; STATE_DEPENDENT=4 STATUS_MSG=UNKNOWN typeset -i STATUS_CODE=3 trap 'if [ $STATUS_CODE -eq 3 ] && [ $? -ne 0 ] ; then exit_malfunction "Unexpected error" fi' EXIT ERR command_exists() { command -v "$1" >/dev/null 2>&1 || ( exit_malfunction "I require $1 but it's not installed. Aborting." ) } command_exists snmpget get_defaultgw() { ip -4 route show default | awk '/^default/ { print $3 }' || exit_malfunction "Can't get default gateway" } get_hostname() { local REMOTE_HOST=$1 ROUTER_NAME=$(snmpget -r 2 "${ALL_ARGS[@]}" "$REMOTE_HOST" "${OID_HOSTNAME}" | cut -d= -f2 | cut -d: -f2 | xargs) || exit_malfunction "SNMP failed" } main() { local DEFAULTGW local -i ROUTER_NB DEFAULTGW=$(get_defaultgw) get_hostname "$DEFAULTGW" ROUTER_NB=$(echo "$ROUTER_NAME" | grep -o -e '[0-9]\+$') || exit_malfunction "Hostname error in '$ROUTER_NAME' for $DEFAULTGW" if [ "$ROUTER_NB" -eq 1 ]; then STATUS_CODE=0 STATUS_MSG=OK elif [ "$ROUTER_NB" -eq 2 ]; then STATUS_CODE=1 STATUS_MSG=WARNING else STATUS_CODE=2 STATUS_MSG=CRITICAL fi echo "${LABEL} ${STATUS_MSG} - $ROUTER_NAME is active router" } main exit $STATUS_CODE
Script en C
Tester un bout de code c sans le compiler grâce à TCC
sudo apt-get install tcc
hello.c
#! /usr/bin/tcc -run #include<stdio.h> int main(void) { puts("Hello world !"); return 0; }
chmod +x hello.c ./hello.c
Script bash tab array list dict - Utilisation de listes et de tableaux en bash
Voir aussi :
readarray -t ronly
Listes
$ set |grep lplop lplop=([0]="a" [1]="b" [2]="c" [3]="d")
declare -a liste liste_append() { # SC2206 (warning): Quote to prevent word splitting/globbing, or split robustly with mapfile or read -a liste=(${liste[@]} $1) } liste_count() { echo ${#liste[*]} } liste=(un deux) echo ${liste[@]} liste_count liste_append trois liste_count echo ${liste[@]}
Boucles (loops)
SC2128 (warning): Expanding an array without an index only gives the first element.
Problematic code:
myarray=(foo bar) for f in $myarray do cat "$f" done
Correct code:
myarray=(foo bar) for f in "${myarray[@]}" do cat "$f" done
Dictionnaires
declare -A dict
$ declare -A D=( [UN]=1 [DEUX]=2 ) $ echo ${D[UN]} 1
Exemple
tab_fruits=("pomme" "poire" "tomate" "mandarine") printf '%s\0' "${tab_fruits[@]}" | grep -F -x -z -- 'poire'
Script bash RedHat CentOS comparaison des paquets installés entre deux machines
Exemple
Exemple 1
Entrées
rpms-ref.list
rpm-build-libs-4.11.1-16.el7.x86_64 rpm-4.11.1-16.el7.x86_64 rpm-python-4.11.1-16.el7.x86_64 rpm-libs-4.11.1-16.el7.x86_64 vim-common-7.4.160-1.el7.x86_64 vim-enhanced-7.4.160-1.el7.x86_64
rpms-local.list
rpm-python-4.11.3-21.el7.x86_64 rpm-libs-4.11.3-21.el7.x86_64 rpm-build-libs-4.11.3-21.el7.x86_64 rpm-4.11.3-21.el7.x86_64 atop-2.1-1.el7.x86_64
Exécution et sortie
Lister les paquets en trop / à effacer
$ ./comp-rpms.sh list-remove rpms-ref.list rpms-local.list atop-2.1-1.el7.x86_64
Lister les paquets manquants / à installer
$ ./comp-rpms.sh list-install rpms-ref.list rpms-local.list vim-common-7.4.160-1.el7.x86_64 vim-enhanced-7.4.160-1.el7.x86_64
Exemple 2
Rendre la Machine cible similaire à Machine référence
La machine cible doit avoir tous les dépôts de la machine de référence
Machine de référence
rpm -qa > rpms-ref.list
On dépose le fichier rpms-ref.list sur la Machine cible.
Machine cible
rpm -qa > rpms-local.list yum remove $(./comp-rpms.sh list-remove rpms-ref.list rpms-local.list) #for paq in $(./comp-rpms.sh list-remove rpms-ref.list rpms-local.list); do yum remove $paq ; done LANG=C yum install --assumeno $(./comp-rpms.sh list-install-v rpms-ref.list rpms-local.list) |grep '^No package' #yum install -y $(./comp-rpms.sh list-install-v rpms-ref.list rpms-local.list) yum install -y $(./comp-rpms.sh list-install rpms-ref.list rpms-local.list) yum downgrade $(./comp-rpms.sh list-same rpms-ref.list rpms-local.list)
Script
comp-rpms.sh
# !/bin/bash FUNC=$1 REFERENCE=$2 CIBLE=$3 set -o nounset regex-strip-version() { local var=$1 sed -e 's/-[0-9][0-9]*.*//g' $var } list-install() { regex-strip-version $CIBLE > /tmp/rpm.list for PAQ in $(cat $REFERENCE) do grep "^$(regex-strip-version <(echo $PAQ))$" /tmp/rpm.list >/dev/null if [ $? -eq 1 ] then echo "$PAQ" fi done rm -f /tmp/rpm.list } list-install-v() { regex-strip-version <(list-install) } list-remove() { regex-strip-version $REFERENCE > /tmp/rpm.list for PAQ in $(cat $CIBLE) do grep "^$(regex-strip-version <(echo $PAQ))$" /tmp/rpm.list >/dev/null if [ $? -eq 1 ] then echo "$PAQ" fi done } list-remove-v() { regex-strip-version <(list-remove) } list-same() { regex-strip-version $CIBLE > /tmp/rpm.list for PAQ in $(cat $REFERENCE) do grep "^$(regex-strip-version <(echo $PAQ))$" /tmp/rpm.list >/dev/null if [ $? -eq 0 ] then echo "$PAQ" fi done rm -f /tmp/rpm.list } list-same-v() { regex-strip-version <(list-same) } usage() { cat <<EOF $0 FONCTION <FICHIER REFERENCE> <FICHIER CIBLE> Exemple 1 : rpm -qa > rpms-local.list $0 list-remove rpms-ref.list rpms-local.list EOF #typeset -F |awk '{print $3}' |grep -v "^main$" } main() { if [ "$#" -lt 1 ] then usage else shift $FUNC $* fi } main $*
