Skip to content

Latest commit

 

History

History
258 lines (188 loc) · 21.8 KB

File metadata and controls

258 lines (188 loc) · 21.8 KB

Changelog - oa-tools

Changelog - v0.7.5 (Evolution Edition)

[0.7.5] - 2026-05-03

Added

  • Universal Boot Branding: Integrated support for custom splash screens (splash.png) and Unicode fonts (unicode.pf2) for both BIOS (Isolinux) and UEFI (GRUB).
  • Enhanced GRUB Layout: Added a dynamic title and visual spacing to the GRUB menu for a professional look.
  • Dynamic OS Detection: Boot menus now automatically display the distribution name (via $PRETTY_NAME).
  • Comprehensive Shell Support: Full completions for Bash, Zsh, and Fish, including automatic 'eggs' alias registration.
  • Fedora UI Fixes: Added google-noto-emoji-fonts as a dependency in the RPM builder to ensure correct symbol rendering in the terminal.

Fixed

  • Fedora UEFI Visibility: Added efi_gop and efi_uga modules to GRUB configuration to fix splash screen issues in UEFI mode.
  • Isolinux Compatibility: Standardized the APPEND syntax for boot parameters, ensuring a successful boot on Fedora and other non-Debian systems even when using Debian bootloaders.
  • RPM Asset Packaging: Updated the Go builder to correctly package and deploy branding assets into /etc/oa-tools.d/brain.d/assets/.

Technical Notes

  • The "oa" dialect is now fully established for egg-based eggs-bananas remastering.
  • All configurations are now centralized in the "brain" directory for better portability.

Release 0.7.4: The Great Refactoring

Fedora is now aligned to the others distros: arch, debian and manjaro.

This release marks a turning point for oa-tools. We have moved beyond chasing the specific quirks of individual distributions to build a universal, fluid, and frictionless infrastructure.

🏗️ Architectural Evolution

The core has been surgically redesigned to separate concerns between the "Brain" and the "Muscle":

  • The Orchestrator (Go): Now acts as the project's intelligence. It parses profiles, manages logic, and generates a perfect "flight plan" (oa-plan.json). Its predictive logic prevents failures before they even begin.
  • The Engine (C): The oa binary is the operational arm. It consumes the JSON plan and interacts directly with the OS with the speed and precision of C, handling mounts, chroots, and identity injection in a secure, isolated environment.
  • Unified Dialect: We have standardized how tasks are defined. The keys action, description, and run_command now drive every operation, making profiles significantly more readable and maintainable.

🔮 Coming Soon: Profile Simplification

While this release solidifies the backend, we are already looking ahead. The next step is a massive simplification of the profile structure. By implementing Go Templates, we will drastically reduce boilerplate code, allowing a single profile to adapt dynamically to different environments and architectures without manual duplication.

🛠️ Technical Highlights

Feature Description
Cross-Distro Validated Full support for Debian (Trixie), Arch, Fedora, and Manjaro.
Robust Chroot Environment Automatic PATH handling and UsrMerge link replication to ensure post-install success.
JSON-Driven Execution Complete decoupling of task definition from operational execution.
Advanced Emergency Cleanup Improved "nest" clearing to ensure the system returns to a clean state after every run.

[0.7.3] - 2026-05-01

Core Improvements & Fixes

Full compatibility achieved with Linux Mint, the Ubuntu family, and its derivatives.

[0.7.2] - 2026-05-01

Core Improvements & Fixes

  • Standardized Sudo Privileges: Implemented a unified "Arch-style" sudo configuration for the live user, ensuring seamless operation of oa tools across Arch, Debian, and Manjaro bases.
  • Enhanced Build Cleanup: Integrated a "tabula rasa" policy during the remastering process to automatically remove legacy or malformed configuration files (e.g., 00_artisan) that previously caused syntax errors in the sudoers directory.
  • Post-Installation Optimization: Added an automated cleanup routine to the FINALIZE stage. This ensures that the installed system is stripped of live-environment "ghost" files, leaving only the necessary installer-generated permissions.
  • Permission Hardening: Enforced strict 0440 permissions for generated sudoers files to comply with security standards and prevent them from being ignored by the system.

This release marks a significant step in the eggs-bananas philosophy, delivering a cleaner, more professional transition from the live environment to the final installation.

[0.7.1] - 2026-04-30

"The Streamlined Artisan" Update

This minor release focuses on code purification and structural robustness, following our core "Eggs & Bananas" philosophy. We've removed redundant configuration files and refined the distro-agnostic engine for better performance and reliability.

Added

  • Smart Directory Management: The Arch Linux and Manjaro builders now correctly install the brain.d logic directory into /etc/oa-tools.d/, ensuring agnostic mapping is available immediately after installation.
  • Enhanced Distro Detection: Integration with system ID_LIKE metadata allows for seamless recognition of derivative distributions without external mapping files.

Changed

  • Code Purification: Removed the DistroUniqueID field and the derivatives.yaml dependency. The system now relies on pure /etc/os-release data, making the codebase leaner and easier to maintain.
  • Refactored NewDistro: Optimized the recognition logic to prioritize system-provided identity over manual overrides.

Fixed

  • Fixed a missing directory copy in the Arch Linux PKGBUILD that prevented coa from finding its core logic.
  • Improved error handling in the distro package: the system now enters a "Generic" mode instead of exiting when encountering an unmapped distribution.

Release Note: oa 0.7.1 - Simplicity is the Ultimate Sophistication

With oa 0.7.1, we continue to strip away the unnecessary. By moving the distribution mapping directly into the core logic and leveraging system metadata, we've eliminated the need for external configuration files.

This release ensures that your "Artisan" environment on Arch Linux is configured perfectly from the first makepkg. It’s faster, cleaner, and more robust.

The artisan's tool just got sharper.

[0.7.0] - 2026-04-29

"The Agnostic Artisan" Release

This release implements the "Eggs & Bananas" philosophy: reducing maintenance costs by 90% while retaining the power of the original wardrobe. The tailor logic is now lighter, faster, and ready for a multi-distro world.

Added

  • Distro Agnosticism: oa now detects the running distribution and adapts its "tailoring" strategy.
  • AI-Assisted Tailoring: For non-Debian systems (like Arch Linux), oa now generates a comprehensive AIPrompt.txt directly in the user's Home directory.
  • Hardware-Aware Prompts: The AI prompt now includes lspci data (VGA/3D controllers) and available xsessions to help the AI suggest the correct drivers and display manager configurations.
  • Smart APT Filtering: On Debian-based systems, oa now verifies package existence via apt-cache before attempting installation, preventing a single missing package from breaking the entire process.
  • Robust Path Resolution: Post-installation scripts (using ../../scripts/ syntax) are now automatically resolved to absolute paths and granted execution permissions.
  • Persistent Logging: Added /var/log/coa-tailor.log for background auditing and improved user-facing logs.

Changed

  • Flat YAML Structure: Deprecated the nested sequence/finalize blocks in favor of a flat, clean index.yaml at the root of each costume/accessory.
  • Simplified Wardrobe: Removed legacy repository management from the wardrobe logic to favor system-native tools or AI guidance.
  • Refactored Tailor Engine: The wear logic is now 90% simpler to maintain while remaining 90% as convenient as the original implementation.

Fixed

  • Fixed script execution errors where relative paths were not found by the shell.
  • Fixed sudo environment issues: AIPrompt.txt and synced home files now correctly belong to the real user even when run with root privileges.

Release Note: oa 0.7.0 - The Agnostic Artisan

We are proud to announce the release of oa 0.7.0.

In the spirit of pragmatism, we have stripped away the complexity that made cross-distro support difficult. By embracing the "Eggs & Bananas" approach, we've created a "Tailor" that isn't just a package installer, but an intelligent assistant.

Whether you are on a "naked" Debian or a fresh Arch Linux installation, oa helps you dress your system with your favorite costumes. If it can't install a package automatically, it provides you with a "Medical Record" of your system (AIPrompt.txt) to hand over to an AI assistant, ensuring you get the perfect configuration for your specific hardware (including tricky ones like QXL or Nvidia).

It's time to sow the seeds of a truly universal Linux customizer. ` Ho sistemato il Changelog includendo tutti i punti chiave discussi. Buona semina per questa versione 0.7.0! 🐧🚀

[0.6.5] - 2026-04-15

🚀 Added

  • "eggs" Alias Support: Implemented dual binary identity. The package now installs symlinks and shell completion patches (Bash/Zsh/Fish) to allow using the eggs command as an alias for coa.
  • Standardized Naming Engine: Isolated naming logic into naming.go. ISOs now follow the format: egg-of_[distro]-[codename]-[hostname]_[arch]_[timestamp].iso.

🛠 Changed

  • CLI Semantic Refactoring: Renamed core commands for clarity: produce is now remaster and krill is now sysinstall.
  • Build System Decoupling: Split the monolithic build.go into distribution-specific handlers (build_debian.go, build_arch.go, build_fedora.go) for granular dependency and metadata management.
  • Universal Boot Extraction: Refactored boot file extraction to natively support Arch, Debian, and Fedora structures during the remaster phase.
  • Arch Linux Initrd Refactor: Optimized ramdisk generation on Arch via deeper mkinitcpio integration.

🐛 Fixed

  • Fedora 43 Boot (BLS/EXT4): Resolved "grub rescue" issues by forcing the deactivation of Boot Loader Specification (GRUB_ENABLE_BLSCFG=false) and applying EXT4 compatibility flags (^metadata_csum_seed, ^orphan_file) during formatting.
  • Installer Hang (Sync & Cleanup): Fixed a deadlock during the final Krill phase on Fedora by making /var/lib/live cleanup selective for Debian and introducing a forced sync before unmounting partitions.
  • Chroot Pathing: Fixed path resolution errors during oa_shell execution in chroot environments, ensuring correct injection of hostname and sudoers.

Packaging

  • RPM Dependency Mapping: Corrected Fedora RPM metadata by mapping sgdisk requirements to the gdisk package.
  • Symlink Integration: All native packages now include symlinks for binaries, man pages, and shell completions for the eggs alias.

[0.6.1] - 2026-04-10

Fixed

  • Arch Linux Live Boot: Resolved a critical issue causing Kernel Panic on boot. The ramdisk generation now correctly includes the archiso hook.
  • Initramfs Chroot Enforcement: Fixed a bug where mkinitcpio and mkinitramfs were reading host system configurations instead of the target liveroot configurations. Commands are now explicitly forced to use -c or -d flags pointing to the chroot.
  • Bootloaders Tarball Extraction: Restored the directory flattening logic (parts[1:]) in the extractTarGz utility to prevent nested root folders when downloading from GitHub releases.
  • Engine Logs: Suppressed false-positive cp error outputs (stderr) in the C engine (lay_livestruct.c) during fallback kernel extraction attempts, resulting in cleaner build logs.

Changed

  • Universal Bootloaders Path: Unified the BootloadersPath assignment across all distribution families (Debian, Arch, Fedora, openSUSE). All environments now consistently use the universal BootloaderRoot (/tmp/coa/bootloaders).

Packaging

  • Dependency Fixes (Arch): Added archiso, dosfstools, and mtools as mandatory dependencies in the PKGBUILD to ensure successful live ISO generation and UEFI support.
  • Dependency Fixes (Debian): Added dosfstools and mtools to the Debian control file.
  • Legacy Conflict: Added an explicit conflict with the penguins-eggs package in both Debian and Arch builds to prevent overlap and ensure a clean oa ecosystem.

[0.6.0] - 2026-04-09

🚀 Added

  • Universal Agnostic Partitioning: The C engine now always initializes target disks with a 3-partition GPT table (BIOSBOOT, EFI, ROOT), ensuring universal compatibility and disk portability regardless of the host firmware.
  • Legacy BIOS Support: Implemented the hatch_bios.c action to execute grub-install --target=i386-pc directly onto the physical disk.
  • Dynamic Routing (Krill): The Go orchestrator dynamically detects the presence of /sys/firmware/efi and injects the correct bootloader installation action (hatch_uefi or hatch_bios) into the JSON flight plan.
  • Dynamic Squashfs Detection: The orchestrator (The Mind) automatically locates the pristine filesystem.squashfs image based on standard live distro mount points (e.g., /run/live/medium/...) and passes the exact path to the C engine.

🛠 Changed

  • Pristine Install Architecture (Unpack): Replaced rsync with unsquashfs in hatch_unpack.c. The installer no longer clones the actively running (and potentially polluted) Live system, but extracts the pure factory image for a clean, pristine installation.
  • Unpack Progress Bar: Restored the standard output of unsquashfs during the hatch phase to display the native progress bar to the user.
  • EFI Image Size: Increased the efi.img file size for hybrid ISO generation from 4MB to 10MB to safely accommodate larger modern bootloaders.
  • FAT16 Compliance: Forced the EFI image for hybrid boot into the -F 16 format to satisfy strict validation checks by modern UEFI firmwares (such as OVMF on Proxmox).

🐛 Fixed

  • Hybrid ISO Boot: Fixed UEFI boot failures on the generated ISO. Added the -append_partition 2 0xef flag to xorriso to physically inject the EFI partition into the ISO's GPT table, making it universally bootable as both a CD-ROM and a USB drive (Raw Disk).
  • Removable Media Fallback: Corrected the UEFI bootloader path inside the ISO to strictly comply with the removable media standard (/EFI/BOOT/bootx64.efi).
  • Partition Syncing: Fixed a bug in hatch_partition.c where the BIOSBOOT partition (2MB) creation was skipped, which caused an index shift and subsequent formatting failures.

[0.5.1] - 2026-04-08

[coa] Orchestrator (The Mind)

  • New Build System: Added coa build to automate C/Go compilation and native packaging (.deb, PKGBUILD).
  • Dynamic Exclusions: Now generates runtime exclusion lists for SquashFS, moving logic away from the C engine.
  • Auto-Docs: Integrated coa docs to generate man pages and shell completions (Bash, Zsh, Fish).
  • Version Controller: Established as the Single Source of Truth for the entire project versioning.

[oa] Engine (The Body)

  • Decoupled Logic: Removed hardcoded exclusion arrays in lay_squash.c in favor of dynamic -ef flags.
  • Version Injection: The engine now receives its version string during compilation via Makefile macros.
  • Streamlined Execution: Focused the C core on pure system actions, delegating policy-making to the orchestrator.

[General]

  • Git Hygiene: Optimized .gitignore to keep the repository clean from build artifacts.
  • Single Source of Truth: Centralized versioning in build.go.

[v0.5.0] - 2026-04-02

🚀 Added

  • Smart Surgical Unmount: action_cleanup now dynamically reads /proc/mounts to perform an inside-out unmount (MNT_DETACH). It specifically targets only liveroot and .overlay branches, eliminating "zombie mounts" safely without affecting user network shares or external drives.
  • Absolute Path Support for ISO: action_iso now detects if the output_iso parameter is an absolute path (starts with /). This allows the engine to write the final ISO directly to external mounts (like a remote NAS or USB drive) bypassing local storage entirely, removing the need for .mnt hidden folders or symlinks.
  • Agnostic Bootloader Injection: Introduced the bootloaders_path JSON parameter. action_uefi and action_isolinux can now dynamically pull bootloader binaries (like Debian's grubx64.efi and isolinux.bin) from an external path provided by the orchestrator, enabling universal booting for non-Debian host systems.
  • Hybrid UEFI/BIOS ISO Master: action_iso now automatically detects the presence of UEFI payloads and dynamically generates a 4MB FAT efi.img (via dd, mkfs.vfat, and loop mount) to inject into xorriso using the -eltorito-alt-boot flag.
  • UEFI Trampoline Configuration: Added a secondary grub.cfg inside the EFI/BOOT/ directory to act as a trampoline. This redirects the firmware to the main /boot/grub/grub.cfg on the ISO9660 filesystem, completely avoiding the dreaded grub rescue> prompt.

🛠 Changed

  • Single Responsibility Principle Enforced: Completely removed legacy, hardcoded cleanup routines from action_prepare.c. Now prepare only mounts, and cleanup only unmounts.
  • Plan JSONs Updated: All JSON templates (plan-standard.json, plan-clone.json, plan-crypted.json) have been updated to include the bootloaders_path key and the correct modern modular actions.
  • Code Refactoring: Removed the legacy monolithic action_remaster logic completely, distributing its responsibilities natively into action_livestruct, action_isolinux, and action_uefi.

🐛 Fixed

  • Missing GRUB Modules: Fixed an issue in action_uefi where *.mod and *.lst files were not copied to the x86_64-efi directory, causing boot failures.

📚 Documented

  • Universal Strategy Manifesto: Created docs/UNIVERSAL_STRATEGY.md outlining the 4 pillars of the penguins-eggs ecosystem (Debian Passepartout, Yocto-style identity, Initramfs abstraction, and the Orchestrator role).
  • Architecture Guide Update: Added details about the tmpfs Anti-Inception shield and dynamic /home handling to docs/ARCHITECTURE.md.
  • Actions Reference: Completely overhauled docs/ACTIONS.md to reflect the new C engine modules (added cleanup, crypted, scan, suspend).
  • README and Roadmap: Cleaned up README.md, moved future goals to a dedicated docs/ROADMAP.md, and added links to the philosophical architecture.

[0.2.0] - 2026-04-01

Added

  • Anti-Recursion Shield (Inception Fix): Implemented a global tmpfs mask in action_prepare.c to hide the working directory (pathLiveFs) from mksquashfs and nftw. This definitively prevents infinite filesystem loops when the workspace is located inside a bind-mounted host directory (like /home).
  • Native Group Injection: Added the yocto_add_user_to_groups helper in oa-yocto.c to natively append the live user to secondary groups (e.g., sudo, cdrom) directly into /etc/group, completely bypassing host binaries.
  • Skeleton Population: action_users now correctly populates the live user's home directory by copying hidden configuration files from /etc/skel and applying recursive ownership.

Changed

  • Smart /home Handling: Refactored action_prepare.c to handle the /home directory dynamically based on the execution mode. It is now mounted read-only for clone and crypted modes, but created as an empty directory for standard mode to host the newly injected live user.
  • Cleanup Fortification: Updated action_cleanup to safely unmount the new anti-recursion masks and the /home directory using umount2(..., MNT_DETACH).

Fixed

  • Missing Live Home in ISO: Fixed a bug in action_squash.c where the home/* exclusion was aggressively deleting the freshly created live user's home during the mksquashfs compression in standard mode.

[0.1.0] - 2026-03-30

Added

  • contest.sh create a context.XXX.txt to restore GEMINI contest;
  • Modular Architecture: Decoupled core logic into src/actions/, making the project significantly more scalable and maintainable.
  • Execution Engine: Implemented the execute_verb dispatch system in main.c to process the plan.json workflow.
  • TODO: Parameter Inheritance: Added dual-pointer support (cJSON *root and cJSON *task) allowing actions to access both Global settings and Local task overrides.
  • Dynamic Initrd Action: Support for command templates using {{out}} and {{ver}} placeholders for flexible initramfs generation.
  • TODO: System User Discovery: Added action_users to scan for "human" users (UID >= 1000) using the POSIX getpwent() API.

Changed

  • Buffer Hardening: Introduced PATH_SAFE (8192) and CMD_MAX (32768) constants in oa.h to ensure safety during complex system() command construction.
  • Centralized Definitions: Consolidated all system headers and function prototypes into a single master header (include/oa.h).
  • Mount Fortification: Refactored action_prepare to use MS_PRIVATE bind mounts and improved OverlayFS directory structures.

Fixed

  • Warning Purgatory: Resolved all GCC warnings related to -Wformat-truncation and -Wunused-parameter, resulting in a "Zen" build.
  • Logic Correction: Fixed the Megabyte calculation in action_scan.c by replacing the incorrect PATH_MAX divisor with a proper 1024*1024 calculation.
  • JSON Key Sincronization: Fixed a bug in action_iso.c where the ISO filename and Volume ID were ignored due to a mismatch between JSON keys and C code.

"Code is poetry, but the changelog is the history."