#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Este script inicia el seeder "bittornado" (o lo reinicia, si ya estuviera iniciado), finalizando previamente cualquier proceso activo. En principio, debería hacer lo mismo que la sección correspondiente del script "/etc/init.d/opengnsys", que se ejecuta al inicio (pero que debería dejar de hacerlo). Creemos que debe ser llamado únicamente cuando se quiera hacer una descarga mediante P2P (junto al script "runTorrentTracker.py"). NOTA: El paquete no hace una búsqueda recursiva, por lo que se debe especificar el subdirectorio correspondiente a la OU, si es el caso. Parámetros ------------ sys.argv[1] - Subdirectorio correspondiente a la OU (o "none" si no es el caso). - Ejemplo1: none - Ejemplo2: ou_subdir Sintaxis ---------- ./runTorrentSeeder.py none|ou_subdir Ejemplos --------- ./runTorrentSeeder.py none ./runTorrentSeeder.py ou_subdir """ # -------------------------------------------------------------------------------------------- # IMPORTS # -------------------------------------------------------------------------------------------- import os import sys import subprocess # -------------------------------------------------------------------------------------------- # VARIABLES # -------------------------------------------------------------------------------------------- script_name = os.path.basename(__file__) repo_path = '/opt/opengnsys/images' # -------------------------------------------------------------------------------------------- # FUNCTIONS # -------------------------------------------------------------------------------------------- def show_help(): """ Imprime la ayuda, cuando se ejecuta el script con el parámetro "help". """ help_text = f""" Sintaxis: {script_name} none|ou_subdir Ejemplo1: {script_name} none Ejemplo2: {script_name} ou_subdir """ print(help_text) def check_params(): """ Comprueba que se haya enviado la cantidad correcta de parámetros, y en el formato correcto. Si no es así, muestra un mensaje de error, y sale del script. LLama a la función "show_help" cuando se ejecuta el script con el parámetro "help". """ # Si se ejecuta el script con el parámetro "help", se muestra la ayuda, y se sale del script: if len(sys.argv) == 2 and sys.argv[1] == "help": show_help() sys.exit(0) # Si se ejecuta el script con más o menos de 1 parámetro, se muestra un error y la ayuda, y se sale del script: elif len(sys.argv) != 2: print(f"{script_name} Error: Formato incorrecto: Se debe especificar 1 parámetro") show_help() sys.exit(1) def run_bittornado(torrent_path): """ Ejecuta el comando "btlaunchmany.bittornado", con sus parámetros correspondientes. Además, captura el resultado y los posibles errores, y los imprime. """ # Creamos una lista con el comando "btlaunchmany.bittornado" y sus parámetros, y lo imprimimos con espacios: splitted_cmd = f"btlaunchmany.bittornado {torrent_path}".split() print(f"Sending command: {' '.join(splitted_cmd)}") # Ejecutamos el comando "btlaunchmany.bittornado" en el sistema, e imprimimos el resultado: try: result = subprocess.run(splitted_cmd, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) print(f"Bittornado ReturnCode: {result.returncode}") except subprocess.CalledProcessError as error: print(f"Bittornado ReturnCode: {error.returncode}") print(f"Bittornado Error Output: {error.stderr.decode()}") except Exception as error: print(f"Unexpected bittornado error: {error}") # -------------------------------------------------------------------------------------------- # MAIN # -------------------------------------------------------------------------------------------- def main(): """ """ # Evaluamos si se ha enviado la cantidad correcta de parámetros, y en el formato correcto: check_params() # Finalizamos el proceso "btlaunchmany.bittornado" (en caso de que estuviera corriendo): try: subprocess.run(f"pkill btlaunchmany.bittornado".split(), check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) except Exception as error_description: print(f"No bittornado process running? Returned error: {error_description}") # Construimos la ruta en la que buscar los torrents, en base al parámetro especificado: if sys.argv[1] == 'none': torrent_path = repo_path else: torrent_path = f"{repo_path}/{sys.argv[1]}" # Ejecutamos el comando "btlaunchmany.bittornado" (para hacer seed de los torrents): run_bittornado(torrent_path) # -------------------------------------------------------------------------------------------- if __name__ == "__main__": main() # --------------------------------------------------------------------------------------------