aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/pkgs/os-specific/linux/busybox/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/os-specific/linux/busybox/default.nix')
-rw-r--r--nixpkgs/pkgs/os-specific/linux/busybox/default.nix113
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;
+ };
+}