diff --git a/pkgs/os-specific/linux/kernel/builder-custom.sh b/pkgs/os-specific/linux/kernel/builder-custom.sh deleted file mode 100644 index b4592e74c48e..000000000000 --- a/pkgs/os-specific/linux/kernel/builder-custom.sh +++ /dev/null @@ -1,127 +0,0 @@ -source $stdenv/setup - -configurePhase=configurePhase -configurePhase() { - export INSTALL_PATH=$out - export INSTALL_MOD_PATH=$out - - eval "$preConfigure" - - # Get rid of any "localversion" files installed by patches. - if test -z "$allowLocalVersion"; then - rm -f localversion* - fi - - # Set our own localversion, if specified. - if test -n "$localVersion"; then - echo "$localVersion" > localversion-nix - fi - - - # Create the config file. - cp $config .config - chmod u+w .config - - echo --extraConfig--; - echo "${extraConfig}"; - - echo "$extraConfig" | while read; do - optionName=$( echo "$REPLY" | sed -e 's/[^A-Z_]//g' ); - echo --optionName--; - echo "$REPLY"; - echo ${optionName}; - if [ -n "${optionName}" ]; then - sed -e s/.'*'${optionName}.'*'/"$REPLY/" -i .config - fi; - done; - - echo "$extraConfig" >> .config - - #substituteInPlace scripts/kconfig/lxdialog/check-lxdialog.sh \ - # --replace /usr /no-such-path - - # Necessary until NIXPKGS-38 is fixed: - echo "#! $SHELL" > scripts/kconfig/lxdialog/check-lxdialog.sh - chmod +x scripts/kconfig/lxdialog/check-lxdialog.sh - - make oldconfig \ - $makeFlags "${makeFlagsArray[@]}" - - echo --finalConfig-- - cat .config -} - - -installPhase=installPhase -installPhase() { - - ensureDir $out - - # Copy the bzImage and System.map. - cp System.map $out - if test "$arch" = um; then - ensureDir $out/bin - cp linux $out/bin - else - cp arch/$arch/boot/bzImage $out/vmlinuz - fi - - # Install the modules in $out/lib/modules with matching paths - # in modules.dep (i.e., refererring to $out/lib/modules, not - # /lib/modules). The depmod_opts= is to prevent the kernel - # from passing `-b PATH' to depmod. - export MODULE_DIR=$out/lib/modules/ - make modules_install \ - DEPMOD=$module_init_tools/sbin/depmod depmod_opts= \ - $makeFlags "${makeFlagsArray[@]}" \ - $installFlags "${installFlagsArray[@]}" - - # Strip the kernel modules. - echo "Stripping kernel modules..." - find $out -name "*.ko" -print0 | xargs -0 strip -S - - # move this to install later on - # largely copied from early FC3 kernel spec files - version=$(cd $out/lib/modules && ls -d *) - - # remove symlinks and create directories - rm -f $out/lib/modules/$version/build - rm -f $out/lib/modules/$version/source - mkdir $out/lib/modules/$version/build - - # copy config - cp .config $out/lib/modules/$version/build/.config - - if test "$arch" != um; then - # copy all Makefiles and Kconfig files - ln -s $out/lib/modules/$version/build $out/lib/modules/$version/source - cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $out/lib/modules/$version/build - cp Module.symvers $out/lib/modules/$version/build - - # weed out unneeded stuff - rm -rf $out/lib/modules/$version/build/Documentation - rm -rf $out/lib/modules/$version/build/scripts - rm -rf $out/lib/modules/$version/build/include - - # copy architecture dependent files - cp -a arch/$arch/scripts $out/lib/modules/$version/build || true - cp -a arch/$arch/*lds $out/lib/modules/$version/build || true - cp -a "arch/$arch/Makefile*.cpu" $out/lib/modules/$version/build/arch/$arch || true - cp -a --parents arch/$arch/kernel/asm-offsets.s $out/lib/modules/$version/build/arch/$arch/kernel || true - - # copy scripts - rm -f scripts/*.o - rm -f scripts/*/*.o - cp -a scripts $out/lib/modules/$version/build - - # copy include files - mkdir -p $out/lib/modules/$version/build/include - cd include - cp -a acpi config linux math-emu media net pcmcia rxrpc scsi sound video asm asm-generic $out/lib/modules/$version/build/include - cp -a `readlink asm` $out/lib/modules/$version/build/include - cd .. - fi -} - - -genericBuild diff --git a/pkgs/os-specific/linux/kernel/linux.nix b/pkgs/os-specific/linux/kernel/generic.nix similarity index 66% rename from pkgs/os-specific/linux/kernel/linux.nix rename to pkgs/os-specific/linux/kernel/generic.nix index 788d54583426..11bac64ced7c 100644 --- a/pkgs/os-specific/linux/kernel/linux.nix +++ b/pkgs/os-specific/linux/kernel/generic.nix @@ -1,17 +1,25 @@ -{ stdenv, fetchurl, perl, mktemp, module_init_tools, lib +{ stdenv, fetchurl, perl, mktemp, module_init_tools - # The base source file -, src +, # The kernel source tarball. + src - # A list of patches to apply to the kernel. Each element of this list +, # The kernel version. + version + +, # The kernel configuration. + config + +, # An attribute set whose attributes express the availability of + # certain features in this kernel. E.g. `{iwlwifi = true;}' + # indicates a kernel that provides Intel wireless support. Used in + # NixOS to implement kernel-specific behaviour. + features ? {} + +, # A list of patches to apply to the kernel. Each element of this list # should be an attribute set {name, patch} where `name' is a # symbolic name and `patch' is the actual patch. The patch may # optionally be compressed with gzip or bzip2. -, kernelPatches ? [] - - # A list of commands to run on patched kernel before - # mke oldconfig -, preConfigure? "" + kernelPatches ? [] , # Whether to build a User-Mode Linux kernel. userModeLinux ? false @@ -19,34 +27,25 @@ , # Whether to build a Xen kernel. xen ? false -, # Allows you to set your own kernel version for output - version ? "unknown" - - # To change how kernel thinks of itself -, localVersion ? "" - -, # Your own kernel configuration file, if you don't want to use the - # default. - kernelConfig ? null +, # Allows you to set your own kernel version suffix (e.g., + # "-my-kernel"). + localVersion ? "" , # A list of additional statements to be appended to the # configuration file. extraConfig ? [] - -, features ? [] }: assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux"; let - lib = import ../../../lib; + lib = stdenv.lib; in stdenv.mkDerivation { name = if userModeLinux then "user-mode-linux-${version}" else "linux-${version}"; - builder = ./builder-custom.sh; passthru = { inherit version; @@ -54,28 +53,23 @@ stdenv.mkDerivation { features = lib.fold (x: y: (if x ? features then x.features else {}) // y) features kernelPatches; }; - inherit src; - preConfigure = preConfigure; + builder = ./builder.sh; + inherit src config; + patches = map (p: p.patch) kernelPatches; + extraConfig = let addNewlines = map (s: "\n" + s + "\n"); configFromPatches = map (p: if p ? extraConfig then p.extraConfig else "") kernelPatches; in lib.concatStrings (addNewlines (configFromPatches ++ extraConfig)); - config = - if kernelConfig != null then kernelConfig else - if userModeLinux then ./config-2.6.23-uml else - if stdenv.system == "i686-linux" then ./config-2.6.23-i686-smp else - if stdenv.system == "x86_64-linux" then ./config-2.6.23-x86_64-smp else - abort "No kernel configuration for your platform!"; - buildInputs = [perl mktemp]; arch = - if userModeLinux then "um" else if xen then "xen" else + if userModeLinux then "um" else if stdenv.system == "i686-linux" then "i386" else if stdenv.system == "x86_64-linux" then "x86_64" else abort "Platform ${stdenv.system} is not supported."; diff --git a/pkgs/os-specific/linux/kernel/linux-2.6.28.nix b/pkgs/os-specific/linux/kernel/linux-2.6.28.nix index be110bea33e3..bb42312b6333 100644 --- a/pkgs/os-specific/linux/kernel/linux-2.6.28.nix +++ b/pkgs/os-specific/linux/kernel/linux-2.6.28.nix @@ -1,95 +1,26 @@ -{ stdenv, fetchurl, perl, mktemp, module_init_tools +args @ {stdenv, fetchurl, userModeLinux ? false, ...}: - # A list of patches to apply to the kernel. Each element of this list - # should be an attribute set {name, patch} where `name' is a - # symbolic name and `patch' is the actual patch. The patch may - # optionally be compressed with gzip or bzip2. -, kernelPatches ? [] +assert !userModeLinux; -, # Whether to build a User-Mode Linux kernel. - userModeLinux ? false +import ./generic.nix ( -, # Allows you to set your own kernel version suffix (e.g., - # "-my-kernel"). - localVersion ? "" - -, # Your own kernel configuration file, if you don't want to use the - # default. - kernelConfig ? null - -, # A list of additional statements to be appended to the - # configuration file. - extraConfig ? [] -}: - -assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux"; - -let - - lib = stdenv.lib; - - version = "2.6.28"; - - baseFeatures = { - iwlwifi = true; - }; - -in - -stdenv.mkDerivation { - name = if userModeLinux then "user-mode-linux-${version}" else "linux-${version}"; - - passthru = { - inherit version; - # Combine the `features' attribute sets of all the kernel patches. - features = lib.fold (x: y: (if x ? features then x.features else {}) // y) baseFeatures kernelPatches; - }; + rec { + version = "2.6.28"; - builder = ./builder.sh; - - src = fetchurl { - url = "mirror://kernel/linux/kernel/v2.6/linux-${version}.tar.bz2"; - sha256 = "1023nl992s4qmnwzbfz385azzpph58azi5rw4w0wwzzybv2rf3df"; - }; - - patches = map (p: p.patch) kernelPatches; - extraConfig = - let addNewlines = map (s: "\n" + s + "\n"); - configFromPatches = - map (p: if p ? extraConfig then p.extraConfig else "") kernelPatches; - in lib.concatStrings (addNewlines (configFromPatches ++ extraConfig)); + src = fetchurl { + url = "mirror://kernel/linux/kernel/v2.6/linux-${version}.tar.bz2"; + sha256 = "1023nl992s4qmnwzbfz385azzpph58azi5rw4w0wwzzybv2rf3df"; + }; - config = - if kernelConfig != null then kernelConfig else - if userModeLinux then ./config-2.6.28-uml else - if stdenv.system == "i686-linux" then ./config-2.6.28-i686-smp else - if stdenv.system == "x86_64-linux" then ./config-2.6.28-x86_64-smp else - abort "No kernel configuration for your platform!"; - - buildInputs = [perl mktemp]; - - arch = - if userModeLinux then "um" else - if stdenv.system == "i686-linux" then "i386" else - if stdenv.system == "x86_64-linux" then "x86_64" else - abort "Platform ${stdenv.system} is not supported."; + features = { + iwlwifi = true; + }; + + config = + if stdenv.system == "i686-linux" then ./config-2.6.28-i686-smp else + if stdenv.system == "x86_64-linux" then ./config-2.6.28-x86_64-smp else + abort "No kernel configuration for your platform!"; + } - makeFlags = if userModeLinux then "ARCH=um SHELL=bash" else ""; - - inherit module_init_tools; - - allowLocalVersion = false; # don't allow patches to set a suffix - inherit localVersion; # but do allow the user to set one. - - meta = { - description = - (if userModeLinux then - "User-Mode Linux" - else - "The Linux kernel") + - (if kernelPatches == [] then "" else - " (with patches: " - + lib.concatStrings (lib.intersperse ", " (map (x: x.name) kernelPatches)) - + ")"); - }; -} + // args +)