131 lines
5.1 KiB
Python
131 lines
5.1 KiB
Python
#!/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/ogrepository/images' # En este caso, no lleva barra final
|
|
|
|
|
|
# --------------------------------------------------------------------------------------------
|
|
# 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".split(), check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
except Exception as error_description:
|
|
print(f"No btlaunchmany.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()
|
|
|
|
# --------------------------------------------------------------------------------------------
|