当前位置: 首页 > article >正文

Debian11(pve) 使用.deb包 安装内核头文件

文章目录

  • 前言
  • 一、下载.deb包
  • 二、dpkg
    • 2.1 dpkg
    • 2.1 dpkg-deb
    • 2.3 dpkg-query

前言

$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

$ uname -r
5.15.131-2-pve
# ls -l /usr/src/linux-
linux-headers-5.10.0-31-amd64/  linux-headers-5.10.0-31-common/ linux-kbuild-5.10/

没有对应的内核头文件,因此无法编译内核模块。内核头文件对于Linux的运行不是必须的,但是如果要编译内核模块便需要。
而我这个系统是 -pve 类型的。

一、下载.deb包

http://download.proxmox.com/debian/pve/dists/bullseye/pvetest/binary-amd64/

在这里插入图片描述

# dpkg -i pve-headers-5.15.131-2-pve_5.15.131-3_amd64.deb
dpkg: 警告: 在 PATH 环境变量中找不到 ldconfig 或没有可执行权限
dpkg: 警告: 在 PATH 环境变量中找不到 start-stop-daemon 或没有可执行权限
dpkg: 错误: 2 在环境变量 PATH 中找不到该程序,或不可执行
提示:root 的 PATH 环境变量通常应当包含 /usr/local/sbin、/usr/sbin 和 /sbin
# whereis start-stop-daemon
start-stop-daemon: /usr/sbin/start-stop-daemon /usr/share/man/man8/start-stop-daemon.8.gz
# whereis start-stop-daemon
start-stop-daemon: /usr/sbin/start-stop-daemon /usr/share/man/man8/start-stop-daemon.8.gz
# echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

$PATH没有/usr/sbin/目录,将/usr/sbin/添加到 $PATH :
(1)临时性修改:

export PATH=$PATH:/usr/sbin/
# export PATH=$PATH:/usr/sbin/
# echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/sbin/

(2)永久性修改:
如果你想要永久性地将 /usr/sbin/ 目录添加到 $PATH 环境变量中,你可以编辑你的 shell 配置文件(比如 ~/.bashrc 或 ~/.bash_profile)。在文件末尾添加以下行:

export PATH=$PATH:/usr/sbin/

保存文件并使其生效。你可以关闭终端并重新打开一个新的终端窗口,或者运行 source ~/.bashrc 或 source ~/.bash_profile 来使修改立即生效。

当 /usr/sbin/ 目录被添加到 $PATH 后,系统会在执行命令时搜索该目录,这样就可以直接运行位于 /usr/sbin/ 目录下的命令了。

# dpkg -i pve-headers-5.15.131-2-pve_5.15.131-3_amd64.deb
正在选中未选择的软件包 pve-headers-5.15.131-2-pve。
(正在读取数据库 ... 系统当前共安装有 186392 个文件和目录。)
准备解压 pve-headers-5.15.131-2-pve_5.15.131-3_amd64.deb  ...
正在解压 pve-headers-5.15.131-2-pve (5.15.131-3) ...
正在设置 pve-headers-5.15.131-2-pve (5.15.131-3) ...
# ls -l /usr/src/linux-
linux-headers-5.10.0-31-amd64/  linux-headers-5.10.0-31-common/ linux-headers-5.15.131-2-pve/   linux-kbuild-5.10/

可以看到 /usr/src/ 目录有 linux-headers-5.15.131-2-pve/ 头文件目录了。

/lib/modules/5.15.131-2-pve/目录下也多了一个build目录:

# ls -l /lib/modules/5.15.131-2-pve/
总用量 6420
lrwxrwxrwx  1 root root      37 121  2023 build -> /usr/src/linux-headers-5.15.131-2-pve
drwxr-xr-x 15 root root    4096 1115 14:18 kernel
-rw-r--r--  1 root root 1526004 1115 14:18 modules.alias
-rw-r--r--  1 root root 1493154 1115 14:18 modules.alias.bin
-rw-r--r--  1 root root   10174 121  2023 modules.builtin
-rw-r--r--  1 root root       0 1115 14:18 modules.builtin.alias.bin
-rw-r--r--  1 root root   12792 1115 14:18 modules.builtin.bin
-rw-r--r--  1 root root   77222 121  2023 modules.builtin.modinfo
-rw-r--r--  1 root root  705834 1115 14:18 modules.dep
-rw-r--r--  1 root root  969468 1115 14:18 modules.dep.bin
-rw-r--r--  1 root root     353 1115 14:18 modules.devname
-rw-r--r--  1 root root  242897 121  2023 modules.order
-rw-r--r--  1 root root    1688 1115 14:18 modules.softdep
-rw-r--r--  1 root root  679475 1115 14:18 modules.symbols
-rw-r--r--  1 root root  822938 1115 14:18 modules.symbols.bin
drwxr-xr-x  2 root root    4096 1115 14:18 zfs
build -> /usr/src/linux-headers-5.15.131-2-pve

这样我们就可以编译内核模块了。

我们使用 dpkg -c pve-headers-5.15.131-2-pve_5.15.131-3_amd64.deb查看.deb的文件:

./usr/src/linux-headers-5.15.131-2-pve/
./lib/modules/5.15.131-2-pve/build -> /usr/src/linux-headers-5.15.131-2-pve

二、dpkg

2.1 dpkg

NAME
       dpkg - package manager for Debian

dpkg 是用于安装、构建、删除和管理 Debian 包的工具。dpkg 的主要和更用户友好的前端是 aptitude。dpkg 本身完全通过命令行参数来控制,其中包含一个操作和零个或多个选项。操作参数告诉 dpkg 要做什么,而选项以某种方式控制操作的行为。

dpkg 也可以用作 dpkg-deb 和 dpkg-query 的前端。支持的操作列表可以在后面的ACTIONS部分找到。如果遇到任何这样的操作,dpkg 只是使用给定的参数运行 dpkg-deb 或 dpkg-query,但当前并未传递任何特定的选项给它们。要使用这些选项,需要直接调用这些后端。

-i 选项:

       -i, --install package-file...
           Install the package. If --recursive or -R option is specified, package-file must refer to a directory instead.

2.1 dpkg-deb

       dpkg-deb actions
           See dpkg-deb(1) for more information about the following actions, and other actions and options not exposed by the dpkg front-
           end.

           -b, --build directory [archive|directory]
               Build a deb package.

           -c, --contents archive
               List contents of a deb package.

           -e, --control archive [directory]
               Extract control-information from a package.

           -x, --extract archive directory
               Extract the files contained by package.

           -X, --vextract archive directory
               Extract and display the filenames contained by a package.

           -f, --field  archive [control-field...]
               Display control field(s) of a package.

           --ctrl-tarfile archive
               Output the control tar-file contained in a Debian package.

           --fsys-tarfile archive
               Output the filesystem tar-file contained by a Debian package.

           -I, --info archive [control-file...]
               Show information about a package.

根据 dpkg-deb 的文档,以下是一些常见操作的简要说明:

-b, --build directory [archive|directory]:构建一个 deb 软件包。
-c, --contents archive:列出一个 deb 软件包的内容。
-e, --control archive [directory]:从软件包中提取控制信息。
-x, --extract archive directory:提取软件包中包含的文件。
-X, --vextract archive directory:提取并显示软件包中包含的文件名。
-f, --field archive [control-field...]:显示软件包的控制字段。
--ctrl-tarfile archive:输出 Debian 软件包中包含的控制 tar 文件。
--fsys-tarfile archive:输出 Debian 软件包中包含的文件系统 tar 文件。
-I, --info archive [control-file...]:显示关于一个软件包的信息。
NAME
       dpkg-deb - Debian package archive (.deb) manipulation tool

SYNOPSIS
       dpkg-deb [option...] command

DESCRIPTION
       dpkg-deb packs, unpacks and provides information about Debian archives.

       Use dpkg to install and remove packages from your system.

       You can also invoke dpkg-deb by calling dpkg with whatever options you want to pass to dpkg-deb. dpkg will spot that you wanted dpkg-deb and run it for you.

       For most commands taking an input archive argument, the archive can be read from standard input if the archive name is given as a single minus character
       («-»); otherwise lack of support will be documented in their respective command description.

dpkg-deb 命令:
(1)名称:dpkg-deb - Debian软件包存档(.deb)操作工具
(2)概要:dpkg-deb [选项…] 命令
(3)描述:dpkg-deb 可以打包(packs)、解包(unpacks)并提供有关 Debian 存档的信息。 使用 dpkg 来在系统上安装和删除软件包。 你也可以通过调用 dpkg 并传递给 dpkg-deb 任何选项来调用 dpkg-deb。dpkg 会注意到你想要运行 dpkg-deb 并为你运行它。 对于大多数需要输入存档参数的命令来说,如果存档名称被指定为单个减号字符(“-”),则可以从标准输入读取存档;否则,在各自的命令描述中将记录不支持这种方式。

2.3 dpkg-query

       dpkg-query actions
           See dpkg-query(1) for more information about the following actions, and other actions and options not exposed by the dpkg front-
           end.

           -l, --list package-name-pattern...
               List packages matching given pattern.

           -s, --status package-name...
               Report status of specified package.

           -L, --listfiles package-name...
               List files installed to your system from package-name.

           -S, --search filename-search-pattern...
               Search for a filename from installed packages.

           -p, --print-avail package-name...
               Display details about package-name, as found in /var/lib/dpkg/available. Users of APT-based frontends should use apt show
               package-name instead.

根据 dpkg-query 的文档,以下是一些常见操作的简要说明:

-l, --list package-name-pattern...:列出与给定模式匹配的软件包。
-s, --status package-name...:报告指定软件包的状态。
-L, --listfiles package-name...:列出从软件包安装到系统中的文件。
-S, --search filename-search-pattern...:从已安装的软件包中搜索文件名。
-p, --print-avail package-name...:显示关于软件包的详细信息,如在 /var/lib/dpkg/available 中找到的信息。使用基于 APT 的前端用户应该使用 apt show package-name。
NAME
       dpkg-query - a tool to query the dpkg database

SYNOPSIS
       dpkg-query [option...] command

DESCRIPTION
       dpkg-query is a tool to show information about packages listed in the dpkg database.

http://www.kler.cn/a/429569.html

相关文章:

  • Vue如何构建项目
  • PostgreSQL技术内幕22:vacuum full 和 vacuum
  • HTML5 加载动画(Loading Animation)
  • 流批一体计算引擎-18-离线和实时缝合成的流批一体缘何成为主流
  • C#图表性能的巅峰之选:LightningChart®.NET
  • 第27章 汇编语言--- 设备驱动开发基础
  • 数据分析特征标准化方法及其Python实现
  • 数据结构第一弹-哈希表
  • 调度系统:Prefect 结合 Couchbase SQL 执行和调度 SQL 查询脚本
  • 【C++】质因数分解问题详解与代码实现
  • Rust 错误处理(下)
  • 01-Chromedriver下载与配置(mac)
  • React 中为什么不直接使用 requestIdleCallback?
  • mongoDb的读session和写session权限报错问题
  • 获取pdf文件文字图片内容以及在PDF中插入图片
  • 【传感器技术】第4章 力敏传感器,弹性敏感元件的基本特性,应变式压力传感器,电阻应变片的温度补偿,压阻式压力传感器,压电式压力传感器
  • 磁盘系列基础知识(一):硬盘;IDE;ATA;SATA;AHCI;SCSI;SAS
  • 如何使用 SQL 语句创建一个 MySQL 数据库的表,以及对应的 XML 文件和 Mapper 文件
  • 服务器加固
  • 【教程】一键完成进入Docker并激活Conda虚拟环境
  • 探索单片机中存储器与寄存器的奥秘关联
  • 2025计算机毕设选题推荐【30条选题】【基础功能+创新点设计】
  • 云计算对定制软件开发的影响
  • 光源选择打光策略:照亮精准检测之路
  • Github 2024-12-09 开源项目周报 Top15
  • Astro 5.0 发布