Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at 20.09 77 lines 2.2 kB view raw
1#!/usr/bin/env bash 2set -euo pipefail 3 4# To update all rt kernels run: ./update-rt.sh 5 6# To update just one ./linux-rt-5.X.nix run: ./update-rt.sh ./linux-rt-5.X.nix 7 8# To add a new kernel branch 5.Y run: ./update-rt.sh ./linux-rt-5.Y.nix 9# (with nonexistent .nix file) and update all-packages.nix. 10 11# To commit run with: env COMMIT=1 12 13mirror=https://kernel.org/pub/linux/kernel 14 15main() { 16 if [ $# -ge 1 ]; then 17 update-if-needed "$1" 18 else 19 update-all-if-needed 20 fi 21} 22 23update-all-if-needed() { 24 for f in "$(dirname "$0")"/linux-rt-*.nix; do 25 update-if-needed "$f" 26 done 27} 28 29file-version() { 30 file="$1" # e.g. ./linux-rt-5.4.nix 31 if [ -e "$file" ]; then 32 grep ' version = ' "$file" | grep -o '[0-9].[^"]*' 33 fi 34} 35 36latest-rt-version() { 37 branch="$1" # e.g. 5.4 38 curl -sL "$mirror/projects/rt/$branch/sha256sums.asc" | 39 sed -ne '/.patch.xz/ { s/.*patch-\(.*\).patch.xz/\1/; p; q }' 40} 41 42update-if-needed() { 43 file="$1" # e.g. ./linux-rt-5.4.nix (created if does not exist) 44 branch=$(basename "$file" .nix) # e.g. linux-rt-5.4 45 branch=${branch#linux-rt-} # e.g. 5.4 46 cur=$(file-version "$file") # e.g. 5.4.59-rt36 or empty 47 new=$(latest-rt-version "$branch") # e.g. 5.4.61-rt37 48 kversion=${new%-*} # e.g. 5.4.61 49 major=${branch%.*} # e.g 5 50 nixattr="linux-rt_${branch/./_}" 51 if [ "$new" = "$cur" ]; then 52 echo "$nixattr: $cur (up-to-date)" 53 return 54 fi 55 khash=$(nix-prefetch-url "$mirror/v${major}.x/linux-${kversion}.tar.xz") 56 phash=$(nix-prefetch-url "$mirror/projects/rt/${branch}/older/patch-${new}.patch.xz") 57 if [ "$cur" ]; then 58 msg="$nixattr: $cur -> $new" 59 else 60 msg="$nixattr: init at $new" 61 prev=$(ls "$(dirname "$0")"/linux-rt-*.nix | tail -1) 62 cp "$prev" "$file" 63 cur=$(file-version "$file") 64 fi 65 echo "$msg" 66 sed -i "$file" \ 67 -e "s/$cur/$new/" \ 68 -e "s|kernel/v[0-9]*|kernel/v$major|" \ 69 -e "1,/.patch.xz/ s/sha256 = .*/sha256 = \"$khash\";/" \ 70 -e "1,/.patch.xz/! s/sha256 = .*/sha256 = \"$phash\";/" 71 if [ "${COMMIT:-}" ]; then 72 git add "$file" 73 git commit -m "$msg" 74 fi 75} 76 77return 2>/dev/null || main "$@"