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 12月 1 2023 build -> /usr/src/linux-headers-5.15.131-2-pve
drwxr-xr-x 15 root root 4096 11月 15 14:18 kernel
-rw-r--r-- 1 root root 1526004 11月 15 14:18 modules.alias
-rw-r--r-- 1 root root 1493154 11月 15 14:18 modules.alias.bin
-rw-r--r-- 1 root root 10174 12月 1 2023 modules.builtin
-rw-r--r-- 1 root root 0 11月 15 14:18 modules.builtin.alias.bin
-rw-r--r-- 1 root root 12792 11月 15 14:18 modules.builtin.bin
-rw-r--r-- 1 root root 77222 12月 1 2023 modules.builtin.modinfo
-rw-r--r-- 1 root root 705834 11月 15 14:18 modules.dep
-rw-r--r-- 1 root root 969468 11月 15 14:18 modules.dep.bin
-rw-r--r-- 1 root root 353 11月 15 14:18 modules.devname
-rw-r--r-- 1 root root 242897 12月 1 2023 modules.order
-rw-r--r-- 1 root root 1688 11月 15 14:18 modules.softdep
-rw-r--r-- 1 root root 679475 11月 15 14:18 modules.symbols
-rw-r--r-- 1 root root 822938 11月 15 14:18 modules.symbols.bin
drwxr-xr-x 2 root root 4096 11月 15 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.