Compare commits

...

70 Commits

Author SHA1 Message Date
opengnsys 0e3382f664 Merge pull request 'samba_pass' (#21) from samba_pass into main
ogboot/pipeline/head This commit looks good Details
Reviewed-on: #21
2025-06-30 14:57:19 +02:00
Luis Gerardo Romero Garcia 47b12afc63 refs #2355 updates changelog 2025-06-30 14:55:11 +02:00
Luis Gerardo Romero Garcia 9dedc8d513 refs #2355 deletes obsolete samba directory and changes postinstall to use samba-ogboot.tmpl 2025-06-30 14:55:11 +02:00
Nicolas Arenas 307c14bd03 refs #2356, modify setsmbpass for using new output format from oglivecli 2025-06-30 13:02:35 +02:00
Luis Gerardo Romero Garcia e649f3ca43 Merge pull request 'refs #2355 updates changelog' (#20) from delete-samba-dir into main
ogboot/pipeline/head This commit looks good Details
Reviewed-on: #20
2025-06-30 11:45:39 +02:00
Luis Gerardo Romero Garcia b5f76c61f3 refs #2355 updates changelog 2025-06-30 11:45:02 +02:00
Luis Gerardo Romero Garcia 355ce31271 Merge pull request 'refs #2355 deletes obsolete samba directory and changes postinstall to use samba-ogboot.tmpl' (#19) from delete-samba-dir into main
ogboot/pipeline/head This commit looks good Details
Reviewed-on: #19
2025-06-30 11:43:01 +02:00
Luis Gerardo Romero Garcia 08ea03c6ef refs #2355 deletes obsolete samba directory and changes postinstall to use samba-ogboot.tmpl 2025-06-30 11:42:06 +02:00
Luis Gerardo Romero Garcia 8087243462 refs #2219 updates CHANGELOG
ogboot/pipeline/head This commit looks good Details
2025-06-27 13:05:51 +02:00
Luis Gerardo Romero Garcia c1675da2db Merge pull request 'refs #2219 removes bootmark, updates grub.exe to support ext and updates menu template and oglivecache to use new grub.exe' (#18) from update-template-disk into main
ogboot/pipeline/head This commit looks good Details
Reviewed-on: #18
2025-06-27 13:03:25 +02:00
Luis Gerardo Romero Garcia abb8e1b7d5 refs #2219 removes bootmark, updates grub.exe to support ext and updates menu template and oglivecache to use new grub.exe 2025-06-27 13:01:19 +02:00
opengnsys ea4f29b3e0 Merge pull request 'refs #2321 removes ogdebug kernel param from controller and add it to oglive boot template' (#17) from ogdebug-kernel-param into main
ogboot/pipeline/head This commit looks good Details
Reviewed-on: #17
2025-06-25 16:34:05 +02:00
Luis Gerardo Romero Garcia 08a60c12d4 refs #2321 removes ogdebug kernel param from controller and add it to oglive boot template 2025-06-25 16:32:43 +02:00
Luis Gerardo Romero Garcia 6dfbe788a3 Merge pull request 'refs #2218 updates CHANGELOG' (#16) from update-template-disk into main
ogboot/pipeline/head This commit looks good Details
Reviewed-on: #16
2025-06-24 13:53:32 +02:00
Luis Gerardo Romero Garcia 3cada29dcd refs #2218 updates CHANGELOG 2025-06-24 13:47:17 +02:00
Luis Gerardo Romero Garcia b5c20a6a3b Merge pull request 'refs #2218 removes efi partition hardcoded in templates' (#15) from update-template-disk into main
ogboot/pipeline/head This commit looks good Details
Reviewed-on: #15
2025-06-24 13:45:49 +02:00
Luis Gerardo Romero Garcia d7fcc9a8e8 refs #2218 removes efi partition hardcoded in templates 2025-06-24 13:44:54 +02:00
Luis Gerardo Romero Garcia 62fc0bc889 refs #2218 updates CHANGELOG
ogboot/pipeline/head This commit looks good Details
2025-06-24 11:08:42 +02:00
Luis Gerardo Romero Garcia 760a57024b refs #2218 checks if a label exists to assign root when appropriate
ogboot/pipeline/head This commit looks good Details
2025-06-24 11:07:32 +02:00
Luis Gerardo Romero Garcia 91fd39a9a5 Fixes oglivecli to unmount mount points in case of any failure during the oglive installation script
ogboot/pipeline/head This commit looks good Details
2025-06-20 14:33:23 +02:00
Luis Gerardo Romero Garcia af9c3c33c7 Updates changelog
ogboot/pipeline/head This commit looks good Details
2025-06-20 11:57:45 +02:00
Luis Gerardo Romero Garcia 748acffdc0 Adds changes from fix bug in change ownership in oglivecli script when install oglive 2025-06-20 11:56:51 +02:00
Luis Gerardo Romero Garcia 753e9595b6 Fix bug in change ownership in oglivecli script when install oglive
ogboot/pipeline/head This commit looks good Details
2025-06-20 11:48:30 +02:00
Luis Gerardo Romero Garcia 6954cd3447 updates changelog
ogboot/pipeline/head This commit looks good Details
2025-06-18 13:59:38 +02:00
Your Name 20463d3f16 updates changelog
ogboot/pipeline/head This commit looks good Details
2025-06-18 11:41:11 +00:00
Your Name bfe5bb55cd Changes grubx64.ef with new imported modules
ogboot/pipeline/head Build queued... Details
2025-06-18 11:40:19 +00:00
Luis Gerardo Romero Garcia fec97eca8f Adds new template menu to boot disk partition and cache and adds ogliveadmnin kernel param
ogboot/pipeline/head This commit looks good Details
2025-06-18 08:45:17 +02:00
Luis Gerardo Romero Garcia a4fd473a57 updates changelog
ogboot/pipeline/head This commit looks good Details
2025-06-05 11:15:40 +02:00
Luis Gerardo Romero Garcia fdaf263255 Merge branch 'main' of https://ognproject.evlt.uma.es/gitea/opengnsys/ogboot
ogboot/pipeline/head This commit looks good Details
2025-06-05 10:17:05 +02:00
Luis Gerardo Romero Garcia f9124d3163 Adds more permissions to menu.lst template 2025-06-05 10:16:50 +02:00
Luis Gerardo Romero Garcia f95869a35b adds new compiled grubx64.efi
ogboot/pipeline/head This commit looks good Details
2025-06-05 07:49:47 +00:00
Luis Gerardo Romero Garcia 79d077590d Adds server_pxe_port parameter to createBootfile endpoint
ogboot/pipeline/head This commit looks good Details
2025-06-05 09:44:11 +02:00
Luis Gerardo Romero Garcia 60c4746906 adds new template disk and grub.cfg
ogboot/pipeline/head This commit looks good Details
2025-06-05 09:44:00 +02:00
Luis Gerardo Romero Garcia 52b2e645fa refs #2146 update template to use grubx64.efi and update createbootfile to use a templateDisk to booy by disk and partition 2025-06-05 09:43:13 +02:00
Luis Gerardo Romero Garcia f0b2380044 Update CHANGELOG for 0.7.1
ogboot/pipeline/tag This commit looks good Details
ogboot/pipeline/head This commit looks good Details
2025-05-19 08:43:29 +02:00
Luis Gerardo Romero Garcia 56bac7522e updates CHANGELOG
ogboot/pipeline/tag This commit looks good Details
ogboot/pipeline/head This commit looks good Details
2025-05-19 08:33:45 +02:00
Luis Gerardo Romero Garcia 5d6aea2e59 adds menu.lst with templateCache
ogboot/pipeline/head This commit looks good Details
2025-05-19 08:25:55 +02:00
root 09dc06a892 adds grub scripts to load with cache
ogboot/pipeline/head This commit looks good Details
2025-05-19 06:24:33 +00:00
Luis Gerardo Romero Garcia 29376ab546 refs #1880 adds new bootfile to boot by cache
ogboot/pipeline/head This commit looks good Details
2025-04-14 13:21:12 +02:00
Nicolas Arenas 14c1c4d54b Updates Jenkisfile
ogboot/pipeline/head This commit looks good Details
2025-04-10 15:53:53 +02:00
Nicolas Arenas 1223a6d829 refs #1846 Updates URL repo 2025-04-07 13:23:36 +02:00
Nicolas Arenas ca779b2a65 Merge remote-tracking branch 'refs/remotes/origin/main' 2025-04-07 10:34:11 +02:00
Nicolas Arenas e248b328c7 refs #1846 Updated postinstall script to use new URL 2025-04-07 10:32:46 +02:00
Nicolas Arenas a2c7501384 Updated postinstall script to use new URL 2025-04-07 10:29:47 +02:00
Nicolas Arenas 0b86d36c20 Update Jenkinsfile
ogboot/pipeline/tag This commit looks good Details
2025-03-27 08:59:56 +01:00
Nicolas Arenas 05540ffc61 Update samba config for ogboot
ogboot/pipeline/tag This commit looks good Details
2025-03-26 19:13:13 +01:00
Luis Gerardo Romero Garcia 63df8ff854 Adds public directory and index.php
ogboot/pipeline/tag This commit looks good Details
2025-03-26 16:29:41 +01:00
Nicolas Arenas c60c14ea97 updated ip 2025-03-26 16:26:56 +01:00
Nicolas Arenas 283b836a07 Updated environment file
ogboot/pipeline/tag This commit looks good Details
2025-03-26 15:39:51 +01:00
Nicolas Arenas 383b47798f Updated environment file
ogboot/pipeline/tag This commit looks good Details
2025-03-26 15:18:28 +01:00
Nicolas Arenas 0976f50056 Deleting ipxe boot file at begginig 2025-03-26 14:24:06 +01:00
Nicolas Arenas 8987169aab remove empty variable 2025-03-26 14:20:06 +01:00
Nicolas Arenas 2af4b40d22 adjust paths for post install
ogboot/pipeline/tag This commit looks good Details
2025-03-26 14:17:44 +01:00
Nicolas Arenas 7025eebc52 Fixing routes
ogboot/pipeline/tag This commit looks good Details
2025-03-26 14:03:19 +01:00
Nicolas Arenas e872dd0c82 Add missed folder to packages
ogboot/pipeline/tag This commit looks good Details
2025-03-26 13:40:33 +01:00
Nicolas Arenas b7f7915d18 Jenkins delete old deb files 2025-03-26 12:03:59 +01:00
Nicolas Arenas 1c7dbcbcd9 Updated changelog
ogboot/pipeline/tag This commit looks good Details
2025-03-26 12:01:41 +01:00
Nicolas Arenas 3d8f0c967d Updates debian packagin for new file placement
ogboot/pipeline/head This commit looks good Details
2025-03-26 11:43:43 +01:00
Luis Gerardo Romero Garcia b9e200a391 removes composer.lock 2025-03-25 08:31:21 +01:00
Luis Gerardo Romero Garcia 975dfef76f fix typo in composer 2025-03-25 08:20:30 +01:00
Luis Gerardo Romero Garcia bffdaeae79 changes compposer.phar directory 2025-03-25 08:17:53 +01:00
Luis Gerardo Romero Garcia d95a956972 divide /bin in two directorioes to symfony and to oglivecli 2025-03-25 07:57:46 +01:00
Luis Gerardo Romero Garcia 599c0d0428 move symfony directories to api directory in repo 2025-03-24 15:29:26 +01:00
Luis Gerardo Romero Garcia 54582427ad Merge branch 'changes-directories' 2025-03-24 13:10:06 +01:00
Luis Gerardo Romero Garcia b25c336359 Resolve merge conflict in installer/ogboot_installer.py 2025-03-24 13:08:06 +01:00
Nicolas Arenas 226fd17763 Fix typo
ogboot/pipeline/tag There was a failure building this commit Details
2025-03-19 14:33:52 +01:00
Nicolas Arenas 6691845345 Add jenkinsfile
ogboot/pipeline/tag There was a failure building this commit Details
2025-03-19 13:23:09 +01:00
Nicolas Arenas 8b4feb1e46 jenkins_upload_packages (#13)
Reviewed-on: #13

refers #1313
2025-03-19 13:17:29 +01:00
Luis Gerardo Romero Garcia e522ce29b1 refs #1686 moves bin and lib outside api directory 2025-03-11 08:33:13 +01:00
Luis Gerardo Romero Garcia 14f1fb4076 refs #1686 creates new api directory to symfony files, changes oglivecli and tftpboot directory location 2025-03-11 08:25:18 +01:00
68 changed files with 552 additions and 10208 deletions

View File

@ -1,5 +1,15 @@
# CHANGELOG
## [0.7.1] - 19/06/2025
### **Cambios principales**
1. Añade scripts de grub y menu.lst para el arranque del Oglive por cache
## [0.7.0] - 19/06/2025
### **Cambios principales**
1. No hay cambios, pasa el tag 0.5.12 a 0.6.0
## [0.6.0] - 25/02/2025
### **Cambios principales**

View File

@ -3,6 +3,70 @@
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.8.9] - 2024-06-30
### Changed
- Borra directorio samba de etc y modifica postint para que copie el fichero de configuración de la plantilla de samba
## [0.8.8] - 2024-06-27
### Changed
- Actualiza grub.exe para que soporte sistemas de particiones ext
- Actualiza las plantillas de arranque de menu para bios para que use el nuevo grub.exe
- Elimina la plantilla de bootmark obsoleta
## [0.8.7] - 2024-06-25
### Changed
- Elimina el parámetro de kernel ogdebug del controlador y se le añade a las plantillas de arranque de oglive
## [0.8.6] - 2024-06-24
### Changed
- Modifica la plantilla de arranque por disco y partición para no tener hardcodeado la partición EFI
## [0.8.5] - 2024-06-24
### Changed
- Comprueba si existe una etiqueta para asignar root cuando corresponda en la plantilla de arranque por disco y partición
## [0.8.4] - 2024-06-20
### Changed
- Corrige oglivecli para que desmonte los puntos de montaje ante cualquier fallo en el script de instalación de oglive
## [0.8.3] - 2024-06-20
### Changed
- Añade el cambio de la 0.8.2
## [0.8.2] - 2024-06-20
### Changed
- Corrige un bug en oglivecli que impide cambiar el propietario del oglive
## [0.8.1] - 2024-06-18
### Changed
- Añade nuevos modulos al grubx64.efi
## [0.8.0] - 2024-06-18
### Changed
- Actualiza a 0.8.0 para incluir los cambios de la versión 0.7.2
## [0.7.2] - 2024-06-05
### Changed
- Añade scripts de grub y menu.lst para el arranque por disco y partición
- Añade plantilla ogliveadmin con permisos de administracion como parametro del kernel
- Añade plantilla de menú para el arranque por disco y partición y caché
## [0.7.1] - 2024-05-19
### Changed
- Añade scripts de grub y menu.lst para el arranque del Oglive por cache
## [0.7.0] - 2024-03-26
### Changed
- Updated files location
## [0.6.3] - 2025-03-19
### Changed
- Jenkinsfile to upload debian packages
## [0.6.2] - 2025-03-19
### Changed
- Jenkinsfile to upload debian packages
## [0.6.1] - 2025-02-25
### Fixed
@ -54,4 +118,4 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
- Añade logs para todos los endpoints siguiendo un formato JSON preestablecido.
### Changed
- Actualiza `monolog.yaml` para enviar logs al `journal` de la máquina.
- Actualiza `monolog.yaml` para enviar logs al `journal` de la máquina.

View File

@ -48,16 +48,50 @@ pipeline {
}
}
}
stage('Generate Changelog (Nightly)'){
when {
branch 'main'
}
steps {
script {
def devName = params.DEV_NAME ? params.DEV_NAME : env.DEFAULT_DEV_NAME
def devEmail = params.DEV_EMAIL ? params.DEV_EMAIL : env.DEFAULT_DEV_EMAIL
generateDebianChangelog(env.BUILD_DIR, devName, devEmail,'nightly')
}
}
}
stage('Build') {
steps {
dir("${env.BUILD_DIR}") {
sh '''
dpkg-buildpackage -us -uc
mkdir -p ../artifacts && mv ../*.deb ../*.changes ../*.buildinfo ../artifacts/
ssh aptly@172.17.8.68 "rm -rf /var/tmp/opengnsys/debian-repo && mkdir -p /var/tmp/opengnsys/debian-repo"
scp -r ../artifacts/* aptly@172.17.8.68:/var/tmp/opengnsys/debian-repo/
'''
script {
construirPaquete(env.BUILD_DIR, "../artifacts", "172.17.8.68", "/var/tmp/opengnsys/debian-repo/ogboot")
}
}
}
stage ('Publish to Debian Repository') {
when {
expression {
return env.TAG_NAME != null
}
}
agent { label 'debian-repo' }
steps {
script {
// Construir el patrón de versión esperado en el nombre del paquete
def versionPattern = "${env.TAG_NAME}-${env.BUILD_NUMBER}"
publicarEnAptly('/var/tmp/opengnsys/debian-repo/ogboot', 'opengnsys-devel', versionPattern)
}
}
}
stage ('Publish to Debian Repository (Nightly)') {
when {
branch 'main'
}
agent { label 'debian-repo' }
steps {
script {
// Construir el patrón de versión esperado en el nombre del paquete
def versionPattern = "-${env.BUILD_NUMBER}~nightly"
publicarEnAptly('/var/tmp/opengnsys/debian-repo/ogboot', 'nightly', versionPattern)
}
}
}
@ -68,10 +102,3 @@ pipeline {
}
}
}
// stage ('Publish to Debian Repository') {
// agent { label 'debian-repo' }
// steps {
// sh "aptly repo add opengnsys-devel /var/tmp/opengnsys/debian-repo/*.deb"
// }
// }

View File

View File

@ -4,7 +4,7 @@
# Put parameters here that don't need to change on each machine where the app is deployed
# https://symfony.com/doc/current/best_practices.html#use-parameters-for-application-configuration
parameters:
tftpboot_dir: '%kernel.project_dir%/tftpboot'
tftpboot_dir: '%kernel.project_dir%/../tftpboot'
services:
# default configuration for services in *this* file
_defaults:

View File

@ -0,0 +1,9 @@
<?php
use App\Kernel;
require_once dirname(__DIR__).'/vendor/autoload_runtime.php';
return function (array $context) {
return new Kernel($context['APP_ENV'], (bool) $context['APP_DEBUG']);
};

Binary file not shown.

View File

@ -1447,6 +1447,7 @@ public function getBootFiles(): JsonResponse
* @OA\Property(property="mac", type="string", example="00:50:56:22:11:12"),
* @OA\Property(property="template_name", type="string", example="mi_plantilla.ipxe"),
* @OA\Property(property="server_ip", type="string", example="192.168.2.1"),
* @OA\Property(property="server_pxe_port", type="string", example="8082"),
* @OA\Property(property="oglivedir", type="string", example="ogLive")
* )
* ),
@ -1484,7 +1485,6 @@ public function createBootFile(Request $request): JsonResponse
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
$data = json_decode($request->getContent(), true);
$templateName = $data['template_name'] ?? null;
$mac = $this->validateAndFormatMac($data['mac'] ?? null);
//Si nos pasan el puerto se lo quitamos ya que server_ip siempre tirara por Samba
@ -1492,6 +1492,14 @@ public function createBootFile(Request $request): JsonResponse
if ($serverIp && strpos($serverIp, ':') !== false) {
$serverIp = explode(':', $serverIp)[0];
}
//Declaramos serverPxePort que lo usaremos para la llamada por http
$serverPxePort = $data['server_pxe_port'] ?? null;
$serverIpPort = $serverIp;
if (!empty($serverPxePort)) {
$serverIpPort .= ':' . $serverPxePort;
}
$ogLiveDir = $data['oglivedir'] ?? 'ogLive';
// Verificación de los campos obligatorios
@ -1529,6 +1537,7 @@ public function createBootFile(Request $request): JsonResponse
$parameters = [
'LANG' => $data['lang'] ?? 'es_ES.UTF-8',
'ip' => $data['ip'] ?? '',
'server_pxe_port' => $data['server_pxe_port'] ?? '',
'router' => $data['router'] ?? '',
'netmask' => $data['netmask'] ?? '',
'computer_name' => $data['computer_name'] ?? '',
@ -1581,7 +1590,7 @@ public function createBootFile(Request $request): JsonResponse
}
// Construcción de los argumentos del kernel
$kernelArgs = 'ro boot=oginit quiet splash irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true ogdebug=true ogtmpfs=15 ' .
$kernelArgs = 'ro boot=oginit quiet splash irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogtmpfs=15 ' .
'oglivedir=${ISODIR}' . ' ' .
'LANG=' . $parameters['LANG'] . ' ' .
'ip=' . $parameters['ip'] . ':' . $serverIp . ':' . $parameters['router'] . ':' . $parameters['netmask'] . ':' . $parameters['computer_name'] . ':' . $parameters['netiface'] . ':none ' .
@ -1600,12 +1609,7 @@ public function createBootFile(Request $request): JsonResponse
(is_numeric($parameters['resolution']) && $parameters['resolution'] <= 999 ? 'vga=' . $parameters['resolution'] :
(strpos($parameters['resolution'], ':') !== false ? 'video=' . $parameters['resolution'] : ' ' . $parameters['resolution']));
// Esta será llamada a http para arrancar kernel e imagen de inicialización
// Si lo requiriese debe llevar puerto ya que se comunica con nginx
$serverIpPort = $this->ogBootIP;
if (!empty($this->ogBootPort)) {
$serverIpPort .= ':' . $this->ogBootPort;
}
// Extraer solo el nombre del directorio si contiene una ruta completa PROVISIONAL
if (strpos($ogLiveDir, '/') !== false) {
$ogLiveDir = basename($ogLiveDir);
@ -1642,6 +1646,65 @@ public function createBootFile(Request $request): JsonResponse
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
return new JsonResponse(['error' => 'FAILED_TO_CREATE_PXE_FILE', 'message' => 'Error al crear el archivo PXE'], Response::HTTP_INTERNAL_SERVER_ERROR);
}
$templateCacheDir = $this->tftpbootDir . '/menu.lst';
$pxeFileName = '01-' . $mac;
$pxeFilePath = $templateCacheDir . '/' . $pxeFileName;
// Generar archivo si la plantilla es oglives cache o menu
if ($templateName === 'ogliveCache' || $templateName === 'menu') {
if ($templateName === 'ogliveCache') {
$templateCachePath = $templateCacheDir . '/templateCache';
} elseif ($templateName === 'menu') {
$templateCachePath = $templateCacheDir . '/templateMenu';
}
$templateCacheContent = file_get_contents($templateCachePath);
$grubContent = str_replace(
['__INFOHOST__', '__OGLIVE__'],
[$kernelArgs, basename($ogLiveDir)],
$templateCacheContent
);
}
// Generar archivo si la plantilla es de tipo disco/partición
elseif (in_array($templateName, ['firstDisk_firstPartition', 'firstDisk_secondPartition', 'firstDisk_thirdPartition'])) {
$templateDiskPath = $templateCacheDir . '/templateDisk';
$templateDiskContent = file_get_contents($templateDiskPath);
// Determinar DISK, PART y DISKPART en función del templateName
$map = [
'firstDisk_firstPartition' => ['disk' => '01', 'part' => '01', 'diskpart' => '(hd0,gpt1)'],
'firstDisk_secondPartition' => ['disk' => '01', 'part' => '02', 'diskpart' => '(hd0,gpt1)'],
'firstDisk_thirdPartition' => ['disk' => '01', 'part' => '03', 'diskpart' => '(hd0,gpt1)'],
];
$diskInfo = $map[$templateName];
// Sustituir variables en plantilla
$grubContent = str_replace(
['__DISK__', '__PART__', '__DISKPART__'],
[$diskInfo['disk'], $diskInfo['part'], $diskInfo['diskpart']],
$templateDiskContent
);
}
// En cualquier otro caso, no se hace nada
else {
return new JsonResponse(['success' => 'NO_TEMPLATE_ACTION', 'message' => 'No se requiere generar archivo PXE'], Response::HTTP_OK);
}
// Escribir el archivo PXE final (común a ambos casos)
if (file_put_contents($pxeFilePath, $grubContent) === false) {
$httpCode = '500';
$this->logger->error(json_encode([
'severity' => 'ERROR',
'operation' => $operation,
'component' => $component,
'http_code' => $httpCode,
'desc' => 'Failed to create PXE boot file.'
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
return new JsonResponse(['error' => 'FAILED_TO_CREATE_PXE_FILE', 'message' => 'Error al crear el archivo de arranque PXE'], Response::HTTP_INTERNAL_SERVER_ERROR);
}
$httpCode = '200';
$this->logger->info(json_encode([
'severity' => 'INFO',

View File

@ -30,8 +30,8 @@ class CurlRequestService
public function callOgLive($parameter)
{
// Ruta completa al script oglivecli
$ogLiveCliPath = sprintf("%s/bin/oglivecli", dirname(dirname(dirname(__DIR__))));
// $ogLiveCliPath = sprintf("%s/bin/oglivecli", dirname(dirname(dirname(__DIR__))));
$ogLiveCliPath = sprintf("%s/../../../../bin/oglivecli", __DIR__);
// Dividir el parámetro en acción y argumentos
$args = array_map('trim', explode(' ', $parameter));
$action = array_shift($args);

View File

@ -1,85 +0,0 @@
import os
import socket
import json
import subprocess
import logging
import stat
# Configuración de logging
logging.basicConfig(level=logging.INFO, filename='/var/log/oglive_daemon.log', filemode='a', format='%(asctime)s - %(levelname)s - %(message)s')
def handle_command(command):
action = command.get('action')
args = command.get('args', [])
cleaned_args = [arg.strip('\'"') for arg in args]
logging.info(f'Handling command: {action} with args: {cleaned_args}')
try:
if action in ['config', 'install', 'download', 'show', 'check', 'uninstall', 'disk_usage','list_installed_oglives','get_info','get_default','set_default','check_services_status']:
command_to_run = ['sudo', '/opt/ogboot/bin/oglivecli', action] + cleaned_args
logging.info(f'Running command: {" ".join(command_to_run)}')
process = subprocess.Popen(command_to_run, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
stdout, stderr = process.communicate()
logging.info(f'Command stdout: {stdout}')
logging.error(f'Command stderr: {stderr}')
# Asumimos que `stdout` contendrá el JSON válido
try:
json_output = json.loads(stdout)
return {"success": True, "output": json_output}
except json.JSONDecodeError as e:
logging.error(f'Error parsing JSON: {e} - Raw output: {stdout}')
return {"success": False, "error": f'Error parsing JSON: {str(e)} - Raw output: {stdout}'}
else:
return {"success": False, "error": "Unknown command"}
except Exception as e:
logging.error(f'Error handling command {action}: {e}')
return {"success": False, "error": str(e)}
def main():
# Crea el directorio si no existe
if not os.path.exists('/var/run/oglive'):
os.makedirs('/var/run/oglive', exist_ok=True)
socket_path = '/var/run/oglive/oglive_daemon.sock'
# Elimina el socket si existe
if os.path.exists(socket_path):
os.remove(socket_path)
server = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
server.bind(socket_path)
# Establece los permisos del socket
os.chmod(socket_path, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO) # Permisos para todos los usuarios
server.listen()
try:
while True:
logging.info('Daemon ready to accept connections')
conn, _ = server.accept()
with conn:
logging.info('Accepted connection')
data = conn.recv(1024)
if not data:
continue
try:
command = json.loads(data.decode('utf-8'))
logging.info(f'Received command: {command}')
except json.JSONDecodeError:
logging.error('Failed to decode JSON')
conn.sendall(json.dumps({"success": False, "error": "Invalid JSON"}).encode('utf-8'))
continue
response = handle_command(command)
conn.sendall(json.dumps(response).encode('utf-8'))
finally:
server.close()
if os.path.exists(socket_path):
os.remove(socket_path)
if __name__ == '__main__':
main()

View File

@ -334,6 +334,20 @@ function install() {
[ ! -d "$TMPDIR_SQUASHFS" ] && { echo "{\"error\": \"DIR_CREATION_FAILED\", \"message\": \"Failed to create/access directory $TMPDIR_SQUASHFS.\"}"; exit 500; }
trap "umount $TMPDIR" 1 2 3 6 9 15
cleanup() {
code=$?
umount "$OGLIVEFILE" >/dev/null 2>&1
umount "$TMPDIR" >/dev/null 2>&1
umount "$TMPDIR_SQUASHFS" >/dev/null 2>&1
if [ $code -ne 0 ]; then
echo "Something went wrong (exit code $code), cleaning up..."
rm -r "$OGLIVEDIR" >/dev/null 2>&1
fi
}
trap cleanup EXIT
mount "$OGLIVEFILE" >/dev/null 2>&1 || { echo "{\"error\": \"MOUNT_FAILED\", \"message\": \"Failed to mount ISO file.\"}"; exit 500; }
cp -va "$TMPDIR/ogclient/"* "$OGLIVEDIR" >/dev/null 2>&1 || { echo "{\"error\": \"COPY_FAILED\", \"message\": \"Cannot copy files to $OGLIVEDIR.\"}"; exit 500; }
@ -391,7 +405,7 @@ function install() {
}' > "$OGLIVEDIR/oglive_info.json"
[ ! -f "$OGLIVEDIR/oglive_info.json" ] && { echo "{\"error\": \"JSON_CREATION_FAILED\", \"message\": \"Failed to create oglive_info.json.\"}"; exit 500; }
sudo chown -R :opengnsys "$OGLIVEDIR" >/dev/null 2>&1 || { echo "{\"error\": \"CHOWN_FAILED\", \"message\": \"Failed to change ownership for $OGLIVEDIR.\"}"; exit 500; }
# chown -R :opengnsys "$OGLIVEDIR" >/dev/null 2>&1 || { echo "{\"error\": \"CHOWN_FAILED\", \"message\": \"Failed to change ownership for $OGLIVEDIR.\"}"; exit 500; }
JSON_OUTPUT=$(jq -n \
--arg id "$OGLIVEID" \
--arg dist "$OGLIVEDIST" \

View File

@ -1,8 +1,7 @@
#!/bin/bash
PROG=$(basename $0)
OPENGNSYS=${OPENGNSYS:-"/opt/ogboot"}
OGCFGFILE=$OPENGNSYS/etc/ogboot_samba.json
OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys/ogboot"}
SAMBAUSER="opengnsys" # Usuario por defecto.
TFTPDIR=$OPENGNSYS/tftpboot
INITRD=oginitrd.img
@ -18,7 +17,7 @@ fi
case $# in
0) # Cambios en todos los clientes ogLive instalados.
if which oglivecli &>/dev/null; then
LIST=$(oglivecli list | awk '{print $2}')
LIST=$(./oglivecli list_installed_oglives | jq -r '.installed_ogLives[].directory' | xargs -n1 basename)
else
LIST="ogclient"
fi ;;
@ -95,42 +94,6 @@ for OGLIVE in $LIST; do
sudo sed -i "s/OPTIONS=\(.*\)user=\w*\(.*\)pass=\w*\(.*\)/OPTIONS=\1user=$SAMBAUSER\2pass=$SAMBAPASS\3/" scripts/ogfunctions
# TEMPORAL: solución ticket 554, actualizar cliente en caché (ogLive r3257).
sudo sed -i "s/busybox reboot/reboot/" scripts/ogfunctions
# FIN CÓDIGO TEMPORAL.
# Ticket 565, preparar acceso Rsync cliente.
echo "$SAMBAPASS" | sudo tee scripts/passrsync > /dev/null
echo "Guardar tokens de seguridad"
cat <<EOT | sudo tee scripts/client.cfg > /dev/null
CLIENTID=$(jq -r .client.id $OGCFGFILE)
CLIENTSECRET=$(jq -r .client.secret $OGCFGFILE)
EOT
sudo chown ogboot:ogboot scripts/passrsync scripts/client.cfg
# pwd
# sudo find . -print > /tmp/filelist.txt
# if [ $? -ne 0 ]; then
# echo "Error: No se pudo encontrar los archivos."
# exit 5
# fi
# cpio -H newc -oa < /tmp/filelist.txt > /tmp/initrd.cpio
# if [ $? -ne 0 ]; then
# echo "Error: No se pudo crear el archivo CPIO."
# exit 5
# fi
# $COMPRESS_CMD < /tmp/initrd.cpio > /tmp/initrd.cpio.gz
# if [ $? -ne 0 ]; then
# echo "Error: No se pudo comprimir el archivo CPIO."
# exit 5
# fi
# echo "Copiando el contenido del archivo /tmp/initrd.cpio.gz al archivo /opt/opengnsys/tftpboot/ogLive-5.11.0-r20210413/oginitrd.img."
# echo $CLIENTINITRD
# dd if=/tmp/initrd.cpio.gz of=/opt/opengnsys/tftpboot/ogLive-5.11.0-r20210413/oginitrd.img
# echo "dd ejecutado correctamente"
# if [ $? -ne 0 ]; then
# echo "Error: No se pudo escribir el archivo comprimido en el destino."
# exit 5
# fi
# echo "borrando rm /tmp/initrd.cpio /tmp/initrd.cpio.gz"
# sudo rm /tmp/initrd.cpio /tmp/initrd.cpio.gz
find . | cpio -H newc -oa | gzip -9c > "$CLIENTINITRD"
else
echo "$PROG: Aviso: no se ha modificado la clave del cliente \"$OGLIVE\"."
@ -146,12 +109,8 @@ EOT
done
if [[ $CHANGES != 0 ]]; then
# Ticket 565, preparar acceso Rsync servidor.
echo "$SAMBAUSER:$SAMBAPASS" | sudo tee /etc/rsyncd.secrets > /dev/null
echo "chown debugging"
sudo chown root:root /etc/rsyncd.secrets
sudo chmod 600 /etc/rsyncd.secrets
# Cambiar clave Samba.
echo "Cambiando clave samba en el servidor"
echo -ne "$SAMBAPASS\n$SAMBAPASS\n" | sudo smbpasswd -a -s $SAMBAUSER
echo "setsmbpass finish"
else

9901
composer.lock generated

File diff suppressed because it is too large Load Diff

1
debian/ogboot.dirs vendored
View File

@ -1,2 +1,3 @@
/opt/opengnsys/ogboot/client_log
/opt/opengnsys/ogboot/mnt
/opt/opengnsys/ogboot/tftpboot

16
debian/ogboot.install vendored
View File

@ -1,16 +1,8 @@
bin /opt/opengnsys/ogboot
config /opt/opengnsys/ogboot/
doc /opt/opengnsys/ogboot/
docs /opt/opengnsys/ogboot/
api /opt/opengnsys/ogboot
etc /opt/opengnsys/ogboot
lib /opt/opengnsys/ogboot
public /opt/opengnsys/ogboot/
src /opt/opengnsys/ogboot/
templates /opt/opengnsys/ogboot/
bin /opt/opengnsys/ogboot
tftpboot /opt/opengnsys/ogboot/
var /opt/opengnsys/ogboot/
vendor /opt/opengnsys/ogboot/
composer.json /opt/opengnsys/ogboot/
composer.lock /opt/opengnsys/ogboot/
.env.local.php /opt/opengnsys/ogboot/

View File

@ -7,7 +7,8 @@ set -e
. /usr/share/debconf/confmodule
# Leer las variables de configuración
OGBOOT_DIR="/opt/opengnsys/ogboot"
OGBOOT_ROOT="/opt/opengnsys/ogboot"
OGBOOT_API_DIR="/opt/opengnsys/ogboot/api"
db_get opengnsys/ogboot_ip
OGBOOT_IP="$RET"
db_get opengnsys/ogboot_port
@ -22,13 +23,14 @@ OGCORE_OGLIVE_URL="$RET"
# SAMBA_PASS="$RET"
IPXE_REPO="https://github.com/ipxe/ipxe.git"
# IPXE_REPO="https://github.com/ipxe/ipxe.git"
IPXE_REPO="https://ognproject.evlt.uma.es/gitea/narenas/opengnsys_ipxe.git"
# Asegurarse de que el usuario exista
USER="opengnsys"
USER_INFO=$(getent passwd "$USER")
DEFAULT_OGLIVE=$OGCORE_OGLIVE_URL
ENV_FILE=/opt/opengnsys/ogboot/.env.local.php
ENV_FILE=/opt/opengnsys/ogboot/api/.env
if [ -z "$USER_INFO" ]; then
echo "Error: El usuario '$USER' no existe." >&2
exit 1
@ -50,7 +52,7 @@ configure_sudo() {
if [ ! -f /etc/sudoers.d/opengnsys ]; then
cp /opt/opengnsys/ogboot/etc/ogboot.sudoers /etc/sudoers.d/opengnsys
chmod 440 /etc/sudoers.d/opengnsys
sed -i "s|__OGBOOT_TARGET__|$OGBOOT_DIR|g" /etc/sudoers.d/opengnsys
sed -i "s|__OGBOOT_TARGET__|$OGBOOT_ROOT|g" /etc/sudoers.d/opengnsys
else
echo "El archivo /etc/sudoers.d/opengnsys ya existe."
fi
@ -98,34 +100,34 @@ install_oglive(){
configure_ipxe(){
echo "Configure ipxe templates"
cp $OGBOOT_DIR/etc/dhcp_boot.ipxe.tmpl $OGBOOT_DIR/tftpboot/ipxe_scripts/dhcp_boot.ipxe
cp $OGBOOT_DIR/etc/default.ipxe.tmpl $OGBOOT_DIR/tftpboot/ipxe_scripts/default.ipxe
sed -i "s|__SERVERIP__|$OGBOOT_IP|g" $OGBOOT_DIR/tftpboot/ipxe_scripts/dhcp_boot.ipxe
sed -i "s|__SERVERIP__|$OGBOOT_IP|g" $OGBOOT_DIR/tftpboot/ipxe_scripts/default.ipxe
cp $OGBOOT_ROOT/etc/dhcp_boot.ipxe.tmpl $OGBOOT_ROOT/tftpboot/ipxe_scripts/dhcp_boot.ipxe
cp $OGBOOT_ROOT/etc/default.ipxe.tmpl $OGBOOT_ROOT/tftpboot/ipxe_scripts/default.ipxe
sed -i "s|__SERVERIP__|$OGBOOT_IP|g" $OGBOOT_ROOT/tftpboot/ipxe_scripts/dhcp_boot.ipxe
sed -i "s|__SERVERIP__|$OGBOOT_IP|g" $OGBOOT_ROOT/tftpboot/ipxe_scripts/default.ipxe
echo "Instalando ipxe"
rm -rf /tmp/ipxe_repo
git clone $IPXE_REPO /tmp/ipxe_repo
if [ ! -f $OGBOOT_DIR/tftpboot/undionly.kpxe ]; then
if [ ! -f $OGBOOT_ROOT/tftpboot/undionly.kpxe ]; then
cd /tmp/ipxe_repo/src
make -s bin/undionly.kpxe EMBED=$OGBOOT_DIR/tftpboot/ipxe_scripts/dhcp_boot.ipxe
make -s bin-x86_64-efi/ipxe.efi EMBED=$OGBOOT_DIR/tftpboot/ipxe_scripts/dhcp_boot.ipxe
cp bin/undionly.kpxe $OGBOOT_DIR/tftpboot/
cp bin-x86_64-efi/ipxe.efi $OGBOOT_DIR/tftpboot/
make -j4 -s bin/undionly.kpxe EMBED=$OGBOOT_ROOT/tftpboot/ipxe_scripts/dhcp_boot.ipxe
make -j4 -s bin-x86_64-efi/ipxe.efi EMBED=$OGBOOT_ROOT/tftpboot/ipxe_scripts/dhcp_boot.ipxe
cp bin/undionly.kpxe $OGBOOT_ROOT/tftpboot/
cp bin-x86_64-efi/ipxe.efi $OGBOOT_ROOT/tftpboot/
fi
}
configure_api(){
echo "Modify env.local.php"
if ! dpkg-divert --list /opt/opengnsys/ogboot/.env.local.php >/dev/null 2>&1; then
dpkg-divert --add --rename --divert /opt/opengnsys/ogboot/.env.local.php.orig /opt/opengnsys/ogboot/.env.local.php
if ! grep -q "OGCORE_API_URL" $ENV_FILE; then
echo "OGCORE_API_URL=$OGCORE_API_URL" >> $ENV_FILE
fi
if [ ! -f "/opt/opengnsys/ogboot/.env.local.php" ] && [ -f "/opt/opengnsys/ogboot/.env.local.php.orig" ]; then
cp "/opt/opengnsys/ogboot/.env.local.php.orig" "/opt/opengnsys/ogboot/.env.local.php"
if ! grep -q "OGBOOT_IP" $ENV_FILE; then
echo "OGBOOT_IP=$OGBOOT_IP" >> $ENV_FILE
fi
if ! grep -q "OGBOOT_PORT" $ENV_FILE; then
echo "OGBOOT_PORT=$OGBOOT_PORT" >> $ENV_FILE
fi
sed -i "s|'OGBOOT_IP' => '.*'|'OGBOOT_IP' => '$OGBOOT_IP'|" "$ENV_FILE"
sed -i "s|'OGBOOT_PORT' => '.*'|'OGBOOT_PORT' => '$OGBOOT_PORT'|" "$ENV_FILE"
sed -i "s|'OGCORE_API_URL' => '.*'|'OGCORE_API_URL' => '$OGCORE_API_URL'|" "$ENV_FILE"
}
configure_nginx_and_fpm() {
@ -133,11 +135,11 @@ configure_nginx_and_fpm() {
PHP_VERSION=$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')
if [ ! -f /etc/nginx/sites-available/ogboot.conf ]; then
cp /opt/opengnsys/ogboot/etc/nginxServer.conf.tmpl /etc/nginx/sites-available/ogboot.conf
sed -i "s|__ROOT__|$OGBOOT_DIR|g" /etc/nginx/sites-available/ogboot.conf
sed -i "s|__ROOT__|$OGBOOT_API_DIR|g" /etc/nginx/sites-available/ogboot.conf
sed -i "s|__PHPVERSION__|$PHP_VERSION|g" /etc/nginx/sites-available/ogboot.conf
sed -i "s|__SERVERIP__|$OGBOOT_IP|g" /etc/nginx/sites-available/ogboot.conf
sed -i "s|__PORT__|$OGBOOT_PORT|g" /etc/nginx/sites-available/ogboot.conf
sed -i "s|__TFTPPATH__|$OGBOOT_DIR/tftpboot|g" /etc/nginx/sites-available/ogboot.conf
sed -i "s|__TFTPPATH__|$OGBOOT_ROOT/tftpboot|g" /etc/nginx/sites-available/ogboot.conf
ln -s /etc/nginx/sites-available/ogboot.conf /etc/nginx/sites-enabled/ogboot.conf
else
echo "El archivo /etc/nginx/sites-available/opengnsys ya existe."
@ -151,10 +153,9 @@ configure_nginx_and_fpm() {
configure_samba(){
echo "Configurando Samba"
mkdir -p /etc/samba/opengnsys/
cp /opt/opengnsys/ogboot/etc/samba/smb-ogboot.conf /etc/samba/opengnsys/
sed -i "s|__OGBOOT_DIR__|$OGBOOT_DIR|g" /etc/samba/opengnsys/smb-ogboot.conf
INCLUDE_LINE="include = /etc/samba/opengnsys/smb-ogboot.conf"
cp /opt/opengnsys/ogboot/etc/smb-ogboot.conf.tmpl /etc/samba/smb-ogboot.conf
sed -i "s|__OGBOOTDIR__|$OGBOOT_ROOT|g" /etc/samba/smb-ogboot.conf
INCLUDE_LINE="include = /etc/samba/smb-ogboot.conf"
if ! grep -q "$INCLUDE_LINE" /etc/samba/smb.conf; then
echo "$INCLUDE_LINE" | sudo tee -a /etc/samba/smb.conf > /dev/null
fi

13
debian/rules vendored
View File

@ -5,12 +5,9 @@
# Ejecutar composer install durante la fase de construcción
override_dh_auto_build:
export COMPOSER_ALLOW_SUPERUSER=1
export APP_ENV=prod
dh_auto_build
rm -rf var/cache/*
mkdir -p public
composer install --no-interaction --no-progress --optimize-autoloader
composer dump-env prod
composer update doctrine/dbal
cd api/; \
rm -rf var/cache/*; \
mkdir -p public; \
COMPOSER_ALLOW_SUPERUSER=1 APP_ENV=prod composer install --no-interaction --no-progress --optimize-autoloader; \
COMPOSER_ALLOW_SUPERUSER=1 APP_ENV=prod composer update doctrine/dbal;

View File

@ -1,16 +0,0 @@
[tftpboot]
comment = OpenGnsys init files
browseable = no
writeable = no
path = __OGBOOTDIR__/tftpboot
guest ok = no
[oglog]
comment = OpenGnsys Log
browseable = no
writeable = yes
locking = no
path = __OGBOOTDIR__/client_log
guest ok = no

View File

@ -1,7 +0,0 @@
[ogclient]
comment = OpenGnsys Client
browseable = no
writeable = no
locking = no
path = __OGBOOTDIR__/client
guest ok = no

View File

@ -242,6 +242,8 @@ def og_boot_create_dirs():
os.makedirs("/opt/opengnsys", mode=0o775, exist_ok=True)
subprocess.run(["chmod", "775", "/opt/opengnsys"])
os.makedirs(INSTALL_OGBOOT_TARGET, mode=0o775, exist_ok=True)
api_dir = os.path.join(INSTALL_OGBOOT_TARGET, "api")
os.makedirs(api_dir, mode=0o775, exist_ok=True)
# Cambiar el propietario de los directorios
subprocess.run(["chown", "-R", "opengnsys:opengnsys", INSTALL_OGBOOT_TARGET])
@ -256,11 +258,14 @@ def og_boot_symfony_install():
logger.info("Creating Symfony application skeleton...")
try:
# Copiar los archivos .env y composer.json primero
env_src = os.path.join(f"{REPO_DIR}", ".env")
composer_src = os.path.join(f"{REPO_DIR}", "composer.json")
env_dest = os.path.join(f"{INSTALL_OGBOOT_TARGET}", ".env")
composer_dest = os.path.join(f"{INSTALL_OGBOOT_TARGET}", "composer.json")
api_dir = os.path.join(INSTALL_OGBOOT_TARGET, "api")
os.makedirs(api_dir, exist_ok=True) # Asegurar que el directorio api existe
# Cambio de .env y composer.json bajo /api
api_source = os.path.join(REPO_DIR, "api")
env_src = os.path.join(api_source, ".env")
composer_src = os.path.join(api_source, "composer.json")
env_dest = os.path.join(api_dir, ".env")
composer_dest = os.path.join(api_dir, "composer.json")
shutil.copy(env_src, env_dest)
shutil.copy(composer_src, composer_dest)
@ -296,25 +301,32 @@ def og_boot_symfony_install():
def og_boot_copy_files():
api_dir = os.path.join(INSTALL_OGBOOT_TARGET, "api")
api_source = os.path.join(REPO_DIR, "api")
# api/bin que contendría los scripts composer y console de symfony
bin_api_source = os.path.join(api_source, "bin")
bin_api_dest = os.path.join(api_dir, "bin")
# api/bin que contendría los scripts oglivecli y setsmbpass
bin_source = os.path.join(REPO_DIR, "bin")
bin_dest = os.path.join(INSTALL_OGBOOT_TARGET, "bin")
src_source = os.path.join(REPO_DIR, "src")
src_dest = os.path.join(INSTALL_OGBOOT_TARGET, "src")
config_source = os.path.join(REPO_DIR, "config")
config_dest = os.path.join(INSTALL_OGBOOT_TARGET, "config")
src_source = os.path.join(api_source, "src")
src_dest = os.path.join(api_dir, "src")
config_source = os.path.join(api_source, "config")
config_dest = os.path.join(api_dir, "config")
# lib va fuera de /api
lib_source = os.path.join(REPO_DIR, "lib")
lib_dest = os.path.join(INSTALL_OGBOOT_TARGET, "lib")
#os.makedirs("/tmp/opt", exist_ok=True)
#subprocess.run(["chown", "-R", "ogboot:ogboot", "/tmp/opt"])
if os.path.exists(bin_dest):
shutil.rmtree(bin_dest)
shutil.copytree(bin_source, bin_dest)
if os.path.exists(bin_api_dest):
shutil.rmtree(bin_api_dest)
shutil.copytree(bin_api_source, bin_api_dest)
if os.path.exists(src_dest):
shutil.rmtree(src_dest)
shutil.copytree(src_source, src_dest)
@ -327,25 +339,27 @@ def og_boot_copy_files():
shutil.rmtree(lib_dest)
shutil.copytree(lib_source, lib_dest)
os.makedirs(os.path.join(INSTALL_OGBOOT_TARGET, "public"), mode=0o775, exist_ok=True)
os.makedirs(os.path.join(INSTALL_OGBOOT_TARGET, "etc"), mode=0o775, exist_ok=True)
os.makedirs(os.path.join(INSTALL_OGBOOT_TARGET, "client"), mode=0o775, exist_ok=True)
public_dir = os.path.join(api_dir, "public")
os.makedirs(public_dir, mode=0o775, exist_ok=True)
subprocess.run(["chmod", "-R", "775", INSTALL_OGBOOT_TARGET])
subprocess.run(["chown", "-R", "opengnsys:opengnsys", INSTALL_OGBOOT_TARGET])
def og_boot_composer_install():
# Ejecutar Composer como el usuario 'opengnsys' para instalar el proyecto Symfony
result = subprocess.run(["sudo", "-u", "opengnsys", "composer", "install", "--no-interaction", "--working-dir", INSTALL_OGBOOT_TARGET])
if result.returncode != 0:
logger.error("Error creating Symfony project using Composer")
return
api_dir = os.path.join(INSTALL_OGBOOT_TARGET, "api")
result = subprocess.run(
["sudo", "-u", "opengnsys", "composer", "install", "--no-interaction", "--working-dir", api_dir]
)
# Ejecutar Composer como el usuario 'opengnsys' para actualizar el paquete doctrine/dbal
result = subprocess.run(["sudo", "-u", "opengnsys", INSTALL_OGBOOT_TARGET+"/bin/composer.phar", "update", "doctrine/dbal", "--working-dir", INSTALL_OGBOOT_TARGET])
result = subprocess.run(["sudo", "-u", "opengnsys", INSTALL_OGBOOT_TARGET+"/api/bin/composer.phar", "update", "doctrine/dbal", "--working-dir", api_dir])
if result.returncode != 0:
logger.error("Error updating doctrine/dbal package using Composer")
return
subprocess.call(["chown", "-R", "opengnsys:opengnsys", f"{INSTALL_OGBOOT_TARGET}/public"])
subprocess.call(["chown", "-R", "opengnsys:opengnsys", f"{api_dir}/public"])
logger.info("Application skeleton created.")
@ -616,16 +630,16 @@ def setup_nginx():
ip_address_server = OGBOOT_IP
port_address_server = OGBOOT_PORT
php_version = get_php_fpm_version()
api_dir = os.path.join(INSTALL_OGBOOT_TARGET, "api")
# Leer y modificar la plantilla de configuración de nginx
template_path = os.path.join(REPO_DIR, "etc/nginxServer.conf.tmpl")
with open(template_path, 'r') as nginx_file:
nginx_content = nginx_file.read()
nginx_content = nginx_content.replace("__SERVERIP__", ip_address_server)
nginx_content = nginx_content.replace("__PORT__", port_address_server)
nginx_content = nginx_content.replace("__PHPVERSION__", php_version)
nginx_content = nginx_content.replace("__ROOT__", INSTALL_OGBOOT_TARGET)
nginx_content = nginx_content.replace("__ROOT__", api_dir)
nginx_content = nginx_content.replace("__TFTPPATH__", f"{INSTALL_OGBOOT_TARGET}/tftpboot")
# Ruta de destino para la configuración de nginx

19
tftpboot/grub.cfg 100644
View File

@ -0,0 +1,19 @@
cat grub.cfg
##NO-TOCAR-ESTA-LINEA ogLive
set timeout=0
set timeout_style=hidden
echo ">>> GRUB lanzador detectando MAC..."
sleep 1
echo ">>> MAC detectada: ${net_default_mac}"
sleep 1
echo ">>> Intentando cargar menú específico: /menu.lst/01-${net_default_mac}"
sleep 1
configfile /menu.lst/01-${net_default_mac}
echo ">>> No se pudo cargar /menu.lst/01-${net_default_mac}"
sleep 5
reboot

Binary file not shown.

View File

Binary file not shown.

View File

@ -1,36 +0,0 @@
#!ipxe
# Configuración inicial
set ISODIR ogLive
:bios_boot_first_second
echo "Booting firstboot and secondboot flow using GRUB4DOS..."
# Pasar control a GRUB4DOS para manejar firstboot y secondboot
chain tftp://__SERVERIP__/tftpboot/grub.exe --config-file="
# Configurar ISODIR
timeout 0
set ISODIR=${ISODIR};
# Firstboot
find --set-root --ignore-floppies --ignore-cd /ogboot.me checkrange 0x07 parttype > nul;
cmp /ogboot.me /ogboot.firstboot || goto secondboot;
write /ogboot.firstboot iniciado;
pause Firstboot passed. File updated. Press any key to continue...;
chainloader +1;
boot;
# Secondboot
:secondboot
find --set-root --ignore-floppies --ignore-cd /ogboot.me checkrange 0x07 parttype > nul;
cmp /ogboot.me /ogboot.secondboot || goto fallback;
write /ogboot.secondboot iniciado;
pause Secondboot passed. File updated. Press any key to continue...;
chainloader +1;
boot;
# Fallback
:fallback
pause Firstboot and Secondboot failed. Press any key to continue...;
quit;
" || echo "Failed to execute GRUB fallback sequence."

View File

@ -10,6 +10,6 @@ exit
:uefi_boot
echo "Running in UEFI mode - Booting first disk, first partition"
sanboot --no-describe --drive 0 --filename \EFI\Part-01-01\Boot\ogloader.efi || echo "Failed to boot in UEFI mode"
chain http://__SERVERIP__/tftpboot/grubx64.efi
exit

View File

@ -10,6 +10,7 @@ exit
:uefi_boot
echo "Running in UEFI mode - Booting first disk, second partition"
sanboot --no-describe --drive 0 --filename \EFI\Part-01-02\Boot\ogloader.efi || echo "Failed to boot in UEFI mode"
chain http://__SERVERIP__/tftpboot/grubx64.efi
exit

View File

@ -10,6 +10,7 @@ exit
:uefi_boot
echo "Running in UEFI mode - Booting first disk, third partition"
sanboot --no-describe --drive 0 --filename \EFI\Part-01-03\Boot\ogloader.efi || echo "Failed to boot in UEFI mode"
chain http://__SERVERIP__/tftpboot/grubx64.efi
exit

View File

@ -0,0 +1,74 @@
#!ipxe
# Detectar si se está ejecutando en modo UEFI o BIOS
iseq ${platform} efi && goto uefi_boot || goto bios_boot
:bios_boot
set timeout 3000
set esc:hex 1b
set bold ${esc:string}[1m
set boldoff ${esc:string}[22m
set fg_cya ${esc:string}[36m
set fg_whi ${esc:string}[37m
set ISODIR __OGLIVE__
set default 0
set kernelargs __INFOHOST__
:main_menu
clear menu
menu ${bold}${fg_cya}OpenGnsys iPXE Disk Boot Menu${boldoff}
item mbr Boot MBR (entire disk)
item part1 FirstDisk-FirstPartition
item part2 FirstHardDisk-SecondPartition
item part3 FirstDisk-ThirdPartition
item ogcache OpenGnsys CACHE
item ognet OpenGnsys NET
item ognetdef OpenGnsys NET Default
item shell iPXE Shell
choose --timeout ${timeout} --default mbr target && goto ${target}
:mbr
echo Booting MBR...
chain http://__SERVERIP__/tftpboot/grub.exe --config-file="timeout 1; title MBR; chainloader (hd0)+1; rootnoverify (hd0); boot" || echo Failed to boot MBR
exit
:part1
echo Booting FirstDisk-FirstPartition...
chain http://__SERVERIP__/tftpboot/grub.exe --config-file="timeout 1; title FirstDisk-FirstPartition; root (hd0,0); chainloader (hd0,0)+1; boot" || echo Failed to boot part1
exit
:part2
echo Booting FirstHardDisk-SecondPartition...
chain http://__SERVERIP__/tftpboot/grub.exe --config-file="timeout 1; title FirstHardDisk-SecondPartition; root (hd0,1); chainloader (hd0,1)+1; boot" || echo Failed to boot part2
exit
:part3
echo Booting FirstDisk-ThirdPartition...
chain http://__SERVERIP__/tftpboot/grub.exe --config-file="timeout 1; title FirstDisk-ThirdPartition; root (hd0,2); chainloader (hd0,2)+1; boot" || echo Failed to boot part3
exit
:ogcache
echo Booting OpenGnsys-CACHE...
chain http://__SERVERIP__/tftpboot/grub.exe --config-file="timeout 1; title OpenGnsys-CACHE; find --set-root /boot/__OGLIVE__/ogvmlinuz; kernel /boot/__OGLIVE__/ogvmlinuz ogactiveadmin=true ogdebug=true __INFOHOST__; initrd /boot/__OGLIVE__/oginitrd.img; boot"
:ognet
echo Booting OpenGnsys-NET...
kernel http://__SERVERIP__/tftpboot/${ISODIR}/ogvmlinuz ogactiveadmin=false ogdebug=false ${kernelargs} || goto fallback
initrd http://__SERVERIP__/tftpboot/${ISODIR}/oginitrd.img
boot
:ognetdef
echo Booting OpenGnsys-NET Default...
set ISODIR ogLive
kernel http://__SERVERIP__/tftpboot/${ISODIR}/ogvmlinuz ogactiveadmin=false ogdebug=false ${kernelargs}
initrd http://__SERVERIP__/tftpboot/${ISODIR}/oginitrd.img
boot
:shell
echo Launching iPXE shell...
shell
:uefi_boot
echo "Running in UEFI mode - Booting Menu"
chain http://__SERVERIP__/tftpboot/grubx64.efi
exit

View File

@ -7,13 +7,13 @@ set default 0
set kernelargs __INFOHOST__
# Menú de entrada para seleccionar OgLive
:try_iso
kernel http://__SERVERIP__/tftpboot/${ISODIR}/ogvmlinuz ${kernelargs} || goto fallback
kernel http://__SERVERIP__/tftpboot/${ISODIR}/ogvmlinuz ogdebug=false ${kernelargs} || goto fallback
initrd http://__SERVERIP__/tftpboot/${ISODIR}/oginitrd.img
boot
:fallback
echo "OgLive default"
set ISODIR ogLive
kernel http://__SERVERIP__/tftpboot/${ISODIR}/ogvmlinuz ${kernelargs}
kernel http://__SERVERIP__/tftpboot/${ISODIR}/ogvmlinuz ogdebug=false ${kernelargs}
initrd http://__SERVERIP__/tftpboot/${ISODIR}/oginitrd.img
boot

View File

@ -0,0 +1,19 @@
#!ipxe
set timeout 0
set timeout-style hidden
set ISODIR __OGLIVE__
set default 0
set kernelargs __INFOHOST__
# Menú de entrada para seleccionar OgLive
:try_iso
kernel http://__SERVERIP__/tftpboot/${ISODIR}/ogvmlinuz ogactiveadmin=true ogdebug=true ${kernelargs} || goto fallback
initrd http://__SERVERIP__/tftpboot/${ISODIR}/oginitrd.img
boot
:fallback
echo "OgLive default"
set ISODIR ogLive
kernel http://__SERVERIP__/tftpboot/${ISODIR}/ogvmlinuz ogactiveadmin=true ogdebug=true ${kernelargs}
initrd http://__SERVERIP__/tftpboot/${ISODIR}/oginitrd.img
boot

View File

@ -1,17 +1,16 @@
#!ipxe
# Configuración inicial
set ISODIR __OGLIVE__
set default 0
set kernelargs __INFOHOST__
:bios_boot_cache
echo "Booting ogLive from cache..."
# Detectar si se está ejecutando en modo UEFI o BIOS
iseq ${platform} efi && goto uefi_boot || goto bios_boot
chain tftp://__SERVERIP__/tftpboot/grub.exe --config-file="
timeout 0
set ISODIR=${ISODIR};
find --set-root --ignore-floppies --ignore-cd /boot/${ISODIR}/ogvmlinuz;
kernel /boot/${ISODIR}/ogvmlinuz ${kernelargs};
initrd /boot/${ISODIR}/oginitrd.img;
boot;
" || echo "Failed to boot ogLive from cache."
:bios_boot
echo "Running in BIOS mode"
# Si el cliente es BIOS, arranca el grub.pxe
chain http://__SERVERIP__/tftpboot/grub.exe --config-file="timeout 1; title OpenGnsys-CACHE; find --set-root /boot/__OGLIVE__/ogvmlinuz; kernel /boot/__OGLIVE__/ogvmlinuz ogactiveadmin=true ogdebug=true __INFOHOST__; initrd /boot/__OGLIVE__/oginitrd.img; boot"
exit
:uefi_boot
echo "Running in UEFI mode"
# Si el cliente es UEFI, arranca el grubx64.efi
chain http://__SERVERIP__/tftpboot/grubx64.efi
exit

View File

@ -0,0 +1,25 @@
##NO-TOCAR-ESTA-LINEA ogLive
set timeout=0
set timeout_style=hidden
echo ">>> Iniciando GRUB embebido"
set ISODIR=__OGLIVE__
echo ">>> ISODIR definido como: $ISODIR"
echo ">>> Buscando ogvmlinuz en particiones locales..."
search --file --set=root /boot/$ISODIR/ogvmlinuz
if [ -n "$root" ]; then
echo ">>> OgLive encontrado en CACHE en $root"
echo ">>> Cargando kernel..."
linux /boot/$ISODIR/ogvmlinuz __INFOHOST__
echo ">>> Cargando initrd..."
initrd /boot/$ISODIR/oginitrd.img
echo ">>> Ejecutando boot"
boot
else
echo ">>> ogvmlinuz no encontrado en CACHE."
echo ">>> Reintentando en red o abortando..."
reboot
fi

View File

@ -0,0 +1,6 @@
if ! search --file --set root /Part-__DISK__-__PART__; then
search --file --set root /EFI/Part-__DISK__-__PART__/Boot/ogloader.efi
fi
search --file --set rootEFI /EFI/Part-__DISK__-__PART__/Boot/ogloader.efi
chainloader ($rootEFI)/EFI/Part-__DISK__-__PART__/Boot/ogloader.efi
boot

View File

@ -0,0 +1,94 @@
set timeout=30
set detectado='no'
# Compruebo si existen distintos cargadores.
echo "Searching Grub"
set ISODIR=__OGLIVE__
search --file --set rootGrub /EFI/grub/Boot/grubx64.efi
if [ "$rootGrub" != "" ]; then
set detectado='si'
menuentry "Grub" {
root="$rootGrub"
chainloader /EFI/grub/Boot/grubx64.efi
}
fi
echo "Searching rEFInd"
search --file --set rootRefind /EFI/refind/shimx64.efi.signed
if [ "$rootRefind" != "" ]; then
menuentry "rEFInd" {
root="$rootRefind"
chainloader /EFI/refind/shimx64.efi.signed
}
fi
if ! search --file --set rootP2 /Part-01-02; then
search --file --set rootP2 /EFI/Part-01-02/Boot/ogloader.efi
fi
search --file --set rootEFI /EFI/Part-01-02/Boot/ogloader.efi
if [ "$rootP2" != "" ]; then
set detectado='si'
menuentry "Part-01-02" {
root="$rootP2"
chainloader ($rootEFI)/EFI/Part-01-02/Boot/ogloader.efi
}
fi
if ! search --file --set rootP3 /Part-01-03; then
search --file --set rootP3 /EFI/Part-01-03/Boot/ogloader.efi
fi
search --file --set rootEFI /EFI/Part-01-03/Boot/ogloader.efi
if [ "$rootEFI" != "" ]; then
set detectado='si'
menuentry "Part-01-03" {
root="$rootP3"
chainloader ($rootEFI)/EFI/Part-01-03/Boot/ogloader.efi
}
fi
echo "Searching Windows"
search --file --set rootMS /EFI/Microsoft/Boot/bootmgfw.efi
if [ "$rootMS" != "" ]; then
set detectado='si'
menuentry "Windows" {
root="$rootMS"
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
fi
echo "Searching Ubuntu"
search --file --set rootUb /EFI/ubuntu/grubx64.efi
if [ "$rootUb" != "" ]; then
set detectado='si'
menuentry "Ubuntu"{
root="$rootUb"
chainloader /EFI/ubuntu/grubx64.efi
}
fi
echo "Buscando ogvmlinuz en particiones locales..."
search --file --set=rootOgCache /boot/$ISODIR/ogvmlinuz
if [ "$rootOgCache" != "" ]; then
set detectado='si'
menuentry "Oglive Cache"{
root="$rootOgCache"
linux /boot/$ISODIR/ogvmlinuz __INFOHOST__
initrd /boot/$ISODIR/oginitrd.img
}
fi
# Si no hay ningún sistema operativo muestro mensaje.
if [ $detectado == 'no' ]; then
menuentry "OpenGnsys no ha detectado ningún sistema operativo" {
# para evitar mensajes de error.
set root="(hd0,gpt1)"
}
fi