refs #503 #504 #639 updates config for nelmio swagger and adapts getoglives to oglivecli and adds filename to the json output
parent
4a6238de6f
commit
4fb5d888bf
|
@ -509,13 +509,14 @@ function list_installed_oglives() {
|
||||||
|
|
||||||
local DATA=$(jq -n \
|
local DATA=$(jq -n \
|
||||||
--arg id "$CHECKSUM" \
|
--arg id "$CHECKSUM" \
|
||||||
|
--arg filename "$OGLIVEDIR" \
|
||||||
--arg dist "$OGLIVEDIST" \
|
--arg dist "$OGLIVEDIST" \
|
||||||
--arg krnl "$OGLIVEKRNL" \
|
--arg krnl "$OGLIVEKRNL" \
|
||||||
--arg arch "$OGLIVEARCH" \
|
--arg arch "$OGLIVEARCH" \
|
||||||
--arg rev "$OGLIVEREV" \
|
--arg rev "$OGLIVEREV" \
|
||||||
--arg dir "$TFTPDIR/$OGLIVEDIR" \
|
--arg dir "$TFTPDIR/$OGLIVEDIR" \
|
||||||
--arg iso "" \
|
--arg iso "" \
|
||||||
'{id: $id, distribution: $dist, kernel: $krnl, architecture: $arch, revision: $rev, directory: $dir, iso: $iso}')
|
'{id: $id, filename: $filename, distribution: $dist, kernel: $krnl, architecture: $arch, revision: $rev, directory: $dir, iso: $iso}')
|
||||||
|
|
||||||
installed_ogLives+=("$DATA")
|
installed_ogLives+=("$DATA")
|
||||||
|
|
||||||
|
|
|
@ -12,4 +12,5 @@ return [
|
||||||
Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
|
Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
|
||||||
Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true],
|
Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true],
|
||||||
App\OgBootBundle\OgBootBundle::class => ['all' => true],
|
App\OgBootBundle\OgBootBundle::class => ['all' => true],
|
||||||
|
Nelmio\ApiDocBundle\NelmioApiDocBundle::class => ['all' => true],
|
||||||
];
|
];
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
#index:
|
#index:
|
||||||
# path: /
|
# path: /
|
||||||
# controller: App\Controller\DefaultController::index
|
# controller: App\Controller\DefaultController::index
|
||||||
|
app.swagger_ui:
|
||||||
|
path: /api/doc
|
||||||
|
methods: GET
|
||||||
|
defaults: { _controller: nelmio_api_doc.controller.swagger_ui }
|
||||||
|
|
|
@ -225,31 +225,6 @@ def downloadComposer():
|
||||||
logger.info(f"composer.phar downloaded to {INSTALL_OGBOOT_TARGET}/bin")
|
logger.info(f"composer.phar downloaded to {INSTALL_OGBOOT_TARGET}/bin")
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
def install_swagger_ui():
|
|
||||||
global INSTALL_TARGET
|
|
||||||
# Define la URL del archivo de Swagger UI que quieres descargar
|
|
||||||
swagger_ui_url = "https://github.com/swagger-api/swagger-ui/archive/refs/heads/master.zip"
|
|
||||||
# Define la ruta donde quieres descomprimir Swagger UI
|
|
||||||
swagger_ui_path = "/tmp/swagger-ui"
|
|
||||||
# Define la ruta de destino para los archivos de Swagger UI
|
|
||||||
destination_path = os.path.join(INSTALL_TARGET, "public")
|
|
||||||
# Crea los directorios si no existen
|
|
||||||
os.makedirs(swagger_ui_path, exist_ok=True)
|
|
||||||
os.makedirs(destination_path, exist_ok=True)
|
|
||||||
# Descarga el archivo de Swagger UI
|
|
||||||
urllib.request.urlretrieve(swagger_ui_url, "/tmp/swagger-ui.zip")
|
|
||||||
# Descomprime el archivo de Swagger UI en la ruta especificada
|
|
||||||
with zipfile.ZipFile("/tmp/swagger-ui.zip", "r") as zip_ref:
|
|
||||||
zip_ref.extractall(swagger_ui_path)
|
|
||||||
# Copia los archivos de Swagger UI al directorio de destino
|
|
||||||
for file_path in glob.glob(os.path.join(swagger_ui_path, "swagger-ui-master", "dist", "*")):
|
|
||||||
shutil.copy(file_path, destination_path)
|
|
||||||
# Elimina el archivo descargado y el directorio temporal
|
|
||||||
os.remove("/tmp/swagger-ui.zip")
|
|
||||||
shutil.rmtree(swagger_ui_path)
|
|
||||||
# Genera el archivo swagger.json
|
|
||||||
os.system(f"{os.path.join(INSTALL_TARGET, 'vendor', 'bin', 'openapi')} {INSTALL_TARGET}/src/OgBootBundle/Controller/ -o {destination_path}/swagger.json")
|
|
||||||
logger.info(f"Swagger UI installed on {destination_path}.")
|
|
||||||
|
|
||||||
def og_core_create_user(OPENGNSYS_CLIENT_USER):
|
def og_core_create_user(OPENGNSYS_CLIENT_USER):
|
||||||
try:
|
try:
|
||||||
|
@ -365,7 +340,6 @@ def og_boot_composer_install():
|
||||||
if os.path.exists(composer_lock_path):
|
if os.path.exists(composer_lock_path):
|
||||||
os.remove(composer_lock_path)
|
os.remove(composer_lock_path)
|
||||||
|
|
||||||
install_swagger_ui() # Instalar Swagger UI
|
|
||||||
subprocess.call(["sudo", "chown", "-R", "ogboot:ogboot", f"{INSTALL_OGBOOT_TARGET}/public"])
|
subprocess.call(["sudo", "chown", "-R", "ogboot:ogboot", f"{INSTALL_OGBOOT_TARGET}/public"])
|
||||||
|
|
||||||
logger.info("Application skeleton created and composer.lock file removed.")
|
logger.info("Application skeleton created and composer.lock file removed.")
|
||||||
|
@ -494,10 +468,10 @@ TFTP_OPTIONS="--secure"
|
||||||
logger.warning(f"The symbolic link already exists: {symlink_target}")
|
logger.warning(f"The symbolic link already exists: {symlink_target}")
|
||||||
#Descargar oglive
|
#Descargar oglive
|
||||||
logger.info("Downloading oglive...")
|
logger.info("Downloading oglive...")
|
||||||
iso_name = "ogLive-focal-5.13.0-27-beta-amd64-r20210706.5b4bf5f.iso"
|
iso_url = "https://ognproject.evlt.uma.es/trac/downloads/ogLive-focal-5.13.0-27-beta-amd64-r20210706.5b4bf5f.iso"
|
||||||
try:
|
try:
|
||||||
result = subprocess.run(
|
result = subprocess.run(
|
||||||
["sudo", "/opt/ogboot/bin/oglivecli", "download", iso_name],
|
["sudo", "/opt/ogboot/bin/oglivecli", "download", iso_url],
|
||||||
check=True,
|
check=True,
|
||||||
capture_output=True,
|
capture_output=True,
|
||||||
text=True
|
text=True
|
||||||
|
@ -893,11 +867,11 @@ def modify_php_fpm_config():
|
||||||
with open(php_fpm_conf_path, 'w') as file:
|
with open(php_fpm_conf_path, 'w') as file:
|
||||||
for line in config_lines:
|
for line in config_lines:
|
||||||
if line.startswith('user ='):
|
if line.startswith('user ='):
|
||||||
file.write('user = www-data\n')
|
file.write('user = ogboot\n')
|
||||||
elif line.startswith('group ='):
|
elif line.startswith('group ='):
|
||||||
file.write('group = ogboot\n')
|
file.write('group = ogboot\n')
|
||||||
elif line.startswith('listen.owner ='):
|
elif line.startswith('listen.owner ='):
|
||||||
file.write('listen.owner = www-data\n')
|
file.write('listen.owner = ogboot\n')
|
||||||
elif line.startswith('listen.group ='):
|
elif line.startswith('listen.group ='):
|
||||||
file.write('listen.group = ogboot\n')
|
file.write('listen.group = ogboot\n')
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -173,44 +173,21 @@ public function getDownloadMenu(): Response
|
||||||
* response=200,
|
* response=200,
|
||||||
* description="Successful operation",
|
* description="Successful operation",
|
||||||
* @OA\JsonContent(
|
* @OA\JsonContent(
|
||||||
* type="array",
|
* type="object",
|
||||||
* @OA\Items(
|
* @OA\Property(property="default_oglive", type="string", description="Default ogLive client"),
|
||||||
* type="object",
|
* @OA\Property(
|
||||||
* @OA\Property(
|
* property="installed_ogLives",
|
||||||
* property="id",
|
* type="array",
|
||||||
* type="string",
|
* @OA\Items(
|
||||||
* description="Unique identifier for the ogLive client, generated from ogclient.sqfs.sum",
|
* type="object",
|
||||||
* example="9e49a085ba74f97a81bdf9b3d0785094"
|
* @OA\Property(property="id", type="string", description="Unique identifier for the ogLive client"),
|
||||||
* ),
|
* @OA\Property(property="filename", type="string", description="Filename of the ogLive client"),
|
||||||
* @OA\Property(
|
* @OA\Property(property="distribution", type="string", description="Distribution name of the installed ogLive client"),
|
||||||
* property="distribution",
|
* @OA\Property(property="kernel", type="string", description="Kernel version of the installed ogLive client"),
|
||||||
* type="string",
|
* @OA\Property(property="architecture", type="string", description="Architecture of the installed ogLive client"),
|
||||||
* description="Distribution name of the installed ogLive client"
|
* @OA\Property(property="revision", type="string", description="Revision of the installed ogLive client"),
|
||||||
* ),
|
* @OA\Property(property="directory", type="string", description="Directory name of the installed ogLive client"),
|
||||||
* @OA\Property(
|
* @OA\Property(property="iso", type="string", description="ISO file name of the installed ogLive client")
|
||||||
* property="kernel",
|
|
||||||
* type="string",
|
|
||||||
* description="Kernel version of the installed ogLive client"
|
|
||||||
* ),
|
|
||||||
* @OA\Property(
|
|
||||||
* property="architecture",
|
|
||||||
* type="string",
|
|
||||||
* description="Architecture of the installed ogLive client"
|
|
||||||
* ),
|
|
||||||
* @OA\Property(
|
|
||||||
* property="revision",
|
|
||||||
* type="string",
|
|
||||||
* description="Revision of the installed ogLive client"
|
|
||||||
* ),
|
|
||||||
* @OA\Property(
|
|
||||||
* property="directory",
|
|
||||||
* type="string",
|
|
||||||
* description="Directory name of the installed ogLive client"
|
|
||||||
* ),
|
|
||||||
* @OA\Property(
|
|
||||||
* property="iso",
|
|
||||||
* type="string",
|
|
||||||
* description="ISO file name of the installed ogLive client"
|
|
||||||
* )
|
* )
|
||||||
* )
|
* )
|
||||||
* )
|
* )
|
||||||
|
@ -223,89 +200,14 @@ public function getDownloadMenu(): Response
|
||||||
*/
|
*/
|
||||||
public function getOglives(): Response
|
public function getOglives(): Response
|
||||||
{
|
{
|
||||||
$directoryPath = '/opt/ogboot/tftpboot/';
|
// Llama al servicio que ejecuta el comando oglivecli y procesa la salida
|
||||||
$pattern = '/^ogLive-([\w.-]+)-r(\d+)$/';
|
$ogLiveConfigResult = $this->curlRequestService->callOgLive("list_installed_oglives");
|
||||||
|
|
||||||
$ogLives = [];
|
if (empty($ogLiveConfigResult) || !isset($ogLiveConfigResult['installed_ogLives'])) {
|
||||||
|
|
||||||
if ($handle = opendir($directoryPath)) {
|
|
||||||
error_log("Opened directory: $directoryPath");
|
|
||||||
|
|
||||||
while (false !== ($entry = readdir($handle))) {
|
|
||||||
error_log("Processing entry: $entry");
|
|
||||||
|
|
||||||
if ($entry != "." && $entry != ".." && is_dir($directoryPath . $entry)) {
|
|
||||||
if (preg_match($pattern, $entry, $matches)) {
|
|
||||||
error_log("Entry matches pattern: $entry");
|
|
||||||
|
|
||||||
// Evitar directorios .old
|
|
||||||
if (substr($entry, -4) === '.old') {
|
|
||||||
error_log("Ignoring old directory: $entry");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Extraer detalles
|
|
||||||
$distribution = $matches[1];
|
|
||||||
$revision = $matches[2];
|
|
||||||
$directory = $entry;
|
|
||||||
$ogLivePath = $directoryPath . $entry;
|
|
||||||
|
|
||||||
// Obtener el ID del archivo ogclient.sqfs.sum
|
|
||||||
$sumFile = $ogLivePath . '/ogclient.sqfs.sum';
|
|
||||||
$id = '';
|
|
||||||
if (file_exists($sumFile)) {
|
|
||||||
$id = trim(file_get_contents($sumFile));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Obtener el nombre del archivo ISO
|
|
||||||
$iso = '';
|
|
||||||
$oldInfoFile = $ogLivePath . '/OLDINFOFILE';
|
|
||||||
if (file_exists($oldInfoFile)) {
|
|
||||||
$iso = trim(file($oldInfoFile, FILE_USE_INCLUDE_PATH | FILE_IGNORE_NEW_LINES)[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Obtener la versión del kernel
|
|
||||||
$kernelFile = $ogLivePath . '/ogvmlinuz';
|
|
||||||
$kernel = '';
|
|
||||||
if (file_exists($kernelFile)) {
|
|
||||||
$fileOutput = shell_exec("file -bkr $kernelFile");
|
|
||||||
if (preg_match('/Linux kernel.*version (\d+\.\d+\.\d+)/', $fileOutput, $kernelMatches)) {
|
|
||||||
$kernel = $kernelMatches[1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Asumir arquitectura como 'amd64'; puedes refinar esto si se necesita más lógica
|
|
||||||
$architecture = 'amd64';
|
|
||||||
|
|
||||||
// Construir el objeto
|
|
||||||
$ogLives[] = [
|
|
||||||
'id' => $id,
|
|
||||||
'distribution' => $distribution,
|
|
||||||
'kernel' => $kernel,
|
|
||||||
'architecture' => $architecture,
|
|
||||||
'revision' => $revision,
|
|
||||||
'directory' => $directory,
|
|
||||||
'iso' => $iso
|
|
||||||
];
|
|
||||||
} else {
|
|
||||||
error_log("Entry does not match pattern: $entry");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
error_log("Entry is not a directory: $directoryPath$entry");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
closedir($handle);
|
|
||||||
error_log("Closed directory: $directoryPath");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($ogLives)) {
|
|
||||||
error_log("Returning ogLives data");
|
|
||||||
return new JsonResponse($ogLives, Response::HTTP_OK);
|
|
||||||
} else {
|
|
||||||
error_log("No ogLive clients found");
|
|
||||||
return new JsonResponse(['error' => 'No ogLive clients found'], Response::HTTP_NOT_FOUND);
|
return new JsonResponse(['error' => 'No ogLive clients found'], Response::HTTP_NOT_FOUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return new JsonResponse($ogLiveConfigResult, Response::HTTP_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue