Compare commits
2 Commits
615e9595cf
...
2629dd832c
Author | SHA1 | Date |
---|---|---|
|
2629dd832c | |
|
2ceb4be24f |
|
@ -1,3 +1,4 @@
|
||||||
|
ytdll
|
||||||
updateall.sh
|
updateall.sh
|
||||||
update_bullseye2buster.sh
|
update_bullseye2buster.sh
|
||||||
check_sha256.sh
|
check_sha256.sh
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
definitionsTables.json
|
||||||
|
lib
|
||||||
|
config.json
|
|
@ -0,0 +1,4 @@
|
||||||
|
UpdateManager.php
|
||||||
|
Config.php
|
||||||
|
TableManager.php
|
||||||
|
Database.php
|
42
install.sh
42
install.sh
|
@ -5,6 +5,9 @@
|
||||||
|
|
||||||
# Description : Script d'installation des exécutables dans le répertoire '~/.local'"
|
# 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
|
# Version 23.12.1.3
|
||||||
# - Amélioration des logs
|
# - Amélioration des logs
|
||||||
# - process_deployment_files optmisie les opérations de déployement
|
# - 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 ####
|
#### .local/share/doc ####
|
||||||
|
|
||||||
## Declarations ##
|
## Declarations ##
|
||||||
|
|
|
@ -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"
|
|
@ -91,12 +91,13 @@ get_os_release() {
|
||||||
|
|
||||||
update_machine () {
|
update_machine () {
|
||||||
local machine="$1"
|
local machine="$1"
|
||||||
echo -n " - Détection du gestionnaire de mise à jour ... "
|
|
||||||
|
|
||||||
# recupérer le nom de l'OS
|
# recupérer le nom de l'OS
|
||||||
os_name=$(get_os_release "$machine")
|
os_name=$(get_os_release "$machine")
|
||||||
echo -n " - Système d'exploitation : ${GREEN}$os_name${NC}"
|
echo -e " - Système d'exploitation : ${GREEN}$os_name${NC}"
|
||||||
|
|
||||||
|
echo -n " - Détection du gestionnaire de mise à jour ... "
|
||||||
|
|
||||||
if timeout 5 ssh "$machine" which apt > /dev/null 2>&1; then
|
if timeout 5 ssh "$machine" which apt > /dev/null 2>&1; then
|
||||||
echo -e "${GREEN}apt${NC}"
|
echo -e "${GREEN}apt${NC}"
|
||||||
update_with_apt "$machine"
|
update_with_apt "$machine"
|
||||||
|
|
|
@ -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();
|
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"database": {
|
||||||
|
"host": "changeme",
|
||||||
|
"dbname": "changeme",
|
||||||
|
"user": "changeme",
|
||||||
|
"password": "changeme"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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)"}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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.";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
8
prep.sh
8
prep.sh
|
@ -5,6 +5,9 @@
|
||||||
|
|
||||||
# Description : Prépare les fichiers de DOC et listing.
|
# Description : Prépare les fichiers de DOC et listing.
|
||||||
|
|
||||||
|
# Version 07.07.24
|
||||||
|
# - Ajout du traitement de ytdll
|
||||||
|
|
||||||
# Version 23.12.14
|
# Version 23.12.14
|
||||||
# - Modification du traitement des résumés des DOC. La fonctionnalité n'est pas encore accessible.
|
# - 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
|
# 1. Lister des fichiers dans local/share/doc
|
||||||
# 2. Générer les fichiers man dans local/share/man
|
# 2. Générer les fichiers man dans local/share/man
|
||||||
# 3. Lister des fichiers 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
|
# Spécifier le chemin du répertoire du dépôt Git local
|
||||||
source_dir="local/share/doc"
|
source_dir="local/share/doc"
|
||||||
|
@ -113,7 +117,11 @@ fi
|
||||||
log "Lister les fichiers présents dans local/share/man"
|
log "Lister les fichiers présents dans local/share/man"
|
||||||
ls local/share/man/ -c1 >.config/files_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
|
# Résumé des DOC
|
||||||
|
|
Loading…
Reference in New Issue