From 649ccdd2db16b209338b1903766fd86800bee27a Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 27 Aug 2008 12:59:55 +0000 Subject: * Moved the Linux kernel maintenance notes to the manual, expanded them. svn path=/nixpkgs/trunk/; revision=12739 --- doc/package-notes.xml | 191 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 doc/package-notes.xml (limited to 'doc/package-notes.xml') diff --git a/doc/package-notes.xml b/doc/package-notes.xml new file mode 100644 index 000000000000..6291abbe9bd8 --- /dev/null +++ b/doc/package-notes.xml @@ -0,0 +1,191 @@ + + +Package Notes + +This chapter contains information about how to use and maintain +the Nix expressions for a number of specific packages, such as the +Linux kernel or X.org. + + + + +
+ +Linux kernel + +The Nix expressions to build the Linux kernel are in pkgs/os-specific/linux/kernel. + +The function that builds the kernel has an argument +kernelPatches which should be a list of +{name, patch, extraConfig} attribute sets, where +name is the name of the patch (which is included in +the kernel’s meta.description attribute), +patch is the patch itself (possibly compressed), +and extraConfig (optional) is a string specifying +extra options to be concatenated to the kernel configuration file +(.config). + +The kernel derivation exports an attribute +features specifying whether optional functionality +is or isn’t enabled. This is used in NixOS to implement +kernel-specific behaviour. For instance, if the kernel has the +iwlwifi feature (i.e. has built-in support for +Intel wireless chipsets), then NixOS doesn’t have to build the +external iwlwifi package: + + +modulesTree = [kernel] + ++ pkgs.lib.optional (!kernel.features ? iwlwifi) kernelPackages.iwlwifi + ++ ...; + + + + +How to add a new (major) version of the Linux kernel to Nixpkgs: + + + + + Copy (svn cp) the old Nix expression + (e.g. linux-2.6.21.nix) to the new one + (e.g. linux-2.6.22.nix) and update it. + + + + Add the new kernel to all-packages.nix + (e.g., create an attribute + kernel_2_6_22). + + + + Now we’re going to update the kernel configuration. First + unpack the kernel. Then for each supported platform + (i686, x86_64, + uml) do the following: + + + + + Make an svn copy from the old + config (e.g. config-2.6.21-i686-smp) to + the new one + (e.g. config-2.6.22-i686-smp). + + + + Copy the config file for this platform + (e.g. config-2.6.22-i686-smp) to + .config in the kernel source tree. + + + + + Run make oldconfig + ARCH={i386,x86_64,um} + and answer all questions. (For the uml configuration, also + add SHELL=bash.) Make sure to keep the + configuration consistent between platforms (i.e. don’t + enable some feature on i686 and disable + it on x86_64). + + + + + If needed you can also run make + menuconfig: + + +$ nix-env -i ncurses +$ export NIX_CFLAGS_LINK=-lncurses +$ make menuconfig ARCH=arch + + + + + + Make sure that + CONFIG_FB_TILEBLITTING is not + set (otherwise fbsplash won't + work). This option has a tendency to be enabled as a + side-effect of other options. If it is, investigate why + (there's probably another option that forces it to be on) + and fix it. + + + + Copy .config over the new config + file (e.g. config-2.6.22-i686-smp). + + + + + + + + + + Test building the kernel: nix-build -A + kernel_2_6_22. If it compiles, ship it! For extra + credit, try booting NixOS with it. + + + + It may be that the new kernel requires updating the external + kernel modules and kernel-dependent packages listed in the + kernelPackagesFor function in + all-packages.nix (such as the NVIDIA drivers, + AUFS, splashutils, etc.). If the updated packages aren’t + backwards compatible with older kernels, you need to keep the + older versions and use some conditionals. For example, new + kernels require splashutils 1.5 while old kernel require 1.3, so + kernelPackagesFor says: + + +splashutils = + if kernel.features ? fbSplash then splashutils_13 else + if kernel.features ? fbConDecor then splashutils_15 else + null; + +splashutils_13 = ...; +splashutils_15 = ...; + + + + + + + + +
+ + + + +
+ X.org + * Expression is auto-generated + * How to update +
+ + + + +
+ Gnome + * Expression is auto-generated + * How to update +
+ + + + +
+ GCC + +
+ + +
-- cgit 1.4.1