EndeavourOS Arch下无bindeb-pkg时如何构建Linux内核.deb包
方法一:用debootstrap创建轻量Debian/Ubuntu chroot环境(推荐)
这种方式无需虚拟机,仅在Arch内创建隔离的目标系统根目录,完全模拟Debian/Ubuntu的打包环境,避免依赖冲突,操作轻量且可靠。
安装debootstrap工具
在Arch终端执行:sudo pacman -S debootstrap创建目标系统chroot目录
以Ubuntu 22.04(jammy)为例,创建名为ubuntu-chroot的目录:sudo debootstrap jammy ./ubuntu-chroot http://archive.ubuntu.com/ubuntu/若构建Debian包,替换为对应版本代号(如bookworm)和官方源地址即可。
挂载必要文件系统并进入chroot
sudo mount --bind /dev ./ubuntu-chroot/dev sudo mount --bind /proc ./ubuntu-chroot/proc sudo mount --bind /sys ./ubuntu-chroot/sys sudo chroot ./ubuntu-chroot在chroot内安装内核构建依赖
进入chroot后先更新源:apt update && apt upgrade -y安装构建必需的工具包:
apt install -y build-essential libncurses-dev bison flex libssl-dev libelf-dev dpkg-dev debhelper复制内核源码到chroot环境
在Arch终端(不要在chroot内),将你的内核源码目录复制到chroot的/home下:sudo cp -r /path/to/your/linux-source ./ubuntu-chroot/home/在chroot中构建.deb包
回到chroot终端,进入内核源码目录:cd /home/linux-source导入目标系统的内核配置(可从现有Ubuntu系统复制
.config,或用make menuconfig自定义),然后执行:make -j$(nproc) bindeb-pkg构建完成后,
.deb包会生成在chroot的/home目录下,直接在Arch系统中从./ubuntu-chroot/home/取出即可。退出并清理chroot环境
构建完成后退出chroot:exit卸载挂载的文件系统:
sudo umount ./ubuntu-chroot/dev ./ubuntu-chroot/proc ./ubuntu-chroot/sys后续再次构建时,重新挂载并进入chroot即可,无需重复创建环境。
方法二:直接在Arch上安装Debian打包工具(不推荐,依赖冲突风险高)
若坚持直接在Arch内操作,可尝试安装Debian系打包工具,但大概率会遇到依赖版本冲突,仅适合临时测试:
安装dpkg及相关工具
从AUR安装dpkg:yay -S dpkg同时安装Arch对应的基础构建工具:
sudo pacman -S base-devel ncurses bison flex openssl elfutils调整内核构建脚本
内核源码的scripts/package/builddeb脚本依赖Debian系环境变量与路径,需手动修改脚本中的路径配置,将Debian默认路径映射到Arch对应位置。这种方法兼容性问题多,不用于生产场景。
补充:生成.tar.xz格式内核包
若仅需.tar.xz格式包,直接在Arch的内核源码目录执行:
make -j$(nproc) tar-pkg
生成的包会在源码目录的上级目录,可手动解压到Debian/Ubuntu的/boot和/lib/modules目录,之后需手动执行update-grub配置引导。
内容的提问来源于stack exchange,提问作者Agustin

