diff options
author | Ferdinand Bachmann | 2022-04-03 02:58:08 +0200 |
---|---|---|
committer | Ferdinand Bachmann | 2022-06-13 03:19:56 +0200 |
commit | 82c9fe7f8e479bdc864405a8b455b3dd46f44f74 (patch) | |
tree | 220a4c8b14de5abcbc4cb2cdb4ea1e28ccf3b2cd | |
parent | b87dc1442541197378808cf8c65519d11d2ad88c (diff) | |
download | aur-82c9fe7f8e479bdc864405a8b455b3dd46f44f74.tar.gz |
first working version (with manual link / unlink)
-rw-r--r-- | .SRCINFO | 12 | ||||
-rw-r--r-- | PKGBUILD | 18 | ||||
-rwxr-xr-x | linux-preserve-modules (renamed from preserve-modules.script) | 113 | ||||
-rw-r--r-- | linux-preserve-modules.hook (renamed from preserve-modules-copy.hook) | 4 | ||||
-rwxr-xr-x | linux-preserve-modules.script | 13 | ||||
-rw-r--r-- | preserve-modules-link.hook | 12 |
6 files changed, 108 insertions, 64 deletions
@@ -5,11 +5,11 @@ pkgbase = linux-preserve-modules url = https://aur.archlinux.org/packages/linux-preserve-modules arch = any license = MIT - source = preserve-modules-copy.hook - source = preserve-modules-link.hook - source = preserve-modules.script - sha256sums = a38ad3600f174f1882d78191706f668eb1da585bf21ffbd6a0bf63057453f874 - sha256sums = 276d479596bac1120162ba65229f5253fd4d44b3c44a57a9c4aeb8125fcf01b2 - sha256sums = c4d1a56a5207736e9f3f2c145b621e60a9d99a93b953ced4ed02917b75f33fc3 + source = linux-preserve-modules.hook + source = linux-preserve-modules.script + source = linux-preserve-modules + sha256sums = 666c8f92f798a006b83740afae4dc832e4d38209eb866b2019cb32b8798bfdbf + sha256sums = 995a5f75dde50626fdf002f1de18fbd06f3b39a5c50d9ea2d44927f7bede11bc + sha256sums = 7f068ac894cf2248fa373af17817053db177ceae50e960db55293596b16441b9 pkgname = linux-preserve-modules @@ -8,15 +8,15 @@ url="https://aur.archlinux.org/packages/linux-preserve-modules" arch=('any') license=('MIT') depends=() -source=(preserve-modules-copy.hook - preserve-modules-link.hook - preserve-modules.script) -sha256sums=('a38ad3600f174f1882d78191706f668eb1da585bf21ffbd6a0bf63057453f874' - '276d479596bac1120162ba65229f5253fd4d44b3c44a57a9c4aeb8125fcf01b2' - '98820ebc17f2420092e947f60181729046cf656e537d364f6a965dccd30d9149') +source=(linux-preserve-modules.hook + linux-preserve-modules.script + linux-preserve-modules) +sha256sums=('666c8f92f798a006b83740afae4dc832e4d38209eb866b2019cb32b8798bfdbf' + '995a5f75dde50626fdf002f1de18fbd06f3b39a5c50d9ea2d44927f7bede11bc' + '7f068ac894cf2248fa373af17817053db177ceae50e960db55293596b16441b9') package() { - install -Dm644 "$srcdir/preserve-modules-copy.hook" "$pkgdir/usr/share/libalpm/hooks/10-linux-preserve-modules-copy.hook" - install -Dm644 "$srcdir/preserve-modules-link.hook" "$pkgdir/usr/share/libalpm/hooks/99-linux-preserve-modules-link.hook" - install -Dm755 "$srcdir/preserve-modules.script" "$pkgdir/usr/share/libalpm/scripts/linux-preserve-modules" + install -Dm644 "$srcdir/linux-preserve-modules.hook" "$pkgdir/usr/share/libalpm/hooks/10-linux-preserve-modules.hook" + install -Dm755 "$srcdir/linux-preserve-modules.script" "$pkgdir/usr/share/libalpm/scripts/linux-preserve-modules" + install -Dm755 "$srcdir/linux-preserve-modules" "$pkgdir/usr/bin/linux-preserve-modules" } diff --git a/preserve-modules.script b/linux-preserve-modules index cb9cc9d3ca2e..2e40066051c9 100755 --- a/preserve-modules.script +++ b/linux-preserve-modules @@ -2,10 +2,6 @@ shopt -s nullglob -KERNEL="$(uname -r)" -TARGET="usr/lib/modules/$KERNEL" -PRESERVE_MODULES_DIR=/run/linux-preserve-modules - not() { if "$@"; then return 1 @@ -14,7 +10,11 @@ not() { fi } -preserve-modules-copy() { +set-vars() { + KERNEL="$1" + TARGET="usr/lib/modules/$KERNEL" + PRESERVE_MODULES_DIR=/run/linux-preserve-modules + TARGET_DIR="/$TARGET" PRESERVE_DIR="$PRESERVE_MODULES_DIR/modules/$KERNEL" @@ -23,31 +23,31 @@ preserve-modules-copy() { echo "error: unknown kernel version" >&2 exit 1 fi +} - # exit early if currently running kernel modules untouched - if not grep -F -q "$TARGET"; then - echo "info: nothing to copy" >&2 - exit 0 +preserve-modules-copy() { + if [[ $# -gt 1 ]]; then + echo "usage: preserve-modules copy [release]" >&2 + exit 1 + elif [[ $# -eq 1 ]]; then + set-vars "$1" fi # exit early if the target directory does not exist - if [[ ! -d "$TARGET_DIR" ]]; then + if [[ ! -f "$TARGET_DIR/modules.builtin" ]]; then echo "info: nothing to copy" >&2 exit 0 fi - # clean preserved files before transaction - if [[ -f "$TARGET_DIR/.preserved" ]]; then - rm "$TARGET_DIR/.preserved" - rm "$TARGET_DIR/modules".* - - mountpoint -q "$TARGET_DIR/kernel" && umount "$TARGET_DIR/kernel" - mountpoint -q "$TARGET_DIR/updates" && umount "$TARGET_DIR/updates" + # exit early if kernel modules already copied + if [[ -d "$PRESERVE_DIR/modules.builtin" ]]; then + echo "info: already copied" >&2 + exit 0 fi # exit early if kernel modules already copied - if [[ -d "$PRESERVE_DIR" ]]; then - echo "info: already copied" >&2 + if [[ -f "$TARGET_DIR/.preserved" ]]; then + echo "info: already linked" >&2 exit 0 fi @@ -62,17 +62,15 @@ preserve-modules-copy() { } preserve-modules-link() { - TARGET_DIR="/$TARGET" - PRESERVE_DIR="$PRESERVE_MODULES_DIR/modules/$KERNEL" - - # exit early if kernel version empty - if [[ -z "$KERNEL" ]]; then - echo "error: unknown kernel version" >&2 + if [[ $# -gt 1 ]]; then + echo "usage: preserve-modules link [release]" >&2 exit 1 + elif [[ $# -eq 1 ]]; then + set-vars "$1" fi # exit early if no kernel modules copied - if [[ ! -d "$PRESERVE_DIR" ]]; then + if [[ ! -f "$PRESERVE_DIR/modules.builtin" ]]; then echo "info: nothing to link" >&2 exit 0 fi @@ -87,7 +85,14 @@ preserve-modules-link() { exit 0 fi + # exit early if kernel modules already copied + if [[ -f "$TARGET_DIR/.preserved" ]]; then + echo "info: already linked" >&2 + exit 0 + fi + # copy over dep files and mark kernel version as preserved + mkdir -p "$TARGET_DIR/" touch "$TARGET_DIR/.preserved" cp -r "$PRESERVE_DIR/modules".* "$TARGET_DIR/" @@ -104,17 +109,55 @@ preserve-modules-link() { exit 0 } +preserve-modules-unlink() { + if [[ $# -gt 1 ]]; then + echo "usage: preserve-modules unlink [release]" >&2 + exit 1 + elif [[ $# -eq 1 ]]; then + set-vars "$1" + fi + + # exit early if kernel modules not already copied + if [[ ! -f "$TARGET_DIR/.preserved" ]]; then + echo "info: not linked" >&2 + exit 0 + fi + + # clean preserved files + rm "$TARGET_DIR/.preserved" + rm "$TARGET_DIR/modules".* + mountpoint -q "$TARGET_DIR/kernel" && umount "$TARGET_DIR/kernel" + mountpoint -q "$TARGET_DIR/updates" && umount "$TARGET_DIR/updates" + + echo "info: unlinked modules" >&2 + exit 0 +} + usage() { - echo "usage: linux-preserve-modules <copy|link>" >&2 + echo "usage: linux-preserve-modules <copy|link|unlink> [release]" >&2 exit 1 } -if [[ "$#" -ne 1 ]]; then - usage -fi +main() { + if [[ "$(id -u)" -ne 0 ]]; then + echo "error: this script needs to run as root" >&2 + usage + fi + + set-vars "$(uname -r)" + + if [[ "$#" -eq 0 ]]; then + usage + fi + + CMD="$1" + shift + case "$CMD" in + copy) preserve-modules-copy "$@";; + link) preserve-modules-link "$@";; + unlink) preserve-modules-unlink "$@";; + *) usage;; + esac +} -case "$1" in - copy) preserve-modules-copy;; - link) preserve-modules-link;; - *) usage;; -esac +main "$@" diff --git a/preserve-modules-copy.hook b/linux-preserve-modules.hook index 5f402271e272..e60955a167b0 100644 --- a/preserve-modules-copy.hook +++ b/linux-preserve-modules.hook @@ -7,7 +7,7 @@ Target = usr/lib/modules/*/ Target = !usr/lib/modules/*/?* [Action] -Description = Preserving old linux kernel modules... (copying) +Description = Preserving old linux kernel modules... When = PreTransaction -Exec = /usr/share/libalpm/scripts/linux-preserve-modules copy +Exec = /usr/share/libalpm/scripts/linux-preserve-modules NeedsTargets diff --git a/linux-preserve-modules.script b/linux-preserve-modules.script new file mode 100755 index 000000000000..88e4a0b91c97 --- /dev/null +++ b/linux-preserve-modules.script @@ -0,0 +1,13 @@ +#!/bin/bash + +KERNEL="$(uname -r)" +TARGET="usr/lib/modules/$KERNEL" +PRESERVE_MODULES_DIR=/run/linux-preserve-modules + +if grep -F -q "$TARGET"; then + linux-preserve-modules unlink + linux-preserve-modules copy +else + echo "info: nothing to copy" >&2 + exit 0 +fi diff --git a/preserve-modules-link.hook b/preserve-modules-link.hook deleted file mode 100644 index 79cdaca47fc8..000000000000 --- a/preserve-modules-link.hook +++ /dev/null @@ -1,12 +0,0 @@ -[Trigger] -Type = Path -Operation = Install -Operation = Upgrade -Operation = Remove -Target = usr/lib/modules/*/ -Target = !usr/lib/modules/*/?* - -[Action] -Description = Preserving old linux kernel modules... (linking) -When = PostTransaction -Exec = /usr/share/libalpm/scripts/linux-preserve-modules link |