NVIDIA the lazy way

I just deployed an updated upgrade script for kernel 5.7 / proprietary NVIDIA driver from repository. This assumes that every major kernel will break the proprietary NVIDIA. For kernel 5.6 I’d it skip all upgrades. I made a change this time, only locking kernel packages from upgrading, keeping others upgrading as usual.


#!/bin/bash

# Repositories
#
# | Alias       | Name                       | Required |
# +-------------+----------------------------+----------+
# | NVIDIA      | NVIDIA                     | Yes      |

set -o nounset -o noclobber -o pipefail

sudo zypper refresh >/dev/null

major=$(zypper list-updates | awk -v kernel="kernel-default" '
    $5 == kernel {
        split($7, old, ".");
        split($9, new, ".");
        major=new[1] != old[1] || new[2] != old[2] ? $9 : "";
        print major;
    }
    '
)

if ! zypper list-updates --repo NVIDIA | grep "^v " >/dev/null; then
    if  -n "$major" ]]; then
        sudo zypper addlock 'kernel-*' >/dev/null
    fi
else
    sudo zypper removelock 'kernel-*' >/dev/null
fi

sudo zypper dup

Give it a descriptive name (e.g. upgrade), place it somewhere on your path and use this script whenever you want to upgrade the system.

Credits: first seen this mentioned in https://lists.opensuse.org/opensuse-factory/2020-04/msg00111.html by forum member mrmazda.

PS: it might come a day where a major kernel wouldn’t break NVIDIA. It might not be a worthy install I’m afraid. If you want to install anyway:

sudo zypper removelock 'kernel-*' && sudo zypper dup