pkgsrc
pkgsrc is a framework for building packages on NetBSD and other operating systems. It consists of a huge repository of packages, and is a convenient way to extend oasis with packages that aren't available in the base system.
Getting pkgsrc
See http://www.netbsd.org/docs/pkgsrc/getting.html for the official documentation.
I maintain a branch of the pkgsrc git mirror, and recommend using
that and cloning into /src/pkgsrc.
git clone -c 'core.sharedRepository=group' https://github.com/oasislinux/pkgsrc.git /src/pkgsrcBootstrap
To avoid a circular dependency with flex, bash, and bison, make sure to install flex in oasis.
Since oasis uses unconventional tools compared to most Linux systems, a few tweaks are needed to get it to bootstrap and function correctly.
doas env groupsprog='id -Gn' FGREP='/bin/grep -F' EGREP='/bin/grep -E' TOUCH_FLAGS= \ ./bootstrap/bootstrap --prefix /pkg --prefer-pkgsrc yes --mk-fragment - <<EOF MACHINE_GNU_PLATFORM= x86_64-unknown-linux-musl BUILDLINK_TRANSFORM+= rm:-lbsd COMPILER_INCLUDE_DIRS= /include LIBABISUFFIX= ROOT_CMD= doas sh -c TOOLS_PLATFORM.bash= TOOLS_PLATFORM.lex= /bin/lex TOOLS_PLATFORM.flex= /bin/flex TOOLS_PLATFORM.gm4= TOOLS_PLATFORM.gsed= TOOLS_PLATFORM.m4= /bin/m4 TOOLS_PLATFORM.ninja= /bin/samu TOOLS_PLATFORM.patch= /bin/patch TOOLS_PLATFORM.pax= /bin/pax TOOLS_PLATFORM.sed= /bin/sed TOUCH_FLAGS= EOF
Here is an explanation for the purpose of the various make variables:
-
MACHINE_GNU_PLATFORM: Otherwise, this gets set tox86_64-unknown-linux, which gets canonicalized asx86_64-unknown-linux-gnu. -
BUILDLINK_TRANSFORM: Some X11 packages include<bsd/stdlib.h>based on the presence oflibbsd.a. We don't have this header, so instead, pretend thatlibbsd.adoesn't exist. -
COMPILER_INCLUDE_DIRS: Search for headers in/include, not/usr/include. -
LIBABISUFFIX: Search for libraries in/lib, not/lib64. -
ROOT_CMD: We don't havesu, so usedoasinstead. -
TOOLS_PLATFORM.bash: On Linux, bash is assumed to be installed, but we don't have it. -
TOOLS_PLATFORM.flex: flex isn't auto-detected on Linux, so specify it explicitly. -
TOOLS_PLATFORM.gm4: On Linux, anym4is assumed to be GNU m4, but we use OpenBSD m4. -
TOOLS_PLATFORM.gsed: On Linux, anysedis assumed to be GNU sed, but we use sbase sed. -
TOOLS_PLATFORM.ninja: We have samurai instead of ninja, and ninja currently fails to build against musl libc. -
TOOLS_PLATFORM.sed: On Linux, this is set to${TOOLS_PLATFORM.gsed}which we cleared, so set this explicitly. -
TOUCH_FLAGS: sbasetouchdoesn't support-f(a no-op compatibility flag), which is applied by default.
If you only want to install pkgsrc locally, pass --unprivileged.
You may also want to set MAKE_JOBS in your /etc/mk.conf.