mid coding commit
This commit is contained in:
Executable
+110
@@ -0,0 +1,110 @@
|
||||
#!/bin/bash
|
||||
# Native Alpine build script
|
||||
# Must be run on Alpine Linux or in Alpine container
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
BUILD_TYPE="${1:-iso}"
|
||||
|
||||
ARCHIPELAGO_VERSION="${ARCHIPELAGO_VERSION:-0.1.0}"
|
||||
ALPINE_VERSION="${ALPINE_VERSION:-3.19}"
|
||||
ARCH="${ARCH:-x86_64}"
|
||||
OUTPUT_DIR="${OUTPUT_DIR:-$SCRIPT_DIR/results}"
|
||||
|
||||
echo "🏔️ Building Alpine image natively"
|
||||
echo ""
|
||||
|
||||
# Install build dependencies
|
||||
echo "📦 Installing build dependencies..."
|
||||
apk add --no-cache \
|
||||
bash \
|
||||
git \
|
||||
alpine-sdk \
|
||||
abuild \
|
||||
alpine-conf \
|
||||
syslinux \
|
||||
xorriso \
|
||||
squashfs-tools \
|
||||
grub \
|
||||
grub-efi \
|
||||
mtools \
|
||||
dosfstools \
|
||||
e2fsprogs \
|
||||
rsync \
|
||||
|| true
|
||||
|
||||
# Setup abuild keys if needed
|
||||
if [ ! -f ~/.abuild/abuild.conf ]; then
|
||||
echo "🔑 Setting up abuild keys..."
|
||||
abuild-keygen -a -n || true
|
||||
fi
|
||||
|
||||
# Clone Alpine aports if needed
|
||||
APORTS_DIR="$SCRIPT_DIR/aports"
|
||||
if [ ! -d "$APORTS_DIR" ]; then
|
||||
echo "📥 Cloning Alpine aports repository..."
|
||||
git clone --depth=1 --branch "v${ALPINE_VERSION}" \
|
||||
https://gitlab.alpinelinux.org/alpine/aports.git "$APORTS_DIR" || {
|
||||
echo "⚠️ Failed to clone aports, trying without branch..."
|
||||
git clone --depth=1 https://gitlab.alpinelinux.org/alpine/aports.git "$APORTS_DIR"
|
||||
}
|
||||
fi
|
||||
|
||||
# Copy custom profile
|
||||
echo "📝 Setting up custom Archipelago profile..."
|
||||
PROFILE_DIR="$APORTS_DIR/scripts/mkimg.archipelago"
|
||||
mkdir -p "$PROFILE_DIR"
|
||||
cp -r "$SCRIPT_DIR/alpine-profile/"* "$PROFILE_DIR/" 2>/dev/null || true
|
||||
|
||||
# Build ISO or disk image
|
||||
cd "$APORTS_DIR/scripts"
|
||||
|
||||
if [ "$BUILD_TYPE" = "iso" ]; then
|
||||
echo "💿 Building ISO image..."
|
||||
./mkimage.sh \
|
||||
--arch "$ARCH" \
|
||||
--profile archipelago \
|
||||
--repository "http://dl-cdn.alpinelinux.org/alpine/v${ALPINE_VERSION}/main" \
|
||||
--repository "http://dl-cdn.alpinelinux.org/alpine/v${ALPINE_VERSION}/community" \
|
||||
--outdir "$OUTPUT_DIR" \
|
||||
--tag "$ALPINE_VERSION" || {
|
||||
echo "❌ ISO build failed"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Rename output
|
||||
if [ -f "$OUTPUT_DIR/alpine-archipelago-${ALPINE_VERSION}-${ARCH}.iso" ]; then
|
||||
mv "$OUTPUT_DIR/alpine-archipelago-${ALPINE_VERSION}-${ARCH}.iso" \
|
||||
"$OUTPUT_DIR/archipelago-${ARCHIPELAGO_VERSION}-${ARCH}.iso"
|
||||
fi
|
||||
elif [ "$BUILD_TYPE" = "disk" ]; then
|
||||
echo "💾 Building disk image..."
|
||||
# Build ISO first, then convert to disk image
|
||||
./mkimage.sh \
|
||||
--arch "$ARCH" \
|
||||
--profile archipelago \
|
||||
--repository "http://dl-cdn.alpinelinux.org/alpine/v${ALPINE_VERSION}/main" \
|
||||
--repository "http://dl-cdn.alpinelinux.org/alpine/v${ALPINE_VERSION}/community" \
|
||||
--outdir "$OUTPUT_DIR" \
|
||||
--tag "$ALPINE_VERSION" || {
|
||||
echo "❌ Image build failed"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Convert to disk image (will be done in install script)
|
||||
echo "📦 Disk image will be created in install step"
|
||||
else
|
||||
echo "❌ Unknown build type: $BUILD_TYPE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Install Archipelago into the image
|
||||
echo "🔧 Installing Archipelago components..."
|
||||
"$SCRIPT_DIR/scripts/install-archipelago.sh" "$OUTPUT_DIR" || {
|
||||
echo "⚠️ Archipelago installation had issues, but image was built"
|
||||
}
|
||||
|
||||
echo ""
|
||||
echo "✅ Build complete!"
|
||||
Reference in New Issue
Block a user