From 9d0d3a025fdb09b08a70f5678dda8ea6781dbb83 Mon Sep 17 00:00:00 2001 From: Orivej Desh Date: Sun, 30 Aug 2020 22:36:56 +0000 Subject: linux-rt: add update script --- pkgs/os-specific/linux/kernel/update-rt.sh | 77 ++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100755 pkgs/os-specific/linux/kernel/update-rt.sh (limited to 'pkgs/os-specific/linux/kernel/update-rt.sh') diff --git a/pkgs/os-specific/linux/kernel/update-rt.sh b/pkgs/os-specific/linux/kernel/update-rt.sh new file mode 100755 index 00000000000..bcfa494d7e7 --- /dev/null +++ b/pkgs/os-specific/linux/kernel/update-rt.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env bash +set -euo pipefail + +# To update all rt kernels run: ./update-rt.sh + +# To update just one ./linux-rt-5.X.nix run: ./update-rt.sh ./linux-rt-5.X.nix + +# To add a new kernel branch 5.Y run: ./update-rt.sh ./linux-rt-5.Y.nix +# (with nonexistent .nix file) and update all-packages.nix. + +# To commit run with: env COMMIT=1 + +mirror=https://kernel.org/pub/linux/kernel + +main() { + if [ $# -ge 1 ]; then + update-if-needed "$1" + else + update-all-if-needed + fi +} + +update-all-if-needed() { + for f in "$(dirname "$0")"/linux-rt-*.nix; do + update-if-needed "$f" + done +} + +file-version() { + file="$1" # e.g. ./linux-rt-5.4.nix + if [ -e "$file" ]; then + grep ' version = ' "$file" | grep -o '[0-9].[^"]*' + fi +} + +latest-rt-version() { + branch="$1" # e.g. 5.4 + curl -sL "$mirror/projects/rt/$branch/sha256sums.asc" | + sed -ne '/.patch.xz/ { s/.*patch-\(.*\).patch.xz/\1/; p; q }' +} + +update-if-needed() { + file="$1" # e.g. ./linux-rt-5.4.nix (created if does not exist) + branch=$(basename "$file" .nix) # e.g. linux-rt-5.4 + branch=${branch#linux-rt-} # e.g. 5.4 + cur=$(file-version "$file") # e.g. 5.4.59-rt36 or empty + new=$(latest-rt-version "$branch") # e.g. 5.4.61-rt37 + kversion=${new%-*} # e.g. 5.4.61 + major=${branch%.*} # e.g 5 + nixattr="linux-rt_${branch/./_}" + if [ "$new" = "$cur" ]; then + echo "$nixattr: $cur (up-to-date)" + return + fi + khash=$(nix-prefetch-url "$mirror/v${major}.x/linux-${kversion}.tar.xz") + phash=$(nix-prefetch-url "$mirror/projects/rt/${branch}/older/patch-${new}.patch.xz") + if [ "$cur" ]; then + msg="$nixattr: $cur -> $new" + else + msg="$nixattr: init at $new" + prev=$(ls "$(dirname "$0")"/linux-rt-*.nix | tail -1) + cp "$prev" "$file" + cur=$(file-version "$file") + fi + echo "$msg" + sed -i "$file" \ + -e "s/$cur/$new/" \ + -e "s|kernel/v[0-9]*|kernel/v$major|" \ + -e "1,/.patch.xz/ s/sha256 = .*/sha256 = \"$khash\";/" \ + -e "1,/.patch.xz/! s/sha256 = .*/sha256 = \"$phash\";/" + if [ "${COMMIT:-}" ]; then + git add "$file" + git commit -m "$msg" + fi +} + +return 2>/dev/null || main "$@" -- cgit 1.4.1 From 2f6ac2435767c1052147b1397ebb0c8f1a2c5583 Mon Sep 17 00:00:00 2001 From: Orivej Desh Date: Mon, 14 Dec 2020 21:15:10 +0000 Subject: linux-rt_latest: 5.9.1-rt20 -> 5.10-rt17 This does not keep 5.9 series because it has known issues and rt upstream has stopped maintaining it in favor of 5.10. "ls -v" sorts by version, making 5.10 the next $prev kernel. --- pkgs/os-specific/linux/kernel/linux-rt-5.10.nix | 45 +++++++++++++++++++++++++ pkgs/os-specific/linux/kernel/linux-rt-5.9.nix | 41 ---------------------- pkgs/os-specific/linux/kernel/update-rt.sh | 2 +- pkgs/top-level/all-packages.nix | 6 ++-- 4 files changed, 49 insertions(+), 45 deletions(-) create mode 100644 pkgs/os-specific/linux/kernel/linux-rt-5.10.nix delete mode 100644 pkgs/os-specific/linux/kernel/linux-rt-5.9.nix (limited to 'pkgs/os-specific/linux/kernel/update-rt.sh') diff --git a/pkgs/os-specific/linux/kernel/linux-rt-5.10.nix b/pkgs/os-specific/linux/kernel/linux-rt-5.10.nix new file mode 100644 index 00000000000..4eec6c431b6 --- /dev/null +++ b/pkgs/os-specific/linux/kernel/linux-rt-5.10.nix @@ -0,0 +1,45 @@ +{ lib, buildLinux, fetchurl +, kernelPatches ? [ ] +, structuredExtraConfig ? {} +, extraMeta ? {} +, argsOverride ? {} +, ... } @ args: + +let + version = "5.10-rt17"; # updated by ./update-rt.sh + branch = lib.versions.majorMinor version; + kversion = builtins.elemAt (lib.splitString "-" version) 0; +in buildLinux (args // { + inherit version; + + # modDirVersion needs a patch number, change X.Y-rtZ to X.Y.0-rtZ. + modDirVersion = if (builtins.match "[^.]*[.][^.]*-.*" version) == null then version + else lib.replaceStrings ["-"] [".0-"] version; + + src = fetchurl { + url = "mirror://kernel/linux/kernel/v5.x/linux-${kversion}.tar.xz"; + sha256 = "0hyav21vzz5v1kgb455pcz9ncg5qqzxmp60na290scwq7vj9kpyw"; + }; + + kernelPatches = let rt-patch = { + name = "rt"; + patch = fetchurl { + url = "mirror://kernel/linux/kernel/projects/rt/${branch}/older/patch-${version}.patch.xz"; + sha256 = "0baf7363f6h3smr4lgw88dbpf4977j6c1asifyhc8zhd7100ckhn"; + }; + }; in [ rt-patch ] ++ lib.remove rt-patch kernelPatches; + + structuredExtraConfig = with lib.kernel; { + PREEMPT_RT = yes; + # Fix error: unused option: PREEMPT_RT. + EXPERT = yes; # PREEMPT_RT depends on it (in kernel/Kconfig.preempt) + # Fix error: option not set correctly: PREEMPT_VOLUNTARY (wanted 'y', got 'n'). + PREEMPT_VOLUNTARY = lib.mkForce no; # PREEMPT_RT deselects it. + # Fix error: unused option: RT_GROUP_SCHED. + RT_GROUP_SCHED = lib.mkForce (option no); # Removed by sched-disable-rt-group-sched-on-rt.patch. + } // structuredExtraConfig; + + extraMeta = extraMeta // { + inherit branch; + }; +} // argsOverride) diff --git a/pkgs/os-specific/linux/kernel/linux-rt-5.9.nix b/pkgs/os-specific/linux/kernel/linux-rt-5.9.nix deleted file mode 100644 index 988335d0d3b..00000000000 --- a/pkgs/os-specific/linux/kernel/linux-rt-5.9.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ lib, buildLinux, fetchurl -, kernelPatches ? [ ] -, structuredExtraConfig ? {} -, extraMeta ? {} -, argsOverride ? {} -, ... } @ args: - -let - version = "5.9.1-rt20"; # updated by ./update-rt.sh - branch = lib.versions.majorMinor version; - kversion = builtins.elemAt (lib.splitString "-" version) 0; -in buildLinux (args // { - inherit version; - - src = fetchurl { - url = "mirror://kernel/linux/kernel/v5.x/linux-${kversion}.tar.xz"; - sha256 = "0dn0xz81pphca5dkg6zh8c78p05f63rrr5ihqqsmhc4n73li2jms"; - }; - - kernelPatches = let rt-patch = { - name = "rt"; - patch = fetchurl { - url = "mirror://kernel/linux/kernel/projects/rt/${branch}/older/patch-${version}.patch.xz"; - sha256 = "0ma3mv475qgg0dri4928gi6z00d7s59pdwj0d6dh0mfzs2xddnyv"; - }; - }; in [ rt-patch ] ++ lib.remove rt-patch kernelPatches; - - structuredExtraConfig = with lib.kernel; { - PREEMPT_RT = yes; - # Fix error: unused option: PREEMPT_RT. - EXPERT = yes; # PREEMPT_RT depends on it (in kernel/Kconfig.preempt) - # Fix error: option not set correctly: PREEMPT_VOLUNTARY (wanted 'y', got 'n'). - PREEMPT_VOLUNTARY = lib.mkForce no; # PREEMPT_RT deselects it. - # Fix error: unused option: RT_GROUP_SCHED. - RT_GROUP_SCHED = lib.mkForce (option no); # Removed by sched-disable-rt-group-sched-on-rt.patch. - } // structuredExtraConfig; - - extraMeta = extraMeta // { - inherit branch; - }; -} // argsOverride) diff --git a/pkgs/os-specific/linux/kernel/update-rt.sh b/pkgs/os-specific/linux/kernel/update-rt.sh index bcfa494d7e7..4cbd45524a8 100755 --- a/pkgs/os-specific/linux/kernel/update-rt.sh +++ b/pkgs/os-specific/linux/kernel/update-rt.sh @@ -58,7 +58,7 @@ update-if-needed() { msg="$nixattr: $cur -> $new" else msg="$nixattr: init at $new" - prev=$(ls "$(dirname "$0")"/linux-rt-*.nix | tail -1) + prev=$(ls -v "$(dirname "$0")"/linux-rt-*.nix | tail -1) cp "$prev" "$file" cur=$(file-version "$file") fi diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 568413d71fc..8d833be6196 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -18384,7 +18384,7 @@ in ]; }; - linux-rt_5_9 = callPackage ../os-specific/linux/kernel/linux-rt-5.9.nix { + linux-rt_5_10 = callPackage ../os-specific/linux/kernel/linux-rt-5.10.nix { kernelPatches = [ kernelPatches.bridge_stp_helper kernelPatches.request_key_helper @@ -18643,9 +18643,9 @@ in # Realtime kernel packages. linuxPackages-rt_5_4 = linuxPackagesFor pkgs.linux-rt_5_4; linuxPackages-rt_5_6 = linuxPackagesFor pkgs.linux-rt_5_6; - linuxPackages-rt_5_9 = linuxPackagesFor pkgs.linux-rt_5_9; + linuxPackages-rt_5_10 = linuxPackagesFor pkgs.linux-rt_5_10; linuxPackages-rt = linuxPackages-rt_5_4; - linuxPackages-rt_latest = linuxPackages-rt_5_9; + linuxPackages-rt_latest = linuxPackages-rt_5_10; linux-rt = linuxPackages-rt.kernel; linux-rt_latest = linuxPackages-rt_latest.kernel; -- cgit 1.4.1 From 1c9d1783718afd77a88b7613e51fc27b01b90682 Mon Sep 17 00:00:00 2001 From: ilian Date: Sun, 24 Jan 2021 16:26:04 +0100 Subject: linux-rt: use latest version Take the last kernel version listed in sha256sums.asc when multiple versions are listed. We assume that the patches listed in sha256sums.asc are ordered by increasing version number. --- pkgs/os-specific/linux/kernel/update-rt.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'pkgs/os-specific/linux/kernel/update-rt.sh') diff --git a/pkgs/os-specific/linux/kernel/update-rt.sh b/pkgs/os-specific/linux/kernel/update-rt.sh index 4cbd45524a8..8cac5929252 100755 --- a/pkgs/os-specific/linux/kernel/update-rt.sh +++ b/pkgs/os-specific/linux/kernel/update-rt.sh @@ -36,7 +36,8 @@ file-version() { latest-rt-version() { branch="$1" # e.g. 5.4 curl -sL "$mirror/projects/rt/$branch/sha256sums.asc" | - sed -ne '/.patch.xz/ { s/.*patch-\(.*\).patch.xz/\1/; p; q }' + sed -ne '/.patch.xz/ { s/.*patch-\(.*\).patch.xz/\1/p}' | + tail -n 1 } update-if-needed() { -- cgit 1.4.1 From c6963522e0cff90f4a58165703e232f85c73cdaa Mon Sep 17 00:00:00 2001 From: Tim Steinbach Date: Mon, 26 Apr 2021 10:55:58 -0400 Subject: linux-rt: Avoid RCs --- pkgs/os-specific/linux/kernel/update-rt.sh | 1 + 1 file changed, 1 insertion(+) (limited to 'pkgs/os-specific/linux/kernel/update-rt.sh') diff --git a/pkgs/os-specific/linux/kernel/update-rt.sh b/pkgs/os-specific/linux/kernel/update-rt.sh index 8cac5929252..ccb01793342 100755 --- a/pkgs/os-specific/linux/kernel/update-rt.sh +++ b/pkgs/os-specific/linux/kernel/update-rt.sh @@ -37,6 +37,7 @@ latest-rt-version() { branch="$1" # e.g. 5.4 curl -sL "$mirror/projects/rt/$branch/sha256sums.asc" | sed -ne '/.patch.xz/ { s/.*patch-\(.*\).patch.xz/\1/p}' | + grep -v '\-rc' | tail -n 1 } -- cgit 1.4.1