- 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-fontsas a dependency in the RPM builder to ensure correct symbol rendering in the terminal.
- Fedora UEFI Visibility: Added
efi_gopandefi_ugamodules to GRUB configuration to fix splash screen issues in UEFI mode. - Isolinux Compatibility: Standardized the
APPENDsyntax 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/.
- 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.
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.
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
oabinary 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, andrun_commandnow drive every operation, making profiles significantly more readable and maintainable.
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.
| 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. |
Full compatibility achieved with Linux Mint, the Ubuntu family, and its derivatives.
- 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
0440permissions 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.
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.
- Smart Directory Management: The Arch Linux and Manjaro builders now correctly install the
brain.dlogic directory into/etc/oa-tools.d/, ensuring agnostic mapping is available immediately after installation. - Enhanced Distro Detection: Integration with system
ID_LIKEmetadata allows for seamless recognition of derivative distributions without external mapping files.
- Code Purification: Removed the
DistroUniqueIDfield and thederivatives.yamldependency. The system now relies on pure/etc/os-releasedata, making the codebase leaner and easier to maintain. - Refactored NewDistro: Optimized the recognition logic to prioritize system-provided identity over manual overrides.
- Fixed a missing directory copy in the Arch Linux
PKGBUILDthat preventedcoafrom finding its core logic. - Improved error handling in the
distropackage: the system now enters a "Generic" mode instead of exiting when encountering an unmapped distribution.
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.
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.
- Distro Agnosticism:
oanow detects the running distribution and adapts its "tailoring" strategy. - AI-Assisted Tailoring: For non-Debian systems (like Arch Linux),
oanow generates a comprehensiveAIPrompt.txtdirectly in the user's Home directory. - Hardware-Aware Prompts: The AI prompt now includes
lspcidata (VGA/3D controllers) and availablexsessionsto help the AI suggest the correct drivers and display manager configurations. - Smart APT Filtering: On Debian-based systems,
oanow verifies package existence viaapt-cachebefore 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.logfor background auditing and improved user-facing logs.
- Flat YAML Structure: Deprecated the nested
sequence/finalizeblocks in favor of a flat, cleanindex.yamlat 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
wearlogic is now 90% simpler to maintain while remaining 90% as convenient as the original implementation.
- Fixed script execution errors where relative paths were not found by the shell.
- Fixed
sudoenvironment issues:AIPrompt.txtand synced home files now correctly belong to the real user even when run with root privileges.
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! 🐧🚀
- "eggs" Alias Support: Implemented dual binary identity. The package now installs symlinks and shell completion patches (Bash/Zsh/Fish) to allow using the
eggscommand as an alias forcoa. - Standardized Naming Engine: Isolated naming logic into
naming.go. ISOs now follow the format:egg-of_[distro]-[codename]-[hostname]_[arch]_[timestamp].iso.
- CLI Semantic Refactoring: Renamed core commands for clarity:
produceis nowremasterandkrillis nowsysinstall. - Build System Decoupling: Split the monolithic
build.gointo 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
remasterphase. - Arch Linux Initrd Refactor: Optimized ramdisk generation on Arch via deeper
mkinitcpiointegration.
- 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/livecleanup selective for Debian and introducing a forcedsyncbefore unmounting partitions. - Chroot Pathing: Fixed path resolution errors during
oa_shellexecution in chroot environments, ensuring correct injection of hostname and sudoers.
- RPM Dependency Mapping: Corrected Fedora RPM metadata by mapping
sgdiskrequirements to thegdiskpackage. - Symlink Integration: All native packages now include symlinks for binaries, man pages, and shell completions for the
eggsalias.
- Arch Linux Live Boot: Resolved a critical issue causing Kernel Panic on boot. The ramdisk generation now correctly includes the
archisohook. - Initramfs Chroot Enforcement: Fixed a bug where
mkinitcpioandmkinitramfswere reading host system configurations instead of the targetliverootconfigurations. Commands are now explicitly forced to use-cor-dflags pointing to the chroot. - Bootloaders Tarball Extraction: Restored the directory flattening logic (
parts[1:]) in theextractTarGzutility to prevent nested root folders when downloading from GitHub releases. - Engine Logs: Suppressed false-positive
cperror outputs (stderr) in the C engine (lay_livestruct.c) during fallback kernel extraction attempts, resulting in cleaner build logs.
- Universal Bootloaders Path: Unified the
BootloadersPathassignment across all distribution families (Debian, Arch, Fedora, openSUSE). All environments now consistently use the universalBootloaderRoot(/tmp/coa/bootloaders).
- Dependency Fixes (Arch): Added
archiso,dosfstools, andmtoolsas mandatory dependencies in thePKGBUILDto ensure successful live ISO generation and UEFI support. - Dependency Fixes (Debian): Added
dosfstoolsandmtoolsto the Debiancontrolfile. - Legacy Conflict: Added an explicit conflict with the
penguins-eggspackage in both Debian and Arch builds to prevent overlap and ensure a cleanoaecosystem.
- 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.caction to executegrub-install --target=i386-pcdirectly onto the physical disk. - Dynamic Routing (Krill): The Go orchestrator dynamically detects the presence of
/sys/firmware/efiand injects the correct bootloader installation action (hatch_uefiorhatch_bios) into the JSON flight plan. - Dynamic Squashfs Detection: The orchestrator (The Mind) automatically locates the pristine
filesystem.squashfsimage based on standard live distro mount points (e.g.,/run/live/medium/...) and passes the exact path to the C engine.
- Pristine Install Architecture (Unpack): Replaced
rsyncwithunsquashfsinhatch_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
unsquashfsduring the hatch phase to display the native progress bar to the user. - EFI Image Size: Increased the
efi.imgfile 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 16format to satisfy strict validation checks by modern UEFI firmwares (such as OVMF on Proxmox).
- Hybrid ISO Boot: Fixed UEFI boot failures on the generated ISO. Added the
-append_partition 2 0xefflag toxorrisoto 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.cwhere the BIOSBOOT partition (2MB) creation was skipped, which caused an index shift and subsequent formatting failures.
- New Build System: Added
coa buildto 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 docsto generate man pages and shell completions (Bash, Zsh, Fish). - Version Controller: Established as the Single Source of Truth for the entire project versioning.
- Decoupled Logic: Removed hardcoded exclusion arrays in
lay_squash.cin favor of dynamic-efflags. - 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.
- Git Hygiene: Optimized
.gitignoreto keep the repository clean from build artifacts. - Single Source of Truth: Centralized versioning in
build.go.
- Smart Surgical Unmount:
action_cleanupnow dynamically reads/proc/mountsto perform an inside-out unmount (MNT_DETACH). It specifically targets onlyliverootand.overlaybranches, eliminating "zombie mounts" safely without affecting user network shares or external drives. - Absolute Path Support for ISO:
action_isonow detects if theoutput_isoparameter 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.mnthidden folders or symlinks. - Agnostic Bootloader Injection: Introduced the
bootloaders_pathJSON parameter.action_uefiandaction_isolinuxcan now dynamically pull bootloader binaries (like Debian'sgrubx64.efiandisolinux.bin) from an external path provided by the orchestrator, enabling universal booting for non-Debian host systems. - Hybrid UEFI/BIOS ISO Master:
action_isonow automatically detects the presence of UEFI payloads and dynamically generates a 4MB FATefi.img(viadd,mkfs.vfat, and loop mount) to inject intoxorrisousing the-eltorito-alt-bootflag. - UEFI Trampoline Configuration: Added a secondary
grub.cfginside theEFI/BOOT/directory to act as a trampoline. This redirects the firmware to the main/boot/grub/grub.cfgon the ISO9660 filesystem, completely avoiding the dreadedgrub rescue>prompt.
- Single Responsibility Principle Enforced: Completely removed legacy, hardcoded cleanup routines from
action_prepare.c. Nowprepareonly mounts, andcleanuponly unmounts. - Plan JSONs Updated: All JSON templates (
plan-standard.json,plan-clone.json,plan-crypted.json) have been updated to include thebootloaders_pathkey and the correct modern modular actions. - Code Refactoring: Removed the legacy monolithic
action_remasterlogic completely, distributing its responsibilities natively intoaction_livestruct,action_isolinux, andaction_uefi.
- Missing GRUB Modules: Fixed an issue in
action_uefiwhere*.modand*.lstfiles were not copied to thex86_64-efidirectory, causing boot failures.
- Universal Strategy Manifesto: Created
docs/UNIVERSAL_STRATEGY.mdoutlining 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
tmpfsAnti-Inception shield and dynamic/homehandling todocs/ARCHITECTURE.md. - Actions Reference: Completely overhauled
docs/ACTIONS.mdto reflect the new C engine modules (addedcleanup,crypted,scan,suspend). - README and Roadmap: Cleaned up
README.md, moved future goals to a dedicateddocs/ROADMAP.md, and added links to the philosophical architecture.
- Anti-Recursion Shield (Inception Fix): Implemented a global
tmpfsmask inaction_prepare.cto hide the working directory (pathLiveFs) frommksquashfsandnftw. 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_groupshelper inoa-yocto.cto natively append the live user to secondary groups (e.g.,sudo,cdrom) directly into/etc/group, completely bypassing host binaries. - Skeleton Population:
action_usersnow correctly populates the live user's home directory by copying hidden configuration files from/etc/skeland applying recursive ownership.
- Smart
/homeHandling: Refactoredaction_prepare.cto handle the/homedirectory dynamically based on the executionmode. It is now mounted read-only forcloneandcryptedmodes, but created as an empty directory forstandardmode to host the newly injected live user. - Cleanup Fortification: Updated
action_cleanupto safely unmount the new anti-recursion masks and the/homedirectory usingumount2(..., MNT_DETACH).
- Missing Live Home in ISO: Fixed a bug in
action_squash.cwhere thehome/*exclusion was aggressively deleting the freshly created live user's home during themksquashfscompression instandardmode.
- 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_verbdispatch system inmain.cto process theplan.jsonworkflow. - TODO: Parameter Inheritance: Added dual-pointer support (
cJSON *rootandcJSON *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_usersto scan for "human" users (UID >= 1000) using the POSIXgetpwent()API.
- Buffer Hardening: Introduced
PATH_SAFE(8192) andCMD_MAX(32768) constants inoa.hto ensure safety during complexsystem()command construction. - Centralized Definitions: Consolidated all system headers and function prototypes into a single master header (
include/oa.h). - Mount Fortification: Refactored
action_prepareto useMS_PRIVATEbind mounts and improved OverlayFS directory structures.
- Warning Purgatory: Resolved all GCC warnings related to
-Wformat-truncationand-Wunused-parameter, resulting in a "Zen" build. - Logic Correction: Fixed the Megabyte calculation in
action_scan.cby replacing the incorrectPATH_MAXdivisor with a proper1024*1024calculation. - JSON Key Sincronization: Fixed a bug in
action_iso.cwhere 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."