250 lines
7.0 KiB
Bash
Executable File
250 lines
7.0 KiB
Bash
Executable File
#!/bin/bash
|
|
DIR=/opt/grabber/
|
|
SUCCESS_LOG=/var/log/grabber/grabber-success.log
|
|
ERROR_LOG=/var/log/grabber/grabber-error.log
|
|
SUM="$DIR/summary.txt"
|
|
|
|
HOSTNAME=$(hostname)
|
|
CPU=$(lscpu | grep 'Nom de modèle' | awk -F: '{print $2}' | xargs)
|
|
MEM=$(free -m | awk '/Mem:/ {print $2}')
|
|
OS=$(lsb_release -a |grep Description |cut -f2)
|
|
CPU_ID=$(sudo dmidecode -t processor |grep ID |cut -d: -f2)
|
|
RAM_SIZE=$(lsmem |grep "Mémoire partagée" |cut -d: -f2 |sed 's/\ //g')
|
|
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/\ //')
|
|
ARCH=$(uname -m)
|
|
DESKTOP=$XDG_CURRENT_DESKTOP
|
|
WM=$XDG_SESSION_TYPE
|
|
KERNEL=$(uname -r)
|
|
MAC_ADDRESS=$(cat /sys/class/net/$(ls /sys/class/net | grep -vE '^(lo|docker|veth|br)' | head -n 1)/address)
|
|
|
|
#PARTIE EVAL###################################
|
|
|
|
#COMMANDES QUI RÉCUPÈRE INFO
|
|
HOSTNAME=$(hostname)
|
|
IPV4=$(ip -4 a | grep inet | head -n2 | tail -n1 | cut -d' ' -f6 | cut -d'/' -f1)
|
|
MAC_ADDRESS=$(cat /sys/class/net/$(ls /sys/class/net | grep -vE '^(lo|docker|veth|br)' | head -n 1)/address)
|
|
#PARTITIONS
|
|
NOM_DISK=$(lsblk -nr -o NAME| sed -n 2p)
|
|
FSTYPE=$(lsblk -nr -o FSTYPE | sed -n 2p )
|
|
TOTAL_SIZE=$(lsblk -nr -o SIZE | sed -n 2p)
|
|
USED_SPACE=$(lsblk -nr -o FSUSED| sed -n 2p)
|
|
|
|
#LISTE D'INFO PAR DISK
|
|
DISK_NAMES=$(lsblk -nr -o PKNAME,PATH $disk_path |grep -vE "^ " |cut -d \ -f3)
|
|
FSTYPES=$(lsblk -nr -o FSTYPE)
|
|
ALL_SIZES=$(lsblk -nr -o size)
|
|
ALL_USED=$(lsblk -nr -o FSUSED)
|
|
|
|
######################################################
|
|
|
|
# Construire le JSON
|
|
json_data=$(jq -n \
|
|
--arg host "$HOSTNAME" \
|
|
--arg cpu "$CPU" \
|
|
--arg cpu_id "$CPU_ID" \
|
|
--arg mem "$MEM" \
|
|
--arg ram_size "$RAM_SIZE" \
|
|
--arg ram_gen "$RAM_GEN" \
|
|
--arg sizes "$SIZES" \
|
|
--arg mb_serial "$MB_SERIAL" \
|
|
--arg cpu_freq_min "$CPU_FREQUENCY_MIN" \
|
|
--arg cpu_freq_cur "$CPU_FREQUENCY_CUR" \
|
|
--arg cpu_freq_max "$CPU_FREQUENCY_MAX" \
|
|
--arg gpu_model "$GPU_MODEL" \
|
|
--arg chassis_serial "$CHASSIS_SERIAL" \
|
|
--arg cpu_cores_nb "$CPU_CORES_NUMBER" \
|
|
--arg cpu_threads_nb "$CPU_THREADS_NUMBER" \
|
|
--arg ram_number "$RAM_NUMBER" \
|
|
--arg ram_slots_nb "$RAM_SLOTS_NUMBER" \
|
|
--arg os "$OS" \
|
|
--arg arch "$ARCH" \
|
|
--arg desktop "$DESKTOP" \
|
|
--arg wm "$WM" \
|
|
--arg kernel "$KERNEL" \
|
|
--arg mac_address "$MAC_ADDRESS" \
|
|
--arg nom_disk "$NOM_DISK" \
|
|
--arg fstype "$FSTYPE" \
|
|
--arg total_size "$TOTAL_SIZE" \
|
|
--arg used_space "$USED_SPACE" \
|
|
--arg ipv4 "$IPV4"\
|
|
'{
|
|
HARDWARE: {
|
|
hostname:$host,
|
|
cpu:$cpu,
|
|
cpu_id:$cpu_id,
|
|
memory_mb:$mem,
|
|
ram_size:$ram_size,
|
|
ram_gen: $ram_gen,
|
|
sizes:$sizes,
|
|
mb_serial:$mb_serial,
|
|
cpu_freq_min:$cpu_freq_min,
|
|
cpu_freq_cur:$cpu_freq_cur,
|
|
cpu_freq_max:$cpu_freq_max,
|
|
gpu_model:$gpu_model,
|
|
chassis_serial:$chassis_serial,
|
|
cpu_cores_nb:$cpu_cores_nb,
|
|
cpu_threads_nb:$cpu_threads_nb,
|
|
ram_number:$ram_number,
|
|
ram_slots_nb:$ram_slots_nb,
|
|
mac_address:$mac_address,
|
|
},
|
|
|
|
SOFTWARE: {
|
|
os:$os,
|
|
arch:$arch,
|
|
desktop:$desktop,
|
|
wm:$wm,
|
|
kernel:$kernel,
|
|
},
|
|
|
|
EVALUATION: {
|
|
hostname:$host,
|
|
ipv4:$ipv4,
|
|
mac:$mac_address,
|
|
partitions: {
|
|
nom:$nom_disk,
|
|
fstype:$fstype,
|
|
total_size:$total_size,
|
|
used_space:$used_space
|
|
}
|
|
}
|
|
}')
|
|
|
|
|
|
echo "arg1=$1"
|
|
curl -X POST http://$1:8000/endpoint \
|
|
-H "Content-Type: application/json" \
|
|
-d "$json_data"
|
|
|
|
|
|
# Affichage du texte de démarrage
|
|
echo " "
|
|
echo " ++++++++++++++++++++++++++++++++++"
|
|
echo " + Welcome to Grabber +"
|
|
echo " ++++++++++++++++++++++++++++++++++"
|
|
echo " "
|
|
echo "Hello $USER !"
|
|
echo ". . ."
|
|
echo "Tout les fichiers crées se trouveront dans le dossier /opt/grabber"
|
|
echo " "
|
|
|
|
#Array File
|
|
declare -a DEVICES
|
|
mapfile -t DEVICES < <(lsblk -dn -o NAME |grep -v loop)
|
|
|
|
declare -A FILES
|
|
FILES=(
|
|
"sources_list.file" "/etc/apt/sources.list"
|
|
"passwd.file" "/etc/passwd"
|
|
"group.file" "/etc/group"
|
|
"ssh_config.file" "/etc/ssh/ssh_config"
|
|
)
|
|
|
|
declare -A COMMANDES
|
|
COMMANDES=(
|
|
[lspci.cmd]="lspci -nn"
|
|
[lsusb.cmd]="lsusb"
|
|
[apt.cmd]="apt list --installed"
|
|
[systemd-analyze.cmd]="systemd-analyze"
|
|
[systemd-blame.cmd]="systemd-analyze blame"
|
|
[lscpu.cmd]="lscpu"
|
|
[inxi.cmd]="inxi"
|
|
[lsmem.cmd]="lsmem"
|
|
)
|
|
|
|
treat_cmd() {
|
|
echo "Création fichier: $@"
|
|
$2 >$DIR/$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
|
|
}
|
|
|
|
|
|
treat_file() {
|
|
echo "Copie de fichier: $@"
|
|
cat $2 |grep -v '^#' |grep -v '^$' >$DIR/$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 cmd in "${!COMMANDES[@]}"; do
|
|
treat_cmd $cmd "${COMMANDES[$cmd]}"
|
|
done
|
|
|
|
for file in "${!FILES[@]}"; do
|
|
treat_file $file "${FILES[$file]}"
|
|
done
|
|
|
|
|
|
declare -A PARTITIONS_BY_DISK
|
|
for disk in ${DEVICES[@]}; do
|
|
disk_path=$(printf '/dev/%s' "$disk")
|
|
disk_parts=$(lsblk -nr -o PKNAME,PATH $disk_path |grep -vE "^ " |cut -d \ -f2)
|
|
PARTITIONS_BY_DISK[$disk]=${disk_parts[@]}
|
|
done
|
|
|
|
echo " "
|
|
echo "Combien de disques sur l'ordinateur ? ${#DEVICES[@]}"
|
|
echo "keys: ${!PARTITIONS_BY_DISK[@]}"
|
|
echo "values: ${PARTITIONS_BY_DISK[@]}"
|
|
|
|
|
|
|
|
hardware() {
|
|
echo " "
|
|
echo "[HARDWARE]"
|
|
echo "CPU=$CPU"
|
|
echo "CPU_ID=$CPU_ID"
|
|
echo "RAM=$RAM_SIZE $RAM_GEN"
|
|
echo "RAM_SIZE=$RAM_SIZE"
|
|
echo "RAM_GEN=$RAM_GEN"
|
|
echo "SIZES=$SIZES"
|
|
echo "MB_SERIAL=$MB_SERIAL"
|
|
echo "CPU_FREQUENCY_MIN=$CPU_FREQUENCY_MIN"
|
|
echo "CPU_FREQUENCY_CUR=$CPU_FREQUENCY_CUR"
|
|
echo "CPU_FREQUENCY_MAX=$CPU_FREQUENCY_MAX"
|
|
echo "GPU_MODEL=$GPU_MODEL"
|
|
echo "CHASSIS_SERIAL=$CHASSIS_SERIAL"
|
|
echo "CPU_CORES_NUMBER=$CPU_CORES_NUMBER"
|
|
echo "CPU_THREADS_NUMBER=$CPU_THREADS_NUMBER"
|
|
echo "RAM_NUMBER=$RAM_NUMBER"
|
|
echo "RAM_SLOTS_NUMBER=$RAM_SLOTS_NUMBER"
|
|
echo "MAC_ADDRESS=$MAC_ADDRESS"
|
|
} >$SUM
|
|
|
|
|
|
software() {
|
|
echo " "
|
|
echo "[SOFTWARE]"
|
|
echo "OS=$(lsb_release -a |grep Description |cut -f2)"
|
|
echo "ARCH=$(uname -m)"
|
|
echo "DESKTOP=$XDG_CURRENT_DESKTOP"
|
|
echo "WM=$XDG_SESSION_TYPE"
|
|
echo "KERNEL=$(uname -r)"
|
|
} >>$SUM
|
|
|
|
hardware
|
|
software
|
|
echo " "
|
|
echo "Le fichier summary.txt contient les infos hardware et software du système"
|
|
echo "À bientôt"
|
|
echo " "
|
|
echo $json_data
|