at 22.05-pre 563 lines 20 kB view raw
1{ pkgs 2, linuxKernel 3, config 4, buildPackages 5, callPackage 6, makeOverridable 7, recurseIntoAttrs 8, dontRecurseIntoAttrs 9, stdenv 10, stdenvNoCC 11, newScope 12, lib 13, fetchurl 14}: 15 16# When adding a kernel: 17 # - Update packageAliases.linux_latest to the latest version 18 # - Update the rev in ../os-specific/linux/kernel/linux-libre.nix to the latest one. 19 # - Update linux_latest_hardened when the patches become available 20 21with linuxKernel; 22 23let 24 deblobKernel = kernel: callPackage ../os-specific/linux/kernel/linux-libre.nix { 25 linux = kernel; 26 }; 27 28 # Hardened Linux 29 hardenedKernelFor = kernel': overrides: 30 let 31 kernel = kernel'.override overrides; 32 version = kernelPatches.hardened.${kernel.meta.branch}.version; 33 major = lib.versions.major version; 34 sha256 = kernelPatches.hardened.${kernel.meta.branch}.sha256; 35 modDirVersion' = builtins.replaceStrings [ kernel.version ] [ version ] kernel.modDirVersion; 36 in kernel.override { 37 structuredExtraConfig = import ../os-specific/linux/kernel/hardened/config.nix { 38 inherit lib version; 39 }; 40 argsOverride = { 41 inherit version; 42 src = fetchurl { 43 url = "mirror://kernel/linux/kernel/v${major}.x/linux-${version}.tar.xz"; 44 inherit sha256; 45 }; 46 }; 47 kernelPatches = kernel.kernelPatches ++ [ 48 kernelPatches.hardened.${kernel.meta.branch} 49 ]; 50 modDirVersionArg = modDirVersion' + (kernelPatches.hardened.${kernel.meta.branch}).extra; 51 isHardened = true; 52 }; 53in { 54 kernelPatches = callPackage ../os-specific/linux/kernel/patches.nix { }; 55 56 kernels = recurseIntoAttrs (lib.makeExtensible (self: with self; 57 let callPackage = newScope self; in { 58 59 linux_mptcp_95 = callPackage ../os-specific/linux/kernel/linux-mptcp-95.nix { 60 kernelPatches = linux_4_19.kernelPatches; 61 }; 62 63 linux_rpi1 = callPackage ../os-specific/linux/kernel/linux-rpi.nix { 64 kernelPatches = with kernelPatches; [ 65 bridge_stp_helper 66 request_key_helper 67 ]; 68 rpiVersion = 1; 69 }; 70 71 linux_rpi2 = callPackage ../os-specific/linux/kernel/linux-rpi.nix { 72 kernelPatches = with kernelPatches; [ 73 bridge_stp_helper 74 request_key_helper 75 ]; 76 rpiVersion = 2; 77 }; 78 79 linux_rpi3 = callPackage ../os-specific/linux/kernel/linux-rpi.nix { 80 kernelPatches = with kernelPatches; [ 81 bridge_stp_helper 82 request_key_helper 83 ]; 84 rpiVersion = 3; 85 }; 86 87 linux_rpi4 = callPackage ../os-specific/linux/kernel/linux-rpi.nix { 88 kernelPatches = with kernelPatches; [ 89 bridge_stp_helper 90 request_key_helper 91 ]; 92 rpiVersion = 4; 93 }; 94 95 linux_4_4 = callPackage ../os-specific/linux/kernel/linux-4.4.nix { 96 kernelPatches = 97 [ kernelPatches.bridge_stp_helper 98 kernelPatches.request_key_helper_updated 99 kernelPatches.cpu-cgroup-v2."4.4" 100 kernelPatches.modinst_arg_list_too_long 101 ]; 102 }; 103 104 linux_4_9 = callPackage ../os-specific/linux/kernel/linux-4.9.nix { 105 kernelPatches = 106 [ kernelPatches.bridge_stp_helper 107 kernelPatches.request_key_helper_updated 108 kernelPatches.cpu-cgroup-v2."4.9" 109 kernelPatches.modinst_arg_list_too_long 110 ]; 111 }; 112 113 linux_4_14 = callPackage ../os-specific/linux/kernel/linux-4.14.nix { 114 kernelPatches = 115 [ kernelPatches.bridge_stp_helper 116 kernelPatches.request_key_helper 117 # See pkgs/os-specific/linux/kernel/cpu-cgroup-v2-patches/README.md 118 # when adding a new linux version 119 kernelPatches.cpu-cgroup-v2."4.11" 120 kernelPatches.modinst_arg_list_too_long 121 ]; 122 }; 123 124 linux_4_19 = callPackage ../os-specific/linux/kernel/linux-4.19.nix { 125 kernelPatches = 126 [ kernelPatches.bridge_stp_helper 127 kernelPatches.request_key_helper 128 kernelPatches.modinst_arg_list_too_long 129 ]; 130 }; 131 132 linux_5_4 = callPackage ../os-specific/linux/kernel/linux-5.4.nix { 133 kernelPatches = [ 134 kernelPatches.bridge_stp_helper 135 kernelPatches.request_key_helper 136 kernelPatches.rtl8761b_support 137 ]; 138 }; 139 140 linux_rt_5_4 = callPackage ../os-specific/linux/kernel/linux-rt-5.4.nix { 141 kernelPatches = [ 142 kernelPatches.bridge_stp_helper 143 kernelPatches.request_key_helper 144 ]; 145 }; 146 147 linux_5_10 = callPackage ../os-specific/linux/kernel/linux-5.10.nix { 148 kernelPatches = [ 149 kernelPatches.bridge_stp_helper 150 kernelPatches.request_key_helper 151 ]; 152 }; 153 154 linux_rt_5_10 = callPackage ../os-specific/linux/kernel/linux-rt-5.10.nix { 155 kernelPatches = [ 156 kernelPatches.bridge_stp_helper 157 kernelPatches.request_key_helper 158 kernelPatches.export-rt-sched-migrate 159 ]; 160 }; 161 162 linux_5_14 = callPackage ../os-specific/linux/kernel/linux-5.14.nix { 163 kernelPatches = [ 164 kernelPatches.bridge_stp_helper 165 kernelPatches.request_key_helper 166 ]; 167 }; 168 169 linux_5_15 = callPackage ../os-specific/linux/kernel/linux-5.15.nix { 170 kernelPatches = [ 171 kernelPatches.bridge_stp_helper 172 kernelPatches.request_key_helper 173 ]; 174 }; 175 176 linux_testing = let 177 testing = callPackage ../os-specific/linux/kernel/linux-testing.nix { 178 kernelPatches = [ 179 kernelPatches.bridge_stp_helper 180 kernelPatches.request_key_helper 181 ]; 182 }; 183 latest = packageAliases.linux_latest.kernel; 184 in if latest.kernelAtLeast testing.baseVersion 185 then latest 186 else testing; 187 188 linux_testing_bcachefs = callPackage ../os-specific/linux/kernel/linux-testing-bcachefs.nix rec { 189 kernel = linux_5_15; 190 kernelPatches = kernel.kernelPatches; 191 }; 192 193 linux_hardkernel_4_14 = callPackage ../os-specific/linux/kernel/linux-hardkernel-4.14.nix { 194 kernelPatches = [ 195 kernelPatches.bridge_stp_helper 196 kernelPatches.request_key_helper 197 kernelPatches.modinst_arg_list_too_long 198 ]; 199 }; 200 201 linux_zen = callPackage ../os-specific/linux/kernel/linux-zen.nix { 202 kernelPatches = [ 203 kernelPatches.bridge_stp_helper 204 kernelPatches.request_key_helper 205 ]; 206 }; 207 208 linux_lqx = callPackage ../os-specific/linux/kernel/linux-lqx.nix { 209 kernelPatches = [ 210 kernelPatches.bridge_stp_helper 211 kernelPatches.request_key_helper 212 ]; 213 }; 214 215 linux_xanmod = callPackage ../os-specific/linux/kernel/linux-xanmod.nix { 216 kernelPatches = [ 217 kernelPatches.bridge_stp_helper 218 kernelPatches.request_key_helper 219 ]; 220 }; 221 222 linux_libre = deblobKernel packageAliases.linux_default.kernel; 223 224 linux_latest_libre = deblobKernel packageAliases.linux_latest.kernel; 225 226 linux_hardened = hardenedKernelFor packageAliases.linux_default.kernel { }; 227 228 linux_4_14_hardened = hardenedKernelFor kernels.linux_4_14 { }; 229 linux_4_19_hardened = hardenedKernelFor kernels.linux_4_19 { }; 230 linux_5_4_hardened = hardenedKernelFor kernels.linux_5_4 { }; 231 linux_5_10_hardened = hardenedKernelFor kernels.linux_5_10 { }; 232 linux_5_14_hardened = hardenedKernelFor kernels.linux_5_14 { }; 233 linux_5_15_hardened = hardenedKernelFor kernels.linux_5_15 { }; 234 235 })); 236 /* Linux kernel modules are inherently tied to a specific kernel. So 237 rather than provide specific instances of those packages for a 238 specific kernel, we have a function that builds those packages 239 for a specific kernel. This function can then be called for 240 whatever kernel you're using. */ 241 242 packagesFor = kernel_: lib.makeExtensible (self: with self; 243 let callPackage = newScope self; in { 244 inherit callPackage; 245 kernel = kernel_; 246 inherit (kernel) stdenv; # in particular, use the same compiler by default 247 248 # to help determine module compatibility 249 inherit (kernel) isZen isHardened isLibre; 250 inherit (kernel) kernelOlder kernelAtLeast; 251 # Obsolete aliases (these packages do not depend on the kernel). 252 inherit (pkgs) odp-dpdk pktgen; # added 2018-05 253 254 acpi_call = callPackage ../os-specific/linux/acpi-call {}; 255 256 akvcam = callPackage ../os-specific/linux/akvcam { }; 257 258 amdgpu-pro = callPackage ../os-specific/linux/amdgpu-pro { }; 259 260 anbox = callPackage ../os-specific/linux/anbox/kmod.nix { }; 261 262 apfs = callPackage ../os-specific/linux/apfs { }; 263 264 batman_adv = callPackage ../os-specific/linux/batman-adv {}; 265 266 bcc = callPackage ../os-specific/linux/bcc { 267 python = pkgs.python3; 268 }; 269 270 bpftrace = callPackage ../os-specific/linux/bpftrace { }; 271 272 bbswitch = callPackage ../os-specific/linux/bbswitch {}; 273 274 chipsec = callPackage ../tools/security/chipsec { 275 inherit kernel; 276 withDriver = true; 277 }; 278 279 cryptodev = callPackage ../os-specific/linux/cryptodev { }; 280 281 cpupower = callPackage ../os-specific/linux/cpupower { }; 282 283 ddcci-driver = callPackage ../os-specific/linux/ddcci { }; 284 285 digimend = callPackage ../os-specific/linux/digimend { }; 286 287 dpdk-kmods = callPackage ../os-specific/linux/dpdk-kmods { }; 288 289 exfat-nofuse = callPackage ../os-specific/linux/exfat { }; 290 291 evdi = callPackage ../os-specific/linux/evdi { }; 292 293 fwts-efi-runtime = callPackage ../os-specific/linux/fwts/module.nix { }; 294 295 gcadapter-oc-kmod = callPackage ../os-specific/linux/gcadapter-oc-kmod { }; 296 hid-nintendo = callPackage ../os-specific/linux/hid-nintendo { }; 297 298 hyperv-daemons = callPackage ../os-specific/linux/hyperv-daemons { }; 299 300 e1000e = if lib.versionOlder kernel.version "4.10" then callPackage ../os-specific/linux/e1000e {} else null; 301 302 intel-speed-select = if lib.versionAtLeast kernel.version "5.3" then callPackage ../os-specific/linux/intel-speed-select { } else null; 303 304 ixgbevf = callPackage ../os-specific/linux/ixgbevf {}; 305 306 it87 = callPackage ../os-specific/linux/it87 {}; 307 308 asus-wmi-sensors = callPackage ../os-specific/linux/asus-wmi-sensors {}; 309 310 ena = callPackage ../os-specific/linux/ena {}; 311 312 v4l2loopback = callPackage ../os-specific/linux/v4l2loopback { }; 313 314 lttng-modules = callPackage ../os-specific/linux/lttng-modules { }; 315 316 broadcom_sta = callPackage ../os-specific/linux/broadcom-sta { }; 317 318 tbs = callPackage ../os-specific/linux/tbs { }; 319 320 mbp2018-bridge-drv = callPackage ../os-specific/linux/mbp-modules/mbp2018-bridge-drv { }; 321 322 nvidiabl = callPackage ../os-specific/linux/nvidiabl { }; 323 324 nvidiaPackages = dontRecurseIntoAttrs (callPackage ../os-specific/linux/nvidia-x11 { }); 325 326 nvidia_x11_legacy340 = nvidiaPackages.legacy_340; 327 nvidia_x11_legacy390 = nvidiaPackages.legacy_390; 328 nvidia_x11_legacy470 = nvidiaPackages.legacy_470; 329 nvidia_x11_beta = nvidiaPackages.beta; 330 nvidia_x11_vulkan_beta = nvidiaPackages.vulkan_beta; 331 nvidia_x11 = nvidiaPackages.stable; 332 333 openrazer = callPackage ../os-specific/linux/openrazer/driver.nix { }; 334 335 ply = callPackage ../os-specific/linux/ply { }; 336 337 r8125 = callPackage ../os-specific/linux/r8125 { }; 338 339 r8168 = callPackage ../os-specific/linux/r8168 { }; 340 341 rtl8188eus-aircrack = callPackage ../os-specific/linux/rtl8188eus-aircrack { }; 342 343 rtl8192eu = callPackage ../os-specific/linux/rtl8192eu { }; 344 345 rtl8723bs = callPackage ../os-specific/linux/rtl8723bs { }; 346 347 rtl8812au = callPackage ../os-specific/linux/rtl8812au { }; 348 349 rtl8814au = callPackage ../os-specific/linux/rtl8814au { }; 350 351 rtl88xxau-aircrack = callPackage ../os-specific/linux/rtl88xxau-aircrack {}; 352 353 rtl8821au = callPackage ../os-specific/linux/rtl8821au { }; 354 355 rtl8821ce = callPackage ../os-specific/linux/rtl8821ce { }; 356 357 rtl88x2bu = callPackage ../os-specific/linux/rtl88x2bu { }; 358 359 rtl8821cu = callPackage ../os-specific/linux/rtl8821cu { }; 360 361 rtw88 = callPackage ../os-specific/linux/rtw88 { }; 362 rtlwifi_new = rtw88; 363 364 rtw89 = callPackage ../os-specific/linux/rtw89 { }; 365 366 openafs_1_8 = callPackage ../servers/openafs/1.8/module.nix { }; 367 openafs_1_9 = callPackage ../servers/openafs/1.9/module.nix { }; 368 # Current stable release; don't backport release updates! 369 openafs = openafs_1_8; 370 371 facetimehd = callPackage ../os-specific/linux/facetimehd { }; 372 373 tuxedo-keyboard = if lib.versionAtLeast kernel.version "4.14" then callPackage ../os-specific/linux/tuxedo-keyboard { } else null; 374 375 jool = callPackage ../os-specific/linux/jool { }; 376 377 kvmfr = callPackage ../os-specific/linux/kvmfr { }; 378 379 mba6x_bl = callPackage ../os-specific/linux/mba6x_bl { }; 380 381 mwprocapture = callPackage ../os-specific/linux/mwprocapture { }; 382 383 mxu11x0 = callPackage ../os-specific/linux/mxu11x0 { }; 384 385 # compiles but has to be integrated into the kernel somehow 386 # Let's have it uncommented and finish it.. 387 ndiswrapper = callPackage ../os-specific/linux/ndiswrapper { }; 388 389 netatop = callPackage ../os-specific/linux/netatop { }; 390 391 oci-seccomp-bpf-hook = if lib.versionAtLeast kernel.version "5.4" then callPackage ../os-specific/linux/oci-seccomp-bpf-hook { } else null; 392 393 perf = if lib.versionAtLeast kernel.version "3.12" then callPackage ../os-specific/linux/kernel/perf.nix { } else null; 394 395 phc-intel = if lib.versionAtLeast kernel.version "4.10" then callPackage ../os-specific/linux/phc-intel { } else null; 396 397 # Disable for kernels 4.15 and above due to compatibility issues 398 prl-tools = if lib.versionOlder kernel.version "4.15" then callPackage ../os-specific/linux/prl-tools { } else null; 399 400 sch_cake = callPackage ../os-specific/linux/sch_cake { }; 401 402 isgx = callPackage ../os-specific/linux/isgx { }; 403 404 rr-zen_workaround = callPackage ../development/tools/analysis/rr/zen_workaround.nix { }; 405 406 sysdig = callPackage ../os-specific/linux/sysdig {}; 407 408 systemtap = callPackage ../development/tools/profiling/systemtap { }; 409 410 system76 = callPackage ../os-specific/linux/system76 { }; 411 412 system76-acpi = callPackage ../os-specific/linux/system76-acpi { }; 413 414 system76-power = callPackage ../os-specific/linux/system76-power { }; 415 416 system76-io = callPackage ../os-specific/linux/system76-io { }; 417 418 tmon = callPackage ../os-specific/linux/tmon { }; 419 420 tp_smapi = callPackage ../os-specific/linux/tp_smapi { }; 421 422 turbostat = callPackage ../os-specific/linux/turbostat { }; 423 424 usbip = callPackage ../os-specific/linux/usbip { }; 425 426 v86d = callPackage ../os-specific/linux/v86d { }; 427 428 veikk-linux-driver = callPackage ../os-specific/linux/veikk-linux-driver { }; 429 vendor-reset = callPackage ../os-specific/linux/vendor-reset { }; 430 431 vhba = callPackage ../misc/emulators/cdemu/vhba.nix { }; 432 433 virtualbox = callPackage ../os-specific/linux/virtualbox { 434 virtualbox = pkgs.virtualboxHardened; 435 }; 436 437 virtualboxGuestAdditions = callPackage ../applications/virtualization/virtualbox/guest-additions { 438 virtualbox = pkgs.virtualboxHardened; 439 }; 440 441 vm-tools = callPackage ../os-specific/linux/vm-tools { }; 442 443 wireguard = if lib.versionOlder kernel.version "5.6" then callPackage ../os-specific/linux/wireguard { } else null; 444 445 x86_energy_perf_policy = callPackage ../os-specific/linux/x86_energy_perf_policy { }; 446 447 xmm7360-pci = callPackage ../os-specific/linux/xmm7360-pci { }; 448 449 xpadneo = callPackage ../os-specific/linux/xpadneo { }; 450 451 zenpower = callPackage ../os-specific/linux/zenpower { }; 452 453 inherit (callPackage ../os-specific/linux/zfs { 454 configFile = "kernel"; 455 inherit pkgs kernel; 456 }) zfsStable zfsUnstable; 457 zfs = zfsStable; 458 459 can-isotp = callPackage ../os-specific/linux/can-isotp { }; 460 461 } // lib.optionalAttrs (config.allowAliases or false) { 462 ati_drivers_x11 = throw "ati drivers are no longer supported by any kernel >=4.1"; # added 2021-05-18; 463 }); 464 465 hardenedPackagesFor = kernel: overrides: packagesFor (hardenedKernelFor kernel overrides); 466 467 vanillaPackages = { 468 # recurse to build modules for the kernels 469 linux_4_4 = recurseIntoAttrs (packagesFor kernels.linux_4_4); 470 linux_4_9 = recurseIntoAttrs (packagesFor kernels.linux_4_9); 471 linux_4_14 = recurseIntoAttrs (packagesFor kernels.linux_4_14); 472 linux_4_19 = recurseIntoAttrs (packagesFor kernels.linux_4_19); 473 linux_5_4 = recurseIntoAttrs (packagesFor kernels.linux_5_4); 474 linux_5_10 = recurseIntoAttrs (packagesFor kernels.linux_5_10); 475 linux_5_14 = recurseIntoAttrs (packagesFor kernels.linux_5_14); 476 linux_5_15 = recurseIntoAttrs (packagesFor kernels.linux_5_15); 477 }; 478 479 rtPackages = { 480 # realtime kernel packages 481 linux_rt_5_4 = packagesFor kernels.linux_rt_5_4; 482 linux_rt_5_10 = packagesFor kernels.linux_rt_5_10; 483 }; 484 485 rpiPackages = { 486 linux_rpi1 = packagesFor kernels.linux_rpi1; 487 linux_rpi2 = packagesFor kernels.linux_rpi2; 488 linux_rpi3 = packagesFor kernels.linux_rpi3; 489 linux_rpi4 = packagesFor kernels.linux_rpi4; 490 }; 491 492 packages = recurseIntoAttrs (vanillaPackages // rtPackages // rpiPackages // { 493 linux_mptcp_95 = packagesFor kernels.linux_mptcp_95; 494 495 # Intentionally lacks recurseIntoAttrs, as -rc kernels will quite likely break out-of-tree modules and cause failed Hydra builds. 496 linux_testing = packagesFor kernels.linux_testing; 497 linux_testing_bcachefs = recurseIntoAttrs (packagesFor kernels.linux_testing_bcachefs); 498 499 linux_hardened = recurseIntoAttrs (hardenedPackagesFor packageAliases.linux_default.kernel { }); 500 501 linux_4_14_hardened = recurseIntoAttrs (hardenedPackagesFor kernels.linux_4_14 { }); 502 linux_4_19_hardened = recurseIntoAttrs (hardenedPackagesFor kernels.linux_4_19 { }); 503 linux_5_4_hardened = recurseIntoAttrs (hardenedPackagesFor kernels.linux_5_4 { }); 504 linux_5_10_hardened = recurseIntoAttrs (hardenedPackagesFor kernels.linux_5_10 { }); 505 linux_5_14_hardened = recurseIntoAttrs (hardenedPackagesFor kernels.linux_5_14 { }); 506 linux_5_15_hardened = recurseIntoAttrs (hardenedPackagesFor kernels.linux_5_15 { }); 507 508 linux_zen = recurseIntoAttrs (packagesFor kernels.linux_zen); 509 linux_lqx = recurseIntoAttrs (packagesFor kernels.linux_lqx); 510 linux_xanmod = recurseIntoAttrs (packagesFor kernels.linux_xanmod); 511 512 hardkernel_4_14 = recurseIntoAttrs (packagesFor kernels.linux_hardkernel_4_14); 513 514 linux_libre = recurseIntoAttrs (packagesFor kernels.linux_libre); 515 516 linux_latest_libre = recurseIntoAttrs (packagesFor kernels.linux_latest_libre); 517 }); 518 519 packageAliases = { 520 linux_default = packages.linux_5_10; 521 # Update this when adding the newest kernel major version! 522 linux_latest = packages.linux_5_15; 523 linux_mptcp = packages.linux_mptcp_95; 524 linux_rt_default = packages.linux_rt_5_4; 525 linux_rt_latest = packages.linux_rt_5_10; 526 linux_hardkernel_latest = packages.hardkernel_4_14; 527 }; 528 529 manualConfig = makeOverridable (callPackage ../os-specific/linux/kernel/manual-config.nix {}); 530 531 customPackage = { version, src, configfile, allowImportFromDerivation ? true }: 532 recurseIntoAttrs (packagesFor (manualConfig { 533 inherit version src configfile lib stdenv allowImportFromDerivation; 534 })); 535 536 # Derive one of the default .config files 537 linuxConfig = { 538 src, 539 version ? (builtins.parseDrvName src.name).version, 540 makeTarget ? "defconfig", 541 name ? "kernel.config", 542 }: stdenvNoCC.mkDerivation { 543 inherit name src; 544 depsBuildBuild = [ buildPackages.stdenv.cc ] 545 ++ lib.optionals (lib.versionAtLeast version "4.16") [ buildPackages.bison buildPackages.flex ]; 546 postPatch = '' 547 patchShebangs scripts/ 548 ''; 549 buildPhase = '' 550 set -x 551 make \ 552 ARCH=${stdenv.hostPlatform.linuxArch} \ 553 HOSTCC=${buildPackages.stdenv.cc.targetPrefix}gcc \ 554 ${makeTarget} 555 ''; 556 installPhase = '' 557 cp .config $out 558 ''; 559 }; 560 561 buildLinux = attrs: callPackage ../os-specific/linux/kernel/generic.nix attrs; 562 563}