Outils pour utilisateurs

Outils du site


blog

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

2025/03/24 15:06

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

FIXME

2025/03/24 15:06

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
2025/03/24 15:06

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'
2025/03/24 15:06

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 $*
2025/03/24 15:06
blog.txt · Dernière modification : de 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki