99 echo " CodeName - optional, Code name for Linux, can be: xenial(default), zesty, bionic, alpine"
1010 echo " for alpine can be specified with version: alpineX.YY or alpineedge"
1111 echo " for FreeBSD can be: freebsd13, freebsd14"
12+ echo " for OpenBSD can be: openbsd"
1213 echo " for illumos can be: illumos"
1314 echo " for Haiku can be: haiku."
1415 echo " lldbx.y - optional, LLDB version, can be: lldb3.9(default), lldb4.0, lldb5.0, lldb6.0 no-lldb. Ignored for alpine and FreeBSD"
@@ -27,6 +28,8 @@ __BuildArch=arm
2728__AlpineArch=armv7
2829__FreeBSDArch=arm
2930__FreeBSDMachineArch=armv7
31+ __OpenBSDArch=arm
32+ __OpenBSDMachineArch=armv7
3033__IllumosArch=arm7
3134__HaikuArch=arm
3235__QEMUArch=arm
@@ -82,6 +85,12 @@ __FreeBSDPackages+=" openssl"
8285__FreeBSDPackages+=" krb5"
8386__FreeBSDPackages+=" terminfo-db"
8487
88+ __OpenBSDVersion=" 7.8"
89+ __OpenBSDPackages=" heimdal-libs"
90+ __OpenBSDPackages+=" icu4c"
91+ __OpenBSDPackages+=" inotify-tools"
92+ __OpenBSDPackages+=" openssl"
93+
8594__IllumosPackages=" icu"
8695__IllumosPackages+=" mit-krb5"
8796__IllumosPackages+=" openssl"
@@ -160,6 +169,8 @@ while :; do
160169 __QEMUArch=aarch64
161170 __FreeBSDArch=arm64
162171 __FreeBSDMachineArch=aarch64
172+ __OpenBSDArch=arm64
173+ __OpenBSDMachineArch=aarch64
163174 ;;
164175 armel)
165176 __BuildArch=armel
@@ -235,6 +246,8 @@ while :; do
235246 __UbuntuArch=amd64
236247 __FreeBSDArch=amd64
237248 __FreeBSDMachineArch=amd64
249+ __OpenBSDArch=amd64
250+ __OpenBSDMachineArch=amd64
238251 __illumosArch=x86_64
239252 __HaikuArch=x86_64
240253 __UbuntuRepo=" http://archive.ubuntu.com/ubuntu/"
@@ -385,6 +398,10 @@ while :; do
385398 __FreeBSDABI=" 14"
386399 __SkipUnmount=1
387400 ;;
401+ openbsd)
402+ __CodeName=openbsd
403+ __SkipUnmount=1
404+ ;;
388405 illumos)
389406 __CodeName=illumos
390407 __SkipUnmount=1
@@ -593,6 +610,62 @@ elif [[ "$__CodeName" == "freebsd" ]]; then
593610 INSTALL_AS_USER=$( whoami) " $__RootfsDir " /host/sbin/pkg -r " $__RootfsDir " -C " $__RootfsDir " /usr/local/etc/pkg.conf update
594611 # shellcheck disable=SC2086
595612 INSTALL_AS_USER=$( whoami) " $__RootfsDir " /host/sbin/pkg -r " $__RootfsDir " -C " $__RootfsDir " /usr/local/etc/pkg.conf install --yes $__FreeBSDPackages
613+ elif [[ " $__CodeName " == " openbsd" ]]; then
614+ # determine mirrors
615+ OPENBSD_MIRROR=" https://cdn.openbsd.org/pub/OpenBSD/$__OpenBSDVersion /$__OpenBSDMachineArch "
616+
617+ # download base system sets
618+ ensureDownloadTool
619+
620+ BASE_SETS=(base comp)
621+ for set in " ${BASE_SETS[@]} " ; do
622+ FILE=" ${set}${__OpenBSDVersion// ./ } .tgz"
623+ echo " Downloading $FILE ..."
624+ if [[ " $__hasWget " == 1 ]]; then
625+ wget -O- " $OPENBSD_MIRROR /$FILE " | tar -C " $__RootfsDir " -xzpf -
626+ else
627+ curl -SL " $OPENBSD_MIRROR /$FILE " | tar -C " $__RootfsDir " -xzpf -
628+ fi
629+ done
630+
631+ PKG_MIRROR=" https://cdn.openbsd.org/pub/OpenBSD/${__OpenBSDVersion} /packages/${__OpenBSDMachineArch} "
632+
633+ echo " Installing packages into sysroot..."
634+
635+ # Fetch package index once
636+ if [[ " $__hasWget " == 1 ]]; then
637+ PKG_INDEX=$( wget -qO- " $PKG_MIRROR /" )
638+ else
639+ PKG_INDEX=$( curl -s " $PKG_MIRROR /" )
640+ fi
641+
642+ for pkg in $__OpenBSDPackages ; do
643+ PKG_FILE=$( echo " $PKG_INDEX " | grep -Po " >\K${pkg} -[0-9][^\" ]*\.tgz" \
644+ | sort -V | tail -n1)
645+
646+ echo " Resolved package filename for $pkg : $PKG_FILE "
647+
648+ [[ -z " $PKG_FILE " ]] && { echo " ERROR: Package $pkg not found" ; exit 1; }
649+
650+ if [[ " $__hasWget " == 1 ]]; then
651+ wget -O- " $PKG_MIRROR /$PKG_FILE " | tar -C " $__RootfsDir " -xzpf -
652+ else
653+ curl -SL " $PKG_MIRROR /$PKG_FILE " | tar -C " $__RootfsDir " -xzpf -
654+ fi
655+ done
656+
657+ echo " Creating versionless symlinks for shared libraries..."
658+ # Find all versioned .so files and create the base .so symlink
659+ for lib in " $__RootfsDir /usr/lib/libc++.so." * " $__RootfsDir /usr/lib/libc++abi.so." * " $__RootfsDir /usr/lib/libpthread.so." * ; do
660+ if [ -f " $lib " ]; then
661+ # Extract the filename (e.g., libc++.so.12.0)
662+ VERSIONED_NAME=$( basename " $lib " )
663+ # Remove the trailing version numbers (e.g., libc++.so)
664+ BASE_NAME=${VERSIONED_NAME% .so.* } .so
665+ # Create the symlink in the same directory
666+ ln -sf " $VERSIONED_NAME " " $__RootfsDir /usr/lib/$BASE_NAME "
667+ fi
668+ done
596669elif [[ " $__CodeName " == " illumos" ]]; then
597670 mkdir " $__RootfsDir /tmp"
598671 pushd " $__RootfsDir /tmp"
0 commit comments