无法在 debian stretch / Debian 9 上更新 Linux 头文件

Abh*_*rma 7 debian linux-kernel linux-headers

运行以下命令后,我收到错误:

# apt-get install linux-headers-$(uname -r)
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package linux-headers-4.9.0-3-amd64
E: Couldn't find any package by glob 'linux-headers-4.9.0-3-amd64'
E: Couldn't find any package by regex 'linux-headers-4.9.0-3-amd64'
Run Code Online (Sandbox Code Playgroud)

为了排除故障,我检查了以下内容:

# apt-cache search linux-headers
aufs-dkms - DKMS files to build and install aufs
linux-libc-dev-arm64-cross - Linux Kernel Headers for development (for cross-compiling)
linux-libc-dev-armel-cross - Linux Kernel Headers for development (for cross-compiling)
linux-libc-dev-armhf-cross - Linux Kernel Headers for development (for cross-compiling)
linux-libc-dev-mips-cross - Linux Kernel Headers for development (for cross-compiling)
linux-libc-dev-mips64el-cross - Linux Kernel Headers for development (for cross-compiling)
linux-libc-dev-mipsel-cross - Linux Kernel Headers for development (for cross-compiling)
linux-libc-dev-ppc64el-cross - Linux Kernel Headers for development (for cross-compiling)
linux-libc-dev-s390x-cross - Linux Kernel Headers for development (for cross-compiling)
linux-libc-dev-alpha-cross - Linux Kernel Headers for development (for cross-compiling)
linux-libc-dev-hppa-cross - Linux Kernel Headers for development (for cross-compiling)
linux-libc-dev-m68k-cross - Linux Kernel Headers for development (for cross-compiling)
linux-libc-dev-mips64-cross - Linux Kernel Headers for development (for cross-compiling)
linux-libc-dev-powerpc-cross - Linux Kernel Headers for development (for cross-compiling)
linux-libc-dev-powerpcspe-cross - Linux Kernel Headers for development (for cross-compiling)
linux-libc-dev-ppc64-cross - Linux Kernel Headers for development (for cross-compiling)
linux-libc-dev-sh4-cross - Linux Kernel Headers for development (for cross-compiling)
linux-libc-dev-sparc64-cross - Linux Kernel Headers for development (for cross-compiling)
linux-headers-4.9.0-11-all - All header files for Linux 4.9 (meta-package)
linux-headers-4.9.0-11-all-amd64 - All header files for Linux 4.9 (meta-package)
linux-headers-4.9.0-11-amd64 - Header files for Linux 4.9.0-11-amd64
linux-headers-4.9.0-11-common - Common header files for Linux 4.9.0-11
linux-headers-4.9.0-11-common-rt - Common header files for Linux 4.9.0-11-rt
linux-headers-4.9.0-11-rt-amd64 - Header files for Linux 4.9.0-11-rt-amd64
linux-headers-amd64 - Header files for Linux amd64 configuration (meta-package)
linux-headers-rt-amd64 - Header files for Linux rt-amd64 configuration (meta-package)```


and 

# apt-cache search linux-image
linux-headers-4.9.0-11-amd64 - Header files for Linux 4.9.0-11-amd64
linux-headers-4.9.0-11-rt-amd64 - Header files for Linux 4.9.0-11-rt-amd64
linux-image-4.9.0-11-amd64 - Linux 4.9 for 64-bit PCs
linux-image-4.9.0-11-amd64-dbg - Debug symbols for linux-image-4.9.0-11-amd64
linux-image-4.9.0-11-rt-amd64 - Linux 4.9 for 64-bit PCs, PREEMPT_RT
linux-image-4.9.0-11-rt-amd64-dbg - Debug symbols for linux-image-4.9.0-11-rt-amd64
linux-image-amd64 - Linux for 64-bit PCs (meta-package)
linux-image-amd64-dbg - Debugging symbols for Linux amd64 configuration (meta-package)
linux-image-rt-amd64 - Linux for 64-bit PCs (meta-package), PREEMPT_RT
linux-image-rt-amd64-dbg - Debugging symbols for Linux rt-amd64 configuration (meta-package)
linux-image-4.9.0-3-amd64 - Linux 4.9 for 64-bit PCs
Run Code Online (Sandbox Code Playgroud)

运行 apt-cache search linux-image 后,我也得到了linux-image-4.9.0-3-amd64内核版本,这也是我想要的apt-cache search linux-headers命令的结果。

很少有人建议更改sources.list,然后尝试。但由于我是新手,我不知道如何搜索 source.list 的正确链接以及最适合解决我的问题的链接。

我确实在谷歌上搜索过,但没有找到解决方案。任何可以提供解决方案的链接或解决方案都会有很大帮助。

Ste*_*itt 11

为了

apt-get install linux-headers-$(uname -r)
Run Code Online (Sandbox Code Playgroud)

要工作,您需要运行一个仍可从发行版存储库中获得的内核;在大多数情况下,这基本上意味着您需要为您的发行版运行最新的受支持内核。

在 Debian 上,最简单的选择是

apt-get update
apt-get install linux-image-amd64 linux-headers-amd64
Run Code Online (Sandbox Code Playgroud)

(根据您的架构进行调整)以获取当前内核和匹配的头文件,然后重新启动。

  • 我错过了一步,你首先需要 `apt-get update`。 (2认同)
  • 如果您真的想使用较旧的内核,请参阅 [GAD3R 的回答](https://unix.stackexchange.com/a/543631/86440)。然而,也有不少缺点:较旧的内核有更多已知的安全问题……我强烈建议保持最新的发行版内核版本。请参阅 [Greg KH 在 Kernel Recipes 2017 上关于内核发布模型的演讲](https://unix.stackexchange.com/a/543631/86440) 和 [他关于使用哪个稳定内核的博客文章](http://www .kroah.com/log/blog/2018/08/24/what-stable-kernel-should-i-use/)。 (2认同)

GAD*_*D3R 6

linux-headers-4.9.0-3-amd64已经过时,它被去除,以更近的包替代linux-headers-4.9.0-11-amd64,这就是为什么你不能从常规仓库安装它。

您可以linux-headers-4.9.0-3-amd64快照存档存储库安装:

编辑您的来源列表:

nano /etc/apt/sources.list.d/snapshot.list
Run Code Online (Sandbox Code Playgroud)

添加以下几行:

deb http://snapshot.debian.org/archive/debian/20170609T034604Z stretch main
deb http://snapshot.debian.org/archive/debian/20170609T034604Z stretch-updates main
deb http://snapshot.debian.org/archive/debian-security/20170920T221221Z stretch/updates main
Run Code Online (Sandbox Code Playgroud)

然后:

apt -o Acquire::Check-Valid-Until=false update
apt install linux-headers-4.9.0-3-amd64
Run Code Online (Sandbox Code Playgroud)

要使用 Valid-Until 访问超过十几天的套件快照,必须忽略 Release 文件中的 Valid-Until 标头,以防止 apt 忽略快照条目(“Release file expired”)。为此目的使用aptitude -o Acquire::Check-Valid-Until=false updateapt-get -o Acquire::Check-Valid-Until=false更新。