diff --git a/i18n-docu/docs/assets/css/extra.css b/i18n-docu/docs/assets/css/extra.css new file mode 100644 index 0000000..e69de29 diff --git a/i18n-docu/docs/assets/css/mobile.css b/i18n-docu/docs/assets/css/mobile.css new file mode 100644 index 0000000..f0ef5b7 --- /dev/null +++ b/i18n-docu/docs/assets/css/mobile.css @@ -0,0 +1,26 @@ +/* Ajustes para dispositivos móviles */ +@media (max-width: 768px) { + .md-content { + padding: 0 10px; + } + .md-sidebar { + display: none; + } + .md-nav { + margin: 0; + } + .md-typeset h1, + .md-typeset h2, + .md-typeset h3 { + margin: 0.5rem 0; + font-size: 1.2rem; + } + .md-typeset p { + font-size: 0.9rem; + line-height: 1.4; + } + .md-search { + width: 100%; + max-width: 100%; + } +} diff --git a/i18n-docu/docs/assets/css/pdf-custom.css b/i18n-docu/docs/assets/css/pdf-custom.css new file mode 100644 index 0000000..35b6303 --- /dev/null +++ b/i18n-docu/docs/assets/css/pdf-custom.css @@ -0,0 +1,96 @@ +/* Estilos básicos para PDF */ +@page { + size: A4; + margin: 2cm; +} + +body { + font-family: "Roboto", -apple-system, BlinkMacSystemFont, Helvetica, Arial, sans-serif; + font-size: 12pt; + line-height: 1.5; +} + +h1, h2, h3, h4, h5, h6 { + color: #3f51b5; /* Color indigo como tu tema */ + font-weight: 400; + margin-top: 1.5em; +} + +h1 { + font-size: 24pt; + page-break-before: always; +} + +h2 { + font-size: 20pt; +} + +h3 { + font-size: 16pt; +} + +a { + color: #3f51b5; + text-decoration: none; +} + +pre, code { + font-family: "Roboto Mono", SFMono-Regular, Consolas, Menlo, monospace; + font-size: 10pt; + background-color: #f5f5f5; + padding: 0.2em 0.4em; + border-radius: 3px; +} + +pre { + padding: 1em; + overflow: auto; + page-break-inside: avoid; +} + +table { + border-collapse: collapse; + width: 100%; + margin: 1em 0; +} + +table, th, td { + border: 1px solid #ddd; +} + +th, td { + padding: 0.5em; + text-align: left; +} + +th { + background-color: #f5f5f5; +} + +img { + max-width: 100%; + height: auto; +} + +/* Evitar saltos de página en elementos importantes */ +pre, blockquote, table, figure { + page-break-inside: avoid; +} + +/* Asegurar que los encabezados no queden al final de la página */ +h1, h2, h3, h4, h5, h6 { + page-break-after: avoid; +} + +/* Estilo para admonitions/notas */ +.admonition { + margin: 1em 0; + padding: 0.5em 1em; + border-left: 4px solid #3f51b5; + background-color: #e8eaf6; + page-break-inside: avoid; +} + +.admonition-title { + font-weight: bold; +} diff --git a/i18n-docu/docs/assets/images/og_balls.png b/i18n-docu/docs/assets/images/og_balls.png new file mode 100644 index 0000000..febc69c Binary files /dev/null and b/i18n-docu/docs/assets/images/og_balls.png differ diff --git a/i18n-docu/docs/assets/images/og_balls_favicon.png b/i18n-docu/docs/assets/images/og_balls_favicon.png new file mode 100644 index 0000000..9e8a69f Binary files /dev/null and b/i18n-docu/docs/assets/images/og_balls_favicon.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 21.51.37.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 21.51.37.png new file mode 100644 index 0000000..8283285 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 21.51.37.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 21.53.22.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 21.53.22.png new file mode 100644 index 0000000..d45527d Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 21.53.22.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.08.01.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.08.01.png new file mode 100644 index 0000000..84dfeff Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.08.01.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.08.10.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.08.10.png new file mode 100644 index 0000000..62f43db Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.08.10.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.08.30.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.08.30.png new file mode 100644 index 0000000..569f47f Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.08.30.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.08.36.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.08.36.png new file mode 100644 index 0000000..5ef5f8f Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.08.36.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.08.47.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.08.47.png new file mode 100644 index 0000000..99de102 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.08.47.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.08.56.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.08.56.png new file mode 100644 index 0000000..1324b13 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.08.56.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.09.02.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.09.02.png new file mode 100644 index 0000000..46a5e28 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.09.02.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.09.06.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.09.06.png new file mode 100644 index 0000000..52db4d8 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.09.06.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.09.18.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.09.18.png new file mode 100644 index 0000000..2ba83a2 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.09.18.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.09.37.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.09.37.png new file mode 100644 index 0000000..2ce71b6 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.09.37.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.09.54.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.09.54.png new file mode 100644 index 0000000..29b67a5 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.09.54.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.10.28.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.10.28.png new file mode 100644 index 0000000..16286c2 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.10.28.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.10.32.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.10.32.png new file mode 100644 index 0000000..5a29f9a Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.10.32.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.10.36.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.10.36.png new file mode 100644 index 0000000..3ca02f6 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.10.36.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.10.46.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.10.46.png new file mode 100644 index 0000000..63dfe6b Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.10.46.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.10.54.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.10.54.png new file mode 100644 index 0000000..4870278 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.10.54.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.11.27.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.11.27.png new file mode 100644 index 0000000..f65c672 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.11.27.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.11.46.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.11.46.png new file mode 100644 index 0000000..e8576d9 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.11.46.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.11.51.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.11.51.png new file mode 100644 index 0000000..7208ec2 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.11.51.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.12.22.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.12.22.png new file mode 100644 index 0000000..af227c6 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.12.22.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.13.08.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.13.08.png new file mode 100644 index 0000000..987e81a Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 22.13.08.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.26.08.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.26.08.png new file mode 100644 index 0000000..c30056b Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.26.08.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.26.19.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.26.19.png new file mode 100644 index 0000000..2d73592 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.26.19.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.27.29.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.27.29.png new file mode 100644 index 0000000..ee63634 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.27.29.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.38.03 (2).png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.38.03 (2).png new file mode 100644 index 0000000..a09a7e3 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.38.03 (2).png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.38.03.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.38.03.png new file mode 100644 index 0000000..8ead5cd Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.38.03.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.38.11.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.38.11.png new file mode 100644 index 0000000..14b45f6 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.38.11.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.38.47.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.38.47.png new file mode 100644 index 0000000..fd5785a Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.38.47.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.39.23.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.39.23.png new file mode 100644 index 0000000..c332766 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.39.23.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.39.40.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.39.40.png new file mode 100644 index 0000000..6a2f509 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.39.40.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.40.20.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.40.20.png new file mode 100644 index 0000000..1f97204 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.40.20.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.44.10.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.44.10.png new file mode 100644 index 0000000..3342567 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.44.10.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.45.13.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.45.13.png new file mode 100644 index 0000000..599b83c Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.45.13.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.46.23.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.46.23.png new file mode 100644 index 0000000..7d7fc27 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.46.23.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.52.41.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.52.41.png new file mode 100644 index 0000000..cdaeb39 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.52.41.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.52.49.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.52.49.png new file mode 100644 index 0000000..5b33310 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.52.49.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.53.00.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.53.00.png new file mode 100644 index 0000000..87687bb Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.53.00.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.53.02.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.53.02.png new file mode 100644 index 0000000..7f792f5 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.53.02.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.53.08.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.53.08.png new file mode 100644 index 0000000..b2d3a2a Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.53.08.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.53.18.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.53.18.png new file mode 100644 index 0000000..db6cce7 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.53.18.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.54.05.png b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.54.05.png new file mode 100644 index 0000000..d96755f Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Captura de pantalla 2025-05-17 a las 23.54.05.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen 1.png b/i18n-docu/docs/assets/images/screenshots/Imagen 1.png new file mode 100644 index 0000000..9573304 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen 1.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen1.png b/i18n-docu/docs/assets/images/screenshots/Imagen1.png new file mode 100644 index 0000000..d5e92bc Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen1.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen10.png b/i18n-docu/docs/assets/images/screenshots/Imagen10.png new file mode 100644 index 0000000..f4e1e1a Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen10.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen11.png b/i18n-docu/docs/assets/images/screenshots/Imagen11.png new file mode 100644 index 0000000..35d11a8 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen11.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen12.png b/i18n-docu/docs/assets/images/screenshots/Imagen12.png new file mode 100644 index 0000000..16eda4e Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen12.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen13.png b/i18n-docu/docs/assets/images/screenshots/Imagen13.png new file mode 100644 index 0000000..30e9023 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen13.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen14.png b/i18n-docu/docs/assets/images/screenshots/Imagen14.png new file mode 100644 index 0000000..b9415bf Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen14.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen15.png b/i18n-docu/docs/assets/images/screenshots/Imagen15.png new file mode 100644 index 0000000..9ccbb40 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen15.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen16.png b/i18n-docu/docs/assets/images/screenshots/Imagen16.png new file mode 100644 index 0000000..ec05c57 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen16.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen17.png b/i18n-docu/docs/assets/images/screenshots/Imagen17.png new file mode 100644 index 0000000..b7d459e Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen17.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen18.png b/i18n-docu/docs/assets/images/screenshots/Imagen18.png new file mode 100644 index 0000000..e9ac129 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen18.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen19.png b/i18n-docu/docs/assets/images/screenshots/Imagen19.png new file mode 100644 index 0000000..73d6fac Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen19.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen2.png b/i18n-docu/docs/assets/images/screenshots/Imagen2.png new file mode 100644 index 0000000..188a0c2 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen2.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen20.png b/i18n-docu/docs/assets/images/screenshots/Imagen20.png new file mode 100644 index 0000000..ececed1 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen20.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen21.png b/i18n-docu/docs/assets/images/screenshots/Imagen21.png new file mode 100644 index 0000000..99449c9 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen21.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen22.png b/i18n-docu/docs/assets/images/screenshots/Imagen22.png new file mode 100644 index 0000000..326cc3c Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen22.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen23.png b/i18n-docu/docs/assets/images/screenshots/Imagen23.png new file mode 100644 index 0000000..1df12b8 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen23.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen24.png b/i18n-docu/docs/assets/images/screenshots/Imagen24.png new file mode 100644 index 0000000..27d6336 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen24.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen25.png b/i18n-docu/docs/assets/images/screenshots/Imagen25.png new file mode 100644 index 0000000..20caf8e Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen25.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen26.png b/i18n-docu/docs/assets/images/screenshots/Imagen26.png new file mode 100644 index 0000000..9573304 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen26.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen27.png b/i18n-docu/docs/assets/images/screenshots/Imagen27.png new file mode 100644 index 0000000..74d2e95 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen27.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen28.png b/i18n-docu/docs/assets/images/screenshots/Imagen28.png new file mode 100644 index 0000000..d59cc80 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen28.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen29.png b/i18n-docu/docs/assets/images/screenshots/Imagen29.png new file mode 100644 index 0000000..011d0f3 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen29.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen3.png b/i18n-docu/docs/assets/images/screenshots/Imagen3.png new file mode 100644 index 0000000..72ec67c Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen3.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen30.png b/i18n-docu/docs/assets/images/screenshots/Imagen30.png new file mode 100644 index 0000000..8bb288a Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen30.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen31.png b/i18n-docu/docs/assets/images/screenshots/Imagen31.png new file mode 100644 index 0000000..fb797ba Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen31.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen4.png b/i18n-docu/docs/assets/images/screenshots/Imagen4.png new file mode 100644 index 0000000..b96922e Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen4.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen5.png b/i18n-docu/docs/assets/images/screenshots/Imagen5.png new file mode 100644 index 0000000..694d21c Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen5.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen6.png b/i18n-docu/docs/assets/images/screenshots/Imagen6.png new file mode 100644 index 0000000..846939e Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen6.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen7.png b/i18n-docu/docs/assets/images/screenshots/Imagen7.png new file mode 100644 index 0000000..6276e60 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen7.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen8.png b/i18n-docu/docs/assets/images/screenshots/Imagen8.png new file mode 100644 index 0000000..c6fd635 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen8.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen9.png b/i18n-docu/docs/assets/images/screenshots/Imagen9.png new file mode 100644 index 0000000..47cd557 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen9.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Imagen9a.png b/i18n-docu/docs/assets/images/screenshots/Imagen9a.png new file mode 100644 index 0000000..f6ff1ed Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Imagen9a.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/Installatiion_type_selection.png b/i18n-docu/docs/assets/images/screenshots/Installatiion_type_selection.png new file mode 100644 index 0000000..b84e78b Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/Installatiion_type_selection.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/add_client_to_subnet.png b/i18n-docu/docs/assets/images/screenshots/add_client_to_subnet.png new file mode 100644 index 0000000..c4b5187 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/add_client_to_subnet.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/client_actions.png b/i18n-docu/docs/assets/images/screenshots/client_actions.png new file mode 100644 index 0000000..cff8943 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/client_actions.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/client_actions_1.png b/i18n-docu/docs/assets/images/screenshots/client_actions_1.png new file mode 100644 index 0000000..c960b2f Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/client_actions_1.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/client_create_image.png b/i18n-docu/docs/assets/images/screenshots/client_create_image.png new file mode 100644 index 0000000..beec323 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/client_create_image.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/client_deploy_image.png b/i18n-docu/docs/assets/images/screenshots/client_deploy_image.png new file mode 100644 index 0000000..d6d174e Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/client_deploy_image.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/client_info.png b/i18n-docu/docs/assets/images/screenshots/client_info.png new file mode 100644 index 0000000..31e2644 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/client_info.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/client_kea.png b/i18n-docu/docs/assets/images/screenshots/client_kea.png new file mode 100644 index 0000000..d6908e2 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/client_kea.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/convert_images.py b/i18n-docu/docs/assets/images/screenshots/convert_images.py new file mode 100755 index 0000000..c5b43f2 --- /dev/null +++ b/i18n-docu/docs/assets/images/screenshots/convert_images.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +import os +import subprocess +from pathlib import Path + +def convert_images(): + # Usar el directorio actual + source_dir = Path.cwd() + + # Crear directorio de salida en el directorio actual + output_dir = source_dir / "converted" + output_dir.mkdir(exist_ok=True) + + # Buscar archivos jpg + jpg_files = list(source_dir.glob('*.jpg')) + + if not jpg_files: + print("No se encontraron archivos JPG en el directorio actual.") + return + + print(f"Se encontraron {len(jpg_files)} archivos JPG para convertir.") + + # Convertir cada imagen + for jpg_file in jpg_files: + output_path = output_dir / f"{jpg_file.stem}.png" + + # Comando de conversión con ImageMagick + command = [ + "convert", + str(jpg_file), # Archivo de entrada + "-resize", "1280x768>", # Redimensionar, manteniendo proporción + "-format", "png", # Convertir a PNG + str(output_path) # Archivo de salida + ] + + try: + subprocess.run(command, check=True) + print(f"Convertido: {jpg_file.name} → {output_path.name}") + except subprocess.CalledProcessError as e: + print(f"Error al convertir {jpg_file.name}: {e}") + + print("Conversión completada!") + +# Ejecutar la función +convert_images() diff --git a/i18n-docu/docs/assets/images/screenshots/create-classroom-network-configuration.png b/i18n-docu/docs/assets/images/screenshots/create-classroom-network-configuration.png new file mode 100644 index 0000000..0daf036 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/create-classroom-network-configuration.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/create-classroom.png b/i18n-docu/docs/assets/images/screenshots/create-classroom.png new file mode 100644 index 0000000..f875aae Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/create-classroom.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/create_pc.png b/i18n-docu/docs/assets/images/screenshots/create_pc.png new file mode 100644 index 0000000..f09f6e7 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/create_pc.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/create_pxe_file.png b/i18n-docu/docs/assets/images/screenshots/create_pxe_file.png new file mode 100644 index 0000000..f8b0a1a Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/create_pxe_file.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/create_subnet.png b/i18n-docu/docs/assets/images/screenshots/create_subnet.png new file mode 100644 index 0000000..80860aa Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/create_subnet.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/created_pxe_file.png b/i18n-docu/docs/assets/images/screenshots/created_pxe_file.png new file mode 100644 index 0000000..0d4aca2 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/created_pxe_file.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/created_subnet_no_sync.png b/i18n-docu/docs/assets/images/screenshots/created_subnet_no_sync.png new file mode 100644 index 0000000..4486305 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/created_subnet_no_sync.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/global_state-boot.png b/i18n-docu/docs/assets/images/screenshots/global_state-boot.png new file mode 100644 index 0000000..cc981eb Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/global_state-boot.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/global_state-dhcp.png b/i18n-docu/docs/assets/images/screenshots/global_state-dhcp.png new file mode 100644 index 0000000..2610018 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/global_state-dhcp.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/global_state-repositories.png b/i18n-docu/docs/assets/images/screenshots/global_state-repositories.png new file mode 100644 index 0000000..1c61de1 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/global_state-repositories.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/groups_clients.png b/i18n-docu/docs/assets/images/screenshots/groups_clients.png new file mode 100644 index 0000000..801b6b8 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/groups_clients.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/groups_clients_1.png b/i18n-docu/docs/assets/images/screenshots/groups_clients_1.png new file mode 100644 index 0000000..72423b9 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/groups_clients_1.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/groups_general.png b/i18n-docu/docs/assets/images/screenshots/groups_general.png new file mode 100644 index 0000000..09f0ead Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/groups_general.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/groups_general_1.png b/i18n-docu/docs/assets/images/screenshots/groups_general_1.png new file mode 100644 index 0000000..15fe0b3 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/groups_general_1.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/image_repository.png b/i18n-docu/docs/assets/images/screenshots/image_repository.png new file mode 100644 index 0000000..40c27e5 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/image_repository.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/image_success.png b/i18n-docu/docs/assets/images/screenshots/image_success.png new file mode 100644 index 0000000..164f156 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/image_success.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/images.png b/i18n-docu/docs/assets/images/screenshots/images.png new file mode 100644 index 0000000..2b6c813 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/images.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/img.png b/i18n-docu/docs/assets/images/screenshots/img.png new file mode 100644 index 0000000..6673bfc Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/img.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/img2.png b/i18n-docu/docs/assets/images/screenshots/img2.png new file mode 100644 index 0000000..fa4241c Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/img2.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/img3.png b/i18n-docu/docs/assets/images/screenshots/img3.png new file mode 100644 index 0000000..4ea8d9a Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/img3.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/img_bbdd.png b/i18n-docu/docs/assets/images/screenshots/img_bbdd.png new file mode 100644 index 0000000..ce55b51 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/img_bbdd.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/menu_centers.png b/i18n-docu/docs/assets/images/screenshots/menu_centers.png new file mode 100644 index 0000000..69c266d Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/menu_centers.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/mononode_comp_selection.png b/i18n-docu/docs/assets/images/screenshots/mononode_comp_selection.png new file mode 100644 index 0000000..1bdf557 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/mononode_comp_selection.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/mononode_ip.png b/i18n-docu/docs/assets/images/screenshots/mononode_ip.png new file mode 100644 index 0000000..84813c1 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/mononode_ip.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/multinode_ip.png b/i18n-docu/docs/assets/images/screenshots/multinode_ip.png new file mode 100644 index 0000000..2cbf150 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/multinode_ip.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/netboot_menu_created_client_pxe.png b/i18n-docu/docs/assets/images/screenshots/netboot_menu_created_client_pxe.png new file mode 100644 index 0000000..4c1d11c Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/netboot_menu_created_client_pxe.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/ogarquitectura.png b/i18n-docu/docs/assets/images/screenshots/ogarquitectura.png new file mode 100644 index 0000000..53ada6c Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/ogarquitectura.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/ogboot_install.png b/i18n-docu/docs/assets/images/screenshots/ogboot_install.png new file mode 100644 index 0000000..4746ab1 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/ogboot_install.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/ogcore_install.png b/i18n-docu/docs/assets/images/screenshots/ogcore_install.png new file mode 100644 index 0000000..1bb9802 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/ogcore_install.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/ogdhcp_install.png b/i18n-docu/docs/assets/images/screenshots/ogdhcp_install.png new file mode 100644 index 0000000..f29dfbe Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/ogdhcp_install.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-administracion-roles-anadir_rol.png b/i18n-docu/docs/assets/images/screenshots/oggui-administracion-roles-anadir_rol.png new file mode 100644 index 0000000..e08624b Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-administracion-roles-anadir_rol.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-administracion-roles.png b/i18n-docu/docs/assets/images/screenshots/oggui-administracion-roles.png new file mode 100644 index 0000000..fc3f83b Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-administracion-roles.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-administracion-usuarios-anadir_usuario-rol.png b/i18n-docu/docs/assets/images/screenshots/oggui-administracion-usuarios-anadir_usuario-rol.png new file mode 100644 index 0000000..daaec06 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-administracion-usuarios-anadir_usuario-rol.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-administracion-usuarios-anadir_usuario-tarjetas.png b/i18n-docu/docs/assets/images/screenshots/oggui-administracion-usuarios-anadir_usuario-tarjetas.png new file mode 100644 index 0000000..1fcbcf3 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-administracion-usuarios-anadir_usuario-tarjetas.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-administracion-usuarios-anadir_usuario-uo.png b/i18n-docu/docs/assets/images/screenshots/oggui-administracion-usuarios-anadir_usuario-uo.png new file mode 100644 index 0000000..9518518 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-administracion-usuarios-anadir_usuario-uo.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-administracion-usuarios-anadir_usuario.png b/i18n-docu/docs/assets/images/screenshots/oggui-administracion-usuarios-anadir_usuario.png new file mode 100644 index 0000000..e4b0634 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-administracion-usuarios-anadir_usuario.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-administracion-usuarios-editar_usuario.png b/i18n-docu/docs/assets/images/screenshots/oggui-administracion-usuarios-editar_usuario.png new file mode 100644 index 0000000..f085ccb Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-administracion-usuarios-editar_usuario.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-administracion-usuarios.png b/i18n-docu/docs/assets/images/screenshots/oggui-administracion-usuarios.png new file mode 100644 index 0000000..d86ee34 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-administracion-usuarios.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-administracion-variables.png b/i18n-docu/docs/assets/images/screenshots/oggui-administracion-variables.png new file mode 100644 index 0000000..3ca704e Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-administracion-variables.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-boot-arranque_pxe-selecciona_aula.png b/i18n-docu/docs/assets/images/screenshots/oggui-boot-arranque_pxe-selecciona_aula.png new file mode 100644 index 0000000..10dd790 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-boot-arranque_pxe-selecciona_aula.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-boot-oglive-accion_ver.png b/i18n-docu/docs/assets/images/screenshots/oggui-boot-oglive-accion_ver.png new file mode 100644 index 0000000..59828a5 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-boot-oglive-accion_ver.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-boot-oglive-acciones.png b/i18n-docu/docs/assets/images/screenshots/oggui-boot-oglive-acciones.png new file mode 100644 index 0000000..a1804b9 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-boot-oglive-acciones.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-boot-oglive-anadir.png b/i18n-docu/docs/assets/images/screenshots/oggui-boot-oglive-anadir.png new file mode 100644 index 0000000..133e319 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-boot-oglive-anadir.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-boot-oglive-info.png b/i18n-docu/docs/assets/images/screenshots/oggui-boot-oglive-info.png new file mode 100644 index 0000000..dfeb85f Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-boot-oglive-info.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-boot-oglive.png b/i18n-docu/docs/assets/images/screenshots/oggui-boot-oglive.png new file mode 100644 index 0000000..9541912 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-boot-oglive.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-boot-plantillas_pxe-anadir.png b/i18n-docu/docs/assets/images/screenshots/oggui-boot-plantillas_pxe-anadir.png new file mode 100644 index 0000000..b08baed Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-boot-plantillas_pxe-anadir.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-boot-plantillas_pxe-detalles.png b/i18n-docu/docs/assets/images/screenshots/oggui-boot-plantillas_pxe-detalles.png new file mode 100644 index 0000000..599fd82 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-boot-plantillas_pxe-detalles.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-boot-plantillas_pxe-editar.png b/i18n-docu/docs/assets/images/screenshots/oggui-boot-plantillas_pxe-editar.png new file mode 100644 index 0000000..8dcd5f5 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-boot-plantillas_pxe-editar.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-boot-plantillas_pxe-info.png b/i18n-docu/docs/assets/images/screenshots/oggui-boot-plantillas_pxe-info.png new file mode 100644 index 0000000..9659569 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-boot-plantillas_pxe-info.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-boot-plantillas_pxe-selecciona_plantilla.png b/i18n-docu/docs/assets/images/screenshots/oggui-boot-plantillas_pxe-selecciona_plantilla.png new file mode 100644 index 0000000..73cba69 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-boot-plantillas_pxe-selecciona_plantilla.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-boot-plantillas_pxe.png b/i18n-docu/docs/assets/images/screenshots/oggui-boot-plantillas_pxe.png new file mode 100644 index 0000000..9523812 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-boot-plantillas_pxe.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-config_menu.png b/i18n-docu/docs/assets/images/screenshots/oggui-config_menu.png new file mode 100644 index 0000000..9162e6e Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-config_menu.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-config_usuarios.png b/i18n-docu/docs/assets/images/screenshots/oggui-config_usuarios.png new file mode 100644 index 0000000..47af0ac Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-config_usuarios.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-dhcp-administrar-anadir_cli.png b/i18n-docu/docs/assets/images/screenshots/oggui-dhcp-administrar-anadir_cli.png new file mode 100644 index 0000000..e265589 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-dhcp-administrar-anadir_cli.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-dhcp-administrar-anadir_sub.png b/i18n-docu/docs/assets/images/screenshots/oggui-dhcp-administrar-anadir_sub.png new file mode 100644 index 0000000..f0250f0 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-dhcp-administrar-anadir_sub.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-dhcp-administrar-editar_sub.png b/i18n-docu/docs/assets/images/screenshots/oggui-dhcp-administrar-editar_sub.png new file mode 100644 index 0000000..eb83293 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-dhcp-administrar-editar_sub.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-dhcp-administrar-gestionar_sub.png b/i18n-docu/docs/assets/images/screenshots/oggui-dhcp-administrar-gestionar_sub.png new file mode 100644 index 0000000..33138e5 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-dhcp-administrar-gestionar_sub.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-dhcp-administrar-info.png b/i18n-docu/docs/assets/images/screenshots/oggui-dhcp-administrar-info.png new file mode 100644 index 0000000..2d3cebe Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-dhcp-administrar-info.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-dhcp-administrar.png b/i18n-docu/docs/assets/images/screenshots/oggui-dhcp-administrar.png new file mode 100644 index 0000000..d02597d Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-dhcp-administrar.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-grupos-leyenda.png b/i18n-docu/docs/assets/images/screenshots/oggui-grupos-leyenda.png new file mode 100644 index 0000000..92fc70b Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-grupos-leyenda.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-grupos.png b/i18n-docu/docs/assets/images/screenshots/oggui-grupos.png new file mode 100644 index 0000000..770384a Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-grupos.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-grupos_crear.png b/i18n-docu/docs/assets/images/screenshots/oggui-grupos_crear.png new file mode 100644 index 0000000..0484838 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-grupos_crear.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-menus-admin.png b/i18n-docu/docs/assets/images/screenshots/oggui-menus-admin.png new file mode 100644 index 0000000..2cad361 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-menus-admin.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software-perfil-admin.png b/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software-perfil-admin.png new file mode 100644 index 0000000..9b6d2a8 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software-perfil-admin.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software-perfil-crear_formulario.png b/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software-perfil-crear_formulario.png new file mode 100644 index 0000000..02f44bf Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software-perfil-crear_formulario.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software-perfil-crear_seleccionar.png b/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software-perfil-crear_seleccionar.png new file mode 100644 index 0000000..fc8434c Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software-perfil-crear_seleccionar.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software-so-admin-crear.png b/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software-so-admin-crear.png new file mode 100644 index 0000000..bff3852 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software-so-admin-crear.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software-so-admin-editar.png b/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software-so-admin-editar.png new file mode 100644 index 0000000..a8b708a Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software-so-admin-editar.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software-so-admin.png b/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software-so-admin.png new file mode 100644 index 0000000..5f054a5 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software-so-admin.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software-software-crear.png b/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software-software-crear.png new file mode 100644 index 0000000..472333a Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software-software-crear.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software-software-editar.png b/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software-software-editar.png new file mode 100644 index 0000000..20071c1 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software-software-editar.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software.png b/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software.png new file mode 100644 index 0000000..ba8d999 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-perfiles_software.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-remotepc-calendarios-anadir.png b/i18n-docu/docs/assets/images/screenshots/oggui-remotepc-calendarios-anadir.png new file mode 100644 index 0000000..72c91c6 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-remotepc-calendarios-anadir.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-remotepc-calendarios.png b/i18n-docu/docs/assets/images/screenshots/oggui-remotepc-calendarios.png new file mode 100644 index 0000000..b330145 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-remotepc-calendarios.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-repositorios-anadir.png b/i18n-docu/docs/assets/images/screenshots/oggui-repositorios-anadir.png new file mode 100644 index 0000000..9272e39 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-repositorios-anadir.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-repositorios-monoliticas-image-acciones.png b/i18n-docu/docs/assets/images/screenshots/oggui-repositorios-monoliticas-image-acciones.png new file mode 100644 index 0000000..627bc08 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-repositorios-monoliticas-image-acciones.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-repositorios-monoliticas-image-edit.png b/i18n-docu/docs/assets/images/screenshots/oggui-repositorios-monoliticas-image-edit.png new file mode 100644 index 0000000..3bfb50b Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-repositorios-monoliticas-image-edit.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-repositorios-monoliticas-image-info.png b/i18n-docu/docs/assets/images/screenshots/oggui-repositorios-monoliticas-image-info.png new file mode 100644 index 0000000..5ca4ebd Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-repositorios-monoliticas-image-info.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-repositorios-monoliticas-repo-info.png b/i18n-docu/docs/assets/images/screenshots/oggui-repositorios-monoliticas-repo-info.png new file mode 100644 index 0000000..d3dec54 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-repositorios-monoliticas-repo-info.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-repositorios-monoliticas.png b/i18n-docu/docs/assets/images/screenshots/oggui-repositorios-monoliticas.png new file mode 100644 index 0000000..1e54106 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-repositorios-monoliticas.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui-repositorios.png b/i18n-docu/docs/assets/images/screenshots/oggui-repositorios.png new file mode 100644 index 0000000..193471b Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui-repositorios.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/oggui_install.png b/i18n-docu/docs/assets/images/screenshots/oggui_install.png new file mode 100644 index 0000000..59af11b Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/oggui_install.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/ogintro-equipomodelo.png b/i18n-docu/docs/assets/images/screenshots/ogintro-equipomodelo.png new file mode 100644 index 0000000..0f4509a Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/ogintro-equipomodelo.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/ogintro-model_organiza.png b/i18n-docu/docs/assets/images/screenshots/ogintro-model_organiza.png new file mode 100644 index 0000000..334e1d7 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/ogintro-model_organiza.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/ogintro-protocolos.png b/i18n-docu/docs/assets/images/screenshots/ogintro-protocolos.png new file mode 100644 index 0000000..343476a Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/ogintro-protocolos.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/ogintro-universidades.png b/i18n-docu/docs/assets/images/screenshots/ogintro-universidades.png new file mode 100644 index 0000000..6adff0f Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/ogintro-universidades.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/ogintro-webconsole.png b/i18n-docu/docs/assets/images/screenshots/ogintro-webconsole.png new file mode 100644 index 0000000..468e592 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/ogintro-webconsole.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/ogrepository_install.png b/i18n-docu/docs/assets/images/screenshots/ogrepository_install.png new file mode 100644 index 0000000..ec4f0e5 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/ogrepository_install.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 21.51.37.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 21.51.37.jpg new file mode 100644 index 0000000..32fd265 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 21.51.37.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 21.53.22.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 21.53.22.jpg new file mode 100644 index 0000000..0f497c3 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 21.53.22.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.08.01.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.08.01.jpg new file mode 100644 index 0000000..9078ee1 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.08.01.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.08.10.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.08.10.jpg new file mode 100644 index 0000000..52144b8 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.08.10.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.08.30.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.08.30.jpg new file mode 100644 index 0000000..a6e4fdd Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.08.30.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.08.36.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.08.36.jpg new file mode 100644 index 0000000..b35ddcd Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.08.36.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.08.47.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.08.47.jpg new file mode 100644 index 0000000..e026cf9 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.08.47.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.08.56.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.08.56.jpg new file mode 100644 index 0000000..e678291 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.08.56.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.09.02.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.09.02.jpg new file mode 100644 index 0000000..f16de31 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.09.02.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.09.06.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.09.06.jpg new file mode 100644 index 0000000..39b7b9f Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.09.06.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.09.18.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.09.18.jpg new file mode 100644 index 0000000..921294c Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.09.18.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.09.37.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.09.37.jpg new file mode 100644 index 0000000..b637f7e Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.09.37.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.09.54.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.09.54.jpg new file mode 100644 index 0000000..a0168a8 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.09.54.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.10.28.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.10.28.jpg new file mode 100644 index 0000000..cd3a0a0 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.10.28.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.10.32.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.10.32.jpg new file mode 100644 index 0000000..3d96feb Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.10.32.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.10.36.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.10.36.jpg new file mode 100644 index 0000000..d811b03 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.10.36.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.10.46.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.10.46.jpg new file mode 100644 index 0000000..a79615a Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.10.46.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.10.54.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.10.54.jpg new file mode 100644 index 0000000..64d6396 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.10.54.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.11.27.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.11.27.jpg new file mode 100644 index 0000000..a51ca36 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.11.27.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.11.46.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.11.46.jpg new file mode 100644 index 0000000..68389e6 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.11.46.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.11.51.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.11.51.jpg new file mode 100644 index 0000000..5eb45bc Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.11.51.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.12.22.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.12.22.jpg new file mode 100644 index 0000000..bf1ef9e Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.12.22.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.13.08.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.13.08.jpg new file mode 100644 index 0000000..5c672f8 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 22.13.08.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.26.08.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.26.08.jpg new file mode 100644 index 0000000..f8b9d35 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.26.08.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.26.19.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.26.19.jpg new file mode 100644 index 0000000..999bfc3 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.26.19.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.27.29.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.27.29.jpg new file mode 100644 index 0000000..6a80c09 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.27.29.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.38.03 (2).jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.38.03 (2).jpg new file mode 100644 index 0000000..ba4b281 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.38.03 (2).jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.38.03.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.38.03.jpg new file mode 100644 index 0000000..bb05304 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.38.03.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.38.11.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.38.11.jpg new file mode 100644 index 0000000..3692198 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.38.11.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.38.47.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.38.47.jpg new file mode 100644 index 0000000..aefaaef Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.38.47.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.39.23.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.39.23.jpg new file mode 100644 index 0000000..3f86f0a Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.39.23.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.39.40.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.39.40.jpg new file mode 100644 index 0000000..f4c59d8 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.39.40.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.40.20.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.40.20.jpg new file mode 100644 index 0000000..652f3c1 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.40.20.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.44.10.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.44.10.jpg new file mode 100644 index 0000000..47d1823 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.44.10.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.45.13.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.45.13.jpg new file mode 100644 index 0000000..a004da2 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.45.13.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.46.23.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.46.23.jpg new file mode 100644 index 0000000..07bdabd Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.46.23.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.52.41.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.52.41.jpg new file mode 100644 index 0000000..05cb77d Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.52.41.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.52.49.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.52.49.jpg new file mode 100644 index 0000000..c2bf1f5 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.52.49.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.53.00.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.53.00.jpg new file mode 100644 index 0000000..ba5b242 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.53.00.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.53.02.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.53.02.jpg new file mode 100644 index 0000000..1739767 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.53.02.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.53.08.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.53.08.jpg new file mode 100644 index 0000000..872713b Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.53.08.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.53.18.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.53.18.jpg new file mode 100644 index 0000000..c96b57f Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.53.18.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.54.05.jpg b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.54.05.jpg new file mode 100644 index 0000000..a16312e Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/Captura de pantalla 2025-05-17 a las 23.54.05.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/global_state-boot.jpg b/i18n-docu/docs/assets/images/screenshots/old/global_state-boot.jpg new file mode 100644 index 0000000..a49711e Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/global_state-boot.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/global_state-dhcp.jpg b/i18n-docu/docs/assets/images/screenshots/old/global_state-dhcp.jpg new file mode 100644 index 0000000..dc56600 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/global_state-dhcp.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/global_state-repositories.jpg b/i18n-docu/docs/assets/images/screenshots/old/global_state-repositories.jpg new file mode 100644 index 0000000..a253ea3 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/global_state-repositories.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-roles-anadir_rol.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-roles-anadir_rol.jpg new file mode 100644 index 0000000..d11531e Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-roles-anadir_rol.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-roles.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-roles.jpg new file mode 100644 index 0000000..fab30fe Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-roles.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-usuarios-anadir_usuario-rol.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-usuarios-anadir_usuario-rol.jpg new file mode 100644 index 0000000..8e3a07c Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-usuarios-anadir_usuario-rol.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-usuarios-anadir_usuario-tarjetas.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-usuarios-anadir_usuario-tarjetas.jpg new file mode 100644 index 0000000..dae52ce Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-usuarios-anadir_usuario-tarjetas.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-usuarios-anadir_usuario-uo.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-usuarios-anadir_usuario-uo.jpg new file mode 100644 index 0000000..b5d2606 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-usuarios-anadir_usuario-uo.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-usuarios-anadir_usuario.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-usuarios-anadir_usuario.jpg new file mode 100644 index 0000000..10732c9 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-usuarios-anadir_usuario.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-usuarios-editar_usuario.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-usuarios-editar_usuario.jpg new file mode 100644 index 0000000..9bc849e Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-usuarios-editar_usuario.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-usuarios.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-usuarios.jpg new file mode 100644 index 0000000..959f0cb Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-usuarios.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-variables.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-variables.jpg new file mode 100644 index 0000000..110c5b1 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-administracion-variables.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-arranque_pxe-selecciona_aula.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-arranque_pxe-selecciona_aula.jpg new file mode 100644 index 0000000..8e64624 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-arranque_pxe-selecciona_aula.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-oglive-accion_ver.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-oglive-accion_ver.jpg new file mode 100644 index 0000000..ab48596 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-oglive-accion_ver.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-oglive-acciones.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-oglive-acciones.jpg new file mode 100644 index 0000000..646a67e Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-oglive-acciones.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-oglive-anadir.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-oglive-anadir.jpg new file mode 100644 index 0000000..d466cb2 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-oglive-anadir.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-oglive-info.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-oglive-info.jpg new file mode 100644 index 0000000..f99f10e Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-oglive-info.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-oglive.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-oglive.jpg new file mode 100644 index 0000000..4462dfe Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-oglive.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-plantillas_pxe-anadir.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-plantillas_pxe-anadir.jpg new file mode 100644 index 0000000..49d604c Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-plantillas_pxe-anadir.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-plantillas_pxe-detalles.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-plantillas_pxe-detalles.jpg new file mode 100644 index 0000000..686ab7f Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-plantillas_pxe-detalles.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-plantillas_pxe-editar.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-plantillas_pxe-editar.jpg new file mode 100644 index 0000000..24273e0 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-plantillas_pxe-editar.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-plantillas_pxe-info.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-plantillas_pxe-info.jpg new file mode 100644 index 0000000..2c00cdc Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-plantillas_pxe-info.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-plantillas_pxe-selecciona_plantilla.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-plantillas_pxe-selecciona_plantilla.jpg new file mode 100644 index 0000000..85e3e57 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-plantillas_pxe-selecciona_plantilla.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-plantillas_pxe.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-plantillas_pxe.jpg new file mode 100644 index 0000000..46713e1 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-boot-plantillas_pxe.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-dhcp-administrar-anadir_cli.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-dhcp-administrar-anadir_cli.jpg new file mode 100644 index 0000000..4a8f7e4 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-dhcp-administrar-anadir_cli.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-dhcp-administrar-anadir_sub.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-dhcp-administrar-anadir_sub.jpg new file mode 100644 index 0000000..41c1337 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-dhcp-administrar-anadir_sub.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-dhcp-administrar-editar_sub.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-dhcp-administrar-editar_sub.jpg new file mode 100644 index 0000000..7028d20 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-dhcp-administrar-editar_sub.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-dhcp-administrar-gestionar_sub.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-dhcp-administrar-gestionar_sub.jpg new file mode 100644 index 0000000..2fd374c Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-dhcp-administrar-gestionar_sub.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-dhcp-administrar-info.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-dhcp-administrar-info.jpg new file mode 100644 index 0000000..fe61bcd Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-dhcp-administrar-info.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-dhcp-administrar.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-dhcp-administrar.jpg new file mode 100644 index 0000000..3f46775 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-dhcp-administrar.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-grupos-leyenda.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-grupos-leyenda.jpg new file mode 100644 index 0000000..911bd7e Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-grupos-leyenda.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-grupos.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-grupos.jpg new file mode 100644 index 0000000..c1f63d0 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-grupos.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-menus-admin.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-menus-admin.jpg new file mode 100644 index 0000000..3afb69b Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-menus-admin.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software-perfil-admin.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software-perfil-admin.jpg new file mode 100644 index 0000000..7404a91 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software-perfil-admin.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software-perfil-crear_formulario.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software-perfil-crear_formulario.jpg new file mode 100644 index 0000000..5e44030 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software-perfil-crear_formulario.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software-perfil-crear_seleccionar.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software-perfil-crear_seleccionar.jpg new file mode 100644 index 0000000..d8f3625 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software-perfil-crear_seleccionar.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software-so-admin-crear.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software-so-admin-crear.jpg new file mode 100644 index 0000000..5ac9e61 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software-so-admin-crear.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software-so-admin-editar.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software-so-admin-editar.jpg new file mode 100644 index 0000000..edc0a5f Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software-so-admin-editar.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software-so-admin.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software-so-admin.jpg new file mode 100644 index 0000000..26d4e83 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software-so-admin.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software-software-crear.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software-software-crear.jpg new file mode 100644 index 0000000..f856de6 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software-software-crear.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software-software-editar.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software-software-editar.jpg new file mode 100644 index 0000000..3566622 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software-software-editar.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software.jpg new file mode 100644 index 0000000..51da4e5 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-perfiles_software.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-remotepc-calendarios-anadir.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-remotepc-calendarios-anadir.jpg new file mode 100644 index 0000000..687df08 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-remotepc-calendarios-anadir.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-remotepc-calendarios.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-remotepc-calendarios.jpg new file mode 100644 index 0000000..f21ddd7 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-remotepc-calendarios.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-repositorios-anadir.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-repositorios-anadir.jpg new file mode 100644 index 0000000..cd451a0 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-repositorios-anadir.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-repositorios-monoliticas-image-acciones.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-repositorios-monoliticas-image-acciones.jpg new file mode 100644 index 0000000..c0445a8 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-repositorios-monoliticas-image-acciones.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-repositorios-monoliticas-image-edit.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-repositorios-monoliticas-image-edit.jpg new file mode 100644 index 0000000..fb383b5 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-repositorios-monoliticas-image-edit.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-repositorios-monoliticas-image-info.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-repositorios-monoliticas-image-info.jpg new file mode 100644 index 0000000..e6bced2 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-repositorios-monoliticas-image-info.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-repositorios-monoliticas-repo-info.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-repositorios-monoliticas-repo-info.jpg new file mode 100644 index 0000000..2019313 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-repositorios-monoliticas-repo-info.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-repositorios-monoliticas.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-repositorios-monoliticas.jpg new file mode 100644 index 0000000..a9392a1 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-repositorios-monoliticas.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/oggui-repositorios.jpg b/i18n-docu/docs/assets/images/screenshots/old/oggui-repositorios.jpg new file mode 100644 index 0000000..f8ea182 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/oggui-repositorios.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/old/ogintro-universidades.jpg b/i18n-docu/docs/assets/images/screenshots/old/ogintro-universidades.jpg new file mode 100644 index 0000000..1d678c9 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/old/ogintro-universidades.jpg differ diff --git a/i18n-docu/docs/assets/images/screenshots/opengsys-ogcore.png b/i18n-docu/docs/assets/images/screenshots/opengsys-ogcore.png new file mode 100644 index 0000000..9b29c9e Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/opengsys-ogcore.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/pxe_templates.menu.png b/i18n-docu/docs/assets/images/screenshots/pxe_templates.menu.png new file mode 100644 index 0000000..5cee070 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/pxe_templates.menu.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/select_multinode.png b/i18n-docu/docs/assets/images/screenshots/select_multinode.png new file mode 100644 index 0000000..4dacb3a Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/select_multinode.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/subnet_kea.png b/i18n-docu/docs/assets/images/screenshots/subnet_kea.png new file mode 100644 index 0000000..eb44d1a Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/subnet_kea.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/sync_subnet.png b/i18n-docu/docs/assets/images/screenshots/sync_subnet.png new file mode 100644 index 0000000..b063c92 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/sync_subnet.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/synced_subnet.png b/i18n-docu/docs/assets/images/screenshots/synced_subnet.png new file mode 100644 index 0000000..eda7bbf Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/synced_subnet.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/traces.png b/i18n-docu/docs/assets/images/screenshots/traces.png new file mode 100644 index 0000000..5460a2e Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/traces.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/traces_1.png b/i18n-docu/docs/assets/images/screenshots/traces_1.png new file mode 100644 index 0000000..6e310ff Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/traces_1.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/vb_client_ip.png b/i18n-docu/docs/assets/images/screenshots/vb_client_ip.png new file mode 100644 index 0000000..1bde6f9 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/vb_client_ip.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/vb_configuration.png b/i18n-docu/docs/assets/images/screenshots/vb_configuration.png new file mode 100644 index 0000000..a9633b3 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/vb_configuration.png differ diff --git a/i18n-docu/docs/assets/images/screenshots/vb_deploy_client.png b/i18n-docu/docs/assets/images/screenshots/vb_deploy_client.png new file mode 100644 index 0000000..8dc0fc5 Binary files /dev/null and b/i18n-docu/docs/assets/images/screenshots/vb_deploy_client.png differ diff --git a/i18n-docu/docs/en/.overrides b/i18n-docu/docs/en/.overrides new file mode 100644 index 0000000..d52c245 --- /dev/null +++ b/i18n-docu/docs/en/.overrides @@ -0,0 +1,13 @@ +nav: + Release_Notes: "Release Notes" + Installation: "Installation" + Administration: "Administration" + Developers: "Developers" + console: "Administration Interface" + dhcp: "ogDHCP - DHCP Service" + boot: "ogBoot - Boot Service" + oglive: "ogLive - Linux OpenGnsys Live" + ogclone: "Cloning Engine" + ogrepository: "Images Repository" + ogagent: "Client Agent" + oglog: "Log Service" diff --git a/i18n-docu/docs/en/administration/.pages b/i18n-docu/docs/en/administration/.pages new file mode 100644 index 0000000..8d2a764 --- /dev/null +++ b/i18n-docu/docs/en/administration/.pages @@ -0,0 +1,3 @@ +nav: + - DocumentacionCrearImage.md + - DocumentacionDeployImage.md diff --git a/i18n-docu/docs/en/administration/index.md b/i18n-docu/docs/en/administration/index.md new file mode 100644 index 0000000..5a06cdd --- /dev/null +++ b/i18n-docu/docs/en/administration/index.md @@ -0,0 +1,22 @@ +# OpenGnsys Administration + +Welcome to the administration section of OpenGnsys. This area provides detailed information about all the administrative components of the platform. + +## Main Components + +OpenGnsys consists of several administrative modules that work together to provide a complete solution for computer management and cloning: + +- **[Web Console](oggui.md)**: Main interface for managing computers and tasks. +- **[DHCP](ogdhcp.md)**: Configuration and management of the DHCP service for client booting. +- **[Boot System](ogboot.md)**: Mechanisms and configurations for client booting. +- **[ogLive](oglive.md)**: Minimal operating system for performing cloning operations. +- **[Cloning Engine](ogcloneengine.md)**: Core of computer cloning operations. +- **[Repository Management](ogrepository.md)**: Management of images and repositories. +- **[ogAgent](ogagent.md)**: Agent for communication between clients and server. +- **[Logs and Monitoring](oglog.md)**: Tools for tracking and analyzing operations. + +## Introduction to Administration + +OpenGnsys administration allows centralized management of a set of computers, creating and deploying disk images, performing maintenance operations, and monitoring the status of the equipment. + +This section offers detailed guides on each administrative component, with step-by-step instructions, configuration examples, and solutions to common problems. diff --git a/i18n-docu/docs/en/administration/ogagent.md b/i18n-docu/docs/en/administration/ogagent.md new file mode 100644 index 0000000..e69de29 diff --git a/i18n-docu/docs/en/administration/ogboot.md b/i18n-docu/docs/en/administration/ogboot.md new file mode 100644 index 0000000..e69de29 diff --git a/i18n-docu/docs/en/administration/ogcloneengine.md b/i18n-docu/docs/en/administration/ogcloneengine.md new file mode 100644 index 0000000..e69de29 diff --git a/i18n-docu/docs/en/administration/ogdhcp.md b/i18n-docu/docs/en/administration/ogdhcp.md new file mode 100644 index 0000000..ad402d2 --- /dev/null +++ b/i18n-docu/docs/en/administration/ogdhcp.md @@ -0,0 +1,144 @@ +# Documentation: Ocore and Oggui + +## Scenario + +We want to register a computer in the system and configure it so it can boot via PXE on a new subnet. This is the scenario: + +- **Computer**: + - MAC Address: `00:50:56:1e:9f:11` + - Name: `pc11` + - IP Address: `192.168.3.11` + +- **Subnet**: + - Address: `192.168.3.0` + - Netmask: `255.255.255.0` + +- **Boot Server**: + - `next-server`: `172.17.8.37` (ogboot component hosting the boot files) + - Boot File: `undionly.kpxe` + +The objective is to create the subnet `192.168.2.0/24`, add the computer `pc11` to this subnet with IP `192.168.3.11`, and generate the custom boot file for `pc11` from the `ogLive` PXE template. + +## Register a Computer + +### Create an Organizational Unit (Classroom) + +1. On the **Manage Groups** screen, click **New Organizational Unit**. +2. In the form: + - Select **Type** as `Classroom`. + - Assign a **Name** to the classroom, such as `Test Classroom`. + - Choose a **Parent Organizational Unit**, for example, `Classroom Groups 1`. +3. Click the **Next** button. + +![Menu of centers](../../assets/images/screenshots/menu_centers.png "Menu of centers") + +![Create classroom](../../assets/images/screenshots/create-classroom.png "Create classroom") + +4. In the next step of the Organizational Unit form, configure the network parameters. These parameters will later be used as kernel parameters when we create the boot files for the PCs in that classroom: + - **Netmask**: Set the subnet mask, for example, `255.255.255.0`. + - **Router**: Specify the default gateway for the subnet (e.g., `192.168.2.1`). +5. Click **Add** to create the organizational unit. + +![Classroom network configuration](../../assets/images/screenshots/create-classroom-network-configuration.png "Classroom network configuration") + +### Add a New Computer + +1. On the **Manage Groups** screen, click **New Client**. +2. Fill in the following fields: + - **Parent**: Select the Organizational Unit created earlier (e.g., `Test Classroom`). + - **Name**: The computer name `pc11`. + - **MAC**: The client's MAC address `00:50:56:1e:8f:11`. + - **IP Address**: The IP within the configured subnet `192.168.2.11`. + - **PXE Template**: Select the associated PXE template `ogLive` for Oglive boot. + - **Network Interface**: The client's network interface (e.g., `Eth0`). + - **Network Driver**: e.g., `Generic`. +3. Click **Add** to save the computer. + +![Create a computer](../../assets/images/screenshots/create_pc.png "Create a computer") + +## Create a New Subnet + +The goal is to create a subnet in the system and synchronize it with the **ogdhcp** component, which uses Kea DHCP to manage network configurations. + +### Create the Subnet + +1. Go to the **Manage Subnets** section. +2. Click the **Add Subnet** button. +3. In the subnet creation form, complete the following fields: + - **Name**: Assign an identifier, e.g., `Test Subnet`. + - **Netmask**: Specify the subnet mask `255.255.255.0`. + - **IP Address**: Set the base address of the subnet `192.168.3.0`. + - **Next Server**: Enter the boot server IP `172.17.8.37`. + - **Boot File Name**: Set the PXE boot file name `undionly.kpxe`. +4. Click **Save** to create the subnet in the system database. + +![Create a subnet](../../assets/images/screenshots/create_subnet.png "Create a subnet") + +Once created, the subnet will appear in the list with the status **Not Synchronized**. This indicates the subnet is registered in the database but has not yet been applied to the Kea DHCP service. + +![Created subnet not synced](../../assets/images/screenshots/created_subnet_no_sync.png "Created subnet not synced") + +--- + +### Synchronize the Subnet with Kea DHCP + +1. In the subnet list, locate the newly created subnet. +2. Click the actions button (menu icon) and select **Create in og-dhcp**. +3. This will send the subnet configuration to the `ogdhcp` component, which will update the **Kea DHCP** service. + +![Sync subnet](../../assets/images/screenshots/sync_subnet.png "Sync subnet") + +--- + +### Subnet Synchronized + +Once synchronized, the subnet will appear with the status **Synchronized** in the list (with a ✔️ icon). This indicates the configuration has been successfully applied to the Kea DHCP service. + +You can view the configuration created in Kea DHCP by clicking **Information on ogDHCP server** (at the top) and then **View information**. + +![Subnet KEA](../../assets/images/screenshots/subnet_kea.png "Subnet KEA") + +## Add a Client to a Subnet + +The goal is to add a PC to a specific subnet that is already registered and synchronized with the **ogdhcp** component. + +### Add Client to the Subnet + +1. In the subnet list, find the subnet to which you want to add the client, e.g., `192.168.3.0`. +2. Ensure the subnet is **Synchronized** (status icon with a ✔️). If it is not synchronized, perform the synchronization process first. +3. Click the actions button (menu icon) for the selected subnet. +4. In the dropdown menu, select **Add Client**. + +![Synchronized subnet](../../assets/images/screenshots/synced_subnet.png "Synchronized subnet") + +5. In the form: + - Search for the client name `pc11`. + - Ensure the client appears in the **Selected Clients** list. +6. Click the **Add** button. + +![Add client to subnet](../../assets/images/screenshots/add_client_to_subnet.png "Add client to subnet") + +7. You can view the updated Kea configuration with the new client by clicking **Information on ogDHCP server** (at the top) and then **View information**. + +![Client KEA](../../assets/images/screenshots/client_kea.png "Client KEA") + +## Create a PXE Boot File + +The goal is to generate a custom boot file for the client `pc11`, using the `ogLive` PXE template so it boots via Oglive. + +### Create the Boot File + +1. Go to the **PXE Templates** section under the **Boot** menu. +2. Locate the `ogLive` template that was previously assigned when creating the **pc11** client. +3. Click the computer icon button. + +![PXE Templates](../../assets/images/screenshots/pxe_templates.menu.png "PXE Templates") + +4. Find the client **pc11**. +5. Click the sync data button (the two circular arrows). + +![Advanced netboot](../../assets/images/screenshots/create_pxe_file.png "Advanced netboot") + +6. You will see that the **pc11** computer icon turns green. This means the boot file has been created in **ogboot** successfully. + +![PXE file created](../../assets/images/screenshots/created_pxe_file.png "PXE file created") diff --git a/i18n-docu/docs/en/administration/oggui.md b/i18n-docu/docs/en/administration/oggui.md new file mode 100644 index 0000000..7c72e55 --- /dev/null +++ b/i18n-docu/docs/en/administration/oggui.md @@ -0,0 +1,112 @@ +# Administration Interface + +The Web console represents the greatest advancement of OpenGnsys in this new version, with the main features of: + +- Developed with a modern and up-to-date language, Angular 18 +- Responsive Web, working on both PC and mobile environments +- Multilingual, with English translation + +![ogintro-webconsole.png](../assets/images/screenshots/ogintro-webconsole.png) + +## Configuration + +The new OpenGnsys administration interface has the following features for its Configuration + +![oggui-config_menu.png](../assets/images/screenshots/oggui-config_menu.png){ align=center width=20% } + +### Users + +Allows creating, editing and deleting Users + +![oggui-config_usuarios.png](../assets/images/screenshots/oggui-config_usuarios.png){ align=center } + +#### Add User + +![oggui-administracion-usuarios-anadir_usuario.png](../assets/images/screenshots/oggui-administracion-usuarios-anadir_usuario.png){ align=right width=40% } You will need to define the *username*, *password*, *role*, *organizational unit*, and *view*. + +- **Username**: this will be used for login + +- **Password**: the password is defined here by an administrator. The user will not be able to change the password unless they have access to the user administration panel. + +- **Role**: allows assigning one or more roles to the user. Roles provide greater granularity when managing the permissions each user will have to administer the platform. + +- **Organizational Unit**: allows defining which group of classrooms or machines the user will be able to administer. This field allows choosing one or more groups that the user can interact with. + +
+ +#### Edit User + +This window allows editing all the fields that were defined during its creation. + +#### Delete User + +Allows deleting a user. + +### Roles + +Roles allow managing the access permissions that users have to administer the platform. Currently there are 4 administrative levels according to the roles: + +- Super Admin: allows total control of the platform, without restrictions. +- Organizational Unit Admin: allows the user to perform all existing activities on the organizational unit. +- Organizational Unit Operator: +- User + +### Environment Variables + +In this menu, the IPs and ports of the APIs for the different components are mainly defined + +- OG_CORE_IP +- OG_DHCP_API_URL +- OG_BOOT_API_URL +- OG_LOG_IP +- REMOTEPC_AUTH_LOGIN +- REMOTEPC_AUTH_USERNAME +- REMOTEPC_AUTH_PASSWORD +- REMOTEPC_URL + +## Navigating the Menus + +In the left panel, we have the menus that give us access to the OpenGnsys features that we currently have active and running. +!!! note "Note" + It is possible that OpenGnsys does not include some modules, because they are served by external infrastructures, the most classic example is DHCP. In this case, when accessing that menu you will see a warning that this module is not enabled. + +## Manage Groups + +![oggui-grupos_crear.png](../assets/images/screenshots/oggui-grupos_crear.png){align=right width=50%}The main characteristics of groups are: + +- Inheritance + - Network and DHCP service + - Boot Server + - ogLive version + - PXE template + - NTP Server + - Image Repository + - Configuration of P2P values (mode, time) + - Configuration of Multicast values (speed, port, mode) + - Menu + - Hardware Profile + +Element groups are a hierarchical system that allows grouping of elements. The most common are Campus, Centers, Classrooms and Clients. + +```mermaid +flowchart TB + subgraph c1 [" Campus"] + subgraph c2 [" Centro"] + subgraph c3 [" Aula"] + c4[" Cliente"] + end + end + end + + classDef campusStyle fill:#f9d5e5,stroke:#333,stroke-width:3px + classDef centroStyle fill:#eeeeee,stroke:#333,stroke-width:2px + classDef aulaStyle fill:#b5ead7,stroke:#333,stroke-width:1px + classDef clienteStyle fill:#c7ceea,stroke:#333,stroke-width:1px + + class c1 campusStyle + class c2 centroStyle + class c3 aulaStyle + class c4 clienteStyle +``` + +
diff --git a/i18n-docu/docs/en/administration/oglive.md b/i18n-docu/docs/en/administration/oglive.md new file mode 100644 index 0000000..e69de29 diff --git a/i18n-docu/docs/en/administration/oglog.md b/i18n-docu/docs/en/administration/oglog.md new file mode 100644 index 0000000..e69de29 diff --git a/i18n-docu/docs/en/administration/ogrepository.md b/i18n-docu/docs/en/administration/ogrepository.md new file mode 100644 index 0000000..e69de29 diff --git a/i18n-docu/docs/en/developer/index.md b/i18n-docu/docs/en/developer/index.md new file mode 100644 index 0000000..7b70b27 --- /dev/null +++ b/i18n-docu/docs/en/developer/index.md @@ -0,0 +1,41 @@ +# OpenGnsys Developers + +Welcome to the developers section of OpenGnsys. This area provides detailed technical documentation on the internal architecture, APIs, and development guides for each component of the system. + +## System Components + +OpenGnsys is a modular system with several interconnected components. This section provides detailed technical information about each of them: + +- **[Web Console](ogcore.md)**: Architecture and development of the web application core. +- **[DHCP](ogdhcp.md)**: Implementation and customization of the DHCP service. +- **[Boot System](ogboot.md)**: Development and extension of boot mechanisms. +- **[ogLive](oglive.md)**: Customization and building of the minimal operating system. +- **[Cloning Engine](ogcloneengine.md)**: Internal architecture and APIs of the cloning engine. +- **[Repository Management](ogrepository.md)**: Development of modules for image management. +- **[ogAgent](ogagent.md)**: Communication protocol and client agent development. +- **[Logs and Monitoring](oglog.md)**: Integration of logging and monitoring systems. + +## Contributing to the Project + +OpenGnsys is an open-source project that welcomes community contributions. Before you start developing, we recommend: + +1. **Familiarize yourself with the architecture**: Review the documentation for each component to understand how they interact with each other. +2. **Set up a development environment**: Follow the installation guides for developers. +3. **Review the contribution guidelines**: Make sure to follow code conventions and review processes. + +## Development Tools + +To contribute to the development of OpenGnsys, you'll need to be familiar with the following technologies: + +- **Backend**: PHP, Python, Bash +- **Frontend**: JavaScript, HTML5, CSS3 +- **Database**: MySQL/MariaDB +- **Systems**: Linux, network services + +## Additional Resources + +- Code repository: [GitHub OpenGnsys](https://github.com/opengnsys) +- Developers forum: [OpenGnsys Community](https://comunidad.opengnsys.es) +- Bug reports: [Issue tracking system](https://github.com/opengnsys/OpenGnsys/issues) + +This section provides the technical information needed to understand, extend, and customize OpenGnsys components according to your specific needs. diff --git a/i18n-docu/docs/en/developer/ogagent.md b/i18n-docu/docs/en/developer/ogagent.md new file mode 100644 index 0000000..e69de29 diff --git a/i18n-docu/docs/en/developer/ogboot.md b/i18n-docu/docs/en/developer/ogboot.md new file mode 100644 index 0000000..ab734b2 --- /dev/null +++ b/i18n-docu/docs/en/developer/ogboot.md @@ -0,0 +1,1106 @@ +# Boot System (ogBoot) + +Ogboot is a standalone implementation that provides remote boot (PXE) functionality in environments managed by OpenGnsys. This component enables the remote loading of operating systems and other essential files during the workstation boot process. + +## Installation + +### Prerequisites + +- **Operating System**: Ubuntu 24.04 +- **Python 3**: Installation has been tested with version **Python 3.12.3**. + +```bash +python3 --version +Python 3.12.3 +``` + +### Installing Python 3 + +Run the following command to install Python 3 and `pip`: + +```bash +apt-get install -y python3 python3-pip +``` + +### Initial Setup + +The configuration file is included in the repository. You only need to modify it with the appropriate parameters: + +```json +{ + "ogCore_ServerIP": "172.17.8.82", + "ogBoot_ServerIP": "172.17.8.37", + "ogBoot_Dir": "/opt/opengnsys/ogboot", + "ogBootSambaUser": "opengnsys", + "ogBootSambaPass": "og" +} +``` + +Where: + +| Parameter | Description | +|---------------------|----------------------------------------------| +| `ogCore_ServerIP` | IP of the ogCore server | +| `ogBoot_ServerIP` | IP of the ogboot server | +| `ogBoot_Dir` | ogboot installation directory | +| `ogBootSambaUser` | Samba user | +| `ogBootSambaPass` | Samba password | + +### Installation + +1. Ensure that Python 3 is installed +2. Modify the existing configuration file with the necessary parameters + +## Ogboot API + +The Ogboot API provides an interface to facilitate the remote boot initialization process of operating systems in environments managed by OpenGnsys. Ogboot enables efficient management of boot files for both local partitions and remote operating systems. + +Below are the available endpoints, their input parameters, and the actions they perform. + +--- + +## Server Status + +### Get ogboot Status + +Returns disk usage, the default `ogLive` client, the list of installed `ogLives`, and the status of the services. + +**URL:** `/ogboot/v1/status` +**Method:** `GET` + +#### Request Example + +```bash +curl -X GET http://example.com/ogboot/v1/status +``` + +#### Responses + +##### Success (200 OK) + +```json +{ + "success": "Status retrieved successfully", + "message": { + "disk_usage": { + "total": "22591996", + "used": "11995812", + "available": "9542092", + "percentage": "56%" + }, + "default_oglive": "ogLive-6.8.0-i386-20241014", + "installed_oglives": [ + { + "id": "dcca1bf9762189e147cc4cde926392b1", + "distribution": "noble", + "kernel": "6.8.0-31-generic-amd64-r20240716", + "architecture": "i386", + "revision": "20241014", + "directory": "/opt/ogboot/tftpboot//ogLive-6.8.0-i386-20241014" + }, + { + "id": "ad8222511753d4013be21602899d642e", + "distribution": "noble", + "kernel": "6.8.0-31-generic-amd64-r20240716", + "architecture": "i386", + "revision": "20241017", + "directory": "/opt/ogboot/tftpboot//ogLive-6.8.0-i386-20241017" + } + ], + "services_status": { + "tftpboot": "active", + "nginx": "active" + } + } +} +``` + +##### Error (404 Not Found) + +```json +{ + "error": "NOT_FOUND", + "message": "No default or installed ogLives found." +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "FAILED_TO_RETRIEVE_DISK_USAGE", + "message": "Error to retrieve disk usage" +} +``` + +or + +```json +{ + "error": "FAILED_TO_RETRIEVE_OGLIVE_CONFIGURATION", + "message": "Error to retrieve ogLive configuration" +} +``` + +or + +```json +{ + "error": "FAILED_TO_RETRIEVE_SERVICES_STATUS", + "message": "Error to retrieve services status" +} +``` + +--- + +## ogLive Management + +### Get ogLive Download Menu + +Returns the list of available ogLive ISOs for download. + +**URL:** `/ogboot/v1/oglives/isos` +**Method:** `GET` + +#### Request Example + +```bash +curl -X GET http://example.com/ogboot/v1/oglives/isos +``` + +#### Responses + +##### Success (200 OK) + +```json +{ + "success": "ISOs retrieved successfully", + "message": [ + { + "id": "1", + "filename": "ogLive-noble-6.8.0-31-generic-amd64-r20240716-20241014.iso", + "url": "https://ognproject.evlt.uma.es/oglive//ogLive-noble-6.8.0-31-generic-amd64-r20240716-20241014.iso", + "installed": true, + "compatible": false + }, + { + "id": "2", + "filename": "ogLive-noble-6.8.0-31-generic-amd64-r20240716-20241017.iso", + "url": "https://ognproject.evlt.uma.es/oglive//ogLive-noble-6.8.0-31-generic-amd64-r20240716-20241017.iso", + "installed": true, + "compatible": false + } + ] +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "FAILED_TO_RETRIEVE_ISOS", + "message": "Error to retrieve ISO downloads" +} +``` + +### Get List of All Installed ogLive Clients + +Returns the list of installed ogLive clients, including the default `ogLive` client. + +**URL:** `/ogboot/v1/oglives` +**Method:** `GET` + +#### Request Example + +```bash +curl -X GET \ + 'http://172.17.8.37/ogboot/v1/oglives' \ + -H 'accept: application/json' +``` + +#### Responses + +##### Success (200 OK) + +```json +{ + "success": "ogLive clients retrieved successfully", + "message": { + "default_oglive": "ogLive-6.8.0-i386-20241014", + "installed_ogLives": [ + { + "id": "dcca1bf9762189e147cc4cde926392b1", + "distribution": "noble", + "kernel": "6.8.0-31-generic-amd64-r20240716", + "architecture": "i386", + "revision": "20241014", + "directory": "/opt/ogboot/tftpboot//ogLive-6.8.0-i386-20241014" + }, + { + "id": "ad8222511753d4013be21602899d642e", + "distribution": "noble", + "kernel": "6.8.0-31-generic-amd64-r20240716", + "architecture": "i386", + "revision": "20241017", + "directory": "/opt/ogboot/tftpboot//ogLive-6.8.0-i386-20241017" + } + ] + } +} +``` + +##### Error (404 Not Found) + +```json +{ + "error": "NOT_FOUND", + "message": "No ogLive clients found." +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "SERVER_ERROR", + "message": "Failed to retrieve ogLive clients due to server error." +} +``` + +or + +```json +{ + "error": "UNKNOWN_ERROR", + "message": "An unknown error occurred." +} +``` + +### Get Information of an Installed ogLive Client + +Returns the information of an installed `ogLive` client identified by its checksum. + +**URL:** `/ogboot/v1/oglives/{checksum}` +**Method:** `GET` + +#### Path Parameters + +| Parameter | Type | Description | Example | +|------------|--------|----------------------------------------------------------------|----------------------------------------| +| `checksum` | string | Checksum of the installed `ogLive` client | `9e49a085ba74f97a81bdf9b3d0785094` | + +#### Request Example + +```bash +curl -X GET \ + 'http://172.17.8.37/ogboot/v1/oglives/9e49a085ba74f97a81bdf9b3d0785094' \ + -H 'accept: application/json' +``` + +#### Responses + +##### Success (200 OK) + +```json +{ + "success": "ogLive client retrieved successfully", + "message": { + "id": "9e49a085ba74f97a81bdf9b3d0785094", + "distribution": "noble", + "kernel": "6.8.0-31-generic-amd64-r20240716", + "architecture": "i386", + "revision": "20241014", + "directory": "/opt/ogboot/tftpboot//ogLive-6.8.0-i386-20241014" + } +} +``` + +##### Error (404 Not Found) + +```json +{ + "error": "NOT_FOUND", + "message": "ogLive client with checksum 9e49a085ba74f97a81bdf9b3d0785094 not found." +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "SERVER_ERROR", + "message": "Failed to retrieve ogLive client." +} +``` + +### Get Default ogLive Client Information + +Returns the information of the `ogLive` client configured as default. + +**URL:** `/ogboot/v1/oglives/default` +**Method:** `GET` + +#### Request Example + +```bash +curl -X GET \ + 'http://172.17.8.37/ogboot/v1/oglives/default' \ + -H 'accept: application/json' +``` + +#### Responses + +##### Success (200 OK) + +```json +{ + "success": "se ha obtenido el oglive por defecto", + "message": { + "id": "default_oglive_id", + "distribution": "noble", + "kernel": "6.8.0-31-generic-amd64-r20240716", + "architecture": "i386", + "revision": "20241014", + "directory": "/opt/ogboot/tftpboot//ogLive-6.8.0-i386-20241014" + } +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "SERVER_ERROR", + "message": "Failed to retrieve default ogLive." +} +``` + +### Set Default ogLive Client + +Allows setting an `ogLive` client as default using its checksum. + +**URL:** `/ogboot/v1/oglives/default` +**Method:** `PUT` + +#### Request Body + +```json +{ + "checksum": "9e49a085ba74f97a81bdf9b3d0785094" +} +``` + +| Parameter | Type | Description | Required | +|-------------|--------|---------------------------------------------------------|----------| +| `checksum` | string | Checksum of the `ogLive` client to set as default | Yes | + +#### Request Example + +```bash +curl -X PUT \ + 'http://172.17.8.37/ogboot/v1/oglives/default' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -d '{ + "checksum": "9e49a085ba74f97a81bdf9b3d0785094" + }' +``` + +#### Responses + +##### Success (200 OK) + +```json +{ + "success": "ogLive client set as default successfully", + "message": { + "id": "9e49a085ba74f97a81bdf9b3d0785094", + "distribution": "noble", + "kernel": "6.8.0-31-generic-amd64-r20240716", + "architecture": "i386", + "revision": "20241014", + "directory": "/opt/ogboot/tftpboot//ogLive-6.8.0-i386-20241014" + } +} +``` + +##### Error (400 Bad Request) + +```json +{ + "error": "INVALID_INPUT", + "message": "Invalid input data: checksum is required." +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "SERVER_ERROR", + "message": "Failed to set ogLive as default." +} +``` + +### Start Installation of an ogLive Client + +Initiates the installation of an `ogLive` client from a provided download URL. This endpoint is asynchronous and, after installation, sends a notification to the webhook URL configured in `ogCore`. + +**URL:** `/ogboot/v1/oglives/install` +**Method:** `POST` + +#### Request Body + +```json +{ + "url": "https://ognproject.evlt.uma.es/trac/downloads/ogLive-focal-5.11.0-22-generic-amd64-r20210413.992ebb9.iso", + "id": "12345" +} +``` + +| Parameter | Type | Description | Required | +|-----------|--------|----------------------------------------------------------------------|----------| +| `url` | string | URL of the `ogLive` ISO to download and install | Yes | +| `id` | string | Unique transaction ID to track the installation process | Yes | + +#### Request Example + +```bash +curl -X POST \ + 'http://172.17.8.37/ogboot/v1/oglives/install' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -d '{ + "url": "https://ognproject.evlt.uma.es/trac/downloads/ogLive-focal-5.11.0-22-generic-amd64-r20210413.992ebb9.iso", + "id": "12345" + }' +``` + +#### Responses + +##### Success (202 Accepted) + +```json +{ + "success": "ogLive client installation started", + "transaction_id": "12345" +} +``` + +##### Error (400 Bad Request) + +```json +{ + "error": "Invalid input data", + "details": "URL and transaction ID are required." +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "Failed to initiate ogLive installation", + "details": "Detalles del error específico" +} +``` + +!!! note "Asynchronous Process" + This endpoint runs the installation in the background and notifies `ogCore` via a webhook at the configured URL upon completion of the process, sending the status, the response code (200 if successful), and a message. + +### Uninstall an ogLive Client + +Allows uninstalling an `ogLive` client identified by its checksum. + +**URL:** `/ogboot/v1/oglives/{checksum}` +**Method:** `DELETE` + +#### Path Parameters + +| Parameter | Type | Description | Example | +|------------|--------|-------------------------------------------------------------|--------------------------------------| +| `checksum` | string | Checksum of the `ogLive` client to uninstall | `9e49a085ba74f97a81bdf9b3d0785094` | + +#### Request Example + +```bash +curl -X DELETE \ + 'http://172.17.8.37/ogboot/v1/oglives/9e49a085ba74f97a81bdf9b3d0785094' \ + -H 'accept: application/json' +``` + +#### Responses + +##### Success (200 OK) + +```json +{ + "message": "ogLive client uninstalled successfully", + "details": "Detalles adicionales de la desinstalación." +} +``` + +##### Error (404 Not Found) + +```json +{ + "error": "NOT_FOUND", + "message": "ogLive client not found." +} +``` + +##### Error (403 Forbidden) + +```json +{ + "error": "FORBIDDEN", + "message": "Cannot uninstall the default ogLive client." +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "SERVER_ERROR", + "message": "Failed to uninstall ogLive client." +} +``` + +or + +```json +{ + "error": "UNKNOWN_ERROR", + "message": "An unknown error occurred." +} +``` + +--- + +## PXE Files Management + +### Get All Boot Files + +Returns the list of available PXE boot files. + +**URL:** `/ogboot/v1/pxes` +**Method:** `GET` + +#### Request Example + +```bash +curl -X GET http://example.com/ogboot/v1/pxes +``` + +#### Responses + +##### Success (200 OK) + +```json +{ + "success": "Boot files retrieved successfully", + "message": [ + "01-00-50-56-aa-bb-cc", + "01-00-50-56-dd-ee-ff" + ] +} +``` + +##### Error (404 Not Found) + +```json +{ + "error": "NOT_FOUND", + "message": "No boot files found." +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "SERVER_ERROR", + "message": "Failed to retrieve boot files: directory not found." +} +``` + +### Get Boot File + +Returns the boot file for a specific MAC address, including configuration parameters. + +**URL:** `/ogboot/v1/pxes/{mac}` +**Method:** `GET` + +#### Path Parameters + +| Parameter | Type | Description | Example | +|-----------|--------|----------------------------------------------------------|-------------------------| +| `mac` | string | MAC address for which the boot file will be retrieved | `00:50:56:22:11:12` | + +#### Request Example + +```bash +curl -X GET \ + 'http://172.17.8.37/ogboot/v1/pxes/00:50:56:22:11:12' \ + -H 'accept: application/json' +``` + +#### Responses + +##### Success (200 OK) - Case 1: Boot file with parameters + +```json +{ + "success": "Boot file retrieved successfully", + "message": { + "template_name": "pxe", + "mac": "00:50:56:22:11:12", + "lang": "es_ES.UTF-8", + "ip": "192.168.2.11", + "server_ip": "192.168.2.1", + "router": "192.168.2.1", + "netmask": "255.255.255.0", + "computer_name": "pc11", + "netiface": "eth0", + "group": "Aula_virtual", + "ogrepo": "192.168.2.1", + "oglive": "192.168.2.1", + "oglog": "192.168.2.1", + "ogshare": "192.168.2.1", + "oglivedir": "ogLive", + "ogprof": "false", + "hardprofile": "", + "ogntp": "", + "ogdns": "", + "ogproxy": "", + "ogunit": "", + "resolution": "788" + } +} +``` + +##### Success (200 OK) - Case 2: Disk-based boot file (no parameters) + +```json +{ + "success": "Boot file retrieved successfully", + "message": { + "template_name": "disk_boot", + "mac": "00:50:56:22:11:12", + "message": "Boot file without parameters, possibly a disk boot template." + } +} +``` + +##### Error (404 Not Found) + +```json +{ + "error": "NOT_FOUND", + "message": "No boot file found for the specified MAC address." +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "SERVER_ERROR", + "message": "An error occurred while retrieving the boot file." +} +``` + +### Create PXE File + +This endpoint allows creating a PXE boot file with the specified MAC and template, along with additional parameters such as IP, ogLive directory, server, and more. + +**URL:** `/ogboot/v1/pxes` +**Method:** `POST` + +#### Request Body + +```json +{ + "mac": "00:50:56:22:11:12", + "template_name": "mi_plantilla.ipxe", + "server_ip": "192.168.2.1", + "oglivedir": "ogLive", + "lang": "es_ES.UTF-8", + "ip": "192.168.2.11", + "router": "192.168.2.1", + "netmask": "255.255.255.0", + "computer_name": "pc11", + "netiface": "eth0", + "group": "Aula_virtual", + "ogrepo": "192.168.2.1", + "oglive": "192.168.2.1", + "oglog": "192.168.2.1", + "ogshare": "192.168.2.1", + "ogprof": "false", + "hardprofile": "", + "ogntp": "192.168.2.1", + "ogdns": "192.168.2.1", + "ogproxy": "192.168.2.1", + "ogunit": "unit", + "resolution": "788" +} +``` + +| Parameter | Type | Description | Required | +|-----------------|--------|--------------------------------------------------------|----------| +| `mac` | string | MAC address for the boot file | Yes | +| `template_name` | string | Name of the template to use | Yes | +| `server_ip` | string | Server IP address | No | +| `oglivedir` | string | ogLive directory to use in the boot | No | +| `lang` | string | Locale language | No | +| `ip` | string | IP address | No | +| `router` | string | Gateway IP address | No | +| `netmask` | string | Network mask | No | +| `computer_name` | string | Computer name | No | +| `netiface` | string | Network interface | No | +| `group` | string | Machine group | No | +| `ogrepo` | string | IP of the repository server | No | +| `oglive` | string | IP of the tftpboot server | No | +| `oglog` | string | IP of the logs server | No | +| `ogshare` | string | IP of the ogclient server | No | +| `ogprof` | string | Indicates if it’s a teacher | No | +| `hardprofile` | string | Hardware profile | No | +| `ogntp` | string | IP of the NTP server | No | +| `ogdns` | string | IP of the DNS server | No | +| `ogproxy` | string | IP of the proxy server | No | +| `ogunit` | string | Unit directory | No | +| `resolution` | string | Screen resolution | No | + +#### Request Example + +```bash +curl -X POST \ + 'http://172.17.8.37/ogboot/v1/pxes' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -d '{ + "mac": "00:50:56:22:11:12", + "template_name": "mi_plantilla.ipxe", + "server_ip": "192.168.2.1", + "oglivedir": "ogLive" + }' +``` + +#### Responses + +##### Success (200 OK) + +```json +{ + "success": "PXE file created successfully", + "message": "#!ipxe\n#Template: mi_plantilla.ipxe\nset kernelargs ro boot=oginit quiet splash irqpoll ..." +} +``` + +##### Error (400 Bad Request) + +```json +{ + "error": "INVALID_INPUT", + "message": "Missing required fields: mac and template_name" +} +``` + +##### Error (404 Not Found) + +```json +{ + "error": "TEMPLATE_NOT_FOUND", + "message": "No se encontró la plantilla especificada" +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "FAILED_TO_CREATE_PXE_FILE", + "message": "Error al crear el archivo PXE" +} +``` + +### Delete PXE File + +This endpoint allows deleting a specific PXE boot file using the client’s MAC address. + +**URL:** `/ogboot/v1/pxes/{mac}` +**Method:** `DELETE` + +#### Path Parameters + +| Parameter | Type | Description | Example | +|-----------|--------|------------------------------------------------------|------------------------| +| `mac` | string | MAC address of the client whose boot file will be deleted | `00:11:22:33:44:55` | + +#### Request Example + +```bash +curl -X DELETE \ + 'http://172.17.8.37/ogboot/v1/pxes/00:11:22:33:44:55' \ + -H 'accept: application/json' +``` + +#### Responses + +##### Success (200 OK) + +```json +{ + "success": "Boot file deleted successfully", + "message": "The boot file for MAC 00:11:22:33:44:55 has been deleted." +} +``` + +##### Error (404 Not Found) + +```json +{ + "error": "NOT_FOUND", + "message": "No boot file found for the specified MAC address." +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "SERVER_ERROR", + "message": "Failed to delete the boot file due to server error." +} +``` + +--- + +## PXE Template Management + +### Get All PXE Templates + +This endpoint returns a list of all available PXE boot templates in the system. + +**URL:** `/ogboot/v1/pxe-templates` +**Method:** `GET` + +#### Request Example + +```bash +curl -X GET \ + 'http://172.17.8.37/ogboot/v1/pxe-templates' \ + -H 'accept: application/json' +``` + +#### Responses + +##### Success (200 OK) + +```json +{ + "success": "Lista de plantillas obtenida con éxito", + "message": [ + "mi_plantilla.ipxe", + "otra_plantilla.ipxe" + ] +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "SERVER_ERROR", + "message": "Directorio de plantillas no encontrado" +} +``` + +### Get Content of a PXE Template + +This endpoint retrieves the content of a specific PXE boot template by its name. + +**URL:** `/ogboot/v1/pxe-templates/{templateName}` +**Method:** `GET` + +#### Path Parameters + +| Parameter | Type | Description | Example | +|-----------------|--------|---------------------------------------------|-----------------------| +| `templateName` | string | Name of the PXE template to retrieve | `my_template.ipxe` | + +#### Request Example + +```bash +curl -X GET \ + 'http://172.17.8.37/ogboot/v1/pxe-templates/mi_plantilla.ipxe' \ + -H 'accept: application/json' +``` + +#### Responses + +##### Success (200 OK) + +```json +{ + "success": "Plantilla obtenida con éxito", + "template_name": "mi_plantilla.ipxe", + "template_content": "#!ipxe\nset timeout 0\nset timeout-style hidden\n\nset ISODIR ogLive\nset default 0\nset kernelargs INFOHOST\nkernel tftp://SERVERIP/ogLive/ogvmlinuz ${kernelargs}\ninitrd tftp://SERVERIP/ogLive/oginitrd.img\nboot" +} +``` + +##### Error (404 Not Found) + +```json +{ + "error": "TEMPLATE_NOT_FOUND", + "message": "No se encontró la plantilla especificada" +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "FAILED_TO_READ_TEMPLATE", + "message": "Error al leer la plantilla" +} +``` + +### Create Template + +This endpoint creates a new PXE boot template on the server using the provided name and content. + +**URL:** `/ogboot/v1/pxe-templates` +**Method:** `POST` + +#### Request Body + +```json +{ + "name_template": "mi_plantilla.ipxe", + "content_template": "#!ipxe\nset timeout 0\nset timeout-style hidden\nset ISODIR __OGLIVE__\nset default 0\nset kernelargs __INFOHOST__\n:try_iso\nkernel http://__SERVERIP__/tftpboot/${ISODIR}/ogvmlinuz ${kernelargs} || goto fallback\ninitrd http://__SERVERIP__/tftpboot/${ISODIR}/oginitrd.img\nboot\n\n:fallback\nset ISODIR ogLive\nkernel http://__SERVERIP__/tftpboot/${ISODIR}/ogvmlinuz ${kernelargs}\ninitrd http://__SERVERIP__/tftpboot/${ISODIR}/oginitrd.img\nboot\n" +} +``` + +| Parameter | Type | Description | Required | +|---------------------|--------|-------------------------------------------|----------| +| `name_template` | string | Name of the new template | Yes | +| `content_template` | string | Template content, must include boot script | Yes | + +#### Request Example + +```bash +curl -X POST \ + 'http://172.17.8.37/ogboot/v1/pxe-templates' \ + -H 'Content-Type: application/json' \ + -d '{ + "name_template": "mi_plantilla.ipxe", + "content_template": "#!ipxe\nset timeout 0\nset timeout-style hidden\nset ISODIR __OGLIVE__\nset default 0\nset kernelargs __INFOHOST__\n:try_iso\nkernel http://__SERVERIP__/tftpboot/${ISODIR}/ogvmlinuz ${kernelargs} || goto fallback\ninitrd http://__SERVERIP__/tftpboot/${ISODIR}/oginitrd.img\nboot\n\n:fallback\nset ISODIR ogLive\nkernel http://__SERVERIP__/tftpboot/${ISODIR}/ogvmlinuz ${kernelargs}\ninitrd http://__SERVERIP__/tftpboot/${ISODIR}/oginitrd.img\nboot\n" + }' +``` + +#### Responses + +##### Success (200 OK) + +```json +{ + "success": "Plantilla creada con éxito", + "message": { + "template_name": "mi_plantilla.ipxe", + "template_content": "#!ipxe\nset timeout 0\nset timeout-style hidden\nset ISODIR __OGLIVE__\nset default 0\nset kernelargs __INFOHOST__\n:try_iso\nkernel http://__SERVERIP__/tftpboot/${ISODIR}/ogvmlinuz ${kernelargs} || goto fallback\ninitrd http://__SERVERIP__/tftpboot/${ISODIR}/oginitrd.img\nboot\n\n:fallback\nset ISODIR ogLive\nkernel http://__SERVERIP__/tftpboot/${ISODIR}/ogvmlinuz ${kernelargs}\ninitrd http://__SERVERIP__/tftpboot/${ISODIR}/oginitrd.img\nboot\n" + } +} +``` + +##### Error (400 Bad Request) + +```json +{ + "error": "INVALID_INPUT", + "message": "Faltan datos requeridos: name_template y content_template son necesarios." +} +``` + +##### Error (403 Forbidden) + +```json +{ + "error": "UNAUTHORIZED_ACCESS", + "message": "Intento de acceso no autorizado fuera del directorio de plantillas." +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "FILE_CREATION_ERROR", + "message": "Ocurrió un error al crear la plantilla de arranque." +} +``` + +### Delete Template + +This endpoint deletes a PXE boot template on the server using the provided name. + +**URL:** `/ogboot/v1/pxe-templates/{name}` +**Method:** `DELETE` + +#### Path Parameters + +| Parameter | Type | Description | Example | +|-----------|--------|--------------------------------------------|-----------------------| +| `name` | string | Name of the boot template to delete | `my_template.ipxe` | + +#### Request Example + +```bash +curl -X DELETE \ + 'http://172.17.8.37/ogboot/v1/pxe-templates/mi_plantilla.ipxe' \ + -H 'accept: application/json' +``` + +#### Responses + +##### Success (200 OK) + +```json +{ + "success": "Plantilla eliminada", + "message": "La plantilla mi_plantilla se ha borrado correctamente" +} +``` + +##### Error (404 Not Found) + +```json +{ + "error": "TEMPLATE_NOT_FOUND", + "message": "No se encontró la plantilla especificada" +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "FAILED_TO_DELETE_TEMPLATE", + "message": "Ocurrió un error al intentar eliminar la plantilla" +} +``` + +## Glossary of Terms + +| Term | Description | +|-------------|------------------------------------------------------------------------------------------------------| +| **PXE** | Preboot Execution Environment – Environment that allows a computer to boot over the network | +| **ogLive** | Remote boot client used by OpenGnsys | +| **ogBoot** | OpenGnsys component that provides remote boot functionality | +| **ogCore** | Main OpenGnsys server that manages system operations | +| **Checksum**| Hash value that uniquely identifies an installed ogLive client | +| **ISO** | Image file containing an ogLive client | +| **TFTP** | Trivial File Transfer Protocol – Protocol used to transfer files during remote boot | + diff --git a/i18n-docu/docs/en/developer/ogcloneengine.md b/i18n-docu/docs/en/developer/ogcloneengine.md new file mode 100644 index 0000000..e69de29 diff --git a/i18n-docu/docs/en/developer/ogcore.md b/i18n-docu/docs/en/developer/ogcore.md new file mode 100644 index 0000000..ab72205 --- /dev/null +++ b/i18n-docu/docs/en/developer/ogcore.md @@ -0,0 +1,181 @@ +# Administration Console + +The administration console is divided into 3 main components + +- Web Interface +- API for communication with the other components +- Database + +## Web Interface (ogGui) + +### ogGui + +ogGui is a frontend project developed in Angular to provide a user interface for the OpenGnsys tool. + +#### Development Environment + +This project has been developed and tested in the following development environment: + +- Operating System: Ubuntu 22.04.3 LTS (Release: 22.04, Codename: jammy) +- Code editor: Visual Studio Code 1.87.2 +- Node.js: v22.1.0 +- npm: 10.7.0 +- Angular CLI: 12.0.3 +- Angular Core: 12.0.1 +- Angular Material: 12.0.2 + +#### Installation + +1. Install the most recent version of Node.js (v22.1.0) +
`https://nodejs.org` +2. If you don't have npm installed +
`sudo apt install npm` +3. Install Angular CLI >= 12 +
`npm install -g @angular/cli` +4. Clone this repository to your local machine using Git. +5. Navigate into the /ogWebconsole directory. +6. Install the project dependencies +
`npm install`. +7. To run the application in development mode, use the `ng serve` command. The application will be available at `http://localhost:4200/`. + +## API (ogCore) + +### Description + +ogCore is the central service of OpenGnsys, designed to provide functionalities through a RESTful API. This tool uses PHP technology, leveraging the Symfony framework and the Doctrine ORM to manage the database. + +Below are the steps required to deploy the project in a development environment. + +### Versions and Technologies Used + +- PHP 8.3 +- Symfony 6.4 +- Doctrine 2.19 +- API Platform 3.2 +- MariaDB 10.11 + +### Requirements + +Before starting, make sure you have the following requirements: + +- Docker +- Docker compose + +### Installation + +#### Deploy Containers + +To avoid port conflicts, ensure that no services are running on ports 8080 and 3306. + +```sh +docker compose up --build -d +``` + +Check that the 3 application containers have started correctly: + +```sh +docker ps +``` + +And you should see something like: + +- ogcore-nginx +- ogcore-php +- ogcore-database + +#### Install Dependencies + +```sh +docker exec ogcore-php composer install +docker exec ogcore-php php bin/console lexik:jwt:generate-keypair --overwrite +``` + +Check that the Nginx container has port 8080 up correctly, so all we need to do is access the following URL: + +```sh +http://127.0.0.1:8080/docs +``` +If all went well, we should see the ogCore API documentation. + +To update the database: + +To initialize the database: + +```sh +docker exec ogcore-php php bin/console doctrine:migrations:migrate --no-interaction +``` + +```sh +docker exec ogcore-php php bin/console doctrine:fixtures:load --no-interaction +docker exec ogcore-php php bin/console app:load-default-user-groups #cargamos los grupos por defecto +docker exec ogcore-php php bin/console app:load-default-commands #cargamos los commands por defecto +``` + +### API Platform UX + +API Platform provides a user interface to interact with the ogCore API. To access the user interface, go to the following URL: + +```sh +http://127.0.0.1:8080/docs +``` + +To authenticate, you need a JWT token. To obtain it, access the "auth/login" authentication endpoint: + +![img.png](../../assets/images/screenshots/img.png) +![img.png](../../assets/images/screenshots/img2.png) +Obtain the token and enter it into the API Platform user interface as follows: + +![img.png](../../assets/images/screenshots/img3.png) + +Now, we can interact with the ogCore API. To verify that everything is correct, we can check the headers of the Curl calls and see that the JWT token has been correctly included. + +### Test + +To run the tests, execute the following command: + +```sh +docker compose exec php bin/phpunit +``` + +### Reset Database + +It may be necessary during development to reload the database and update its schemas. To do so, run the following command: + +```sh +docker exec ogcore-php php bin/console doctrine:database:drop --force +docker exec ogcore-php php bin/console doctrine:database:create +``` + +### Data Migrations + +To migrate data from the "old" database, we first need to have a database schema with a dump from OpenGnsys. That is: + +- We create a temporary database simulating an OpenGnsys 1.1 instance. We will request it from the university development team. +- We will need a dump of the OpenGnsys 1.1 database. + +Using Doctrine, we create the temporary database: + +```sh +docker exec ogcore-php php bin/console doctrine:database:create --connection=og_1 +``` + +![img.png](../../assets/images/screenshots/img_bbdd.png) + +Here we can see that we have 2 databases. OgCore is the current one where we are developing, and ogcore_old_og is the temporary database we just created. + +Here would come the step of loading the dump into that database, since it contains sensitive information, it is not hosted in the repository, so we will need to request it from the appropriate team. +Once we have the database loaded, we can run the data migrations: + +```sh +--- Migraciones de OpenGnsys. --- +docker exec ogcore-php php bin/console opengnsys:migration:organizational-unit #cargamos las unidades organizativas +docker exec ogcore-php php bin/console opengnsys:migration:hardware-profile #cargamos los perfiles de hardware +docker exec ogcore-php php bin/console opengnsys:migration:clients #cargamos los clientes +docker exec ogcore-php php bin/console opengnsys:migration:os #cargamos los sistemas operativos +docker exec ogcore-php php bin/console opengnsys:migration:image #cargamos las imagenes +docker exec ogcore-php php bin/console opengnsys:migration:software-profile #cargamos los software profiles +``` + +### Objects of Interest + +A .zip has been included with the API collections of ogCore to work with, test, etc. in Postman. To import them, simply go to the import tab and select the .zip file. diff --git a/i18n-docu/docs/en/developer/ogdhcp.md b/i18n-docu/docs/en/developer/ogdhcp.md new file mode 100644 index 0000000..a64a4e0 --- /dev/null +++ b/i18n-docu/docs/en/developer/ogdhcp.md @@ -0,0 +1,20 @@ +# ogDHCP: API for Kea DHCP Management + +The `ogdhcp` component is a specialized API for efficiently managing the configuration of Kea DHCP, an open-source DHCP server developed by ISC (Internet Systems Consortium) that provides full support for both DHCPv4 and DHCPv6. + +## Key Features + +The `ogdhcp` API offers an intuitive interface that allows users and applications like OpenGNSys to interact remotely with Kea DHCP, eliminating the need to manually edit configuration files. This automated solution significantly streamlines network infrastructure management. + +## Functionalities + +The API provides a comprehensive set of operations that allow: + +- Query the current Kea DHCP configuration in real time +- Perform end-to-end management of the Kea DHCP configuration: + - Add, remove, or modify subnets + - Manage IP address reservations + - Configure DHCP-specific options + - Customize server parameters + +This tool is especially valuable for system administrators who need centralized and efficient DHCP configuration management in complex network environments. diff --git a/i18n-docu/docs/en/developer/oglive.md b/i18n-docu/docs/en/developer/oglive.md new file mode 100644 index 0000000..e69de29 diff --git a/i18n-docu/docs/en/developer/oglog.md b/i18n-docu/docs/en/developer/oglog.md new file mode 100644 index 0000000..e69de29 diff --git a/i18n-docu/docs/en/developer/ogrepository.md b/i18n-docu/docs/en/developer/ogrepository.md new file mode 100644 index 0000000..f152238 --- /dev/null +++ b/i18n-docu/docs/en/developer/ogrepository.md @@ -0,0 +1,745 @@ +ogRepository - OpenGnsys Repository Manager +=========================================== + + +This GIT repository contains the data structure of the OpenGnsys image repository. + +- **api** ------ ogRepository API +- **bin** ------ Python 3 scripts and management binaries for ogRepository. +- **etc** ------ Configuration files and templates for ogRepository. +- **packets** - Packages whose installation is required. + +--- + +## Requirements + +APT Packages required + + - **uftp** (can be installed with "sudo DEBIAN_FRONTEND=noninteractive apt install uftp -y" to avoid prompting for the default path; the service must be disabled) + - **udpcast** (can be installed with "sudo apt install ./udpcast_20230924_amd64.deb", pointing to the package) + - **ctorrent** (can be installed with "sudo apt install ctorrent") + - **bittorrent** (can be installed with "sudo apt install bittorrent", but you must first add a Debian repository) + - **bittornado** (can be installed with "sudo apt install bittornado", but you must first add a Debian repository) + - **wakeonlan** (can be installed with "sudo apt install wakeonlan") + - **qemu** (can be installed with "sudo apt install qemu-utils") + - **partclone** (can be installed with "sudo apt install partclone") + - **lzop** (can be installed with "sudo apt install lzop") + +Python libraries required + + - **flask** (can be installed with "sudo apt install python3-flask") + - **paramiko** (can be installed with "sudo apt install python3-paramiko") + - **psutil** (can be installed with "sudo apt install python3-psutil") + - **flasgger** (can be installed with "sudo apt install python3-flasgger") + - **requests** (can be installed with "sudo apt install python3-requests", but it is not necessary on Ubuntu 24) + +For all endpoints and scripts to work with the current configuration, the following directories must exist + + - **/opt/opengnsys/ogrepository/images/** + - **/opt/opengnsys/ogrepository/images_trash/** (must be on the same partition as the previous one, or deletions and restorations will be slow) + - **/opt/opengnsys/ogrepository/images_virtual/** (virtual images to be converted to "img" should be copied here) + - **/opt/opengnsys/ogrepository/bin/** (all Python scripts and the "udp-sender" binary should be here) + - **/opt/opengnsys/ogrepository/api/** (the API and Swagger should be here) + - **/opt/opengnsys/ogrepository/etc/** (stores the "repoinfo.json" and "trashinfo.json" files) + - **/opt/opengnsys/ogrepository/log/** (stores the logs) + +And the following file must also exist: + - **/opt/opengnsys/ogrepository/etc/ogAdmRepo.cfg** (from here it obtains its IP and that of ogCore) + +--- + +## ogRepository API + +The ogRepository API provides an interface to facilitate the management of images stored in image repositories, allowing you to delete them, send them to ogLive clients (using different transmission protocols), import them from other repositories, etc. + +This document details the API endpoints, with their respective input parameters, as well as the actions they perform. + +--- +### Get ogRepository Status Information + +It returns CPU, RAM, disk information, the status of certain ogRepository services and processes, and the installation status of ogGit, in JSON format. +You can use the script "**getRepoStatus.py**", which should be called by the endpoint. +**NOTE**: In the "services" and "processes" sections I have specified the services and processes that I found interesting, but you can add or remove as desired. + +**URL:** `/ogrepository/v1/status` +**HTTP Method:** GET + +**Request Example:** + +```bash +curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/status +``` + +**Responses:** +- **500 Internal Server Error:** An error occurred while querying and/or returning the status information. +- **200 OK:** The status information was successfully retrieved. + - **Content:** Status information in JSON format. + ```json + { + "oggit": { + "installed": "True" + }, + "cpu": { + "used_percentage": "35%" + }, + "ram": { + "total": "7.8GB", + "used": "0.3GB", + "available": "7.2GB", + "used_percentage": "7%" + }, + "disk": { + "total": "11.7GB", + "used": "7.7GB", + "available": "3.4GB", + "used_percentage": "69%" + }, + "services": { + "ssh": "active", + "smbd": "active", + "rsync": "active" + }, + "processes": { + "udp-sender": "stopped", + "uftp": "stopped", + "bttrack": "stopped", + "btlaunchmany.bittornado": "stopped" + } + } + ``` +--- +### Get Information for All Images + +It returns the information contained in the "**/opt/opengnsys/ogrepository/etc/repoinfo.json**" file (for all images stored in the repository) and in the "**/opt/opengnsys/ogrepository/etc/trashinfo.json**" file (for images in the trash). +You can use the script "**getRepoInfo.py**", which should be called by the endpoint, and which calls "**updateRepoInfo.py**" beforehand to refresh the repository information. +**NOTE**: The script requires passing "all" as a parameter, but the endpoint itself takes no parameters. + +**URL:** `/ogrepository/v1/images` +**HTTP Method:** GET + +**Request Example:** + +```bash +curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/images +``` + +**Responses:** +- **500 Internal Server Error:** An error occurred while querying and/or returning the image information. +- **200 OK:** The image information was successfully retrieved. + - **Content:** Image information in JSON format. + ```json + { + "REPOSITORY": { + "directory": "/opt/opengnsys/ogrepository/images", + "images": [ + { + "name": "Ubuntu24", + "type": "img", + "clientname": "Ubuntu24_clientname", + "clonator": "partclone", + "compressor": "lzop", + "filesystem": "EXTFS", + "datasize": 9859634200000, + "size": 4505673214, + "sum": "065a933c780ab1aaa044435ad5d4bf87", + "fullsum": "33575b9070e4a8043371b8c6ae52b80e" + }, + { + "name": "Windows10", + "type": "img", + "clientname": "Windows10_clientname", + "clonator": "partclone", + "compressor": "lzop", + "filesystem": "NTFS", + "datasize": 24222105600000, + "size": 13198910185, + "sum": "8874d5ab84314f44841c36c69bb5aa82", + "fullsum": "9e7cd32c606ebe5bd39ba212ce7aeb02" + } + ] + }, + "TRASH": { + "directory": "/opt/opengnsys/ogrepository/images_trash", + "images": [ + { + "name": "Ubuntu20", + "type": "img", + "clientname": "Ubuntu20_clientname", + "clonator": "partclone", + "compressor": "lzop", + "filesystem": "EXTFS", + "datasize": 8912896000000, + "size": 3803794535, + "sum": "081a933c780ab1aaa044435ad5d4bf56", + "fullsum": "22735b9070e4a8043371b8c6ae52b90d" + } + ] + } + } + ``` + - **name**: Image name, without extension. + - **type**: Image extension. + - **clientname**: Name assigned to the model from which the image was obtained. + - **clonator**: Program used for cloning. + - **compressor**: Program used for compression. + - **filesystem**: Filesystem used on the cloned partition. + - **datasize**: Image size once restored, in bytes (data size). + - **size**: Image file size, in bytes. + - **sum**: MD5 hash of the last MB of the image file. + - **fullsum**: MD5 hash of the entire image file. + +--- +### Get Information for a Specific Image + +It returns the information for the specified image, which may be in "**/opt/opengnsys/ogrepository/etc/repoinfo.json**" or in "**/opt/opengnsys/ogrepository/etc/trashinfo.json**" (if the image is in the trash). +You can use the script "**getRepoInfo.py**", which should be called by the endpoint, and which calls "**updateRepoInfo.py**" beforehand to refresh the repository information. +**NOTE**: The script requires passing the image name (with extension) as a parameter. This is determined in the API from the image ID (the content of the "full.sum" file). + +**URL:** `/ogrepository/v1/images/{ID_img}` +**HTTP Method:** GET + +**Request Example:** + +```bash +curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/images/22735b9070e4a8043371b8c6ae52b90d +``` + +**Responses:** +- **500 Internal Server Error:** An error occurred while querying and/or returning the image information. +- **400 Bad Request:** The specified image was not found. +- **200 OK:** The image information was successfully retrieved. + - **Content:** Image information in JSON format. + ```json + { + "directory": "/opt/opengnsys/ogrepository/images", + "images": [ + { + "name": "Windows10", + "type": "img", + "clientname": "Windows10_clientname", + "clonator": "partclone", + "compressor": "lzop", + "filesystem": "NTFS", + "datasize": 9859634200000, + "size": 4505673214, + "sum": "065a933c780ab1aaa044435ad5d4bf87", + "fullsum": "33575b9070e4a8043371b8c6ae52b80e" + } + ] + } + ``` + - **name**: Image name, without extension. + - **type**: Image extension. + - **clientname**: Name assigned to the model from which the image was obtained. + - **clonator**: Program used for cloning. + - **compressor**: Program used for compression. + - **filesystem**: Filesystem used on the cloned partition. + - **datasize**: Image size once restored, in bytes (data size). + - **size**: Image file size, in bytes. + - **sum**: MD5 hash of the last MB of the image file. + - **fullsum**: MD5 hash of the entire image file. + +--- +### Update Repository Information + +Updates the information of images stored in the repository, writing to "**/opt/opengnsys/ogrepository/etc/repoinfo.json**". +Use the script "**updateRepoInfo.py**", which should be called by the endpoint (similar to the original bash script "**checkrepo**"). +This endpoint is invoked by "**deleteImage.py**" (to refresh info after deletion) and should also be called by ogCore or ogLive when a new image is created. + +**URL:** `/ogrepository/v1/images` +**HTTP Method:** PUT + +**Request Example:** + +```bash +curl -X PUT -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/images +``` + +**Responses:** +- **500 Internal Server Error:** An error occurred while updating the image information. +- **200 OK:** Update completed successfully. + +--- +### Check Image Integrity + +Checks the integrity of the specified image file. +Use the script "**checkImage.py**", which compares the current file size against the ".size" file and the MD5 hash of the last MB against the ".sum" file. +**NOTE**: The script requires passing the image name (with extension) as a parameter. This is determined in the API from the image ID (content of "full.sum"). + +**URL:** `/ogrepository/v1/status/images/{ID_img}` +**HTTP Method:** GET + +**Request Example:** + +```bash +curl -X POST -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/status/images/22735b9070e4a8043371b8c6ae52b90d +``` + +**Responses:** +- **500 Internal Server Error:** An error occurred while checking the image. +- **400 Bad Request:** The specified image was not found. +- **200 OK:** The image was successfully checked. +- **200 KO:** The image was checked but failed the test. + +--- +### Delete an Image + +Deletes the specified image, either permanently or by moving it to the trash. +Use the script "**deleteimage.py**", which includes trash functionality and calls "**updateRepoInfo.py**" to refresh repository info. +**NOTE**: The script requires passing the image name (with extension) as the first parameter and "-p" for permanent deletion. The image name is determined by the API from the image ID ("full.sum"), and the deletion method is specified via the URL. + +**URL:** `/ogrepository/v1/images/{ID_img}?method={method}` +**HTTP Method:** DELETE + +**URL Parameter:** +- **method**: Deletion method ("trash" or "permanent"). + +**Request Example:** + +```bash +curl -X DELETE -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/images/22735b9070e4a8043371b8c6ae52b90d?method=trash +``` + +**Responses:** +- **500 Internal Server Error:** An error occurred while deleting the image. +- **400 Bad Request:** The specified image was not found. +- **200 OK:** The image was deleted successfully. + +--- +### Recover an Image + +Recovers the specified image from the trash. +Use the script "**recoverImage.py**", which calls "**updateRepoInfo.py**" to refresh repository info. +**NOTE**: The script requires passing the image name (with extension) as a parameter, determined from the image ID ("full.sum"). + +**URL:** `/ogrepository/v1/trash/images` +**HTTP Method:** POST + +**Request Body (JSON):** +- **ID_img**: Image identifier (content of the associated "full.sum" file). + +**Request Example:** + +```bash +curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"ID_img":"22735b9070e4a8043371b8c6ae52b90d"}' http://example.com/ogrepository/v1/trash/images +``` + +**Responses:** +- **500 Internal Server Error:** An error occurred while recovering the image. +- **400 Bad Request:** The specified image was not found. +- **200 OK:** The image was recovered successfully. + +--- +### Permanently Delete an Image from the Trash + +Permanently deletes the specified image from the trash. +Use the script "**deleteTrashImage.py**", which calls "**updateTrashInfo.py**" to refresh trash info. +**NOTE**: The script requires passing the image name (with extension) as a parameter, determined from the image ID ("full.sum"). + +**URL:** `/ogrepository/v1/trash/images/{ID_img}` +**HTTP Method:** DELETE + +**Request Example:** + +```bash +curl -X DELETE -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/trash/images/22735b9070e4a8043371b8c6ae52b90d +``` + +**Responses:** +- **500 Internal Server Error:** An error occurred while deleting the image. +- **400 Bad Request:** The specified image was not found. +- **200 OK:** The image was deleted successfully. + +--- +### Send an Image via UDPcast + +Sends the specified image over Multicast using UDPcast. +Use the script "**sendFileMcast.py**", which invokes the "**udp-sender**" binary to perform the transmission. +**NOTE**: The script requires passing the image name (with extension) as the first parameter and transfer details as the second parameter (colon-separated). The image name is determined by the API from the image ID ("full.sum"), and the transfer details are supplied by ogCore. +**NOTE2**: This endpoint is asynchronous, so it only reports that the image is being sent and spawns a background process (it does not notify ogCore upon completion). + +**URL:** `/ogrepository/v1/udpcast` +**HTTP Method:** POST + +**Request Body (JSON):** +- **ID_img**: Image identifier (content of the associated "full.sum" file). +- **port**: Multicast port. +- **method**: Transmission mode ("half" or "full"). +- **ip**: Multicast IP. +- **bitrate**: Rate (in Mbps). +- **nclients**: Minimum number of clients. +- **maxtime**: Maximum wait time (in seconds). + +**Request Example:** + +```bash +curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"ID_img":"22735b9070e4a8043371b8c6ae52b90d","port":"9000","method":"full","ip":"239.194.17.2","bitrate":"70M","nclients":"20","maxtime":"120"}' http://example.com/ogrepository/v1/udpcast +``` + +**Responses:** +- **500 Internal Server Error:** An error occurred while sending the image. +- **400 Bad Request:** The specified image was not found. +- **200 OK:** The image is being sent via UDPcast. + +--- +### Get UDPcast Transmission Status + +Returns PIDs of active UDPcast transmission processes and their associated images (name and ID) in JSON format, or an informational message if none are active or on error. +Use the script "**getUDPcastInfo.py**", which should be called by the endpoint. + +**URL:** `/ogrepository/v1/udpcast` +**HTTP Method:** GET + +**Request Example:** + +```bash +curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/udpcast +``` + +**Responses:** +- **500 Internal Server Error:** An error occurred while checking UDPcast transmissions. +- **400 Bad Request:** No active UDPcast transmissions were found. +- **200 OK:** Active UDPcast transmission information was successfully retrieved. + - **Content:** Active UDPcast transmission information in JSON format. + ```json + { + "6720": { + "image_id": "22735b9070e4a8043371b8c6ae52b90d", + "image_name": "Ubuntu20.img" + }, + "6721": { + "image_id": "9e7cd32c606ebe5bd39ba212ce7aeb02", + "image_name": "Windows10.img" + } + } + ``` +--- +### Cancel UDPcast Transmission + +Cancels the active UDPcast transmission for the specified image by stopping its "udp-sender" process. +Use the script "**stopUDPcast.py**", which should be called by the endpoint. +**NOTE**: This script requires passing the image name (with extension) as a parameter, determined from the image ID ("full.sum"). + +**URL:** `/ogrepository/v1/udpcast/images/{ID_img}` +**HTTP Method:** DELETE + +**Request Example:** + +```bash +curl -X DELETE -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/udpcast/images/22735b9070e4a8043371b8c6ae52b90d +``` + +**Responses:** +- **500 Internal Server Error:** An error occurred while canceling the UDPcast transmission. +- **400 Bad Request:** The specified image was not found. +- **400 Bad Request:** No active UDPcast transmissions were found for the specified image. +- **200 OK:** The UDPcast transmission was successfully canceled. + +--- +### Send an Image via UFTP + +Sends the specified image via Unicast or Multicast using UFTP. +Use the script "**sendFileUFTP.py**", which requires destination ogLive clients to run a UFTPD daemon first (via "**listenUFTPD.py**"). This is the inverse of UDPcast: clients listen first, then the server sends. +**NOTE**: The script requires passing the image name (with extension) as the first parameter and transfer details (colon-separated) as the second parameter. The image name is determined by the API from the image ID ("full.sum"), and the transfer details come from ogCore. +**NOTE2**: This endpoint is asynchronous, so it only reports that the image is being sent and spawns a background process (no completion callback). + +**URL:** `/ogrepository/v1/uftp` +**HTTP Method:** POST + +**Request Body (JSON):** +- **ID_img**: Image identifier (content of the associated "full.sum" file). +- **port**: Multicast port. +- **ip**: Unicast/Multicast IP. +- **bitrate**: Rate ("K" for Kbps, "M" for Mbps, or "G" for Gbps). + +**Request Example:** + +```bash +curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"ID_img":"22735b9070e4a8043371b8c6ae52b90d","port":"9000","ip":"239.194.17.2","bitrate":"1G"}' http://example.com/ogrepository/v1/uftp +``` + +**Responses:** +- **500 Internal Server Error:** An error occurred while sending the image. +- **400 Bad Request:** The specified image was not found. +- **200 OK:** The image is being sent via UFTP. + +--- +### Get UFTP Transmission Status + +Returns PIDs of active UFTP transmission processes and their associated images (name and ID) in JSON format, or an informational message if none are active or on error. +Use the script "**getUFTPInfo.py**", which should be called by the endpoint. + +**URL:** `/ogrepository/v1/uftp` +**HTTP Method:** GET + +**Request Example:** + +```bash +curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/uftp +``` + +**Responses:** +- **500 Internal Server Error:** An error occurred while checking UFTP transmissions. +- **400 Bad Request:** No active UFTP transmissions were found. +- **200 OK:** Active UFTP transmission information was successfully retrieved. + - **Content:** Active UFTP transmission information in JSON format. + ```json + { + "3427": { + "image_id": "22735b9070e4a8043371b8c6ae52b90d", + "image_name": "Ubuntu20.img" + }, + "4966": { + "image_id": "9e7cd32c606ebe5bd39ba212ce7aeb02", + "image_name": "Windows10.img" + } + } + ``` +--- +### Cancel UFTP Transmission + +Cancels the active UFTP transmission for the specified image by stopping its "uftp" process. +Use the script "**stopUFTP.py**", which should be called by the endpoint. +**NOTE**: This script requires passing the image name (with extension) as a parameter, determined from the image ID ("full.sum"). + +**URL:** `/ogrepository/v1/uftp/images/{ID_img}` +**HTTP Method:** DELETE + +**Request Example:** + +```bash +curl -X DELETE -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/uftp/images/22735b9070e4a8043371b8c6ae52b90d +``` + +**Responses:** +- **500 Internal Server Error:** An error occurred while canceling the UFTP transmission. +- **400 Bad Request:** The specified image was not found. +- **400 Bad Request:** No active UFTP transmissions were found for the specified image. +- **200 OK:** The UFTP transmission was successfully canceled. + +--- +### Send an Image via P2P + +Sends the specified image via P2P by starting the tracker and seeder (which will track and seed all torrents in the images directory). +Use the scripts "**runTorrentTracker.py**" and "**runTorrentSeeder.py**", called by the endpoint. +**NOTE**: These scripts take no parameters, but the endpoint must verify the image exists before invoking them, so ogCore must send the image ID ("full.sum") in the JSON. +**NOTE2**: This endpoint is asynchronous, reporting the send has started and running in the background (no completion callback). + +**URL:** `/ogrepository/v1/p2p` +**HTTP Method:** POST + +**Request Body (JSON):** +- **ID_img**: Image identifier (content of the associated "full.sum" file). + +**Request Example:** + +```bash +curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"ID_img":"22735b9070e4a8043371b8c6ae52b90d"}' http://example.com/ogrepository/v1/p2p +``` + +**Responses:** +- **500 Internal Server Error:** An error occurred while attempting to send the image. +- **400 Bad Request:** The specified image was not found. +- **200 OK:** The image is being sent via P2P. + +--- +### Cancel P2P Transmissions + +Cancels all active P2P transmissions on this ogRepository by stopping "bttrack" and "btlaunchmany.bittornado" processes. +Use the script "**stopP2P.py**", called by the endpoint. +**NOTE**: There is no way to cancel a single-image transfer, as both services handle all torrents in the directory. + +**URL:** `/ogrepository/v1/p2p` +**HTTP Method:** DELETE + +**Request Example:** + +```bash +curl -X DELETE -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/p2p +``` + +**Responses:** +- **500 Internal Server Error:** An error occurred while canceling P2P transmissions. +- **200 OK:** P2P transmissions were canceled successfully. + +--- +### Transfer an Image between Repositories + +Imports an image from a remote repository into the local repository. +Use the script "**importImage.py**", called by the endpoint. +**NOTE**: The script requires passing the image name (with extension), the remote repository’s IP or hostname, and the remote user as parameters. These must be sent from ogCore (the local repository cannot derive them from a stored ID). +**NOTE2**: This endpoint is asynchronous, reporting the transfer has started and spawning a background process that will notify ogCore upon completion. +**NOTE3**: After import, it verifies integrity by comparing "sum" and "size" files; if successful, it runs "createTorrentSum.py" to generate the ".torrent" file and update repo info; if not, it deletes the imported files. + +**URL:** `/ogrepository/v1/repo/images` +**HTTP Method:** POST + +**Request Body (JSON):** +- **image**: Image name (with extension). +- **repo_ip**: Remote repository IP or hostname. +- **user**: User for remote access. + +**Request Example:** + +```bash +curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"image":"Windows10.img","repo_ip":"192.168.56.100","user":"opengnsys"}' http://example.com/ogrepository/v1/repo/images +``` + +**Responses:** +- **500 Internal Server Error:** An error occurred while transferring the image. +- **400 Bad Request:** The specified image and/or remote host was not found. +- **200 OK:** The image is being transferred. + +--- +### Backup an Image + +Backs up an image to a remote host (which need not have OpenGnsys installed) over SSH key authentication. +Use the script "**backupImage.py**", called by the endpoint. +**NOTE**: The script requires passing the image ID ("full.sum"), remote host IP/hostname, remote user, and remote path as parameters. The image ID is determined by the API; the others must be sent in the JSON. +**NOTE2**: This endpoint is asynchronous, reporting the backup has started and spawning a background process that will notify ogCore upon completion. +**NOTE3**: After backup, it verifies integrity by comparing "sum" and "size" files; if it fails, it deletes the backup. + +**URL:** `/ogrepository/v1/repo/images` +**HTTP Method:** PUT + +**Request Body (JSON):** +- **ID_img**: Image identifier (content of the associated "full.sum" file). +- **repo_ip**: Remote host IP or hostname. +- **user**: User for SSH access. +- **remote_path**: Remote path to store the backup. + +**Request Example:** + +```bash +curl -X PUT -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"ID_img":"22735b9070e4a8043371b8c6ae52b90d","repo_ip":"192.168.56.100","user":"opengnsys","remote_path":"/home/opengnsys"}' http://example.com/ogrepository/v1/repo/images +``` + +**Responses:** +- **500 Internal Server Error:** An error occurred while backing up the image. +- **400 Bad Request:** The specified image and/or remote host was not found. +- **200 OK:** The backup is in progress. + +--- +### Convert Virtual Image to OpenGnsys Image + +Converts a virtual image (previously copied to "opt/opengnsys/ogrepository/images_virtual") into an OpenGnsys "img" using partclone and lzop. +Use the script "**convertVMtoIMG.py**", called by the endpoint. +**NOTE**: The script requires passing the virtual image name (with extension) and the filesystem type (blkid format) as parameters; these come from ogCore in the JSON. +**NOTE2**: This endpoint is asynchronous, reporting the conversion has started and spawning a background process that will notify ogCore upon completion. + +**URL:** `/ogrepository/v1/images/virtual` +**HTTP Method:** POST + +**Request Body (JSON):** +- **virtual_image**: Virtual image name (with extension). +- **filesystem**: Filesystem of the partition to clone (blkid format). + +**Request Example:** + +```bash +curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"virtual_image":"UbuntuVM.vdi","filesystem":"ext4"}' http://example.com/ogrepository/v1/images/virtual +``` + +**Responses:** +- **500 Internal Server Error:** An error occurred while converting the virtual image. +- **400 Bad Request:** The specified virtual image was not found. +- **200 OK:** The virtual image is being converted. + +--- +### Convert OpenGnsys Image to Virtual Image + +Converts an OpenGnsys "img" into a virtual disk (vdi, vmdk, etc.) and stores it in "opt/opengnsys/ogrepository/images_virtual/export". +Use the script "**convertIMGtoVM.py**", called by the endpoint. +**NOTE**: The script requires passing the image name (with extension) and the target virtual disk extension ("vdi", "vmdk", etc.) as parameters; the image name comes from ogCore via the API, and the extension via JSON. +**NOTE2**: This endpoint is asynchronous, reporting the conversion has started and spawning a background process that will notify ogCore upon completion. + +**URL:** `/ogrepository/v1/images/virtual` +**HTTP Method:** PUT + +**Request Body (JSON):** +- **ID_img**: Image identifier (content of the associated "full.sum" file). +- **vm_extension**: Target virtual disk extension ("vdi", "vmdk", etc.). + +**Request Example:** + +```bash +curl -X PUT -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"ID_img":"22735b9070e4a8043371b8c6ae52b90d","vm_extension":"vdi"}' http://example.com/ogrepository/v1/images/virtual +``` + +**Responses:** +- **500 Internal Server Error:** An error occurred while converting the image to virtual. +- **400 Bad Request:** The specified image was not found. +- **200 OK:** The image is being converted to virtual. + +--- +### Rename an Image + +Renames the specified image (and all associated files) to the new name. +Use the script "**renameImage.py**", called by the endpoint. +**NOTE**: The script requires passing the current image name (without extension) and the new name as parameters. The current name is determined by the API from the image ID ("full.sum"), and the new name is provided via JSON. + +**URL:** `/ogrepository/v1/images/rename` +**HTTP Method:** POST + +**Request Body (JSON):** +- **ID_img**: Image identifier (corresponding to the content of the associated "full.sum" file). +- **image_new_name**: New name to assign to the image. + +**Example Request:** + +```bash +curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"ID_img":"22735b9070e4a8043371b8c6ae52b90d", "image_new_name":"Ubuntu_BKP"}' http://example.com/ogrepository/v1/images/rename +``` +**Responses:** +- **500 Internal Server Error:** An error occurred while renaming the image. +- **400 Bad Request:** The specified image was not found. +- **200 OK:** The image was successfully renamed. + +--- +### Create auxiliary files + +Auxiliary files ".sum", ".full.sum", ".size" and ".torrent" will be created for the specified image. +This can be done with the "**createTorrentSum.py**" script, which must be called by the endpoint. +**NOTE**: The script requires that the image name (with extension) be passed as a parameter. This parameter cannot be retrieved via the API from the image ID (as in other cases), because the ID corresponds to the content of the associated "full.sum" file (which will not be created until this script is executed). +**NOTE2**: This endpoint is asynchronous, as it may take some time. It only reports that the auxiliary files are being created and spawns a parallel process that will notify ogCore when the task is complete (by calling an ogCore endpoint). + +**URL:** `/ogrepository/v1/images/torrentsum` +**HTTP Method:** POST + +**Request Body (JSON):** +- **image**: The name of the image (with extension). + +**Example Request:** + +```bash +curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"image":"Windows10.img"}' http://example.com/ogrepository/v1/images/torrentsum +``` +**Responses:** +- **500 Internal Server Error:** An error occurred while creating the auxiliary files. +- **400 Bad Request:** The specified image was not found. +- **200 OK:** The auxiliary files are being created. + +--- +### Send Wake On Lan packet + +A Wake On Lan packet will be sent to the specified MAC address via the specified broadcast IP. +This can be done with the "**sendWakeOnLan.py**" script, which must be called by the endpoint. +**NOTE**: This script requires the broadcast IP address as the first parameter and the destination MAC address as the second parameter. These data must be sent from ogCore (in JSON). + +**URL:** `/ogrepository/v1/wol` +**HTTP Method:** POST + +**Request Body (JSON):** +- **broadcast_ip**: Broadcast IP to which to send the packet (can be "255.255.255.255" or a subnet broadcast IP). +- **mac**: MAC address of the device to be powered on via Wake On Lan. + +**Example Request:** + +```bash +curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"broadcast_ip":"255.255.255.255", "mac":"00:19:99:5c:bb:bb"}' http://example.com/ogrepository/v1/wol +``` +**Responses:** +- **500 Internal Server Error:** An error occurred while sending the Wake On Lan packet. +- **200 OK:** The Wake On Lan packet was sent successfully. + +--- diff --git a/i18n-docu/docs/en/index.md b/i18n-docu/docs/en/index.md new file mode 100644 index 0000000..de5209b --- /dev/null +++ b/i18n-docu/docs/en/index.md @@ -0,0 +1,297 @@ +# Introduction to OpenGnsys v3.0 + +## 1. Introduction + +The OpenGnsys project (pronounced OpenGenesis) brings together the joint effort of several Spanish public universities to build an application that enables easy centralized management of workstations and servers. It allows distribution, installation, and deployment of different operating systems. + +![ogintro-universidades.png](../assets/images/screenshots/ogintro-universidades.png) + +OpenGnsys was born out of the need to have a set of free and open tools forming a complete, versatile, and intuitive system for managing and cloning machines, which can be used both in computer labs and for reinstalling workstations and servers. + +The OpenGnsys website (www.opengnsys.es) provides all project manuals, the full source code of various versions, discussion and support forums, API documentation, and more. + +### 1.1. Background, Present, and Future + +OpenGnsys originated in May 2009 after the RedIRIS Working Groups held in Málaga, as an effort to integrate several projects in development: + +- Brutalix, University of Zaragoza +- Advanced Cloning Environment (EAC), University of Málaga +- Hidra Web Interface, University of Seville + +Currently, several universities collaborate on the project. + +This version addresses the following improvements: +- Python as the main programming language +- Communication among all components via REST API +- New web console: symfony-angularjs +- Image synchronization with GIT +- Logging and monitoring service + +## 2. Features of OpenGnsys + +The main management of OpenGnsys is based on a simple web interface that allows common tasks for managing software distribution on various clients. However, OpenGnsys’s structure is versatile enough to adapt to the needs of different network architectures in companies and institutions. + +For an administrator with advanced knowledge, OpenGnsys allows adding new functionalities via the cloning engine’s function API and defines how to integrate them into the console easily, as well as how to define startup menus for different clients. + +The usual workflow starts from a model machine where one or more operating systems are installed with the necessary programs and data, creating images of its file systems, and then replicating them to all machines in an organization or to a specific group. + +![ogintro-equipomodelo.png](../assets/images/screenshots/ogintro-equipomodelo.png) + +Specific configuration and data modification tasks on each client can be performed directly from OpenGnsys once the image dump process is finished, without needing to boot the target operating system, by accessing the data on the disks. This provides a significant advantage over other similar products, even commercial ones. + +Image and file distribution can be done flexibly, so different communication protocols have been implemented, such as Unicast, Multicast, and P2P; and data can also be available offline (without the need for server communication) by accessing each client’s local data cache or an external storage device. + +File system-level restoration allows restoring to disk partitions smaller than the original size, down to the minimum occupied by the data. + +Restoring the original operating system not only makes an exact copy of the model: it can also perform destination machine configuration tasks such as changing the machine name, detecting hardware and installed software inventory, copying or deleting files and directories, modifying the Windows registry, joining a domain, etc. + +By definition, OpenGnsys is a Free Software project. As such, all code is licensed under GPLv3 or later, while the course documentation is available under the Creative Commons Attribution-NonCommercial-ShareAlike license. + +## 3. Architecture + +In this version of OpenGnsys, emphasis has been placed on solution modularity, allowing deployment of different components on a single monolithic server or on separate machines. This provides greater flexibility to cover any scenario. + +OpenGnsys’s architecture is flexible enough to adapt to the needs of different computer network models in companies and institutions, and can be used in various scenarios: + +1. Centralized management of ICT Support Units for Teaching and Research, both for in-person teaching labs and self-learning. +2. Maintenance of personal computer fleets of an institution’s members. +3. Deployment and maintenance of servers in a particular Data Center. +4. Administration of machine cloning repositories for helpdesk services or institutional information points. + +### 3.1. Service Layers + +OpenGnsys consists of a set of modules separated into different service layers: + +- **Lower layer**: responsible for direct access to client devices and cloning engine functions. +- **Intermediate layer**: made up of tools for performing complex tasks and environment customization. +- **Administration layer**: comprising the web interface and management database. + +### 3.2. Modules + +The OpenGnsys Project is a modular system integrating interrelated components that can be adapted to a variety of work scenarios. These components include standard services (file servers, web, database, DHCP, PXE, etc.) and custom tools developed for the project, which together offer all system features. + +The following describes the different components of the OpenGnsys Project: + +**OpenGnsys Web Administration** + +This service consists of three components that centralize the solution’s organization: + +- **ogCore**: the API interface that interconnects all components and manages the solution from the web interface. +- **ogGUI**: the web interface that allows complete solution administration without using the console. +- **ogDB**: the OpenGnsys database that centralizes all information and, in this version, has been architecturally redesigned to handle the new solution paradigm. + +**OpenGnsys DHCP** + +The DHCP service has been updated to be deployed optionally and modularly, with an API for its administration. The current OpenGnsys version uses KEA DHCP. + +**OpenGnsys Boot** + +The OpenGnsys boot system, formerly integrated into "OpenGnsys Server," has become a module with an administration API, allowing its installation as an "optional" component (though essential for OpenGnsys operation). This module manages ogLive assignments, as well as templates and their assignments. + +**OpenGnsys Repository** + +Manages the image repository for each administrative unit defined in the OpenGnsys Repository module and provides complementary file services (currently using SAMBA as the file server). One or more modules can exist, depending on the organization model. +In this version, "synchronized images" via "git images" functionality have been integrated, allowing image creation by this method and increasing solution flexibility. + +**OpenGnsys Live Client –ogLive–** + +In this version, the ogLive kernel (version 6.8) and internal components such as ogBrowser have been updated to fix certain shortcomings and add new features. + +This client-side execution agent integrates the following functionalities: + +- Graphical interface for selecting admin-defined options. +- Interactive execution of cloning engine functions in administrator mode. +- Execution of tasks sent from the OpenGnsys Administrator module. + +It consists of two stages: the first load stage (tftboot) and the second load stage (ogLive via NFS/SAMBA). Later topics will cover more about ogLive. + +**OpenGnsys Cloning Engine** + +Function libraries of the cloning engine, installation, and OS boot on the client. In this version, functions have been migrated to Python for code standardization and certain features refined. + +**OpenGnsys Installer** + +Installation, update, and uninstallation programs including configuration generator, client boot generator, component package generator, etc. +In version 3.0, there are four installation methods: +- “Graphical” installation via script. +- Installation via Debian packages. +- Installation and deployment via Docker containers. +- Installation and deployment via preconfigured OVAs ready for distribution. + +#### 3.2.1. Diagram + +![ogarquitectura.png](../assets/images/screenshots/ogarquitectura.png) + +### 3.3. Organization Model + +In version 3.0, information organization has been made more flexible by creating a more organic hierarchy. An Organizational Unit can be one of four types: + +- Center +- Classroom Group +- Classroom +- Client Group + +From an organization’s (university’s) perspective, OpenGnsys consists of a central management console divided into independent Administrative Units, each of which can have one or more data repositories serving one or more computer classroom groups. + +This distribution allows operations to be applied to any scope from the Organizational Unit (or Administrative Unit) down to a specific client. + +Additionally, a filtering and view system has been created to operate on groups of machines based on criteria such as Operating System, State (on/off), etc. + +![ogintro-model_organiza.png](../assets/images/screenshots/ogintro-model_organiza.png) + +## 4. Communication Protocols + +Cloning a file system across many computers involves transferring large volumes of data and thus significant deployment time. OpenGnsys mitigates these impacts by implementing several data transfer methods using three different communication protocols. + +The protocols available for cloning operations are: + +- **Unicast**: all data is transmitted independently to each affected client. The volume sent equals the image size multiplied by the number of clients. This is the simplest and most basic method but the least efficient. It is used as a fallback when any other method’s transmission fails. + +- **Multicast**: data is sent simultaneously to all session clients, so the image is sent only once. This method is very efficient but incompatible with some network hardware. Session-specific parameters must be specified, such as multicast IP address, port, and transmission rate. + +- **Bittorrent (P2P)**: the repository sends random image chunks to each client in the swarm. When a client receives a complete chunk, it retransmits it to the rest until all have completed the transfer. This protocol is very efficient, though it consumes much network bandwidth, requires data to be pre-stored in each client’s local cache, and needs parameters such as maximum clients, whether they will participate in distribution, and how long they will continue transmitting after receiving all data. P2P protocols may also be filtered on some networks. + +Image generation from the model and its sending to the repository always use Unicast, since communication involves only one sender (the model client) and one receiver (the image repository). + +It is recommended that the student evaluate the different restoration protocols in their operational environment to verify compatibility with their data network and identify the most efficient option in each case. + +![ogintro-protocolos.png](../assets/images/screenshots/ogintro-protocolos.png) + +## 5. Basic Operation Concepts + +Working with OpenGnsys requires administrators to understand some basic operation concepts. + +**Adding New Computers** + +Process to register new machines in the system by first including their data in the DHCP configuration and then copying this information into the web administration console. Note that OpenGnsys uses only static DHCP data. + +**Boot Sequence** + +Preferred execution order after a computer is powered on. An OpenGnsys client must be configured to boot first from the network interface. For security and control, disabling direct boot from local devices may be advisable. + +**OpenGnsys Client** + +A machine registered in the system that, when powered on, receives its connection data from OpenGnsys (via DHCP) and its default boot process (using PXE). + +**Boot Process** + +Execution sequence that loads the computer’s operating system. OpenGnsys offers choosing between an OS already installed on the machine or a small GNU/Linux system used for cloning operations. The standard OpenGnsys client boot process ends by running the OpenGnsys Browser. + +**OpenGnsys Browser** + +Web browser that shows the user the operation selection menu for a given client. It has two modes: user (menu and status bar only) and administrator (also includes an address bar, an output message console, and a command execution terminal). + +**Menu** + +Set of options the administrator offers the user, displayed by the Browser. You can define a normal startup menu (usually including OS boot, file system restoration, and shutdown) and an optional administration menu (which can include predefined management operations like image creation). + +**Model Client** + +A machine with all software installed and correctly configured that must be cloned. To avoid post-configuration issues, it should have hardware similar to target machines. However, it need not have the same partition layout or size as others, though it is recommended. + +**Computer Group** + +A set of clients that share the same hardware profile or are located in the same room, and that share the same installation distribution and post-configuration data. + +**File System Image** + +A file containing an exact copy of one of the model client’s file systems. OpenGnsys can maintain several associated files, such as checksums and Bittorrent transmission data. + +**Post-Configuration** + +Sequence of commands for individual client customization, executed after a file system clone, which may include creating, deleting, or editing files. + +**Local Cache** + +Client’s local data repository that speeds up cloning by avoiding connection to the remote repository, storing image data, post-configuration data, and optionally client boot files. The local cache is a file system usually formatted as Ext4 and often on the disk 1’s fourth partition. + +## 6. The Web Interface + +OpenGnsys Web Administrator is a management console that handles clients in an organizational unit, performing both system-predefined and operator-customized operations. + +### 6.1. Overview + +The web console is divided into main areas: + +1. Top bar with configuration and status buttons. +2. Left area with the module tree for operations. +3. Right area with operation forms and results. + +![ogintro-webconsole.png](../assets/images/screenshots/ogintro-webconsole.png) + +The main objects accessible via menu bar tools are: + +- **Groups**: hierarchical distribution of the organizational unit based on classroom groups, classrooms, computer groups, and individual computers. +- **Actions**: list of basic commands and grouping of administrator-defined procedures and tasks. Actions run on classroom tree objects. +- **Subnets**: DHCP service administration module (ogDHCP). +- **Boot**: equipment boot service administration module (ogBoot). +- **Calendars**: manages access availability per defined calendars for RemotePC classroom machines. +- **Software**: manages different software profiles for client machines. +- **Repositories**: administers the ogRepository component, integrating monolithic images, synchronized images (git), and their management via the new API. +- **Menus**: list of startup menus assignable to classroom tree objects. + +These menus include, among others, the following primary operation types: + +- **Commands**: submenu of predefined basic actions executed on classroom tree elements. +- **Wizards**: submenu of complex commands allowing customization during execution. +- **Procedures**: ordered sequences of commands with custom parameters. +- **Tasks**: commands executed on a specific scope and schedulable for execution at set times. +- **Action Queues**: lists of pending actions in a specific scope. + +### 6.2. Other Important Elements + +#### 6.2.1. Advanced NetBoot + +Integrated into the “ogBoot” module, which now has an interaction and administration API. + +Tool to select the boot type for all or part of the clients in a classroom, choosing among different startup methods. + +OpenGnsys defines five default boot methods: + +**Local boot from the first disk (default):** +- Local boot from the 1st partition. +- Local boot from the 2nd partition. +- Local boot from the 3rd partition. + +**Boot of an OS –ogLive– for machine cloning:** +- Network boot with Browser in user mode (ogLive). +- Network boot with Browser in administrator mode (ogLiveAdmin). + +NetBoot supports both legacy BIOS and UEFI-based systems and allows adding boot options for a second or third disk. + +#### 6.2.2. Menus + +A menu is a modified web page or a list of items presented to the client’s Browser as the home page. It typically includes options for booting installed operating systems, manipulating local data, or executing predefined actions on the client. + +Menus defined in the web administration console can be classified by generation method: + +**Automatic Menu** +Item list generated from defined procedures. + +**Custom Menu** +Modified HTML web page that can include URLs with commands or scripts executed on the client. + +Menus can also be classified by required access type: + +**Public Menu** +Page and item list executable by any user. + +**Private Menu** +Page or item list executable only after entering the administrator password. + +#### 6.2.3. Task Scheduling + +Scheduling task execution allows easy management of launching tasks in their execution scopes at specified times. + +A schedule can comprise various chronological elements, enabling task launches according to timing needs, specifying days and even hours marked on a calendar. + +## 7. References + +[OpenGnsys project website](http://www.opengnsys.es) + +## 8. How to Cite Us + +To include a citation of this source, copy and paste the following text: + +- You must include the following CC license in your work: + Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International license. diff --git a/i18n-docu/docs/en/index_installation.md b/i18n-docu/docs/en/index_installation.md new file mode 100644 index 0000000..d9056bc --- /dev/null +++ b/i18n-docu/docs/en/index_installation.md @@ -0,0 +1,470 @@ +# Non-graphical installer + +## Requirements + +- Server running Ubuntu 24.04 +- Internet connection +- SSH terminal access +- Root access + +## Installation process + +Log in to the machine where you want to install as root. + +![Imagen1.png](../assets/images/screenshots/Imagen1.png) + +Run the following commands: + +```bash + curl -q -k https://ognproject.evlt.uma.es/gitea/api/v1/repos/opengnsys/oginstaller/raw/non_graf_installer/python-installer/opengnsys_installer-v2.sh?ref=main -o opengnsys_installer.sh + +chmod 755 opengnsys_installer.sh + +./opengnsys_installer.sh +``` + +If you want to install the latest packages built from each repository’s main branch, run: + +```bash + curl -q -k https://ognproject.evlt.uma.es/gitea/api/v1/repos/opengnsys/oginstaller/raw/non_graf_installer/python-installer/opengnsys_installer-v2.sh?ref=main -o opengnsys_installer.sh + +chmod 755 opengnsys_installer.sh + +./opengnsys_installer.sh nightly +``` + + +![Imagen2.png](../assets/images/screenshots/Imagen2.png) + +A screen appears showing the components to install and the version to install. Select the desired components and the required product version. In this example we’ll select all components and the version opengnsys_devel-0.0.10. + +![Imagen3.png](../assets/images/screenshots/Imagen3.png) + +### Installation type selection + +Next you’ll choose whether to install all components on a single node or across multiple nodes. + +#### Single-node installation + +If you select the single-node option: + +![select_mono](../assets/images/screenshots/Installatiion_type_selection.png) + +You’ll then be prompted to enter the IP address where all components will communicate. + +![mononode_ip](../assets/images/screenshots/mononode_ip.png) + +Next you’ll see a screen listing all selected components; just press OK. + +![mononode_comp_select](../assets/images/screenshots/mononode_comp_selection.png) + +#### Multi-node installation + +For a multi-node installation, where each component can reside on separate machines: + +![select_multi](../assets/images/screenshots/select_multinode.png) + +You’ll be prompted to enter the IPs of the machines where each component will be deployed. + +![multinode_ip](../assets/images/screenshots/multinode_ip.png) + +Once these steps are completed for either single-node or multi-node, you’ll be shown screens to confirm the input parameters. If they’re correct, pressing OK is sufficient. Details for each component follow. + +### ogCore + +For the ogCore service the required data are: + +- Administrator user: default value ogadmin +- User password: default value 12345678 + +![ogcore_install.png](../assets/images/screenshots/ogcore_install.png) + +### ogGui + +For the graphical interface service, the required data are: + +- ogCore server connection URL: default https://\:8443 +- Mercure connection URL: default https://\:3000/.well-known/mercure + +![oggui_install](../assets/images/screenshots/oggui_install.png) + +### ogDHCP + +For the DHCP service the parameters requested are: + +- Network interfaces to serve DHCP. A list of available interfaces is shown; select the ones you want to provide IPs on. +- ogBoot server IP (default: IP of the default-route interface) +- DHCP server IP (default: IP of the default-route interface) + +![ogdhcp_install.png](../assets/images/screenshots/ogdhcp_install.png) + +### ogBoot (PXE) + +Required parameters: + +- ogLive to install on the boot server. The list comes from the ogLives available in the downloads directory. +- ogBoot server IP (default: IP of the default-route interface) +- Port for ogBoot service (default: 8082) +- ogCore URL (default: IP of the default-route interface) +- Samba export user (note: this is embedded in the ogLive, so don’t change it unless your ogLive was created with a custom user) +- Samba user password (note: as above, embedded in the ogLive) + +![ogboot_install](../assets/images/screenshots/ogboot_install.png) + +### ogRepository + +Required parameters: + +- ogRepository service IP (default: IP of the default-route interface) +- ogCore service IP (default: IP of the default-route interface) +- Samba export user (note: embedded in the ogLive) +- Samba user password (note: embedded in the ogLive) + +![ogrepository_install](../assets/images/screenshots/ogrepository_install.png) + +## Installation + +Once all forms are completed, the installation process begins and a screen shows progress: + +![Imagen30.png](../assets/images/screenshots/Imagen30.png) + +When installation finishes, a summary appears: + +![Imagen31.png](../assets/images/screenshots/Imagen31.png) + +The file /opt/opengnsys/release is created with the installed version: + +```sh +(og) root@install:~# cat /opt/opengnsys/release +Installed version: opengnsys-1.6.0-beta +``` + +***NOTE: If installing from the nightly repository, the release file is not created*** + +## Service check + +After installation completes, verify that services installed correctly and are functioning as expected. + +### User permissions + +All components are installed under /opt/opengnsys/, where is: + +- ogboot +- ogdhcp +- ogrepository +- ogcore +- oggui +- ogclient + +There is also a folder named ogclient_log used for client-mounted logs; this will be removed in future releases. + +All directories belong to user opengnsys and group www-data, except ogclient and ogclient_log which belong to group opengnsys. + +![Imagen9a.png](../assets/images/screenshots/Imagen9a.png) + +In /run/php/ you’ll find the sockets serving the ogboot and ogdhcp APIs. If services are running, these files must belong to user opengnsys. + +![Imagen9.png](../assets/images/screenshots/Imagen9.png) + +In /etc/sudoers.d/ you’ll find an opengnsys file with the following configuration: + +![Imagen10.png](../assets/images/screenshots/Imagen10.png) + +## Stopping and starting services + +All services run behind their own API and are managed as standard Linux services, though each has its particulars. + +### ogCore + +#### Description + +The ogCore service comprises three components: + +- API +- Database +- Mercure + +Both the API and Mercure run behind an nginx reverse proxy. + +The architecture of ogCore is shown in this diagram: + +![ogcore-schema](../assets/images/screenshots/opengsys-ogcore.png) + +#### Stopping and starting + +```bash +# Arranque +root@qindel-box:~# systemctl start nginx + +# Parada +root@qindel-box:~# systemctl stop nginx + +# Estado +root@qindel-box:~# systemctl status nginx + +# Logs del servicio +root@qindel-box:~# journalctl -f SYSLOG_IDENTIFIER=ogcore +``` + +#### Configuration files + +Located in **/opt/opengnsys/ogcore/** +| File | Description | +|---------------------------------------------|--------------------------------------------------------------------| +| /opt/opengnsys/ogcore/api/env.json | Definition of endpoints ogCore connects to | +| /opt/opengnsys/ogcore/api/.env.local.php | Internal Symfony file | +| /etc/nginx/sites-enabled/ogcore.conf | nginx config for the ogCore API | +| /etc/nginx/sites-enabled/mercure.conf | nginx config for the Mercure service | + +#### Accessing the service + +The ogCore API is available on the installation IP at port 8443. To access the service API, go to: + +https://**ip**:8443/ + +![imagen11](../assets/images/screenshots/Imagen11.png) + +You can test endpoints via Swagger: + +![imagen12](../assets/images/screenshots/Imagen12.png) + +### ogGui + +#### Description + +A static Angular application served by nginx. + +#### Stopping and starting + +```bash +# Arranque +root@qindel-box:~# systemctl start nginx + +# Parada +root@qindel-box:~# systemctl stop nginx + +# Estado +root@qindel-box:~# systemctl status nginx +``` + +As a client-side app, logs appear in the browser’s debug console, and you can view nginx logs for access and errors. + +#### Configuration files + +| File | Description | +|-------------------------------------------|---------------------------------------------| +| /etc/nginx/sites-enabled/oggui.conf | URL of the endpoint pointing to ogCore | +| /opt/opengnsys/oggui/etc/config.json | Mercure and ogCore endpoints | + +#### Accessing the service + +To access the GUI, go to port 4200 on the deployment host: + +https://**ip**:4200/ + +![imagen13](../assets/images/screenshots/Imagen13.png) + +Enter the user and password configured during installation: + +![imagen14](../assets/images/screenshots/Imagen14.png) + +### ogBoot + +This service includes multiple components running on the deployment host. The API runs under nginx, handling HTTP/S, Samba exports, and TFTP boot. + +The ogBoot code is in /opt/opengnsys/ogboot/, with key directories: + +- client: Samba-exported images and cloning engine +- tftpboot: Samba-exported iPXE kernels and ogLive images +- Other folders are the API itself + +#### Stopping and starting + +- nginx + +```bash +# Arranque +systemctl start nginx +systemctl start tftpd-ha +systemctl start samba + +# Parada +systemctl stop nginx +systemctl stop tftpd-ha +systemctl stop samba + +# Reinicio +systemctl restart nginx +systemctl restart tftpd-ha +systemctl restart samba + +# Status +systemctl status nginx +systemctl restart tftpd-ha +systemctl restart samba +``` + +Logs for nginx and the API are in: + +- /var/log/nginx/ogboot_access.log +- /var/log/nginx/ogboot_error.log + +#### Configuration files + +| Location | File | Description | +|---------------------------------|----------------------|---------------------------------------| +| /opt/opengnsys/ogboot/ | .env | Symfony configuration file | +| /etc/nginx/sites-available/ | ogboot.conf | nginx configuration file | +| /etc/samba | smb-ogboot.conf | Samba configuration file | +| /etc/samba | smb-ogclient.conf | Samba config for the clone engine | + +#### Accessing the service + +The ogBoot API listens on port 8082 via HTTP. To view the API docs: + +http://**ip**:8082/ogboot/api/doc + +![imagen15](../assets/images/screenshots/Imagen15.png) + +If all is well, the status endpoint returns something like: + +![imagen16](../assets/images/screenshots/Imagen16.png) + +### ogDHCP + +#### Description + +Manages DHCP using Kea, controlled by a Symfony API running under nginx. + +#### Stopping and starting + +```bash +# Arranque +systemctl start nginx +systemctl start kea-dhcp4-server +systemctl start kea-ctrl-agent + +# Parada +systemctl stop nginx +systemctl stop kea-dhcp4-server +systemctl stop kea-ctrl-agent + +# Restart +systemctl restart nginx +systemctl restart kea-dhcp4-server +systemctl restart kea-ctrl-agent + +# Status +systemctl status nginx +systemctl status kea-dhcp4-server +systemctl status kea-ctrl-agent + +``` + +#### Log files + +- nginx: + /var/log/nginx/ogdhcp_access.log + /var/log/nginx/ogdhcperror.log + +#### Configuration files + +| Location | File | Description | +|---------------------------------|----------------------|----------------------------------| +| /opt/opengnsys/ogdhcp/ | .env | Symfony configuration file | +| /etc/nginx/sites-available/ | ogdhcp.conf | nginx configuration file | + +#### Accessing the service + +The ogDHCP API listens on port 8081 via HTTP. To view the API docs: + +http://**ip**:8081/ogdhcp/api/doc + +![imagen17](../assets/images/screenshots/Imagen17.png) + +If all is well, the status endpoint returns something like: + +![imagen18](../assets/images/screenshots/Imagen18.png) + +### ogRepository + +#### Description + +Includes multiple components on the deployment host. The API runs under Gunicorn with Flask, and Samba serves /opt/opengnsys/ogrepository/images under user opengnsys. + +#### Stopping and starting + +```bash +# Arranque +systemctl start ogrepo-api +systemctl start samba + +# Parada +systemctl stop ogrepo-api +systemctl stop samba + +# Status +systemctl status ogrepo-api +systemctl status samba + +# Revisión de logs +journalctl -xeu ogrepo-api +journalctl -xeu samba +``` + +#### Configuration + +| Location | File | Description | +|-----------------------------------|---------------------------|---------------------------------------| +| /opt/opengnsys/ogrepository/ | .ogAdmRepo.cfg | ogRepository configuration file | +| /etc/samba/ | smb.conf.ogrepository | Samba configuration file | + +#### Accessing the service + +The ogRepository API listens on port 8006. To access the service: + +http://**ip**:8006/apidocs/ + +![imagen19](../assets/images/screenshots/Imagen19.png) + +If installation was successful, the status returns something like: + +![imagen20](../assets/images/screenshots/Imagen20.png) + +## First steps + +To begin, configure ogCore via the GUI to verify ogCore can reach all components. + +On the machine where ogCore is installed, edit /opt/opengnsys/ogCore/etc/env.json: + +![imagen21](../assets/images/screenshots/Imagen21.png) + +Adjust **OG_BOOT_API_URL**, **OG_DHCP_API_URL**, and **OG_CORE_IP** to the correct values for your setup, for example: + +![imagen22](../assets/images/screenshots/Imagen22.png) + +Once done, restart ogCore and log in to the GUI: + +![imagen23](../assets/images/screenshots/Imagen23.png) + +Viewing DHCP service status: + +![imagen24](../assets/images/screenshots/Imagen24.png) + +Viewing ogBoot service status: + +![imagen25](../assets/images/screenshots/Imagen25.png) + +To verify ogRepository connectivity, add the repository via “Repositories”: + +![imagen26](../assets/images/screenshots/Imagen26.png) + +Fill in the required details: + +![imagen27](../assets/images/screenshots/Imagen27.png) + +Click the pencil icon to view the repository: + +![imagen28](../assets/images/screenshots/Imagen28.png) + +![imagen29](../assets/images/screenshots/Imagen29.png) diff --git a/i18n-docu/docs/en/index_release.md b/i18n-docu/docs/en/index_release.md new file mode 100644 index 0000000..45c4fb7 --- /dev/null +++ b/i18n-docu/docs/en/index_release.md @@ -0,0 +1,140 @@ +# OpenGnsys - Changelog v3.0.0 (19 May 2025) + +## Version Summary + +This major release introduces significant improvements in all OpenGnsys components, including a new boot system, an updated cloning engine, Git integration, a redesigned administration interface, and a new universal installer. + +--- + +## Core Components + +### OpenGnsys Boot (ogBoot) v0.7.0 + +#### Boot System +- Optimized services associated with PXE +- Implemented a new, lighter, and faster ogLive with updated drivers +- Added an ogLive generation tool with support for Engine, Browser, and Agent dependencies + +### ogLive v3.3.0 + +#### Interface and Browser +- Introduced new OpenGnsys Browser with kiosk mode +- Added full support for HTML5/CSS/JavaScript (ogBrowser) + +#### Cloning Engine v0.10.0 +- Restructured the OpenGnsys Cloning Engine and partially migrated it to Python +- Ensured exclusive use of open source components + +#### OpenGnsys Agent v5.3.0 +- Implemented ogAgent for Windows, Linux, Mac, and ogLive developed in Python + +#### General Features +- Implemented calendar management for remote use of machines + +--- + +## OpenGnsys Repository v0.8.1 + +#### Repository Improvements +- Expanded the functionalities of the OpenGnsys Repository +- Integrated with other system modules via REST API + +#### Transfers +- Optimized transfer methods: Unicast, Multicast, and P2P +- Updated image transfer protocols + +#### API and Security +- Expanded functionalities through REST API +- TLS encryption for all APIs + +#### Git Management +- Implemented features for Git-synchronized images +- Integrated Forgejo for advanced repository management via web interface +- Added functions to create and select Git repositories + +#### Git Integration v0.51 +- Improved functions in Git.lib for cloning and restoration +- Implemented a Python function library +- Added automatic Git repository creation during installation +- Incorporated synchronization between Git repositories and partitions + +--- + +## Administration Web Interface (GUI) v0.12.0 + +#### Interface +- Completely redesigned the web interface with responsive design +- Retained all previous functionalities +- Improved visual experience and usability + +#### Modularity +- Implemented modular system management +- Incorporated advanced roles and permissions system +- Added tag-based search + +#### Centralized Management (ogCore v0.12.1) +- Unified administration of all components from the web +- Removed the need for command line for routine tasks + +#### Actions +- Implemented new action management system by agent type +- Added grouping into composite actions +- Incorporated full action history +- Implemented pending “required” actions +- Added wizard for predefined actions and advanced mode + +#### Clients +- Developed new hierarchical structure for groups +- Simplified group membership management +- Added support for heterogeneous groups +- Implemented configuration inheritance for deployment +- Incorporated grid view +- Added concept of dynamic “view” based on criteria + +#### Repositories and Images +- Reorganized into group structure +- Implemented distinction between image types +- Improved information display for clients +- Added support for multiple simultaneous repositories +- Incorporated granular permissions and recycle bin +- Implemented advanced searches and repository migration + +#### Profiles +- Added advanced criteria searches +- Implemented referential naming for profiles +- Incorporated relationships between profiles for comparison + +#### Monitoring +- Developed notification system +- Added configurable statistics +- Implemented contextual help +- Unified communication via OpenGnsys Core + +--- + +## OpenGnsys Log Service + +#### Logging System +- Implemented REST API for full integration +- Centralized log storage and management +- Incorporated collection agents +- Added database processing (OpenSearch) + +#### Visualization +- Developed adaptive interface +- Implemented advanced filtering options +- Added results export + +--- + +## Universal Installer + +#### Scripts +- Updated existing scripts with display of available versions +- Added compatibility check + +#### Installers +- Developed unified graphical installer with progress bar +- Implemented full management options (installation, upgrade, removal) +- Added database import/export +- Created Debian/Ubuntu package repository diff --git a/i18n-docu/docs/es/.overrides b/i18n-docu/docs/es/.overrides new file mode 100644 index 0000000..be7390f --- /dev/null +++ b/i18n-docu/docs/es/.overrides @@ -0,0 +1,13 @@ +nav: + Release_Notes: "Notas de Versión" + Installation: "Instalación" + Administration: "Administración" + Developers: "Desarrolladores" + console: "Consola de administración" + dhcp: "ogDHCP - Servicio DHCP" + boot: "ogBoot - Sistema de Arranque" + oglive: "ogLive - Distribución Linux OpenGnsys Live" + ogclone: "Motor de Clonación" + ogrepository: "Repositorio de Imágenes" + ogagent: "Agente de Administración" + oglog: "Servicio de Logs" diff --git a/i18n-docu/docs/es/administration/.pages b/i18n-docu/docs/es/administration/.pages new file mode 100644 index 0000000..8d2a764 --- /dev/null +++ b/i18n-docu/docs/es/administration/.pages @@ -0,0 +1,3 @@ +nav: + - DocumentacionCrearImage.md + - DocumentacionDeployImage.md diff --git a/i18n-docu/docs/es/administration/DocumentacionCrearImage-en.md b/i18n-docu/docs/es/administration/DocumentacionCrearImage-en.md new file mode 100644 index 0000000..7fc2172 --- /dev/null +++ b/i18n-docu/docs/es/administration/DocumentacionCrearImage-en.md @@ -0,0 +1,122 @@ +# Create Image + +[TOC] + +## Scenario + +There is a need to create an image from a computer which we will call model. For this, we need to have a computer created in our database to which we have a connection and with an operating system. + +This is the scenario used for this demonstration: + +- **Center**: + - Name: `Centro Demo` + +- **Classroom**: + - Name: `Aula Demo` + - Router IP: ` 192.168.2.1` + - Network mask: `255.255.255.0` + +- **Computer**: + - MAC Address: `08:00:27:4F:BE:38` + - Name: `modelo` + - IP Address: `192.168.2.2` + +- **Subnet**: + - Address: `192.168.2.0` + - Network mask: `255.2555.255.0` + +- **Image**: + - Name: `image-test` + - Description: `imagen de referencia` + - Type: `Linux` + - Version: `Ubuntu 24.04` + - Architecture: `x86_64` + +- **Repository**: + - Path: `/opt/opengnsys/ogrepository/images` + - IP: `192.168.68.55` + +- **ogAgent**: + - Version: `1.4.5~pre7-1 all` + +The goal is to create an image from the computer `modelo` with the specified characteristics, in order to later replicate/clone it to the rest of the clients. + +In the following screenshots, the layout of the groups and clients in the ogGui graphical interface is shown. + +![Groups general](../../assets/images/screenshots/groups_general.png "Groups general") +![Groups clients](../../assets/images/screenshots/groups_clients.png "Groups clients") + +The ogGui/ogCore tool provides us with a graphical interface through which we can create an image. In the current version, we will do this via the "Clients" tab within the group administration panel. + +## Create an Image + +1. **Select the model client**. Using the **Clients** tab in the group administration panel, we access the client options by clicking the "View" button (the one with an eye icon). + This gives us access to the client's panel where its general information and the status of the partitions are displayed. At the top right, there is a button with all the available actions. + +![Client info](../../assets/images/screenshots/client_info.png "Client info") +![Client actions](../../assets/images/screenshots/client_actions.png "Client actions") + +2. **Create image**. We click the "Create Image" button and fill out the form with the data for the image we want to create. In this case, the data is as follows: + - **Canonical Name**: `image-test` + - **Previously Created Image**: in this case, we leave it blank. + - **Select Partition**: We select the partition which has Ubuntu 24.04 installed. + +![Client create image](../../assets/images/screenshots/client_create_image.png "Client create image") + +If everything went well, the graphical interface returns a green confirmation message in the bottom right corner. This means that the ogAgent has correctly received the API call and is working on creating the image. + +## Verify Image Creation + +In the image administration panel, we can view the status of the image we have created. + +The tool stores images in different states, which are: +- **States**: + - In Progress: `in-progress`. The image is in the process of being created; the ogAgent is working on it. + - Auxiliary Files Pending: `aux-files-pending`. The image has been created in the repository, but the auxiliary files and the fullsum (from now on the unique associated identifier) have not yet been generated. + - Completed: `success`. The image has been created successfully. It is in the image repository with its associated files generated successfully. + - Failed: `failed`. The image could not be created due to an error in the process. + +![Images](../../assets/images/screenshots/images.png "Images") + +Once the process has finished, we should be able to see something similar to the following image: + +![Image success](../../assets/images/screenshots/image_success.png "Image success") + +## Traces + +For the system to function correctly, communication between the **ogCore**, **ogAgent**, and **ogRepository** components must be asynchronous. To achieve this, traces are used to allow us to see the status of requests and responses. + +We can access the system traces via the button with a **bell** icon in the top menu of the graphical interface. +A list of all the system traces is provided. We can use the provided filters if necessary. + +![Traces](../../assets/images/screenshots/traces.png "Traces") + +For the demonstration example, we see 2 traces: + - **Image Creation**: the trace informs us of the agent's status regarding the creation of the image. + - **Auxiliary Files Creation**: the trace informs us of the creation of the auxiliary files associated with the image. + +## Repository + +Inside the image repository, we can see the image we created in `/opt/opengnsys/ogrepository/images` + +![Image repository](../../assets/images/screenshots/image_repository.png "Image repository") + +## API Calls to the Different Components + +1. **ogAgent**: This is the call that ogCore makes to the ogAgent to have it create the image. It returns a **job_id** which will be shown in the interface trace related to the creation of this image. + +```` +curl -X POST --data '{"dsk":"1", "par":"2", "cpt":"83", "idi":"01936caf-facb-72ad-9446-97e7dbf2b96a", "nci":"image-test", "ipr":"192.168.68.55", "nfn":"CrearImagen", "ids":"0"}' +https://192.168.2.2:8000/CloningEngine/CrearImagen +{"job_id": "CrearImagen-93992a4b"} +```` + +2. **ogRepository**: This is the call that ogCore makes to the ogRepository to have it create the auxiliary files associated with the image. It returns a **job_id** which will be shown in the interface trace related to them. + +```` +curl -X POST --data '{"image":"image-test.img"}' +https://192.168.68.55:8006/ogrepository/v1/images/torrentsum +{"job_id": "CreateAuxiliarFiles_eba647d4"} +```` + +These calls communicate their statuses to ogCore via **webhooks**, and ogCore takes care of processing the response and changing the status when necessary. diff --git a/i18n-docu/docs/es/administration/DocumentacionCrearImage.md b/i18n-docu/docs/es/administration/DocumentacionCrearImage.md new file mode 100644 index 0000000..7dd8b9b --- /dev/null +++ b/i18n-docu/docs/es/administration/DocumentacionCrearImage.md @@ -0,0 +1,130 @@ +# Crear Imagen + +[TOC] + +## Escenario + +Surge la necesidad de crear una imagen a traves de un ordenador al que llamaremos modelo. +Para ello necesitamos tener un ordenador creado en nuestra base de datos con el que tengamos conexión y con un sistema operativo. + +Este es el escenario que se han utilizado para esta demostración: + +- **Centro**: + - Nombre: `Centro Demo` + +- **Aula**: + - Nombre: `Aula Demo` + - Router IP: ` 192.168.2.1` + - Máscara de red: `255.255.255.0` + +- **Ordenador**: + - MAC Address: `08:00:27:4F:BE:38` + - Nombre: `modelo` + - Dirección IP: `192.168.2.2` + +- **Subred**: + - Dirección: `192.168.2.0` + - Máscara de red: `255.2555.255.0` + +- **Imagen**: + - Nombre: `image-test` + - Descripción: `imagen de referencia` + - Tipo: `Linux` + - Versión: `Ubuntu 24.04` + - Arquitectura: `x86_64` + +- **Repositorio**: + - Ruta: `/opt/opengnsys/ogrepository/images` + - IP: `192.168.68.55` + +- **ogAgent**: + - versión: `1.4.5~pre7-1 all` + +El objetivo es crear una imagen a partir del ordenador `modelo` con las características especificadas, para mas adelante replicar/clonar en el resto de clientes. + +En las siguientes capturas de pantalla, se muestra la disposición de los grupos y clientes en la interfaz grafica de ogGui. + +![Grupos general](../../assets/images/screenshots/groups_general.png "Groups general") +![Grupos clients](../../assets/images/screenshots/groups_clients.png "Groups clients") + +La herramienta ogGgui/ogCore nos proporciona una interfaz grafica mediante la cual podremos crear una imagen. En la versión actual, lo haremos a traves de la pestaña "Clientes" dentro del panel de administración de grupos. + +## Crear una imagen + + 1. **Seleccionar cliente modelo**. Mediante la pestaña de **Clientes** en el panel de administración de grupos, accedemos a las opciones del cliente pulsando en el boton "Visualizar" (el que tiene como icono un ojo). +Esto nos da acceso al panel del cliente donde aparece su informacion general y el estado de las particiones. Arriba a la derecha, aparece un boton con todas las acciones disponibles. + + +![Client info](../../assets/images/screenshots/client_info.png "Client info") +![Client actions](../../assets/images/screenshots/client_actions.png "Client actions") + +2. **Crear imagen**. Pulsamos en el botón "Crear imagen" y rellenamos el formulario con los datos de la imagen que queremos crear. En este caso, los datos son los siguientes: + - **Nombre canónico**: `image-test` + - **Imagen creada previamente**: en este caso, lo dejamos en blanco. + - **Seleccionar partición**: Seleccionamos la particion la cual tiene instalada Ubuntu 24.04. + +![Client create image](../../assets/images/screenshots/client_create_image.png "Client create image") + +Si todo ha ido bien, la intefaz grafica nos devuelve un mensaje de confirmacion verde, en la esquina inferior derecha. +Esto quiere decir que el ogAgent ha recibido correctamente la llamada mediante API y está trabajando en la creación de la imagen. + +## Comprobar la creación de la imagen + +En el panel de administracion de imagenes, podremos ver el estado de la imagen que hemos creado. + +La herramienta almacena las imagenes mediante diferentes estados, los cuales son: +- **Estados**: + - En progreso: `in-progress`. La imagen esta en proceso de creación, el ogAgent esta trabajando en ello. + - Pendiente de ficheros auxiliares: `aux-files-pending`. La imagen ha sido creada en el repositorio, pero aun no se han generado los archivos auxiliares, ni devuelvo el fullsum (a partir de ahora será el identificador unico asociado) + - Completada: `success`. La imagen ha sido creada correctamente. Se encuentra en el repositorio de imagenes, y con sus archivos asociados generados satisfactoriamente. + - Error: `failed`. La imagen no ha podido ser creada, por algun error en el proceso. + + +![Images](../../assets/images/screenshots/images.png "Images") + +Una vez el proceso haya terminado, deberiamos poder ver algo similar a la siguiente imagen: + +![Image success](../../assets/images/screenshots/image_success.png "Image success") + + +## Trazas + +Para el correcto funcionamiento del sistema, la comunicacion entre los componentes **ogCore** +, **ogAgent** y **ogRepository** debe ser asíncrona. Para ello, se utilizan trazas que nos permiten ver el estado de las peticiones y las respuestas. + +Podremos acceder a las trazas del sistema, en el botón con un icono de una **campana** en el menu superior de la interfaz grafica. +Se nos oferece un listado con todas las trazas del sistema. Podremos utilizar los filtros proporcionados si es necesario. + +![Traces](../../assets/images/screenshots/traces.png "Traces") + +Para el ejemplo demostrativo, vemos 2 trazas: + - **Creación de imagen**: la traza nos informa del estado del agente respecto a la creacion de la imagen. + - **Creación de ficheros auxiliares**: la traza nos informa de la creación de los ficheros auxiliares asociados a la imagen. + +## Repositorio + +Dentro del repositorio de imágenes, podremos ver la imagen que hemos creado en `/opt/opengnsys/ogrepository/images +` + +![Image repository](../../assets/images/screenshots/image_repository.png "Image repository") + +## Llamadas API a los distintos componentes + + +1. **ogAgent**: Esta es la llamada que ogCore realiza al ogAgent para que este cree la imagen. Nos devuelve como resultado un **job_id** que será el que nos muestre en la interfaz la traza relacionada con la creación esta imagen. + +```` +curl -X POST --data '{"dsk":"1", "par":"2", "cpt":"83", "idi":"01936caf-facb-72ad-9446-97e7dbf2b96a", "nci":"image-test", "ipr":"192.168.68.55", "nfn":"CrearImagen", "ids":"0"}' +https://192.168.2.2:8000/CloningEngine/CrearImagen +{"job_id": "CrearImagen-93992a4b"} +```` + +2. **ogRepository**: Esta es la llamada que ogCore realiza al ogRepository para que este cree los ficheros auxiliares asociados a la imagen. Nos devuelve como resultado un **job_id** que será el que nos muestre en la interfaz la traza relacionada con la los mismos. + +```` +curl -X POST --data '{"image":"image-test.img"}' +https://192.168.68.55:8006/ogrepository/v1/images/torrentsum +{"job_id": "CreateAuxiliarFiles_eba647d4"} +```` + +Estas llamadas comunican sus estados a ogCore mediante **webhooks**, y este se encarga de procesar la respuesta y cambiar el estado cuando sea necesario. diff --git a/i18n-docu/docs/es/administration/DocumentacionDeployImage-en.md b/i18n-docu/docs/es/administration/DocumentacionDeployImage-en.md new file mode 100644 index 0000000..d9b36ce --- /dev/null +++ b/i18n-docu/docs/es/administration/DocumentacionDeployImage-en.md @@ -0,0 +1,116 @@ +# Documentation: Ocore and Oggui + +## Scenario + +There is a need to deploy an image that has been previously created using a model machine, to a client or group of clients. +The image is hosted in the image repository and is in the **Successfully created** state. + +This is the scenario used for this demonstration: + +- **Center**: + - Name: `Centro Demo` + +- **Classroom**: + - Name: `Aula Demo` + - Router IP: `192.168.2.1` + - Netmask: `255.255.255.0` + +- **Model computer**: + - MAC Address: `08:00:27:4F:BE:38` + - Name: `modelo` + - IP Address: `192.168.2.2` + +- **Computer on which the image will be deployed**: + - MAC Address: `08:00:27:0b:88:be` + - Name: `pc1` + - IP Address: `192.168.2.3` + +- **Subnet**: + - Address: `192.168.2.0` + - Netmask: `255.2555.255.0` + +- **Image**: + - Name: `image-test` + - Description: `reference image` + - Type: `Linux` + - Version: `Ubuntu 24.04` + - Architecture: `x86_64` + +- **Repository**: + - Path: `/opt/opengnsys/ogrepository/images` + - IP: `192.168.68.55` + +- **ogAgent**: + - version: `1.4.5~pre7-1 all` + +The goal is to deploy the `image-test` image to the `pc1` client with the specified characteristics. As a preliminary step, there must be a connection to the target client, and an ogLive operating system must be installed. + +An essential requirement is that the target machine is formatted and has a partition on which the image will be deployed. This machine must have at least two partitions, one of them named CACHE. + +In the following screenshots, the arrangement of groups and clients is shown in the ogGui graphical interface. + +![General groups](../../assets/images/screenshots/groups_general_1.png "Groups general") +![Groups clients](../../assets/images/screenshots/groups_clients_1.png "Groups clients") + +The ogGgui/ogCore tool provides us with a graphical interface through which we can perform the image deployment. In the current version, we will do this via the "Clients" tab within the Group Administration pane. + +## Deploy a UNICAST image + +1. **Select client**. Using the **Clients** tab in the Group Administration pane, we access the client options by clicking on the "View" button (the one with the eye icon). + This gives us access to the client panel where its general information and partition status appear. In the top right, there is a button with all available actions. + +![Client actions](../../assets/images/screenshots/client_actions_1.png "Client actions") + +2. **Deploy image**. We click on the "Deploy image" button and fill out the form with the corresponding data. In this case, the data are as follows: + - **Type**: `deploy-image` + - **Select image**: We select the image we want to deploy. Here we see the list of images available in the repository. If there is any corrupt or erroneous image, it will not appear in the list. + - **Method**: `UNICAST` + - **Select partition**: We select the desired partition. + +![Client deploy image](../../assets/images/screenshots/client_deploy_image.png "Client deploy image") + +If everything went well, the graphical interface returns a green confirmation message in the bottom right corner. +This means that ogAgent has correctly received the API call and is working on the deployment. + +## Traces + +For the system to function properly, communication between the **ogCore** +, **ogAgent** and **ogRepository** components must be asynchronous. For this, traces are used that allow us to see the status of requests and responses. + +We can access the system traces via the button with a **bell** icon in the top menu of the graphical interface. +We are presented with a list of all system traces. We can use the provided filters if necessary. + +![Traces](../../assets/images/screenshots/traces_1.png "Traces") + +For the demonstration example, we see 1 trace: +- **deploy-image**: the trace informs us of the agent's status regarding the image deployment. This action takes a few minutes to complete. + +## Verify the image deployment + +1. Once we get the **Completed successfully** message in the trace, we can verify that the image has been deployed correctly on the client. To do this, we must change the client's boot configuration to boot from disk. In the case presented, since we are using VB, this would be an example: + +![Configuration](../../assets/images/screenshots/vb_configuration.png "Configuration") + +2. We restart the client and verify that it boots correctly with the deployed image. + +![Traces](../../assets/images/screenshots/vb_deploy_client.png "Traces") + +3. We check statuses. If we run `ip a` in a terminal and make sure that the IP is the one our DHCP assigned, in this case `192.168.2.3` + +![Client IP](../../assets/images/screenshots/vb_client_ip.png "Client IP") + +4. Finally, now in our web console, the client should have changed its status to **LINUX**, and when a session is started, **LINUX_SESSION** + +![Groups client](../../assets/images/screenshots/groups_clients.png "Client IP") + +## API calls to the different components + +1. **ogAgent**: This is the call that ogCore makes to ogAgent to deploy the image. It returns a **job_id** that will be the one shown in the interface trace related to the creation of this image. + +```` +curl -X POST --data '{"dsk":"1", "par":"2", "cpt":"83", "ifs": "1", idi":"01936caf-facb-72ad-9446-97e7dbf2b96a", "nci":"image-test", "ipr":"192.168.68.55", "nfn":"RestaurarImagen", "method": "unicast", ids":"0"}' +https://192.168.2.2:8000/CloningEngine/RestaurarImagen +{"job_id": "RestaurarImagen-dfa42888"} +```` + +These calls communicate their statuses to ogCore via **webhooks**, and ogCore takes care of processing the response and changing the status when necessary. diff --git a/i18n-docu/docs/es/administration/DocumentacionDeployImage.md b/i18n-docu/docs/es/administration/DocumentacionDeployImage.md new file mode 100644 index 0000000..570fec3 --- /dev/null +++ b/i18n-docu/docs/es/administration/DocumentacionDeployImage.md @@ -0,0 +1,120 @@ +# Documentación: Ocore y Oggui + + +## Escenario + +Surge la necesidad de desplegar una imagen la cual se ha creado previamente mediante un equipo modelo, a cliente o grupo de clientes. +La imagen está alojada en el repositorio de imágenes y se encuentra en estado **Creada con éxito**. + +Este es el escenario que se han utilizado para esta demostración: + +- **Centro**: + - Nombre: `Centro Demo` + +- **Aula**: + - Nombre: `Aula Demo` + - Router IP: ` 192.168.2.1` + - Máscara de red: `255.255.255.0` + +- **Ordenador modelo**: + - MAC Address: `08:00:27:4F:BE:38` + - Nombre: `modelo` + - Dirección IP: `192.168.2.2` + +- **Ordenador sobre el que se desplegará la imagen**: + - MAC Address: `08:00:27:0b:88:be` + - Nombre: `pc1` + - Dirección IP: `192.168.2.3` + +- **Subred**: + - Dirección: `192.168.2.0` + - Máscara de red: `255.2555.255.0` + +- **Imagen**: + - Nombre: `image-test` + - Descripción: `imagen de referencia` + - Tipo: `Linux` + - Versión: `Ubuntu 24.04` + - Arquitectura: `x86_64` + +- **Repositorio**: + - Ruta: `/opt/opengnsys/ogrepository/images` + - IP: `192.168.68.55` + +- **ogAgent**: + - versión: `1.4.5~pre7-1 all` + +El objetivo es desplegar la imagen `image-test` en el cliente `pc1` con las características especificadas. Para ello como paso previo, se ha de tener conexion al cliente objetivo y tener instalado un sistema operativo ogLive. + +Como requisito indispensable es tener formateado el equipo destino, y tener una particion en la cual se desplegará la imagen. Dicho equipo, deberá constar de por lo menos 2 particiones, una de ellas CACHE. + +En las siguientes capturas de pantalla, se muestra la disposición de los grupos y clientes en la interfaz grafica de ogGui. + +![Grupos general](../../assets/images/screenshots/groups_general_1.png "Groups general") +![Grupos clients](../../assets/images/screenshots/groups_clients_1.png "Groups clients") + +La herramienta ogGgui/ogCore nos proporciona una interfaz grafica mediante la cual podremos hacer el despliegue de la imagen. En la versión actual, lo haremos a traves de la pestaña "Clientes" dentro del panel de administración de grupos. + +## Desplegar una imagen UNICAST + +1. **Seleccionar cliente**. Mediante la pestaña de **Clientes** en el panel de administración de grupos, accedemos a las opciones del cliente pulsando en el boton "Visualizar" (el que tiene como icono un ojo). + Esto nos da acceso al panel del cliente donde aparece su informacion general y el estado de las particiones. Arriba a la derecha, aparece un boton con todas las acciones disponibles. + + +![Client actions](../../assets/images/screenshots/client_actions_1.png "Client actions") + +2. **Desplegar imagen**. Pulsamos en el botón "Deploy image" y rellenamos el formulario con los datos de correspondientes. En este caso, los datos son los siguientes: + - **Tipo**: `deploy-image` + - **Seleccionar imagen**: Seleccionamos la imagen que queremos desplegar. Aqui nos aparecen el listado de imagenes disponibles en el repositorio. Si hay alguna imagen corrupta o con errores, no aparecerá en el listado. + - **Método**: `UNICAST` + - **Seleccionar partición**: Seleccionamos la particion deseada. + +![Client deploy image](../../assets/images/screenshots/client_deploy_image.png "Client deploy image") + +Si todo ha ido bien, la intefaz grafica nos devuelve un mensaje de confirmacion verde, en la esquina inferior derecha. +Esto quiere decir que el ogAgent ha recibido correctamente la llamada mediante API y está trabajando en el despliegue. + +## Trazas + +Para el correcto funcionamiento del sistema, la comunicacion entre los componentes **ogCore** +, **ogAgent** y **ogRepository** debe ser asíncrona. Para ello, se utilizan trazas que nos permiten ver el estado de las peticiones y las respuestas. + +Podremos acceder a las trazas del sistema, en el botón con un icono de una **campana** en el menu superior de la interfaz grafica. +Se nos oferece un listado con todas las trazas del sistema. Podremos utilizar los filtros proporcionados si es necesario. + +![Traces](../../assets/images/screenshots/traces_1.png "Traces") + +Para el ejemplo demostrativo, vemos 1 traza: +- **deploy-image**: la traza nos informa del estado del agente respecto al despliegue de la imagen. Esta acción tarda unos minutos en completarse. + + +## Comprobar el despliegue de la imagen + +1. Una vez obtengamos en la traza el mensaje de **Finalizado con éxito**, podremos comprobar que la imagen se ha desplegado correctamente en el cliente. Para ello, debemos cambiar la configuracion del cliente para que arranque por disco. En el caso que nos presenta, al estar utilizando VB, este seria un ejemplo: + +![Configuration](../../assets/images/screenshots/vb_configuration.png "Configuration") + +2. Reiniciamos el cliente y comprobamos que arranca correctamente con la imagen desplegada. + +![Traces](../../assets/images/screenshots/vb_deploy_client.png "Traces") + +3. Comprobamos estados. Si hacemos `ip a` en una termina y nos aseguramos de que la IP es la que nuestro DHCP le ha asignado, en este caso `192.168.2.3` + +![Client IP](../../assets/images/screenshots/vb_client_ip.png "Client IP") + +4. Para terminar, ahora en nuestra consola web, el cliente deberia hacer cambiado el estado y mostrar **LINUX** y cuendo se inicie sesion, **LINUX_SESSION** + +![Groups client](../../assets/images/screenshots/groups_clients.png "Client IP") + +## Llamadas API a los distintos componentes + + +1. **ogAgent**: Esta es la llamada que ogCore realiza al ogAgent para que este despliegue la imagen. Nos devuelve como resultado un **job_id** que será el que nos muestre en la interfaz la traza relacionada con la creación esta imagen. + +```` +curl -X POST --data '{"dsk":"1", "par":"2", "cpt":"83", "ifs": "1", idi":"01936caf-facb-72ad-9446-97e7dbf2b96a", "nci":"image-test", "ipr":"192.168.68.55", "nfn":"RestaurarImagen", "method": "unicast", ids":"0"}' +https://192.168.2.2:8000/CloningEngine/RestaurarImagen +{"job_id": "RestaurarImagen-dfa42888"} +```` + +Estas llamadas comunican sus estados a ogCore mediante **webhooks**, y este se encarga de procesar la respuesta y cambiar el estado cuando sea necesario. diff --git a/i18n-docu/docs/es/administration/index.md b/i18n-docu/docs/es/administration/index.md new file mode 100644 index 0000000..f5988f8 --- /dev/null +++ b/i18n-docu/docs/es/administration/index.md @@ -0,0 +1,22 @@ +# Administración de OpenGnsys + +Bienvenido a la sección de administración de OpenGnsys. Esta área proporciona información detallada sobre todos los componentes administrativos de la plataforma. + +## Componentes principales + +OpenGnsys está compuesto por varios módulos administrativos que trabajan en conjunto para proporcionar una solución completa de gestión y clonación de equipos: + +- **[Consola Web](oggui.md)**: Interfaz principal para la gestión de equipos y tareas. +- **[DHCP](ogdhcp.md)**: Configuración y gestión del servicio DHCP para el arranque de los clientes. +- **[Sistema de Arranque](ogboot.md)**: Mecanismos y configuraciones para el arranque de los clientes. +- **[ogLive](oglive.md)**: Sistema operativo mínimo para realizar operaciones de clonación. +- **[Motor de Clonación](ogcloneengine.md)**: Núcleo de las operaciones de clonación de equipos. +- **[Gestión de Repositorios](ogrepository.md)**: Administración de imágenes y repositorios. +- **[ogAgent](ogagent.md)**: Agente para la comunicación entre clientes y servidor. +- **[Logs y Monitorización](oglog.md)**: Herramientas para el seguimiento y análisis de operaciones. + +## Introducción a la administración + +La administración de OpenGnsys permite gestionar de forma centralizada un conjunto de ordenadores, creando y desplegando imágenes de disco, realizando operaciones de mantenimiento y supervisando el estado de los equipos. + +Esta sección ofrece guías detalladas sobre cada componente administrativo, con instrucciones paso a paso, ejemplos de configuración y soluciones a problemas comunes. diff --git a/i18n-docu/docs/es/administration/ogagent.md b/i18n-docu/docs/es/administration/ogagent.md new file mode 100644 index 0000000..e69de29 diff --git a/i18n-docu/docs/es/administration/ogboot.md b/i18n-docu/docs/es/administration/ogboot.md new file mode 100644 index 0000000..e69de29 diff --git a/i18n-docu/docs/es/administration/ogcloneengine.md b/i18n-docu/docs/es/administration/ogcloneengine.md new file mode 100644 index 0000000..fd75281 --- /dev/null +++ b/i18n-docu/docs/es/administration/ogcloneengine.md @@ -0,0 +1,56 @@ +# Motor de Clonación + +El Motor de Clonación es un componente fundamental que gestiona el proceso completo de clonación de imágenes en nuestro sistema. Este componente integra varios procedimientos críticos que se describen a continuación. + +Administra el ciclo de vida completo de las imágenes, desde su creación hasta su despliegue en ambientes de producción. Este sistema automatiza tareas complejas y garantiza la consistencia en todos los entornos. + +## Procedimientos Principales + +### Creación de Imágenes + +Para el procedimiento detallado de creación de imágenes, consulte la documentación específica: + +[Crear Imagen](DocumentacionCrearImage.md) + +### Despliegue de Imágenes + +El despliegue de imágenes sigue un protocolo estandarizado que asegura la integridad del sistema: + +[Desplegar Imagen](DocumentacionDeployImage.md) + +## Flujo de Trabajo Integrado + +El proceso completo de clonación sigue estos pasos: + +1. Inicialización del motor + 1. Verificación de dependencias + 2. Carga de configuraciones + 3. Validación de permisos +2. Creación de imagen (ver [documentación detallada](DocumentacionCrearImage.md)) + 1. Selección de plantilla base + 2. Configuración de parámetros + 3. Generación de imagen +3. Validación de integridad + 1. Verificación de checksums + 2. Pruebas automatizadas + 3. Aprobación manual (si es necesario) +4. Despliegue de imagen (ver [documentación detallada](DocumentacionDeployImage.md)) + 1. Selección de entorno destino + 2. Secuencia de despliegue + 3. Verificación post-despliegue + + +## Solución de Problemas + +Para resolver problemas comunes durante el proceso de clonación, consulte: + +- [Crear Imagen - Solución de problemas](DocumentacionCrearImage.md#solución-de-problemas) +- [Desplegar Imagen - Solución de problemas](DocumentacionDeployImage.md#solución-de-problemas) + +## Referencias Adicionales + +Para información adicional sobre el Motor de Clonación, consulte: + +- Guía de administración del sistema +- Documentación de la API de clonación +- Registros de cambios y actualizaciones diff --git a/i18n-docu/docs/es/administration/ogdhcp.md b/i18n-docu/docs/es/administration/ogdhcp.md new file mode 100644 index 0000000..4a819b7 --- /dev/null +++ b/i18n-docu/docs/es/administration/ogdhcp.md @@ -0,0 +1,173 @@ + +# Documentación: Ocore y Oggui + + +## Escenario + +Queremos dar de alta un ordenador en el sistema y configurarlo para que pueda arrancar mediante PXE en una subred nueva. Este es el escenario: + +- **Ordenador**: + - MAC Address: `00:50:56:1e:9f:11` + - Nombre: `pc11` + - Dirección IP: `192.168.3.11` + +- **Subred**: + - Dirección: `192.168.3.0` + - Máscara de red: `255.255.255.0` + +- **Servidor de arranque**: + - `next-server`: `172.17.8.37` (componente **ogboot** que aloja los ficheros de arranque) + - Fichero de arranque: `undionly.kpxe` + +El objetivo es crear la subred `192.168.2.0/24`, añadir el ordenador `pc11` a esta subred con la IP `192.168.3.11` y crear el fichero de arrnque personalizado a `pc11` a partir de la plantilla PXE `ogLive`. + +## Dar de alta ordenador + + +### Crear una Unidad Organizativa (Aula) + +1. En la pantalla de **Administrar grupos**, haz clic en **Nueva Unidad Organizativa**. +2. En el formulario: + - Selecciona el **Tipo** como `Aula`. + - Asigna un **Nombre** al aula, como `Aula Test`. + - Elige una **Unidad Organizativa Padre**, por ejemplo, `Grupos de aulas 1`. +3. Haz clic en el botón **Siguiente**. + +![Menú de centros](../../assets/images/screenshots/menu_centers.png "Menú de centros") + +![Crear aula](../../assets/images/screenshots/create-classroom.png "Crear aula") + + +4. En el siguiente paso del formulario de la Unidad Organizativa, configura los parámetros de red. Estos parámetros serán usados mas adelante como parámetros del Kernel cuando creemos los ficheros de arranque de los PCs que estén en esa aula: + - **Máscara de Red**: Configura la máscara de subred, como `255.255.255.0`. + - **Router**: Especifica la puerta de enlace predeterminada de la subred (por ejemplo, `192.168.2.1`). +5. Haz clic en **Añadir** para crear la unidad organizativa. + +![Configuración de red del aula](../../assets/images/screenshots/create-classroom-network-configuration.png "Configuración de red del aula") + + +### Añadir un Nuevo Ordenador + +1. En la pantalla de **Administrar grupos**, haz clic en **Nuevo Cliente**. +2. Completa los siguientes campos: + - **Padre**: Selecciona la Unidad Organizativa creada anteriormente (por ejemplo, `Aula Test`). + - **Nombre**: Nombre del ordenador `pc11`. + - **MAC**: Dirección MAC del cliente `00:50:56:1e:8f:11`. + - **Dirección IP**: IP en la subred configurada `192.168.2.11`. + - **Plantilla PXE**: Selecciona la plantilla PXE asociada `ogLive` para el arranque por Oglive. + - **Interfaz de red**: Interfaz de red del cliente (por ejemplo, `Eth0`). + - **Controlador de red**: por ejemplo, `Generic`. +3. Haz clic en **Añadir** para guardar el ordenador. + + +![Crear un ordenador](../../assets/images/screenshots/create_pc.png "Crear un ordenador") + + + +## **Crear una Nueva Subred** + +El objetivo es crear una subred en el sistema y sincronizarla con el componente **ogdhcp**, que utiliza Kea DHCP para gestionar las configuraciones de red. + + +### **Crear la Subred** + +1. Ve a la sección **Administrar Subredes**. +2. Haz clic en el botón **Añadir Subred**. +3. En el formulario de creación de subred, completa los siguientes campos: + - **Nombre**: Asigna un nombre identificativo `Subred test`. + - **Netmask**: Especifica la máscara de subred `255.255.255.0`. + - **Dirección IP**: Configura la dirección base de la subred `192.168.3.0`. + - **Next Server**: Ingresa la IP del servidor de arranque `172.17.8.37`. + - **Boot File Name**: Establece el nombre del archivo de arranque PXE `undionly.kpxe`. +4. Click en **Guardar** para crear la subred en la base de datos del sistema. + +![Crear una subred](../../assets/images/screenshots/create_subnet.png "Crear una subred") + +Una vez creada, la subred aparecerá en la lista con el estado de **No sincronizada**. Esto indica que la subred se ha registrado en la base de datos, pero aún no se ha dado de alta en el servicio Kea DHCP. + +![Subred creada sin sincronizar](../../assets/images/screenshots/created_subnet_no_sync.png "Subred creada sin sincronizar") + +--- + +### **Sincronizar la Subred con Kea DHCP** + +1. En la lista de subredes, localiza la nueva subred. +2. Haz clic en el botón de acciones (icono de menú) y selecciona **Crear en og-dhcp**. +3. Esto enviará la configuración de la subred al componente `ogdhcp`, que actualizará el servicio **Kea DHCP**. + +![Sincronizar subred](../../assets/images/screenshots/sync_subnet.png "Sincronizar subred") + +--- + +### Subred Sincronizada + +Una vez sincronizada, la subred aparecerá con el estado de **Sincronizada** en la lista (tendrá un icono ✔️). Esto indica que la configuración se ha aplicado correctamente en el servicio Kea DHCP. + + +Puedes ver la configuración que se ha creado en kea dhcp pulsando **Información en servidor ogDHCP** (arriba de todo) y pulsando **Ver informacion** + + +![Subred KEA](../../assets/images/screenshots/subnet_kea.png "Subred KEA") + + + +## **Añadir Cliente a una Subred** + +El objetivo es agregar un PC a una subred específica que ya esté registrada y sincronizada con el componente **ogdhcp**. + + +### **Añadir cliente a la Subred** + +1. En la lista de subredes, busca la subred a la que deseas añadir el cliente `192.168.3.0`. +2. Verifica que la subred esté **Sincronizada** (icono de estado con un ✔️). Si no está sincronizada, realiza el proceso de sincronización previamente. + + +3. Haz clic en el botón de acciones (icono de menú) para la subred seleccionada. +4. En el menú desplegable, selecciona **Añadir cliente**. + +![Subred sincronizada](../../assets/images/screenshots/synced_subnet.png "Subred sincronizada") + +5. En el formulario: + - Busca el nombre del cliente `pc11`. + - Verifica que el cliente aparece en la lista de **Clientes seleccionados**. +6. Click en el botón **Añadir** + +![Añadir cliente a la subred](../../assets/images/screenshots/add_client_to_subnet.png "Añadir cliente a la subred") + +7. Puedes ver la configuración actualizada de kea con el nuevo cliente en **Información en servidor ogDHCP** (arriba de todo) y pulsando **Ver informacion** + + +![Cliente KEA](../../assets/images/screenshots/client_kea.png "Cliente KEA") + + + +## **Crear un Fichero de Arranque PXE** + +El objetivo es generar un fichero de arranque personalizado para el cliente `pc11`, utilizando una plantilla PXE definida, la `OgLive`para que arranque por Oglive. + + +### **Crear el Fichero de Arranque** + +1. Ve a la sección **Plantillas PXE** en el menú de **Boot**. +2. Localiza la plantilla `ogLive`que vamos a usar, asignada previamente cuando creamos al cliente **pc11**. +3. Haz clic en el botón del icono de ordenador. + +![Plantillas PXE](../../assets/images/screenshots/pxe_templates.menu.png "Plantillas PXE") + +4. Busca el cliente **pc11**. + +5. Click al botón de sincronizar datos (las dos flechas circulares) + +![Netboot avanzado](../../assets/images/screenshots/create_pxe_file.png "Netboot avanzado") + +6. Verás que que el icono del ordenador del **pc11** estará en verde. ESo quiere decir que se ha creado el fichero de arranque en **ogboot** correctamente + +![Fichero PXE creado](../../assets/images/screenshots/created_pxe_file.png "Fichero PXE creado") + + + + + + + + diff --git a/i18n-docu/docs/es/administration/oggui.md b/i18n-docu/docs/es/administration/oggui.md new file mode 100644 index 0000000..3585a13 --- /dev/null +++ b/i18n-docu/docs/es/administration/oggui.md @@ -0,0 +1,114 @@ +# Interfaz de Administración + +La consola Web, supone el mayor avance de OpenGnsys en esta nueva versión, con las caractersíticas principales de: + +- Desarrollada con un lenguaje actual y moderno, Angular 18 +- Web Responsiva, funcionando tanto en entorno de PC como Móvil +- Multilingüe, contando con traducción a inglés + +![ogintro-webconsole.png](../assets/images/screenshots/ogintro-webconsole.png) + +## Configuración + +La nueva interfaz de administración de OpenGnsys, cuenta con las siguientes características para su Configuración + +![oggui-config_menu.png](../assets/images/screenshots/oggui-config_menu.png){ align=center width=20% } + +### Usuarios + +Se permite crear, editar y eliminar Usuarios + +![oggui-config_usuarios.png](../assets/images/screenshots/oggui-config_usuarios.png){ align=center } + +#### Añadir Usuario + +![oggui-administracion-usuarios-anadir_usuario.png](../assets/images/screenshots/oggui-administracion-usuarios-anadir_usuario.png){ align=right width=40% } Habrá que definir el *usuario*, *contraseña*, *rol*, *unidad organizativa* y *vista*. + +- **Nombre de Usuario**: se usará para le inicio de sesión + +- **Contraseña**: la contraseña se define aquí por un administrador. El usuario no podrá cambiar la contraseña, si no tiene acceso al panel de administración de usuarios. + +- **Rol**: permite asignar uno o varios roles al usuario. Los roles permiten una mayor granularidad a la hora de administrar los permisos que tendrá cada usuario para administrar la plataforma. + +- **Unidad Organizativa**: permite definir sobre qué grupo de aulas o equipos podrá administrar el usuario. Este campo permite elegir uno o varios grupos sobre los que el usuario podrá interactuar. + +
+ +#### Editar usuario + +Esta ventana permite editar todos los campos que se han definido en la creación del mismo. + +#### Eliminar Usuario + +Permite eliminar un usuario. + +### Roles + +Los roles permiten gestionar los permisos de acceso que tienen los usuarios para adminsitrar la plataforma. Actualmente se cuenta con 4 niveles de administración según los roles: + +- Super Admin: permite control total de la plataforma, sin restricciones. +- Admin de Unidad Organizativa: permite al usuario realizar todas las actividades existentes, sobre la unidad organizativa. +- Operador de Unidad Organizativa: +- Usuario + +### Variables de Entorno + +En este menú se definen, principalmente, las IP y puerto de las API de los diferentes componentes + +- OG_CORE_IP +- OG_DHCP_API_URL +- OG_BOOT_API_URL +- OG_LOG_IP +- REMOTEPC_AUTH_LOGIN +- REMOTEPC_AUTH_USERNAME +- REMOTEPC_AUTH_PASSWORD +- REMOTEPC_URL + +## Navegación por los Menús + +En el panel izquierdo, contamos con los menús que nos dan acceso a las características de OpenGnsys que tengamos actualmente activas y funcionando. +!!! note "Nota" + Es posible que OpenGnsys no cuente con algunos módulos, porque son consumidos de infraestructuras externas, el ejemplo más clásico es DHCP. En este caso, al acceder a dicho menú se nos mostrará una advertenca de que este módulo no está habilitado. + +## Administrar Grupos + +![oggui-grupos_crear.png](../assets/images/screenshots/oggui-grupos_crear.png){align=right width=50%}Las características principales de los grupos son: + +- Herencia + - Red y servicio DHCP + - Boot Server + - Versión de ogLive + - Plantilla PXE + - Servidor NTP + - Repositorio de Imágenes + - Configuración de los valores de P2P (modo, tiempo) + - Configuración de los valores de Multicast (velocidad, puerto, modo) + - Menú + - Perfil de Hardware + +Los grupos de elementos, son un sistema jerárquico que permite agrupación de elementos. Los más clásicos son Campus, Centros, Aulas y Clientes. + +```mermaid +flowchart TB + subgraph c1 [" Campus"] + subgraph c2 [" Centro"] + subgraph c3 [" Aula"] + c4[" Cliente"] + end + end + end + + classDef campusStyle fill:#f9d5e5,stroke:#333,stroke-width:3px + classDef centroStyle fill:#eeeeee,stroke:#333,stroke-width:2px + classDef aulaStyle fill:#b5ead7,stroke:#333,stroke-width:1px + classDef clienteStyle fill:#c7ceea,stroke:#333,stroke-width:1px + + class c1 campusStyle + class c2 centroStyle + class c3 aulaStyle + class c4 clienteStyle +``` + +
+ + diff --git a/i18n-docu/docs/es/administration/oglive.md b/i18n-docu/docs/es/administration/oglive.md new file mode 100644 index 0000000..e69de29 diff --git a/i18n-docu/docs/es/administration/oglog.md b/i18n-docu/docs/es/administration/oglog.md new file mode 100644 index 0000000..e69de29 diff --git a/i18n-docu/docs/es/administration/ogrepository.md b/i18n-docu/docs/es/administration/ogrepository.md new file mode 100644 index 0000000..e69de29 diff --git a/i18n-docu/docs/es/developer/index.md b/i18n-docu/docs/es/developer/index.md new file mode 100644 index 0000000..1e171ba --- /dev/null +++ b/i18n-docu/docs/es/developer/index.md @@ -0,0 +1,40 @@ +# Desarrolladores de OpenGnsys + +Bienvenido a la sección para desarrolladores de OpenGnsys. Esta área proporciona documentación técnica detallada sobre la arquitectura interna, APIs y guías de desarrollo para cada componente del sistema. + +## Componentes del sistema + +OpenGnsys es un sistema modular con varios componentes interconectados. Esta sección proporciona información técnica detallada sobre cada uno de ellos: + +- **[Consola Web](ogcore.md)**: Arquitectura y desarrollo del núcleo de la aplicación web. +- **[DHCP](ogdhcp.md)**: Implementación y personalización del servicio DHCP. +- **[Sistema de Arranque](ogboot.md)**: Desarrollo y extensión de los mecanismos de arranque. +- **[ogLive](oglive.md)**: Personalización y construcción del sistema operativo mínimo. +- **[Motor de Clonación](ogcloneengine.md)**: Arquitectura interna y APIs del motor de clonación. +- **[Gestión de Repositorios](ogrepository.md)**: Desarrollo de módulos para la gestión de imágenes. +- **[ogAgent](ogagent.md)**: Protocolo de comunicación y desarrollo del agente cliente. +- **[Logs y Monitorización](oglog.md)**: Integración de sistemas de registro y monitorización. + +## Contribuir al proyecto + +OpenGnsys es un proyecto de código abierto que agradece las contribuciones de la comunidad. Antes de comenzar a desarrollar, te recomendamos: + +1. **Familiarizarte con la arquitectura**: Revisa la documentación de cada componente para entender cómo interactúan entre sí. +2. **Configurar un entorno de desarrollo**: Sigue las guías de instalación para desarrolladores. +3. **Revisar las directrices de contribución**: Asegúrate de seguir las convenciones de código y procesos de revisión. + +## Herramientas de desarrollo + +Para contribuir al desarrollo de OpenGnsys, necesitarás familiarizarte con las siguientes tecnologías: + +- **Backend**: PHP, Python, Bash +- **Frontend**: Angular +- **Base de datos**: MySQL/MariaDB +- **Sistemas**: Linux, servicios de red + +## Recursos adicionales + +- Repositorio de código: [Gitea OpenGnsys](https://dev.opengnsys.es/gitea) +- Foro de desarrolladores: [Comunidad OpenGnsys](https://foro.opengnsys.es) + +Esta sección proporciona la información técnica necesaria para entender, extender y personalizar los componentes de OpenGnsys según tus necesidades específicas. diff --git a/i18n-docu/docs/es/developer/ogagent.md b/i18n-docu/docs/es/developer/ogagent.md new file mode 100644 index 0000000..e69de29 diff --git a/i18n-docu/docs/es/developer/ogboot.md b/i18n-docu/docs/es/developer/ogboot.md new file mode 100644 index 0000000..76135c5 --- /dev/null +++ b/i18n-docu/docs/es/developer/ogboot.md @@ -0,0 +1,1105 @@ +# Sistema de Arranque (ogBoot) + +Ogboot es una implementación independiente que facilita la funcionalidad de arranque remoto (PXE) en entornos gestionados por OpenGnsys. Este componente permite la carga remota de sistemas operativos y otros archivos esenciales durante el proceso de arranque de las estaciones de trabajo. + +## Instalación + +### Requisitos Previos + +- **Sistema Operativo**: Ubuntu 24.04 +- **Python 3**: La instalación ha sido probada con la versión **Python 3.12.3**. + +```bash +python3 --version +Python 3.12.3 +``` + +### Instalación de Python 3 + +Ejecuta el siguiente comando para instalar Python 3 y `pip`: + +```bash +apt-get install -y python3 python3-pip +``` + +### Configuración Inicial + +El archivo de configuración ya viene incluido en el repositorio. Solo necesitas modificarlo con los parámetros adecuados: + +```json +{ + "ogCore_ServerIP": "172.17.8.82", + "ogBoot_ServerIP": "172.17.8.37", + "ogBoot_Dir": "/opt/opengnsys/ogboot", + "ogBootSambaUser": "opengnsys", + "ogBootSambaPass": "og" +} +``` + +Donde: + +| Parámetro | Descripción | +| --- | --- | +| `ogCore_ServerIP` | IP del servidor ogcore | +| `ogBoot_ServerIP` | IP del servidor ogboot | +| `ogBoot_Dir` | Directorio de instalación de ogboot | +| `ogBootSambaUser` | Usuario de Samba | +| `ogBootSambaPass` | Contraseña de Samba | + +### Instalación + +1. Asegúrate de que Python 3 esté instalado +2. Modifica el archivo de configuración existente con los parámetros necesarios + +## API de Ogboot + +La API de Ogboot proporciona una interfaz para facilitar el proceso de inicialización remota de sistemas operativos en entornos administrados por OpenGnsys. Ogboot permite la gestión eficiente de los archivos de arranque tanto de particiones locales como de sistemas operativos remotos. + +A continuación se detallan los endpoints disponibles, sus parámetros de entrada y las acciones que llevan a cabo. + +--- + +## Estado del Servidor + +### Obtener Estado de ogboot + +Devuelve el uso de disco, el cliente `ogLive` predeterminado, la lista de `ogLives` instalados y el estado de los servicios. + +**URL:** `/ogboot/v1/status` +**Método:** `GET` + +#### Ejemplo de Solicitud + +```bash +curl -X GET http://example.com/ogboot/v1/status +``` + +#### Respuestas + +##### Éxito (200 OK) + +```json +{ + "success": "Status retrieved successfully", + "message": { + "disk_usage": { + "total": "22591996", + "used": "11995812", + "available": "9542092", + "percentage": "56%" + }, + "default_oglive": "ogLive-6.8.0-i386-20241014", + "installed_oglives": [ + { + "id": "dcca1bf9762189e147cc4cde926392b1", + "distribution": "noble", + "kernel": "6.8.0-31-generic-amd64-r20240716", + "architecture": "i386", + "revision": "20241014", + "directory": "/opt/ogboot/tftpboot//ogLive-6.8.0-i386-20241014" + }, + { + "id": "ad8222511753d4013be21602899d642e", + "distribution": "noble", + "kernel": "6.8.0-31-generic-amd64-r20240716", + "architecture": "i386", + "revision": "20241017", + "directory": "/opt/ogboot/tftpboot//ogLive-6.8.0-i386-20241017" + } + ], + "services_status": { + "tftpboot": "active", + "nginx": "active" + } + } +} +``` + +##### Error (404 Not Found) + +```json +{ + "error": "NOT_FOUND", + "message": "No default or installed ogLives found." +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "FAILED_TO_RETRIEVE_DISK_USAGE", + "message": "Error to retrieve disk usage" +} +``` + +o + +```json +{ + "error": "FAILED_TO_RETRIEVE_OGLIVE_CONFIGURATION", + "message": "Error to retrieve ogLive configuration" +} +``` + +o + +```json +{ + "error": "FAILED_TO_RETRIEVE_SERVICES_STATUS", + "message": "Error to retrieve services status" +} +``` + +--- + +## Gestión de ogLives + +### Obtener Menú de Descargas de ogLive + +Devuelve la lista de ISOs de ogLive disponibles para descargar. + +**URL:** `/ogboot/v1/oglives/isos` +**Método:** `GET` + +#### Ejemplo de Solicitud + +```bash +curl -X GET http://example.com/ogboot/v1/oglives/isos +``` + +#### Respuestas + +##### Éxito (200 OK) + +```json +{ + "success": "ISOs retrieved successfully", + "message": [ + { + "id": "1", + "filename": "ogLive-noble-6.8.0-31-generic-amd64-r20240716-20241014.iso", + "url": "https://ognproject.evlt.uma.es/oglive//ogLive-noble-6.8.0-31-generic-amd64-r20240716-20241014.iso", + "installed": true, + "compatible": false + }, + { + "id": "2", + "filename": "ogLive-noble-6.8.0-31-generic-amd64-r20240716-20241017.iso", + "url": "https://ognproject.evlt.uma.es/oglive//ogLive-noble-6.8.0-31-generic-amd64-r20240716-20241017.iso", + "installed": true, + "compatible": false + } + ] +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "FAILED_TO_RETRIEVE_ISOS", + "message": "Error to retrieve ISO downloads" +} +``` + +### Obtener Lista de Todos los Clientes ogLive Instalados + +Devuelve la lista de clientes ogLive instalados, incluyendo el cliente `ogLive` predeterminado. + +**URL:** `/ogboot/v1/oglives` +**Método:** `GET` + +#### Ejemplo de Solicitud + +```bash +curl -X GET \ + 'http://172.17.8.37/ogboot/v1/oglives' \ + -H 'accept: application/json' +``` + +#### Respuestas + +##### Éxito (200 OK) + +```json +{ + "success": "ogLive clients retrieved successfully", + "message": { + "default_oglive": "ogLive-6.8.0-i386-20241014", + "installed_ogLives": [ + { + "id": "dcca1bf9762189e147cc4cde926392b1", + "distribution": "noble", + "kernel": "6.8.0-31-generic-amd64-r20240716", + "architecture": "i386", + "revision": "20241014", + "directory": "/opt/ogboot/tftpboot//ogLive-6.8.0-i386-20241014" + }, + { + "id": "ad8222511753d4013be21602899d642e", + "distribution": "noble", + "kernel": "6.8.0-31-generic-amd64-r20240716", + "architecture": "i386", + "revision": "20241017", + "directory": "/opt/ogboot/tftpboot//ogLive-6.8.0-i386-20241017" + } + ] + } +} +``` + +##### Error (404 Not Found) + +```json +{ + "error": "NOT_FOUND", + "message": "No ogLive clients found." +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "SERVER_ERROR", + "message": "Failed to retrieve ogLive clients due to server error." +} +``` + +o + +```json +{ + "error": "UNKNOWN_ERROR", + "message": "An unknown error occurred." +} +``` + +### Obtener Información de un Cliente ogLive Instalado + +Devuelve la información de un cliente `ogLive` instalado identificado por su checksum. + +**URL:** `/ogboot/v1/oglives/{checksum}` +**Método:** `GET` + +#### Parámetros de Ruta + +| Parámetro | Tipo | Descripción | Ejemplo | +|-----------|------|-------------|---------| +| `checksum` | string | Checksum del cliente `ogLive` instalado | `9e49a085ba74f97a81bdf9b3d0785094` | + +#### Ejemplo de Solicitud + +```bash +curl -X GET \ + 'http://172.17.8.37/ogboot/v1/oglives/9e49a085ba74f97a81bdf9b3d0785094' \ + -H 'accept: application/json' +``` + +#### Respuestas + +##### Éxito (200 OK) + +```json +{ + "success": "ogLive client retrieved successfully", + "message": { + "id": "9e49a085ba74f97a81bdf9b3d0785094", + "distribution": "noble", + "kernel": "6.8.0-31-generic-amd64-r20240716", + "architecture": "i386", + "revision": "20241014", + "directory": "/opt/ogboot/tftpboot//ogLive-6.8.0-i386-20241014" + } +} +``` + +##### Error (404 Not Found) + +```json +{ + "error": "NOT_FOUND", + "message": "ogLive client with checksum 9e49a085ba74f97a81bdf9b3d0785094 not found." +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "SERVER_ERROR", + "message": "Failed to retrieve ogLive client." +} +``` + +### Obtener Información del Cliente ogLive por Defecto + +Devuelve la información del cliente `ogLive` configurado como predeterminado. + +**URL:** `/ogboot/v1/oglives/default` +**Método:** `GET` + +#### Ejemplo de Solicitud + +```bash +curl -X GET \ + 'http://172.17.8.37/ogboot/v1/oglives/default' \ + -H 'accept: application/json' +``` + +#### Respuestas + +##### Éxito (200 OK) + +```json +{ + "success": "se ha obtenido el oglive por defecto", + "message": { + "id": "default_oglive_id", + "distribution": "noble", + "kernel": "6.8.0-31-generic-amd64-r20240716", + "architecture": "i386", + "revision": "20241014", + "directory": "/opt/ogboot/tftpboot//ogLive-6.8.0-i386-20241014" + } +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "SERVER_ERROR", + "message": "Failed to retrieve default ogLive." +} +``` + +### Establecer Cliente ogLive por Defecto + +Permite establecer un cliente `ogLive` como predeterminado usando su checksum. + +**URL:** `/ogboot/v1/oglives/default` +**Método:** `PUT` + +#### Cuerpo de la Solicitud + +```json +{ + "checksum": "9e49a085ba74f97a81bdf9b3d0785094" +} +``` + +| Parámetro | Tipo | Descripción | Requerido | +|-----------|------|-------------|-----------| +| `checksum` | string | Checksum del cliente `ogLive` a establecer como predeterminado | Sí | + +#### Ejemplo de Solicitud + +```bash +curl -X PUT \ + 'http://172.17.8.37/ogboot/v1/oglives/default' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -d '{ + "checksum": "9e49a085ba74f97a81bdf9b3d0785094" + }' +``` + +#### Respuestas + +##### Éxito (200 OK) + +```json +{ + "success": "ogLive client set as default successfully", + "message": { + "id": "9e49a085ba74f97a81bdf9b3d0785094", + "distribution": "noble", + "kernel": "6.8.0-31-generic-amd64-r20240716", + "architecture": "i386", + "revision": "20241014", + "directory": "/opt/ogboot/tftpboot//ogLive-6.8.0-i386-20241014" + } +} +``` + +##### Error (400 Bad Request) + +```json +{ + "error": "INVALID_INPUT", + "message": "Invalid input data: checksum is required." +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "SERVER_ERROR", + "message": "Failed to set ogLive as default." +} +``` + +### Iniciar Instalación de un Cliente ogLive + +Inicia el proceso de instalación de un cliente `ogLive` a partir de una URL de descarga proporcionada. Este endpoint es asincrónico y, tras la instalación, envía una notificación a la URL del webhook configurada en `ogCore`. + +**URL:** `/ogboot/v1/oglives/install` +**Método:** `POST` + +#### Cuerpo de la Solicitud + +```json +{ + "url": "https://ognproject.evlt.uma.es/trac/downloads/ogLive-focal-5.11.0-22-generic-amd64-r20210413.992ebb9.iso", + "id": "12345" +} +``` + +| Parámetro | Tipo | Descripción | Requerido | +|-----------|------|-------------|-----------| +| `url` | string | URL del archivo ISO de `ogLive` a descargar e instalar | Sí | +| `id` | string | ID único de transacción para rastrear el proceso de instalación | Sí | + +#### Ejemplo de Solicitud + +```bash +curl -X POST \ + 'http://172.17.8.37/ogboot/v1/oglives/install' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -d '{ + "url": "https://ognproject.evlt.uma.es/trac/downloads/ogLive-focal-5.11.0-22-generic-amd64-r20210413.992ebb9.iso", + "id": "12345" + }' +``` + +#### Respuestas + +##### Éxito (202 Accepted) + +```json +{ + "success": "ogLive client installation started", + "transaction_id": "12345" +} +``` + +##### Error (400 Bad Request) + +```json +{ + "error": "Invalid input data", + "details": "URL and transaction ID are required." +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "Failed to initiate ogLive installation", + "details": "Detalles del error específico" +} +``` + +!!! note "Proceso asíncrono" + Este endpoint ejecuta la instalación en segundo plano y notifica al `ogCore` a través de un webhook en la URL configurada al finalizar el proceso, enviando el estado, el código de respuesta (200 si es exitoso) y un mensaje. + +### Desinstalar un Cliente ogLive + +Permite desinstalar un cliente `ogLive` identificado por su checksum. + +**URL:** `/ogboot/v1/oglives/{checksum}` +**Método:** `DELETE` + +#### Parámetros de Ruta + +| Parámetro | Tipo | Descripción | Ejemplo | +|-----------|------|-------------|---------| +| `checksum` | string | Checksum del cliente `ogLive` a desinstalar | `9e49a085ba74f97a81bdf9b3d0785094` | + +#### Ejemplo de Solicitud + +```bash +curl -X DELETE \ + 'http://172.17.8.37/ogboot/v1/oglives/9e49a085ba74f97a81bdf9b3d0785094' \ + -H 'accept: application/json' +``` + +#### Respuestas + +##### Éxito (200 OK) + +```json +{ + "message": "ogLive client uninstalled successfully", + "details": "Detalles adicionales de la desinstalación." +} +``` + +##### Error (404 Not Found) + +```json +{ + "error": "NOT_FOUND", + "message": "ogLive client not found." +} +``` + +##### Error (403 Forbidden) + +```json +{ + "error": "FORBIDDEN", + "message": "Cannot uninstall the default ogLive client." +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "SERVER_ERROR", + "message": "Failed to uninstall ogLive client." +} +``` + +o + +```json +{ + "error": "UNKNOWN_ERROR", + "message": "An unknown error occurred." +} +``` + +--- + +## Gestión de Archivos PXE + +### Obtener todos los ficheros de arranque + +Devuelve la lista de archivos de arranque PXE disponibles. + +**URL:** `/ogboot/v1/pxes` +**Método:** `GET` + +#### Ejemplo de Solicitud + +```bash +curl -X GET http://example.com/ogboot/v1/pxes +``` + +#### Respuestas + +##### Éxito (200 OK) + +```json +{ + "success": "Boot files retrieved successfully", + "message": [ + "01-00-50-56-aa-bb-cc", + "01-00-50-56-dd-ee-ff" + ] +} +``` + +##### Error (404 Not Found) + +```json +{ + "error": "NOT_FOUND", + "message": "No boot files found." +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "SERVER_ERROR", + "message": "Failed to retrieve boot files: directory not found." +} +``` + +### Obtener fichero de arranque + +Devuelve el archivo de arranque para una dirección MAC específica, incluyendo los parámetros de configuración. + +**URL:** `/ogboot/v1/pxes/{mac}` +**Método:** `GET` + +#### Parámetros de Ruta + +| Parámetro | Tipo | Descripción | Ejemplo | +|-----------|------|-------------|---------| +| `mac` | string | Dirección MAC para la cual se recuperará el archivo de arranque | `00:50:56:22:11:12` | + +#### Ejemplo de Solicitud + +```bash +curl -X GET \ + 'http://172.17.8.37/ogboot/v1/pxes/00:50:56:22:11:12' \ + -H 'accept: application/json' +``` + +#### Respuestas + +##### Éxito (200 OK) - Caso 1: Archivo de arranque con parámetros + +```json +{ + "success": "Boot file retrieved successfully", + "message": { + "template_name": "pxe", + "mac": "00:50:56:22:11:12", + "lang": "es_ES.UTF-8", + "ip": "192.168.2.11", + "server_ip": "192.168.2.1", + "router": "192.168.2.1", + "netmask": "255.255.255.0", + "computer_name": "pc11", + "netiface": "eth0", + "group": "Aula_virtual", + "ogrepo": "192.168.2.1", + "oglive": "192.168.2.1", + "oglog": "192.168.2.1", + "ogshare": "192.168.2.1", + "oglivedir": "ogLive", + "ogprof": "false", + "hardprofile": "", + "ogntp": "", + "ogdns": "", + "ogproxy": "", + "ogunit": "", + "resolution": "788" + } +} +``` + +##### Éxito (200 OK) - Caso 2: Archivo de arranque por disco (sin parámetros) + +```json +{ + "success": "Boot file retrieved successfully", + "message": { + "template_name": "disk_boot", + "mac": "00:50:56:22:11:12", + "message": "Boot file without parameters, possibly a disk boot template." + } +} +``` + +##### Error (404 Not Found) + +```json +{ + "error": "NOT_FOUND", + "message": "No boot file found for the specified MAC address." +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "SERVER_ERROR", + "message": "An error occurred while retrieving the boot file." +} +``` + +### Crear archivo PXE + +Este endpoint permite crear un archivo de arranque PXE con la MAC y la plantilla especificadas, con parámetros adicionales como IP, directorio ogLive, servidor, y más. + +**URL:** `/ogboot/v1/pxes` +**Método:** `POST` + +#### Cuerpo de la Solicitud + +```json +{ + "mac": "00:50:56:22:11:12", + "template_name": "mi_plantilla.ipxe", + "server_ip": "192.168.2.1", + "oglivedir": "ogLive", + "lang": "es_ES.UTF-8", + "ip": "192.168.2.11", + "router": "192.168.2.1", + "netmask": "255.255.255.0", + "computer_name": "pc11", + "netiface": "eth0", + "group": "Aula_virtual", + "ogrepo": "192.168.2.1", + "oglive": "192.168.2.1", + "oglog": "192.168.2.1", + "ogshare": "192.168.2.1", + "ogprof": "false", + "hardprofile": "", + "ogntp": "192.168.2.1", + "ogdns": "192.168.2.1", + "ogproxy": "192.168.2.1", + "ogunit": "unit", + "resolution": "788" +} +``` + +| Parámetro | Tipo | Descripción | Requerido | +|-----------|------|-------------|-----------| +| `mac` | string | Dirección MAC para el archivo de arranque | Sí | +| `template_name` | string | Nombre de la plantilla a utilizar | Sí | +| `server_ip` | string | Dirección IP del servidor | No | +| `oglivedir` | string | Directorio ogLive a utilizar en el arranque | No | +| `lang` | string | Idioma de la configuración regional | No | +| `ip` | string | Dirección IP | No | +| `router` | string | Dirección IP gateway | No | +| `netmask` | string | Máscara de red | No | +| `computer_name` | string | Nombre del equipo | No | +| `netiface` | string | Interfaz de red | No | +| `group` | string | Grupo de la máquina | No | +| `ogrepo` | string | IP del servidor de ogrepositorio | No | +| `oglive` | string | IP del servidor tftpboot | No | +| `oglog` | string | IP del servidor de logs | No | +| `ogshare` | string | IP del servidor ogclient | No | +| `ogprof` | string | Indica si es profesor | No | +| `hardprofile` | string | Perfil de hardware | No | +| `ogntp` | string | IP del servidor NTP | No | +| `ogdns` | string | IP del servidor DNS | No | +| `ogproxy` | string | IP del servidor proxy | No | +| `ogunit` | string | Directorio de unidad | No | +| `resolution` | string | Resolución de pantalla | No | + +#### Ejemplo de Solicitud + +```bash +curl -X POST \ + 'http://172.17.8.37/ogboot/v1/pxes' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -d '{ + "mac": "00:50:56:22:11:12", + "template_name": "mi_plantilla.ipxe", + "server_ip": "192.168.2.1", + "oglivedir": "ogLive" + }' +``` + +#### Respuestas + +##### Éxito (200 OK) + +```json +{ + "success": "PXE file created successfully", + "message": "#!ipxe\n#Template: mi_plantilla.ipxe\nset kernelargs ro boot=oginit quiet splash irqpoll ..." +} +``` + +##### Error (400 Bad Request) + +```json +{ + "error": "INVALID_INPUT", + "message": "Missing required fields: mac and template_name" +} +``` + +##### Error (404 Not Found) + +```json +{ + "error": "TEMPLATE_NOT_FOUND", + "message": "No se encontró la plantilla especificada" +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "FAILED_TO_CREATE_PXE_FILE", + "message": "Error al crear el archivo PXE" +} +``` + +### Eliminar archivo PXE + +Este endpoint permite eliminar un archivo de arranque PXE específico usando la dirección MAC del cliente. + +**URL:** `/ogboot/v1/pxes/{mac}` +**Método:** `DELETE` + +#### Parámetros de Ruta + +| Parámetro | Tipo | Descripción | Ejemplo | +|-----------|------|-------------|---------| +| `mac` | string | Dirección MAC del cliente cuyo archivo de arranque se va a eliminar | `00:11:22:33:44:55` | + +#### Ejemplo de Solicitud + +```bash +curl -X DELETE \ + 'http://172.17.8.37/ogboot/v1/pxes/00:11:22:33:44:55' \ + -H 'accept: application/json' +``` + +#### Respuestas + +##### Éxito (200 OK) + +```json +{ + "success": "Boot file deleted successfully", + "message": "The boot file for MAC 00:11:22:33:44:55 has been deleted." +} +``` + +##### Error (404 Not Found) + +```json +{ + "error": "NOT_FOUND", + "message": "No boot file found for the specified MAC address." +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "SERVER_ERROR", + "message": "Failed to delete the boot file due to server error." +} +``` + +--- + +## Gestión de Plantillas PXE + +### Obtener todas las plantillas PXE + +Este endpoint devuelve una lista de todas las plantillas de arranque PXE disponibles en el sistema. + +**URL:** `/ogboot/v1/pxe-templates` +**Método:** `GET` + +#### Ejemplo de Solicitud + +```bash +curl -X GET \ + 'http://172.17.8.37/ogboot/v1/pxe-templates' \ + -H 'accept: application/json' +``` + +#### Respuestas + +##### Éxito (200 OK) + +```json +{ + "success": "Lista de plantillas obtenida con éxito", + "message": [ + "mi_plantilla.ipxe", + "otra_plantilla.ipxe" + ] +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "SERVER_ERROR", + "message": "Directorio de plantillas no encontrado" +} +``` + +### Obtener contenido de una plantilla PXE + +Este endpoint obtiene el contenido de una plantilla de arranque PXE específica por su nombre. + +**URL:** `/ogboot/v1/pxe-templates/{templateName}` +**Método:** `GET` + +#### Parámetros de Ruta + +| Parámetro | Tipo | Descripción | Ejemplo | +|-----------|------|-------------|---------| +| `templateName` | string | Nombre de la plantilla PXE a consultar | `mi_plantilla.ipxe` | + +#### Ejemplo de Solicitud + +```bash +curl -X GET \ + 'http://172.17.8.37/ogboot/v1/pxe-templates/mi_plantilla.ipxe' \ + -H 'accept: application/json' +``` + +#### Respuestas + +##### Éxito (200 OK) + +```json +{ + "success": "Plantilla obtenida con éxito", + "template_name": "mi_plantilla.ipxe", + "template_content": "#!ipxe\nset timeout 0\nset timeout-style hidden\n\nset ISODIR ogLive\nset default 0\nset kernelargs INFOHOST\nkernel tftp://SERVERIP/ogLive/ogvmlinuz ${kernelargs}\ninitrd tftp://SERVERIP/ogLive/oginitrd.img\nboot" +} +``` + +##### Error (404 Not Found) + +```json +{ + "error": "TEMPLATE_NOT_FOUND", + "message": "No se encontró la plantilla especificada" +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "FAILED_TO_READ_TEMPLATE", + "message": "Error al leer la plantilla" +} +``` + +### Crear Plantilla + +Este endpoint crea una nueva plantilla de arranque PXE en el servidor utilizando el nombre y el contenido proporcionado. + +**URL:** `/ogboot/v1/pxe-templates` +**Método:** `POST` + +#### Cuerpo de la Solicitud + +```json +{ + "name_template": "mi_plantilla.ipxe", + "content_template": "#!ipxe\nset timeout 0\nset timeout-style hidden\nset ISODIR __OGLIVE__\nset default 0\nset kernelargs __INFOHOST__\n:try_iso\nkernel http://__SERVERIP__/tftpboot/${ISODIR}/ogvmlinuz ${kernelargs} || goto fallback\ninitrd http://__SERVERIP__/tftpboot/${ISODIR}/oginitrd.img\nboot\n\n:fallback\nset ISODIR ogLive\nkernel http://__SERVERIP__/tftpboot/${ISODIR}/ogvmlinuz ${kernelargs}\ninitrd http://__SERVERIP__/tftpboot/${ISODIR}/oginitrd.img\nboot\n" +} +``` + +| Parámetro | Tipo | Descripción | Requerido | +|-----------|------|-------------|-----------| +| `name_template` | string | Nombre de la nueva plantilla | Sí | +| `content_template` | string | Contenido de la plantilla, que debe incluir el script de arranque | Sí | + +#### Ejemplo de Solicitud + +```bash +curl -X POST \ + 'http://172.17.8.37/ogboot/v1/pxe-templates' \ + -H 'Content-Type: application/json' \ + -d '{ + "name_template": "mi_plantilla.ipxe", + "content_template": "#!ipxe\nset timeout 0\nset timeout-style hidden\nset ISODIR __OGLIVE__\nset default 0\nset kernelargs __INFOHOST__\n:try_iso\nkernel http://__SERVERIP__/tftpboot/${ISODIR}/ogvmlinuz ${kernelargs} || goto fallback\ninitrd http://__SERVERIP__/tftpboot/${ISODIR}/oginitrd.img\nboot\n\n:fallback\nset ISODIR ogLive\nkernel http://__SERVERIP__/tftpboot/${ISODIR}/ogvmlinuz ${kernelargs}\ninitrd http://__SERVERIP__/tftpboot/${ISODIR}/oginitrd.img\nboot\n" + }' +``` + +#### Respuestas + +##### Éxito (200 OK) + +```json +{ + "success": "Plantilla creada con éxito", + "message": { + "template_name": "mi_plantilla.ipxe", + "template_content": "#!ipxe\nset timeout 0\nset timeout-style hidden\nset ISODIR __OGLIVE__\nset default 0\nset kernelargs __INFOHOST__\n:try_iso\nkernel http://__SERVERIP__/tftpboot/${ISODIR}/ogvmlinuz ${kernelargs} || goto fallback\ninitrd http://__SERVERIP__/tftpboot/${ISODIR}/oginitrd.img\nboot\n\n:fallback\nset ISODIR ogLive\nkernel http://__SERVERIP__/tftpboot/${ISODIR}/ogvmlinuz ${kernelargs}\ninitrd http://__SERVERIP__/tftpboot/${ISODIR}/oginitrd.img\nboot\n" + } +} +``` + +##### Error (400 Bad Request) + +```json +{ + "error": "INVALID_INPUT", + "message": "Faltan datos requeridos: name_template y content_template son necesarios." +} +``` + +##### Error (403 Forbidden) + +```json +{ + "error": "UNAUTHORIZED_ACCESS", + "message": "Intento de acceso no autorizado fuera del directorio de plantillas." +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "FILE_CREATION_ERROR", + "message": "Ocurrió un error al crear la plantilla de arranque." +} +``` + +### Eliminar Plantilla + +Este endpoint elimina una plantilla de arranque PXE en el servidor utilizando el nombre proporcionado. + +**URL:** `/ogboot/v1/pxe-templates/{name}` +**Método:** `DELETE` + +#### Parámetros de Ruta + +| Parámetro | Tipo | Descripción | Ejemplo | +|-----------|------|-------------|---------| +| `name` | string | Nombre de la plantilla de arranque que se desea eliminar | `mi_plantilla.ipxe` | + +#### Ejemplo de Solicitud + +```bash +curl -X DELETE \ + 'http://172.17.8.37/ogboot/v1/pxe-templates/mi_plantilla.ipxe' \ + -H 'accept: application/json' +``` + +#### Respuestas + +##### Éxito (200 OK) + +```json +{ + "success": "Plantilla eliminada", + "message": "La plantilla mi_plantilla se ha borrado correctamente" +} +``` + +##### Error (404 Not Found) + +```json +{ + "error": "TEMPLATE_NOT_FOUND", + "message": "No se encontró la plantilla especificada" +} +``` + +##### Error (500 Internal Server Error) + +```json +{ + "error": "FAILED_TO_DELETE_TEMPLATE", + "message": "Ocurrió un error al intentar eliminar la plantilla" +} +``` + +## Glosario de términos + +| Término | Descripción | +|---------|-------------| +| **PXE** | Preboot Execution Environment - Entorno de arranque que permite iniciar un ordenador a través de la red | +| **ogLive** | Cliente de arranque remoto utilizado por OpenGnsys | +| **ogBoot** | Componente de OpenGnsys que facilita la funcionalidad de arranque remoto | +| **ogCore** | Servidor principal de OpenGnsys que gestiona la operación del sistema | +| **Checksum** | Valor hash que identifica de manera única a un cliente ogLive instalado | +| **ISO** | Archivo de imagen que contiene un cliente ogLive | +| **TFTP** | Trivial File Transfer Protocol - Protocolo utilizado para transferir los archivos durante el arranque remoto | diff --git a/i18n-docu/docs/es/developer/ogcloneengine.md b/i18n-docu/docs/es/developer/ogcloneengine.md new file mode 100644 index 0000000..e69de29 diff --git a/i18n-docu/docs/es/developer/ogcore.md b/i18n-docu/docs/es/developer/ogcore.md new file mode 100644 index 0000000..3d815e9 --- /dev/null +++ b/i18n-docu/docs/es/developer/ogcore.md @@ -0,0 +1,184 @@ +# Consola de Administración + +La consola de administración se divide en 3 componentes principales + +- Interfaz WEB +- API de comunicación con el resto de componentes +- Base de Datos + +## Interfaz WEB (ogGui) + +### ogGui + +ogGui es un proyecto frontend desarrollado en Angular para proporcionar una interfaz de usuario a la herramienta OpenGnsys. + +#### Ambiente de Desarrollo + +Este proyecto ha sido desarrollado y probado en el siguiente entorno de desarrollo: + +- Sistema operativo: Ubuntu 22.04.3 LTS (Release: 22.04, Codename: jammy) +- Editor de código: Visual Studio Code 1.87.2 +- Node.js: v22.1.0 +- npm: 10.7.0 +- Angular CLI: 12.0.3 +- Angular Core: 12.0.1 +- Angular Material: 12.0.2 + +#### Instalación + + +1. Instala la versión mas reciente de Node.js (v22.1.0) +
`https://nodejs.org` +2. En caso de no tener instalado npm +
`sudo apt install npm` +3. Instalar Angular cli >= 12 +
`npm install -g @angular/cli` +4. Clona este repositorio en tu máquina local utilizando Git. +5. Situate dentro del directorio /ogWebconsole +6. Instala las dependencias del proyecto +
`npm install`. +7. Para ejecutar la aplicación en modo de desarrollo, utiliza el comando `ng serve`. La aplicación estará disponible en `http://localhost:4200/`. + +## API (ogCore) + +### Descripción + +ogCore es el servicio central de OpenGnsys, diseñado para proporcionar funcionalidades a través de una API RESTful. Esta herramienta utiliza tecnología PHP, aprovechando el framework Symfony y el ORM Doctrine para gestionar la base de datos. +A continuación, se detallan los pasos necesarios para desplegar el proyecto en un entorno de desarrollo. + +### Versiones y tecnologías utilizadas + +- PHP 8.3 +- Symfony 6.4 +- Doctrine 2.19 +- API Platform 3.2 +- MariaDB 10.11 + +### Requisitos + +Antes de comenzar, asegúrate de tener los siguientes requisitos: + +- Docker +- Docker compose + +### Instalación + +#### Desplegar contenedores + +Para que no haya conflictos entre los puertos, asegúrate de que no tienes ningún servicio corriendo en los puertos 8080 y 3306. + +```sh +docker compose up --build -d +``` + +Comprobamos que se han levantado correctamente bien los 3 contenedores de la aplicación: + +```sh +docker ps +``` + +Y deberiamos ver algo parecido a : + +- ogcore-nginx +- ogcore-php +- ogcore-database + + +#### Instalamos dependencias + +```sh +docker exec ogcore-php composer install +docker exec ogcore-php php bin/console lexik:jwt:generate-keypair --overwrite +``` + +Comprobamos, que el contenedor de Nginx, tiene el puerto 8080 levantado correctamente, asi que tan solo tendremos que +acceder a la siguiente URL: + +```sh +http://127.0.0.1:8080/docs +``` +Si todo ha ido bien, deberiamos ver la documentación de la API de ogCore. + +Para poder actualizar la base de datos: + +Para inicializar la base de datos: + +```sh +docker exec ogcore-php php bin/console doctrine:migrations:migrate --no-interaction +``` + +```sh +docker exec ogcore-php php bin/console doctrine:fixtures:load --no-interaction +docker exec ogcore-php php bin/console app:load-default-user-groups #cargamos los grupos por defecto +docker exec ogcore-php php bin/console app:load-default-commands #cargamos los commands por defecto +``` + +### UX Api Platform + +Api Platform proporciona una interfaz de usuario para interactuar con la API de ogCore. Para acceder a la interfaz de usuario, accede a la siguiente URL: + +```sh +http://127.0.0.1:8080/docs +``` + +Para poder autenticarte, necesitas un token JWT. Para obtenerlo, accedemos al endpoint de autenticación "auth/login": + +![img.png](../../assets/images/screenshots/img.png) +![img.png](../../assets/images/screenshots/img2.png) +Obtenemos el token y lo introducimos en la interfaz de usuario de Api Platform de la siguiente manera: + +![img.png](../../assets/images/screenshots/img3.png) + +Ahora, ya podemos interactuar con la API de ogCore. Para comprobar que todo está correcto, podemos fijarnos en los headers de las llamadas Curl, y ver que el token JWT se ha introducido correctamente. + +### Test + +Para ejecutar los test, ejecutamos el siguiente comando: + +```sh +docker compose exec php bin/phpunit +``` + +### Reiniciar base de datos + +Es posible que en momentos de desarrollo, sea necesario volver a cargar la base de datos y actualizar los esquemas de la misma, para ello, ejecutamos el siguiente comando: + +```sh +docker exec ogcore-php php bin/console doctrine:database:drop --force +docker exec ogcore-php php bin/console doctrine:database:create +``` + +### Migraciones de datos + +Para poder migrar los datos desde la base de datos "antigua", previamente necesitamos poder tener un esquema de base de datos con un dump de OpenGnsys. Es decir: + + - Creamos una base de datos temporal simulando una insancia de OpenGnsys 1.1. La solicitaremos al equipo de desarrollo de las universidades + - Necesitaremos un dump de la base de datos de OpenGnsys 1.1. + +Mediante doctrine, creamos la base de datos temporal: + +```sh +docker exec ogcore-php php bin/console doctrine:database:create --connection=og_1 +``` + +![img.png](../../assets/images/screenshots/img_bbdd.png) + +Aqui podemos ver como tenemos las 2 bases de datos. OgCore es la actual, donde estamos desarrollando, y ogcore_old_og es la base de datos temporal que acabamos de crear. + +Aqui vendria el paso de cargar el dump en dicha base de datos, ya que contiene informacion sensible, no se aloja en el repositorio, por eso tendremos que solicitarla al equipo correspondiente. +Una vez tengamos la base de datos cargada, podremos ejecutar las migraciones de datos: + +```sh +--- Migraciones de OpenGnsys. --- +docker exec ogcore-php php bin/console opengnsys:migration:organizational-unit #cargamos las unidades organizativas +docker exec ogcore-php php bin/console opengnsys:migration:hardware-profile #cargamos los perfiles de hardware +docker exec ogcore-php php bin/console opengnsys:migration:clients #cargamos los clientes +docker exec ogcore-php php bin/console opengnsys:migration:os #cargamos los sistemas operativos +docker exec ogcore-php php bin/console opengnsys:migration:image #cargamos las imagenes +docker exec ogcore-php php bin/console opengnsys:migration:software-profile #cargamos los software profiles +``` + +### Objetos de interés + +Se ha incluido un .zip con las colecciones de de API de ogCore para poder trabajar, hacer pruebas, y demás en Postman. Para importarlos, tan solo tendremos que ir a la pestaña de importar, y seleccionar el archivo .zip. + diff --git a/i18n-docu/docs/es/developer/ogdhcp.md b/i18n-docu/docs/es/developer/ogdhcp.md new file mode 100644 index 0000000..4e825fc --- /dev/null +++ b/i18n-docu/docs/es/developer/ogdhcp.md @@ -0,0 +1,20 @@ +# ogDHCP: API para Gestión de Kea DHCP + +El componente `ogdhcp` es una API especializada para administrar eficientemente la configuración de Kea DHCP, un servidor DHCP de código abierto desarrollado por ISC (Internet Systems Consortium) que proporciona soporte completo tanto para DHCPv4 como DHCPv6. + +## Características principales + +La API `ogdhcp` ofrece una interfaz intuitiva que permite a usuarios y aplicaciones como OpenGNSys interactuar remotamente con Kea DHCP, eliminando la necesidad de modificar manualmente los archivos de configuración. Esta solución automatizada agiliza significativamente la gestión de la infraestructura de red. + +## Funcionalidades + +La API proporciona un conjunto completo de operaciones que permiten: + +- Consultar en tiempo real la configuración actual de Kea DHCP +- Gestionar de forma integral la configuración de Kea DHCP: + - Añadir, eliminar o modificar subredes + - Administrar reservas de direcciones IP + - Configurar opciones específicas de DHCP + - Personalizar parámetros del servidor + +Esta herramienta resulta especialmente valiosa para administradores de sistemas que necesitan una gestión centralizada y eficiente de la configuración DHCP en entornos de red complejos. diff --git a/i18n-docu/docs/es/developer/oglive.md b/i18n-docu/docs/es/developer/oglive.md new file mode 100644 index 0000000..e69de29 diff --git a/i18n-docu/docs/es/developer/oglog.md b/i18n-docu/docs/es/developer/oglog.md new file mode 100644 index 0000000..e69de29 diff --git a/i18n-docu/docs/es/developer/ogrepository.md b/i18n-docu/docs/es/developer/ogrepository.md new file mode 100644 index 0000000..301c484 --- /dev/null +++ b/i18n-docu/docs/es/developer/ogrepository.md @@ -0,0 +1,728 @@ +ogRepository - OpenGnsys Repository Manager +=========================================== + + +Este repositorio GIT contiene la estructura de datos del repositorio de imágenes de OpenGnsys. + +- **api** ------ API de ogRepository. +- **bin** ------ Scripts en Python 3 y binarios de gestión de ogRepository. +- **etc** ------ Ficheros y plantillas de configuración de ogRepository. +- **packets** - Paquetes cuya instalación es requerida. + +--- + +## Requerimientos + +Paquetes APT requeridos + + - **uftp** (se puede instalar con "sudo DEBIAN_FRONTEND=noninteractive apt install uftp -y", para que no pida la ruta predeterminada, y se debe deshabilitar el servicio) + - **udpcast** (se puede instalar con "sudo apt install ./udpcast_20230924_amd64.deb", apuntando al paquete) + - **ctorrent** (se puede instalar con "sudo apt install ctorrent") + - **bittorrent** (se puede instalar con "sudo apt install bittorrent", pero previamente hay que añadir un repositorio de Debian) + - **bittornado** (se puede instalar con "sudo apt install bittornado", pero previamente hay que añadir un repositorio de Debian) + - **wakeonlan** (se puede instalar con "sudo apt install wakeonlan") + - **qemu** (se puede instalar con "sudo apt install qemu-utils") + - **partclone** (se puede instalar con "sudo apt install partclone") + - **lzop** (se puede instalar con "sudo apt install lzop") + +Librerías Python requeridas + + - **flask** (se puede instalar con "sudo apt install python3-flask") + - **paramiko** (se puede instalar con "sudo apt install python3-paramiko") + - **psutil** (se puede instalar con "sudo apt install python3-psutil") + - **flasgger** (se puede instalar con "sudo apt install python3-flasgger") + - **requests** (se puede instalar con "sudo apt install python3-requests", pero no es necesario en Ubuntu 24) + +Para que todos los endpoints y scripts funcionen con la configuración actual deben existir los siguientes directorios + + - **/opt/opengnsys/ogrepository/images/** + - **/opt/opengnsys/ogrepository/images_trash/** (debe estar en la misma partición que el anterior, o tardarán mucho las eliminaciones y restauraciones) + - **/opt/opengnsys/ogrepository/images_virtual/** (aquí deben copiarse las imágenes virtuales que se quiera convertir a "img") + - **/opt/opengnsys/ogrepository/bin/** (aquí deben estar todos los scripts de Python, y el binario "udp-sender") + - **/opt/opengnsys/ogrepository/api/** (aquí debe estar la API y el Swagger) + - **/opt/opengnsys/ogrepository/etc/** (aquí se guardan los archivos "repoinfo.json" y "trashinfo.json") + - **/opt/opengnsys/ogrepository/log/** (aquí se guardan los logs) + +Y también debe existir el siguiente archivo: + - **/opt/opengnsys/ogrepository/etc/ogAdmRepo.cfg** (de aquí pilla su IP y la de ogCore) + +--- + +## API de ogRepository + +La API de ogRepository proporciona una interfaz para facilitar la administración de las imágenes almacenadas en los repositorios de imágenes, permitiendo eliminarlas, enviarlas a clientes ogLive (con diferentes protocolos de transmisión), importarlas desde otros repositorios, etc. + +El presente documento detalla los endpoints de la API, con sus respectivos parámetros de entrada, así como las acciones que llevan a cabo. + +--- +### Obtener Información de Estado de ogRepository + +Se devolverá informacion de CPU, memoria RAM, disco duro, el estado de ciertos servicios y procesos de ogRepository, y el estado de instalación de ogGit, en formato JSON. +Se puede utilizar el script "**getRepoStatus.py**, que debe ser llamado por el endpoint. +**NOTA**: En los apartados "services" y "processes" he especificado los servicios y procesos que me han parecido interesantes, pero se puede añadir o eliminar los que se desee. + +**URL:** `/ogrepository/v1/status` +**Método HTTP:** GET + +**Ejemplo de Solicitud:** + +```bash +curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/status +``` + +**Respuestas:** +- **Código 500 Internal Server Error:** Ocurrió un error al consultar y/o devolver la información de estado. +- **Código 200 OK:** La información de estado se obtuvo exitosamente. + - **Contenido:** Información de estado en formato JSON. + ```json + { + "oggit": { + "installed": "True" + }, + "cpu": { + "used_percentage": "35%" + }, + "ram": { + "total": "7.8GB", + "used": "0.3GB", + "available": "7.2GB", + "used_percentage": "7%" + }, + "disk": { + "total": "11.7GB", + "used": "7.7GB", + "available": "3.4GB", + "used_percentage": "69%" + }, + "services": { + "ssh": "active", + "smbd": "active", + "rsync": "active" + }, + "processes": { + "udp-sender": "stopped", + "uftp": "stopped", + "bttrack": "stopped", + "btlaunchmany.bittornado": "stopped" + } + } + ``` +--- +### Obtener Información de todas las Imágenes + +Se devolverá la informacion contenida en el archivo "**/opt/opengnsys/ogrepository/etc/repoinfo.json**" (que corresponde a todas las imágenes almacenadas en el repositorio), y en el archivo "**/opt/opengnsys/ogrepository/etc/trashinfo.json**" (que corresponde a las imágenes que fueron eliminadas, que estarán en la papelera). +Se puede utilizar el script "**getRepoInfo.py**, que debe ser llamado por el endpoint, que a su vez llama al script "**updateRepoInfo.py**", para actualizar previamente la información del repositorio. +**NOTA**: El script requiere que en este caso se le pase "all" como parámetro, pero el endpoint se ejecuta sin parámetros. + +**URL:** `/ogrepository/v1/images` +**Método HTTP:** GET + +**Ejemplo de Solicitud:** + +```bash +curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/images +``` + +**Respuestas:** +- **Código 500 Internal Server Error:** Ocurrió un error al consultar y/o devolver la información de las imágenes. +- **Código 200 OK:** La información de las imágenes se obtuvo exitosamente. + - **Contenido:** Información de imágenes en formato JSON. + ```json + { + "REPOSITORY": { + "directory": "/opt/opengnsys/ogrepository/images", + "images": [ + { + "name": "Ubuntu24", + "type": "img", + "clientname": "Ubuntu24_clientname", + "clonator": "partclone", + "compressor": "lzop", + "filesystem": "EXTFS", + "datasize": 9859634200000, + "size": 4505673214, + "sum": "065a933c780ab1aaa044435ad5d4bf87", + "fullsum": "33575b9070e4a8043371b8c6ae52b80e" + }, + { + "name": "Windows10", + "type": "img", + "clientname": "Windows10_clientname", + "clonator": "partclone", + "compressor": "lzop", + "filesystem": "NTFS", + "datasize": 24222105600000, + "size": 13198910185, + "sum": "8874d5ab84314f44841c36c69bb5aa82", + "fullsum": "9e7cd32c606ebe5bd39ba212ce7aeb02" + } + ] + }, + "TRASH": { + "directory": "/opt/opengnsys/ogrepository/images_trash", + "images": [ + { + "name": "Ubuntu20", + "type": "img", + "clientname": "Ubuntu20_clientname", + "clonator": "partclone", + "compressor": "lzop", + "filesystem": "EXTFS", + "datasize": 8912896000000, + "size": 3803794535, + "sum": "081a933c780ab1aaa044435ad5d4bf56", + "fullsum": "22735b9070e4a8043371b8c6ae52b90d" + } + ] + } + } + ``` + - **name**: Nombre de la imagen, sin extensión. + - **type**: Extensión de la imagen. + - **clientname**: Nombre asignado al modelo del que se ha obtenido la imagen. + - **clonator**: Programa utilizado para la clonación. + - **compressor**: Programa utilizado para la compresión. + - **filesystem**: Sistema de archivos utilizado en la partición clonada. + - **datasize**: Tamaño de la imagen una vez restaurada, en bytes (tamaño de los datos). + - **size**: Tamaño del archivo de imagen, en bytes. + - **sum**: Hash MD5 del último MB del archivo de imagen. + - **fullsum**: Hash MD5 de todo el archivo de imagen. + +--- +### Obtener Información de una Imagen concreta + +Se devolverá la informacion de la imagen especificada, que puede estar en el archivo "**/opt/opengnsys/ogrepository/etc/repoinfo.json**" o en el archivo "**/opt/opengnsys/ogrepository/etc/trashinfo.json**" (en este último caso, si la imagen está en la papelera). +Se puede utilizar el script "**getRepoInfo.py**, que debe ser llamado por el endpoint, que a su vez llama al script "**updateRepoInfo.py**", para actualizar previamente la información del repositorio. +**NOTA**: El script requiere que en este caso se le pase el nombre de la imagen (con extensión) como parámetro. Este dato se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"). + +**URL:** `/ogrepository/v1/images/{ID_img}` +**Método HTTP:** GET + +**Ejemplo de Solicitud:** + +```bash +curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/images/22735b9070e4a8043371b8c6ae52b90d +``` + +**Respuestas:** +- **Código 500 Internal Server Error:** Ocurrió un error al consultar y/o devolver la información de la imagen. +- **Código 400 Bad Request:** No se ha encontrado la imagen especificada. +- **Código 200 OK:** La información de la imagen se obtuvo exitosamente. + - **Contenido:** Información de la imagen en formato JSON. + ```json + { + "directory": "/opt/opengnsys/ogrepository/images", + "images": [ + { + "name": "Windows10", + "type": "img", + "clientname": "Windows10_clientname", + "clonator": "partclone", + "compressor": "lzop", + "filesystem": "NTFS", + "datasize": 9859634200000, + "size": 4505673214, + "sum": "065a933c780ab1aaa044435ad5d4bf87", + "fullsum": "33575b9070e4a8043371b8c6ae52b80e" + } + ] + } + ``` + - **name**: Nombre de la imagen, sin extensión. + - **type**: Extensión de la imagen. + - **clientname**: Nombre asignado al modelo del que se ha obtenido la imagen. + - **clonator**: Programa utilizado para la clonación. + - **compressor**: Programa utilizado para la compresión. + - **filesystem**: Sistema de archivos utilizado en la partición clonada. + - **datasize**: Tamaño de la imagen una vez restaurada, en bytes (tamaño de los datos). + - **size**: Tamaño del archivo de imagen, en bytes. + - **sum**: Hash MD5 del último MB del archivo de imagen. + - **fullsum**: Hash MD5 de todo el archivo de imagen. + +--- +### Actualizar Información del Repositorio + +Se actualizará la información de las imágenes almacenadas en el repositorio, reflejándola en el archivo "**/opt/opengnsys/ogrepository/etc/repoinfo.json**". +Se puede hacer con el script "**updateRepoInfo.py**", que debe ser llamado por el endpoint (y que es similar al script bash original "**checkrepo**"). +Este endpoint es llamado por el script "**deleteImage.py**" (para actualizar la información cada vez que se elimine una imagen), y creemos que también debe ser llamado por ogCore u ogLive cada vez que se haya creado una imagen. + +**URL:** `/ogrepository/v1/images` +**Método HTTP:** PUT + +**Ejemplo de Solicitud:** + +```bash +curl -X PUT -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/images +``` +**Respuestas:** +- **Código 500 Internal Server Error:** Ocurrió un error al actualizar la información de las imágenes. +- **Código 200 OK:** La actualización se realizó exitosamente. + +--- +### Chequear Integridad de Imagen + +Se comprobará la integridad del fichero de imagen especificado como parámetro. +Se puede hacer con el script "**checkImage.py**", que compara el tamaño actual del archivo con el almacenado en el archivo "**.size**", y el hash MD5 del último MB del archivo con el almacenado en el archivo "**.sum**". +**NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión) como parámetro. Este dato se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"). + +**URL:** `/ogrepository/v1/status/images/{ID_img}` +**Método HTTP:** GET + +**Ejemplo de Solicitud:** + +```bash +curl -X POST -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/status/images/22735b9070e4a8043371b8c6ae52b90d +``` +**Respuestas:** +- **Código 500 Internal Server Error:** Ocurrió un error al chequear la imagen. +- **Código 400 Bad Request:** No se ha encontrado la imagen especificada. +- **Código 200 OK:** La imagen se ha chequeado exitosamente. +- **Código 200 KO:** La imagen se ha chequeado correctamente, pero no ha pasado el test. + +--- +### Eliminar una Imagen + +Se eliminará la imagen especificada como parámetro, pudiendo eliminarla permanentemente o enviarla a la papelera. +Se puede hacer con el script "**deleteimage.py**", que debe ser llamado por el endpoint (y que incluye la funcionalidad "papelera"), y que a su vez llama al script "**updateRepoInfo.py**", para actualizar la información del repositorio. +**NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión) como primer parámetro, y el parámetro opcional "-p" (para que la eliminación sea permanente). El primer parámetro se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"), pero también hay que especificar el método de eliminación en la URL, para enviar o no el parámetro opcional. + +**URL:** `/ogrepository/v1/images/{ID_img}?method={method}` +**Método HTTP:** DELETE + +**Parámetro adicional (en URL):** +- **method**: Método de eliminación (puede ser "trash" o "permanent"). + +**Ejemplo de Solicitud:** + +```bash +curl -X DELETE -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/images/22735b9070e4a8043371b8c6ae52b90d?method=trash +``` +**Respuestas:** +- **Código 500 Internal Server Error:** Ocurrió un error al eliminar la imagen. +- **Código 400 Bad Request:** No se ha encontrado la imagen especificada. +- **Código 200 OK:** La imagen se eliminó exitosamente. + +--- +### Recuperar una Imagen + +Se recuperará la imagen especificada como parámetro, desde la papelera. +Se puede hacer con el script "**recoverImage.py**", que debe ser llamado por el endpoint, y que a su vez llama al script "**updateRepoInfo.py**", para actualizar la información del repositorio. +**NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión) como parámetro. Este dato se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"). + +**URL:** `/ogrepository/v1/trash/images` +**Método HTTP:** POST + +**Cuerpo de la Solicitud (JSON):** +- **ID_img**: Identificador de la imagen (correspondiente al contenido del archivo "full.sum" asociado). + +**Ejemplo de Solicitud:** + +```bash +curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"ID_img":"22735b9070e4a8043371b8c6ae52b90d"}' http://example.com/ogrepository/v1/trash/images +``` +**Respuestas:** +- **Código 500 Internal Server Error:** Ocurrió un error al recuperar la imagen. +- **Código 400 Bad Request:** No se ha encontrado la imagen especificada. +- **Código 200 OK:** La imagen se recuperó exitosamente. + +--- +### Eliminar una Imagen de la Papelera + +Se eliminará permanentemente la imagen especificada como parámetro, desde la papelera. +Se puede hacer con el script "**deleteTrashImage.py**", que debe ser llamado por el endpoint, y que a su vez llama al script "**updateTrashInfo.py**", para actualizar la información de la papelera. +**NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión) como parámetro. Este dato se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"). + +**URL:** `/ogrepository/v1/trash/images/{ID_img}` +**Método HTTP:** DELETE + +**Ejemplo de Solicitud:** + +```bash +curl -X DELETE -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/trash/images/22735b9070e4a8043371b8c6ae52b90d +``` +**Respuestas:** +- **Código 500 Internal Server Error:** Ocurrió un error al eliminar la imagen. +- **Código 400 Bad Request:** No se ha encontrado la imagen especificada. +- **Código 200 OK:** La imagen se eliminó exitosamente. + +--- +### Enviar una Imagen mediante UDPcast + +Se enviará la imagen especificada por Multicast, mediante la aplicación UDPcast. +Se puede hacer con el script "**sendFileMcast.py**", que a su vez llama al binario "**udp-sender**", que es quien realmente realiza el envío. +**NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión) como primer parámetro, y los datos de transferencia como segundo parámetro (en una cadena, con los datos separados por dos puntos). El primer parámetro se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"), pero los datos de transferencia deben enviarse desde ogCore (y luego son tratados en la API, para construir la cadena correspondiente al parámetro). +**NOTA2**: Este endpoint es asíncrono, ya que puede tardar mucho tiempo, por lo que solo informa de que la imagen se está enviando, y abre un proceso paralelo (pero no avisa a ogCore de su finalización, porque no puede comprobar cuando acaba la tarea de restauración de la imagen). + +**URL:** `/ogrepository/v1/udpcast` +**Método HTTP:** POST + +**Cuerpo de la Solicitud (JSON):** +- **ID_img**: Identificador de la imagen (correspondiente al contenido del archivo "full.sum" asociado). +- **port**: Puerto Multicast. +- **method**: Modalidad half-duplex o full-duplex ("half" o "full"). +- **ip**: IP Multicast. +- **bitrate**: Velocidad de transmisión (en Mbps). +- **nclients**: Número mínimo de clientes. +- **maxtime**: Tiempo máximo de espera. + +**Ejemplo de Solicitud:** + +```bash +curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"ID_img":"22735b9070e4a8043371b8c6ae52b90d", "port":"9000", "method":"full", "ip":"239.194.17.2", "bitrate":"70M", "nclients":"20", "maxtime":"120"}' http://example.com/ogrepository/v1/udpcast +``` +**Respuestas:** +- **Código 500 Internal Server Error:** Ocurrió un error al enviar la imagen. +- **Código 400 Bad Request:** No se ha encontrado la imagen especificada. +- **Código 200 OK:** La imagen se está enviando mediante UDPcast. + +--- +### Ver Estado de Transmisiones UDPcast + +Se devolverá el pid de los procesos de transferencias UDPcast activas, y sus imágenes asociadas (con nombre e ID), en formato JSON, o un mensaje informativo si no hay procesos activos, o si se produce un error. +Se puede hacer con el script "**getUDPcastInfo.py**", que debe ser llamado por el endpoint. + +**URL:** `/ogrepository/v1/udpcast` +**Método HTTP:** GET + +**Ejemplo de Solicitud:** + +```bash +curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/udpcast +``` +**Respuestas:** +- **Código 500 Internal Server Error:** Ocurrió un error al comprobar las transmisiones UDPcast. +- **Código 400 Bad Request:** No se han encontrado transmisiones UDPcast activas. +- **Código 200 OK:** La información de las transmisiones UDPcast activas se obtuvo exitosamente. + - **Contenido:** Información de las transmisiones UDPcast activas en formato JSON. + ```json + { + "6720": { + "image_id": "22735b9070e4a8043371b8c6ae52b90d", + "image_name": "Ubuntu20.img" + }, + "6721": { + "image_id": "9e7cd32c606ebe5bd39ba212ce7aeb02", + "image_name": "Windows10.img" + } + } + ``` +--- +### Cancelar Transmisión UDPcast + +Se cancelará la transmisión por UDPcast activa de la imagen especificada como parámetro, deteniendo el proceso "udp-sender" asociado a dicha imagen. +Se puede hacer con el script "**stopUDPcast.py**", que debe ser llamado por el endpoint. +**NOTA**: La versión actual de este script requiere que se le pase el nombre de la imagen (con extensión) como parámetro. Este dato se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"). + +**URL:** `/ogrepository/v1/udpcast/images/{ID_img}` +**Método HTTP:** DELETE + +**Ejemplo de Solicitud:** + +```bash +curl -X DELETE -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/udpcast/images/22735b9070e4a8043371b8c6ae52b90d +``` +**Respuestas:** +- **Código 500 Internal Server Error:** Ocurrió un error al cancelar la transmisión UDPcast. +- **Código 400 Bad Request:** No se ha encontrado la imagen especificada. +- **Código 400 Bad Request:** No hay transmisiones UDPcast activas para la imagen especificada. +- **Código 200 OK:** La transmisión UDPcast se ha cancelado exitosamente. + +--- +### Enviar una Imagen mediante UFTP + +Se enviará la imagen especificada por Unicast o Multicast, mediante el protocolo "UFTP". +Se puede hacer con el script "**sendFileUFTP.py**", que requiere que previamente los clientes ogLive destino se pongan en escucha con un daemon "UFTPD" (ejecutando el script "**listenUFTPD.py**"). Esto funciona al revés que "UDPcast", ya que primero se debe ejecutar un comando en los clientes, y luego en el servidor. +**NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión) como primer parámetro, y los datos de transferencia como segundo parámetro (en una cadena, con los datos separados por dos puntos). El primer parámetro se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"), pero los datos de transferencia deben enviarse desde ogCore (y luego son tratados en la API, para construir la cadena correspondiente al parámetro). +**NOTA2**: Este endpoint es asíncrono, ya que puede tardar mucho tiempo, por lo que solo informa de que la imagen se está enviando, y abre un proceso paralelo (pero no avisa a ogCore de su finalización, porque no puede comprobar cuando acaba la tarea de restauración de la imagen). + +**URL:** `/ogrepository/v1/uftp` +**Método HTTP:** POST + +**Cuerpo de la Solicitud (JSON):** +- **ID_img**: Identificador de la imagen (correspondiente al contenido del archivo "full.sum" asociado). +- **port**: Puerto Multicast. +- **ip**: IP Unicast/Multicast. +- **bitrate**: Velocidad de transmisión (con "K" para Kbps, "M" para Mbps o "G" para Gbps). + +**Ejemplo de Solicitud:** + +```bash +curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"ID_img":"22735b9070e4a8043371b8c6ae52b90d", "port":"9000", "ip":"239.194.17.2", "bitrate":"1G"}' http://example.com/ogrepository/v1/uftp +``` +**Respuestas:** +- **Código 500 Internal Server Error:** Ocurrió un error al enviar la imagen. +- **Código 400 Bad Request:** No se ha encontrado la imagen especificada. +- **Código 200 OK:** La imagen se está enviando mediante UFTP. + +--- +### Ver Estado de Transmisiones UFTP + +Se devolverá el pid de los procesos de transferencias UFTP activas, y sus imágenes asociadas (con nombre e ID), en formato JSON, o un mensaje informativo si no hay procesos activos, o si se produce un error. +Se puede hacer con el script "**getUFTPInfo.py**", que debe ser llamado por el endpoint. + +**URL:** `/ogrepository/v1/uftp` +**Método HTTP:** GET + +**Ejemplo de Solicitud:** + +```bash +curl -X GET -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/uftp +``` +**Respuestas:** +- **Código 500 Internal Server Error:** Ocurrió un error al comprobar las transmisiones UFTP. +- **Código 400 Bad Request:** No se han encontrado transmisiones UFTP activas. +- **Código 200 OK:** La información de las transmisiones UFTP activas se obtuvo exitosamente. + - **Contenido:** Información de las transmisiones UFTP activas en formato JSON. + ```json + { + "3427": { + "image_id": "22735b9070e4a8043371b8c6ae52b90d", + "image_name": "Ubuntu20.img" + }, + "4966": { + "image_id": "9e7cd32c606ebe5bd39ba212ce7aeb02", + "image_name": "Windows10.img" + } + } + ``` +--- +### Cancelar Transmisión UFTP + +Se cancelará la transmisión por UFTP activa de la imagen especificada como parámetro, deteniendo el proceso "uftp" asociado a dicha imagen. +Se puede hacer con el script "**stopUFTP.py**", que debe ser llamado por el endpoint. +**NOTA**: La versión actual de este script requiere que se le pase el nombre de la imagen (con extensión) como parámetro. Este dato se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"). + +**URL:** `/ogrepository/v1/uftp/images/{ID_img}` +**Método HTTP:** DELETE + +**Ejemplo de Solicitud:** + +```bash +curl -X DELETE -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/uftp/images/22735b9070e4a8043371b8c6ae52b90d +``` +**Respuestas:** +- **Código 500 Internal Server Error:** Ocurrió un error al cancelar la transmisión UFTP. +- **Código 400 Bad Request:** No se ha encontrado la imagen especificada. +- **Código 400 Bad Request:** No hay transmisiones UFTP activas para la imagen especificada. +- **Código 200 OK:** La transmisión UFTP se ha cancelado exitosamente. + +--- +### Enviar una Imagen mediante P2P + +Se enviará la imagen especificada mediante "P2P", iniciando el tracker y el seeder (que harán tracking y seed de los torrents contenidos en el directorio de imágenes). +Se puede hacer con los scripts "**runTorrentTracker.py**" y "**runTorrentSeeder.py**", que deben ser llamados por el endpoint. +**NOTA**: Estos scripts no reciben parámetros, pero es necesario que el endpoint compruebe si la imagen a enviar existe antes de llamarlos, por lo que se le debe enviar el ID de la imagen (que corresponde al contenido del archivo "full.sum") desde ogCore (en el JSON). +**NOTA2**: Este endpoint es asíncrono, ya que puede tardar mucho tiempo, por lo que solo informa de que la imagen se está enviando, y abre un proceso paralelo (pero no avisa a ogCore de su finalización, porque no puede comprobar cuando acaba la tarea de restauración de la imagen). + +**URL:** `/ogrepository/v1/p2p` +**Método HTTP:** POST + +**Cuerpo de la Solicitud (JSON):** +- **ID_img**: Identificador de la imagen (correspondiente al contenido del archivo "full.sum" asociado). + +**Ejemplo de Solicitud:** + +```bash +curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"ID_img":"22735b9070e4a8043371b8c6ae52b90d"}' http://example.com/ogrepository/v1/p2p +``` +**Respuestas:** +- **Código 500 Internal Server Error:** Ocurrió un error al intentar enviar la imagen. +- **Código 400 Bad Request:** No se ha encontrado la imagen especificada. +- **Código 200 OK:** La imagen se está enviando mediante P2P. + +--- +### Cancelar Transmisiones P2P + +Se cancelarán las transmisiones P2P activas en el ogRepository al que se envíe la orden, deteniendo los procesos "bttrack" y "btlaunchmany.bittornado". +Se puede hacer con el script "**stopP2P.py**", que debe ser llamado por el endpoint. +**NOTA**: No he encontrado la forma de detener la transmisión de una imagen concreta, ya que "bttrack" y "btlaunchmany.bittornado" hacen tracking y seed (respectivamente) de todos los torrents existentes en la raíz del directorio especificado. + +**URL:** `/ogrepository/v1/p2p` +**Método HTTP:** DELETE + +**Ejemplo de Solicitud:** + +```bash +curl -X DELETE -H "Authorization: $API_KEY" http://example.com/ogrepository/v1/p2p +``` +**Respuestas:** +- **Código 500 Internal Server Error:** Ocurrió un error al cancelar las transmisiones P2P. +- **Código 200 OK:** Las transmisiones P2P se han cancelado exitosamente. + +--- +### Transferir una Imagen entre Repositorios + +Se importará una imagen de un repositorio remoto al repositorio local (donde se ejecuta el endpoint). +Se puede hacer con el script "**importImage.py**", que debe ser llamado por el endpoint. +**NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión) como primer parámetro, la IP o hostname del repositorio remoto como segundo parámetro, y el usuario remoto como tercer parámetro. Estos parámetros deben enviarse desde ogCore (en el JSON), porque el repositorio local no puede extraer la información de la imagen de un ID almacenado en un repositorio remoto. +**NOTA2**: Este endpoint es asíncrono, ya que puede tardar mucho tiempo, por lo que solo informa de que la imagen se está transfiriendo, y abre un proceso paralelo, que avisará a ogCore cuando finalice la tarea (llamando a un endpoint de ogCore). +**NOTA3**: Este endpoint comprueba si la importación se ha realizado correctamente, comparando el contenido de los archivos "sum" y "size" con los valores reales (que vuelve a calcular). Si la importación ha sido correcta llama al script "createTorrentSum.py", para crear el archivo ".torrent" (que debe crearse desde el repositorio en el que esté), y actualizar la info del repositorio. Si la importación no ha sido correcta (porque la imagen no ha pasado el check de integridad), borra los archivos importados. + +**URL:** `/ogrepository/v1/repo/images` +**Método HTTP:** POST + +**Cuerpo de la Solicitud (JSON):** +- **image**: Nombre de la imagen (con extensión). +- **repo_ip**: Dirección IP del repositorio remoto (desde el que se importará la imagen). +- **user**: Usuario con el que acceder al repositorio remoto. + +**Ejemplo de Solicitud:** + +```bash +curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"image":"Windows10.img", "repo_ip":"192.168.56.100", "user":"opengnsys"}' http://example.com/ogrepository/v1/repo/images +``` +**Respuestas:** +- **Código 500 Internal Server Error:** Ocurrió un error al transferir la imagen. +- **Código 400 Bad Request:** No se ha encontrado la imagen y/o el equipo remoto especificados. +- **Código 200 OK:** La imagen se está transfiriendo. + +--- +### Hacer Backup de una Imagen + +Se hará backup de una imagen en un equipo remoto, que no tiene por qué tener OpenGnsys instalado, pero que debe poder conectar por SSH (mediante claves) con el repositorio local. +Se puede hacer con el script "**backupImage.py**", que debe ser llamado por el endpoint. +**NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión) como primer parámetro, la IP o hostname del repositorio remoto como segundo parámetro, el usuario remoto como tercer parámetro, y la ruta remota en la que se guardará el backup como cuarto parámetro. El primer parámetro se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"), pero la IP del repositorio remoto, el usuario remoto y la ruta remota deben enviarse en el JSON. +**NOTA2**: Este endpoint es asíncrono, ya que puede tardar mucho tiempo, por lo que solo informa de que la imagen se está exportando, y abre un proceso paralelo, que avisará a ogCore cuando finalice la tarea (llamando a un endpoint de ogCore). +**NOTA3**: Este endpoint comprueba si el backup se ha realizado correctamente, comparando el contenido de los archivos "sum" y "size" con los valores reales (que vuelve a calcular). Si el backup no ha sido correcto (porque la imagen no ha pasado el check de integridad), borra los archivos exportados. + +**URL:** `/ogrepository/v1/repo/images` +**Método HTTP:** PUT + +**Cuerpo de la Solicitud (JSON):** +- **ID_img**: Identificador de la imagen (correspondiente al contenido del archivo "full.sum" asociado). +- **repo_ip**: Dirección IP del repositorio remoto (al que se exportrará la imagen). +- **user**: Usuario con el que acceder al repositorio remoto. +- **remote_path**: Ruta remota en la que copiar la imagen. + +**Ejemplo de Solicitud:** + +```bash +curl -X PUT -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"ID_img":"22735b9070e4a8043371b8c6ae52b90d", "repo_ip":"192.168.56.100", "user":"opengnsys", "remote_path":"/home/opengnsys"}' http://example.com/ogrepository/v1/repo/images +``` +**Respuestas:** +- **Código 500 Internal Server Error:** Ocurrió un error al hacer backup de la imagen. +- **Código 400 Bad Request:** No se ha encontrado la imagen y/o el equipo remoto especificados. +- **Código 200 OK:** Se está haciendo backup de la imagen. + +--- +### Convertir Imagen Virtual a Imagen OpenGnsys + +Se convertirá la imagen virtual especificada (que debe haberse copiado previamente en la ruta "opt/opengnsys/ogrepository/images_virtual") en una imagen "img" como las que se generan desde OpenGnsys (con "partclone" y "lzop"). +Se puede hacer con el script "**convertVMtoIMG.py**", que debe ser llamado por el endpoint. +**NOTA**: El script requiere que se le pase el nombre de la imagen virtual (con extensión) como primer parámetro, y el sistema de archivos de la partición a clonar como segundo parámetro (en formato "blkid"). Estos parámetros deben enviarse desde ogCore (en el JSON). +**NOTA2**: Este endpoint es asíncrono, ya que puede tardar mucho tiempo, por lo que solo informa de que la imagen virtual se está convirtiendo, y abre un proceso paralelo, que avisará a ogCore cuando finalice la tarea (llamando a un endpoint de ogCore). + +**URL:** `/ogrepository/v1/images/virtual` +**Método HTTP:** POST + +**Cuerpo de la Solicitud (JSON):** +- **virtual_image**: Nombre de la imagen virtual (con extensión). +- **filesystem**: Sistema de archivos de la partición a clonar, en formato "blkid". + +**Ejemplo de Solicitud:** + +```bash +curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"virtual_image":"UbuntuVM.vdi", "filesystem":"ext4"}' http://example.com/ogrepository/v1/images/virtual +``` +**Respuestas:** +- **Código 500 Internal Server Error:** Ocurrió un error al convertir la imagen virtual. +- **Código 400 Bad Request:** No se ha encontrado la imagen virtual especificada. +- **Código 200 OK:** La imagen virtual se está convirtiendo. + +--- +### Convertir Imagen OpenGnsys a Imagen Virtual + +Se convertirá la imagen "img" especificada en una imagen virtual con la extensión especificada ("vdi", "vmdk", etc), guardándola en la ruta "opt/opengnsys/ogrepository/images_virtual/export". +Se puede hacer con el script "**convertIMGtoVM.py**", que debe ser llamado por el endpoint. +**NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión) como primer parámetro, y la extensión del disco virtual destino ("vdi", "vmdk", etc) como segundo parámetro. El primer parámetro se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"), pero la extensión del disco virtual debe enviarse en el JSON. +**NOTA2**: Este endpoint es asíncrono, ya que puede tardar mucho tiempo, por lo que solo informa de que la imagen se está convirtiendo a virtual, y abre un proceso paralelo, que avisará a ogCore cuando finalice la tarea (llamando a un endpoint de ogCore). + +**URL:** `/ogrepository/v1/images/virtual` +**Método HTTP:** PUT + +**Cuerpo de la Solicitud (JSON):** +- **ID_img**: Identificador de la imagen (correspondiente al contenido del archivo "full.sum" asociado). +- **vm_extension**: Extensión del disco virtual destino ("vdi", "vmdk", etc). + +**Ejemplo de Solicitud:** + +```bash +curl -X PUT -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"ID_img":"22735b9070e4a8043371b8c6ae52b90d", "vm_extension":"vdi"}' http://example.com/ogrepository/v1/images/virtual +``` +**Respuestas:** +- **Código 500 Internal Server Error:** Ocurrió un error al convertir la imagen a virtual. +- **Código 400 Bad Request:** No se ha encontrado la imagen especificada. +- **Código 200 OK:** La imagen se está convirtiendo a virtual. + +--- +### Renombrar una Imagen + +Se renombrará la imagen especificada como primer parámetro (y todos sus archivos asociados), asignando el nombre especificado como segundo parámetro. +Se puede hacer con el script "**renameImage.py**", que debe ser llamado por el endpoint. +**NOTA**: El script requiere que se le pase el nombre de la imagen (sin extensión) como primer parámetro, y el nuevo nombre a asignar como segundo parámetro. El primer parámetro se obtiene en la API, a partir del ID de la imagen (que corresponde al contenido del archivo "full.sum"), pero el nuevo nombre a asignar debe enviarse en el JSON. + +**URL:** `/ogrepository/v1/images/rename` +**Método HTTP:** POST + +**Cuerpo de la Solicitud (JSON):** +- **ID_img**: Identificador de la imagen (correspondiente al contenido del archivo "full.sum" asociado). +- **image_new_name**: Nuevo nombre a asignar a la imagen. + +**Ejemplo de Solicitud:** + +```bash +curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"ID_img":"22735b9070e4a8043371b8c6ae52b90d", "image_new_name":"Ubuntu_BKP"}' http://example.com/ogrepository/v1/images/rename +``` +**Respuestas:** +- **Código 500 Internal Server Error:** Ocurrió un error al renombrar la imagen. +- **Código 400 Bad Request:** No se ha encontrado la imagen especificada. +- **Código 200 OK:** La imagen se ha renombrado exitosamente. + +--- +### Crear archivos auxiliares + +Se crearán los archivos ".sum", ".full.sum", ".size" y ".torrent", para la imagen especificada como parámetro. +Se puede hacer con el script "**createTorrentSum.py**", que debe ser llamado por el endpoint. +**NOTA**: El script requiere que se le pase el nombre de la imagen (con extensión) como parámetro. Este parámetro no puede obtenerse en la API, a partir del ID de imagen (como en otros casos), porque el ID corresponde al contenido del archivo "full.sum" asociado (que no estará creado hasta que no se ejecute este script). +**NOTA2**: Este endpoint es asíncrono, ya que puede tardar cierto tiempo, por lo que solo informa de que los archivos auxiliares se están creando, y abre un proceso paralelo, que avisará a ogCore cuando finalice la tarea (llamando a un endpoint de ogCore). + +**URL:** `/ogrepository/v1/images/torrentsum` +**Método HTTP:** POST + +**Cuerpo de la Solicitud (JSON):** +- **image**: Nombre de la imagen (con extensión). + +**Ejemplo de Solicitud:** + +```bash +curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"image":"Windows10.img"}' http://example.com/ogrepository/v1/images/torrentsum +``` +**Respuestas:** +- **Código 500 Internal Server Error:** Ocurrió un error al crear los archivos auxiliares. +- **Código 400 Bad Request:** No se ha encontrado la imagen especificada. +- **Código 200 OK:** Los archivos auxiliares se están creando. + +--- +### Enviar paquete Wake On Lan + +Se enviará un paquete Wake On Lan a la dirección MAC especificada, a través de la IP de broadcast especificada. +Se puede hacer con el script "**sendWakeOnLan.py**", que debe ser llamado por el endpoint. +**NOTA**: Este script requiere que se le pase la dirección IP de broadcast como primer parámetro, y la dirección MAC destino como segundo parámetro. Estos datos deben enviarse desde ogCore (en el JSON). + +**URL:** `/ogrepository/v1/wol` +**Método HTTP:** POST + +**Cuerpo de la Solicitud (JSON):** +- **broadcast_ip**: IP de broadcast a la que enviar el paquete (puede ser "255.255.255.255", o la IP de broadcast de una subred). +- **mac**: Dirección MAC del equipo que se desea encender via Wake On Lan. + +**Ejemplo de Solicitud:** + +```bash +curl -X POST -H "Authorization: $API_KEY" -H "Content-Type: application/json" -d '{"broadcast_ip":"255.255.255.255", "mac":"00:19:99:5c:bb:bb"}' http://example.com/ogrepository/v1/wol +``` +**Respuestas:** +- **Código 500 Internal Server Error:** Ocurrió un error al enviar el paquete Wake On Lan. +- **Código 200 OK:** El paquete Wake On Lan se ha enviado exitosamente. + +--- diff --git a/i18n-docu/docs/es/index.md b/i18n-docu/docs/es/index.md new file mode 100644 index 0000000..73be992 --- /dev/null +++ b/i18n-docu/docs/es/index.md @@ -0,0 +1,300 @@ +# Introducción a OpenGnsys v3.0 + +## 1. Introducción + +El proyecto OpenGnsys (léase OpenGénesis) reúne el esfuerzo conjunto de varias Universidades Públicas españolas para construir una aplicación que permita una fácil gestión centralizada de ordenadores y servidores. Con ella se permite la distribución, instalación y despliegue de distintos sistemas operativos. + +![ogintro-universidades.png](../assets/images/screenshots/ogintro-universidades.png) + +OpenGnsys nace debido a la necesidad de disponer de un conjunto de herramientas libres y abiertas que constituyan un sistema completo de gestión y clonación de equipos, versátil e intuitivo, que pueda ser utilizado tanto en la gestión de aulas de informática, como para reinstalar ordenadores y servidores. + +La página web de OpenGnsys (www.opengnsys.es) dispone de todos los manuales del proyecto, el código completo de las distintas versiones, varios foros de discusión y ayuda, documentación de la API de programación, etc. + +### 1.1. Antecedentes, presente y futuro + +OpenGnsys nace en mayo de 2009 tras los Grupos de Trabajo de RedIRIS celebrados en Málaga, como un esfuerzo de integrar varios proyectos en desarrollo: + +- Brutalix, Universidad de Zaragoza +- Entorno Avanzado de Clonación (EAC), Universidad de Málaga +- Interfaz Web Hidra, Universidad de Sevilla + +Actualmente varias Universales colaboran en el proyecto. + +Esta versión, aborda las siguientes mejoras +- Python como lenguaje de programación principal +- Comunicación entre todos los componentes con API REST +- Nueva consola web: symfony-angularjs +- Sincronización de imágenes con GIT +- Servicio de logs y monitoreo + +## 2. Características de OpenGnSys + +La gestión principal de OpenGnsys está basada en una sencilla interfaz web que permite realizar las tareas comunes para gestionar la distribución de software en los distintos clientes. Sin embargo, la estructura de OpenGnsys es lo suficientemente versátil como para adaptarse a las necesidades de las diferentes arquitecturas de redes de ordenadores disponibles en empresas e instituciones. + +Para un administrador con conocimientos avanzados, OpenGnsys permite incluir nuevas funcionalidades a partir de la API de funciones del motor de clonación y establece la forma de integrarlas en la consola de una manera sencilla, así como definir menús de inicio para los distintos clientes. + +La forma de trabajo habitual consiste en partir de un equipo modelo, donde tendremos instalado uno o más sistemas operativos con los programas y los datos necesarios, crear imágenes de sus sistemas de ficheros y luego replicarlas a todos los ordenadores de una organización o a un grupo de ellos. + +![ogintro-equipomodelo.png](../assets/images/screenshots/ogintro-equipomodelo.png) + +Las tareas específicas de configuración y modificación de datos en cada uno de los clientes pueden realizarse directamente desde OpenGnsys una vez terminado el proceso de volcado de la imagen, sin necesidad de arrancar el sistema operativo correspondiente, accediendo a la información almacenada en los discos. Esto supone una significativa ventaja sobre otros productos similares, incluso comerciales. + +La distribución de imágenes y ficheros puede realizarse de forma flexible, por lo que se han implementado distintos protocolos de comunicaciones, como Unicast, Multicast y P2P; e incluso también puede disponerse de dicha información de forma off-line (sin necesidad de comunicación con el servidor) accediendo directamente a la caché de datos local de cada cliente o a un dispositivo externo de almacenamiento. + +La restauración de equipos se realiza a nivel de sistema de archivos, y permite realizarla en particiones de disco menores al tamaño de la original, hasta el mínimo ocupado por los datos. + +La restauración del sistema operativo original no sólo supone hacer una copia exacta del modelo: también pueden realizarse tareas de configuración del equipo destino, tales como cambio de nombre del equipo, detección del inventario de hardware y de software instalado, copia o borrado de ficheros y directorios, modificación del registro de Windows, inclusión en un dominio, etc. + +Por definición, OpenGnsys es un proyecto de Software Libre. Como tal, todo el código está licenciado bajo GPLv3 o superior, mientras que la documentación de los cursos está disponible bajo licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual. + +## 3. Arquitectura + +En esta versión de OpenGnsys, se ha puesto énfasis en la modularidad de la solución, permitiendo desplegar los diferentes componentes en un sólo servidor monolítico, o bien en máquinas separadas. Esto dota de mayor flexibilidad a la solución, que permite cubrir cualquier escenario. + +La arquitectura de OpenGnsys es suficientemente flexible como para adaptarse a las necesidades de los diferentes modelos de redes de ordenadores, tanto de empresas como de instituciones, pudiendo ser utilizado en distintos tipos de escenario: + +1. Gestión centralizada de Unidades TIC de Apoyo a Docencia e Investigación, tanto de laboratorios de docencia presencial como de autoaprendizaje. +2. Mantenimiento del parque de ordenadores personales de los miembros de una Institución. +3. Despliegue y mantenimiento de los servidores de un Centro de Datos en particular. +4. Administración de repositorios de clonación de equipos para los servicios de soporte (helpdesk) o los puntos de información de una Institución. + +### 3.1. Capas de servicios + +OpenGnsys está constituido por un conjunto de módulos separados en distintas capas de servicios: + +- **Capa inferior**: encargada del acceso directo a los dispositivos del cliente y de las funciones del motor de clonación. +- **Capa intermedia**: constituida por un conjunto de herramientas para realizar tareas complejas y personalización del entorno. +- **Capa de administración**: que consta de la interfaz web y la base de datos de gestión. + +### 3.2. Módulos + +El Proyecto OpenGnsys es un sistema modular que integra un conjunto de componentes interrelacionados entre sí, que puede ser adaptado a una diversidad de escenarios de trabajo posibles. Estos componentes están formados por servicios estándar (servidores de archivos, web, base de datos, DHCP, PXE, ...) y por herramientas desarrolladas a medida para el proyecto, que en combinación ofrecen todas las prestaciones del sistema. + +A continuación se describen los distintos componentes del Proyecto OpenGnsys: + +**OpenGnsys Web Administración** + +Este servicio, consiste en tres componentes que centralizan la organización de la solución: + +- **ogCore**: es la interfaz API que permite la interconexión de todos los componentes entre sí, así como la administración de la solución desde la interfaz web. +- **ogGUI**: la interfaz web, permite la administración completa de la solución, sin necesidad de utilizar la consola. +- **ogDB**: la base de datos de OpenGnsys, que centraliza toda la información, y que en esta versión, ha sufrido un rediseño de arquitectura para poder asumir el nuevo paradigma de la solución. + +**OpenGnsys DHCP** + +Se ha actualizado el servicio DHCP, de tal forma que se puede desplegar de forma opcional y modular, contando con una API para su administración. En la versión actual de OpenGnsys, se está empleando KEA DHCP. + +**OpenGnsys Boot** + +El sistema de arranque de OpenGnsys, anteriormente integrado en "OpenGnsys Server", se ha convertido en un módulo con API de administración, que permite su intsalación de forma "opcional" (aunque su funcionalidad es imprescindible para el funcionamiento de OpenGnsys). Con este módulo es posible administrar la asignación de ogLive, así como las plantillas y su asignación. + +**OpenGnsys Repositorio** + +Gestor del repositorio de imágenes para cada una de las unidades administrativas definidas en el módulo OpenGnSys Repository un servicio de ficheros complementarios (actualmente se utiliza SAMBA como servidor de archivos). Puede existir uno o varios módulos, dependiendo del modelo de organización definido. +En esta versión se han integrado las "imágenes sincronizadas" mediante la funcionalidad de "imágenes git", que permite la creació de imágenes por este método, dotando de mayor flexibilidad a la solución. + +**OpenGnsys live Client -ogLive-** + +En esta versión, se ha actualizado el kernel de oglive (versión 6.8), así como sus componentes internos como ogBrowser para pulir ciertas carencias y asumir nuevas funcionalidades. + +Agente ejecutor de órdenes en el cliente, que integra las siguientes funcionalidades: + +- Interfaz gráfica de selección de opciones predefinidas por el administrador. +- Ejecución interactiva de funciones del motor de clonación, modo administrador. +- Ejecución de las tareas enviadas desde el módulo OpenGnsys Administrator. + +Está compuesto por dos elementos, la primera etapa de carga (tfptboot) y la segunda etapa de carga (ogLive por NFS/SAMBA). En temas posteriores veremos más sobre el ogLive. + +**OpenGnsys Clonning Engine** + +Librerías de funciones del motor de clonación, instalación y arranque de sistemas operativos en el cliente. En esta versión, se han migrado las diferentes funciones a python para estandarizar el código y se han pulido ciertas funcionalidades. + +**OpenGnsys Installer** + +Programas de instalación, actualización y desinstalación del sistema, que incluye el generador de configuraciones, el generador de arranque de clientes, el generador de paquetes por componente, etc. +En esta versión 3.0, se cuenta con 4 métodos de instalación +- Instalación "gráfica" mediante Script. +- Instalación mediante paquetes debian +- Instalación y despliegue mediante contenedores docker +- Instalación y despliegue mediante OVAs preconfiguradas, listas para su distribución. + + +#### 3.2.1. Esquema + +![ogarquitectura.png](../assets/images/screenshots/ogarquitectura.png) + +### 3.3. Modelo de organización + +En esta versión 3.0, la organización de la información se ha flexibilizado creando una jerarquía más orgánica. Una Unidad Organizativa puede ser de 4 tipos: + +- Centro +- Grupo de Aulas +- Aula +- Grupo de Clientes + +Desde el punto de vista de una organización (Universidad), OpenGnsys consta de una consola central de gestión, que se divide en un conjunto de Unidades Administrativas independientes, donde cada una de ellas puede tener asociados uno o varios repositorios de datos que dan servicio a uno o varios grupos de aulas de ordenadores. + +Esta distribución permite aplicar una operación a cualquier ámbito desde la Unidad Organizativa (o Unidad de Administración) hasta un determinado cliente en particular. + +Así mismo, se ha creado un sistema de filtrado y vistas, que permite operar con grupos de equipos basándonos en criterios como Sistema Operativo, Estado (encendido/apagdao), etc... + +![ogintro-model_organiza.png](../assets/images/screenshots/ogintro-model_organiza.png) + +## 4. Protocolos de comunicaciones + +El proceso de clonación de un sistema de archivos en un número amplio de ordenadores supone un gran volumen de datos transferidos y, por lo tanto, un tiempo importante en el despliegue de dichos datos. OpenGnsys intenta mitigar estos impactos implantando varios métodos para realizar las transferencias de datos, utilizando 3 protocolos de comunicaciones diferentes. + +Los protocolos que podemos utilizar para las operaciones de clonación son los siguientes: + +- **Unicast**: se transmiten todos los datos independientemente a cada uno de los clientes afectados. El volumen de información enviada es igual al tamaño de la imagen multiplicado por el número de clientes. Este es el método más sencillo y básico, pero el menos eficiente. Se utiliza como protocolo de reenvío ante un fallo en transmisión de cualquiera de los otros métodos. + +- **Multicast**: se transmiten los datos simultáneamente a todos los clientes de la sesión, con lo que la imagen se envía una única vez. Este método es muy eficiente, pero no es compatible con algún tipo de hardware de comunicaciones. Deben indicarse parámetros específicos para la sesión, tales como dirección IP de Multicast, puerto de conexión y velocidad de la transmisión. + +- **Bittorrent (P2P)**: el repositorio va transmitiendo trozos aleatorios de la imagen a cada uno de los clientes que forman parte del enjambre. Cuando un cliente recibe un trozo completo, también lo retransmite al resto de equipos, hasta que todos terminan por completar la transferencia de información. Este protocolo es muy eficiente, aunque consume gran parte del ancho de banda de la red, requiere que los datos se almacenen previamente en la caché local de cada cliente, y es necesario especificar parámetros como el número máximo de clientes, si van a participar o no en la difusión y el tiempo que permanecerán transmitiendo tras recibir todos los datos. Además, los protocolos P2P pueden estar filtrados en algunas redes de comunicaciones. + +El proceso de generación de una imagen del modelo y el envío a su repositorio se realiza siempre mediante el protocolo Unicast, puesto que la comunicación sólo involucra a un emisor (el cliente modelo) y a un receptor (el repositorio de imágenes). + +Se recomienda que el alumno evalúe los distintos protocolos de restauración en su entorno de operaciones, para comprobar cuáles de ellos son compatibles con su red de datos y cuál puede resultar más eficiente en cada caso. + +![ogintro-protocolos.png](../assets/images/screenshots/ogintro-protocolos.png) + +## 5. Conceptos básicos de operación + +El modo de trabajo con el sistema OpenGnsys requiere que los administradores del sistema tengan un conocimiento de algunos conceptos básicos de operación. + +**Incorporar nuevos ordenadores** + +Proceso para dar de alta nuevos equipos en el sistema, incluyendo primero sus datos en la configuración del servicio DHCP y posteriormente copiando esta información en la consola web de administración. Debe tenerse en cuenta que OpenGnsys sólo utiliza datos DHCP estáticos. + +**Secuencia de inicio** + +Orden de preferencia de ejecución tras el encendido de un ordenador. Un cliente OpenGnsys debe configurarse para que el primer dispositivo de arranque sea la interfaz de red. Por motivos de seguridad y control, puede ser conveniente deshabilitar el inicio directo desde los dispositivos locales. + +**Cliente OpenGnSys** + +Equipo que está dado de alta en el sistema y que, al encenderse, OpenGnsys le ofrece sus datos de conexión (mediante DHCP) y su proceso de arranque por defecto (usando PXE). + +**Proceso de arranque** + +Secuencia de ejecución que permite cargar el sistema operativo del ordenador. OpenGnsys ofrece la posibilidad de elegir entre un sistema operativo ya instalado en la máquina o un pequeño sistema GNU/Linux propio utilizado para gestionar las operaciones de clonación del equipo. El proceso de arranque estándar de un cliente OpenGnsys termina ejecutando el OpenGnsys Browser. + +**OpenGnsys Browser** + +Navegador web que muestra al usuario el menú de selección de operaciones para un determinado cliente, el cual cuenta con 2 modos de operación: usuario (que solo dispone del menú y de la barra de estado) y administración (que además incluye una barra de direcciones, una consola de mensaje de salidas y una terminal de ejecución de comandos). + +**Menú** + +Conjunto de opciones que el administrador ofrece al usuario y que son mostradas por el Browser. Puede definirse un menú de inicio normal (que habitualmente incluye operaciones de arranque de sistemas operativos, restauración de sistemas de archivos y apagado del equipo) y un menú opcional de administración (que además puede contar con operaciones predefinidas de gestión del equipo, como la creación de imágenes). + +**Cliente modelo** + +Ordenador que debe tener instalado y bien configurado todo el software que debe ser clonado y que, para evitar problemas de post-configuración, debe tener una arquitectura similar a los equipos receptores de la imagen generada. Sin embargo, no es necesario que este cliente mantenga la misma distribución y tamaño de particiones que el resto, aunque es recomendable. + +**Grupo de ordenadores** + +Conjunto de clientes que normalmente son iguales (comparten un mismo perfil de hardware) o que están ubicados en la misma sala, y que comparten una misma distribución de instalación y unos datos de post-configuración. + +**Imagen de sistema de archivos** + +Fichero que contiene una copia exacta de uno de los sistemas de archivos del cliente modelo. OpenGnsys puede mantener varios ficheros asociados a una imagen, tales como, suma de comprobación y datos de transmisión para el protocolo Bittorrent. + +**Post-configuración** + +Secuencia de órdenes que permite la personalización independiente para cada cliente, que se ejecuta tras el proceso de clonación de un sistema de archivos y que puede constar de operaciones de creación, borrado o edición de ficheros. + +**Caché local** + +Repositorio de datos local del cliente que acelera el proceso de clonación evitando la necesidad de conexión con el repositorio remoto y que almacena los datos de las imágenes propias, sus datos de post-configuración y, opcionalmente, los ficheros del proceso de arranque del cliente. La caché local es un sistema de archivos que normalmente está formateado como Ext4 y que suele estar alojado en la 4ª partición del disco 1. + +## 6. La interfaz web + +OpenGnsys Web Administrator es una consola de gestión que permite manejar los clientes de una unidad organizativa, realizando un conjunto de operaciones sobre los mismos, tanto las predefinidas por el sistema como aquellas personalizadas por los operadores. + +### 6.1. Descripción general + +La consola web se divide en una serie de espacios principales: + +1. Barra superior con los botones de configuración y estado. +2. Zona izquierda con el arbol de módulos con los que operar. +3. Zona derecha con los formularios de operación y de resultados. + +![ogintro-webconsole.png](../assets/images/screenshots/ogintro-webconsole.png) + +Los objetos principales a los que se tiene acceso según las distintas herramientas de la barra de menú son: + +- **Grupos**: distribución jerárquica de la unidad organizativa basada en grupos de aulas, aulas, grupos de ordenadores y ordenadores. +- **Acciones**: lista de comandos básicos y agrupación de procedimientos y tareas definidos por el administrador. Las acciones se ejecutan sobre los objetos del árbol de aulas. +- **Subredes**: este es el módulo de administración del servicio de DHCP (ogDHCP). +- **Boot**: este es el módulo de administración del servicio de arranque de equipos (ogBoot). +- **Calendarios**: esta funcionalidad permite gestionar la disponibilidad de acceso, según calendarios definidos, de los equipos de las aulas para RemotePC +- **Software**: permite administrar los diferentes perfiles de software para los equipos cliente. +- **Repositorios**: este es el módulo que permite administrar el componente ogRepository, que integra las imágenes monolíticas, las imágenes sincronizadas (git), así como su administración mediante la nueva API integración. +- **Menús**: la lista de menús de inicio que pueden ser asignados a los objetos del árbol de las aulas. + +En este tipo de menús se encuentran, entre otros, los siguientes tipos de operaciones principales: + +- **Comandos**: submenú de acciones básicas predefinidas que se ejecutan sobre elementos del árbol de aulas. +- **Asistentes**: submenú de comandos complejos que permiten cierta personalización a la hora de su ejecución. +- **Procedimientos**: secuencias ordenadas de comandos con parámetros personalizados. +- **Tareas**: comandos que se ejecutan sobre un determinado ámbito en particular y que pueden ser programados para ejecutarse en momentos determinados. +- **Colas de acciones**: listas de acciones que están pendientes de ejecución en un ámbito determinado. + +### 6.2. Otros elementos importantes + +#### 6.2.1. NetBoot Avanzado + +Esta funcionalidad, se ha integrado en el módulo "ogBoot" que ahora cuenta con una API para interacción y administración. + +Herramienta que permite seleccionar el tipo de arranque de la totalidad o parte de los clientes de una determinada aula, eligiendo entre los distintos métodos de inicio. + +OpenGnSys define por defecto 5 métodos de inicio: + +**Arranque local sobre el primer disco (por defecto):** +- Arranque local de la 1ª partición del disco. +- Arranque local de la 2ª partición del disco. +- Arranque local de la 3ª partición del disco. + +**Arranque de un sistema operativo –ogLive- para la clonación de equipos:** +- Arranque en red con el Browser en modo usuario (ogLive). +- Arranque en red con el Browser en modo administrador (ogLiveAdmin). + +El netboot soporta el arranque de equipos con BIOS legacy y de tipo UEFI. + +El netboot permite ampliar las opciones de arranque para un segundo o tercer disco. + +#### 6.2.2. Menús + +Un menú es una página web modificada o una lista de ítems que se le presenta al Browser del cliente como página de inicio. Suele contar con una serie de opciones para el arranque de sistemas operativos instalados, la manipulación de datos locales o la ejecución de acciones predefinidas sobre dicho cliente. + +Los menús que pueden definirse en la consola web de administración pueden clasificarse según la forma en que han sido generados: + +**Menú automático** +Lista de elementos generada a partir de los procedimientos definidos. + +**Menú personalizado** +Página web creada en HTML modificado que puede incluir URLs con comandos o scripts que se ejecutan sobre el cliente. + +Asimismo, cada menú puede clasificarse según el tipo de acceso requerido: + +**Menú público** +Página y lista de elementos que pueden ser ejecutados por cualquier usuario. + +**Menú privado** +Página o lista de ítems que solo pueden ser ejecutados tras introducir la clave del usuario administrador. + +#### 6.2.3. Programación de tareas + +La programación de ejecución de tareas permite gestionar fácilmente el lanzamiento de dichas tareas sobre sus ámbitos de ejecución en determinados momentos. + +Una programación puede constar por varios elementos cronológicos distintos, que permiten lanzar la tarea según las necesidades temporales, pudiendo indicar los días e incluso las horas, marcándolas sobre un calendario. + +## 7. Referencias bibliográficas + +[Sitio web del proyecto OpenGnsys](http://www.opengnsys.es) + +## 8. Para citarnos + +Para incluir la cita de esta fuente puede copiar y pegar el siguiente texto: + +- Debes incluir en tu obra la licencia CC siguiente: + Licencia de Creative Commons
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional. diff --git a/i18n-docu/docs/es/index_installation.md b/i18n-docu/docs/es/index_installation.md new file mode 100644 index 0000000..360859f --- /dev/null +++ b/i18n-docu/docs/es/index_installation.md @@ -0,0 +1,496 @@ +# Instalador no gráfico + +## Requerimientos + +- Servidor con Ubuntu 24.04 instalado +- Conexión a Internet. +- Acceso a terminal por SSH +- Acceso como root + +## Proceso de instalación + +Hacemos login en la máquina que vamos a instalar como usuario root. + +![Imagen1.png](../assets/images/screenshots/Imagen1.png) + +Ejecutamos los siguientes comandos: + +```bash + curl -q -k https://ognproject.evlt.uma.es/gitea/api/v1/repos/opengnsys/oginstaller/raw/non_graf_installer/python-installer/opengnsys_installer-v2.sh?ref=main -o opengnsys_installer.sh + +chmod 755 opengnsys_installer.sh + +./opengnsys_installer.sh +``` + +En caso de querer instalar los ultimos paquetes creados desde la rama principal de cada uno de los repositorios, ejecutaremos lo siguiente: + +```bash + curl -q -k https://ognproject.evlt.uma.es/gitea/api/v1/repos/opengnsys/oginstaller/raw/non_graf_installer/python-installer/opengnsys_installer-v2.sh?ref=main -o opengnsys_installer.sh + +chmod 755 opengnsys_installer.sh + +./opengnsys_installer.sh nightly +``` + + +![Imagen2.png](../assets/images/screenshots/Imagen2.png) + +Nos aparece una pantalla con los componentes que queremos instalar y versión que queremos instalar, seleccionaremos los componentes deseados y la versión que se requiera del producto. En este caso seleccionaremos todos los componentes y la versión opengnsys_devel-0.0.10 + +![Imagen3.png](../assets/images/screenshots/Imagen3.png) + +### Selección del tipo de instalacion + +A continucación aparece una pantalla donde elegiremos si queremos instalar todos los componenentes en un único nodo o en varios. + +#### Instalación mononodo + +Si seleccionamos la opción mononodo + +![select_mono](../assets/images/screenshots/Installatiion_type_selection.png) + +A continuación nos aprece una pantalla donde tendremos que introducir cual es la IP en la que todos los componentes se van a comunicar. + +![mononode_ip](../assets/images/screenshots/mononode_ip.png) + +A continuación aparece una pantalla con todos los componentes seleccionados donde simplemente le daremos a ok + +![mononode_comp_select](../assets/images/screenshots/mononode_comp_selection.png) + + +#### Instalación multinodo + +Para hacer una instalación multinodo, esto es una instalación donde cada componente podrá ir por separado + +![select_multi](../assets/images/screenshots/select_multinode.png) + +Nos aparece un cuadro para introducir las ips de las máquinas donde van a ir situados los diferentes componentes. + +![multinode_ip](../assets/images/screenshots/multinode_ip.png) + +Una vez completados estos pasos tanto en mononodo como en multinodo se muestran las diferentes pantallas para que se confirmen los diferentes parametros de entrada, si son correctos con darle a OK es suficiente. El detalle de cada componente se explica a continucación. + +### ogCore + +Para el servicio ogCore los datos que se requieren son: + +- Usuario Administrador: Valor por defecto ogadmin +- Contraseña del usuario: Valor por defecto 12345678 + +![ogcore_install.png](../assets/images/screenshots/ogcore_install.png) + +### ogGui + +Para el servicio de Interfaz gráfica, los datos que se piden son: +- URL de Conexión al servidor de ogCore: Valor por defecto https://\:8443 +- URL de Conexion a Mercure: Valor por defecto https://\:3000/.well-known/mercure + +![oggui_install](../assets/images/screenshots/oggui_install.png) + +### ogDHCP + +Para el servicio de DHCP los parámetros que se piden son: + +- Interfaces de red por las que se servirá el servicio de DHCP. Se muestra una lista con los interfaces de red disponibles para la instalación y se espera que se seleccionen los interfaces por los que se pueden servir IPs. +- IP del servidor de ogBoot (Valor por defecto la IP de la interfaz asociada a la ruta por defecto) +- IP del propio servidor de DHCP (Valor por defecto la IP de la interfaz asociada a la ruta por defecto) + +![ogdhcp_install.png](../assets/images/screenshots/ogdhcp_install.png) + +### ogBoot (PXE) + +Los parámetros que se requieren son: + +- Oglive a instalar en el servidor de boot. La lista se obtiene de los ogLives disponibles en el directorio de descargas de ogLives. +- IP del propis servidor de ogBoot (Valor por defecto la IP de la interfaz asociada a la ruta por defecto) +- Puerto donde va a escuchar el ogBoot (Por defecto 8082) +- URL ogCore (Valor por defecto la IP de la interfaz asociada a la ruta por defecto). +- Usuario para realizar los exports de SAMBA (¡cuidado, este parámetro está embebido en los ogLive, por lo que no es conveniente cambiarlo a no ser que se haya creado un ogLive con la configuración para ello!) +- Password del usuario de Samba (¡cuidado, este parámetro está embebido en los ogLive, por lo que no es conveniente cambiarlo a no ser que se haya creado un ogLive con la configuración para ello!) + + +![ogboot_install](../assets/images/screenshots/ogboot_install.png) + +### ogRepository + +Los parámetros que se requieren son + +- IP del servicio de ogrepository (Valor por defecto la IP de la interfaz asociada a la ruta por defecto) +- IP del servicio de ogCore (Valor por defecto la IP de la interfaz asociada a la ruta por defecto) +- Usuario para realizar los exports de SAMBA (¡cuidado, este parámetro está embebido en los ogLive, por lo que no es conveniente cambiarlo a no ser que se haya creado un ogLive con la configuración para ello!) +- Password del usuario de Samba (¡cuidado, este parámetro está embebido en los ogLive, por lo que no es conveniente cambiarlo a no ser que se haya creado un ogLive con la configuración para ello!) + +![ogrepository_install](../assets/images/screenshots/ogrepository_install.png) + +## Instalación + +Una vez que se rellenen todos los formularios, el proceso de instalación comienza, aparece una pantalla donde se puede seguir el avance del proceso. + +![Imagen30.png](../assets/images/screenshots/Imagen30.png) + +Una vez que el proceso de instalación termina se muestra un resumen del proceso de instalación. + +![Imagen31.png](../assets/images/screenshots/Imagen31.png) + + +Se crea el archivo /opt/opengnsys/release con la versión instalada de Opengnsys + +```sh +(og) root@install:~# cat /opt/opengnsys/release +Versión instalada: opengnsys-1.6.0-beta +``` + +***NOTA: En caso de realizar una instalación desde el repositorio de nightlys el archivo relese no se crea*** + +## Chequeo de los servicios + +Una vez que la instalación se ha completado, podemos comprobar que los servicios se han instalado correctamente y ha funcionado según lo esperado. + + +### Permisos de los usuarios + +Todos los componentes se han debido instalar en /opt/opengnsys/ , donde carpeta servicio es: + +- ogboot +- ogdhcp +- ogrepository +- ogcore +- oggui +- ogclient + +Actualmente existe una carpeta llamada ogclient_log que se usa para montarse en los clientes y donde dejan sus logs. En proximas versiones esta carpeta va a desaparecer. + +Todas los directorios pertenecen al usuario opengnsys grupo www-data excepto los directorios ogclient y ogclient_log que pertenecen al grupo opengnsys. + +![Imagen9a.png](../assets/images/screenshots/Imagen9a.png) + +En el directorio /run/php/ se encuentran los sockets por los que se sirven las apis de ogboot y ogdhcp. Si los servicios están corriendo estos ficheros deben pertenecer al usuario opengnsys + +![Imagen9.png](../assets/images/screenshots/Imagen9.png) + + +En el directorio /etc/sudoers.d/ se encuentra el archivo opengnsys con la siguiente configuración. + +![Imagen10.png](../assets/images/screenshots/Imagen10.png) + + +## Parada y arranque de los servicios + +Todos los servicios funcionan bajo una API (cada servicio con la suya propia) y se getionan como servicios standard de Linux, si bien cada servicio tiene sus particularidades. + +### ogCore + +#### Descripción + +El servicio ogCore está compuesto por tres componentes componentes: + +- API +- BBDD +- Mercure + +Tanto la API como Mercure se sirven detrás de u proxy inverso de nginx. + +El esquema de ogCore se representaría en este grafico. + +![ogcore-schema](../assets/images/screenshots/opengsys-ogcore.png) + +#### Parada y arranque de los servicios + + +```bash +# Arranque +root@qindel-box:~# systemctl start nginx + +# Parada +root@qindel-box:~# systemctl stop nginx + +# Estado +root@qindel-box:~# systemctl status nginx + +# Logs del servicio +root@qindel-box:~# journalctl -f SYSLOG_IDENTIFIER=ogcore +``` + +#### Archivos de configuración + +Localizados en **/opt/opengnsys/ogcore/** +| Fichero | Descripción | +|-----------------------------|-------------------------------------------------------| +| /opt/opengnsys/ogcore/api/env.json | Definición de los endpoints donde ogcore se tiene que conectar | +| /opt/opengnsys/ogcore/api/.env.local.php | Archivo interno de synfony | +| /etc/nginx/sites-enabled/ogcore.conf | Archivo de configuracion de nginx de la API de ogcore | +| /etc/nginx/sites-enabled/mercure.conf | Archivo de configuracion de nginx para el servicio de mercure | + +#### Acceso al servicio + +El API de ogcore se encuentra disponible en la IP de instalación en el puerto 8443. Para poder acceder a la API del servicio basta con ir a la URL + +https://**ip**:8443/ + +![imagen11](../assets/images/screenshots/Imagen11.png) + +Desde donde se pueden probar los distintos endpoints de la API de forma estándar mediante swagger. + + +![imagen12](../assets/images/screenshots/Imagen12.png) + + +### ogGui + +#### Descripción + +Es una aplicacion estatica de angular servida por nginx. + +#### Parada y arranque de los servicion + +```bash +# Arranque +root@qindel-box:~# systemctl start nginx + +# Parada +root@qindel-box:~# systemctl stop nginx + +# Estado +root@qindel-box:~# systemctl status nginx +``` + +Al ser una aplicacion de lado cliente los logs de la misma se ven en la consola de depuracion del navegador. + +Ademas se pueden ver los logs de nginx para ver sus accesos y codigos de error. + +#### Archivos de configuracion + +| Fichero | Descripción | +|------------------------------------- |-------------------------------------------------------| +| /etc/nginx/sites-enabled/oggui.conf | URL del endpoint donde apuntar a ogCore. | +| /opt/opengnsys/oggui/etc/config.json | Endpoint de mercure y ogcore | + + +#### Acceso al servicio + +Para acceder a la interfaz gráfica, basta con acceder a la URL donde se ha desplegado al puerto 4200 + +https://**ip**:4200/ + +![imagen13](../assets/images/screenshots/Imagen13.png) + +Introduciendo el usuario y la password configuradas en la instalación accederemos a la interfaz web. + +![imagen14](../assets/images/screenshots/Imagen14.png) + +### ogBoot + +Servicio que engloba varios componentes que se ejecutan ahora mismo directamente en la máquina donde se ha desplegado. La API se ejecuta debajo de un servidor nginx que corre en el host y que se encarga de gestionar el servicio. + +El servicio consta de un servidor de http/s, un servidor de samba y un servidor de tftpboot. + +El código del servicio ogboot se despliega en /opt/opengnsys/ogboot/. En este directorio se encuentra los siguientes directorios que son relevantes: + +- client: Exportado por samba a las imágenes oglive y que contiene el motor de clonación. +- tftpboot: exportado por samba a las imágenes oglive , que contiene tanto los kernels de arranque por ipxe, como las imágenes de oglive que se van a desplegar. +- El resto de las carpetas son las propias de la API. + +#### Parada y arranque de los servicios + +- nginx + +```bash +# Arranque +systemctl start nginx +systemctl start tftpd-ha +systemctl start samba + +# Parada +systemctl stop nginx +systemctl stop tftpd-ha +systemctl stop samba + +# Reinicio +systemctl restart nginx +systemctl restart tftpd-ha +systemctl restart samba + +# Status +systemctl status nginx +systemctl restart tftpd-ha +systemctl restart samba +``` + +Los logs del servicio de nginx y de la api se encuentran en: + +- /var/log/nginx/ogboot_access.log +- /var/log/nginx/ogboot_error.log + +#### Archivos de configuración + +| Ubicación | Fichero | Descripción | +|------------------------------------|------------------|------------------------------------------------------- | +| /opt/opengnsys/ogboot/ | .env | Archivo de configuración de synfony. | +| /etc/nginx/sites-available/ | ogboot.conf | Archivo de configuración de nginx. | +| /etc/samba | smb-ogboot.conf | Archivo de configuración de samba. | +| /etc/samba | smb-ogclient.conf| Archivo de configuracion de samba para el clone-engine | + + +#### Acceso al servicio + +El API de ogboot se ejecuta en el puerto 8082 del servidor donde se ha desplegado, actualmente el servicio se ejecuta bajo http. Para acceder a la documentación de la API, se puede realizar en la siguiente ruta: + +http://**ip**:8082/ogboot/api/doc + +![imagen15](../assets/images/screenshots/Imagen15.png) + +Si todo está correcto, el status debería devolver algo similar a esto: + +![imagen16](../assets/images/screenshots/Imagen16.png) + +### ogDHCP + + +#### Descripción + +El servicio que se encarga de gestionar el DHCP, basado en kea y está gestionado por una API realizada en Synfony. El API se ejecuta también bajo un servidor de nginx . + +#### Parada y arranque de servicios + +```bash +# Arranque +systemctl start nginx +systemctl start kea-dhcp4-server +systemctl start kea-ctrl-agent + +# Parada +systemctl stop nginx +systemctl stop kea-dhcp4-server +systemctl stop kea-ctrl-agent + +# Restart +systemctl restart nginx +systemctl restart kea-dhcp4-server +systemctl restart kea-ctrl-agent + +# Status +systemctl status nginx +systemctl status kea-dhcp4-server +systemctl status kea-ctrl-agent + +``` + +#### Ficheros de log + +- nginx + +/var/log/nginx/ogdhcp_access.log +/var/log/nginx/ogdhcperror.log + +#### Archivos de configuración +| Ubicación | Fichero | Descripción | +|------------------------------------|------------------|--------------------------------------| +| /opt/opengnsys/ogdhcp/ | .env | Archivo de configuración de synfony. | +| /etc/nginx/sites-available/ | ogdhcp.conf | Archivo de configuración de nginx. | + + + +#### Acceso al servicio + +El API de ogboot se ejecuta en el puerto 8081 del servidor donde se ha desplegado, actualmente el servicio se ejecuta bajo http. Para acceder a la documentación de la API, se puede realizar en la siguiente ruta: + +http://**ip**:8081/ogdhcp/api/doc + + +![imagen17](../assets/images/screenshots/Imagen17.png) + +Si todo está correcto el endpoint de status debería responder algo como esto: + +![imagen18](../assets/images/screenshots/Imagen18.png) + +### ogRepository + +#### Descripción + +Servicio que engloba varios componentes que se ejecutan ahora mismo directamente en la máquina donde se ha desplegado. La API se ejecuta debajo de un servidor de gunicorn y está desarrollada mediante la librería Flask de Python. + +Además sirve por samba los directorios /opt/opengnsys/ogrepository/images mediante el usuario opengnsys. + + +#### Parada y arranque de servicios +```bash +# Arranque +systemctl start ogrepo-api +systemctl start samba + +# Parada +systemctl stop ogrepo-api +systemctl stop samba + +# Status +systemctl status ogrepo-api +systemctl status samba + +# Revisión de logs +journalctl -xeu ogrepo-api +journalctl -xeu samba +``` + +#### Configuración + +| Ubicación | Fichero | Descripción | +|----------------------------|----------------------|--------------------------------------| +| /opt/opengnsys/ogrepository/ | .ogAdmRepo.cfg | Archivo de configuración de ogrepository. | +| /etc/samba/ | smb.conf.ogrepository | Archivo de configuración de Samba. | + + + +#### Acceso al servicio + +El API de ogRepository se ejeecuta en el puerto 8006 del host donde se haya desplegado. Si se quiere acceder al servicio lo podemos hacer mediante la URL + +http://**ip**:8006/apidocs/ + +![imagen19](../assets/images/screenshots/Imagen19.png) + +Si la instalación ha sido correcta, el status debería devolver algo similar a esto + +![imagen20](../assets/images/screenshots/Imagen20.png) + + +## Primeros pasos + +Para empezar a trabajar, podemos configurar ogCore mediante la interfaz gráfica de tal manera que por lo menos podamos comprobar la conexión de ogCore con todos los componentes. + +Para ello: + +En la máquina donde se haya configurado ogCore editamos el archivo /opt/opengnsys/ogCore/etc/env.json + +![imagen21](../assets/images/screenshots/Imagen21.png) + +Ajustamos los valores **OG_BOOT_API_URL**, **OG_DHCP_API_URL** y **OG_CORE_IP** a los valores correctos dependiendo de nuestra instalación, por ejemplo + +![imagen22](../assets/images/screenshots/Imagen22.png) + +Una vez hecho esto, podemos reiniciar ogcore y hacer login en la interfaz gráfica: + +![imagen23](../assets/images/screenshots/Imagen23.png) + + +Si accedemos al esado del servicio DHCP + +![imagen24](../assets/images/screenshots/Imagen24.png) + +Si accedemos al estado del servicio de ogBoot + +![imagen25](../assets/images/screenshots/Imagen25.png) + +Para comprobar la conectividad con ogRepository, tenemos que dar de alta el repositorio. Para ello vamos a repositorios + +![imagen26](../assets/images/screenshots/Imagen26.png) + +Rellenamos los datos correspondientes + +![imagen27](../assets/images/screenshots/Imagen27.png) + +Y si ahora hacemos click en el lapiz podremos ver el repositorio + +![imagen28](../assets/images/screenshots/Imagen28.png) + +![imagen29](../assets/images/screenshots/Imagen29.png) diff --git a/i18n-docu/docs/es/index_release.md b/i18n-docu/docs/es/index_release.md new file mode 100644 index 0000000..889a79c --- /dev/null +++ b/i18n-docu/docs/es/index_release.md @@ -0,0 +1,139 @@ +# OpenGnsys - Changelog v3.0.0 (19 Mayo 2025) + +## Resumen de la versión + +Esta versión principal introduce importantes mejoras en todos los componentes de OpenGnsys, incluyendo un nuevo sistema de arranque, motor de clonación actualizado, integración con Git, interfaz de administración renovada, y un nuevo instalador universal. + +--- + +## Core Components + +### OpenGnsys Boot (ogBoot) v0.7.0 + +#### Sistema de Arranque +- Optimizados los servicios asociados a PXE +- Implementado nuevo ogLive más ligero y rápido con drivers actualizados +- Añadida herramienta de generación de ogLive con soporte para dependencias de Engine, Browser y Agent + +### ogLive v3.3.0 + +#### Interfaz y Browser +- Incorporado nuevo OpenGnsys Browser con modo kiosko +- Añadido soporte completo para HTML5/CSS/JavaScript (ogBrowser) + +#### Motor de Clonación v0.10.0 +- Reestructurado el OpenGnsys Cloning Engine y migrado parcialmente a Python +- Garantizada la utilización exclusiva de componentes open source + +#### OpenGnsys Agent v5.3.0 +- Implementado ogAgent para Windows, Linux, Mac y ogLive desarrollado en Python + +#### Funcionalidades Generales +- Implementada gestión de calendarios para uso remoto de equipos + +--- + +## OpenGnsys Repositoriy v0.8.1 + +#### Mejoras del Repositorio +- Ampliadas las funcionalidades del OpenGnsys Repository +- Integrado con otros módulos del sistema mediante API REST. + +#### Transferencias +- Optimizados los métodos de transferencia: Unicast, Multicast y P2P +- Actualizados los protocolos de transferencia de imágenes + +#### API y Seguridad +- Ampliadas las funcionalidades mediante API REST +- Cifrado mediante TLS para todas las API + +#### Gestión Git +- Implementadas funcionalidades para imágenes sincronizadas con Git +- Integrado Forgejo para gestión avanzada de repositorios mediante interfaz web +- Añadidas funciones para crear y seleccionar repositorios Git + +#### Integración con Git v0.51 +- Mejoradas las funciones en Git.lib para clonación y restauración +- Implementada biblioteca de funciones en Python +- Añadida creación automática de repositorios Git durante la instalación +- Incorporada sincronización entre repositorios Git y particiones +--- + +## Web de Administración (GUI) v0.12.0 + +#### Interfaz +- Rediseñada completamente la interfaz web con diseño responsive +- Mantenidas todas las funcionalidades previas +- Mejorada la experiencia visual y usabilidad + +#### Modularidad +- Implementada gestión modular del sistema +- Incorporado sistema avanzado de roles y permisos +- Añadida búsqueda por etiquetas + +#### Gestión Centralizada (ogCore v0.12.1) +- Unificada la administración de todos los componentes desde la web +- Eliminada la necesidad de línea de comandos para tareas habituales + +#### Acciones +- Implementado nuevo sistema de gestión de acciones por tipo de agente +- Añadida agrupación en acciones compuestas +- Incorporado historial completo de acciones +- Implementadas acciones "requeridas" pendientes +- Añadido asistente para acciones predefinidas y modo avanzado + +#### Clientes +- Desarrollada nueva estructura jerárquica para grupos +- Simplificada la gestión de pertenencia a grupos +- Añadido soporte para grupos heterogéneos +- Implementada herencia de configuración para despliegue +- Incorporada visualización en cuadrícula +- Añadido concepto de "vista" dinámica basada en criterios + +#### Repositorios e Imágenes +- Reorganizados en estructura de grupos +- Implementada distinción entre tipos de imágenes +- Mejorada la visualización de información para clientes +- Añadido soporte para múltiples repositorios simultáneos +- Incorporados permisos granulares y papelera de recuperación +- Implementadas búsquedas avanzadas y migración entre repositorios + +#### Perfiles +- Añadidas búsquedas por criterios avanzados +- Implementada nomenclatura referencial de perfiles +- Incorporada relación entre perfiles para comparación + +#### Monitorización +- Desarrollado sistema de notificaciones +- Añadidas estadísticas configurables +- Implementada ayuda contextual +- Unificada la comunicación vía OpenGnsys Core + +--- + +## OpenGnsys Log Service + +#### Sistema de Logging +- Implementada API REST para integración completa +- Centralizado el almacenamiento y gestión de logs +- Incorporados agentes de recolección +- Añadido procesamiento en base de datos (OpenSearch) + +#### Visualización +- Desarrollada interfaz adaptable +- Implementadas opciones de filtrado avanzadas +- Añadida exportación de resultados + +--- + +## Instalador Universal + +#### Scripts +- Actualizados scripts existentes con visualización de versiones disponibles +- Añadida verificación de compatibilidad + +#### Instaladores +- Desarrollado instalador gráfico unificado con barra de progreso +- Implementadas opciones completas de gestión (instalación, actualización, eliminación) +- Añadida importación/exportación de base de datos +- Creado repositorio de paquetes Debian/Ubuntu diff --git a/i18n-docu/mkdocs.yml b/i18n-docu/mkdocs.yml new file mode 100644 index 0000000..951e4f7 --- /dev/null +++ b/i18n-docu/mkdocs.yml @@ -0,0 +1,185 @@ +site_name: OpenGnsys v3.0 +site_url: https://opengsys.es +repo_url: https://dev.opengnsys.es/gitea +repo_name: OpenGnsys Gitea + +theme: + name: material + language: es + logo: assets/images/og_balls.png + favicon: assets/images/og_balls_favicon.png + features: + - navigation.tabs + - navigation.tabs.sticky + - navigation.sections + - navigation.expand + - navigation.indexes + - navigation.top + - navigation.footer + - navigation.tracking +# - navigation.instant # Comentado como lo tenías + - toc.integrate + - toc.follow + - search.suggest + - search.highlight + - content.code.copy # Añadido: botón para copiar bloques de código + - content.action.edit # Añadido: si usas GitHub, muestra botón para editar + - content.code.annotate + palette: + - scheme: default + primary: indigo + accent: indigo + toggle: + icon: material/toggle-switch + name: Cambiar a modo oscuro + - scheme: slate + primary: indigo + accent: indigo + toggle: + icon: material/toggle-switch-off-outline + name: Cambiar a modo claro + icon: + repo: fontawesome/brands/GitHub + admonition: + note: fontawesome/solid/note-sticky + abstract: fontawesome/solid/book + info: fontawesome/solid/circle-info + tip: fontawesome/solid/bullhorn + success: fontawesome/solid/check + question: fontawesome/solid/circle-question + warning: fontawesome/solid/triangle-exclamation + failure: fontawesome/solid/bomb + danger: fontawesome/solid/skull + bug: fontawesome/solid/robot + example: fontawesome/solid/flask + quote: fontawesome/solid/quote-left + +markdown_extensions: + - admonition + - attr_list + - md_in_html # Añadido: permite markdown dentro de HTML + - pymdownx.details + - pymdownx.superfences: # Mejorado con configuración + custom_fences: # Soporte para diagramas Mermaid + - name: mermaid + class: mermaid + format: !!python/name:pymdownx.superfences.fence_code_format + - pymdownx.highlight: + anchor_linenums: true + linenums: true # Añadido: numeración de líneas por defecto + auto_title: true # Añadido: muestra el lenguaje como título + - pymdownx.inlinehilite + - pymdownx.tabbed: + alternate_style: true + - pymdownx.tasklist: + custom_checkbox: true + - pymdownx.emoji: + emoji_index: !!python/name:material.extensions.emoji.twemoji + emoji_generator: !!python/name:material.extensions.emoji.to_svg + - tables # Añadido: mejora el soporte de tablas + - footnotes # Añadido: permite añadir notas al pie + - def_list # Añadido: listas de definición + - pymdownx.critic # Añadido: marcado de revisiones + - pymdownx.caret # Añadido: superíndice + - pymdownx.keys # Añadido: teclas de teclado + - pymdownx.mark # Añadido: resaltado ==texto== + - pymdownx.tilde # Añadido: subíndice y tachado + - pymdownx.smartsymbols # Añadido: símbolos como (c), ->, !=, etc. + - abbr # Añadido: abreviaturas + - pymdownx.snippets # Añadido: incluir fragmentos desde archivos + +extra: + alternate: + - name: Español + link: / + lang: es + - name: English + link: /en/ + lang: en + +extra_css: + - assets/css/extra.css + +extra_javascript: + - https://unpkg.com/mermaid/dist/mermaid.in.js + +nav: + - Inicio: index.md + - Notas de la Versión: index_release.md + - Instalación: index_installation.md + - Administración: + - Visión General: administration/index.md + - Consola Web: administration/oggui.md + - DHCP: administration/ogdhcp.md + - Sistema de Arranque: administration/ogboot.md + - ogLive: administration/oglive.md + - Motor de Clonación: administration/ogcloneengine.md + - Gestión de Repositorios: administration/ogrepository.md + - ogAgent: administration/ogagent.md + - Logs y Monitorización: administration/oglog.md + - Desarrolladores: + - Visión General: developer/index.md + - Consola Web: developer/ogcore.md + - DHCP: developer/ogdhcp.md + - Sistema de Arranque: developer/ogboot.md + - ogLive: developer/oglive.md + - Motor de Clonación: developer/ogcloneengine.md + - Gestión de Repositorios: developer/ogrepository.md + - ogAgent: developer/ogagent.md + - Logs y Monitorización: developer/oglog.md + +plugins: + - search +# - awesome-pages + - i18n: + reconfigure_material: true + docs_structure: folder + languages: + - locale: es + name: Español + build: true + default: true + - locale: en + name: English + build: true + nav_translations: + Inicio: Home + Notas de la Versión: Release Notes + Instalación: Installation + Administración: Administration + Visión General: Overview + Consola Web: Web Console + DHCP: DHCP + Sistema de Arranque: Boot System + ogLive: ogLive + Motor de Clonación: Cloning Engine + Gestión de Repositorios: Repository Management + ogAgent: ogAgent + Logs y Monitorización: Logs and Monitoring + Desarrolladores: Developers + - minify: # Añadido: minimiza HTML/CSS/JS + minify_html: true + minify_js: true + minify_css: true + - tags: # Añadido: soporte para etiquetas + tags_file: tags.md # Archivo donde se muestran todas las etiquetas + - social # Añadido: imágenes para compartir en redes + - pdf-generate: + author: "OpenGnsys" +# author_logo: img/logo.svg +# copyright: "Copyright © 2022 - MkDocs PDF Generate" +# disclaimer: "Disclaimer: Content can change at anytime and best to refer to website for latest information." +# include_legal_terms: true + cover: true + cover_title: TITLE TEXT + cover_subtitle: SUBTITLE TEXT + custom_template_path: TEMPLATES PATH + toc: false + toc_level: 3 + toc_title: TOC TITLE TEXT + toc_numbering: true +# cover_images: +# default: img/default.svg +# type1: img/type1.png +# type2: https://example.com/cover.svg + enabled_if_env: ENABLE_PDF_EXPORT diff --git a/i18n-docu/requirements.txt b/i18n-docu/requirements.txt new file mode 100644 index 0000000..74b532c --- /dev/null +++ b/i18n-docu/requirements.txt @@ -0,0 +1,64 @@ +babel==2.17.0 +backrefs==5.8 +beautifulsoup4==4.13.4 +bracex==2.5.post1 +Brotli==1.1.0 +cairocffi==1.7.1 +CairoSVG==2.8.2 +certifi==2025.4.26 +cffi==1.17.1 +charset-normalizer==3.4.2 +click==8.2.0 +colorama==0.4.6 +csscompressor==0.9.5 +cssselect2==0.8.0 +defusedxml==0.7.1 +fonttools==4.58.0 +ghp-import==2.1.0 +htmlmin2==0.1.13 +idna==3.10 +Jinja2==3.1.6 +jsmin==3.0.1 +libsass==0.23.0 +Markdown==3.8 +MarkupSafe==3.0.2 +mergedeep==1.3.4 +mkdocs==1.6.1 +mkdocs-awesome-pages-plugin==2.10.1 +mkdocs-get-deps==0.2.0 +mkdocs-material==9.6.14 +mkdocs-material-extensions==1.3.1 +mkdocs-minify-plugin==0.8.0 +mkdocs-pdf-export-plugin==0.5.10 +-e git+https://github.com/iSOLveIT/mkdocs-pdf-generate/@33ffa8b3234ca945d411013fc9e491875b0f9a31#egg=mkdocs_pdf_generate +mkdocs-static-i18n==1.3.0 +mkdocs-with-pdf==0.9.3 +natsort==8.4.0 +packaging==25.0 +paginate==0.5.7 +pathlib==1.0.1 +pathspec==0.12.1 +pillow==10.4.0 +platformdirs==4.3.8 +pycparser==2.22 +pydyf==0.11.0 +Pygments==2.19.1 +pymdown-extensions==10.15 +pypdf==5.5.0 +pyphen==0.17.2 +python-dateutil==2.9.0.post0 +PyYAML==6.0.2 +pyyaml_env_tag==1.1 +requests==2.32.3 +simple-file-checksum==1.3.1 +six==1.17.0 +soupsieve==2.7 +tinycss2==1.4.0 +tinyhtml5==2.0.0 +typing_extensions==4.13.2 +urllib3==2.4.0 +watchdog==6.0.0 +wcmatch==10.0 +weasyprint==65.1 +webencodings==0.5.1 +zopfli==0.2.3.post1 diff --git a/i18n-docu/setup_venv.sh b/i18n-docu/setup_venv.sh new file mode 100755 index 0000000..00ca511 --- /dev/null +++ b/i18n-docu/setup_venv.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +# Crear y configurar entorno virtual +python3 -m venv og_venv +source og_venv/bin/activate + +# Instalar dependencias +pip install -r requirements.txt + +echo "Entorno virtual creado y configurado correctamente." +echo "Para activarlo, ejecuta: source og_venv/bin/activate" +echo "Con el entorno configurado y activado, ejecutar mkdocs serve"