Abstract - last modified 2019-03-27
How to add support for debian backports to get newer kernel versions with Linux Mint LMDE 3.
Use at your own risk - you have to read and accept the disclaimer
[ due to it's transition to LTS, the backports-repository for debian jessie (the base of LMDE 2) has been shutdown since 2019-03-26 and is not reachable any more - the related sections for LMDE 2 (betsy) have been removed from the tutorial ]
Motivation
The kernel versions offered by the default repositories are typically older than kernel versions being available by debian backports.
Although backports kernels are not officially released for lmde, they are sometimes one of the last available options to bypass issues or limitations of hard- and/or software.
Objective
The tutorial creates the required sources.list-file and updates the package-cache to be able to use software coming from debian backports-repositories with lmde 3.
Using the backports repository in place - the kernel of a lmde 3 (cindy) vm is updated to a newer version as a sample.
The preferred and "easier" way for installation of a backports-kernel with lmde is using synaptic (which is covered in the first part of the tutorial).
There might be a situation where a graphical environment cant be used (due to issues - which one tries to bypass using a backports-kernel for example); which is covered by a detailed section using plain command line tools as alternative afterwards.
Remarks
Backports software
Adding debian backports-versions should be done intentionally - do not just hunt for highest version numbers.
Adding debian backports as a package-source will offer - besides more current kernel versions - updated versions of other packages too: Resist to fully update your system (at least not a productive system) without need, as this might get you unexpected/unwanted results or break your installation.
Debian backports are not automatically offered in apt or synaptic in most cases: as long there exist packages named identically with a different version number, backports-versions are "hidden" due to repository priorities normally.
In case you want to make use of available backports versions at other occasions later on, prefer to use synaptic. Select the according package first and then select "Force Version..." from the "Package" menu to have access to the backports-version.
To disable backports packages again, it's enough to run "Software Sources" from the main menu, select "Additional repositories" at the displayed dialog and disable the entries for debian backports; after using "OK "to accept changes, the internal cache will be refreshed.
Trouble shooting
Before you start with the required modifications: Make yourself familiar with entering the grub-menu on boot and how to select a previous kernel version from the advanced section there (in case added backports kernels would give you issues during boot or with the running OS).
Having a working live-mint usb-device or dvd (the one you installed your mint from) will be useful in case of trouble - test it's working before you continue here.
Know where to get more help: Linux Mint has an active community at IRC - running the hexchat IRC-client (is preinstalled + available at a live-mint too) will connect you straight to the #linuxmint-help channel at spotchat-IRC (greetings to the people there). Ask for help there, giving some details about the issue. Important: give people some minutes to write a reply - do NOT just ask and disconnect after one minute if you get no immediate response.
"Newbie" info
To paste commands to your terminal, either right-click into the terminal and select "paste" from the context-menu, or make the terminal the active window and press SHIFT+CTRL+v .
(copy&paste in terminals require to use SHIFT+CTRL+c and SHIFT+CTRL+v ; as CTRL+c is used there to abort running commands).
If your stuck when running commands (give it some time to finish) you could use CTRL+c to abort a running command.
Some commands require you to use " sudo " with them to gain root-access. Your user has to be member of the " sudo "-group to be able to do so. To check the group-membership of the current user, just type "groups" (without quotes) in your terminal, should list it.
Open a terminal and run (copy&paste):
groups
Which does return with the user "demo" (being the primary user = the person who did setup the installation):
demo@lmde-3-cinnamon-64bit:~$ groups demo adm dialout fax cdrom floppy tape sudo audio dip video plugdev users netdev bluetooth lpadmin scanner
Using sudo will ask for your password. Depending on your settings entering a password on the cli might either display '*' characters or no output at all. while entering it.
1 Preparations
1.1 - Backup data & timeshift
Backup any important data (you did read and understand the disclaimer - didn't you?).
With lmde 3 (cindy) timeshift is preinstalled and could be used to create a system snapshot before applying critical modifications to the installed OS. With a default setup, timeshift will exclude user-data located at /home on purpose.
1.2 - Determine your lmde-version
Open a terminal and run (copy&paste):
uname -a inxi -Sxx
Will return you some basic info about the used lmde-version - LMDE 3 (cindy) -, the current kernel-version in use and the current gcc-version.
The shown kernel-version and -type will help you to know, which architecture (amd64, 686, ...) has to be used from available kernels later on.
If the inxi-command did not return "LMDE 3 (cindy)" is being used: This tutorial is not meant for your installed linux-version, just stop here! [since 2019-03-26 the backports repository for debian jessie (the base of LMDE 2) has been shut-down and is not reachable any more]
In the tutorial a fully updated (2019-03-16) lmde 3 vm has been used to show samples of the expected output; your output will likely differ in details:
demo@lmde-3-cinnamon-64bit:~$ uname -a Linux lmde-3-cinnamon-64bit 4.9.0-8-amd64 #1 SMP Debian 4.9.144-3.1 (2019-02-19) x86_64 GNU/Linux demo@lmde-3-cinnamon-64bit:~$ inxi -Sxx System: Host: lmde-3-cinnamon-64bit Kernel: 4.9.0-8-amd64 x86_64 bits: 64 compiler: gcc v: 6.3.0 Desktop: Cinnamon 4.0.9 wm: muffin dm: LightDM Distro: LMDE 3 Cindy base: Debian 9.3 stretch
... thus we will pick some amd64-kernel in the following sample as reference.
1.3 - Ensure that current repositories are working
Besides having an up-to-date package list, the main purpose is to be sure, that your currently used package-sources are valid and working (which is important to exclude this as a potential point of failure later on) BEFORE adding debian backports repositories.
To update the package-cache use:
apt update
demo@lmde-3-cinnamon-64bit:~$ apt update [sudo] password for demo: Hit:1 http://security.debian.org stretch/updates InRelease Hit:2 http://www.deb-multimedia.org stretch InRelease Ign:3 http://packages.linuxmint.com cindy InRelease Hit:4 http://packages.linuxmint.com cindy Release Ign:6 https://cdn-aws.deb.debian.org/debian stretch InRelease Hit:7 https://cdn-aws.deb.debian.org/debian stretch-updates InRelease Hit:8 https://cdn-aws.deb.debian.org/debian stretch Release Reading package lists... Done Building dependency tree Reading state information... Done All packages are up to date.
If the output of "apt update" would show any errors related to used repositories not being reachable or any other error-message: Do not continue, but fix failing package sources first! (see the IRC hint in "Remarks" above, if you are not able to fix issues yourself).
The last line of your output should (preferable) state "All packages are up to date.".
1.4 - Install available updates
Available updates should get installed before adding backports kernels. So - check the update manager and apply offered updates. Using the update manager is preferable, as it does allow you to inspect available updates before they get installed (thus being able to exclude updates on purpose, if needed).
If you - for any reason - have to perform an upgrade from the cli - you can use instead:
apt upgrade
which will apply all available upgrades. Using apt upgrade does not allow you to select or exclude any of the available packages without additional steps.
If you experience issues during update: fix that first, before you continue at all.
In case you had to install missing updates: Reboot, before you continue, to be sure your current setup does work as expected.
1.5 - Dump dmesg output to a file
To be able to compare the system behavior and to identify/fix potential issues after installation of a backports-kernel, you could/should create a dump of related (bootstrap) kernel messages of the unmodified system using:
dmesg >~/dmesg_original.txt
1.6 - (optional) Install quick-search for synaptic
As newer mint versions (like lmde 3) are missing the quick-search feature with synaptic, you might want to add the according feature, as this does help a lot to filter available packages within sections.
The quick-filter is not required in any way, but it's more a personal preference using it (and you will ask yourself, why it did get removed at all, after you did use it). To install it use:
apt install apt-xapian-index
To get the underlying search-index refreshed out of the box (as otherwise the indexing would happen as background job) run:
sudo update-apt-xapian-index -f
2 Steps
2.1 - Create a sources.list
To be able to use the debian backports repository an according sources.list -file has to be created (once).
Create a sources.list -file for debian stretch backports - copy&paste the following to your terminal:
sudo bash -c "cat <<TAG >/etc/apt/sources.list.d/stretch-backports.list deb http://http.debian.net/debian stretch-backports main contrib non-free deb-src http://deb.debian.org/debian stretch-backports main contrib non-free TAG"
As the output is redirected to a file you should not see any reply from running the command.
demo@lmde-3-cinnamon-64bit:~$ sudo bash -c "cat <<TAG >/etc/apt/sources.list.d/stretch-backports.list > deb http://http.debian.net/debian stretch-backports main contrib non-free > deb-src http://deb.debian.org/debian stretch-backports main contrib non-free > TAG" [sudo] password for demo: demo@lmde-3-cinnamon-64bit:~$
2.2 - Add a backports kernel using synaptic
With synaptic (package manager) you mark a set of wanted packages interactively and when done with that, start the installation using the "Apply" toolbar-button. Synaptic will first check needed dependencies + does show what will be added/updated/removed before the actual install does run. Thus one will have a chance to stop package-installation if the outcome would lead to some unwanted "actions".
Using synaptic has the benefit, that it will (offer to) add further required dependencies, with almost no effort.
A typical sample for synaptic being nice to the user is: New/updated kernel-versions might require a newer gcc-versions to fully support added features, or to be able to compile modified kernel-headers.
2.2.1 - Refresh package cache
After adding (or removing) package sources, the package-cache has to be refreshed - just using the "Reload" toolbar-button will take care about.
2.2.2 - Determine available kernel versions
To filter the package-list to available kernel-images use the synaptic search-feature. Press CTRL+F or click onto the search-tool at the toolbar to show it.
Set the field "Look in:" to "Name" (instead of "Name and description") and use one of the following search-terms (matching you current kernel-version):
- linux-image amd64 - for 64-bit versions
- linux-image 686 - for 32bit versions
- linux-image - for a complete list
In most cases a regular (signed) kernel-version will be needed/used; ignoring this kernel-types:
- -dbg : with debug-symbols - needed by developers
- -unsigned : not usable with secure-boot
- -rt- : realtime - for high-responsive hw-related installations
- -cloud- : Amazon EC2, Google Compute Engine and Microsoft Azure cloud platforms
- -grsec- : Grsecurity protection (unofficial patch)
The sample does use the " linux-image-4.19.0-0.bpo.2-amd64 " package from here on.
2.2.3 - Required packages for a complete setup
Although just selecting the kernel-image for installation would technically work (in many cases), there are more packages required to have full and consistent access to all updated features.
To show the complete set of packages related to the kernel-version: run find again using just the plain version-number of the kernel-candidate; with the sample "4.19.0" is used.
2.2.4 - Mark required packages
Having the available packages filtered, there are several packages which should get marked (using CTRL+left-mouse-click).
Sticking to the sample - we select here:
- linux-headers-4.19.0-0.bpo.2-amd64
- linux-headers-4.19.0-0.bpo.2-common
- linux-image-4.19.0-0.bpo.2-amd64
- linux-support-4.19.0-0.bpo.2
Perform a right-click onto one of the selected packages and select "Mark for installation".
(lmde 3 only affected) In a perfect world, the message shown next should not be there at all (at least not in this way). What's more important: synaptic does silently fix the missing dependencies internally... without reporting the fact to the user...
With lmde 3 one has to select "Mark for installation" a second time to get the correct dialog shown; lmde 2 is seemingly not affected by this glitch and should show the expected dialog on the first run:
2.2.5 - Install selected packages
Using the "Custom Filters" - section in the lower left panel and selecting "Marked Changes" in the top panel, synaptic does show, that additionally Kbuild infrastructure for Linux 4.19 and an upgraded gcc compiler will get installed.
Using the "Apply" toolbar-button synaptic will show besides a summary of required operations a summary of expected download volume and required disk-space for the actual installation.
Using "Apply" from the dialog will finally start the actual installation (which you should not interrupt).
After the installation is finished you should open the details-section of the install-dialog to check for any error-messages.
If everything did work as expected, the final output should show that the initial ramdisk got created and grub has been successfully updated.
With all required modifications in place, you can close synaptic and reboot - see "Post install" section below.
2.3 - Add a backports kernel using apt
Note: If you are not able to use the suggested installation via synaptic for some reason, you could use the command line interface for installation too. If you did already install the needed backports-version using synaptic you can just skip this part.
To be honest - the main-purpose of showing what's needed to add a new/different backports-kernel using the cli is to convince you, to prefer using synaptic for it :-).
2.3.1 - Refresh package cache
After adding (or removing) package-sources, the cached package-list has to be refreshed:
apt update
If this would show any errors: Do not continue, but fix failing package sources first! The test-vm does return this:
demo@lmde-3-cinnamon-64bit:~$ apt update Hit:1 http://security.debian.org stretch/updates InRelease Hit:2 http://www.deb-multimedia.org stretch InRelease Get:3 http://deb.debian.org/debian stretch-backports InRelease [91.8 kB] Get:4 http://deb.debian.org/debian stretch-backports/contrib Sources [6,816 B] Ign:5 http://packages.linuxmint.com cindy InRelease Get:7 http://deb.debian.org/debian stretch-backports/non-free Sources [8,456 B] Get:8 http://deb.debian.org/debian stretch-backports/main Sources [587 kB] Hit:9 http://packages.linuxmint.com cindy Release Get:6 http://cdn-fastly.deb.debian.org/debian stretch-backports InRelease [91.8 kB] Get:13 http://cdn-fastly.deb.debian.org/debian stretch-backports/main amd64 Packages [573 kB] Get:14 http://cdn-fastly.deb.debian.org/debian stretch-backports/main i386 Packages [565 kB] Get:15 http://cdn-fastly.deb.debian.org/debian stretch-backports/main Translation-en [447 kB] Get:16 http://cdn-fastly.deb.debian.org/debian stretch-backports/main i386 Contents (deb) [6,256 kB] Ign:11 https://cdn-aws.deb.debian.org/debian stretch InRelease Hit:12 https://cdn-aws.deb.debian.org/debian stretch-updates InRelease Hit:17 https://cdn-aws.deb.debian.org/debian stretch Release Get:19 http://cdn-fastly.deb.debian.org/debian stretch-backports/main amd64 Contents (deb) [6,234 kB] Get:20 http://cdn-fastly.deb.debian.org/debian stretch-backports/contrib i386 Packages [10.5 kB] Get:21 http://cdn-fastly.deb.debian.org/debian stretch-backports/contrib amd64 Packages [11.1 kB] Get:22 http://cdn-fastly.deb.debian.org/debian stretch-backports/contrib Translation-en [7,540 B] Get:23 http://cdn-fastly.deb.debian.org/debian stretch-backports/contrib amd64 Contents (deb) [143 kB] Get:24 http://cdn-fastly.deb.debian.org/debian stretch-backports/contrib i386 Contents (deb) [143 kB] Get:25 http://cdn-fastly.deb.debian.org/debian stretch-backports/non-free amd64 Packages [32.6 kB] Get:26 http://cdn-fastly.deb.debian.org/debian stretch-backports/non-free i386 Packages [27.0 kB] Get:27 http://cdn-fastly.deb.debian.org/debian stretch-backports/non-free Translation-en [37.5 kB] Get:28 http://cdn-fastly.deb.debian.org/debian stretch-backports/non-free i386 Contents (deb) [68.6 kB] Get:29 http://cdn-fastly.deb.debian.org/debian stretch-backports/non-free amd64 Contents (deb) [119 kB] Fetched 15.5 MB in 23s (660 kB/s) Reading package lists... Done Building dependency tree Reading state information... Done All packages are up to date.
2.3.2 - Determine available kernel-versions
To list all available kernels without reducing it to some architecture use:
apt search "linux-image.*"
To limit the output to 686-version (32 bit kernels) only, use:
apt search "linux-image.*686$"
To limit the output to amd64-version (64 bit kernels) only, use:
apt search "linux-image.*amd64$"
As the vm-sample does run a 64-bit version, filtering to amd64 does return:
demo@lmde-3-cinnamon-64bit:~$ apt search "linux-image.*amd64$" p linux-image-4.19.0-0.bpo.2-amd64 - Linux 4.19 for 64-bit PCs (signed) p linux-image-4.19.0-0.bpo.2-cloud-amd64 - Linux 4.19 for x86-64 cloud (signed) p linux-image-4.19.0-0.bpo.2-rt-amd64 - Linux 4.19 for 64-bit PCs, PREEMPT_RT (signed) p linux-image-4.9.0-3-amd64 - Linux 4.9 for 64-bit PCs p linux-image-4.9.0-3-rt-amd64 - Linux 4.9 for 64-bit PCs, PREEMPT_RT p linux-image-4.9.0-4-amd64 - Linux 4.9 for 64-bit PCs p linux-image-4.9.0-4-grsec-amd64 - Linux 4.9 for 64-bit PCs, Grsecurity protection (unofficial patch p linux-image-4.9.0-4-rt-amd64 - Linux 4.9 for 64-bit PCs, PREEMPT_RT p linux-image-4.9.0-5-amd64 - Linux 4.9 for 64-bit PCs p linux-image-4.9.0-5-rt-amd64 - Linux 4.9 for 64-bit PCs, PREEMPT_RT p linux-image-4.9.0-6-amd64 - Linux 4.9 for 64-bit PCs p linux-image-4.9.0-6-rt-amd64 - Linux 4.9 for 64-bit PCs, PREEMPT_RT p linux-image-4.9.0-7-amd64 - Linux 4.9 for 64-bit PCs p linux-image-4.9.0-7-rt-amd64 - Linux 4.9 for 64-bit PCs, PREEMPT_RT i linux-image-4.9.0-8-amd64 - Linux 4.9 for 64-bit PCs p linux-image-4.9.0-8-rt-amd64 - Linux 4.9 for 64-bit PCs, PREEMPT_RT i linux-image-amd64 - Linux for 64-bit PCs (meta-package) p linux-image-cloud-amd64 - Linux for x86-64 cloud (meta-package) p linux-image-grsec-amd64 - Linux image meta-package, grsec featureset p linux-image-rt-amd64 - Linux for 64-bit PCs (meta-package), PREEMPT_RT
With the sample we are using a regular kernel-version and can thus exclude this kernel-types:
- -dbg : with debug-symbols - needed by developers
- -unsigned : not usable with secure-boot
- -rt- : realtime - for high-responsive hw-related installations
- -cloud- : Amazon EC2, Google Compute Engine and Microsoft Azure cloud platforms
- -grsec- : Grsecurity protection (unofficial patch)
Thus the first " linux-image-4.19.0-0.bpo.2-amd64 " - kernel is the (backports) kernel version - which we will use in the sample form here on.
2.3.3 - Determine available/needed packages
Although just using the kernel-image for installation would technically work (in many cases), there are more packages required to have full and consistent access to all updated features.
As it's easier to list all packages related to that kernel-versions instead of going through kernel-headers or modules being potentially available, just filter for all packages related to the kernel-version next:
apt search "4.19.0"
oadm@lmde-3-cinnamon-64bit:~$ apt search "4.19.0" p linux-headers-4.19.0-0.bpo.2-686:i386 - Header files for Linux 4.19.0-0.bpo.2-686 p linux-headers-4.19.0-0.bpo.2-686-pae:i386 - Header files for Linux 4.19.0-0.bpo.2-686-pae p linux-headers-4.19.0-0.bpo.2-all - All header files for Linux 4.19 (meta-package) p linux-headers-4.19.0-0.bpo.2-all:i386 - All header files for Linux 4.19 (meta-package) p linux-headers-4.19.0-0.bpo.2-all-amd64 - All header files for Linux 4.19 (meta-package) p linux-headers-4.19.0-0.bpo.2-all-i386:i386 - All header files for Linux 4.19 (meta-package) p linux-headers-4.19.0-0.bpo.2-amd64 - Header files for Linux 4.19.0-0.bpo.2-amd64 p linux-headers-4.19.0-0.bpo.2-cloud-amd64 - Header files for Linux 4.19.0-0.bpo.2-cloud-amd64 p linux-headers-4.19.0-0.bpo.2-common - Common header files for Linux 4.19.0-0.bpo.2 v linux-headers-4.19.0-0.bpo.2-common:i386 - p linux-headers-4.19.0-0.bpo.2-common-rt - Common header files for Linux 4.19.0-0.bpo.2-rt v linux-headers-4.19.0-0.bpo.2-common-rt:i386 - p linux-headers-4.19.0-0.bpo.2-rt-686-pae:i386 - Header files for Linux 4.19.0-0.bpo.2-rt-686-pae p linux-headers-4.19.0-0.bpo.2-rt-amd64 - Header files for Linux 4.19.0-0.bpo.2-rt-amd64 p linux-image-4.19.0-0.bpo.2-686:i386 - Linux 4.19 for older PCs (signed) p linux-image-4.19.0-0.bpo.2-686-dbg:i386 - Debug symbols for linux-image-4.19.0-0.bpo.2-686 p linux-image-4.19.0-0.bpo.2-686-pae:i386 - Linux 4.19 for modern PCs (signed) p linux-image-4.19.0-0.bpo.2-686-pae-dbg:i386 - Debug symbols for linux-image-4.19.0-0.bpo.2-686-pae p linux-image-4.19.0-0.bpo.2-686-pae-unsigned:i386 - Linux 4.19 for modern PCs p linux-image-4.19.0-0.bpo.2-686-unsigned:i386 - Linux 4.19 for older PCs p linux-image-4.19.0-0.bpo.2-amd64 - Linux 4.19 for 64-bit PCs (signed) p linux-image-4.19.0-0.bpo.2-amd64-dbg - Debug symbols for linux-image-4.19.0-0.bpo.2-amd64 p linux-image-4.19.0-0.bpo.2-amd64-unsigned - Linux 4.19 for 64-bit PCs p linux-image-4.19.0-0.bpo.2-cloud-amd64 - Linux 4.19 for x86-64 cloud (signed) p linux-image-4.19.0-0.bpo.2-cloud-amd64-dbg - Debug symbols for linux-image-4.19.0-0.bpo.2-cloud-amd64 p linux-image-4.19.0-0.bpo.2-cloud-amd64-unsigned - Linux 4.19 for x86-64 cloud p linux-image-4.19.0-0.bpo.2-rt-686-pae:i386 - Linux 4.19 for modern PCs, PREEMPT_RT (signed) p linux-image-4.19.0-0.bpo.2-rt-686-pae-dbg:i386 - Debug symbols for linux-image-4.19.0-0.bpo.2-rt-686-pae p linux-image-4.19.0-0.bpo.2-rt-686-pae-unsigned:i386 - Linux 4.19 for modern PCs, PREEMPT_RT p linux-image-4.19.0-0.bpo.2-rt-amd64 - Linux 4.19 for 64-bit PCs, PREEMPT_RT (signed) p linux-image-4.19.0-0.bpo.2-rt-amd64-dbg - Debug symbols for linux-image-4.19.0-0.bpo.2-rt-amd64 p linux-image-4.19.0-0.bpo.2-rt-amd64-unsigned - Linux 4.19 for 64-bit PCs, PREEMPT_RT v linux-latest-modules-4.19.0-0.bpo.2-686:i386 - v linux-latest-modules-4.19.0-0.bpo.2-686-pae:i386 - v linux-latest-modules-4.19.0-0.bpo.2-amd64 - v linux-latest-modules-4.19.0-0.bpo.2-cloud-amd64 - v linux-latest-modules-4.19.0-0.bpo.2-rt-686-pae:i386 - v linux-latest-modules-4.19.0-0.bpo.2-rt-amd64 - p linux-support-4.19.0-0.bpo.2 - Support files for Linux 4.19
Sorting out all the dbg, unsigned, rt, cloud, grsec and i386 or 686 packages in the sample, does reduce the list of related packages to:
p linux-headers-4.19.0-0.bpo.2-amd64 - Header files for Linux 4.19.0-0.bpo.2-amd64 p linux-headers-4.19.0-0.bpo.2-common - Common header files for Linux 4.19.0-0.bpo.2 p linux-image-4.19.0-0.bpo.2-amd64 - Linux 4.19 for 64-bit PCs (signed) v linux-latest-modules-4.19.0-0.bpo.2-amd64 - p linux-support-4.19.0-0.bpo.2 - Support files for Linux 4.19
Where one of them does denote with a leading "v" being a virtual packages. To determine which other package does contain the actual install-resources for " linux-latest-modules-4.19.0-0.bpo.2-amd64 " , use:
#you will have to use 'your' according virtual package(s) here apt-cache showpkg linux-latest-modules-4.19.0-0.bpo.2-amd64
Which does return that it's part of the kernel package itself (and can just be ignored):
oadm@lmde-3-cinnamon-64bit:~$ apt-cache showpkg linux-latest-modules-4.19.0-0.bpo.2-amd64 Package: linux-latest-modules-4.19.0-0.bpo.2-amd64 Versions: Reverse Depends: Dependencies: Provides: Reverse Provides: linux-image-amd64 4.19+102~bpo9+1 (= )
2.3.4 - Install required packages
At this point we have the initial required information, to give an install with the sample a first try (yes - that will not work on the first try in the sample ... just read on):
# you will have to use 'your' according packages instead: apt install linux-headers-4.19.0-0.bpo.2-amd64 \ linux-headers-4.19.0-0.bpo.2-common \ linux-image-4.19.0-0.bpo.2-amd64 \ linux-support-4.19.0-0.bpo.2
demo@lmde-3-cinnamon-64bit:~$ apt install linux-headers-4.19.0-0.bpo.2-amd64 \ > linux-headers-4.19.0-0.bpo.2-common \ > linux-image-4.19.0-0.bpo.2-amd64 \ > linux-support-4.19.0-0.bpo.2 Reading package lists... Done Building dependency tree Reading state information... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: linux-headers-4.19.0-0.bpo.2-amd64 : Depends: linux-compiler-gcc-6-x86 (>= 4.14.17-1~) E: Unable to correct problems, you have held broken packages.
This does show there is still a missing piece linux-compiler-gcc-6-x86 (>= 4.14.17-1~) , which is needed for the kernel-headers. To check which versions are available (keeping in mind that backports versions are not used automatically) we check what is available using:
apt-cache policy linux-compiler-gcc-6-x86
Which does show there is a version available to satisfy the required dependency:
demo@lmde-3-cinnamon-64bit:~$ apt-cache policy linux-compiler-gcc-6-x86 linux-compiler-gcc-6-x86: Installed: 4.9.144-3.1 Candidate: 4.9.144-3.1 Version table: 4.19.16-1~bpo9+1 100 100 http://http.debian.net/debian stretch-backports/main amd64 Packages *** 4.9.144-3.1 500 500 https://deb.debian.org/debian stretch-updates/main amd64 Packages 100 /var/lib/dpkg/status 4.9.144-3 500 500 https://deb.debian.org/debian stretch/main amd64 Packages 4.9.110-3+deb9u6 500 500 http://security.debian.org stretch/updates/main amd64 Packages
And the result does show there is a backports-version of gcc available, which does meet the dependency-requirements - Depends: linux-compiler-gcc-6-x86 (>= 4.14.17-1~) ; And armed with that we (hopefully) can get to the final (correct) package-list, where we need to explicitly specify the version to override the defaults:
# you will have to use 'your' according packages instead: apt install linux-headers-4.19.0-0.bpo.2-amd64 \ linux-headers-4.19.0-0.bpo.2-common \ linux-image-4.19.0-0.bpo.2-amd64 \ linux-support-4.19.0-0.bpo.2 \ linux-compiler-gcc-6-x86=4.19.16-1~bpo9+1
And finally does install everything needed/available for the new backports kernel.
demo@lmde-3-cinnamon-64bit:~$ apt install linux-headers-4.19.0-0.bpo.2-amd64 \ > linux-headers-4.19.0-0.bpo.2-common \ > linux-image-4.19.0-0.bpo.2-amd64 \ > linux-support-4.19.0-0.bpo.2 \ > linux-compiler-gcc-6-x86=4.19.16-1~bpo9+1 Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: linux-kbuild-4.19 Suggested packages: linux-doc-4.19 debian-kernel-handbook The following NEW packages will be installed: linux-headers-4.19.0-0.bpo.2-amd64 linux-headers-4.19.0-0.bpo.2-common linux-image-4.19.0-0.bpo.2-amd64 linux-kbuild-4.19 linux-support-4.19.0-0.bpo.2 The following packages will be upgraded: linux-compiler-gcc-6-x86 1 upgraded, 5 newly installed, 0 to remove and 6 not upgraded. Need to get 56.4 MB of archives. After this operation, 319 MB of additional disk space will be used. Do you want to continue? [Y/n] Get:1 http://cdn-fastly.deb.debian.org/debian stretch-backports/main amd64 linux-compiler-gcc-6-x86 amd64 4.19.16-1~bpo9+1 [214 kB] Get:2 http://cdn-fastly.deb.debian.org/debian stretch-backports/main amd64 linux-headers-4.19.0-0.bpo.2-common all 4.19.16-1~bpo9+1 [8,162 kB] Get:3 http://cdn-fastly.deb.debian.org/debian stretch-backports/main amd64 linux-kbuild-4.19 amd64 4.19.16-1~bpo9+1 [451 kB] Get:4 http://cdn-fastly.deb.debian.org/debian stretch-backports/main amd64 linux-headers-4.19.0-0.bpo.2-amd64 amd64 4.19.16-1~bpo9+1 [690 kB] Get:5 http://cdn-fastly.deb.debian.org/debian stretch-backports/main amd64 linux-image-4.19.0-0.bpo.2-amd64 amd64 4.19.16-1~bpo9+1 [46.7 MB] Get:6 http://cdn-fastly.deb.debian.org/debian stretch-backports/main amd64 linux-support-4.19.0-0.bpo.2 all 4.19.16-1~bpo9+1 [261 kB] Fetched 56.4 MB in 1min 25s (661 kB/s) (Reading database ... 232700 files and directories currently installed.) Preparing to unpack .../0-linux-compiler-gcc-6-x86_4.19.16-1~bpo9+1_amd64.deb ... Unpacking linux-compiler-gcc-6-x86 (4.19.16-1~bpo9+1) over (4.9.144-3.1) ... Selecting previously unselected package linux-headers-4.19.0-0.bpo.2-common. Preparing to unpack .../1-linux-headers-4.19.0-0.bpo.2-common_4.19.16-1~bpo9+1_all.deb ... Unpacking linux-headers-4.19.0-0.bpo.2-common (4.19.16-1~bpo9+1) ... Selecting previously unselected package linux-kbuild-4.19. Preparing to unpack .../2-linux-kbuild-4.19_4.19.16-1~bpo9+1_amd64.deb ... Unpacking linux-kbuild-4.19 (4.19.16-1~bpo9+1) ... Selecting previously unselected package linux-headers-4.19.0-0.bpo.2-amd64. Preparing to unpack .../3-linux-headers-4.19.0-0.bpo.2-amd64_4.19.16-1~bpo9+1_amd64.deb ... Unpacking linux-headers-4.19.0-0.bpo.2-amd64 (4.19.16-1~bpo9+1) ... Selecting previously unselected package linux-image-4.19.0-0.bpo.2-amd64. Preparing to unpack .../4-linux-image-4.19.0-0.bpo.2-amd64_4.19.16-1~bpo9+1_amd64.deb ... Unpacking linux-image-4.19.0-0.bpo.2-amd64 (4.19.16-1~bpo9+1) ... Selecting previously unselected package linux-support-4.19.0-0.bpo.2. Preparing to unpack .../5-linux-support-4.19.0-0.bpo.2_4.19.16-1~bpo9+1_all.deb ... Unpacking linux-support-4.19.0-0.bpo.2 (4.19.16-1~bpo9+1) ... Setting up linux-support-4.19.0-0.bpo.2 (4.19.16-1~bpo9+1) ... Setting up linux-headers-4.19.0-0.bpo.2-common (4.19.16-1~bpo9+1) ... Setting up linux-image-4.19.0-0.bpo.2-amd64 (4.19.16-1~bpo9+1) ... I: /vmlinuz is now a symlink to boot/vmlinuz-4.19.0-0.bpo.2-amd64 I: /initrd.img is now a symlink to boot/initrd.img-4.19.0-0.bpo.2-amd64 /etc/kernel/postinst.d/initramfs-tools: update-initramfs: Generating /boot/initrd.img-4.19.0-0.bpo.2-amd64 cryptsetup: WARNING: failed to detect canonical device of /dev/vda1 cryptsetup: WARNING: could not determine root device from /etc/fstab W: plymouth: The plugin label.so is missing, the selected theme might not work as expected. W: plymouth: You might want to install the plymouth-themes package to fix this. /etc/kernel/postinst.d/zz-update-grub: Generating grub configuration file ... Found linux image: /boot/vmlinuz-4.19.0-0.bpo.2-amd64 Found initrd image: /boot/initrd.img-4.19.0-0.bpo.2-amd64 Found linux image: /boot/vmlinuz-4.9.0-8-amd64 Found initrd image: /boot/initrd.img-4.9.0-8-amd64 Found memtest86+ image: /@/boot/memtest86+.bin Found memtest86+ multiboot image: /@/boot/memtest86+_multiboot.bin done Setting up linux-kbuild-4.19 (4.19.16-1~bpo9+1) ... Setting up linux-compiler-gcc-6-x86 (4.19.16-1~bpo9+1) ... Setting up linux-headers-4.19.0-0.bpo.2-amd64 (4.19.16-1~bpo9+1) ...
If everything did install without errors an implicit update-grub has been executed and the kernel will be available on the next reboot.
As an added backports-kernel will likely offer the highest version of available kernels it will be automatically selected as the current one.
So, as last step reboot and check the new "current" kernel version afterwards.
sync reboot
3 Post Install
You will likely want to recheck your current kernel-version using:
uname -a inxi -Sxx
Which should proof the new backports-kernel is being used:
demo@lmde-3-cinnamon-64bit:~$ uname -a Linux lmde-3-cinnamon-64bit 4.19.0-0.bpo.2-amd64 #1 SMP Debian 4.19.16-1~bpo9+1 (2019-02-07) x86_64 GNU/Linux demo@lmde-3-cinnamon-64bit:~$ inxi -Sxx System: Host: lmde-3-cinnamon-64bit Kernel: 4.19.0-0.bpo.2-amd64 x86_64 bits: 64 compiler: gcc v: 6.3.0 Desktop: Cinnamon 4.0.9 wm: muffin dm: LightDM Distro: LMDE 3 Cindy base: Debian 9.3 stretch
To be able to compare the system behavior and to identify/fix potential issues after installation of a backports-kernel, you could/should create a dump of related (bootstrap) kernel messages of the current/updated system using:
dmesg >~/dmesg_backports.txt
Good luck - have fun