trop de modifications
This commit is contained in:
parent
ab81c71b7d
commit
8bdbfd8b93
|
@ -1,10 +1,13 @@
|
|||
updateall
|
||||
check_sha256.sh
|
||||
generate_playlist.sh
|
||||
generate_playlist_fp.php
|
||||
check_smart.sh
|
||||
convertMKV.sh
|
||||
castopod_update.sh
|
||||
mkv_extract.sh
|
||||
podcast_convertImage.sh
|
||||
random_music_player.sh
|
||||
play_tophaire.sh
|
||||
generate_playlist.sh
|
||||
convertPDF.sh
|
||||
check_domain_cert.sh
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Vérifie si le bon nombre d'arguments est fourni
|
||||
if [ "$#" -ne 2 ]; then
|
||||
echo "Usage: $0 <expected_hash> <file_path>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
expected_hash=$1
|
||||
file_path=$2
|
||||
|
||||
# Vérifie si le fichier existe
|
||||
if [ ! -f "$file_path" ]; then
|
||||
echo "Error: File $file_path does not exist."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Calculer le hash SHA-256 du fichier et le comparer avec le hash attendu
|
||||
echo "$expected_hash $file_path" | sha256sum -c - > /dev/null 2>&1
|
||||
|
||||
# Vérifier le code de sortie de sha256sum
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "Hash match: OK"
|
||||
exit 0
|
||||
else
|
||||
echo "Hash match: FAILED"
|
||||
exit 1
|
||||
fi
|
|
@ -0,0 +1,99 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Fonction de hachage SHA-256
|
||||
hash_serial() {
|
||||
echo -n "$1" | sha256sum | awk '{print $1}'
|
||||
}
|
||||
|
||||
# Fonction pour exécuter le script avec sudo
|
||||
run_with_sudo() {
|
||||
sudo "$0" "$@"
|
||||
exit $?
|
||||
}
|
||||
|
||||
# Envoi des infos
|
||||
send_tracker() {
|
||||
# Envoyer les données au site checksmart.abonnel.fr via HTTP POST avec la date et l'heure
|
||||
status_disk=$1
|
||||
date_time=$(date "+%Y-%m-%d %H:%M:%S")
|
||||
echo "Envoi des données sur smartctl.abonnel.fr"
|
||||
curl -d "serial_number=$hashed_serial&data=$status_disk&date_time=$date_time" https://checksmart.abonnel.fr/api/submit
|
||||
echo -e "\n"
|
||||
}
|
||||
|
||||
# Vérifier si l'utilisateur a les privilèges sudo
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo "Ce script nécessite des privilèges sudo. Tentative de relance avec sudo..."
|
||||
run_with_sudo "$@"
|
||||
fi
|
||||
|
||||
|
||||
# Vérifier si smartctl est installé
|
||||
if ! command -v smartctl &> /dev/null; then
|
||||
echo "Le programme smartctl n'est pas installé sur ce système."
|
||||
|
||||
# Vérifier quel gestionnaire de paquets est utilisé
|
||||
if command -v apt &> /dev/null; then
|
||||
read -p "Voulez-vous installer smartmontools avec apt ? (O/N) " choice
|
||||
if [[ "$choice" =~ ^[oO] ]]; then
|
||||
apt install smartmontools
|
||||
else
|
||||
echo "Installation annulée."
|
||||
exit 1
|
||||
fi
|
||||
elif command -v yum &> /dev/null; then
|
||||
read -p "Voulez-vous installer smartmontools avec yum ? (O/N) " choice
|
||||
if [[ "$choice" =~ ^[oO] ]]; then
|
||||
yum install smartmontools
|
||||
else
|
||||
echo "Installation annulée."
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "Gestionnaire de paquets non pris en charge. Veuillez installer smartmontools manuellement."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
# Numéro de série du disque
|
||||
serial_number=$(smartctl -i /dev/sda | grep "Serial Number" | awk '{print $3}')
|
||||
hashed_serial=$(hash_serial "$serial_number")
|
||||
|
||||
# Récupérer la liste des disques
|
||||
disks=$(lsblk -o NAME -n -d)
|
||||
|
||||
|
||||
# Parcourir tous les disques et vérifier l'état SMART
|
||||
for disk in $disks; do
|
||||
# Date et heure actuelles
|
||||
|
||||
echo "----------------------------------------------"
|
||||
# Utiliser smartctl pour vérifier si le disque prend en charge SMART
|
||||
if smartctl -i /dev/$disk > /dev/null 2>&1; then
|
||||
echo "Vérification de l'état SMART pour le disque $disk :"
|
||||
output=$(smartctl -H /dev/$disk)
|
||||
if [[ "$output" =~ "PASSED" ]]; then
|
||||
status="OK"
|
||||
else
|
||||
status="En panne"
|
||||
fi
|
||||
echo "État : $status"
|
||||
|
||||
#echo "Lancement d'un scan pour la prochaine passe."
|
||||
#smartctl -t long "/dev/$disk"
|
||||
|
||||
status_disk=$(smartctl -a /dev/$disk)
|
||||
send_tracker "$status_disk"
|
||||
|
||||
else
|
||||
echo "Le périphérique $disk ne prend pas en charge SMART et est exclu de la vérification."
|
||||
echo "----------------------------------------------"
|
||||
fi
|
||||
done
|
||||
|
||||
# URL de consultation des informations
|
||||
url="https://checksmart.abonnel.fr/?hs=$hashed_serial"
|
||||
|
||||
# Afficher un message pour indiquer que les données sont consultables
|
||||
echo "Consultez les informations à l'adresse : $url"
|
|
@ -7,17 +7,32 @@ date_format=$(date +"%Y%m%d_%H%M%S")
|
|||
|
||||
# Fonction pour afficher l'utilisation du script
|
||||
usage() {
|
||||
echo "Utilisation : $0 [-n <nombre de fichiers>] [-d <répertoire>] [-o <fichier de sortie>]"
|
||||
echo "Utilisation : $0 [-EU] [-n <nombre de fichiers>] [-d <répertoire>] [-o <fichier de sortie>]"
|
||||
echo "Options :"
|
||||
echo " -n <nombre de fichiers> : Nombre de fichiers à inclure dans le M3U"
|
||||
echo " -d <répertoire> : Répertoire à scanner (y compris les sous-répertoires)"
|
||||
echo " -o <fichier de sortie> : Nom du fichier M3U de sortie"
|
||||
echo " -E : Recherche des doublons basée sur l'empreinte auditive"
|
||||
echo " -U : Mise à jour de la base de données"
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
# Temps de début d'exécution
|
||||
start_time=$(date +%s)
|
||||
|
||||
# search_type
|
||||
search_type="S" # standard
|
||||
|
||||
# Analyse des options de ligne de commande
|
||||
while getopts "n:d:o:" opt; do
|
||||
while getopts "n:d:o:EU" opt; do
|
||||
case $opt in
|
||||
E)
|
||||
search_type="E" # empreintes identiques
|
||||
;;
|
||||
U)
|
||||
search_type="U" # mise à jour de la base
|
||||
;;
|
||||
n)
|
||||
num_files=$OPTARG
|
||||
;;
|
||||
|
@ -34,6 +49,14 @@ while getopts "n:d:o:" opt; do
|
|||
esac
|
||||
done
|
||||
|
||||
|
||||
# Définition du dossier des paramètres
|
||||
CONFIG_DIR=${HOME}/.config/cedrix/generate_playlist
|
||||
if [ ! -d "$CONFIG_DIR" ]; then
|
||||
mkdir -p ${CONFIG_DIR}
|
||||
fi
|
||||
|
||||
|
||||
# Vérifier si le fichier user-dirs.dirs existe
|
||||
if [[ -f ~/.config/user-dirs.dirs ]]; then
|
||||
# Charger les variables depuis le fichier user-dirs.dirs
|
||||
|
@ -43,14 +66,14 @@ if [[ -f ~/.config/user-dirs.dirs ]]; then
|
|||
if [[ -v XDG_MUSIC_DIR ]]; then
|
||||
# Le répertoire XDG_MUSIC_DIR existe
|
||||
mkdir -p "$XDG_MUSIC_DIR/playlists"
|
||||
output_file="$XDG_MUSIC_DIR/playlists/playlist_${date_format}_${num_files}.m3u"
|
||||
output_file="$XDG_MUSIC_DIR/playlists/playlist_${date_format}.m3u"
|
||||
else
|
||||
# La variable XDG_MUSIC_DIR n'est pas définie
|
||||
output_file="$HOME/playlist_${date_format}_${num_files}.m3u"
|
||||
output_file="$HOME/playlist_${date_format}.m3u"
|
||||
fi
|
||||
else
|
||||
# Le fichier user-dirs.dirs n'existe pas
|
||||
output_file="$HOME/playlist_${date_format}_${num_files}.m3u"
|
||||
output_file="$HOME/playlist_${date_format}.m3u"
|
||||
fi
|
||||
|
||||
|
||||
|
@ -60,18 +83,134 @@ if [ ! -d "$directory" ]; then
|
|||
usage
|
||||
fi
|
||||
|
||||
# Création d'un fichier temporaire pour stocker la liste des fichiers audio avec leur date de création
|
||||
# Création d'un fichier temporaire pour stocker la liste des fichiers audio
|
||||
temp_file=$(mktemp)
|
||||
echo "Recherche en cours des fichiers audios dans \"$directory\""
|
||||
find "$directory" -type f \( -name "*.mp3" -o -name "*.opus" -o -name "*.ogg" -o -name "*.m4a" \) -exec stat --format="%Z %n" {} + > "$temp_file"
|
||||
|
||||
echo "Nombre de fichiers audios trouvé dans $directory : "$(wc -l "$temp_file")
|
||||
count=0
|
||||
|
||||
# Création de la liste des fichiers audio les plus récents à partir du fichier temporaire
|
||||
sort -n -r -o "$temp_file" "$temp_file"
|
||||
head -n "$num_files" "$temp_file" | awk '{print $2}' > "$output_file"
|
||||
# Si l'option -E est spécifiée, rechercher les doublons basés sur l'empreinte auditive
|
||||
if [ "$search_type" == "S" ]; then
|
||||
echo "Recherche en cours des $num_files derniers fichiers audios dans \"$directory\""
|
||||
find "$directory" -type f \( -name "*.mp3" -o -name "*.opus" -o -name "*.ogg" -o -name "*.m4a" \) -exec stat --format="%Z %n" {} + > "$temp_file"
|
||||
|
||||
echo "Nombre de fichiers audios trouvé dans $directory : "$(wc -l "$temp_file")
|
||||
|
||||
# Création de la liste des fichiers audio les plus récents à partir du fichier temporaire
|
||||
sort -n -r -o "$temp_file" "$temp_file"
|
||||
head -n "$num_files" "$temp_file" | awk '{print $2}' > "$output_file"
|
||||
|
||||
elif [ "$search_type" == "E" ]; then
|
||||
# Code pour rechercher les doublons basés sur l'empreinte auditive
|
||||
echo "Option -E spécifiée : Recherche des doublons basés sur l'empreinte auditive. Veuillez patienter ..."
|
||||
|
||||
# Chemin de la base de données SQLite
|
||||
db_file=${CONFIG_DIR}/database.sqlite
|
||||
|
||||
# Requête SQL pour récupérer les fichiers avec des empreintes identiques
|
||||
query="SELECT acoustid, GROUP_CONCAT(file_id) AS file_ids, COUNT(*) AS count
|
||||
FROM metadata
|
||||
GROUP BY acoustid
|
||||
HAVING count > 1;"
|
||||
|
||||
# Exécuter la requête SQL et afficher les résultats
|
||||
sqlite3 "$db_file" "$query"| while IFS='|' read -r acoustid file_ids count; do
|
||||
echo "Empreinte digitale ID : $acoustid"
|
||||
echo "Fichiers associés : $file_ids"
|
||||
echo "Nombre de fichiers : $count"
|
||||
echo "-------------------------"
|
||||
done
|
||||
|
||||
exit
|
||||
|
||||
elif [ "$search_type" == "U" ]; then
|
||||
# Code pour rechercher les doublons basés sur l'empreinte auditive
|
||||
echo "Mise à jour de la base de données. Le traitement peut être un peu long. Veuillez patienter ..."
|
||||
|
||||
# Vérifier si fpcalc est installé et l'installer si nécessaire
|
||||
if ! command -v fpcalc &>/dev/null; then
|
||||
echo "Téléchargement de fpcalc..."
|
||||
mkdir -p "$HOME/.local/bin"
|
||||
wget -O /tmp/chromaprint.tar.gz https://github.com/acoustid/chromaprint/releases/download/v1.5.1/chromaprint-fpcalc-1.5.1-linux-x86_64.tar.gz
|
||||
tar -xzf /tmp/chromaprint.tar.gz -C "$HOME/.local/bin" --strip-components=1
|
||||
rm /tmp/chromaprint.tar.gz
|
||||
chmod +x "$HOME/.local/bin/fpcalc"
|
||||
echo "fpcalc installé avec succès."
|
||||
fi
|
||||
|
||||
|
||||
# Vérifier si PHP est installé
|
||||
if ! command -v php &>/dev/null; then
|
||||
echo "PHP n'est pas installé. Installation en cours..."
|
||||
if command -v dnf &>/dev/null; then
|
||||
sudo dnf install -y php
|
||||
elif command -v apt &>/dev/null; then
|
||||
sudo apt install -y php
|
||||
elif command -v yum &>/dev/null; then
|
||||
sudo yum install -y php
|
||||
else
|
||||
echo "Système de gestion de paquets non pris en charge."
|
||||
exit 1
|
||||
fi
|
||||
echo "PHP installé avec succès."
|
||||
fi
|
||||
|
||||
# Vérifier si SQLite pour PHP est installé
|
||||
if ! php -m | grep -q "sqlite3"; then
|
||||
echo "SQLite pour PHP n'est pas installé. Installation en cours..."
|
||||
if command -v dnf &>/dev/null; then
|
||||
sudo dnf install -y php-sqlite3
|
||||
elif command -v apt &>/dev/null; then
|
||||
sudo apt install -y php-sqlite3
|
||||
elif command -v yum &>/dev/null; then
|
||||
sudo yum install -y php-sqlite3
|
||||
else
|
||||
echo "Système de gestion de paquets non pris en charge."
|
||||
exit 1
|
||||
fi
|
||||
echo "SQLite pour PHP installé avec succès."
|
||||
fi
|
||||
|
||||
# Chemin de la base de données SQLite
|
||||
db_file=${CONFIG_DIR}/database.sqlite
|
||||
|
||||
# Chemin complet du script PHP
|
||||
php_script="$(dirname "$0")/generate_playlist_fp.php"
|
||||
|
||||
# Appeler le script PHP avec les paramètres appropriés
|
||||
php "$php_script" "$directory" "$db_file"
|
||||
|
||||
|
||||
fi
|
||||
|
||||
echo -e " and more...\n"
|
||||
|
||||
# Suppression du fichier temporaire
|
||||
rm "$temp_file"
|
||||
rm -v "$temp_file"
|
||||
|
||||
echo "Le fichier M3U a été créé avec les $num_files fichiers audio les plus récents dans le répertoire $directory : $output_file"
|
||||
|
||||
|
||||
# ajout du nombre de fichiers de la playlist dans le nom du fichier
|
||||
num_files_real=$(wc -l $output_file)
|
||||
|
||||
# Extraire le nom de fichier sans l'extension
|
||||
filename_without_extension="${output_file%.*}"
|
||||
|
||||
# Extraire l'extension du fichier
|
||||
extension="${original_file##*.}"
|
||||
|
||||
# Construire le nouveau nom de fichier avec num_files_real ajouté avant l'extension
|
||||
output_new_file="${filename_without_extension}_${num_files_real}.${extension}"
|
||||
|
||||
mv -v "${output_file}" "${output_new_file}"
|
||||
|
||||
|
||||
echo "Le fichier M3U a été créé avec les $num_files_real fichiers audio les plus récents dans le répertoire $directory : $output_file"
|
||||
|
||||
|
||||
# Temps de fin d'exécution
|
||||
end_time=$(date +%s)
|
||||
|
||||
# Calcul du temps écoulé
|
||||
execution_time=$((end_time - start_time))
|
||||
|
||||
echo "Temps d'exécution: $execution_time secondes"
|
||||
|
|
|
@ -0,0 +1,217 @@
|
|||
<?php
|
||||
|
||||
// Fonction pour calculer le fingerprint d'un fichier audio
|
||||
function calculate_fingerprint($file) {
|
||||
$return_code = 0;
|
||||
|
||||
$file_bash = str_replace(['$'], ['\$'], $file);
|
||||
|
||||
exec("fpcalc -json \"$file_bash\" 2>&1", $output, $return_code);
|
||||
// Vérifier s'il y a eu une erreur lors de l'exécution de la commande
|
||||
if ($return_code !== 0) {
|
||||
// Enregistrer l'erreur dans un fichier journal par exemple
|
||||
error_log("Erreur lors du calcul du fingerprint pour le fichier \"$file_bash\" : " . implode("\n", $output));
|
||||
return null; // Retourner null pour indiquer une erreur
|
||||
}
|
||||
|
||||
// Traitement de la réponse
|
||||
$result = json_decode(implode('', $output), true);
|
||||
|
||||
// Vérifier si le résultat est valide
|
||||
if (isset($result['fingerprint'])) {
|
||||
return $result['fingerprint']; // Retourner le fingerprint
|
||||
} else {
|
||||
// Enregistrer un message d'erreur dans le journal
|
||||
error_log("Réponse invalide lors du calcul du fingerprint pour le fichier $file : " . implode("\n", $output));
|
||||
return null; // Retourner null en cas de réponse invalide
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function getTagValue($metadataInFile, $tagKey) {
|
||||
// Vérifier si la clé existe dans le tableau et retourner sa valeur si c'est le cas
|
||||
if (isset($metadataInFile['streams'][0]['tags'][$tagKey])) {
|
||||
return $metadataInFile['streams'][0]['tags'][$tagKey];
|
||||
} else {
|
||||
// Retourner null si la clé n'existe pas
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Fonction pour extraire les métadonnées d'un fichier audio
|
||||
function extract_metadata($file) {
|
||||
|
||||
# Extraire les métadonnées avec ffprobe
|
||||
$ffprobe_output = shell_exec("ffprobe -hide_banner -loglevel fatal -show_error -show_format -show_streams -print_format json \"$file\"");
|
||||
|
||||
// Décoder la sortie JSON
|
||||
$metadataInFile = json_decode($ffprobe_output, true);
|
||||
|
||||
// Vérifier si les métadonnées contiennent les tags
|
||||
if (isset($metadataInFile['streams'][0]['tags'])) {
|
||||
|
||||
|
||||
// Extraire les metadonnées
|
||||
$metadata['ARTIST'] = getTagValue($metadataInFile, 'ARTIST');
|
||||
$metadata['TITLE'] = getTagValue($metadataInFile, 'TITLE');
|
||||
$metadata['ALBUM'] = getTagValue($metadataInFile, 'ALBUM');
|
||||
$metadata['ACOUSTID'] = getTagValue($metadataInFile, 'ACOUSTID_ID');
|
||||
$metadata['duration'] = isset($metadataInFile['format']['duration']) ? (float)$metadataInFile['format']['duration'] : null;
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (isset($metadata)) {
|
||||
return $metadata;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// Vérifier si le nombre de paramètres est correct
|
||||
if ($argc != 3) {
|
||||
die("Usage: php scan_files.php <directory> <database>\n");
|
||||
}
|
||||
|
||||
$directory = $argv[1];
|
||||
$db_file = $argv[2];
|
||||
|
||||
// Vérifier si le dossier existe
|
||||
if (!is_dir($directory)) {
|
||||
die("Le dossier spécifié n'existe pas.\n");
|
||||
}
|
||||
|
||||
// Vérifier si la base de données existe, sinon la créer
|
||||
if (!file_exists($db_file)) {
|
||||
echo "La base de données n'existe pas. Création en cours...\n";
|
||||
$db = new PDO("sqlite:$db_file");
|
||||
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
|
||||
// Créer les tables
|
||||
$db->exec("CREATE TABLE IF NOT EXISTS files (
|
||||
id INTEGER PRIMARY KEY,
|
||||
file_path TEXT UNIQUE,
|
||||
first_referenced DATETIME,
|
||||
last_updated DATETIME
|
||||
)");
|
||||
$db->exec("CREATE TABLE IF NOT EXISTS fingerprints (
|
||||
id INTEGER PRIMARY KEY,
|
||||
file_id INTEGER UNIQUE,
|
||||
fingerprint TEXT,
|
||||
FOREIGN KEY (file_id) REFERENCES files(id)
|
||||
)");
|
||||
$db->exec("CREATE TABLE IF NOT EXISTS metadata (
|
||||
file_id INTEGER PRIMARY KEY,
|
||||
artist TEXT,
|
||||
title TEXT,
|
||||
album TEXT,
|
||||
duration REAL,
|
||||
acoustid TEXT,
|
||||
FOREIGN KEY (file_id) REFERENCES files(id)
|
||||
)");
|
||||
|
||||
// Création de la table system_info si elle n'existe pas déjà
|
||||
$db->exec("CREATE TABLE IF NOT EXISTS system_info (
|
||||
id INTEGER PRIMARY KEY,
|
||||
version INTEGER NOT NULL
|
||||
)");
|
||||
|
||||
// Insertion des données de version
|
||||
$version = "1";
|
||||
$insert_version_sql = "INSERT INTO system_info (version) VALUES (:version)";
|
||||
$stmt = $db->prepare($insert_version_sql);
|
||||
$stmt->bindParam(':version', $version, PDO::PARAM_STR);
|
||||
$stmt->execute();
|
||||
|
||||
echo "Base de données créée avec succès.\n";
|
||||
} else {
|
||||
// Connexion à la base de données SQLite
|
||||
$db = new PDO("sqlite:$db_file");
|
||||
}
|
||||
|
||||
// Préparation de la requête d'insertion des fichiers
|
||||
$insert_file_stmt = $db->prepare("INSERT INTO files (file_path, first_referenced, last_updated) VALUES (:file_path, DATETIME('now'), DATETIME('now'))");
|
||||
|
||||
// Préparer la requête SQL d'insertion ou de mise à jour des empreintes digitales
|
||||
$insert_fingerprint_sql = "INSERT INTO fingerprints (file_id, fingerprint)
|
||||
VALUES (:file_id, :fingerprint)
|
||||
ON CONFLICT(file_id) DO UPDATE
|
||||
SET fingerprint = :fingerprint";
|
||||
|
||||
$insert_fingerprint_stmt = $db->prepare($insert_fingerprint_sql);
|
||||
|
||||
// Préparer la requête SQL d'insertion ou de mise à jour des métadonnées
|
||||
$insert_metadata_sql = "INSERT INTO metadata (file_id, artist, title, album, acoustid, duration)
|
||||
VALUES (:file_id, :artist, :title, :album, :acoustid, :duration)
|
||||
ON CONFLICT(file_id) DO UPDATE
|
||||
SET artist = :artist,
|
||||
title = :title,
|
||||
album = :album,
|
||||
acoustid = :acoustid,
|
||||
duration = :duration";
|
||||
|
||||
$insert_metadata_stmt = $db->prepare($insert_metadata_sql);
|
||||
|
||||
$count = 0; // Initialisation du compteur
|
||||
|
||||
// Parcourir les fichiers audio
|
||||
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));
|
||||
foreach ($iterator as $file) {
|
||||
|
||||
$file_bash = escapeshellarg($file);
|
||||
|
||||
if ($file->isFile() && in_array($file->getExtension(), ['mp3', 'opus', 'ogg', 'm4a'])) {
|
||||
|
||||
if ($count % 10 == 0) {
|
||||
echo "\rProgress: $count files processed\n";
|
||||
}
|
||||
|
||||
$file_path = $file->getPathname();
|
||||
|
||||
// Vérifier si le fichier existe déjà dans la base de données
|
||||
$result = $db->query("SELECT id FROM files WHERE file_path = " . $db->quote($file_path));
|
||||
$file_id = $result->fetchColumn();
|
||||
|
||||
if (!$file_id) {
|
||||
// Insérer le fichier dans la base de données
|
||||
$insert_file_stmt->execute([':file_path' => $file_path]);
|
||||
$file_id = $db->lastInsertId();
|
||||
|
||||
// Calculer le fingerprint du fichier
|
||||
// $fingerprint = calculate_fingerprint($file_path);
|
||||
|
||||
// Insérer le fingerprint dans la base de données
|
||||
// $insert_fingerprint_stmt->execute([':file_id' => $file_id, ':fingerprint' => $fingerprint]);
|
||||
|
||||
} else {
|
||||
// Mettre à jour la date de dernière mise à jour du fichier
|
||||
$db->exec("UPDATE files SET last_updated = DATETIME('now') WHERE id = $file_id");
|
||||
}
|
||||
|
||||
|
||||
// Extraire les métadonnées du fichier audio
|
||||
$metadata = extract_metadata($file_path);
|
||||
|
||||
// Insérer les métadonnées dans la base de données
|
||||
$insert_metadata_stmt->execute([
|
||||
':file_id' => $file_id,
|
||||
':artist' => isset($metadata['ARTIST']) ? $metadata['ARTIST'] : null,
|
||||
':title' => isset($metadata['TITLE']) ? $metadata['TITLE'] : null,
|
||||
':album' => isset($metadata['ALBUM']) ? $metadata['ALBUM'] : null,
|
||||
':acoustid' => isset($metadata['ACOUSTID']) ? $metadata['ACOUSTID'] : null,
|
||||
':duration' => isset($metadata['duration']) ? (int)$metadata['duration'] : null
|
||||
]);
|
||||
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
|
||||
// Fermer la connexion à la base de données
|
||||
$db = null;
|
||||
|
||||
echo "Terminé.\n";
|
||||
|
||||
?>
|
|
@ -0,0 +1,77 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Fonction pour vérifier si une ligne existe déjà dans un fichier
|
||||
line_exists() {
|
||||
grep -Fq "$1" "$2"
|
||||
}
|
||||
|
||||
# Vérifie si le système est sous Buster
|
||||
check_buster() {
|
||||
if grep -Fq "buster" /etc/os-release; then
|
||||
echo "Le système est sous Buster."
|
||||
return 0
|
||||
else
|
||||
echo "Le système n'est pas sous Buster."
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Vérifie si non-free-firmware est configuré
|
||||
check_non_free_firmware() {
|
||||
if grep -Eq "non-free-firmware" /etc/apt/sources.list /etc/apt/sources.list.d/*; then
|
||||
echo "Le dépôt non-free-firmware est déjà configuré."
|
||||
return 0
|
||||
else
|
||||
echo "Le dépôt non-free-firmware n'est pas configuré."
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Met à jour les sources.list pour passer de Buster à Bullseye ou une version ultérieure
|
||||
update_sources() {
|
||||
local new_codename="$1"
|
||||
sed -i.bak -e "s/buster/$new_codename/g" /etc/apt/sources.list /etc/apt/sources.list.d/*
|
||||
echo "Mise à jour de /etc/apt/sources.list et /etc/apt/sources.list.d/* pour passer à $new_codename."
|
||||
}
|
||||
|
||||
# Ajoute non-free-firmware aux sources.list si nécessaire
|
||||
add_non_free_firmware() {
|
||||
if ! check_non_free_firmware; then
|
||||
if check_buster; then
|
||||
# Ajouter non-free-firmware pour la version Bookworm ou ultérieure
|
||||
sed -i.bak -e '/deb .*main/ s/$/ contrib non-free non-free-firmware/' /etc/apt/sources.list /etc/apt/sources.list.d/*
|
||||
echo "Ajout de non-free-firmware aux dépôts."
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Main script
|
||||
echo "Mise à jour de votre système Debian..."
|
||||
|
||||
# Mettre à jour le système dans sa version actuelle
|
||||
sudo apt-get update
|
||||
sudo apt-get upgrade -y
|
||||
sudo apt-get full-upgrade -y
|
||||
|
||||
# Vérifier si des sauvegardes ont été effectuées (cette étape est manuelle)
|
||||
|
||||
# Mise à jour des sources.list
|
||||
if check_buster; then
|
||||
update_sources "bullseye"
|
||||
add_non_free_firmware
|
||||
fi
|
||||
|
||||
# Nettoyer et mettre à jour les listes de paquets
|
||||
sudo apt-get clean
|
||||
sudo apt-get update
|
||||
|
||||
# Effectuer la mise à niveau majeure
|
||||
sudo apt-get upgrade -y
|
||||
sudo apt-get full-upgrade -y
|
||||
|
||||
# Supprimer les paquets non nécessaires
|
||||
sudo apt-get autoremove -y
|
||||
|
||||
# Redémarrer le système
|
||||
echo "Redémarrage du système pour appliquer les changements..."
|
||||
sudo shutdown -r now
|
|
@ -1,69 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Mise à jour des machines présentes dans .ssh/config avec choix d'ignorer certaines.
|
||||
|
||||
# Fonction pour mettre à jour avec apt
|
||||
update_with_apt() {
|
||||
echo "--- Mise à jour avec apt sur $1"
|
||||
ssh -tt "$1" 'sudo apt update && sudo apt upgrade --assume-yes'
|
||||
}
|
||||
|
||||
# Fonction pour mettre à jour avec dnf
|
||||
update_with_dnf() {
|
||||
echo "--- Mise à jour avec dnf sur $1"
|
||||
ssh -tt "$1" 'sudo dnf check-update && sudo dnf upgrade -y'
|
||||
}
|
||||
|
||||
|
||||
# Déclaration d'une fonction pour récupérer les alias à partir du fichier ~/.ssh/config
|
||||
get_ssh_aliases() {
|
||||
# Parcours du fichier ~/.ssh/config et récupération du premier Host (excluant "*")
|
||||
awk 'tolower($1) == "host" && $2 != "*" && !seen[$2]++ {print $2}' ~/.ssh/config
|
||||
|
||||
# Parcours des fichiers dans le dossier ~/.ssh/include et récupération du premier Host (excluant "*")
|
||||
for include_file in ~/.ssh/include/*; do
|
||||
awk 'tolower($1) == "host" && $2 != "*" && !seen[$2]++ {print $2}' "$include_file"
|
||||
done
|
||||
}
|
||||
|
||||
# Récupérer les alias SSH
|
||||
machines=($(get_ssh_aliases))
|
||||
|
||||
# Parcourir la liste des machines
|
||||
|
||||
for machine in "${machines[@]}"; do
|
||||
# Vérification si le nom de machine est présent dans le fichier .config/updateall-hosts
|
||||
if grep -q "^$machine " ~/.config/updateall-hosts; then
|
||||
status=$(grep "^$machine " ~/.config/updateall-hosts | awk '{print $2}')
|
||||
if [ "$status" = "1" ]; then
|
||||
echo "--------------------------------------------------------------------------------"
|
||||
echo "--- Vérification du gestionnaire de paquets sur $machine"
|
||||
if timeout 5 ssh "$machine" which apt > /dev/null 2>&1; then
|
||||
update_with_apt "$machine"
|
||||
elif timeout 5 ssh "$machine" which dnf > /dev/null 2>&1; then
|
||||
update_with_dnf "$machine"
|
||||
else
|
||||
echo "[x] Aucun gestionnaire de paquets trouvé sur $machine"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "--------------------------------------------------------------------------------"
|
||||
if timeout 5 ssh "$machine" which apt > /dev/null 2>&1; then
|
||||
update_with_apt "$machine"
|
||||
elif timeout 5 ssh "$machine" which dnf > /dev/null 2>&1; then
|
||||
update_with_dnf "$machine"
|
||||
else
|
||||
echo "[x] Aucun gestionnaire de paquets trouvé sur $machine"
|
||||
fi
|
||||
read -p "--- Le traitement pour $machine vient de se terminer. Souhaitez-vous le refaire les prochaines fois ? (o/n) " choice
|
||||
if [ "$choice" = "o" ]; then
|
||||
echo "$machine 1" >> ~/.config/updateall-hosts
|
||||
else
|
||||
echo "$machine 0" >> ~/.config/updateall-hosts
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
done
|
||||
|
|
@ -0,0 +1,177 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Variables pour les codes de couleur ANSI
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Mise à jour des machines présentes dans .ssh/config avec choix d'ignorer certaines.
|
||||
|
||||
# Fonction pour mettre à jour avec apt
|
||||
update_with_apt() {
|
||||
echo -e " - Mise à jour avec apt sur $1 \n"
|
||||
ssh -tt "$1" '
|
||||
sudo apt -y -q clean &&
|
||||
sudo apt -y -q update &&
|
||||
sudo apt -y -q full-upgrade &&
|
||||
sudo apt -y -q autoremove
|
||||
'
|
||||
echo -e "\n"
|
||||
}
|
||||
|
||||
# Fonction pour mettre à jour avec dnf
|
||||
update_with_dnf() {
|
||||
echo -e " - Mise à jour avec dnf sur $1 \n"
|
||||
ssh -tt "$1" 'sudo dnf check-update && sudo dnf upgrade -y'
|
||||
echo -e "\n"
|
||||
}
|
||||
|
||||
|
||||
# Déclaration d'une fonction pour récupérer les alias à partir du fichier ~/.ssh/config
|
||||
get_ssh_aliases() {
|
||||
# Parcours du fichier ~/.ssh/config et récupération du premier Host (excluant "*")
|
||||
awk 'tolower($1) == "host" && $2 != "*" && !seen[$2]++ {print $2}' ~/.ssh/config
|
||||
|
||||
# Parcours des fichiers dans le dossier ~/.ssh/include et récupération du premier Host (excluant "*")
|
||||
for include_file in ~/.ssh/include/*; do
|
||||
awk 'tolower($1) == "host" && $2 != "*" && !seen[$2]++ {print $2}' "$include_file"
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
check_keyinstall() {
|
||||
local machine="$1"
|
||||
local uniqkey="$2"
|
||||
local uniqkey_file="/etc/cedrix_updateall"
|
||||
|
||||
echo -n " - Vérification d'une mise à jour déjà effectuée sur "$machine" : "
|
||||
|
||||
if ! timeout 5 ssh "$machine" '[ -f "$uniqkey_file" ]'; then
|
||||
echo -e "${GREEN}mise à jour à faire.${NC}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if timeout 5 ssh "$machine" "grep -q '$uniqkey' $uniqkey_file"; then
|
||||
echo -e "${RED}mise à jour déjà faite.${NC}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
timeout 5 ssh "$machine" "sudo rm "$uniqkey_file""
|
||||
echo -e "${GREEN}mise à jour à faire et clé à modifier.${NC}"
|
||||
return 0
|
||||
}
|
||||
|
||||
|
||||
create_installkey() {
|
||||
local machine="$1"
|
||||
local uniqkey="$2"
|
||||
local uniqkey_file="/etc/cedrix_updateall"
|
||||
|
||||
echo -n " - Indiquer à $machine que le script est passé ... "
|
||||
# Si la clé unique n'est pas présente, la déposer dans le fichier
|
||||
echo "$uniqkey" | timeout 5 ssh "$machine" "sudo su -c \"cat > $uniqkey_file\""
|
||||
result="$?"
|
||||
|
||||
if [ $result -eq 0 ]; then
|
||||
echo -e "${GREEN}OK${NC}"
|
||||
else
|
||||
echo -e "${RED}une erreur est survenue. Désactivation des prochaines mise à jour.${NC}"
|
||||
|
||||
fi
|
||||
|
||||
return
|
||||
|
||||
}
|
||||
|
||||
update_machine () {
|
||||
local machine="$1"
|
||||
echo -n " - Détection du gestionnaire de mise à jour ... "
|
||||
if timeout 5 ssh "$machine" which apt > /dev/null 2>&1; then
|
||||
echo -e "${GREEN}apt${NC}"
|
||||
update_with_apt "$machine"
|
||||
elif timeout 5 ssh "$machine" which dnf > /dev/null 2>&1; then
|
||||
echo -e "${GREEN}dnf${NC}"
|
||||
update_with_dnf "$machine"
|
||||
else
|
||||
echo " ${RED} non détecté${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
|
||||
confirm_update() {
|
||||
local machine="$1"
|
||||
read -p " - Executer la mise à jour pour $machine ? (o/n) " choice
|
||||
if [ "$choice" = "o" ]; then
|
||||
echo "$machine 1" >> ~/.config/updateall-hosts
|
||||
else
|
||||
echo "$machine 0" >> ~/.config/updateall-hosts
|
||||
continue
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
check_host() {
|
||||
local machine="$1"
|
||||
|
||||
echo -n " - Check host "
|
||||
# Vérifier la résolution du nom d'hôte
|
||||
if ssh "$machine" hostname > /dev/null 2>&1; then
|
||||
echo -e "... ${GREEN}OK${NC}"
|
||||
return 1
|
||||
else
|
||||
echo -e "... ${RED}KO${NC}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
|
||||
# Générer une clé unique
|
||||
uniqkey=$(uuidgen)
|
||||
echo "Clé d'installation : $uniqkey"
|
||||
|
||||
# Récupérer les alias SSH
|
||||
machines=($(get_ssh_aliases))
|
||||
|
||||
# Parcourir la liste des machines
|
||||
|
||||
for machine in "${machines[@]}"; do
|
||||
# Vérification si le nom de machine est présent dans le fichier .config/updateall-hosts
|
||||
echo -e "\n"
|
||||
echo -n " >> $machine "
|
||||
|
||||
if grep -q "^$machine " ~/.config/updateall-hosts; then
|
||||
status=$(grep "^$machine " ~/.config/updateall-hosts | awk '{print $2}')
|
||||
if [ "$status" = "1" ]; then
|
||||
echo -e "${GREEN}connue${NC}"
|
||||
|
||||
check_host "$machine"
|
||||
machine_online="$?"
|
||||
|
||||
if [ "$machine_online" -eq 1 ]; then
|
||||
check_keyinstall "$machine" "$uniqkey"
|
||||
keyinstall_present="$?"
|
||||
if [ "$keyinstall_present" -eq 0 ]; then
|
||||
update_machine "$machine"
|
||||
create_installkey "$machine" "$uniqkey"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo -e "${RED}ignorée${NC}"
|
||||
fi
|
||||
else
|
||||
if [ "$machine_online" -eq 1 ]; then
|
||||
echo -e "${RED}vue pour la 1re fois${NC}"
|
||||
|
||||
check_host "$machine"
|
||||
machine_online="$?"
|
||||
|
||||
confirm_update "$machine"
|
||||
update_machine "$machine"
|
||||
create_installkey "$machine" "$uniqkey"
|
||||
fi
|
||||
fi
|
||||
|
||||
done
|
||||
|
Loading…
Reference in New Issue