Debian11_手工制作deb安装包_过程和方法
Debian11_手工制作deb安装包_过程和方法
转载注明来源: 本文链接 来自osnosn的博客,写于 2023-08-10.
参考
- 官方文档【4.Source packages】,【5.Control files and their fields】
- 【linux下deb包的管理及制作 | 一次成功】
- 【linux下制作deb的方法总结】
需求
- 想给 armbian 系统更换/升级内核。
内核包括 image,kmod 和 headers,文件很多,需要放置在不同的系统目录中。 - 但网上找到别人编译好的内核,是 tar.gz 的压缩包。
安装过程麻烦。解压后,要copy到指定位置。时间久了,就忘了copy到哪里了。
不方便安装,不方便卸载。 - 想把这些文件,打包成一个 deb 安装包。 用 "dpkg -i" 安装,用 "dpkg -r" 卸载。就方便多了。
制作 deb 包
- 按照参考中的帖子,制作 deb 包,似乎是不难。
无非就是两步。- 准备 deb 包内的文件目录。
- 创建"控制文件",即 "DEBIAN/" 目录。
最终写了个脚本
以下是完整的例子
- 去 【kernel_dev】下载 "5.15.125-ophub.tar.gz",约 89MB。
- 脚本没有获取命令行参数。内核版本号,写在脚本的第二行,需要的时候,手工修改一下 "version=" 即可。
脚本执行后,会在当前目录创建几个目录,
"debian/", "img_root/", "head_root/", "5.15.125/"(解压 tar.gz 创建的目录)。
最后生成两个 deb 文件。脚本执行结束后,上述的 4 个目录就没用了,可以删除。 - 这个脚本,创建"文件目录"部分,参考了 ophub 内核升级脚本 【armbian-update】 "update_kernel()" 函数的安装步骤。
在 N1 上执行这个脚本。耗时 2m55s 生成两个 deb 文件。文件还挺大的。#!/bin/bash version=5.15.125 tar zxf ${version}.tar.gz -C ./ kernel_boot="$(basename $(ls ${version}/boot-${inputs_kernel}*.tar.gz 2>/dev/null | head -n 1))" kernel_name="${kernel_boot:5:-7}" #--- 源码包控制文件,Source package control files --- mkdir -p debian cat <<EOF > debian/changelog linux-image-headers-s905d-ophub (0.1) focal; urgency=low * Custom built Linux kernel. -- System Administrator <root@localhost.localdomain> Fri, 11 Aug 2023 00:42:42 -0000 EOF cat <<EOF > debian/control Source: linux-image-headers-s905d-ophub Maintainer: System Administrator <root@localhost.localdomain> Package: linux-image-${version}-aml-s905d-ophub Architecture: arm64 Section: kernel Priority: optional Homepage: https://www.kernel.org/ Description: Linux kernel, version ${version}-aml-s905d-ophub This package contains the Linux kernel, modules and corresponding other files. Package: linux-headers-${version}-aml-s905d-ophub Architecture: arm64 Section: kernel Priority: optional Homepage: https://www.kernel.org/ Description: Linux kernel headers for ${version}-aml-s905d-ophub on arm64 This package provides kernel header files for ${version}-aml-s905d-ophub on arm64. This is useful for people who need to build external modules EOF #--------------image deb--------- IMAGE_ROOT=img_root mkdir -p "${IMAGE_ROOT}" #...--- boot --- boot_dir=${IMAGE_ROOT}/boot mkdir -p "${boot_dir}" tar zxf ${version}/boot-${kernel_name}.tar.gz -C ${boot_dir}/ #mv ${boot_dir}/uInitrd-${kernel_name} ${boot_dir}/uInitrd #cp ${boot_dir}/vmlinuz-${kernel_name} ${boot_dir}/zImage #...--- dtb --- dtb_dir=${boot_dir}/dtb-${kernel_name}/ mkdir -p "${dtb_dir}" tar zxf ${version}/dtb-amlogic-${kernel_name}.tar.gz -C ${dtb_dir} #...--- kmod --- kmod_dir=${IMAGE_ROOT}/usr/lib/modules mkdir -p "${kmod_dir}" tar zxf ${version}/modules-${kernel_name}.tar.gz -C ${kmod_dir} rm -f ${kmod_dir}/${kernel_name}/{build,source} mkdir -p "${IMAGE_ROOT}/DEBIAN" touch ${IMAGE_ROOT}/DEBIAN/md5sums cat <<EOF > ${IMAGE_ROOT}/DEBIAN/postinst #!/bin/sh set -e # Pass maintainer script parameters to hook scripts export DEB_MAINT_PARAMS="$*" # Tell initramfs builder whether it's wanted export INITRD=Yes test -d /etc/kernel/postinst.d && run-parts --arg="${version}-aml-s905d-ophub" --arg="/boot/vmlinuz-${version}-aml-s905d-ophub" /etc/kernel/postinst.d exit 0 EOF cat <<EOF > ${IMAGE_ROOT}/DEBIAN/postrm #!/bin/sh set -e # Pass maintainer script parameters to hook scripts export DEB_MAINT_PARAMS="$*" # Tell initramfs builder whether it's wanted export INITRD=Yes test -d /etc/kernel/postrm.d && run-parts --arg="${version}-aml-s905d-ophub" --arg="/boot/vmlinuz-${version}-aml-s905d-ophub" /etc/kernel/postrm.d exit 0 EOF cat <<EOF > ${IMAGE_ROOT}/DEBIAN/preinst #!/bin/sh set -e # Pass maintainer script parameters to hook scripts export DEB_MAINT_PARAMS="$*" # Tell initramfs builder whether it's wanted export INITRD=Yes test -d /etc/kernel/preinst.d && run-parts --arg="${version}-aml-s905d-ophub" --arg="/boot/vmlinuz-${version}-aml-s905d-ophub" /etc/kernel/preinst.d exit 0 EOF cat <<EOF > ${IMAGE_ROOT}/DEBIAN/prerm #!/bin/sh set -e # Pass maintainer script parameters to hook scripts export DEB_MAINT_PARAMS="$*" # Tell initramfs builder whether it's wanted export INITRD=Yes test -d /etc/kernel/prerm.d && run-parts --arg="${version}-aml-s905d-ophub" --arg="/boot/vmlinuz-${version}-aml-s905d-ophub" /etc/kernel/prerm.d exit 0 EOF chmod +x ${IMAGE_ROOT}/DEBIAN/postinst ${IMAGE_ROOT}/DEBIAN/postrm ${IMAGE_ROOT}/DEBIAN/preinst ${IMAGE_ROOT}/DEBIAN/prerm dpkg-gencontrol -P${IMAGE_ROOT} -plinux-image-${version}-aml-s905d-ophub -v${version}-aml-s905d-ophub-1 -DSource=linux-upstream dpkg-deb -b ${IMAGE_ROOT} linux-image-${version}-aml-s905d-ophub_arm64.deb #--------------headers deb--------- HEADER_ROOT=head_root mkdir -p "${HEADER_ROOT}" header_dir=${HEADER_ROOT}/usr/src/linux-headers-${kernel_name} mkdir -p "${header_dir}" tar zxf ${version}/header-${version}-ophub.tar.gz -C ${header_dir} kmod_dir=${HEADER_ROOT}/usr/lib/modules mkdir -p "${kmod_dir}/${kernel_name}" ln -sf /usr/src/linux-headers-${kernel_name} ${kmod_dir}/${kernel_name}/build mkdir -p "${HEADER_ROOT}/DEBIAN" touch ${HEADER_ROOT}/DEBIAN/md5sums dpkg-gencontrol -P${HEADER_ROOT} -plinux-headers-${version}-aml-s905d-ophub -v${version}-aml-s905d-ophub-1 -DSource=linux-upstream dpkg-deb -b ${HEADER_ROOT} linux-headers-${version}-aml-s905d-ophub_arm64.deb #--------------end---------
7.2M linux-headers-5.15.125-aml-s905d-ophub_arm64.deb 64M linux-image-5.15.125-aml-s905d-ophub_arm64.deb
----end----
.