Logo Pastebin.fr
Pastebin

Retrouvez, créez et partagez vos snippets en temps réel.

aaaa

#!/bin/bash

# ==============================================================================
	# Script : grabber.sh
	# Date   : 2025-12-11
	# Version: 0.2
	#
	# Description :
	#   Grabber is a bash program that fetch some informations 
	#   of the computer's hardwares and softwares
	#
	# Usage :
	#   ./grabber.sh
	#
	# Dependancies :
	#   - dmidecode
	#   - inxi
# ==============================================================================

DATE_FORMAT=$(date +"%Y-%m-%d_%H-%M-%S")
DIRECTORY_NAME="logs_$DATE_FORMAT"
DIR=/home/admin/workspace/grabber/$DIRECTORY_NAME
SUCCESS_LOG=/var/log/grabber-success.log
ERROR_LOG=/var/log/grabber-error.log
SUM="/home/admin/workspace/grabber/summary.txt"

#creates log_[date du jour + heure]
mkdir -p $DIR

echo -e "LOGS DU $DATE_FORMAT :\n" > $SUCCESS_LOG
echo -e "LOGS DU $DATE_FORMAT :\n" > $ERROR_LOG

#.file arrays
declare -A FILES

FILES=(
	["$DIR/sources_list.file"]="/etc/apt/sources.list"
	["$DIR/passwd.file"]="/etc/passwd"
	["$DIR/group.file"]="/etc/group"
	["$DIR/etc-resolv-conf.file"]="/etc/resolv.conf"
	["$DIR/etc-network-interfaces.file"]="/etc/network/interfaces"
	["$DIR/ssh_config.file"]="/etc/ssh/ssh_config"
)

#.cmd array
declare -A CMD

CMD=(
	["$DIR/systemd-analyze.cmd"]="systemd-analyze"
	["$DIR/systemd-blame.cmd"]="systemd-analyze blame"
	["$DIR/lspci.cmd"]="lspci"
	["$DIR/lsmem.cmd"]="lsmem --output-all"
	["$DIR/lscpu.cmd"]="lscpu"
	["$DIR/lsusb.cmd"]="lsusb"
	["$DIR/apt-installed.cmd"]="apt list --installed"
)

#Stores every disks with its partitions
declare -a DEVICES
mapfile -t DEVICES < <(lsblk -dn -o NAME |grep -v loop)

declare -a PARTITIONS_BY_DISK

for disk in ${DEVICES[@]}; do
    disk_path="/dev/$disk"
    disk_parts=$(lsblk -nr -o PKNAME,PATH $disk_path |grep -vE "^\ " | cut -d' ' -f 2) 
    PARTITIONS_BY_DISK[$disk]="${disk_parts[@]}"
done

for disk in ${!PARTITIONS_BY_DISK[@]}; do
	echo "PARTS_$disk=$(printf '%s ' ${PARTITIONS_BY_DISK[$disk]})" >> $DIR/status.log
done

#Initialize logs files
treat_file() {
	cat $2 | grep -v '^#' | grep -v '^$' > $1 
	if [ $? -eq 0 ]; then
		echo "[OK]: Fichier $1 généré" >> $SUCCESS_LOG
	else
		echo "[ECHEC]: Erreur à la génération de $1 => Code de sortie $?" >> $ERROR_LOG
	fi
}

for file in "${!FILES[@]}"; do
	treat_file $file "${FILES[$file]}"
done

treat_cmd() {
	eval "$2" > $1 2> >(tee -a $ERROR_LOG)
	if [ $? -eq 0 ]; then
		echo "[OK]: Fichier $1 généré" >> $SUCCESS_LOG
	else
		echo "[ECHEC]: Erreur à la génération de $1 => Code de sortie $?" >> $ERROR_LOG
	fi
}

for f in "${!CMD[@]}"; do
	treat_cmd $f "${CMD[$f]}"
done

#SETUP HARDWARE
HOSTNAME=$(cat /etc/hostname)
CPU=$(lscpu -eMODELNAME | tail -n1 | cut -d' ' -f1,2,3,4)
CPU_ID=$(sudo dmidecode -t processor | grep ID | cut -d: -f2 | sed 's/^ *//')
RAM_SIZE=$(lsmem | grep "Mémoire partagée" | cut -d: -f2 | sed 's/\ *//')
RAM_GEN=$(sudo dmidecode -t memory | grep Type: | grep -v Unknown | tail -n1 | cut -d: -f2 | sed 's/\ //')
SIZES=$(lsblk -dnb | grep -v loop | grep -v boot | tr -s " " | cut -d' ' -f4)
MB_SERIAL=$(sudo dmidecode | grep -A 4 "Base Board" | tail -n1 | cut -d: -f2 | sed 's/\ //')
CPU_FREQUENCY_MIN=$(lscpu | grep MHz | cut -d: -f2 | sed -n '3p' | tr -s " " | sed 's/\ //' | cut -d, -f1)
CPU_FREQUENCY_CUR=$(sudo dmidecode | grep "MHz" | cut -d: -f2 | sed -n '3p' | sed 's/\ //')
CPU_FREQUENCY_MAX=$(sudo dmidecode | grep "MHz" | cut -d: -f2 | sed -n '2p' | sed 's/\ //')
GPU_MODEL=$(inxi | grep -o 'Radeon [^ ]* Graphics')
CHASSIS_SERIAL=$(sudo dmidecode | grep -A 5 "Chassis" | tail -n1 | cut -d: -f2 | sed 's/\ //')
CPU_CORES_NUMBER=$(inxi | grep core | cut -d' ' -f2 | sed 's/-core//')
CPU_THREADS_NUMBER=$(nproc)
RAM_NUMBER=$(sudo dmidecode --type memory | grep 'Rank' | wc -l)
RAM_SLOTS_NUMBER=$(sudo dmidecode --type memory | grep "Number Of Devices" | cut -d: -f2 | sed 's/\ //')

STOCKAGE_TOTAL=0

for SIZE in ${SIZES[@]}; do
	STOCKAGE_TOTAL+=$SIZES
done

STOCKAGE_TOTAL=$(numfmt --to iec $STOCKAGE_TOTAL)

#SETUP SOFTWARE

OS=$(lsb_release -a | grep Description | cut -f2)
ARCH=$(uname -a | cut -d' ' -f10)
KERNEL=$(uname -r)

hardware() {
	echo "[HARDWARE]" > $SUM
	echo "MB_SERIAL=$MB_SERIAL" >> $SUM
	echo "CHASSIS_SERIAL=$CHASSIS_SERIAL" >> $SUM
	echo "CPU=$CPU" >> $SUM
	echo "CPU_ID=$CPU_ID" >> $SUM
	echo "CPU_CORES_NUMBER=$CPU_CORES_NUMBER" >> $SUM
	echo "CPU_THREADS_NUMBER=$CPU_THREADS_NUMBER" >> $SUM
	echo "CPU_FREQUENCY_MIN=$CPU_FREQUENCY_MIN" >> $SUM
	echo "CPU_FREQUENCY_CUR=$CPU_FREQUENCY_CUR" >> $SUM
	echo "CPU_FREQUENCY_MAX=$CPU_FREQUENCY_MAX" >> $SUM
	echo "GPU_MODEL=$GPU_MODEL" >> $SUM
	echo "RAM_SLOTS_NUMBER=$RAM_SLOTS_NUMBER" >> $SUM
	echo "RAM_NUMBER=$RAM_NUMBER" >> $SUM
	echo "RAM_SIZE=$RAM_SIZE" >> $SUM
	echo "RAM_GEN=$RAM_GEN" >> $SUM
	echo "RAM=$RAM_SIZE $RAM_GEN" >> $SUM

	for i in $(seq 1 $RAM_SLOTS_NUMBER); do
		R_SIZE=$(sudo dmidecode --type=memory | grep "Size:" | grep -v "Volatile" | grep -v "Cache" | grep -v "Logical" | cut -d: -f2 | sed -n "${i}p" | sed 's/\ //')
		R_SLOT=$i
		R_FREQ=$(sudo dmidecode --type=memory | grep Speed | grep -v "Memory" | cut -d: -f2 | sed -n "${i}p" | sed 's/\ //')

		echo "RAM_${i}_SIZE=$R_SIZE" >> $SUM
		echo "RAM_${i}_SLOT=$R_SLOT" >> $SUM
	 	echo "RAM_${i}_FREQ=$R_FREQ" >> $SUM
	done


	echo "STOCKAGE_TOTAL=$STOCKAGE_TOTAL" >> $SUM
}

software() {
	echo "[SOFTWARE]" >> $SUM
	echo "OS=$OS" >> $SUM
	echo "ARCH=$ARCH" >> $SUM
	echo "DESKTOP=$XDG_CURRENT_DESKTOP" >> $SUM
	echo "WM=$XDG_SESSION_TYPE" >> $SUM
	echo "KERNEL=$KERNEL" >> $SUM
}

hardware
software

### JSON IMPLEMENTATION

# CONSTRUIRE LE JSON
json_data=$(jq -n \
	--arg host "$HOSTNAME" \
	--arg mb_serial "$MB_SERIAL" \
	--arg chassis_serial "$CHASSIS_SERIAL" \
	--arg cpu "$CPU" \
	--arg cpu_id "$CPU_ID" \
	--arg cpu_cores_number "$CPU_CORES_NUMBER" \
	--arg cpu_threads_number "$CPU_THREADS_NUMBER" \
	--arg cpu_frequency_min "$CPU_FREQUENCY_MIN" \
	--arg cpu_frequency_cur "$CPU_FREQUENCY_CUR" \
	--arg cpu_frequency_max "$CPU_FREQUENCY_MAX" \
	--arg gpu_model "$GPU_MODEL" \
	--arg ram_slots_number "$RAM_SLOTS_NUMBER" \
	--arg ram_gen "$RAM_GEN" \
	--arg os "$OS" \
	--arg arch "$ARCH" \
	--arg desktop "$XDG_CURRENT_DESKTOP" \
	--arg wm "$XDG_SESSION_TYPE" \
	--arg kernel "$KERNEL" \
	'{
	HARDWARE: {
		hostname:$host,
		mb_serial:$mb_serial,
		chassis_serial:$chassis_serial,
		cpu:$cpu,
		cpu_id:$cpu_id,
		cpu_cores_number:$cpu_cores_number,
		cpu_threads_number:$cpu_threads_number,
		cpu_frequency_min:$cpu_frequency_min,
		cpu_frequency_cur:$cpu_frequency_cur,
		cpu_frequency_max:$cpu_frequency_max,
		gpu_model:$gpu_model,
		ram_slots_number:$ram_slots_number,
		ram_gen:$ram_gen
	},
	SOFTWARE: {
		os:$os,
		arch:$arch,
		desktop:$desktop,
		wm:$wm,
		kernel:$kernel
	}
	}')

# SIMPLE LOCAL
curl -X POST http://$1:8000/endpoint \
    -H "Content-Type: application/json" \
    -d "$json_data"
echo $json_data


Créé il y a 5 jours.

Rechercher un Pastebin

Aucun paste trouvé.