Ubuntu 20.04下非root用户是否可将Linux headers包安装到自定义目录
非root用户在Ubuntu 20.04安装Linux headers到自定义目录方案
非root用户完全可以将Linux headers安装到$HOME下的自定义路径,全程不需要root权限,无需配置sudo密码或密钥,完全适配你的Jenkins任务场景。
操作步骤
- 首先确定需要的内核版本,若要匹配当前运行内核的版本,可通过
uname -r命令获取,例如返回结果为5.15.0-78-generic,对应需要下载两个包:通用头文件包linux-headers-5.15.0-78、架构专属头文件包linux-headers-5.15.0-78-generic。 - 下载对应版本的deb安装包,
apt download命令仅做包下载操作,不需要root权限:# 创建临时下载目录 mkdir -p $HOME/linux-headers/build cd $HOME/linux-headers/build # 替换为实际需要的版本号即可下载指定版本headers apt download linux-headers-5.15.0-78 linux-headers-5.15.0-78-generic - 解压deb包到自定义安装路径,无需使用dpkg(dpkg写入系统目录需要root),直接解压包内数据即可:
# 定义headers的最终安装路径 HEADERS_DIR=$HOME/linux-headers/5.15.0-78-generic mkdir -p $HEADERS_DIR # 依次解压两个deb包的内容到目标路径 ar x linux-headers-5.15.0-78_*.deb tar -xf data.tar.* -C $HEADERS_DIR ar x linux-headers-5.15.0-78-generic_*.deb tar -xf data.tar.* -C $HEADERS_DIR - 修正头文件内的默认路径引用:deb包内的Makefile默认指向系统
/usr/src、/lib/modules路径,需要替换为你的自定义路径:sed -i "s|/usr/src|$HEADERS_DIR/usr/src|g" $HEADERS_DIR/usr/src/linux-headers-*/Makefile sed -i "s|/lib/modules|$HEADERS_DIR/lib/modules|g" $HEADERS_DIR/usr/src/linux-headers-*/Makefile
驱动编译使用方法
编译驱动时无需将headers放置到系统默认路径,直接通过KERNELDIR参数指定自定义路径即可,示例编译命令:
make -C $HEADERS_DIR/usr/src/linux-headers-$(uname -r) M=$(pwd) modules
编译完成的驱动可直接拷贝到对应内核版本的目标机器加载使用,不需要目标机器安装编译工具或DKMS,符合严格的权限管控要求。
Jenkins任务适配说明
- 可在任务脚本中增加版本比对逻辑,每次运行先查询Ubuntu源内的最新headers版本,和本地已安装的版本比对,有更新时自动执行下载、解压、路径修正流程
- 所有操作全程使用普通用户权限即可完成,无需额外配置权限规则
内容的提问来源于stack exchange,提问作者Steve Folly
相关产品推荐
相关产品推荐

