From 9d0d3a025fdb09b08a70f5678dda8ea6781dbb83 Mon Sep 17 00:00:00 2001 From: Orivej Desh Date: Sun, 30 Aug 2020 22:36:56 +0000 Subject: [PATCH] linux-rt: add update script --- pkgs/os-specific/linux/kernel/update-rt.sh | 77 ++++++++++++++++++++++ pkgs/os-specific/linux/kernel/update.sh | 3 + 2 files changed, 80 insertions(+) create mode 100755 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 000000000000..bcfa494d7e7a --- /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 "$@" diff --git a/pkgs/os-specific/linux/kernel/update.sh b/pkgs/os-specific/linux/kernel/update.sh index 55fdce06c973..560edced36ea 100755 --- a/pkgs/os-specific/linux/kernel/update.sh +++ b/pkgs/os-specific/linux/kernel/update.sh @@ -58,6 +58,9 @@ ls $NIXPKGS/pkgs/os-specific/linux/kernel | while read FILE; do echo "Updated $OLDVER -> $V" done +# Update linux-rt +COMMIT=1 $NIXPKGS/pkgs/os-specific/linux/kernel/update-rt.sh + # Update linux-libre COMMIT=1 $NIXPKGS/pkgs/os-specific/linux/kernel/update-libre.sh