refs #1101 add ogCreateTorrent()
parent
40f31f784c
commit
29f91cc00f
|
@ -11,6 +11,7 @@ import DiskLib
|
|||
import FileSystemLib
|
||||
import SystemLib
|
||||
import ogGlobals
|
||||
import FileLib
|
||||
|
||||
## ProtocolLib.ogUcastSyntax() calls ogCreateImageSyntax()
|
||||
## in ogCreateImageSyntax(), param2 may contain a pipe or may be empty
|
||||
|
@ -174,6 +175,185 @@ def ogRestoreImageSyntax (imgfile, part, tool=None, level=None):
|
|||
return f'{compressor} {imgfile} {mbuffer} {tool}'.strip()
|
||||
|
||||
|
||||
|
||||
|
||||
#/**
|
||||
# ogCreateDiskImage int_ndisk str_repo path_image [str_tools] [str_compressionlevel]
|
||||
#@brief Crea una imagen (copia de seguridad) de un disco completo.
|
||||
#@param int_ndisk nº de orden del disco
|
||||
#@param str_repo repositorio de imágenes (remoto o caché local)
|
||||
#@param path_image camino de la imagen (sin extensión)
|
||||
#@return (nada, por determinar)
|
||||
#@note repo = { REPO, CACHE }
|
||||
#@note Esta primera versión crea imágenes con dd comprimidas con gzip.
|
||||
#@exception OG_ERR_FORMAT formato incorrecto.
|
||||
#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado.
|
||||
#@exception OG_ERR_LOCKED particion bloqueada por otra operación.
|
||||
#@exception OG_ERR_IMAGE error al crear la imagen del sistema.
|
||||
#@warning En pruebas iniciales
|
||||
#@todo Gestión de bloqueos de disco
|
||||
#@todo Comprobar si debe desmontarse la caché local
|
||||
#@todo Comprobar que no se crea la imagen en el propio disco
|
||||
#*/ ##
|
||||
|
||||
|
||||
#/**
|
||||
# ogCreateImage int_ndisk int_npartition str_repo path_image [str_tools] [str_compressionlevel]
|
||||
#@brief Crea una imagen a partir de una partición.
|
||||
#@param int_ndisk nº de orden del disco
|
||||
#@param int_npartition nº de orden de la partición
|
||||
#@param str_repo repositorio de imágenes (remoto o caché local)
|
||||
#@param path_image camino de la imagen (sin extensión)
|
||||
#@param [opcional] str_tools herrmaienta de clonacion [partimage, partclone, ntfsclone]
|
||||
#@param [opcional] str_compressionlevel nivel de compresion. [0 -none-, 1-lzop-, 2-gzip]
|
||||
#@return (nada, por determinar)
|
||||
#@note repo = { REPO, CACHE }
|
||||
#@exception OG_ERR_FORMAT formato incorrecto.
|
||||
#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado.
|
||||
#@exception OG_ERR_PARTITION partición no accesible o no soportada.
|
||||
#@exception OG_ERR_LOCKED particion bloqueada por otra operación.
|
||||
#@exception OG_ERR_IMAGE error al crear la imagen del sistema.
|
||||
#@todo Comprobaciones, control de errores, definir parámetros, etc.
|
||||
#*/ ##
|
||||
|
||||
|
||||
#/**
|
||||
# ogCreateMbrImage int_ndisk str_repo path_image
|
||||
#@brief Crea una imagen a partir del sector de arranque de un disco.
|
||||
#@param int_ndisk nº de orden del disco
|
||||
#@param str_repo repositorio de imágenes (remoto o caché local)
|
||||
#@param path_image camino de la imagen (sin extensión)
|
||||
#@return (nada, por determinar)
|
||||
#@note repo = { REPO, CACHE }
|
||||
#@exception OG_ERR_FORMAT formato incorrecto.
|
||||
#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado.
|
||||
#@exception OG_ERR_IMAGE error al crear la imagen del sistema.
|
||||
#*/ ##
|
||||
|
||||
|
||||
#/**
|
||||
# ogCreateBootLoaderImage int_ndisk str_repo path_image
|
||||
#@brief Crea una imagen del boot loader a partir del sector de arranque de un disco.
|
||||
#@param int_ndisk nº de orden del disco
|
||||
#@param str_repo repositorio de imágenes (remoto o caché local)
|
||||
#@param path_image camino de la imagen (sin extensión)
|
||||
#@return (nada, por determinar)
|
||||
#@note repo = { REPO, CACHE }
|
||||
#@exception OG_ERR_FORMAT formato incorrecto.
|
||||
#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado.
|
||||
#@exception OG_ERR_IMAGE error al crear la imagen del sistema.
|
||||
#*/ ##
|
||||
|
||||
#/**
|
||||
# ogGetSizeParameters int_num_disk int_num_part str_repo [monolit|sync|diff]
|
||||
#@brief Devuelve el tamaño de los datos de un sistema de ficheros, el espacio necesario para la imagen y si cabe en el repositorio elegido.
|
||||
#@param int_disk numero de disco
|
||||
#@param int_part numero de particion
|
||||
#@param str_repo repositorio de imágenes { REPO, CACHE }
|
||||
#@param str_imageName Nombre de la imagen
|
||||
#@param str_imageType Tipo de imagen: monolit (por defecto), sync o diff. (parametro opcional)
|
||||
#@return SIZEDATA SIZEREQUIRED SIZEFREE ISENOUGHSPACE
|
||||
#@note si str_imageType= diff necesario /tmp/ogimg.info, que es creado por ogCreateInfoImage.
|
||||
#@note para el tamaño de la imagen no sigue enlaces simbólicos.
|
||||
#@exception OG_ERR_FORMAT formato incorrecto.
|
||||
#*/ ##
|
||||
|
||||
#/**
|
||||
# ogIsImageLocked [str_repo] path_image
|
||||
#@brief Comprueba si una imagen está bloqueada para uso exclusivo.
|
||||
#@param str_repo repositorio de imágenes (opcional)
|
||||
#@param path_image camino de la imagen (sin extensión)
|
||||
#@return Código de salida: 0 - bloqueado, 1 - sin bloquear o error.
|
||||
#@note repo = { REPO, CACHE }
|
||||
#@exception OG_ERR_FORMAT formato incorrecto.
|
||||
#*/ ##
|
||||
|
||||
|
||||
#/**
|
||||
# ogLockImage [str_repo] path_image
|
||||
#@brief Bloquea una imagen para uso exclusivo.
|
||||
#@param str_repo repositorio de imágenes (opcional)
|
||||
#@param path_image camino de la imagen (sin extensión)
|
||||
#@return Nada.
|
||||
#@note Se genera un fichero con extensión .lock
|
||||
#@note repo = { REPO, CACHE }
|
||||
#@exception OG_ERR_FORMAT formato incorrecto.
|
||||
#*/ ##
|
||||
|
||||
|
||||
#/**
|
||||
# ogRestoreDiskImage str_repo path_image int_npartition
|
||||
#@brief Restaura (recupera) una imagen de un disco completo.
|
||||
#@param str_repo repositorio de imágenes o caché local
|
||||
#@param path_image camino de la imagen
|
||||
#@param int_ndisk nº de orden del disco
|
||||
#@return (por determinar)
|
||||
#@warning Primera versión en pruebas
|
||||
#@todo Gestionar bloqueos de disco
|
||||
#@todo Comprobar que no se intenta restaurar de la caché sobre el mismo disco
|
||||
#@exception OG_ERR_FORMAT formato incorrecto.
|
||||
#@exception OG_ERR_NOTFOUND fichero de imagen o partición no detectados.
|
||||
#@exception OG_ERR_LOCKED partición bloqueada por otra operación.
|
||||
#@exception OG_ERR_IMAGE error al restaurar la imagen del sistema.
|
||||
#@exception OG_ERR_IMGSIZEPARTITION Tamaño de la particion es menor al tamaño de la imagen.
|
||||
#*/ ##
|
||||
|
||||
|
||||
#/**
|
||||
# ogRestoreImage str_repo path_image int_ndisk int_npartition
|
||||
#@brief Restaura una imagen de sistema de archivos en una partición.
|
||||
#@param str_repo repositorio de imágenes o caché local
|
||||
#@param path_image camino de la imagen
|
||||
#@param int_ndisk nº de orden del disco
|
||||
#@param int_npartition nº de orden de la partición
|
||||
#@return (por determinar)
|
||||
#@exception OG_ERR_FORMAT 1 formato incorrecto.
|
||||
#@exception OG_ERR_NOTFOUND 2 fichero de imagen o partición no detectados.
|
||||
#@exception OG_ERR_PARTITION 3 # Error en partición de disco.
|
||||
#@exception OG_ERR_LOCKED 4 partición bloqueada por otra operación.
|
||||
#@exception OG_ERR_IMAGE 5 error al restaurar la imagen del sistema.
|
||||
#@exception OG_ERR_IMGSIZEPARTITION 30 Tamaño de la particion es menor al tamaño de la imagen.
|
||||
#@todo Comprobar incongruencias partición-imagen, control de errores, definir parámetros, caché/repositorio, etc.
|
||||
#*/ ##
|
||||
|
||||
|
||||
#/**
|
||||
# ogRestoreMbrImage str_repo path_image int_ndisk
|
||||
#@brief Restaura la imagen del sector de arranque de un disco.
|
||||
#@param str_repo repositorio de imágenes o caché local
|
||||
#@param path_image camino de la imagen
|
||||
#@param int_ndisk nº de orden del disco
|
||||
#@return (por determinar)
|
||||
#@exception OG_ERR_FORMAT formato incorrecto.
|
||||
#@exception OG_ERR_NOTFOUND fichero de imagen o partición no detectados.
|
||||
#@exception OG_ERR_IMAGE error al restaurar la imagen del sistema.
|
||||
#*/ ##
|
||||
|
||||
|
||||
#/**
|
||||
# ogRestoreBootLoaderImage str_repo path_image int_ndisk
|
||||
#@brief Restaura la imagen del boot loader del sector de arranque de un disco.
|
||||
#@param str_repo repositorio de imágenes o caché local
|
||||
#@param path_image camino de la imagen
|
||||
#@param int_ndisk nº de orden del disco
|
||||
#@return (por determinar)
|
||||
#@exception OG_ERR_FORMAT formato incorrecto.
|
||||
#@exception OG_ERR_NOTFOUND fichero de imagen o partición no detectados.
|
||||
#@exception OG_ERR_IMAGE error al restaurar la imagen del sistema.
|
||||
#*/ ##
|
||||
|
||||
#/**
|
||||
# ogUnlockImage [str_repo] path_image
|
||||
#@brief Desbloquea una imagen con uso exclusivo.
|
||||
#@param str_repo repositorio de imágenes (opcional)
|
||||
#@param path_image camino de la imagen (sin extensión)
|
||||
#@return Nada.
|
||||
#@note repo = { REPO, CACHE }
|
||||
#@note Se elimina el fichero de bloqueo con extensión .lock
|
||||
#@exception OG_ERR_FORMAT formato incorrecto.
|
||||
#*/ ##
|
||||
|
||||
|
||||
#/**
|
||||
# ogGetImageInfo filename
|
||||
#@brief muestra información sobre la imagen monolitica.
|
||||
|
@ -323,3 +503,91 @@ def ogGetImageInfo (imgfile):
|
|||
|
||||
compressor = compressor.upper()
|
||||
return ':'.join ([tools, compressor, fs, str (size)])
|
||||
|
||||
#/**
|
||||
# ogGetImageProgram str_REPO str_imagen
|
||||
#@brief muestra información sobre la imagen monolitica.
|
||||
#@see ogGetImageInfo
|
||||
#@param 1 REPO o CACHE contenedor de la imagen
|
||||
#@param 2 filename nombre de la imagen sin extension
|
||||
#@return nombre del programa usado para generar la imagen
|
||||
#@exception OG_ERR_FORMAT formato incorrecto.
|
||||
#@exception OG_ERR_NOTFOUND fichero no encontrado.
|
||||
#@note ogGetImageProgram REPO imagenA -> partclone
|
||||
#*/ ##
|
||||
|
||||
|
||||
#/**
|
||||
# ogGetImageCompressor str_REPO str_imagen
|
||||
#@brief muestra información sobre la imagen monolitica.
|
||||
#@see ogGetImageInfo
|
||||
#@param 1 REPO o CACHE contenedor de la imagen
|
||||
#@param 2 filename nombre de la imagen sin extension
|
||||
#@return tipo de compresión usada al generar la imagen
|
||||
#@exception OG_ERR_FORMAT formato incorrecto.
|
||||
#@exception OG_ERR_NOTFOUND fichero no encontrado.
|
||||
#@note ogGetImageCompressor REPO imagenA -> lzop
|
||||
#*/ ##
|
||||
|
||||
|
||||
#/**
|
||||
# ogGetImageType str_REPO str_imagen
|
||||
#@brief muestra información sobre el sistema de archivos de imagen monolitica.
|
||||
#@see ogGetImageInfo
|
||||
#@param 1 REPO o CACHE contenedor de la imagen
|
||||
#@param 2 filename nombre de la imagen sin extension
|
||||
#@return tipo de compresión usada al generar la imagen
|
||||
#@exception OG_ERR_FORMAT formato incorrecto.
|
||||
#@exception OG_ERR_NOTFOUND fichero no encontrado.
|
||||
#@note ogGetImageType REPO imagenA -> NTFS
|
||||
#*/ ##
|
||||
#ogGetImageType ('REPO', 'imgprueba') ==> 'NTFS'
|
||||
#ogGetImageType ('CACHE', 'testimg') ==> 'EXTFS'
|
||||
def ogGetImageType (repo, imgname):
|
||||
imgfile = FileLib.ogGetPath (src=repo, file=imgname)
|
||||
if not os.path.exists (imgfile):
|
||||
SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_NOTFOUND, imgfile)
|
||||
return None
|
||||
|
||||
i = ogGetImageInfo (imgfile)
|
||||
return i.split (':')[2]
|
||||
|
||||
|
||||
|
||||
#/**
|
||||
# ogGetImageSize str_REPO str_imagen
|
||||
#@brief muestra información sobre el tamaño (KB) del sistema de archivos de imagen monolitica.
|
||||
#@see ogGetImageInfo
|
||||
#@param 1 REPO o CACHE contenedor de la imagen
|
||||
#@param 2 filename nombre de la imagen sin extension
|
||||
#@return tipo de compresión usada al generar la imagen
|
||||
#@exception OG_ERR_FORMAT formato incorrecto.
|
||||
#@exception OG_ERR_NOTFOUND fichero no encontrado.
|
||||
#@note ogGetImagesize REPO imagenA -> 56432234 > Kb
|
||||
#*/ ##
|
||||
|
||||
|
||||
#/**
|
||||
# ogCreateGptImage int_ndisk str_repo path_image
|
||||
#@brief Crea una imagen de la tabla de particiones GPT de un disco.
|
||||
#@param int_ndisk nº de orden del disco
|
||||
#@param str_repo repositorio de imágenes (remoto o caché local)
|
||||
#@param path_image camino de la imagen (sin extensión)
|
||||
#@return (nada, por determinar)
|
||||
#@note repo = { REPO, CACHE }
|
||||
#@exception OG_ERR_FORMAT formato incorrecto.
|
||||
#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado.
|
||||
#@exception OG_ERR_IMAGE error al crear la imagen del sistema.
|
||||
#*/ ##
|
||||
|
||||
#/**
|
||||
# ogRestoreGptImage str_repo path_image int_ndisk
|
||||
#@brief Restaura la imagen de la tabla de particiones GPT de un disco.
|
||||
#@param str_repo repositorio de imágenes o caché local
|
||||
#@param path_image camino de la imagen
|
||||
#@param int_ndisk nº de orden del disco
|
||||
#@return (por determinar)
|
||||
#@exception OG_ERR_FORMAT formato incorrecto.
|
||||
#@exception OG_ERR_NOTFOUND fichero de imagen o partición no detectados.
|
||||
#@exception OG_ERR_IMAGE error al restaurar la imagen del sistema.
|
||||
#*/ ##
|
||||
|
|
|
@ -13,6 +13,7 @@ import StringLib
|
|||
import NetLib
|
||||
import DiskLib
|
||||
import FileLib
|
||||
import CacheLib
|
||||
|
||||
#/**
|
||||
#@file ProtocolLib.py
|
||||
|
@ -324,7 +325,7 @@ def ogMcastSyntax (op, sess, file=None, device=None, tool=None, level=None):
|
|||
SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_FORMAT, 'parametros session de cliente multicast no completa')
|
||||
PERROR = 2
|
||||
|
||||
mbuffer = " --pipe 'mbuffer -q -m 20M' "
|
||||
mbuffer = " --pipe 'mbuffer -q -m 20M' "
|
||||
portbase = int (session[0])
|
||||
if portbase not in range (9000, 9100, 2):
|
||||
SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_FORMAT, f'McastSession portbase {portbase}')
|
||||
|
@ -671,6 +672,65 @@ def ogMcastRequest (img, proto):
|
|||
#@exception OG_ERR_NOTOS La partición no tiene instalado un sistema operativo.
|
||||
#*/ ##
|
||||
|
||||
#ogCreateTorrent ([str_REPOSITORY] [int_ndisk int_npart] Relative_path_file IpBttrack)
|
||||
#ogCreateTorrent (disk=1, par=1, file='/aula1/winxp', ip_bttrack='10.1.15.23')
|
||||
#ogCreateTorrent (take_from='REPO', file='/aula1/winxp', ip_bttrack='10.1.15.45')
|
||||
#ogCreateTorrent (take_from='CACHE', file='/aula1/winxp', ip_bttrack='10.1.15.45')
|
||||
def ogCreateTorrent (disk=None, par=None, take_from=None, file=None, ip_bttrack=None):
|
||||
if file is None:
|
||||
raise TypeError ('missing required argument: "file"')
|
||||
if ip_bttrack is None:
|
||||
raise TypeError ('missing required argument: "ip_bttrack"')
|
||||
|
||||
from_cache = False
|
||||
|
||||
if take_from is not None:
|
||||
if disk is None and par is None:
|
||||
## we were given take_from=
|
||||
if 'CACHE' == take_from: from_cache = True
|
||||
ext = ImageLib.ogGetImageType (take_from, file)
|
||||
if ext is None:
|
||||
SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_NOTFOUND, f'{take_from} {file}')
|
||||
return
|
||||
f = f'{file}.{ext}'
|
||||
source = FileLib.ogGetPath (src=take_from, file=f)
|
||||
print (f'ogGetPath (src=({take_from}), file=({f})) = source ({source})')
|
||||
else:
|
||||
raise TypeError ('argument "take_from" can be specified along neither "disk" nor "par"')
|
||||
|
||||
else:
|
||||
if disk is not None and par is not None:
|
||||
## we were given disk= par=
|
||||
f = f'{file}.img'
|
||||
source = FileLib.ogGetPath (src=f'{disk} {par}', file=f)
|
||||
print (f'ogGetPath (src=({disk} {par}), file=({f})) = source ({source})')
|
||||
elif disk is None and par is None:
|
||||
## we were given nothing
|
||||
f = f'{file}.img'
|
||||
source = FileLib.ogGetPath (file=f)
|
||||
print (f'ogGetPath (file=({f})) = source ({source})')
|
||||
else:
|
||||
raise TypeError ('if one of "disk" and "par" are specified, then both must be')
|
||||
|
||||
if not source:
|
||||
SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_NOTFOUND, '')
|
||||
return
|
||||
|
||||
if from_cache:
|
||||
if not CacheLib.ogFindCache():
|
||||
SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_NOTFOUND, "CACHE")
|
||||
#return None
|
||||
|
||||
if os.path.exists (f'{source}.torrent'):
|
||||
os.rename (f'{source}.torrent', f'{source}.torrent.ant')
|
||||
print ('Esperamos que se refresque el servidor')
|
||||
time.sleep (20)
|
||||
|
||||
cwd = os.getcwd()
|
||||
os.chdir (os.path.dirname (source))
|
||||
print (f'ctorrent -t {os.path.basename (source)} -u http://{ip_bttrack}:6969/announce -s {source}.torrent')
|
||||
subprocess.run (['ctorrent', '-t', os.path.basename (source), '-u', f'http://{ip_bttrack}:6969/announce', '-s', f'{source}.torrent'])
|
||||
os.chdir (cwd)
|
||||
|
||||
|
||||
#/**
|
||||
|
|
Loading…
Reference in New Issue