Outils pour utilisateurs

Outils du site


py-kms

Ceci est une ancienne révision du document !


py-kms

Introduction

py-kms est un ensemble de script python qui permet d'activer les copies des produits Microsoft licenciés avec une clé GVLK ou KMS. L'avantage apr rapport au produit officiel de Microsoft et la possibilité de l'utiliser sans connexion internet Le produit est disponible grâce à l'excellent travail de SystemRage sur github : https://github.com/SystemRage/py-kms Les clés produit nécessaires à la bonne activation sont disponibles sur le site de Microsoft :

Pré-requis

Pour ce cas, l'installation se fera sur une VM ubuntu 20.04 (focal) avec un accès au réseau local

  • Un serveur linux avec un réseau fonctionnel et connecté à internet
  • python3 (de préférence)
  • git

Déploiement

Dans un premier temps, il faut installer les dépendances nécessaires dans l'OS :

$ sudo apt update

for python3

$ sudo apt install python3-tk python3-pip -y
$ sudo pip3 install tzlocal pysqlite3

Ensuite on clone le repository

$ cd /usr/local/bin/
$ sudo git clone https://github.com/SystemRage/py-kms.git 

On enlève tout ce qui n'est pas utile

$ cd py-kms/
$ sudo mv py-kms/ py-kms_git
$ sudo mv py-kms_git/py-kms/ .
$ sudo rm -r py-kms_git/

On crée le fichier log du futur service

$ sudo mkdir /var/log/py-kms
$ sudo touch /var/log/py-kms/server.log
$ sudo chown myuser /var/log/py-kms/server.log

On lance le serveur pour vérifier que tout fonctionne

$ sudo ./pykms_Server.py -V INFO -F /var/log/py-kms/server.log &
$ more /var/log/py-kms/server.log 
Tue, 26 May 2020 15:42:55 INFO     TCP server listening at 0.0.0.0 on port 1688.
Tue, 26 May 2020 15:42:55 INFO     HWID: 364F463A8863D35F

A ce stade le service est opérationnel. Le port 1688 est en écoute sur toutes les interfaces. Pour tester le fonctionnement, py-kms propose un faux client en python qui va simuler une demande d'activation

$ sudo python3 ./pykms_Client.py

La sortie ressemblera à ça :

			Client generating RPC Bind Request...
Server receiving
<===============	Client sending RPC Bind Request...

								Client sending
Server received RPC Bind Request !!!				<===============
Server parsing RPC Bind Request...
Server generating RPC Bind Response...

								Client receiving
Server sending RPC Bind Response...				===============>
RPC Bind acknowledged !!!
Server sending
===============>	Client received RPC Bind Response !!!
			RPC Bind acknowledged !!!
			Client generating Activation Request dictionary...
			Client generating Activation Request data...
			Client generating RPC Activation Request...
Server receiving
<===============	Client sending RPC Activation Request...  

								Client sending
Server received RPC Activation Request !!!			<===============
Server parsing RPC Activation Request...
Server processing KMS Activation Request...
Server processing KMS Activation Response...
Server generating RPC Activation Response...

							Client receiving
Server sending RPC Activation Response...			===============>
Server responded, now in Stand by...
Server sending
===============>	Client received Response !!!
		Activation Done !!!

Le Log doit montrer le nom de la machine ainsi que le type de produit (Windows ou Office)

$ egrep "Machine|Application" /var/log/py-kms/server.log 
Tue, 26 May 2020 15:47:54 INFO     Machine Name: y88VjrtQ5iv7AN8vfNlRszGXaq9BAFMnevqF7CxxYEglLdeayh
Tue, 26 May 2020 15:47:54 INFO     Client Machine ID: d53cf644-e1a0-4f1e-9466-22f896963fc3
Tue, 26 May 2020 15:47:54 INFO     Application ID: Windows

Bonus

Création d'un service systemd

Afin d'utiliser ce serveur KMS comme un service, il faut créer le fichier service et le déclarer

$ sudo nano /etc/systemd/system/py-kms.service

Copier le contenu du service dans le fichier (en changeant la variable User par votre utilisateur)

[Unit]
Description=py-kms service
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=myuser
ExecStart=python3 /usr/local/bin/py-kms/pykms_Server.py -V INFO -F /var/log/py-kms/server.log
[Install]
WantedBy=multi-user.target

Lancer le service

$ systemctl start py-kms

Vérifier l'état du service

$ systemctl status py-kms

Exemple de sortie montrant le service up and running

● py-kms.service - py-kms service
   Loaded: loaded (/etc/systemd/system/py-kms.service; disabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-05-26 16:10:47 UTC; 6s ago
 Main PID: 19190 (python3)
    Tasks: 3 (limit: 2283)
   Memory: 11.2M
   CGroup: /system.slice/py-kms.service
           └─19190 /usr/bin/python3 /usr/local/bin/py-kms/pykms_Server.py -V INFO -F /var/log/py-km>
May 26 16:10:47 samba4 systemd[1]: Started py-kms service.

Lancer le service au démarrage du serveur

$ systemctl enable py-kms

Troubleshooting

Impossible de lancer le service

  1. Vérifier les droits sur le fichier log (l'utilisateur qui lance pykms_Server.py doit être propriétaire du fichier)
  2. Vérifier qu'un autre service n'écoute pas sur le port 1688
$ sudo netatst -tulpn | grep 1688
tcp        0      0 0.0.0.0:1688            0.0.0.0:*               LISTEN      19190/python3 
  • Si c'est le cas, terminer la tâche qui écoute sur ce port au moyen de son ID (19190 pour cet exemple)
$ sudo kill -9 19190

* Relancez le service

$ systemctl start py-kms

Online installer

Vous povez installer le serveur KMS en copiant la commande ci-dessous. Elle est exactement basée sur le script présent en bas de cette page

| kms-oneline-installer.sh
wget -O py-kms-installer.sh "https://wiki.loumy.fr/doku.php?do=export_code&id=py-kms&codeblock=1" && sudo bash ./py-kms-installer.sh

Introduction

Basé sur les commandes ci-dessus, vous pouvez copier et exécuter le contenu de ce script dans un fichier pour l'installer en une fois (sudo ./py-kms-installer.sh par exemple):

py-kms-installer.sh
#!/usr/bin/bash
# py-kms installer from git repository
# V 0.2 26.05.20 arnaud@loumy.ch
 
FOLDER_INSTALL='/usr/local/bin/py-kms'
FOLDER_LOG='/var/log/py-kms'
 
sudo apt update
sudo apt install python3-tk python3-pip libsqlite3-dev -y
sudo pip3 install tzlocal pysqlite3
 
sudo mkdir $FOLDER_INSTALL
sudo mkdir $FOLDER_LOG
 
sudo git clone https://github.com/SystemRage/py-kms.git $FOLDER_INSTALL/
sudo mv $FOLDER_INSTALL/ $FOLDER_INSTALL.ori/
sudo mv $FOLDER_INSTALL.ori/py-kms/ $FOLDER_INSTALL/
sudo rm -r $FOLDER_INSTALL.ori/
sudo touch $FOLDER_LOG/server.log
sudo chown $USER $FOLDER_LOG/server.log
 
sudo touch /etc/systemd/system/py-kms.service
sudo echo "[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" > /etc/systemd/system/py-kms.service
 
sudo systemctl enable py-kms
sudo systemctl start py-kms
sudo systemctl status py-kms

Offline installer

Transfert du package

Transférez le dossier py-kms-offline-package ou l'archive py-kms-offline-package.tar.gz sur la machine de destination via une clé USB ou un autre moyen.

py-kms-offline-package.tar.gz

One line pour la creation de l'archive

| py-kms-offline-archive-creator.sh
wget -O py-kms-offline-archive-creator.sh "https://wiki.loumy.fr/doku.php?do=export_code&id=py-kms&codeblock=2" && sudo bash ./py-kms-offline-archive-creator.sh

Extraction

tar -xzvf py-kms-offline-package.tar.gz

Exécution du script d'installation

cd py-kms-offline-package
sudo ./py-kms-offline-installer.sh

Vérification de l'installation

sudo systemctl status py-kms

Résolution des problèmes courants

Dépendances manquantes

Si vous rencontrez des erreurs liées à des dépendances manquantes, vous devrez peut-être inclure plus de paquets dans votre package hors ligne. Vérifiez les messages d'erreur et ajoutez les paquets nécessaires.

Erreurs de permission

Assurez-vous que tous les scripts ont les permissions d'exécution:

chmod +x py-kms-offline-installer.sh

Erreurs de service

Si le service ne démarre pas, consultez les logs:

tail -f /var/log/py-kms/server.log

Creation du package offline

py-kms-offline-archive-creator.sh
#!/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"
py-kms.1746180685.txt.gz · Dernière modification : de inc002