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>
- 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>
- 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>
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>
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>
- 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>
- 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>
- 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>
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>
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>
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>
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>
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>
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>
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>
- 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>
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>
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>
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>
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>
- 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>
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>
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>
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>
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>
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>
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>
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>
- 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>
- 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>
- 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>
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>