Initial commit: Alpine Zero-OS initramfs build system with cleaned Docker configuration
This commit is contained in:
182
build.sh
Executable file
182
build.sh
Executable file
@@ -0,0 +1,182 @@
|
||||
#!/bin/bash
|
||||
# Host build script for Alpine Zero-OS Initramfs
|
||||
|
||||
set -e
|
||||
|
||||
# Colors for output
|
||||
GREEN='\033[0;32m'
|
||||
BLUE='\033[0;34m'
|
||||
YELLOW='\033[1;33m'
|
||||
RED='\033[0;31m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Function to print colored output
|
||||
print_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
print_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
print_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
print_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# Default values
|
||||
BUILDMODE="${BUILDMODE:-debug}"
|
||||
SERVICE="builder"
|
||||
CLEAN_BUILD=false
|
||||
DEV_MODE=false
|
||||
MINIMAL_MODE=false
|
||||
|
||||
# Help function
|
||||
show_help() {
|
||||
echo "Usage: $0 [OPTIONS]"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " -r, --release Build in release mode (default: debug)"
|
||||
echo " -m, --minimal Build minimal embedded initramfs (~50MB vs 700MB)"
|
||||
echo " -c, --clean Clean build without cache volumes"
|
||||
echo " -d, --dev Start development container with shell"
|
||||
echo " -t, --test Run test build without cache"
|
||||
echo " -h, --help Show this help message"
|
||||
echo ""
|
||||
echo "Examples:"
|
||||
echo " $0 # Build in debug mode with cache"
|
||||
echo " $0 --release # Build in release mode"
|
||||
echo " $0 --minimal # Build minimal embedded initramfs"
|
||||
echo " $0 --clean # Clean build without cache"
|
||||
echo " $0 --dev # Start development shell"
|
||||
echo ""
|
||||
echo "Environment variables:"
|
||||
echo " BUILDMODE=release # Override build mode"
|
||||
echo " TARGETARCH=amd64 # Target architecture"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Parse command line arguments
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-r|--release)
|
||||
BUILDMODE="release"
|
||||
shift
|
||||
;;
|
||||
-m|--minimal)
|
||||
MINIMAL_MODE=true
|
||||
shift
|
||||
;;
|
||||
-c|--clean)
|
||||
CLEAN_BUILD=true
|
||||
shift
|
||||
;;
|
||||
-d|--dev)
|
||||
DEV_MODE=true
|
||||
SERVICE="shell"
|
||||
shift
|
||||
;;
|
||||
-t|--test)
|
||||
SERVICE="test"
|
||||
shift
|
||||
;;
|
||||
-h|--help)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
print_error "Unknown option: $1"
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
print_info "Alpine Zero-OS Initramfs Builder"
|
||||
print_info "Build mode: $BUILDMODE"
|
||||
if [ "$MINIMAL_MODE" = true ]; then
|
||||
print_info "Initramfs type: MINIMAL (~50MB embedded cpio)"
|
||||
else
|
||||
print_info "Initramfs type: FULL (~700MB with all packages)"
|
||||
fi
|
||||
print_info "Service: $SERVICE"
|
||||
if [ "$CLEAN_BUILD" = true ]; then
|
||||
print_info "Clean build: removing cache and artifacts"
|
||||
fi
|
||||
|
||||
# Change to build directory
|
||||
cd "$(dirname "$0")/build"
|
||||
|
||||
# Handle clean build
|
||||
if [ "$CLEAN_BUILD" = true ]; then
|
||||
print_info "Cleaning build artifacts and cache..."
|
||||
|
||||
# Remove output artifacts
|
||||
rm -rf ../output/*
|
||||
print_info " Removed output artifacts"
|
||||
|
||||
# Remove cache directories
|
||||
rm -rf ../cache/*
|
||||
print_info " Removed cache directories"
|
||||
|
||||
# Remove Docker volumes
|
||||
print_info " Removing Docker cache volumes..."
|
||||
docker volume rm alpine-initramfs_github-cache alpine-initramfs_kernel-cache 2>/dev/null || true
|
||||
print_info " Docker cache volumes removed"
|
||||
|
||||
print_success "Clean completed successfully"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Create necessary directories
|
||||
mkdir -p ../output ../cache/github ../cache/packages
|
||||
|
||||
# Export environment variables for docker-compose
|
||||
export BUILDMODE
|
||||
export MINIMAL_MODE
|
||||
export TARGETARCH="${TARGETARCH:-amd64}"
|
||||
|
||||
if [ "$DEV_MODE" = true ]; then
|
||||
print_info "Starting development container..."
|
||||
docker compose run --rm $SERVICE
|
||||
else
|
||||
print_info "Starting build process..."
|
||||
|
||||
# Build the Docker image first
|
||||
print_info "Building Docker image..."
|
||||
docker compose build $SERVICE
|
||||
|
||||
# Run the build
|
||||
print_info "Running Alpine initramfs build..."
|
||||
docker compose run --rm $SERVICE
|
||||
|
||||
# Check if build was successful
|
||||
if [ -f "../output/vmlinuz.efi" ]; then
|
||||
print_success "Build completed successfully!"
|
||||
print_info "Build artifacts:"
|
||||
ls -la ../output/
|
||||
|
||||
# Show size information
|
||||
size=$(stat -c%s "../output/vmlinuz.efi" 2>/dev/null || stat -f%z "../output/vmlinuz.efi" 2>/dev/null || echo "unknown")
|
||||
print_info "Kernel size: $size bytes"
|
||||
|
||||
if [ -f "../output/initramfs.cpio.xz" ]; then
|
||||
initramfs_size=$(stat -c%s "../output/initramfs.cpio.xz" 2>/dev/null || stat -f%z "../output/initramfs.cpio.xz" 2>/dev/null || echo "unknown")
|
||||
print_info "Initramfs size: $initramfs_size bytes"
|
||||
fi
|
||||
|
||||
print_success "Alpine Zero-OS kernel ready: output/vmlinuz.efi"
|
||||
print_info ""
|
||||
print_info "To test with QEMU:"
|
||||
print_info " qemu-system-x86_64 -kernel output/vmlinuz.efi -m 2048 -enable-kvm -cpu host \\"
|
||||
print_info " -net nic,model=e1000 -net bridge,br=vm0 -nographic -serial null \\"
|
||||
print_info " -serial mon:stdio -append console=ttyS1,115200n8"
|
||||
|
||||
else
|
||||
print_error "Build failed - no kernel image found in output/"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
Reference in New Issue
Block a user