Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 86 additions & 16 deletions boxes/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,39 +1,109 @@
SET(LEGACY_BOX_SCRIPTS
${CMAKE_SOURCE_DIR}/boxes/minimal/build_minbase.sh
${CMAKE_SOURCE_DIR}/boxes/busybox/build_trixie.sh
${CMAKE_SOURCE_DIR}/boxes/python/build_python2.7.sh
${CMAKE_SOURCE_DIR}/boxes/python/build_python3_minimal.sh
${CMAKE_SOURCE_DIR}/boxes/python/build_python3_9_numpy.sh
${CMAKE_SOURCE_DIR}/boxes/utils.sh
)

# Build legacy test boxes using individual scripts
ADD_CUSTOM_COMMAND(
OUTPUT
minimal.tar.gz
COMMAND
bash ${CMAKE_SOURCE_DIR}/boxes/minimal/build_minbase.sh ${CMAKE_CURRENT_BINARY_DIR}
DEPENDS
${LEGACY_BOX_SCRIPTS}
WORKING_DIRECTORY
${CMAKE_CURRENT_BINARY_DIR}
)

ADD_CUSTOM_COMMAND(
OUTPUT
minimal.tar.gz busybox.tar.gz python2.tar.gz python3.tar.gz compiler-python3.9.2-numpy_amd64.tar.gz
busybox.tar.gz
COMMAND
${CMAKE_SOURCE_DIR}/boxes/make_boxes.sh
bash ${CMAKE_SOURCE_DIR}/boxes/busybox/build_trixie.sh ${CMAKE_CURRENT_BINARY_DIR}
DEPENDS
make_boxes.sh
)
${LEGACY_BOX_SCRIPTS}
WORKING_DIRECTORY
${CMAKE_CURRENT_BINARY_DIR}
)

ADD_CUSTOM_COMMAND(
OUTPUT
python2.tar.gz
COMMAND
bash ${CMAKE_SOURCE_DIR}/boxes/python/build_python2.7.sh ${CMAKE_CURRENT_BINARY_DIR}
DEPENDS
${LEGACY_BOX_SCRIPTS}
WORKING_DIRECTORY
${CMAKE_CURRENT_BINARY_DIR}
)

ADD_CUSTOM_COMMAND(
OUTPUT
python3.tar.gz
COMMAND
bash ${CMAKE_SOURCE_DIR}/boxes/python/build_python3_minimal.sh ${CMAKE_CURRENT_BINARY_DIR}
DEPENDS
${LEGACY_BOX_SCRIPTS}
WORKING_DIRECTORY
${CMAKE_CURRENT_BINARY_DIR}
)

ADD_CUSTOM_COMMAND(
OUTPUT
python3_9.tar.gz
COMMAND
bash ${CMAKE_SOURCE_DIR}/boxes/python/build_python3_9_numpy.sh ${CMAKE_CURRENT_BINARY_DIR}
DEPENDS
${LEGACY_BOX_SCRIPTS}
WORKING_DIRECTORY
${CMAKE_CURRENT_BINARY_DIR}
)

SET(TEST_BOX_ARCHIVES
minimal.tar.gz
busybox.tar.gz
python2.tar.gz
python3.tar.gz
python3_9.tar.gz
)

ADD_CUSTOM_COMMAND(
OUTPUT
boxes_extraction_stamp.txt
COMMAND
tar -xvf minimal.tar.gz
&& tar -xvf busybox.tar.gz
&& tar -xvf python2.tar.gz
&& tar -xvf python3.tar.gz
&& tar -xvf compiler-python3.9.2-numpy_amd64.tar.gz && mv compiler-python3.9.2-numpy_amd64 python3_9
&& touch boxes_extraction_stamp.txt
for archive in ${TEST_BOX_ARCHIVES} \; do
tar -xf "$$archive" \;
done
&& touch boxes_extraction_stamp.txt
DEPENDS
minimal.tar.gz busybox.tar.gz python2.tar.gz python3.tar.gz compiler-python3.9.2-numpy_amd64.tar.gz
)
${TEST_BOX_ARCHIVES}
WORKING_DIRECTORY
${CMAKE_CURRENT_BINARY_DIR}
)

ADD_CUSTOM_TARGET(boxes
DEPENDS
boxes_extraction_stamp.txt
)
)

IF(NOT DEFINED WITH_BOXES)
SET(WITH_BOXES "NO")
ENDIF()
IF(NOT WITH_BOXES MATCHES "YES|NO")
MESSAGE(FATAL_ERROR "WITH_BOXES should be one of YES, NO")
ENDIF()
IF (WITH_BOXES STREQUAL "YES")
INSTALL(FILES download_boxes.sh make_boxes.sh utils.sh
IF(WITH_BOXES STREQUAL "YES")
INSTALL(FILES
build_all.sh
utils.sh
DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/sio2jail/boxes"
PERMISSIONS OWNER_READ OWNER_EXECUTE)
INSTALL(DIRECTORY
minimal busybox cpp python java kotlin
DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/sio2jail/boxes"
PERMISSIONS OWNER_READ OWNER_EXECUTE)
FILE_PERMISSIONS OWNER_READ OWNER_EXECUTE)
ENDIF()
17 changes: 0 additions & 17 deletions boxes/README.md

This file was deleted.

71 changes: 71 additions & 0 deletions boxes/build_all.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
#!/usr/bin/env bash
set -e

# Build all sio2jail sandbox boxes (new debootstrap-based boxes only)
#
# Usage:
# sudo ./build_all.sh # build all boxes to ./build
# sudo ./build_all.sh /tmp/boxes # build all boxes to /tmp/boxes
# sudo ./build_all.sh ./build gcc14 openjdk21 # build only selected boxes

BOXES_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$BOXES_ROOT/utils.sh"
trap cleanup EXIT

source "$BOXES_ROOT/cpp/build_gcc14.sh"
source "$BOXES_ROOT/python/build_cpython3.13_numpy.sh"
source "$BOXES_ROOT/python/build_pypy3.11.sh"
source "$BOXES_ROOT/java/build_openjdk21.sh"
source "$BOXES_ROOT/kotlin/build_kotlin1.9.24.sh"

ALL_BOXES="gcc14 cpython3_13_numpy pypy3_11 openjdk21 kotlin1_9_24"

build_box() {
local name="$1"
case "$name" in
gcc14) build_gcc14 ;;
cpython3_13_numpy) build_cpython3_13_numpy ;;
pypy3_11) build_pypy3_11 ;;
openjdk21) build_openjdk21 ;;
kotlin1_9_24) build_kotlin1_9_24 ;;
*)
echo "Unknown box: $name"
echo "Available boxes: $ALL_BOXES"
exit 1
;;
esac
cleanup
CHROOT_DIR=""
}

main() {
check_dependencies

# First argument is output dir (or default)
local output_dir="${1:-$(pwd)/build}"
shift 2>/dev/null || true

init_work_dir "$output_dir"

# Clear manifest
echo -n > "$MANIFEST"

# Remaining arguments are box names, or build all
local boxes_to_build="${@:-$ALL_BOXES}"

echo "Starting box builds in: $WORK_DIR"
echo "Boxes: $boxes_to_build"
echo

for box in $boxes_to_build; do
build_box "$box"
done

echo
echo "=== Build complete ==="
echo "Archives created in: $WORK_DIR/"
echo "Manifest: $MANIFEST"
cat "$MANIFEST"
}

main "$@"
27 changes: 27 additions & 0 deletions boxes/busybox/build_trixie.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#!/usr/bin/env bash
set -e

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/../utils.sh"

build_busybox_trixie() {
export BOX="busybox"

echo "=== Creating busybox sandbox ==="

empty_box
extract_deb "busybox/busybox_1.22.0-19+b3_amd64.deb"
extract_deb "glibc/libc6_2.24-11+deb9u4_amd64.deb"
extract_deb "gcc-6/libgcc1_6.3.0-18+deb9u1_amd64.deb"
extract_deb "gcc-6/gcc-6-base_6.3.0-18+deb9u1_amd64.deb"

build_legacy_box
clean_legacy_box

echo "Busybox box created: $WORK_DIR/$BOX.tar.gz"
}

if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
init_work_dir "${1:-}"
build_busybox_trixie
fi
33 changes: 33 additions & 0 deletions boxes/cpp/build_gcc14.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/usr/bin/env bash
set -e

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/../utils.sh"

build_gcc14() {
local box_name="compiler-gcc.14_2_0"
local archive_name="${box_name}.tar.gz"
CHROOT_DIR="$WORK_DIR/$box_name"

echo "=== Creating G++ 14 sandbox ==="

create_base_system "$CHROOT_DIR"

install_packages "$CHROOT_DIR" \
g++-14 \
libc6-dev \
libstdc++-14-dev

sudo chroot "$CHROOT_DIR" update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-14 100

minimize_system "$CHROOT_DIR"
create_archive "$CHROOT_DIR" "$archive_name"

echo "G++ 14 box created: $WORK_DIR/$archive_name"
}

if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
check_dependencies
init_work_dir "${1:-}"
build_gcc14
fi
42 changes: 0 additions & 42 deletions boxes/download_boxes.sh

This file was deleted.

34 changes: 34 additions & 0 deletions boxes/java/build_openjdk21.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#!/usr/bin/env bash
set -e

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/../utils.sh"

build_openjdk21() {
local box_name="compiler-java.21"
local archive_name="${box_name}.tar.gz"
CHROOT_DIR="$WORK_DIR/$box_name"

echo "=== Creating OpenJDK 21 sandbox ==="

create_base_system "$CHROOT_DIR"

install_packages "$CHROOT_DIR" openjdk-21-jdk-headless

echo "/usr/lib/jvm/java-21-openjdk-amd64/lib" | sudo tee "$CHROOT_DIR/etc/ld.so.conf.d/java.conf"
sudo chroot "$CHROOT_DIR" /sbin/ldconfig

sudo chroot "$CHROOT_DIR" java -version
sudo chroot "$CHROOT_DIR" javac -version

minimize_system "$CHROOT_DIR"
create_archive "$CHROOT_DIR" "$archive_name"

echo "OpenJDK 21 box created: $WORK_DIR/$archive_name"
}

if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
check_dependencies
init_work_dir "${1:-}"
build_openjdk21
fi
Loading