feat: Implement complete Zero OS Alpine Initramfs Builder

- Complete bash framework with strict error handling
- Modular library system (docker, alpine, components, initramfs, kernel, testing)
- Rust component integration (zinit, rfs, mycelium) with musl targeting
- Rootless Docker/Podman support for GitHub Actions
- Centralized configuration in config/build.conf
- 2-stage module loading system
- Strip + UPX optimization for minimal size
- Complete zinit integration replacing OpenRC
- GitHub Actions CI/CD pipeline
- Comprehensive documentation and usage guides

Components:
- Latest stable kernel 6.12.44
- Alpine Linux 3.22 base
- ThreeFold components: zinit, mycelium, rfs, corex
- Target: ~8-12MB final initramfs.cpio.xz
This commit is contained in:
2025-08-31 12:31:49 +02:00
commit 860b9aa161
81 changed files with 30118 additions and 0 deletions

268
scripts/clean.sh Executable file
View File

@@ -0,0 +1,268 @@
#!/bin/bash
# Cleanup script for Zero OS Alpine Initramfs Builder
set -euo pipefail
# Script directory and project root detection
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
# Source common functions
source "${SCRIPT_DIR}/lib/common.sh"
# Cleanup configuration
CLEAN_ALL="${CLEAN_ALL:-false}"
CLEAN_DOWNLOADS="${CLEAN_DOWNLOADS:-false}"
CLEAN_CONTAINER="${CLEAN_CONTAINER:-false}"
# Display usage information
function show_usage() {
cat << EOF
Zero OS Build Cleanup Script
Usage: $0 [OPTIONS]
Options:
--all Clean everything (artifacts + downloads + containers)
--downloads Clean downloaded sources and components
--containers Clean container images
--artifacts-only Clean only build artifacts (default)
--help Show this help message
Environment Variables:
CLEAN_ALL Clean everything (default: false)
CLEAN_DOWNLOADS Clean downloaded sources (default: false)
CLEAN_CONTAINER Clean container images (default: false)
Examples:
$0 # Clean build artifacts only
$0 --all # Complete cleanup
$0 --downloads # Clean sources and keep artifacts
EOF
}
# Parse command line arguments
function parse_arguments() {
while [[ $# -gt 0 ]]; do
case $1 in
--all)
CLEAN_ALL="true"
CLEAN_DOWNLOADS="true"
CLEAN_CONTAINER="true"
shift
;;
--downloads)
CLEAN_DOWNLOADS="true"
shift
;;
--containers)
CLEAN_CONTAINER="true"
shift
;;
--artifacts-only)
# This is the default, no action needed
shift
;;
--help|-h)
show_usage
exit 0
;;
*)
log_error "Unknown option: $1"
show_usage
exit 1
;;
esac
done
}
# Clean build artifacts
function clean_build_artifacts() {
section_header "Cleaning Build Artifacts"
local artifacts_to_clean=(
"${PROJECT_ROOT}/initramfs"
"${PROJECT_ROOT}/dist"
)
for artifact in "${artifacts_to_clean[@]}"; do
if [[ -d "$artifact" ]]; then
log_info "Removing: $artifact"
safe_rmdir "$artifact"
else
log_debug "Already clean: $artifact"
fi
done
# Clean temporary files
local temp_files=(
"/tmp/alpine-miniroot*.tar.gz"
"/tmp/linux-*.tar.xz"
"/tmp/qemu-*.log"
"/tmp/cloud-hypervisor-*.log"
)
for pattern in "${temp_files[@]}"; do
if ls $pattern 2>/dev/null; then
log_info "Removing temporary files: $pattern"
safe_execute rm -f $pattern
fi
done
log_info "Build artifacts cleaned"
}
# Clean downloaded sources and components
function clean_downloads() {
section_header "Cleaning Downloaded Sources and Components"
local download_dirs=(
"${PROJECT_ROOT}/components"
"${PROJECT_ROOT}/kernel"
)
for dir in "${download_dirs[@]}"; do
if [[ -d "$dir" ]]; then
log_info "Removing: $dir"
safe_rmdir "$dir"
else
log_debug "Already clean: $dir"
fi
done
# Clean Rust cache if it exists in project
local rust_cache="${PROJECT_ROOT}/.cargo"
if [[ -d "$rust_cache" ]]; then
log_info "Removing Rust cache: $rust_cache"
safe_rmdir "$rust_cache"
fi
log_info "Downloads and sources cleaned"
}
# Clean container images
function clean_container_images() {
section_header "Cleaning Container Images"
# Source docker functions if available
if [[ -f "${SCRIPT_DIR}/lib/docker.sh" ]]; then
source "${SCRIPT_DIR}/lib/docker.sh"
# Detect container runtime
if docker_detect_runtime 2>/dev/null; then
docker_cleanup "false"
else
log_info "No container runtime detected"
fi
else
log_warn "Docker library not found, manual container cleanup may be needed"
fi
log_info "Container images cleaned"
}
# Show disk space recovery
function show_space_recovery() {
section_header "Disk Space Recovery"
# Calculate space in current directory
local current_usage=$(du -sh "${PROJECT_ROOT}" 2>/dev/null | cut -f1 || echo "unknown")
log_info "Current project size: ${current_usage}"
# Show what was cleaned
if [[ "$CLEAN_ALL" == "true" ]]; then
log_info "Complete cleanup performed:"
log_info " ✓ Build artifacts removed"
log_info " ✓ Downloaded sources removed"
log_info " ✓ Container images removed"
elif [[ "$CLEAN_DOWNLOADS" == "true" ]]; then
log_info "Partial cleanup performed:"
log_info " ✓ Build artifacts removed"
log_info " ✓ Downloaded sources removed"
log_info " - Container images preserved"
else
log_info "Minimal cleanup performed:"
log_info " ✓ Build artifacts removed"
log_info " - Downloaded sources preserved"
log_info " - Container images preserved"
fi
}
# Verify cleanup was successful
function verify_cleanup() {
section_header "Verifying Cleanup"
local remaining_artifacts=()
# Check if artifacts were actually removed
if [[ -d "${PROJECT_ROOT}/initramfs" ]]; then
remaining_artifacts+=("initramfs/")
fi
if [[ -d "${PROJECT_ROOT}/dist" ]]; then
remaining_artifacts+=("dist/")
fi
if [[ "$CLEAN_DOWNLOADS" == "true" ]]; then
if [[ -d "${PROJECT_ROOT}/components" ]]; then
remaining_artifacts+=("components/")
fi
if [[ -d "${PROJECT_ROOT}/kernel" ]]; then
remaining_artifacts+=("kernel/")
fi
fi
if [[ ${#remaining_artifacts[@]} -gt 0 ]]; then
log_warn "Some artifacts may not have been cleaned:"
for artifact in "${remaining_artifacts[@]}"; do
log_warn " - $artifact"
done
return 1
else
log_info "Cleanup verification passed"
return 0
fi
}
# Main function
function main() {
# Parse command line arguments
parse_arguments "$@"
echo ""
echo "=================================================="
echo "== ZERO-OS BUILD CLEANUP =="
echo "=================================================="
echo ""
log_info "Starting cleanup process"
log_info "Clean all: ${CLEAN_ALL}"
log_info "Clean downloads: ${CLEAN_DOWNLOADS}"
log_info "Clean containers: ${CLEAN_CONTAINER}"
# Always clean build artifacts
clean_build_artifacts
# Clean downloads if requested
if [[ "$CLEAN_DOWNLOADS" == "true" ]]; then
clean_downloads
fi
# Clean containers if requested
if [[ "$CLEAN_CONTAINER" == "true" ]]; then
clean_container_images
fi
# Show space recovery
show_space_recovery
# Verify cleanup
verify_cleanup
section_header "Cleanup Complete"
log_info "Project cleaned successfully"
}
# Run main function with all arguments
main "$@"