Refactoring for package support

ogrepository-integration
Vadim vtroshchinskiy 2025-04-02 23:59:50 +02:00
parent f2ce7267f1
commit ec9f25d9b0
1 changed files with 112 additions and 49 deletions

View File

@ -213,11 +213,33 @@ class OpengnsysGitInstaller:
self.git_basedir = "base.git"
self.email = "OpenGnsys@opengnsys.com"
self.opengnsys_bin_path = os.path.join(self.base_path, "bin")
self.opengnsys_etc_path = os.path.join(self.base_path, "etc")
self.forgejo_user = "oggit"
self.forgejo_password = "opengnsys"
self.forgejo_organization = "opengnsys"
self.forgejo_port = 3000
self.forgejo_bin_path = os.path.join(self.ogrepository_base_path, "bin")
self.forgejo_exe = os.path.join(self.forgejo_bin_path, "forgejo")
self.forgejo_conf_dir_path = os.path.join(self.ogrepository_base_path, "etc", "forgejo")
self.lfs_dir_path = os.path.join(self.ogrepository_base_path, "oggit", "git-lfs")
self.git_dir_path = os.path.join(self.ogrepository_base_path, "oggit", "git")
self.forgejo_var_dir_path = os.path.join(self.ogrepository_base_path, "var", "lib", "forgejo")
self.forgejo_work_dir_path = os.path.join(self.forgejo_var_dir_path, "work")
self.forgejo_db_dir_path = os.path.join(self.forgejo_var_dir_path, "db")
self.forgejo_data_dir_path = os.path.join(self.forgejo_var_dir_path, "data")
self.forgejo_db_path = os.path.join(self.forgejo_db_dir_path, "forgejo.db")
self.forgejo_log_dir_path = os.path.join(self.ogrepository_base_path, "log", "forgejo")
self.dependencies = ["git", "python3-flask", "python3-flasgger", "gunicorn", ]
self.set_ssh_user_group("oggit", "oggit")
self.temp_dir = None
@ -240,6 +262,9 @@ class OpengnsysGitInstaller:
self.oglive = Oglive()
def set_testmode(self, value):
"""Establece el modo de prueba"""
self.testmode = value
@ -700,7 +725,7 @@ class OpengnsysGitInstaller:
self.verify_requirements()
self.__logger.debug("Installing dependencies")
subprocess.run(["apt-get", "install", "-y", "git"], check=True)
subprocess.run(["apt-get", "install", "-y"] + self.dependencies, check=True)
def _install_template(self, template, destination, keysvalues):
@ -711,7 +736,10 @@ class OpengnsysGitInstaller:
data = template_file.read()
for key in keysvalues.keys():
data = data.replace("{" + key + "}", keysvalues[key])
if isinstance(keysvalues[key], int):
data = data.replace("{" + key + "}", str(keysvalues[key]))
else:
data = data.replace("{" + key + "}", keysvalues[key])
with open(destination, "w+", encoding="utf-8") as out_file:
out_file.write(data)
@ -722,94 +750,125 @@ class OpengnsysGitInstaller:
ret = subprocess.run(cmd, check=True,capture_output=True, encoding='utf-8')
return ret.stdout.strip()
def install_forgejo(self):
def install_api(self):
self.__logger.info("Installing Git API")
opengnsys_bin_path = os.path.join(self.base_path, "bin")
opengnsys_etc_path = os.path.join(self.base_path, "etc")
pathlib.Path(opengnsys_bin_path).mkdir(parents=True, exist_ok=True)
data = {
"gitapi_user" : "opengnsys",
"gitapi_group" : "opengnsys",
"gitapi_host" : "0.0.0.0",
"gitapi_port" : 8087,
"gitapi_work_path" : opengnsys_bin_path
}
shutil.copy("../api/gitapi.py", opengnsys_bin_path + "/gitapi.py")
shutil.copy("opengnsys_git_installer.py", opengnsys_bin_path + "/opengnsys_git_installer.py")
self._install_template(os.path.join(self.script_path, "gitapi.service"), "/etc/systemd/system/gitapi.service", data)
self.__logger.debug("Reloading systemd and starting service")
subprocess.run(["systemctl", "daemon-reload"], check=True)
subprocess.run(["systemctl", "enable", "gitapi"], check=True)
subprocess.run(["systemctl", "restart", "gitapi"], check=True)
def install_forgejo(self, download=True):
self.__logger.info("Installing Forgejo version %s", FORGEJO_VERSION)
opengnsys_bin_path = os.path.join(self.base_path, "bin")
opengnsys_etc_path = os.path.join(self.base_path, "etc")
# opengnsys_bin_path = os.path.join(self.base_path, "bin")
# opengnsys_etc_path = os.path.join(self.base_path, "etc")
forgejo_bin_path = os.path.join(self.ogrepository_base_path, "bin")
bin_path = os.path.join(forgejo_bin_path, "forgejo")
conf_dir_path = os.path.join(self.ogrepository_base_path, "etc", "forgejo")
# forgejo_bin_path = os.path.join(self.ogrepository_base_path, "bin")
# bin_path = os.path.join(forgejo_bin_path, "forgejo")
# conf_dir_path = os.path.join(self.ogrepository_base_path, "etc", "forgejo")
lfs_dir_path = os.path.join(self.ogrepository_base_path, "oggit", "git-lfs")
git_dir_path = os.path.join(self.ogrepository_base_path, "oggit", "git")
# lfs_dir_path = os.path.join(self.ogrepository_base_path, "oggit", "git-lfs")
# git_dir_path = os.path.join(self.ogrepository_base_path, "oggit", "git")
forgejo_work_dir_path = os.path.join(self.ogrepository_base_path, "var", "lib", "forgejo/work")
forgejo_db_dir_path = os.path.join(self.ogrepository_base_path, "var", "lib", "forgejo/db")
forgejo_data_dir_path = os.path.join(self.ogrepository_base_path, "var", "lib", "forgejo/data")
# forgejo_var_dir_path = os.path.join(self.ogrepository_base_path, "var", "lib", "forgejo")
# forgejo_work_dir_path = os.path.join(forgejo_var_dir_path, "work")
# forgejo_db_dir_path = os.path.join(forgejo_var_dir_path, "db")
# forgejo_data_dir_path = os.path.join(forgejo_var_dir_path, "data")
forgejo_db_path = os.path.join(forgejo_db_dir_path, "forgejo.db")
# forgejo_db_path = os.path.join(forgejo_db_dir_path, "forgejo.db")
forgejo_log_dir_path = os.path.join(self.ogrepository_base_path, "log", "forgejo")
# forgejo_log_dir_path = os.path.join(self.ogrepository_base_path, "log", "forgejo")
conf_path = os.path.join(conf_dir_path, "app.ini")
conf_path = os.path.join(self.forgejo_conf_dir_path, "app.ini")
self.__logger.info("Stopping opengnsys-forgejo service. This may cause a harmless warning.")
subprocess.run(["/usr/bin/systemctl", "stop", "opengnsys-forgejo"], check=False)
self.__logger.debug("Downloading from %s into %s", FORGEJO_URL, bin_path)
pathlib.Path(forgejo_bin_path).mkdir(parents=True, exist_ok=True)
self.__logger.debug("Downloading from %s into %s", FORGEJO_URL, self.forgejo_exe)
pathlib.Path(self.forgejo_bin_path).mkdir(parents=True, exist_ok=True)
with open(bin_path, "wb") as forgejo_bin:
with open(self.forgejo_exe, "wb") as forgejo_bin:
download_with_progress(FORGEJO_URL, forgejo_bin)
os.chmod(bin_path, 0o755)
os.chmod(self.forgejo_exe, 0o755)
if os.path.exists(forgejo_db_path):
if os.path.exists(self.forgejo_db_path):
self.__logger.debug("Removing old configuration")
os.unlink(forgejo_db_path)
os.unlink(self.forgejo_db_path)
else:
self.__logger.debug("Old configuration not present, ok.")
self.__logger.debug("Wiping old data")
for dir in [conf_dir_path, git_dir_path, lfs_dir_path, forgejo_work_dir_path, forgejo_data_dir_path, forgejo_db_dir_path]:
for dir in [self.forgejo_conf_dir_path, self.git_dir_path, self.lfs_dir_path, self.forgejo_work_dir_path, self.forgejo_data_dir_path, self.forgejo_db_dir_path]:
if os.path.exists(dir):
self.__logger.debug("Removing %s", dir)
shutil.rmtree(dir)
self.__logger.debug("Creating directories")
pathlib.Path(opengnsys_etc_path).mkdir(parents=True, exist_ok=True)
pathlib.Path(conf_dir_path).mkdir(parents=True, exist_ok=True)
pathlib.Path(git_dir_path).mkdir(parents=True, exist_ok=True)
pathlib.Path(lfs_dir_path).mkdir(parents=True, exist_ok=True)
pathlib.Path(forgejo_work_dir_path).mkdir(parents=True, exist_ok=True)
pathlib.Path(forgejo_data_dir_path).mkdir(parents=True, exist_ok=True)
pathlib.Path(forgejo_db_dir_path).mkdir(parents=True, exist_ok=True)
pathlib.Path(forgejo_log_dir_path).mkdir(parents=True, exist_ok=True)
pathlib.Path(self.opengnsys_etc_path).mkdir(parents=True, exist_ok=True)
pathlib.Path(self.forgejo_conf_dir_path).mkdir(parents=True, exist_ok=True)
pathlib.Path(self.git_dir_path).mkdir(parents=True, exist_ok=True)
pathlib.Path(self.lfs_dir_path).mkdir(parents=True, exist_ok=True)
pathlib.Path(self.forgejo_work_dir_path).mkdir(parents=True, exist_ok=True)
pathlib.Path(self.forgejo_data_dir_path).mkdir(parents=True, exist_ok=True)
pathlib.Path(self.forgejo_db_dir_path).mkdir(parents=True, exist_ok=True)
pathlib.Path(self.forgejo_log_dir_path).mkdir(parents=True, exist_ok=True)
os.chown(lfs_dir_path, self.ssh_uid, self.ssh_gid)
os.chown(git_dir_path, self.ssh_uid, self.ssh_gid)
os.chown(forgejo_data_dir_path, self.ssh_uid, self.ssh_gid)
os.chown(forgejo_work_dir_path, self.ssh_uid, self.ssh_gid)
os.chown(forgejo_db_dir_path, self.ssh_uid, self.ssh_gid)
os.chown(forgejo_log_dir_path, self.ssh_uid, self.ssh_gid)
os.chown(self.lfs_dir_path, self.ssh_uid, self.ssh_gid)
os.chown(self.git_dir_path, self.ssh_uid, self.ssh_gid)
os.chown(self.forgejo_data_dir_path, self.ssh_uid, self.ssh_gid)
os.chown(self.forgejo_work_dir_path, self.ssh_uid, self.ssh_gid)
os.chown(self.forgejo_db_dir_path, self.ssh_uid, self.ssh_gid)
os.chown(self.forgejo_log_dir_path, self.ssh_uid, self.ssh_gid)
data = {
"forgejo_user" : self.ssh_user,
"forgejo_group" : self.ssh_group,
"forgejo_port" : str(self.forgejo_port),
"forgejo_bin" : bin_path,
"forgejo_bin" : self.forgejo_exe,
"forgejo_app_ini" : conf_path,
"forgejo_work_path" : forgejo_work_dir_path,
"forgejo_data_path" : forgejo_data_dir_path,
"forgejo_db_path" : forgejo_db_path,
"forgejo_repository_root" : git_dir_path,
"forgejo_lfs_path" : lfs_dir_path,
"forgejo_log_path" : forgejo_log_dir_path,
"forgejo_work_path" : self.forgejo_work_dir_path,
"forgejo_data_path" : self.forgejo_data_dir_path,
"forgejo_db_path" : self.forgejo_db_path,
"forgejo_repository_root" : self.git_dir_path,
"forgejo_lfs_path" : self.lfs_dir_path,
"forgejo_log_path" : self.forgejo_log_dir_path,
"forgejo_hostname" : self._runcmd("hostname"),
"forgejo_lfs_jwt_secret" : self._runcmd([bin_path,"generate", "secret", "LFS_JWT_SECRET"]),
"forgejo_jwt_secret" : self._runcmd([bin_path,"generate", "secret", "JWT_SECRET"]),
"forgejo_internal_token" : self._runcmd([bin_path,"generate", "secret", "INTERNAL_TOKEN"]),
"forgejo_secret_key" : self._runcmd([bin_path,"generate", "secret", "SECRET_KEY"])
"forgejo_lfs_jwt_secret" : self._runcmd([self.forgejo_exe,"generate", "secret", "LFS_JWT_SECRET"]),
"forgejo_jwt_secret" : self._runcmd([self.forgejo_exe,"generate", "secret", "JWT_SECRET"]),
"forgejo_internal_token" : self._runcmd([self.forgejo_exe,"generate", "secret", "INTERNAL_TOKEN"]),
"forgejo_secret_key" : self._runcmd([self.forgejo_exe,"generate", "secret", "SECRET_KEY"])
}
self._install_template(os.path.join(self.script_path, "forgejo-app.ini"), conf_path, data)
@ -828,7 +887,7 @@ class OpengnsysGitInstaller:
self.__logger.info("Configuring forgejo")
def run_forge_cmd(args):
cmd = [bin_path, "--config", conf_path] + args
cmd = [self.forgejo_exe, "--config", conf_path] + args
self.__logger.debug("Running command: %s", cmd)
ret = subprocess.run(cmd, check=False, capture_output=True, encoding='utf-8', user=self.ssh_user)
@ -849,6 +908,9 @@ class OpengnsysGitInstaller:
with open(os.path.join(self.base_path, "etc", "ogGitApiToken.cfg"), "w+", encoding='utf-8') as token_file:
token_file.write(token)
# def configure_forgejo(self):
def add_forgejo_repo(self, repository_name, description = ""):
token = ""
@ -1015,6 +1077,7 @@ if __name__ == '__main__':
installer.get_image_paths(oglive_num = args.oglive)
else:
installer.install_dependencies()
installer.install_api()
installer.install_forgejo()
installer.add_forgejo_repo("windows", "Windows")