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:
268
scripts/clean.sh
Executable file
268
scripts/clean.sh
Executable 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 "$@"
|
||||
Reference in New Issue
Block a user