#!/usr/bin/env python3 import sys import resource import logging import NetLib import ogGlobals import SystemLib import DiskLib from GitLib import OpengnsysGitLibrary, NTFSImplementation, OgProgressPrinterWeb import argparse class OgLogger(logging.StreamHandler): def emit(self, record): log_types = ["command"] log_level = "info" match(record.levelno): case logging.DEBUG: log_level = None case logging.WARNING: log_level = "warning" case logging.INFO: log_level = "info" case logging.ERROR: log_level = "error" case logging.CRITICAL: SystemLib.ogRaiseError() SystemLib.ogEcho(log_types, log_level, record.getMessage()) if __name__ == "__main__": soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE) try: # Usamos el mínimo entre 65536 y el límite hard disponible new_limit = min(65536, hard) resource.setrlimit(resource.RLIMIT_NOFILE, (new_limit, hard)) print(f"RLIMIT_NOFILE establecido a: {resource.getrlimit(resource.RLIMIT_NOFILE)}") except ValueError as e: print(f"No se pudo aumentar el límite de archivos abiertos: {e}") parser = argparse.ArgumentParser( prog = "OpenGnsys Git Image Restore", description = "Restores an image from Git" ) parser.add_argument("--disk", type=int, metavar="DISK", required=True, help="Disk ID") parser.add_argument("--partition", type=int, metavar="PART", required=True, help="Disk partition") parser.add_argument("--repository", type=str, metavar="REPO", required=True, help="Address of the Git repository to clone") parser.add_argument("--branch", type=str, metavar="BRANCH", required=True, help="Branch to check out") parser.add_argument("--commit", type=str, metavar="COMMIT_ID", required=True, help="Commit to check out") parser.add_help = True args = parser.parse_args() logFilePath = "/var/log/opengnsys.RestaurarImagenGit.log" ogLog = OgLogger() ogLog.setLevel(logging.DEBUG) fileLog = logging.FileHandler(logFilePath) fileLog.setLevel(logging.DEBUG) formatter = logging.Formatter('%(asctime)s - %(name)24s - [%(levelname)5s] - %(message)s') fileLog.setFormatter(formatter) logger = logging.getLogger(__package__) logger.setLevel(logging.DEBUG) logger.addHandler(fileLog) logger.addHandler(ogLog) logger.info("Starting RestaurarImagenGit") ntfs_impl = NTFSImplementation.NTFS3G og_git = OpengnsysGitLibrary(ntfs_implementation = ntfs_impl) og_git.progress_callback = OgProgressPrinterWeb() device = DiskLib.ogDiskToDev(args.disk, args.partition) og_git.cloneRepo(args.repo, destination = device, boot_device = device, ref = args.commit, branch = args.branch) logger.info("RestaurarImagenGit Finished.")