#!/usr/bin/bash # Script pour créer un package d'installation hors ligne de py-kms # V 1.0 02.05.25 # Vérifier que le script est exécuté avec les privilèges root if [ "$(id -u)" -ne 0 ]; then echo "Ce script doit être exécuté en tant que root" exit 1 fi # Définir le répertoire de travail WORK_DIR="py-kms-offline-package" TIMESTAMP=$(date +"%Y%m%d-%H%M%S") ARCHIVE_NAME="py-kms-offline-package-${TIMESTAMP}.tar.gz" echo "Création du package hors ligne py-kms..." echo "-------------------------------------" # Créer la structure de dossiers echo "Création de la structure de dossiers..." mkdir -p ${WORK_DIR}/debs mkdir -p ${WORK_DIR}/pip mkdir -p ${WORK_DIR}/py-kms # Mettre à jour la liste des paquets echo "Mise à jour des informations de paquets..." apt-get update # Télécharger les paquets principaux et leurs dépendances echo "Téléchargement des paquets Debian et leurs dépendances..." MAIN_PACKAGES="python3-tk python3-pip libsqlite3-dev" # Télécharger les paquets principaux et leurs dépendances récursivement apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests \ --no-conflicts --no-breaks --no-replaces --no-enhances \ --no-pre-depends ${MAIN_PACKAGES} | grep "^\w" | sort -u) # Déplacer tous les fichiers .deb dans le dossier debs mv *.deb ${WORK_DIR}/debs/ # Télécharger les paquets Python echo "Téléchargement des paquets Python..." pip3 download tzlocal pysqlite3 --dest ${WORK_DIR}/pip # Cloner le dépôt py-kms echo "Clonage du dépôt py-kms..." git clone https://github.com/SystemRage/py-kms.git temp-py-kms cp -r temp-py-kms/py-kms/* ${WORK_DIR}/py-kms/ rm -rf temp-py-kms # Appliquer la correction pour Python 3.10 echo "Application de la correction pour Python 3.10..." sed -i 's/from collections import Sequence/from collections.abc import Sequence/' ${WORK_DIR}/py-kms/Etrigan.py echo "Correction appliquée dans le package offline." # Créer le script d'installation echo "Création du script d'installation hors ligne..." cat > ${WORK_DIR}/py-kms-offline-installer.sh << 'EOL' #!/usr/bin/bash # py-kms offline installer # V 1.2 02.05.25 # Définition des dossiers FOLDER_INSTALL='/usr/local/bin/py-kms' FOLDER_LOG='/var/log/py-kms' OFFLINE_PACKAGE="." # Utilise le répertoire courant # Vérification des sous-dossiers nécessaires if [ ! -d "$OFFLINE_PACKAGE/debs" ] || [ ! -d "$OFFLINE_PACKAGE/pip" ] || [ ! -d "$OFFLINE_PACKAGE/py-kms" ]; then echo "Erreur: Un ou plusieurs dossiers requis n'existent pas." echo "Vérifiez que vous avez bien les dossiers:" echo "- debs" echo "- pip" echo "- py-kms" echo "dans le répertoire courant." exit 1 fi echo "Installation des paquets .deb depuis les fichiers locaux..." sudo dpkg -i $OFFLINE_PACKAGE/debs/*.deb || true echo "Correction des dépendances (si possible avec les paquets existants)..." sudo apt-get -f install --no-download -y || true echo "Installation des paquets Python depuis les fichiers locaux..." sudo pip3 install --no-index --find-links=$OFFLINE_PACKAGE/pip tzlocal pysqlite3 echo "Création des dossiers d'installation et de logs..." sudo mkdir -p $FOLDER_INSTALL sudo mkdir -p $FOLDER_LOG echo "Copie des fichiers py-kms depuis le package offline..." sudo cp -r $OFFLINE_PACKAGE/py-kms/* $FOLDER_INSTALL/ sudo touch $FOLDER_LOG/server.log sudo chown $USER $FOLDER_LOG/server.log # Vérification si systemd est disponible if pidof systemd > /dev/null 2>&1; then echo "Configuration du service systemd..." sudo touch /etc/systemd/system/py-kms.service sudo bash -c "cat > /etc/systemd/system/py-kms.service << EOF [Unit] Description=py-kms service After=network.target StartLimitIntervalSec=0 [Service] Type=simple Restart=always RestartSec=1 User=$USER ExecStart=python3 $FOLDER_INSTALL/pykms_Server.py -V INFO -F $FOLDER_LOG/server.log [Install] WantedBy=multi-user.target EOF" echo "Activation et démarrage du service py-kms via systemd..." sudo systemctl enable py-kms sudo systemctl start py-kms sudo systemctl status py-kms else echo "Systemd n'est pas disponible sur ce système." echo "Création d'un script de démarrage alternatif..." sudo bash -c "cat > $FOLDER_INSTALL/start-pykms.sh << EOF #!/bin/bash python3 $FOLDER_INSTALL/pykms_Server.py -V INFO -F $FOLDER_LOG/server.log EOF" sudo chmod +x $FOLDER_INSTALL/start-pykms.sh echo "Pour démarrer le serveur py-kms manuellement, exécutez:" echo " $FOLDER_INSTALL/start-pykms.sh &" echo "" echo "Voulez-vous démarrer le serveur maintenant? (o/n)" read -r response if [[ "$response" =~ ^([oO][uU][iI]|[oO])$ ]]; then echo "Démarrage du serveur py-kms..." sudo -u $USER $FOLDER_INSTALL/start-pykms.sh & echo "Serveur démarré avec PID: $!" fi fi echo "Installation terminée avec succès!" EOL # Rendre le script exécutable chmod +x ${WORK_DIR}/py-kms-offline-installer.sh # Créer également un fichier README cat > ${WORK_DIR}/README.txt << 'EOL' # Package d'installation hors ligne de py-kms Ce package contient tous les fichiers nécessaires pour installer py-kms sans connexion Internet. ## Contenu du package - debs/ : Contient les paquets Debian et leurs dépendances - pip/ : Contient les modules Python nécessaires - py-kms/ : Contient les fichiers source de py-kms ## Instructions d'installation 1. Décompressez ce package sur la machine cible 2. Accédez au répertoire décompressé 3. Exécutez le script d'installation : sudo ./py-kms-offline-installer.sh ## Remarques importantes - Le script tente d'installer le service via systemd. Si systemd n'est pas disponible (ex. dans Docker ou WSL), un script de démarrage alternatif sera créé. - Après l'installation, le serveur py-kms écoute sur le port 1688 par défaut. - Les logs sont stockés dans /var/log/py-kms/server.log EOL # Créer l'archive echo "Création de l'archive ${ARCHIVE_NAME}..." tar -czvf ${ARCHIVE_NAME} ${WORK_DIR}/ echo "-------------------------------------" echo "Package hors ligne py-kms créé avec succès!" echo "L'archive est disponible à l'emplacement: $(pwd)/${ARCHIVE_NAME}" echo "Pour l'installer sur une machine sans connexion Internet:" echo "1. Transférez l'archive sur la machine cible" echo "2. Décompressez avec: tar -xzvf ${ARCHIVE_NAME}" echo "3. Accédez au répertoire: cd ${WORK_DIR}" echo "4. Exécutez: sudo ./py-kms-offline-installer.sh"