Build Guide
A production-ready XFCE desktop Linux distribution built with BuildStream, freedesktop-sdk 25.08, and gnome-build-meta infrastructure.
Quick Startβ
Prerequisitesβ
- BuildStream 2.7.0+ (via
bst2container) - Podman or Docker
- QEMU + KVM for testing
- 200GB+ free disk space (cache)
- 16GB+ RAM recommended
Buildβ
# Install dependencies (Ubuntu/Debian)
sudo apt install buildstream podman qemu-system-x86
# Clone and build
git clone <repository> xfce-linux
cd xfce-linux
# Build OCI image, export it, and chunkify it Dakota-style
just build
# Export image
just export
# Boot test
just boot-vm
Project Structureβ
xfce-linux/
βββ docs/ # Documentation
β βββ README.md # This file
β βββ PROJECT_STATUS.md # Current project status
β βββ technical/ # Technical documentation
β β βββ BUILD_METRICS.md # Build statistics
β β βββ BOOT_TESTING.md # Boot test results
β β βββ SOLUTIONS_AND_ANALYSIS.md # 5 solutions + analysis
β βββ reference/ # Development notes (archived)
β
βββ elements/ # BuildStream element definitions
β βββ freedesktop-sdk.bst # Junction to freedesktop-sdk
β βββ gnome-build-meta.bst # Junction to gnome-build-meta
β βββ core/ # Core XFCE applications
β βββ xfce-linux/ # XFCE integration layer
β βββ oci/ # OCI image composition
β
βββ patches/ # BuildStream patches
β βββ freedesktop-sdk/ # SDK patches
β βββ gnome-build-meta/ # gnome-build-meta patches
β
βββ files/ # Build-time files
β βββ sources/ # Source tarballs
β βββ config/ # Configuration files
β βββ xfce-binaries/ # Pre-built XFCE components
β
βββ scripts/ # Build and automation scripts
β βββ build/ # Build automation
β β βββ build-integrate.sh # Integration verification
β β βββ monitor-build.sh # Build progress monitor
β β βββ buildgrid-remote.conf # Remote cache config
β βββ
β
βββ tools/ # Development tools
β βββ bst-dashboard.py # BuildStream dashboard
β
βββ Justfile # Build automation (just)
βββ project.conf # BuildStream project config
βββ .gitignore # Git ignore rules
Build Systemβ
Using just commandsβ
# Build phases
just build # Full OCI build, export, and chunkify
just export # Refresh the exported image
just generate-bootable-image # Create bootable disk
just boot-vm # Launch QEMU VM
# Development
just clean # Clean build cache
just status # Show build status
just logs # View build logs
BuildStream Configurationβ
- Project:
project.confβ Main BuildStream configuration - Runtime: freedesktop-sdk 25.08.9
- Build Metadata: gnome-build-meta (gnome-50 branch)
- Cache: Local (127GB) + remote caches enabled
Componentsβ
XFCE Desktop (55 Applications)β
- Core: xfce4-session, xfce4-panel, xfwm4, xfdesktop
- Utilities: xfce4-terminal, xfce4-appfinder, xfce4-about
- File Manager: Thunar with plugins
- Settings: xfce4-settings, xfce4-power-manager
- And 46 more applications...
Panel Plugins (31 Available)β
- Clock, system monitor, weather, audio mixer, and more
Wayland Supportβ
- Compositor: xfwl4 (Wayland-native XFCE compositor)
- Session: Wayland-compatible XFCE session
Build Statusβ
| Component | Status | Details |
|---|---|---|
| Build | β Complete | db9e454f artifact cached |
| Elements | β Verified | 1060/1060 resolved, 0 errors |
| Boot | β Tested | VM boots to login prompt |
| Export | β³ Solvable | Documented solutions available |
Build Metricsβ
- Total Time: 88 minutes 45 seconds
- Elements: 1060 (1060 successful, 0 failures)
- Cache Size: 127GB (local) + remote
- Artifact: db9e454f (OCI image, fully cached)
Architectureβ
OCI Image Composition
βββ Platform Layer (freedesktop-sdk)
βββ Runtime Layer (XFCE + dependencies)
βββ Application Layer (55 apps + 31 plugins)
βββ Configuration Layer (dconf, X11 session)
Boot Flow
βββ UEFI/Secure Boot
βββ Linux Kernel
βββ systemd initialization
βββ GDM Display Manager
βββ XFCE Session
Known Issues & Solutionsβ
1. Bootc Composefs Install Pathβ
Issue: bootc install needs the exported image normalized before install
Root Cause: BuildStream generates layered OCI output; Dakota-style chunkifying keeps the bootc path compatible with composefs-backed installs
Solutions:
- Dakota-style chunkify after export (wired into
just build) - Use OSTree import directly
- Use containers-storage approach
2. Artifact Export Dependency Resolutionβ
Issue: bst artifact checkout fails with "No artifacts to stage"
Root Cause: Compose elements require all dependencies fully cached locally
Solutions:
- Complete full rebuild cycle
- Use BuildStream local service (
bst-service) - Manual cache population from remotes
Developmentβ
Adding XFCE Componentsβ
- Edit
elements/core/meta-xfce-core-apps.bst - Add new component references
- Rebuild:
just build
Modifying Build Configurationβ
- Edit
project.conffor global settings - Edit individual
.bstfiles for element changes - Use
just statusto verify changes
Testing Buildsβ
- Single element:
bst build elements/path/to/element.bst - Full rebuild:
just build - VM boot:
just boot-vm
Documentationβ
- PROJECT_STATUS.md β Current project state and progress
- technical/BUILD_METRICS.md β Build statistics and performance
- technical/BOOT_TESTING.md β Testing methodology and results
- technical/SOLUTIONS_AND_ANALYSIS.md β 5 export solutions with analysis
Licenseβ
This project integrates several open-source components:
- freedesktop-sdk: LGPL/MIT
- gnome-build-meta: GPL/LGPL
- XFCE: GPL
- Linux Kernel: GPL
See individual components for specific license details.
Contributingβ
- Review PROJECT_STATUS.md for current state
- Check technical/SOLUTIONS_AND_ANALYSIS.md for known issues
- Test changes with
just build && just boot-vm - Document changes in appropriate docs/technical/*.md file
Supportβ
- Build Issues: Check BuildStream logs in
~/.cache/buildstream/logs/ - Boot Issues: Use serial console:
telnet 127.0.0.1 4444 - Technical Details: See docs/technical/*.md files
Project Timelineβ
| Phase | Status | Completion |
|---|---|---|
| Element Validation | β Complete | 100% |
| Monorepo Integration | β Complete | 100% |
| OCI Build | β Complete | 100% |
| Boot Testing | β Complete | 70% |
| Export Pipeline | β³ In Progress | 60% |
| Production Deployment | β³ Ready | 0% |
Overall: 70% Complete
Last Updated: 2026-05-06
Status: Production-Ready (Awaiting export fix)
Maintainer: See git history