Skip to content

Releases: flatimage/flatimage

v2.0.1

13 Jan 22:19

Choose a tag to compare

Changelog

v2.0.1

Changed

  • Documentation - Updated logo URL in README.md.

Fixed

  • Boot Startup - Check for fusermount3 on startup to ensure FUSE compatibility.
  • Default Recipe URL - Fixed default recipe URL configuration.
  • Layer Commit Cleanup - Made commit cleanup more permissive to handle file erasure failures gracefully.

v2.0.0

31 Dec 09:54

Choose a tag to compare

Changelog

v2.0.0

Added

Commands

  • fim-recipe - Fetch and install package recipes with recursive dependency resolution.
    • Support for embedding desktop integration in recipes.
  • fim-remote - Configure remote URL for recipe management.
  • fim-desktop
    • dump - Export desktop entry, MIME types, and icon data from image.
    • clean - Option to clean desktop integration files from the system.
    • Support for URLs in desktop setup JSON files.
  • fim-boot
    • set, show, and clear sub-commands for boot configuration.
  • fim-layer - Layer management with multiple sub-commands:
    • commit - Commit changes with three modes:
      • binary - Commit changes directly to the FlatImage binary.
      • layer - Save changes as a numbered layer file in the layers directory.
      • file - Export changes to a specific file path.
    • list - List all embedded and external layers in format index:offset:size:path.
  • fim-overlay - Select and manage filesystem overlay type (BWRAP, OverlayFS, UnionFS) for performance tuning.
  • fim-version
    • short - Dumps a short version string.
    • full - Dumps a json with version and build data.
    • deps - Dumps a json with dependency information.
  • fim-instance - Manage multiple instances with instance listing and targeted command execution.
  • fim-perms
    • add - Add all permission types at once with the all argument.
    • clear - Option to clear all permission entries.
    • Permissions
      • Optical - Include optical drive access (/dev/sr* and /dev/sg*).
      • Dev - Add 'dev' permission to grant access to all devices in /dev.
      • Shm - Include /dev/shm permission for shared memory access.
  • fim-unshare - Configure Linux namespace isolation with bubblewrap's unshare options.
    • Supports 6 namespace types: user, ipc, pid, net, uts, cgroup.
  • fim-env
    • clear - Option to clear all environment variables.

Build & Integration

  • MkDocs CMake Integration - Seamlessly integrate MkDocs documentation generation with CMake build system.
  • Doxygen Developer Documentation - Create comprehensive Doxygen-based developer documentation for codebase architecture and API.
  • GitHub Actions Integration - Reusable composite actions for building, testing (DocTest & UnitTest), and platform CLI setup.
  • Gitea CI Support - Full CI/CD support for self-hosted Gitea instances with act_runner compatibility.

Testing

  • Doctest - Integration with C++ testing suite.
  • Unittest - CLI tests with python's unittest.

Misc

  • Portal Host-to-Container CLI - FIFO-based inter-process communication mechanism enabling commands to execute on host from within container.
  • Multi-Instance Management - Multiple FlatImage instances with independent filesystem state.
  • Multiple Data Directories - Run the same application binary with distinct data directories via FIM_DIR_DATA.
  • Custom FlatImage Binary Path Query - FIM_DIR_SELF environment variable to query the absolute FlatImage binary path.
  • BLUEPRINT Distribution - Added BLUEPRINT to the distribution enumeration for empty container templates.
  • Thread-Safe Timeout Implementations - Linux blocking calls with configurable timeouts for improved reliability.
  • Fork-Safe Logger - Thread-local storage logger with comprehensive documentation and PID tracking.
  • Daemon Mode for Subprocesses - Optional subprocess daemon mode with grandchild PID return via shared memory.
  • Signal Detection in Subprocess - Detect and report WIFSIGNALED and WIFSTOPPED conditions after waitpid.

Changed

  • Configuration - Made config.hpp as a single source of truth for FlatImage.
    • All configuration centralized in config.hpp for predictability and maintainability.
    • Moved redundant runtime configurations to compile-time.
    • Moved initialization of paths to config.hpp.
    • Filesystem configuration defined in config.hpp.
    • Work directory moved to host data directory and instance directory.
  • Environment Variable Storage - Saved environment variable configurations persistently in the image.
  • Bindings Configuration Storage - Saved mount binding configurations persistently in the image.
  • Boot Command Configuration Storage - Saved boot command in the FlatImage binary.
  • Case Folding Configuration Storage - Saved case folding configuration in the FlatImage binary.
  • Binary Dependencies - Updated and optimized all embedded tool dependencies.
  • System Device Access - Improved system device access.
  • Desktop Entry - Improved desktop integration code.
    • Automatic desktop integration performed when bwrap is invoked.
  • XDG Data Home - Use XDG_DATA_HOME in desktop integration when defined for better standard compliance.
  • Parser System - Complete rework of parser with std::expected for better error handling.
    • Split parser into executor and parser components.
    • Enhanced parsing interface for better modularity.
  • Reserved Space System - Reworked reserved binary data library for improved reliability.
    • Compile-time reserved space validation.
    • Log file path in case of read/write failures.
  • Subprocess Library - Complete rework with streams and threads for improved I/O handling.
    • Default subprocess redirection to /dev/null.
    • Stream logic moved to linux library.
    • Make Stream::Pipe and daemon mode mutually exclusive.
  • Logger System - Centralized logging configuration with fork-safe design.
    • Option to change log format based on PID.
    • Avoid resetting log level in log.hpp.
    • Configure output streams in log.hpp.
    • Compile-time fmt for logging.
    • Use std::println for native C++ output.
  • Error Handling - Compile-time fmt for expected values and improved error propagation.
    • Propagate errors on Pop macro.
    • Log location for exceptions.
    • Configurable return type for get_expected.
  • Portal System - Refactored portal architecture with improved daemon management.
    • Portal daemon started right before bwrap.
    • Detached portal daemon from shell.
    • Use (de-)serialization of portal objects.
  • Filesystem Controller - Reworked filesystems controller for better layer management.
    • Moved utility functions to utils.hpp.
    • Replaced FIM_[DIRS,FILES]_LAYER with unified FIM_LAYERS.
    • Auto-switch to unionfs when bwrap overlays are used with casefold.
    • Cleanup work directory in filesystem controller.
  • Bwrap Integration - Improved bubblewrap configuration and overlay handling.
    • Use regular constructor to reduce complexity on bwrap 'work' removal.
    • Removed 'work' bwrap overlay directory.
    • Make bwrap's return code transparent, or exit 125 on error.
  • User Identification - Reworked user identify resolution for better containerized environment support.
    • Move bashrc to config and make UID and GID configurable.
    • Auto creation of passwd file.
  • Build System - Enhanced cmake definitions setup and improved deployment scripts.

Fixed

  • User Identification Setup - Fixed user identification mechanism in containerized environment.
  • Duplicated Clamp Logic - Removed duplicate clamp implementations in config.hpp and layers.hpp.
  • Desktop Entry Setup Warning - Changed desktop entry setup errors to non-blocking warnings.
  • Help Message Formatting - Standardized help messages to use 2 spaces instead of 3.
  • Desktop Clean JSON Zeroing - Ensured JSON data is properly zeroed during desktop integration cleanup.
  • Subprocess Variable Error - Fixed undefined variable error in subprocess.hpp.
  • Desktop Entry Name Sanitization - Sanitized application names in desktop entry to prevent invalid characters.
  • CIOPFS Examples - Fixed and included comprehensive example of CIOPFS usage in documentation.
  • Unused Read-Only Flag - Removed unused is_readonly flag from configuration.
  • Missing Icon Path Handling - Handled missing icon paths gracefully in desktop entry.
  • DwarFS File Inclusion - Only include regular files that are readable in DwarFS layers.
  • PulseAudio-Bluetooth Root Ownership - Handled PulseAudio-Bluetooth files that are only removable by root.
  • Reversed Filesystem Layers - Fixed double-reversed filesystem layers redundancy.
  • Process Termination in Forks - Replaced std::abort() with _exit() in child processes for proper cleanup.

Continuous Build

31 Dec 09:45

Choose a tag to compare

Continuous Build Pre-release
Pre-release

Automated continuous build from the latest commit on master

v1.0.8

06 Jan 04:21

Choose a tag to compare

Full Changelog: v1.0.7...v1.0.8

  • Fixed unused arguments from argv in CmdNone
  • Try to expand program if defined as a variable

v1.0.7

09 Dec 22:58

Choose a tag to compare

Full Changelog: v1.0.6...v1.0.7

  • Use workaround for busy upper directory in bwrap overlays
  • Use patched version of dwarfs to use current uid/gid
  • Integrate with fuse-unionfs
  • Use fuse-unionfs as a fallback to bwrap overlays
  • Switch overlay method:
    • FIM_FUSE_UNIONFS: Force usage of fuse-unionfs
    • FIM_FUSE_OVERLAYFS: Force usage of fuse-overlayfs
    • If no options are used bwrap overlays is used by default

v1.0.6

13 Nov 19:43

Choose a tag to compare

Full Changelog: v1.0.5...v1.0.6

  • Support to mount filesystem layers external to the image with FIM_DIRS_LAYER and FIM_FILES_LAYER
  • Respected custom XDG_DATA_HOME on desktop integration.
  • Unique mimetype and icon for the flatimage type.
  • Use rolled back version of fuse-overlayfs
    • fuse-overlayfs has a bug introduced by this commit containers/fuse-overlayfs@6a0de4a that makes libraries have undefined symbols.
    • FlatImage was updated to use the commit previous to that until this is fixed.
  • Implement bwrap native overlay options
    • This is experimental and may be enabled with FIM_BWRAP_OVERLAYFS=1
    • It is not the default option for now because the upper directory hangs a bit between executions and no proper wait/kill mechanism is implemented.
  • Adjust nvidia bindings to create symlinks on the upperdir directly before bwrap's overlay options.
  • Adjust json configurations to be written to the upperdir instead, that way there is no need to mount the overlay filesystem for modifications.

v1.0.5

19 Oct 14:59

Choose a tag to compare

Full Changelog: v1.0.4...v1.0.5

  • Overwrite existing layer.tmp to avoid commit error

v1.0.4

18 Oct 17:52

Choose a tag to compare

Full Changelog: v1.0.3...v1.0.4

  • Updated steam example to work with busybox wget
  • Updated steam example to show an example of desktop integration
  • Updated steam example to show an example notify on start
  • Fixed a bug that caused XDG_RUNTIME_DIR to be set incorrectly
  • Hide harmless error messages about filesystem processes

v1.0.3

17 Oct 12:29

Choose a tag to compare

Full Changelog: v1.0.2...v1.0.3

Small hotfix for incorrect reference binary in portal, issue introduced in v1.0.2.

v1.0.2

16 Oct 15:18

Choose a tag to compare

Full Changelog: v1.0.1...v1.0.2

  • Include busybox at the end of PATH to avoid issues with fakechroot in arch
  • Show correct distribution name in container prompt
  • Fixed flatimage issues to run in /tmp
  • Faster startup avoiding unnecessary read checks
  • Fix missing patch of magic bytes