Commit graph

103 commits

Author SHA256 Message Date
3103c9bc4b
docs: document patched package branching convention in project rules
Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-20 15:39:40 -06:00
d123c17e67
docs(journal): document Koji package rebuild and libnl3 patch fix
Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-19 10:37:17 -06:00
ccd889c7a7
feat(common): configure custom tmux.conf and install tmux-powerline
Deploy the custom .tmux.conf for root and as part of /etc/skel on all Koji VM hosts. Ensure tmux-powerline is installed via EPEL package manager and sourced correctly.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>

Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-19 09:15:04 -06:00
ee65f81fba
fix(kojid): enable host resolv inside mock and resolve topurl http schema
Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-19 08:55:39 -06:00
cffdd81243
docs: add KOJI_TARGET_TAG to bootstrap command and update repo path in decisions
Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-19 06:41:23 -06:00
82ce8c7a43
fix(common): increase wait_for SSH port timeout to 300s
Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-19 06:35:23 -06:00
c6359def34
fix(reset): clean up Koji sign spool queue on reset
Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-19 06:31:16 -06:00
8347d84a69
docs: update repository trigger documentation to reflect asynchronous flow
- Update compilación_de_paquetes.rst and docs/technical/bootstrap.rst to document the new background thread tag-monitoring before dist-repo trigger.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-19 06:31:01 -06:00
d838dea4b2
fix(spooler): make dist-repo trigger asynchronous and improve role idempotency
- Make Koji sign spooler tag-checking and dist-repo trigger asynchronous using a background watcher thread to prevent blocking queue processing.
- Register Koji builders with 'noarch' persistently to unblock completed build tagging.
- Check if mxos-repo-sync.path unit file exists before disabling it in Koji Hub role to ensure task idempotency.
- Rate-limit distRepo triggers in trigger script to prevent queue flooding.
- Update repository split-repo and sync scripts to handle split repository layouts correctly.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-19 06:28:03 -06:00
53c8bc8952
fix: generate and wait for build tag repos during bootstrap
Ensure Koji build tag repos (mxos0-build, mxos10-build) are pre-generated
and wait for their completion during Koji bootstrap. This prevents subsequent
package build tasks from hanging in the 'waiting for repo' (No buildroots) state.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-19 05:38:22 -06:00
4776e13f6e
docs: align priorities and manual commands, cap local builder capacity
Align external repository priorities and commands across compilation and bootstrap guides.
Add KOJI_TARGET_TAG to manual commands to avoid running on default mxos10 tag during Gen 1.
Update target examples from cs10 to mxos10 in installation documentation.
Correct reposerver destination prefixes to match STREAM_DIR.
Cap local builder cs10-koji-builder-00.mx-os capacity to 4 to prevent memory exhaustion (OOM).
Update TODO.rst to reflect completed Koji bootstrap and focus on Gen 2.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-19 05:06:26 -06:00
54644b6ac5
docs(bootstrap): update Phase 2 documentation for mxos10-build isolation
Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-19 04:19:51 -06:00
ab3d779c89
feat(bootstrap): isolate mxos10-build tag by removing upstream repositories
Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-19 04:18:16 -06:00
5e07114dc1
feat(vars): increase default builder capacity to 16
Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-19 04:15:08 -06:00
93904970f6
feat(infra): unify local and gcp configs, add split repo, wireguard playbooks, and update docs
- Support both GCP and local deployments seamlessly via env parameter
- Configure WireGuard VPN playbooks and templates for builder nodes
- Implement repository classification map split syncing on repository server
- Add CentOS Stream 10 support for Koji/Mock buildroot initialization
- Update all documentation files in Mexican Spanish

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-19 04:13:21 -06:00
eab12230f0
feat(gcp): scale to 4 spot 16 vcpu builders and fix host resolution
- Scale builder count to 4 Spot e2-standard-16 instances
- Fix hub host resolution in /etc/hosts on builder nodes to use VPN IP
- Correct variable precedence for koji_build_tag in bootstrap playbooks

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-19 04:09:42 -06:00
1c0193f641
docs(pjp): archive historical debugging session notes from memory.rst
- Log Koji Web TLS 1.3 Post-Handshake Authentication (PHA) details
- Log Mock buildroot setup limitations on CentOS Stream 10
- Log kojid system user missing dependency on builder nodes
- Log Rocky Linux 9 external repo cleanup and mode correction

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-18 23:00:29 -06:00
ec69441d1c
feat(opentofu): add UEFI base image generation with explicit kickstart template
- Implement build-base-image.bash to automate UEFI base image creation
- Use explicit base-image.ks.tftpl template for virt-install kickstart
- Document base image requirements, package list, and partition layout in README
- Generalize path resolution and support terraform.tfvars overrides
- Fix clean-certs target in GNUmakefile to create directory if missing
- Update journals

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-18 22:59:21 -06:00
e56d8094a7
docs(journal): document libXrender failed build deletion
Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-18 19:09:17 -06:00
7b4bbbef8a
docs(journal): update journal for 2026-06-18
Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-18 17:22:01 -06:00
61e83742fb
fix(kojid): decouple host capacity from maxjobs limit to prevent deadlock
By setting maxjobs to 16, kojid can process background / waitrepo / newRepo
tasks concurrently, while setting capacity to 4 ensures at most 4
compilations are scheduled in parallel on the builder, matching the
user's CPU limits.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-18 16:45:37 -06:00
969860aefd
fix(koji_bootstrap): support full SCM URLs in task matching regex
Koji active tasks display the full SCM URL including git+https, whereas
completed tasks display a normalized path. This matches both styles to
prevent duplicate builds of pending tasks.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-18 16:42:56 -06:00
7b498b7d3c
fix(koji-sign-spooler): include build_dir when resolving signed RPM paths
The signature spooler daemon failed to run the ownership fix (chown to apache:apache)
on signed RPM files because it looked for them in the top-level koji_dir
instead of the package build subdirectory.

By including `build_dir` in `signed_rpm_path`, we ensure the file check succeeds
and the chown command is correctly executed, preventing permission errors
during repo regeneration tasks.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-18 15:18:28 -06:00
de813e4883
fix(koji-bootstrap): map package names containing + to plus in SCM URL
Gitea/Forgejo normalizes '+' in repository names to 'plus' (e.g.,
'perl-Text-Tabs+Wrap' becomes 'perl-Text-TabsplusWrap').

Update `bootstrap-baseos.py` to replace '+' with 'plus' when triggering
builds so Koji can pull the source files from the correct SCM URL.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-18 11:59:26 -06:00
21c0d674f1
fix(koji-web): restrict nested table CSS overrides to non-data-list tables
The custom `table.nested th` CSS rule was applying `display: inline-block !important`
to all nested tables, which broke standard nested data tables (like Active
Buildroots on hostinfo page) that need proper column alignment.

By using the `:not(.data-list)` pseudo-class, we exclude tables with
the `data-list` class, allowing them to render as proper tables.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-18 03:37:58 -06:00
b23953d061
docs(journal): update journal log for translations
Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>

Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-18 03:18:11 -06:00
8849b610eb
docs: translate english technical guides to mexican spanish
Translate bootstrap.rst, siguldry_pkcs11.rst, and svg_conversion.rst to Mexican Spanish. Create AGENTS.md rule file specifying Mexican Spanish for documentation and English for code/comments.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>

Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-18 03:18:03 -06:00
8251af3542
docs(bootstrap): document live scaling of builder disk and jobs capacity
Add 'Live Scaling Builder Resources (Hot-Resizing)' subsection covering virsh blockresize, growpart, resize2fs, and koji edit-host --capacity.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>

Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-18 03:16:58 -06:00
751a4b6a94
docs(journal): document builder disk scaling and job capacity capping
Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>

Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-18 03:13:40 -06:00
7bf97894e9
feat(resources): scale builder disk to 500G and reduce max jobs to 4
Upgrade cs10-koji-03 builder disk volume to 500 GiB and cap kojid capacity to 4 jobs to reduce host CPU oversubscription. Also commit the repository split overrides parsing logic.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>

Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-18 03:12:49 -06:00
ffa6d42717
docs: Log user-provided podman dnf query tip in journal
Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-18 02:42:41 -06:00
50d184fd5d
feat: Implement automatic repository classification (BaseOS/AppStream/CRB)
- Add mxos-generate-repo-map.py to build repository package mappings from CentOS Stream 10 primary metadata.
- Add mxos-split-repo.py to dynamically categorize and hardlink compiled packages into BaseOS, AppStream, and CRB repos on Koji Hub, followed by running createrepo_c.
- Update mxos-repo-sync.bash.j2 to trigger mxos-split-repo.py and sync BaseOS, AppStream, and CRB repositories independently.
- Update mxos.repo.j2 to define client DNF configuration for all three repositories.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-18 02:42:26 -06:00
84fa84e339
docs: Add Fase 3 (Branding) and Fase 4 (ISO) to MxOS roadmap
Documented the strategic roadmap after Generation 2 is completed, including the
identity packages (mxos-release, mxos-repos, mxos-gpg-keys) and minimal ISO creation.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-18 02:32:59 -06:00
7011a17993
koji_bootstrap: Set external repository merge modes to bare
This ensures that all external packages are fully merged into the buildroot
tag repository, making them available during builds (e.g. clang, libeconf-devel).

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-18 02:16:49 -06:00
9c5578a1de
docs: Update external repository priorities and URLs in bootstrap.rst
Aligned documentation with the actual settings from the Ansible playbooks,
detailing centos-stream-10-devel configuration and exact priorities.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-18 02:11:22 -06:00
6a8c1a83a4
koji_bootstrap: Add centos-stream-10-devel repository to bootstrap configuration
This repository provides necessary buildroot-only packages like libeconf-devel
and libkcapi-fipscheck to satisfy build requirements (e.g. pam, libxcrypt).

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-18 01:09:30 -06:00
b2ace1e20e
feat(repo): generate and authorize Koji Hub root SSH keys for reposync
Automate SSH key pair generation on Koji Hub and authorization on the
repository server. This fixes the SSH permission denied issues when
transferring built/signed packages to http://cs10-repo.mx-os/. Also
resolves Postgres aborted transaction and fs.protected_hardlinks issues
in Koji signing spooler.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-18 00:38:57 -06:00
66400151c7
feat: resolve koji noarch buildroot 404, optimize known_hosts and rpm signing
- Restrict tag arches to x86_64 only to prevent mock from referencing missing noarch directories and causing 404s.
- Clean and scan host keys natively in Ansible roles/common/tasks/main.yaml instead of using host_key_checking=False.
- Fix koji-sign-spooler concurrency/race conditions by copying RPMs to tmp before signing, importing signature, and calling write_signed_rpm.
- Adapt mxos-get-sources.bash to parse flat checksum formats used in CentOS Stream 10 lookaside.
- Boost PostgreSQL max connections to 1000 and kojid capacity to 100 jobs.
- Refactor siguldry server role to dynamically initialize PKCS11 bindings with exported certificate.
- Clarify in documentation the difference between Koji Bootstrapping and MxOS Bootstrapping.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-18 00:05:57 -06:00
cf531c6de6
feat(infra): fix backing store format and align bootstrap paths
Fix UEFI boot issues by explicitly specifying the qcow2 format for the system disk backing stores. Standardize the script locations by moving Koji import and orchestration scripts from /root/ to /home/kojiadmin/bin/ and updating get_baseos_src_packages path resolution. Resolve staging deploy race condition by creating the kojiadmin user on the Hub during nfs_client setup. Update all documentation references accordingly.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-17 04:13:55 -06:00
a37e0560ce
feat(infra): use backing_store and target blocks in OpenTofu
Configure libvirt_volume resources to use the shared base_image as backing_store and specify capacity explicitly. This allows proper thin provisioning and volume resizing (expanding the virtual size beyond the 5GB base template). Correct target formatting schema block syntax.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-17 03:46:04 -06:00
d7b36c0e85
feat(infra): scale builder VM resources and disk capacities in OpenTofu
Add locals configuration in opentofu/cs10-base.tf to scale the Koji Builder VM (index 3) to 8 cores and 16 GiB of RAM. Increase disk sizes dynamically across the cluster nodes (Hub to 50 GiB, NFS to 150 GiB, and Builder to 120 GiB) to guarantee sufficient storage capacity for the full BaseOS bootstrap process.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-17 03:37:16 -06:00
69ebf450ac
refactor(theme): extract Koji CSS overrides to dedicated file
Extract the 400+ lines of Koji Web CSS overrides from the main.yaml tasks file into roles/koji_hub/files/koji.css and update the Deploy MxOS koji.css task to copy it from this source file. This improves task readability and modularity.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-17 03:34:45 -06:00
62d8a294af
docs(fork): document fork strategy and bootstrap phase 1 and 2
Add docs/estrategia_de_fork_y_bootstrapping.rst to document the strategic meta of the project, detailing the step-by-step procedures for Phase 1 (bootstrap using CentOS Stream seeds) and Phase 2 (autonomous self-hosting rebuild), as well as explaining the technical value of this architecture in Mexican Spanish.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-17 03:33:22 -06:00
f6e10b541a
chore(theme): bundle branding SVG assets locally in playbook
Copy the logo.svg and mxos-reducido.svg assets from the local host into roles/koji_hub/files/ and update main.yaml to convert them using the role_path relative variables rather than hardcoded host paths. This ensures the theme is 100% portable and won't break during deployment on a clean developer machine.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-17 03:30:24 -06:00
6de3ebd1cf
feat(bootstrap): use public CentOS mirrors and add Spanish Koji docs
Configure centos_stream_10_baseos_url and centos_stream_10_appstream_url to point directly to public CentOS Stream 10 repositories, enabling 100% automated and reproducible bootstrap from scratch. Added a new Mexican Spanish documentation file explaining Koji concepts and nomenclature (targets, tags, inheritance) to align with standard CentOS Stream conventions. Staged the necessary orchestrator and comps bootstrap scripts in the bootstrap role.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-17 03:25:29 -06:00
35aad22563
journal: log spooler race fix and comps-based bootstrap calculation progress
Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-17 03:01:43 -06:00
c4d95062a5
feat(bootstrap): adopt comps-based package list and fix spooler race condition
- Implement comps-based bootstrap dependency closure script (`bootstrap_comps.py`) to narrow the bootstrap package set from all 480 BaseOS packages to exactly 335 source packages required by the `core` and `base` comps groups.
- Fix Koji signing spooler race condition: add a retry loop (up to 12 attempts of 5s) when checking if a newly completed build is tagged in `mxos0` before triggering repository synchronization.
- Update `docs/technical/bootstrap.rst` to document the new comps-based package list and topological ordering details.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-17 03:01:25 -06:00
a252f42272
docs: update all documentation to reflect the new .bash scripts and automatic trigger workflow
- Renamed all bash scripts and templates from `.sh` to `.bash` extension.
- Updated Koji cleanup service to reference `/usr/local/bin/koji_cleanup.bash`.
- Updated package synchronization docs in `docs/compilación_de_paquetes.rst`, `docs/technical/bootstrap.rst`, and the decision record `2026-06-16-05-bootstrap_orden_y_servidor_caddy.rst` to document the new `koji-sign-spooler` -> `mxos-trigger-dist-repo.bash` -> `mxos-repo-sync.bash` automatic trigger flow instead of the old manual Python script.
- Cleaned up old `.sh` files from the Koji Hub via Ansible task.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-17 02:28:10 -06:00
38a0669db8
feat: implement automatic, atomic, and push-based repository synchronization
- Switched from systemd path monitoring to a custom wrapper script `mxos-trigger-dist-repo.sh` spawned by the Koji signing spooler.
- Wrapper script runs Koji `dist-repo` synchronously and triggers the `mxos-repo-sync.sh` script to perform an atomic rsync of packages to the Caddy server.
- Excluded reposerver from distro-sync to work around VM disk space constraints.
- Configured Koji tag `mxos0` to cancel older pending/running `distRepo` tasks when a new one is triggered.
- Verified successful repository generation, synchronization, and DNF resolution.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-16 23:57:02 -06:00
70060e9791
doc(bootstrap): expand bootstrap-from-scratch guide
Document Phase 1-8 of the bootstrapping process from scratch.
Explain priority configuration, package importing, cycle sorting, lookaside fallback,
and handling circular/missing blocker dependencies during the initial pass.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
2026-06-16 22:00:03 -06:00