Some checks failed
Build Simple CLI / build (push) Failing after 1s
- Add apt-ostree, deb-bootupd, and bootc packages to tools/ - Update Containerfile to install Particle-OS tools with dependencies - Add tool verification script and updated welcome message - Update justfile with new build and test recipes - Add comprehensive tool testing and bootable image generation - Successfully integrate 2/3 tools (apt-ostree and bootupd working) - Note: bootc package contains only documentation, not binary Ready for bootable image generation and QEMU testing!
155 lines
4.1 KiB
Bash
Executable file
155 lines
4.1 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Create OSTree Deployment Script v2
|
|
# Uses standard ostree tools to create proper OSTree deployment
|
|
|
|
set -euo pipefail
|
|
|
|
echo "🌱 Creating OSTree Deployment v2 for Simple-CLI"
|
|
echo "================================================"
|
|
|
|
# Check if ostree is available
|
|
if ! command -v ostree >/dev/null 2>&1; then
|
|
echo "❌ Error: ostree command not found"
|
|
echo " Install with: sudo apt install ostree"
|
|
exit 1
|
|
fi
|
|
|
|
echo "✅ OSTree tools available, proceeding..."
|
|
|
|
# Create working directory
|
|
WORK_DIR="/tmp/ostree-deployment"
|
|
echo "🔧 Creating working directory: $WORK_DIR"
|
|
rm -rf "$WORK_DIR"
|
|
mkdir -p "$WORK_DIR"
|
|
|
|
# Create OSTree repository
|
|
REPO_DIR="$WORK_DIR/repo"
|
|
echo "📦 Initializing OSTree repository: $REPO_DIR"
|
|
ostree init --repo="$REPO_DIR" --mode=bare
|
|
|
|
# Create deployment structure
|
|
DEPLOY_DIR="$WORK_DIR/deploy"
|
|
echo "🏗️ Creating deployment structure: $DEPLOY_DIR"
|
|
mkdir -p "$DEPLOY_DIR"
|
|
|
|
# Create the atomic filesystem layout
|
|
echo "🔗 Creating atomic filesystem layout..."
|
|
cd "$DEPLOY_DIR"
|
|
|
|
# Create essential directories
|
|
mkdir -p usr/bin usr/sbin usr/lib usr/lib64 usr/etc
|
|
mkdir -p boot var/home var/log var/cache var/tmp
|
|
mkdir -p etc
|
|
|
|
# Create symlinks for atomic layout
|
|
ln -sf usr/bin bin
|
|
ln -sf usr/sbin sbin
|
|
ln -sf usr/lib lib
|
|
ln -sf usr/lib64 lib64
|
|
ln -sf var/home home
|
|
|
|
echo "✅ Atomic filesystem layout created"
|
|
|
|
# Copy essential system files from current system
|
|
echo "📋 Copying essential system files..."
|
|
if [ -d /usr/bin ]; then
|
|
echo " Copying /usr/bin..."
|
|
cp -r /usr/bin/* usr/bin/ 2>/dev/null || true
|
|
fi
|
|
|
|
if [ -d /usr/sbin ]; then
|
|
echo " Copying /usr/sbin..."
|
|
cp -r /usr/sbin/* usr/sbin/ 2>/dev/null || true
|
|
fi
|
|
|
|
if [ -d /usr/lib ]; then
|
|
echo " Copying /usr/lib..."
|
|
cp -r /usr/lib/* usr/lib/ 2>/dev/null || true
|
|
fi
|
|
|
|
if [ -d /usr/lib64 ]; then
|
|
echo " Copying /usr/lib64..."
|
|
cp -r /usr/lib64/* usr/lib64/ 2>/dev/null || true
|
|
fi
|
|
|
|
if [ -d /boot ]; then
|
|
echo " Copying /boot..."
|
|
cp -r /boot/* boot/ 2>/dev/null || true
|
|
fi
|
|
|
|
if [ -d /etc ]; then
|
|
echo " Copying /etc..."
|
|
cp -r /etc/* etc/ 2>/dev/null || true
|
|
fi
|
|
|
|
echo "✅ System files copied"
|
|
|
|
# Create OSTree commit
|
|
echo "💾 Creating OSTree commit..."
|
|
ostree commit \
|
|
--repo="$REPO_DIR" \
|
|
--branch=simple-cli/main \
|
|
--subject="Simple-CLI OSTree deployment v2" \
|
|
--body="OSTree deployment with atomic filesystem layout and boot optimizations" \
|
|
"$DEPLOY_DIR"
|
|
|
|
echo "✅ OSTree commit created"
|
|
|
|
# Show commit info
|
|
echo ""
|
|
echo "📊 OSTree commit information:"
|
|
ostree --repo="$REPO_DIR" log simple-cli/main | head -10
|
|
|
|
# Create deployment marker
|
|
echo ""
|
|
echo "📝 Creating deployment marker..."
|
|
mkdir -p "$DEPLOY_DIR/run"
|
|
touch "$DEPLOY_DIR/run/ostree-booted"
|
|
|
|
# Create basic GRUB configuration
|
|
echo "🥾 Creating GRUB configuration..."
|
|
mkdir -p "$DEPLOY_DIR/boot/grub"
|
|
|
|
# Find actual kernel and initrd files
|
|
KERNEL_FILE=$(find "$DEPLOY_DIR/boot" -name "vmlinuz-*" | head -1)
|
|
INITRD_FILE=$(find "$DEPLOY_DIR/boot" -name "initrd.img-*" | head -1)
|
|
|
|
if [[ -n "$KERNEL_FILE" && -n "$INITRD_FILE" ]]; then
|
|
KERNEL_NAME=$(basename "$KERNEL_FILE")
|
|
INITRD_NAME=$(basename "$INITRD_FILE")
|
|
|
|
cat > "$DEPLOY_DIR/boot/grub/grub.cfg" << EOF
|
|
# GRUB configuration for Simple-CLI OSTree deployment
|
|
set timeout=1
|
|
set default=0
|
|
|
|
menuentry "Simple CLI OSTree" {
|
|
set root=(hd0,msdos1)
|
|
linux /boot/$KERNEL_NAME root=/dev/sda1 rw console=ttyS0 quiet splash fastboot
|
|
initrd /boot/$INITRD_NAME
|
|
}
|
|
|
|
menuentry "Simple CLI OSTree (Recovery)" {
|
|
set root=(hd0,msdos1)
|
|
linux /boot/$KERNEL_NAME root=/dev/sda1 rw single console=ttyS0
|
|
initrd /boot/$INITRD_NAME
|
|
}
|
|
EOF
|
|
echo "✅ GRUB configuration created with kernel: $KERNEL_NAME, initrd: $INITRD_NAME"
|
|
else
|
|
echo "⚠️ Warning: Kernel or initrd not found, GRUB config incomplete"
|
|
fi
|
|
|
|
echo ""
|
|
echo "🎯 OSTree deployment created successfully!"
|
|
echo "📁 Repository: $REPO_DIR"
|
|
echo "📁 Deployment: $DEPLOY_DIR"
|
|
echo ""
|
|
echo "🚀 Next steps:"
|
|
echo " 1. Copy deployment to target location"
|
|
echo " 2. Use bootc-image-builder to create bootable image"
|
|
echo " 3. Test boot performance in QEMU"
|
|
echo ""
|
|
echo "📋 Files created:"
|
|
ls -la "$DEPLOY_DIR" | head -20
|