Loading packaging/build-nspawn.sh +8 −80 Original line number Diff line number Diff line Loading @@ -73,10 +73,10 @@ while [[ $# -gt 0 ]]; do -h|--help) echo "Usage: $0 [--clean] [--arch amd64] [PHASE...]" echo "" echo "Phases: chroot, toolchain, libraries, blogi, editor, all (default)" echo "Phases: chroot, toolchain, libraries, blogi, all (default)" exit 0 ;; chroot|toolchain|libraries|blogi|editor|all) chroot|toolchain|libraries|blogi|all) PHASES+=("$1"); shift ;; *) echo "Unknown option: $1"; exit 1 ;; esac Loading @@ -87,17 +87,11 @@ if [[ ${#PHASES[@]} -eq 0 ]]; then PHASES=("all") fi # Only require root for non-editor phases if [[ $EUID -ne 0 ]]; then # Allow editor-only without root for phase in "${PHASES[@]}"; do if [[ "$phase" != "editor" ]]; then echo "This script must be run as root (for nspawn)." echo "Usage: sudo $0 [--clean] [PHASE...]" exit 1 fi done fi # ───────────────────────────────────────────────────────────── # Phase 1: Create minimal Debian chroot Loading Loading @@ -474,35 +468,23 @@ build_libraries() { } # ───────────────────────────────────────────────────────────── # Phase 4: Build blogi and create .deb # Phase 4: Build blogi .deb packages (dpkg-buildpackage handles cmake) # ───────────────────────────────────────────────────────────── build_blogi() { echo "==> Building blogi package..." echo "==> Building blogi packages..." # Bind-mount the source tree read-only systemd-nspawn -D "$CHROOT_DIR" \ --bind-ro="$PROJECT_DIR:$BUILD_DIR/blogi-src" \ --pipe -- bash -c " set -e TOOLCHAIN=/usr/local/musl/share/musl-llvm-toolchain.cmake # Copy source (we don't modify the bind mount) rm -rf $BUILD_DIR/blogi cp -a $BUILD_DIR/blogi-src $BUILD_DIR/blogi cd $BUILD_DIR/blogi # Build mkdir -p build && cd build cmake .. -G Ninja \ -DCMAKE_TOOLCHAIN_FILE=\$TOOLCHAIN \ -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_INSTALL_LIBDIR=lib/x86_64-linux-gnu \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_EDITOR=OFF ninja # Package via dpkg-buildpackage cd $BUILD_DIR/blogi # Package via dpkg-buildpackage (handles cmake configure+build+install) dpkg-buildpackage -us -uc -d -b --build-profiles=nspawn # Collect .deb files Loading Loading @@ -536,69 +518,15 @@ run_phase() { toolchain) setup_toolchain ;; libraries) build_libraries ;; blogi) build_blogi ;; editor) build_editor ;; all) setup_chroot setup_toolchain build_libraries build_blogi build_editor ;; esac } # ───────────────────────────────────────────────────────────── # Phase 5: Build blogi-editor normally (system toolchain, dpkg-buildpackage) # ───────────────────────────────────────────────────────────── build_editor() { echo "==> Building blogi-editor package (nspawn + musl)..." # Bind-mount the source tree read-only systemd-nspawn -D "$CHROOT_DIR" \ --bind-ro="$PROJECT_DIR:$BUILD_DIR/blogi-src" \ --pipe -- bash -c " set -e TOOLCHAIN=/usr/local/musl/share/musl-llvm-toolchain.cmake # Copy source (we don't modify the bind mount) rm -rf $BUILD_DIR/blogi cp -a $BUILD_DIR/blogi-src $BUILD_DIR/blogi cd $BUILD_DIR/blogi # Build mkdir -p build && cd build cmake .. -G Ninja \ -DCMAKE_TOOLCHAIN_FILE=\$TOOLCHAIN \ -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_INSTALL_LIBDIR=lib/x86_64-linux-gnu \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_EDITOR=ON ninja # Package via dpkg-buildpackage cd $BUILD_DIR/blogi dpkg-buildpackage -us -uc -d -b --build-profiles=nspawn,editor # Collect .deb files mkdir -p $BUILD_DIR/output mv ../*.deb $BUILD_DIR/output/ 2>/dev/null || true mv ../*.changes $BUILD_DIR/output/ 2>/dev/null || true mv ../*.buildinfo $BUILD_DIR/output/ 2>/dev/null || true echo '==> Editor package build complete' ls -la $BUILD_DIR/output/ " # Copy output to host mkdir -p "$OUTPUT_DIR" cp "$CHROOT_DIR/$BUILD_DIR/output/"*editor*.deb "$OUTPUT_DIR/" 2>/dev/null || true cp "$CHROOT_DIR/$BUILD_DIR/output/"*editor*.changes "$OUTPUT_DIR/" 2>/dev/null || true cp "$CHROOT_DIR/$BUILD_DIR/output/"*editor*.buildinfo "$OUTPUT_DIR/" 2>/dev/null || true echo "==> blogi-editor packages available in: $OUTPUT_DIR" ls -la "$OUTPUT_DIR"/blogi-editor* 2>/dev/null || true } echo "╔══════════════════════════════════════════════════════════╗" echo "║ blogi nspawn build — musl + LLVM libc++ + compiler-rt ║" echo "╚══════════════════════════════════════════════════════════╝" Loading Loading
packaging/build-nspawn.sh +8 −80 Original line number Diff line number Diff line Loading @@ -73,10 +73,10 @@ while [[ $# -gt 0 ]]; do -h|--help) echo "Usage: $0 [--clean] [--arch amd64] [PHASE...]" echo "" echo "Phases: chroot, toolchain, libraries, blogi, editor, all (default)" echo "Phases: chroot, toolchain, libraries, blogi, all (default)" exit 0 ;; chroot|toolchain|libraries|blogi|editor|all) chroot|toolchain|libraries|blogi|all) PHASES+=("$1"); shift ;; *) echo "Unknown option: $1"; exit 1 ;; esac Loading @@ -87,17 +87,11 @@ if [[ ${#PHASES[@]} -eq 0 ]]; then PHASES=("all") fi # Only require root for non-editor phases if [[ $EUID -ne 0 ]]; then # Allow editor-only without root for phase in "${PHASES[@]}"; do if [[ "$phase" != "editor" ]]; then echo "This script must be run as root (for nspawn)." echo "Usage: sudo $0 [--clean] [PHASE...]" exit 1 fi done fi # ───────────────────────────────────────────────────────────── # Phase 1: Create minimal Debian chroot Loading Loading @@ -474,35 +468,23 @@ build_libraries() { } # ───────────────────────────────────────────────────────────── # Phase 4: Build blogi and create .deb # Phase 4: Build blogi .deb packages (dpkg-buildpackage handles cmake) # ───────────────────────────────────────────────────────────── build_blogi() { echo "==> Building blogi package..." echo "==> Building blogi packages..." # Bind-mount the source tree read-only systemd-nspawn -D "$CHROOT_DIR" \ --bind-ro="$PROJECT_DIR:$BUILD_DIR/blogi-src" \ --pipe -- bash -c " set -e TOOLCHAIN=/usr/local/musl/share/musl-llvm-toolchain.cmake # Copy source (we don't modify the bind mount) rm -rf $BUILD_DIR/blogi cp -a $BUILD_DIR/blogi-src $BUILD_DIR/blogi cd $BUILD_DIR/blogi # Build mkdir -p build && cd build cmake .. -G Ninja \ -DCMAKE_TOOLCHAIN_FILE=\$TOOLCHAIN \ -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_INSTALL_LIBDIR=lib/x86_64-linux-gnu \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_EDITOR=OFF ninja # Package via dpkg-buildpackage cd $BUILD_DIR/blogi # Package via dpkg-buildpackage (handles cmake configure+build+install) dpkg-buildpackage -us -uc -d -b --build-profiles=nspawn # Collect .deb files Loading Loading @@ -536,69 +518,15 @@ run_phase() { toolchain) setup_toolchain ;; libraries) build_libraries ;; blogi) build_blogi ;; editor) build_editor ;; all) setup_chroot setup_toolchain build_libraries build_blogi build_editor ;; esac } # ───────────────────────────────────────────────────────────── # Phase 5: Build blogi-editor normally (system toolchain, dpkg-buildpackage) # ───────────────────────────────────────────────────────────── build_editor() { echo "==> Building blogi-editor package (nspawn + musl)..." # Bind-mount the source tree read-only systemd-nspawn -D "$CHROOT_DIR" \ --bind-ro="$PROJECT_DIR:$BUILD_DIR/blogi-src" \ --pipe -- bash -c " set -e TOOLCHAIN=/usr/local/musl/share/musl-llvm-toolchain.cmake # Copy source (we don't modify the bind mount) rm -rf $BUILD_DIR/blogi cp -a $BUILD_DIR/blogi-src $BUILD_DIR/blogi cd $BUILD_DIR/blogi # Build mkdir -p build && cd build cmake .. -G Ninja \ -DCMAKE_TOOLCHAIN_FILE=\$TOOLCHAIN \ -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_INSTALL_LIBDIR=lib/x86_64-linux-gnu \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_EDITOR=ON ninja # Package via dpkg-buildpackage cd $BUILD_DIR/blogi dpkg-buildpackage -us -uc -d -b --build-profiles=nspawn,editor # Collect .deb files mkdir -p $BUILD_DIR/output mv ../*.deb $BUILD_DIR/output/ 2>/dev/null || true mv ../*.changes $BUILD_DIR/output/ 2>/dev/null || true mv ../*.buildinfo $BUILD_DIR/output/ 2>/dev/null || true echo '==> Editor package build complete' ls -la $BUILD_DIR/output/ " # Copy output to host mkdir -p "$OUTPUT_DIR" cp "$CHROOT_DIR/$BUILD_DIR/output/"*editor*.deb "$OUTPUT_DIR/" 2>/dev/null || true cp "$CHROOT_DIR/$BUILD_DIR/output/"*editor*.changes "$OUTPUT_DIR/" 2>/dev/null || true cp "$CHROOT_DIR/$BUILD_DIR/output/"*editor*.buildinfo "$OUTPUT_DIR/" 2>/dev/null || true echo "==> blogi-editor packages available in: $OUTPUT_DIR" ls -la "$OUTPUT_DIR"/blogi-editor* 2>/dev/null || true } echo "╔══════════════════════════════════════════════════════════╗" echo "║ blogi nspawn build — musl + LLVM libc++ + compiler-rt ║" echo "╚══════════════════════════════════════════════════════════╝" Loading