diff options
Diffstat (limited to 'nixpkgs/pkgs/os-specific/linux/busybox/default.nix')
-rw-r--r-- | nixpkgs/pkgs/os-specific/linux/busybox/default.nix | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/os-specific/linux/busybox/default.nix b/nixpkgs/pkgs/os-specific/linux/busybox/default.nix new file mode 100644 index 00000000000..40b44514f1b --- /dev/null +++ b/nixpkgs/pkgs/os-specific/linux/busybox/default.nix @@ -0,0 +1,113 @@ +{ stdenv, lib, buildPackages, fetchurl +, enableStatic ? false +, enableMinimal ? false +# Allow forcing musl without switching stdenv itself, e.g. for our bootstrapping: +# nix build -f pkgs/top-level/release.nix stdenvBootstrapTools.x86_64-linux.dist +, useMusl ? stdenv.hostPlatform.libc == "musl", musl +, extraConfig ? "" +}: + +assert stdenv.hostPlatform.libc == "musl" -> useMusl; + +let + configParser = '' + function parseconfig { + while read LINE; do + NAME=`echo "$LINE" | cut -d \ -f 1` + OPTION=`echo "$LINE" | cut -d \ -f 2` + + if ! [[ "$NAME" =~ ^CONFIG_ ]]; then continue; fi + + echo "parseconfig: removing $NAME" + sed -i /$NAME'\(=\| \)'/d .config + + echo "parseconfig: setting $NAME=$OPTION" + echo "$NAME=$OPTION" >> .config + done + } + ''; + + libcConfig = lib.optionalString useMusl '' + CONFIG_FEATURE_UTMP n + CONFIG_FEATURE_WTMP n + ''; +in + +stdenv.mkDerivation rec { + name = "busybox-1.30.1"; + + # Note to whoever is updating busybox: please verify that: + # nix-build pkgs/stdenv/linux/make-bootstrap-tools.nix -A test + # still builds after the update. + src = fetchurl { + url = "https://busybox.net/downloads/${name}.tar.bz2"; + sha256 = "1p7vbnwj60q6zkzrzq3pa8ybb7mviv2aa5a8g7s4hh6kvfj0879x"; + }; + + hardeningDisable = [ "format" "pie" ] + ++ lib.optionals enableStatic [ "fortify" ]; + + patches = [ + ./busybox-in-store.patch + ] ++ stdenv.lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) ./clang-cross.patch; + + postPatch = "patchShebangs ."; + + configurePhase = '' + export KCONFIG_NOTIMESTAMP=1 + make ${if enableMinimal then "allnoconfig" else "defconfig"} + + ${configParser} + + cat << EOF | parseconfig + + CONFIG_PREFIX "$out" + CONFIG_INSTALL_NO_USR y + + CONFIG_LFS y + + ${lib.optionalString enableStatic '' + CONFIG_STATIC y + ''} + + # Use the external mount.cifs program. + CONFIG_FEATURE_MOUNT_CIFS n + CONFIG_FEATURE_MOUNT_HELPERS y + + # Set paths for console fonts. + CONFIG_DEFAULT_SETFONT_DIR "/etc/kbd" + + # Bump from 4KB, much faster I/O + CONFIG_FEATURE_COPYBUF_KB 64 + + ${extraConfig} + CONFIG_CROSS_COMPILER_PREFIX "${stdenv.cc.targetPrefix}" + ${libcConfig} + EOF + + make oldconfig + + runHook postConfigure + ''; + + postConfigure = lib.optionalString (useMusl && stdenv.hostPlatform.libc != "musl") '' + makeFlagsArray+=("CC=${stdenv.cc.targetPrefix}cc -isystem ${musl.dev}/include -B${musl}/lib -L${musl}/lib") + ''; + + depsBuildBuild = [ buildPackages.stdenv.cc ]; + + buildInputs = lib.optionals (enableStatic && !useMusl && stdenv.cc.libc ? static) [ stdenv.cc.libc stdenv.cc.libc.static ]; + + enableParallelBuilding = true; + + doCheck = false; # tries to access the net + + meta = with stdenv.lib; { + description = "Tiny versions of common UNIX utilities in a single small executable"; + homepage = https://busybox.net/; + license = licenses.gpl2; + maintainers = with maintainers; [ ]; + platforms = platforms.linux; + priority = 10; + }; +} |