diff --git a/.config/files_local-bin b/.config/files_local-bin index 0d203f4..7f87d7b 100644 --- a/.config/files_local-bin +++ b/.config/files_local-bin @@ -1,3 +1,4 @@ +ytdll updateall.sh update_bullseye2buster.sh check_sha256.sh diff --git a/.config/files_local-share-ytdll b/.config/files_local-share-ytdll new file mode 100644 index 0000000..926d026 --- /dev/null +++ b/.config/files_local-share-ytdll @@ -0,0 +1,3 @@ +definitionsTables.json +lib +config.json diff --git a/.config/files_local-share-ytdll-lib b/.config/files_local-share-ytdll-lib new file mode 100644 index 0000000..3f58b73 --- /dev/null +++ b/.config/files_local-share-ytdll-lib @@ -0,0 +1,4 @@ +UpdateManager.php +Config.php +TableManager.php +Database.php diff --git a/install.sh b/install.sh index 3cf920a..d023c13 100755 --- a/install.sh +++ b/install.sh @@ -5,6 +5,9 @@ # Description : Script d'installation des exécutables dans le répertoire '~/.local'" +# Version 07.07.24 +# - Ajout du traitement de share/ytdll et share/ytdll/lib + # Version 23.12.1.3 # - Amélioration des logs # - process_deployment_files optmisie les opérations de déployement @@ -131,6 +134,45 @@ purge_old_logs +#### .local/share/ytdll #### + +## Declarations ## + +# Spécifier le chemin du répertoire destination +destination_dir="$HOME/.local/share/ytdll" + +# Spécifier le chemin du répertoire du dépôt Git local +source_dir="local/share/ytdll" + +file_local_desc=.config/files_local-share-ytdll + +## Traitement ## +log "## Debut du traitement pour $destination_dir" + +process_deployment_files "$destination_dir" "$source_dir" "$file_local_desc" + + + +#### .local/share/ytdll/lib #### + +## Declarations ## + +# Spécifier le chemin du répertoire destination +destination_dir="$HOME/.local/share/ytdll/lib" + +# Spécifier le chemin du répertoire du dépôt Git local +source_dir="local/share/ytdll/lib" + +file_local_desc=.config/files_local-share-ytdll-lib + +## Traitement ## +log "## Debut du traitement pour $destination_dir" + +process_deployment_files "$destination_dir" "$source_dir" "$file_local_desc" + + + + #### .local/share/doc #### ## Declarations ## diff --git a/local/bin/setup_server_debian.sh b/local/bin/setup_server_debian.sh new file mode 100755 index 0000000..b69bd9d --- /dev/null +++ b/local/bin/setup_server_debian.sh @@ -0,0 +1,149 @@ +#!/bin/bash + +# Vérifier si le script est exécuté en root +if [[ $EUID -ne 0 ]]; then + echo "Ce script doit être exécuté en tant que root." + exit 1 +fi + +### Fonction pour mettre à jour le système +update_system() { + echo "Mise à jour du système..." + apt update && apt upgrade -y +} + +### Fonction pour installer sudo s'il n'est pas déjà présent +install_sudo() { + if command -v sudo &>/dev/null; then + echo "Sudo est déjà installé." + else + echo "Installation de sudo..." + apt install -y sudo + fi +} + +### Fonction pour ajouter un utilisateur administrateur +add_admin_user() { + # Vérifier s'il existe déjà un utilisateur autre que root + EXISTING_USER=$(awk -F: '$3 >= 1000 && $3 < 60000 {print $1; exit}' /etc/passwd) + + if [[ -n "$EXISTING_USER" ]]; then + echo "Un utilisateur ($EXISTING_USER) existe déjà sur le système." + read -p "Voulez-vous ajouter un autre utilisateur administrateur ? (o/N) " ADD_NEW_USER + if [[ ! "$ADD_NEW_USER" =~ ^[Oo]$ ]]; then + echo "Aucun nouvel utilisateur ajouté." + return + fi + fi + + read -p "Entrez le nom du nouvel utilisateur : " NEW_USER + + # Vérifier si l'utilisateur existe déjà + if id "$NEW_USER" &>/dev/null; then + echo "L'utilisateur $NEW_USER existe déjà." + else + adduser "$NEW_USER" + echo "Utilisateur $NEW_USER créé." + fi + + # Vérifier si l'utilisateur est dans le groupe sudo + if groups "$NEW_USER" | grep -q "\bsudo\b"; then + echo "$NEW_USER est déjà dans le groupe sudo." + else + usermod -aG sudo "$NEW_USER" + echo "$NEW_USER ajouté au groupe sudo." + fi + # Vérifier si les permissions sudo sont déjà définies + if [ -f "/etc/sudoers.d/$NEW_USER" ]; then + echo "Les permissions sudo sont déjà configurées pour $NEW_USER." + else + echo "$NEW_USER ALL=(ALL) NOPASSWD:ALL" > "/etc/sudoers.d/$NEW_USER" + chmod 0440 "/etc/sudoers.d/$NEW_USER" + echo "Configuration sudo appliquée pour $NEW_USER." + fi + + # Demander si on veut ajouter une clé SSH + read -p "Voulez-vous ajouter une clé SSH pour $NEW_USER ? (o/N) " ADD_SSH + if [[ "$ADD_SSH" =~ ^[Oo]$ ]]; then + SSH_DIR="/home/$NEW_USER/.ssh" + AUTH_KEYS="$SSH_DIR/authorized_keys" + + # Créer le dossier .ssh s'il n'existe pas + if [ ! -d "$SSH_DIR" ]; then + mkdir -p "$SSH_DIR" + chown "$NEW_USER:$NEW_USER" "$SSH_DIR" + chmod 700 "$SSH_DIR" + echo "Dossier .ssh créé pour $NEW_USER." + fi + + read -p "Collez la clé publique SSH : " SSH_KEY + + # Vérifier si la clé est déjà présente + if grep -qxF "$SSH_KEY" "$AUTH_KEYS" 2>/dev/null; then + echo "Cette clé SSH est déjà ajoutée." + else + echo "$SSH_KEY" >> "$AUTH_KEYS" + chown "$NEW_USER:$NEW_USER" "$AUTH_KEYS" + chmod 600 "$AUTH_KEYS" + echo "Clé SSH ajoutée pour $NEW_USER." + fi + else + echo "Aucune clé SSH ajoutée." + fi +} + +### Fonction pour configurer SSH de manière sécurisée +configure_ssh() { + if grep -q "^PermitRootLogin no" /etc/ssh/sshd_config; then + echo "La connexion root SSH est déjà désactivée." + else + echo "Désactivation de la connexion root via SSH..." + sed -i 's/^#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config + sed -i 's/^PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config + systemctl restart ssh + echo "Sécurisation SSH appliquée." + fi +} + +### Fonction pour installer et configurer Fail2Ban +install_fail2ban() { + if dpkg -l | grep -q "^ii fail2ban"; then + echo "Fail2Ban est déjà installé." + else + echo "Installation de Fail2Ban..." + apt install -y fail2ban + fi +} + +### Fonction pour configurer les locales en français UTF-8 +configure_locales() { + echo "Configuration des locales en français UTF-8..." + apt install -y locales + + # Vérifier si fr_FR.UTF-8 est déjà activé + if locale -a | grep -q "fr_FR.utf8"; then + echo "Les locales en fr_FR.UTF-8 sont déjà activées." + else + sed -i 's/# fr_FR.UTF-8 UTF-8/fr_FR.UTF-8 UTF-8/' /etc/locale.gen + locale-gen + fi + + # Appliquer les variables locales si nécessaire + if grep -q "LANG=fr_FR.UTF-8" /etc/default/locale; then + echo "Les variables locales sont déjà configurées." + else + update-locale LANG=fr_FR.UTF-8 LANGUAGE=fr_FR.UTF-8 LC_ALL=fr_FR.UTF-8 + echo "Variables locales mises à jour." + fi +} + +### SECTION PRINCIPALE : Activer/Désactiver les options ici +update_system +install_sudo +add_admin_user +configure_ssh +install_fail2ban +configure_locales + +echo "Installation et configuration de base terminées." +echo "Vous pouvez maintenant vous connecter avec l'utilisateur : $NEW_USER" diff --git a/local/bin/ytdll b/local/bin/ytdll new file mode 100755 index 0000000..1f9bdab --- /dev/null +++ b/local/bin/ytdll @@ -0,0 +1,164 @@ +#!/usr/bin/env php + +<?php + +// Auteur : Cédrix pour a5l.fr +// Projet : scripts-bash/ytdll + +// Télécharger les pistes audios ajoutées récemment +// depuis des chaines Youtubes + +// Version 2024.07.07-14.31 +// Version initiale + +/* +Création de la base de données +Linux Debian 12 / PostGres 16 + +Suivez les instructions suivantes pour créer +votre base de données et tous les éléments +associés. + +-- Connectez-vous en tant qu'utilisateur ayant des privilèges suffisants +-- depuis le compte root +sudo su - postgres + +-- Modification du fichier pg_hba +nano /etc/postgresql/16/main/ph_hba.conf +-- modifier la ligne +local all all peer +-- avec la valeur suivante +local all all trust + +-- avec le compte root redémarrez postgres +systemctl restart postgresql + +-- Connectez-vous en tant qu'utilisateur ayant des privilèges suffisants +-- depuis le compte root +sudo su - postgres + +-- Connection au requeteur +psql + +-- Créer un nouveau role +CREATE ROLE r_ytdll WITH LOGIN PASSWORD 'changeme'; + +-- Créer la base de données +CREATE DATABASE b_ytdll OWNER r_ytdll; + +-- Connectez-vous à la base de données b_ytdll : +\c b_ytdll + +-- Créez un nouveau schéma +CREATE SCHEMA s_ytdll AUTHORIZATION r_ytdll; + + +-- Accorder tous les privilèges sur le schéma à l'utilisateur +GRANT ALL PRIVILEGES ON SCHEMA s_ytdll TO r_ytdll; + +-- Accorder des privilèges sur les tables et séquences existantes et futures +GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA s_ytdll TO r_ytdll; +GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA s_ytdll TO r_ytdll; +ALTER DEFAULT PRIVILEGES IN SCHEMA s_ytdll GRANT ALL PRIVILEGES ON TABLES TO r_ytdll; +ALTER DEFAULT PRIVILEGES IN SCHEMA s_ytdll GRANT ALL PRIVILEGES ON SEQUENCES TO r_ytdll; + +-- Schéma s_ytdll par défaut +SET search_path TO s_ytdll; +\d +ALTER ROLE r_ytdll SET search_path TO s_ytdll; +ALTER DATABASE b_ytdll SET search_path TO s_ytdll; + + +*/ + + + +// -- GESTION DES PRE REQUIS -- +// Vérifier si l'extension pgsql est chargée +if (!extension_loaded('pgsql')) { + die("L'extension PHP 'pgsql' n'est pas installée. Veuillez l'installer avant de continuer.\n"); +} + +// Chemin du HOME +$homeDir = getenv('HOME'); + +// Configuration de l'autoloader +spl_autoload_register(function ($class) use ($homeDir) { + $baseDir = $homeDir . '/.local/share/ytdll/lib/'; + $file = $baseDir . str_replace('\\', '/', $class) . '.php'; + + if (file_exists($file)) { + require $file; + } +}); + + +// -- GESTION DE LA CONFIGURATION PRIMAIRE -- + +function getUserInput($prompt) { + echo $prompt; + return trim(fgets(STDIN)); +} + +function createConfigFile($configPath, $templatePath) { + // Vérifie si le fichier de configuration existe + if (!file_exists($configPath)) { + // Copie le fichier de modèle + if (!copy($templatePath, $configPath)) { + die("Échec de la copie du fichier de configuration modèle.\n"); + } + + + // Demande à l'utilisateur de saisir les valeurs nécessaires + $databaseHost = getUserInput("Veuillez saisir le host de la base de données : "); + $databaseName = getUserInput("Veuillez saisir le nom de la base de données : "); + $databaseUser = getUserInput("Veuillez saisir l'utilisateur de la base de données : "); + $databasePassword = getUserInput("Veuillez saisir le mot de passe de la base de données : "); + + // Lit le fichier de modèle + $configContent = file_get_contents($configPath); + + // Remplace les valeurs par défaut par les valeurs saisies par l'utilisateur + $configArray = [ + 'database' => [ + 'host' => $databaseHost, + 'dbname' => $databaseName, + 'user' => $databaseUser, + 'password' => $databasePassword + ] + ]; + + // Encode en JSON + $jsonConfig = json_encode($configArray, JSON_PRETTY_PRINT); + + // Écrit le fichier de configuration JSON + file_put_contents($configPath, $jsonConfig); + + echo "Le fichier de configuration a été créé avec succès.\n"; + } +} + +// Appel de la fonction pour créer le fichier de configuration +$configPath = $homeDir . '/.config/fr.a5l.ytdll.json'; +$templatePath = $homeDir . '/.local/share/ytdll/config.php'; +createConfigFile($configPath, $templatePath); + + + + +// -- DEBUT -- +// Lit le fichier de configuration primaire +$configContent = file_get_contents($configPath); +// Décode le JSON en tableau associatif +$config = json_decode($configContent, true); +// Initialiser la connexion à la base de données +$database = new Database($config['database']); +unset($config); +// Initialiser au gestionnaire de configuration +$configManager = new Config($database); + + + +// -- GESTION DES VERSIONS de TABLE -- +$updateManager = new UpdateManager($configManager, $pdo); +$updateManager->manageVersionTables(); diff --git a/local/share/ytdll/config.json b/local/share/ytdll/config.json new file mode 100644 index 0000000..9f92bcf --- /dev/null +++ b/local/share/ytdll/config.json @@ -0,0 +1,9 @@ +{ + "database": { + "host": "changeme", + "dbname": "changeme", + "user": "changeme", + "password": "changeme" + } + +} \ No newline at end of file diff --git a/local/share/ytdll/definitionsTables.json b/local/share/ytdll/definitionsTables.json new file mode 100644 index 0000000..1824291 --- /dev/null +++ b/local/share/ytdll/definitionsTables.json @@ -0,0 +1,38 @@ +{ + "definition_number": 1, + "versions": [ + { + "version" : "2024.07.07-14.31", + "comment" : "Version initiale" + } + ], + "author": "Cédrix pour a5l.fr", + "project": "scripts-bash/ytdll", + "tables": [ + { + "name": "config", + "columns": [ + {"name": "id", "type": "SERIAL PRIMARY KEY"}, + {"name": "key", "type": "VARCHAR(255)"}, + {"name": "value", "type": "VARCHAR(255)"} + ] + }, + { + "name": "feed_metadata", + "columns": [ + {"name": "channel_id", "type": "VARCHAR(255) PRIMARY KEY"}, + {"name": "author_name", "type": "VARCHAR(255)"}, + {"name": "author_uri", "type": "VARCHAR(255)"} + ] + }, + { + "name": "entry_metadata", + "columns": [ + {"name": "video_id", "type": "VARCHAR(255) PRIMARY KEY"}, + {"name": "channel_id", "type": "VARCHAR(255)"}, + {"name": "title", "type": "VARCHAR(255)"}, + {"name": "author_name", "type": "VARCHAR(255)"} + ] + } + ] +} \ No newline at end of file diff --git a/local/share/ytdll/lib/Config.php b/local/share/ytdll/lib/Config.php new file mode 100644 index 0000000..bea3914 --- /dev/null +++ b/local/share/ytdll/lib/Config.php @@ -0,0 +1,91 @@ +<?php + +// Auteur : Cédrix pour a5l.fr +// Projet : scripts-bash/ytdll + +// Version 2024.07.07-14.31 +// Version initiale + + +class Config { + private $pdo; + private $database; + + public function __construct(Database $database) { + $this->database = $database; + $this->pdo = $this->database->getPDO(); + } + + /** + * Set or update the version in the config table. + * + * @param string $version The version to set. + * @return bool True on success, false on failure. + */ + public function setVersionDefinitionsTables($version) { + try { + $stmt = $this->pdo->prepare(" + INSERT INTO config (key, value) + VALUES ('versionDefinitionsTables', :version) + ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value + "); + $stmt->execute(['version' => $version]); + } catch (PDOException $e) { + // Log the error or handle it appropriately + error_log('Error setting version: ' . $e->getMessage()); + return false; + } + } + + /** + * Get the current version from the config table. + * + * @return string|null The current version or null if not set. + */ + public function getVersionDefinitionsTables() { + try { + + $stmt = $this->pdo->prepare("SELECT value FROM config WHERE key = 'versionDefinitionsTables'"); + $stmt->execute(); + $row = $stmt->fetch(PDO::FETCH_ASSOC); + return $row ? $row['value'] : null; + } catch (PDOException $e) { + error_log("Database error: " . $e->getMessage()); + // Return a default value or null + return null; + } + } + + + /** + * Get the current path Definitions Tables from the config table. + * + * @return string The current version or default path if not set. + */ + public function getPathDefinitionsTablesFile() { + $defaultPath = getenv('HOME') . "/.local/share/ytdll/definitionsTables.json"; + return $defaultPath; + } + + /** + * Verify database privileges by attempting to create and drop a test table. + * + * @return bool True if privileges are sufficient, false otherwise. + */ + public function verifyPrivileges() { + try { + $tableManager = new TableManager($this->database); + $tableManager->createTable('test_table', [ + ['name' => 'id', 'type' => 'SERIAL PRIMARY KEY'], + ['name' => 'name', 'type' => 'VARCHAR(255)'] + ]); + $tableManager->dropTable('test_table'); + return true; + } catch (PDOException $e) { + error_log("Erreur sur les privilèges d'accès à la base de données : " . $e->getMessage()); + return false; + } + } + + +} diff --git a/local/share/ytdll/lib/Database.php b/local/share/ytdll/lib/Database.php new file mode 100644 index 0000000..e7f6a27 --- /dev/null +++ b/local/share/ytdll/lib/Database.php @@ -0,0 +1,26 @@ +<?php +class Database { + private $pdo; + + public function __construct($config) { + $dsn = "pgsql:host={$config['host']};dbname={$config['dbname']}"; + try { + $this->pdo = new PDO($dsn, $config['user'], $config['password'], [ + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION + ]); + } catch (PDOException $e) { + die('Connection failed: ' . $e->getMessage()); + } + + } + + public function getDefaultSchema() { + $query = "SELECT current_schema()"; + $stmt = $this->pdo->query($query); + return $stmt->fetchColumn(); + } + + public function getPDO() { + return $this->pdo; + } +} diff --git a/local/share/ytdll/lib/TableManager.php b/local/share/ytdll/lib/TableManager.php new file mode 100644 index 0000000..619a9c7 --- /dev/null +++ b/local/share/ytdll/lib/TableManager.php @@ -0,0 +1,116 @@ +<?php + +// Auteur : Cédrix pour a5l.fr +// Projet : scripts-bash/ytdll + +// Version 2024.07.07-14.31 +// Version initiale + + +class TableManager { + private $pdo; + private $database; + + // SGBD PostGreSQL 16 + + public function __construct(Database $database) { + $this->database = $database; + $this->pdo = $this->database->getPDO(); + } + + public function getTableColumns($tableName) { + if (!$this->tableExists($tableName)) { + return []; // Retourne un tableau vide si la table n'existe pas + } + + $query = "SELECT column_name, data_type FROM information_schema.columns WHERE table_name = :table_name AND table_schema = :table_schema"; + $stmt = $this->pdo->prepare($query); + $stmt->execute([ + ':table_name' => $tableName + ]); + return $stmt->fetchAll(PDO::FETCH_ASSOC); + } + + private function tableExists($tableName) { + $schema = $this->database->getDefaultSchema(); + + $query = "SELECT COUNT(*) FROM information_schema.tables WHERE table_name = :table_name AND table_schema = :table_schema"; + $stmt = $this->pdo->prepare($query); + echo "Vérification de l'existence de la table : $tableName\n"; + $stmt->execute([ + ':table_name' => $tableName, + ':table_schema' => $schema + ]); + return $stmt->fetchColumn() > 0; + } + + public function processTables($tables) { + foreach ($tables as $table) { + $this->processTable($table); + } + } + + private function processTable($table) { + $tableName = $table['name']; + $columns = $table['columns']; + $existingColumns = $this->getTableColumns($tableName); + + if (empty($existingColumns) && !$this->tableExists($tableName)) { + $this->createTable($tableName, $columns); + return; + } + + $existingColumnsMap = []; + foreach ($existingColumns as $column) { + $existingColumnsMap[$column['column_name']] = $column['data_type']; + } + + foreach ($columns as $column) { + $columnName = $column['name']; + $columnType = $column['type']; + + if (isset($existingColumnsMap[$columnName])) { + if ($existingColumnsMap[$columnName] !== $columnType) { + $this->alterColumnType($tableName, $columnName, $columnType); + } + unset($existingColumnsMap[$columnName]); + } else { + $this->addColumn($tableName, $columnName, $columnType); + } + } + + foreach ($existingColumnsMap as $columnName => $columnType) { + $this->dropColumn($tableName, $columnName); + } + } + + public function createTable($tableName, $columns) { + $columnsSql = []; + foreach ($columns as $column) { + $columnsSql[] = "{$column['name']} {$column['type']}"; + } + $columnsSql = implode(", ", $columnsSql); + $sql = "CREATE TABLE $tableName ($columnsSql)"; + $this->pdo->exec($sql); + } + + public function dropTable($tableName) { + $sql = "DROP TABLE IF EXISTS $tableName"; + $this->pdo->exec($sql); + } + + private function alterColumnType($tableName, $columnName, $columnType) { + $sql = "ALTER TABLE $tableName ALTER COLUMN $columnName TYPE $columnType USING $columnName::$columnType"; + $this->pdo->exec($sql); + } + + private function addColumn($tableName, $columnName, $columnType) { + $sql = "ALTER TABLE $tableName ADD COLUMN $columnName $columnType"; + $this->pdo->exec($sql); + } + + private function dropColumn($tableName, $columnName) { + $sql = "ALTER TABLE $tableName DROP COLUMN $columnName"; + $this->pdo->exec($sql); + } +} diff --git a/local/share/ytdll/lib/UpdateManager.php b/local/share/ytdll/lib/UpdateManager.php new file mode 100644 index 0000000..4d589bc --- /dev/null +++ b/local/share/ytdll/lib/UpdateManager.php @@ -0,0 +1,48 @@ +<?PHP + +// Auteur : Cédrix pour a5l.fr +// Projet : scripts-bash/ytdll + +// Version 2024.07.07-14.31 +// Version initiale + +class UpdateManager { + private $pdo; + private $database; + + public function __construct($database) { + $this->database = $database; + $this->pdo = $this->database->getPDO(); + + } + + public function manageVersionTables() { + $configManager = new Config($this->database); + // Obtenir le numéro de version dans le fichier de définitions de table + $definitionsTablesFile = json_decode(file_get_contents($configManager->getPathDefinitionsTablesFile()), true); + $newDefinitionNumber = $definitionsTablesFile['definition_number']; + + // Obtenir le numéro de version des Tables en base + $currentDefinitionNumber = $configManager->getVersionDefinitionsTables(); + + if ($currentDefinitionNumber !== null) { + echo 'Version not set or an error occurred.'; + $currentDefinitionNumber = 0; + } + + $tables = $definitionsTablesFile['tables']; + + if ($newDefinitionNumber > $currentDefinitionNumber) { + $tableManager = new TableManager($this->database); + $tableManager->processTables($tables); + $configManager->setVersionDefinitionsTables($newDefinitionNumber); + if ($currentDefinitionNumber == 0) { + echo "Tables created successfully."; + } else { + echo "Tables updated successfully from $currentDefinitionNumber to $newDefinitionNumber."; + } + + } + } +} + diff --git a/prep.sh b/prep.sh index 21d7595..de30408 100755 --- a/prep.sh +++ b/prep.sh @@ -5,6 +5,9 @@ # Description : Prépare les fichiers de DOC et listing. +# Version 07.07.24 +# - Ajout du traitement de ytdll + # Version 23.12.14 # - Modification du traitement des résumés des DOC. La fonctionnalité n'est pas encore accessible. @@ -48,6 +51,7 @@ ls local/bin/ -c1 >.config/files_local-bin # 1. Lister des fichiers dans local/share/doc # 2. Générer les fichiers man dans local/share/man # 3. Lister des fichiers dans local/share/man +# 4. Lister des fichiers dans local/share/ytdll et share/ytdll/lib # Spécifier le chemin du répertoire du dépôt Git local source_dir="local/share/doc" @@ -113,7 +117,11 @@ fi log "Lister les fichiers présents dans local/share/man" ls local/share/man/ -c1 >.config/files_local-share-man +log "Lister les fichiers présents dans local/share/ytdll" +ls local/share/ytdll/ -c1 >.config/files_local-share-ytdll +log "Lister les fichiers présents dans local/share/ytdll/lib" +ls local/share/ytdll/lib/ -c1 >.config/files_local-share-ytdll-lib ######## # Résumé des DOC