From c9d55d94d7b32293f22dafad9bdb2f2c83789166 Mon Sep 17 00:00:00 2001 From: tushat123 Date: Tue, 30 Dec 2025 14:50:54 +0530 Subject: [PATCH] added monog 8.2.3 build --- library/mongo/8.2.3/.dockerignore | 3 + library/mongo/8.2.3/.gitignore | 4 + library/mongo/8.2.3/Dockerfile | 90 +++++++++++++++++++ library/mongo/8.2.3/Kraftfile | 142 ++++++++++++++++++++++++++++++ library/mongo/8.2.3/README.md | 74 ++++++++++++++++ 5 files changed, 313 insertions(+) create mode 100644 library/mongo/8.2.3/.dockerignore create mode 100644 library/mongo/8.2.3/.gitignore create mode 100644 library/mongo/8.2.3/Dockerfile create mode 100644 library/mongo/8.2.3/Kraftfile create mode 100644 library/mongo/8.2.3/README.md diff --git a/library/mongo/8.2.3/.dockerignore b/library/mongo/8.2.3/.dockerignore new file mode 100644 index 00000000..a154b6ff --- /dev/null +++ b/library/mongo/8.2.3/.dockerignore @@ -0,0 +1,3 @@ +/Makefile.uk +/.unikraft/ +/.config* diff --git a/library/mongo/8.2.3/.gitignore b/library/mongo/8.2.3/.gitignore new file mode 100644 index 00000000..72159c30 --- /dev/null +++ b/library/mongo/8.2.3/.gitignore @@ -0,0 +1,4 @@ +/Makefile.uk +/.unikraft/ +/.config* +/build.* diff --git a/library/mongo/8.2.3/Dockerfile b/library/mongo/8.2.3/Dockerfile new file mode 100644 index 00000000..b02e7faa --- /dev/null +++ b/library/mongo/8.2.3/Dockerfile @@ -0,0 +1,90 @@ +FROM mongo:8.2.3 as build + +RUN apt-get update && apt-get install -y binutils && \ + strip --strip-all /usr/bin/mongod && \ + mkdir /home/tmp + +FROM alpine:3 AS sys + +RUN set -xe; \ + mkdir -p /target/etc; \ + mkdir -p /blank; \ + apk --no-cache add \ + ca-certificates \ + tzdata \ + ; \ + update-ca-certificates; \ + ln -sf ../usr/share/zoneinfo/Etc/UTC /target/etc/localtime; \ + echo "Etc/UTC" > /target/etc/timezone; \ + # Create fake /sys/devices/system/cpu for tcmalloc + mkdir -p /target/sys/devices/system/cpu/cpu0/cache/index3; \ + mkdir -p /target/sys/devices/system/cpu/cpu0/topology; \ + mkdir -p /target/sys/devices/system/node/node0; \ + mkdir -p /target/sys/fs/cgroup; \ + echo "0" > /target/sys/devices/system/cpu/possible; \ + echo "0" > /target/sys/devices/system/cpu/online; \ + echo "0" > /target/sys/devices/system/cpu/present; \ + echo "0" > /target/sys/devices/system/node/node0/cpulist; \ + echo "0" > /target/sys/devices/system/cpu/cpu0/cache/index3/shared_cpu_list; \ + echo "0" > /target/sys/devices/system/cpu/cpu0/topology/core_cpus_list; \ + echo "0" > /target/sys/devices/system/cpu/cpu0/topology/physical_package_id; \ + echo "0" > /target/sys/devices/system/cpu/cpu0/topology/core_id; \ + echo "max" > /target/sys/fs/cgroup/memory.max; \ + # Create fake /proc files + mkdir -p /target/proc/sys/crypto; \ + printf "processor\t: 0\nvendor_id\t: GenuineIntel\ncpu family\t: 6\nmodel\t\t: 158\nmodel name\t: Intel Core\nstepping\t: 10\ncpu MHz\t\t: 2400.000\ncache size\t: 8192 KB\nphysical id\t: 0\nsiblings\t: 1\ncore id\t\t: 0\ncpu cores\t: 1\nflags\t\t: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves arat\nbogomips\t: 4800.00\nclflush size\t: 64\ncache_alignment\t: 64\naddress sizes\t: 39 bits physical, 48 bits virtual\n\n" > /target/proc/cpuinfo; \ + echo "0" > /target/proc/sys/crypto/fips_enabled; \ + echo "1" > /target/proc/stat; \ + mkdir -p /target/etc/gnutls; \ + touch /target/etc/gnutls/config; + +FROM scratch + +COPY --from=sys /target/etc /etc +COPY --from=sys /usr/share/zoneinfo/Etc/UTC /usr/share/zoneinfo/Etc/UTC +COPY --from=sys /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt +COPY --from=sys /blank /tmp +COPY --from=sys /target/sys /sys +COPY --from=sys /target/proc /proc + +# OpenSSl cfg +COPY --from=build /usr/lib/ssl/openssl.cnf /usr/lib/ssl/openssl.cnf + +# Binary executable +COPY --from=build /usr/bin/mongod /usr/bin/mongod + +# System libraries +COPY --from=build /lib64/ld-linux-x86-64.so.2 /lib64/ld-linux-x86-64.so.2 +COPY --from=build /lib/x86_64-linux-gnu/libcurl.so.4 /lib/x86_64-linux-gnu/libcurl.so.4 +COPY --from=build /lib/x86_64-linux-gnu/libssl.so.3 /lib/x86_64-linux-gnu/libssl.so.3 +COPY --from=build /lib/x86_64-linux-gnu/libcrypto.so.3 /lib/x86_64-linux-gnu/libcrypto.so.3 +COPY --from=build /lib/x86_64-linux-gnu/libresolv.so.2 /lib/x86_64-linux-gnu/libresolv.so.2 +COPY --from=build /lib/x86_64-linux-gnu/libm.so.6 /lib/x86_64-linux-gnu/libm.so.6 +COPY --from=build /lib/x86_64-linux-gnu/libgcc_s.so.1 /lib/x86_64-linux-gnu/libgcc_s.so.1 +COPY --from=build /lib/x86_64-linux-gnu/libc.so.6 /lib/x86_64-linux-gnu/libc.so.6 +COPY --from=build /lib/x86_64-linux-gnu/libnghttp2.so.14 /lib/x86_64-linux-gnu/libnghttp2.so.14 +COPY --from=build /lib/x86_64-linux-gnu/libidn2.so.0 /lib/x86_64-linux-gnu/libidn2.so.0 +COPY --from=build /lib/x86_64-linux-gnu/librtmp.so.1 /lib/x86_64-linux-gnu/librtmp.so.1 +COPY --from=build /lib/x86_64-linux-gnu/libssh.so.4 /lib/x86_64-linux-gnu/libssh.so.4 +COPY --from=build /lib/x86_64-linux-gnu/libpsl.so.5 /lib/x86_64-linux-gnu/libpsl.so.5 +COPY --from=build /lib/x86_64-linux-gnu/libgssapi_krb5.so.2 /lib/x86_64-linux-gnu/libgssapi_krb5.so.2 +COPY --from=build /lib/x86_64-linux-gnu/libldap.so.2 /lib/x86_64-linux-gnu/libldap.so.2 +COPY --from=build /lib/x86_64-linux-gnu/liblber.so.2 /lib/x86_64-linux-gnu/liblber.so.2 +COPY --from=build /lib/x86_64-linux-gnu/libzstd.so.1 /lib/x86_64-linux-gnu/libzstd.so.1 +COPY --from=build /lib/x86_64-linux-gnu/libbrotlidec.so.1 /lib/x86_64-linux-gnu/libbrotlidec.so.1 +COPY --from=build /lib/x86_64-linux-gnu/libz.so.1 /lib/x86_64-linux-gnu/libz.so.1 +COPY --from=build /lib/x86_64-linux-gnu/libunistring.so.5 /lib/x86_64-linux-gnu/libunistring.so.5 +COPY --from=build /lib/x86_64-linux-gnu/libgnutls.so.30 /lib/x86_64-linux-gnu/libgnutls.so.30 +COPY --from=build /lib/x86_64-linux-gnu/libhogweed.so.6 /lib/x86_64-linux-gnu/libhogweed.so.6 +COPY --from=build /lib/x86_64-linux-gnu/libnettle.so.8 /lib/x86_64-linux-gnu/libnettle.so.8 +COPY --from=build /lib/x86_64-linux-gnu/libgmp.so.10 /lib/x86_64-linux-gnu/libgmp.so.10 +COPY --from=build /lib/x86_64-linux-gnu/libkrb5.so.3 /lib/x86_64-linux-gnu/libkrb5.so.3 +COPY --from=build /lib/x86_64-linux-gnu/libk5crypto.so.3 /lib/x86_64-linux-gnu/libk5crypto.so.3 +COPY --from=build /lib/x86_64-linux-gnu/libcom_err.so.2 /lib/x86_64-linux-gnu/libcom_err.so.2 +COPY --from=build /lib/x86_64-linux-gnu/libkrb5support.so.0 /lib/x86_64-linux-gnu/libkrb5support.so.0 +COPY --from=build /lib/x86_64-linux-gnu/libsasl2.so.2 /lib/x86_64-linux-gnu/libsasl2.so.2 +COPY --from=build /lib/x86_64-linux-gnu/libbrotlicommon.so.1 /lib/x86_64-linux-gnu/libbrotlicommon.so.1 +COPY --from=build /lib/x86_64-linux-gnu/libp11-kit.so.0 /lib/x86_64-linux-gnu/libp11-kit.so.0 +COPY --from=build /lib/x86_64-linux-gnu/libtasn1.so.6 /lib/x86_64-linux-gnu/libtasn1.so.6 +COPY --from=build /lib/x86_64-linux-gnu/libkeyutils.so.1 /lib/x86_64-linux-gnu/libkeyutils.so.1 +COPY --from=build /lib/x86_64-linux-gnu/libffi.so.8 /lib/x86_64-linux-gnu/libffi.so.8 diff --git a/library/mongo/8.2.3/Kraftfile b/library/mongo/8.2.3/Kraftfile new file mode 100644 index 00000000..e9c724d3 --- /dev/null +++ b/library/mongo/8.2.3/Kraftfile @@ -0,0 +1,142 @@ +spec: v0.6 + +name: mongo + +rootfs: ./Dockerfile + +cmd: ["/usr/bin/mongod", "--bind_ip_all"] + +template: + source: https://github.com/unikraft/app-elfloader.git + version: staging + +unikraft: + source: https://github.com/unikraft/unikraft.git + version: staging + kconfig: + # Configurations options for app-elfloader + # (they can't be part of the template atm) + CONFIG_LIBPOSIX_PROCESS_ARCH_PRCTL: 'y' + CONFIG_APPELFLOADER_BRK: 'y' + CONFIG_APPELFLOADER_CUSTOMAPPNAME: 'y' + CONFIG_APPELFLOADER_STACK_NBPAGES: 512 + CONFIG_APPELFLOADER_VFSEXEC_EXECBIT: 'n' + CONFIG_APPELFLOADER_VFSEXEC: 'y' + CONFIG_APPELFLOADER_AUTOGEN_REPLACEEXIST: 'y' + # Architecture - use generic to avoid AVX requirement at boot + # The loaded binary (mongod) may still use AVX instructions + CONFIG_MARCH_X86_64_GENERIC: 'y' + # Debugging + CONFIG_LIBUKDEBUG_PRINTK_INFO: 'y' + CONFIG_LIBUKDEBUG_PRINTK_DEBUG: 'y' + # Unikraft options + CONFIG_HAVE_PAGING_DIRECTMAP: 'y' + CONFIG_HAVE_PAGING: 'y' + CONFIG_I8042: 'y' + CONFIG_LIBDEVFS_AUTOMOUNT: 'y' + CONFIG_LIBDEVFS_DEV_NULL: 'y' + CONFIG_LIBDEVFS_DEV_STDOUT: 'y' + CONFIG_LIBDEVFS_DEV_ZERO: 'y' + CONFIG_LIBDEVFS: 'y' + CONFIG_LIBPOSIX_ENVIRON_ENVP0: "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + CONFIG_LIBPOSIX_ENVIRON_ENVP1: "LD_LIBRARY_PATH=/usr/local/lib:/usr/lib:/lib" + CONFIG_LIBPOSIX_ENVIRON_ENVP2: "HOME=/" + CONFIG_LIBPOSIX_ENVIRON_ENVP3: "TCMALLOC_OVERRIDE_NPROCS=1" + CONFIG_LIBPOSIX_ENVIRON_ENVP4: "PERCPU_ARENA=phycpu" + CONFIG_LIBPOSIX_ENVIRON: 'y' + CONFIG_LIBPOSIX_ENVIRON_LIBPARAM: 'y' + CONFIG_LIBPOSIX_ENVIRON_LIBPARAM_MAXCOUNT: '64' + CONFIG_LIBPOSIX_EVENTFD: 'y' + CONFIG_LIBPOSIX_FDIO: 'y' + CONFIG_LIBPOSIX_FDTAB: 'y' + CONFIG_LIBPOSIX_FUTEX: 'y' + CONFIG_LIBPOSIX_MMAP: 'y' + CONFIG_LIBPOSIX_PIPE: 'y' + CONFIG_LIBPOSIX_POLL: 'y' + CONFIG_LIBPOSIX_PROCESS: 'y' + CONFIG_LIBPOSIX_PROCESS_MULTITHREADING: 'y' + CONFIG_LIBPOSIX_SOCKET: 'y' + CONFIG_LIBPOSIX_SYSINFO: 'y' + CONFIG_LIBPOSIX_TIME: 'y' + CONFIG_LIBPOSIX_TIMERFD: 'y' + CONFIG_LIBPOSIX_UNIXSOCKET: 'y' + CONFIG_LIBPOSIX_USER_GID: 0 + CONFIG_LIBPOSIX_USER_GROUPNAME: "root" + CONFIG_LIBPOSIX_USER_UID: 0 + CONFIG_LIBPOSIX_USER_USERNAME: "root" + CONFIG_LIBPOSIX_USER: 'y' + CONFIG_LIBRAMFS: 'y' + CONFIG_LIBSYSCALL_SHIM_HANDLER_ULTLS: 'y' + CONFIG_LIBSYSCALL_SHIM_HANDLER: 'y' + CONFIG_LIBSYSCALL_SHIM_LEGACY_VERBOSE: 'n' + CONFIG_LIBSYSCALL_SHIM: 'y' + CONFIG_LIBUKALLOCPOOL: 'y' + CONFIG_LIBUKBLKDEV_MAXNBQUEUES: '1' + CONFIG_LIBUKBLKDEV_DISPATCHERTHREADS: 'y' + CONFIG_LIBUKBLKDEV_SYNC_IO_BLOCKED_WAITING: 'y' + CONFIG_LIBUKBLKDEV: 'y' + CONFIG_LIBUKBOOT_BANNER_MINIMAL: 'y' + CONFIG_LIBUKBOOT_HEAP_BASE: '0x400000000' + CONFIG_LIBUKBOOT_MAINTHREAD: 'y' + CONFIG_LIBUKBOOT_SHUTDOWNREQ_HANDLER: 'y' + CONFIG_LIBUKCPIO: 'y' + CONFIG_LIBUKDEBUG_CRASH_SCREEN: 'y' + CONFIG_LIBUKDEBUG_ENABLE_ASSERT: 'y' + CONFIG_LIBUKDEBUG_PRINT_SRCNAME: 'n' + CONFIG_LIBUKDEBUG_PRINT_TIME: 'y' + CONFIG_LIBUKDEBUG_PRINTK_ERR: 'y' + CONFIG_LIBUKDEBUG_PRINTK: 'y' + CONFIG_LIBUKDEBUG: 'y' + CONFIG_LIBUKFALLOC: 'y' + CONFIG_LIBUKMPI: 'n' + CONFIG_LIBUKSIGNAL: 'y' + CONFIG_LIBUKRANDOM_DEVFS: 'y' + CONFIG_LIBUKRANDOM: 'y' + CONFIG_LIBUKRANDOM_GETRANDOM: 'y' + CONFIG_LIBUKVMEM_DEFAULT_BASE: '0x0000001000000000' + CONFIG_LIBUKVMEM_DEMAND_PAGE_IN_SIZE: 12 + CONFIG_LIBUKVMEM_PAGEFAULT_HANDLER_PRIO: 4 + CONFIG_LIBUKVMEM: 'y' + CONFIG_LIBVFSCORE_AUTOMOUNT_CI: 'y' + CONFIG_LIBVFSCORE_AUTOMOUNT_CI_EINITRD: 'y' + CONFIG_LIBVFSCORE_NONLARGEFILE: 'y' + CONFIG_LIBVFSCORE: 'y' + CONFIG_OPTIMIZE_DEADELIM: 'y' + CONFIG_OPTIMIZE_LTO: 'y' + CONFIG_PAGING: 'y' + CONFIG_STACK_SIZE_PAGE_ORDER: 4 # 128 * 4K = 512K + CONFIG_UKPLAT_MEMREGION_MAX_COUNT: 64 + CONFIG_LIBUKNETDEV_EINFO_LIBPARAM: 'y' + + # Debug options + # CONFIG_LIBUKDEBUG_PRINTD: 'y' + CONFIG_LIBUKDEBUG_PRINTK_INFO: 'y' + CONFIG_LIBSYSCALL_SHIM_STRACE: 'n' + # CONFIG_LIBSYSCALL_SHIM_DEBUG: 'y' + +libraries: + lwip: + source: https://github.com/unikraft/lib-lwip.git + version: staging + kconfig: + CONFIG_LWIP_TCP: 'y' + CONFIG_LWIP_UDP: 'y' + CONFIG_LWIP_RAW: 'y' + CONFIG_LWIP_WND_SCALE: 'y' + CONFIG_LWIP_TCP_KEEPALIVE: 'y' + CONFIG_LWIP_THREADS: 'y' + CONFIG_LWIP_HEAP: 'y' + CONFIG_LWIP_SOCKET: 'y' + CONFIG_LWIP_AUTOIFACE: 'y' + CONFIG_LWIP_NUM_TCPCON: 64 + CONFIG_LWIP_NUM_TCPLISTENERS: 64 + CONFIG_LWIP_ICMP: 'y' + CONFIG_LWIP_DHCP: 'y' + CONFIG_LWIP_DNS: 'n' + libelf: + source: https://github.com/unikraft/lib-libelf.git + version: staging + +targets: +- fc/x86_64 +- qemu/x86_64 diff --git a/library/mongo/8.2.3/README.md b/library/mongo/8.2.3/README.md new file mode 100644 index 00000000..e9b3d719 --- /dev/null +++ b/library/mongo/8.2.3/README.md @@ -0,0 +1,74 @@ +# MongoDB + +This directory contains the [MongoDB](https://www.mongodb.com/) runtime on Unikraft, in binary compatibility mode. +It starts a MongoDB server instance on Unikraft. + +## Run and Use + +Use `kraft` to run the image and start a Unikraft instance: + +```bash +kraft run --rm -M 1024M -p 27017:27017 --plat qemu --arch x86_64 unikraft.org/mongo:6.0 +``` + +If the `--plat` argument is left out, it defaults to `qemu`. +If the `--arch` argument is left out, it defaults to your system's CPU architecture. + +Once executed, it will open port `27017` and wait for connections. +To test it, use the [`mongo` shell](https://www.mongodb.com/docs/v4.4/mongo/): + +```bash +mongo +``` + +## Inspect and Close + +To list information about the Unikraft instance, use: + +```bash +kraft ps -a +``` + +```text +NAME KERNEL ARGS CREATED STATUS MEM PORTS PLAT +pedantic_snowflake project://mongo:qemu/x86_64 /usr/bin/mongod --bind_ip_all 6 seconds ago running 976M 0.0.0.0:27017->27017/tcp qemu/x86_64 +``` + +The instance name is `pedantic_snowflake`. +To close the Unikraft instance, close the `kraft` process (e.g., via `Ctrl+c`) or run: + +```bash +kraft rm pedantic_snowflake +``` + +## Build and Run Locally + +The commands so far used the pre-built MongoDB image available in the Unikraft registry. + +In order to to build a local MongoDB image, clone this repository and `cd` into this directory. +Then use `kraft` to build an image locally: + +```bash +kraft build --no-cache --no-update --plat qemu --arch x86_64 +``` + +Similar to the `kraft run` command, if the `--plat` argument is left out, it defaults to `qemu`. +If the `--arch` argument is left out, it defaults to your system's CPU architecture. + +In order to run the locally built image, use `.` (_dot_, the current directory) as the final argument to the `kraft run` command: + +```bash +kraft run --rm -M 1024M -p 27017:27017 --plat qemu --arch x86_64 . +``` + +Same as above, it will open port `27017` and wait for connections. + +## `kraft` and `sudo` + +Mixing invocations of `kraft` and `sudo` can lead to unexpected behavior. +Read more about how to start `kraft` without `sudo` at [https://unikraft.org/sudoless](https://unikraft.org/sudoless). + +## Learn More + +- [How to run unikernels locally](https://unikraft.org/docs/cli/running) +- [How to build `Dockerfile` root filesystems with BuildKit](https://unikraft.org/guides/building-dockerfile-images-with-buildkit)