162306a36Sopenharmony_ci#!/bin/sh 262306a36Sopenharmony_ci# 362306a36Sopenharmony_ci# builddeb 1.3 462306a36Sopenharmony_ci# Copyright 2003 Wichert Akkerman <wichert@wiggy.net> 562306a36Sopenharmony_ci# 662306a36Sopenharmony_ci# Simple script to generate a deb package for a Linux kernel. All the 762306a36Sopenharmony_ci# complexity of what to do with a kernel after it is installed or removed 862306a36Sopenharmony_ci# is left to other scripts and packages: they can install scripts in the 962306a36Sopenharmony_ci# /etc/kernel/{pre,post}{inst,rm}.d/ directories (or an alternative location 1062306a36Sopenharmony_ci# specified in KDEB_HOOKDIR) that will be called on package install and 1162306a36Sopenharmony_ci# removal. 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ciset -e 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ciis_enabled() { 1662306a36Sopenharmony_ci grep -q "^$1=y" include/config/auto.conf 1762306a36Sopenharmony_ci} 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ciif_enabled_echo() { 2062306a36Sopenharmony_ci if is_enabled "$1"; then 2162306a36Sopenharmony_ci echo -n "$2" 2262306a36Sopenharmony_ci elif [ $# -ge 3 ]; then 2362306a36Sopenharmony_ci echo -n "$3" 2462306a36Sopenharmony_ci fi 2562306a36Sopenharmony_ci} 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_cicreate_package() { 2862306a36Sopenharmony_ci local pname="$1" pdir="$2" 2962306a36Sopenharmony_ci local dpkg_deb_opts 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci mkdir -m 755 -p "$pdir/DEBIAN" 3262306a36Sopenharmony_ci mkdir -p "$pdir/usr/share/doc/$pname" 3362306a36Sopenharmony_ci cp debian/copyright "$pdir/usr/share/doc/$pname/" 3462306a36Sopenharmony_ci cp debian/changelog "$pdir/usr/share/doc/$pname/changelog.Debian" 3562306a36Sopenharmony_ci gzip -n -9 "$pdir/usr/share/doc/$pname/changelog.Debian" 3662306a36Sopenharmony_ci sh -c "cd '$pdir'; find . -type f ! -path './DEBIAN/*' -printf '%P\0' \ 3762306a36Sopenharmony_ci | xargs -r0 md5sum > DEBIAN/md5sums" 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci # Fix ownership and permissions 4062306a36Sopenharmony_ci if [ "$DEB_RULES_REQUIRES_ROOT" = "no" ]; then 4162306a36Sopenharmony_ci dpkg_deb_opts="--root-owner-group" 4262306a36Sopenharmony_ci else 4362306a36Sopenharmony_ci chown -R root:root "$pdir" 4462306a36Sopenharmony_ci fi 4562306a36Sopenharmony_ci # a+rX in case we are in a restrictive umask environment like 0077 4662306a36Sopenharmony_ci # ug-s in case we build in a setuid/setgid directory 4762306a36Sopenharmony_ci chmod -R go-w,a+rX,ug-s "$pdir" 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci # Create the package 5062306a36Sopenharmony_ci dpkg-gencontrol -p$pname -P"$pdir" 5162306a36Sopenharmony_ci dpkg-deb $dpkg_deb_opts ${KDEB_COMPRESS:+-Z$KDEB_COMPRESS} --build "$pdir" .. 5262306a36Sopenharmony_ci} 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ciinstall_linux_image () { 5562306a36Sopenharmony_ci pdir=$1 5662306a36Sopenharmony_ci pname=$2 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci rm -rf ${pdir} 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci # Only some architectures with OF support have this target 6162306a36Sopenharmony_ci if is_enabled CONFIG_OF_EARLY_FLATTREE && [ -d "${srctree}/arch/${SRCARCH}/boot/dts" ]; then 6262306a36Sopenharmony_ci ${MAKE} -f ${srctree}/Makefile INSTALL_DTBS_PATH="${pdir}/usr/lib/linux-image-${KERNELRELEASE}" dtbs_install 6362306a36Sopenharmony_ci fi 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci ${MAKE} -f ${srctree}/Makefile INSTALL_MOD_PATH="${pdir}" modules_install 6662306a36Sopenharmony_ci rm -f "${pdir}/lib/modules/${KERNELRELEASE}/build" 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci # Install the kernel 6962306a36Sopenharmony_ci if [ "${ARCH}" = um ] ; then 7062306a36Sopenharmony_ci mkdir -p "${pdir}/usr/lib/uml/modules" 7162306a36Sopenharmony_ci mv "${pdir}/lib/modules/${KERNELRELEASE}" "${pdir}/usr/lib/uml/modules/${KERNELRELEASE}" 7262306a36Sopenharmony_ci mkdir -p "${pdir}/usr/bin" "${pdir}/usr/share/doc/${pname}" 7362306a36Sopenharmony_ci cp System.map "${pdir}/usr/lib/uml/modules/${KERNELRELEASE}/System.map" 7462306a36Sopenharmony_ci cp ${KCONFIG_CONFIG} "${pdir}/usr/share/doc/${pname}/config" 7562306a36Sopenharmony_ci gzip "${pdir}/usr/share/doc/${pname}/config" 7662306a36Sopenharmony_ci else 7762306a36Sopenharmony_ci mkdir -p "${pdir}/boot" 7862306a36Sopenharmony_ci cp System.map "${pdir}/boot/System.map-${KERNELRELEASE}" 7962306a36Sopenharmony_ci cp ${KCONFIG_CONFIG} "${pdir}/boot/config-${KERNELRELEASE}" 8062306a36Sopenharmony_ci fi 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci # Not all arches have the same installed path in debian 8362306a36Sopenharmony_ci # XXX: have each arch Makefile export a variable of the canonical image install 8462306a36Sopenharmony_ci # path instead 8562306a36Sopenharmony_ci case "${SRCARCH}" in 8662306a36Sopenharmony_ci um) 8762306a36Sopenharmony_ci installed_image_path="usr/bin/linux-${KERNELRELEASE}";; 8862306a36Sopenharmony_ci parisc|mips|powerpc) 8962306a36Sopenharmony_ci installed_image_path="boot/vmlinux-${KERNELRELEASE}";; 9062306a36Sopenharmony_ci *) 9162306a36Sopenharmony_ci installed_image_path="boot/vmlinuz-${KERNELRELEASE}";; 9262306a36Sopenharmony_ci esac 9362306a36Sopenharmony_ci cp "$(${MAKE} -s -f ${srctree}/Makefile image_name)" "${pdir}/${installed_image_path}" 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci # Install the maintainer scripts 9662306a36Sopenharmony_ci # Note: hook scripts under /etc/kernel are also executed by official Debian 9762306a36Sopenharmony_ci # kernel packages, as well as kernel packages built using make-kpkg. 9862306a36Sopenharmony_ci # make-kpkg sets $INITRD to indicate whether an initramfs is wanted, and 9962306a36Sopenharmony_ci # so do we; recent versions of dracut and initramfs-tools will obey this. 10062306a36Sopenharmony_ci debhookdir=${KDEB_HOOKDIR:-/etc/kernel} 10162306a36Sopenharmony_ci for script in postinst postrm preinst prerm; do 10262306a36Sopenharmony_ci mkdir -p "${pdir}${debhookdir}/${script}.d" 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ci mkdir -p "${pdir}/DEBIAN" 10562306a36Sopenharmony_ci cat <<-EOF > "${pdir}/DEBIAN/${script}" 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_ci #!/bin/sh 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ci set -e 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci # Pass maintainer script parameters to hook scripts 11262306a36Sopenharmony_ci export DEB_MAINT_PARAMS="\$*" 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci # Tell initramfs builder whether it's wanted 11562306a36Sopenharmony_ci export INITRD=$(if_enabled_echo CONFIG_BLK_DEV_INITRD Yes No) 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci test -d ${debhookdir}/${script}.d && run-parts --arg="${KERNELRELEASE}" --arg="/${installed_image_path}" ${debhookdir}/${script}.d 11862306a36Sopenharmony_ci exit 0 11962306a36Sopenharmony_ci EOF 12062306a36Sopenharmony_ci chmod 755 "${pdir}/DEBIAN/${script}" 12162306a36Sopenharmony_ci done 12262306a36Sopenharmony_ci} 12362306a36Sopenharmony_ci 12462306a36Sopenharmony_ciinstall_linux_image_dbg () { 12562306a36Sopenharmony_ci pdir=$1 12662306a36Sopenharmony_ci image_pdir=$2 12762306a36Sopenharmony_ci 12862306a36Sopenharmony_ci rm -rf ${pdir} 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_ci for module in $(find ${image_pdir}/lib/modules/ -name *.ko -printf '%P\n'); do 13162306a36Sopenharmony_ci module=lib/modules/${module} 13262306a36Sopenharmony_ci mkdir -p $(dirname ${pdir}/usr/lib/debug/${module}) 13362306a36Sopenharmony_ci # only keep debug symbols in the debug file 13462306a36Sopenharmony_ci ${OBJCOPY} --only-keep-debug ${image_pdir}/${module} ${pdir}/usr/lib/debug/${module} 13562306a36Sopenharmony_ci # strip original module from debug symbols 13662306a36Sopenharmony_ci ${OBJCOPY} --strip-debug ${image_pdir}/${module} 13762306a36Sopenharmony_ci # then add a link to those 13862306a36Sopenharmony_ci ${OBJCOPY} --add-gnu-debuglink=${pdir}/usr/lib/debug/${module} ${image_pdir}/${module} 13962306a36Sopenharmony_ci done 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ci # re-sign stripped modules 14262306a36Sopenharmony_ci if is_enabled CONFIG_MODULE_SIG_ALL; then 14362306a36Sopenharmony_ci ${MAKE} -f ${srctree}/Makefile INSTALL_MOD_PATH="${image_pdir}" modules_sign 14462306a36Sopenharmony_ci fi 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_ci # Build debug package 14762306a36Sopenharmony_ci # Different tools want the image in different locations 14862306a36Sopenharmony_ci # perf 14962306a36Sopenharmony_ci mkdir -p ${pdir}/usr/lib/debug/lib/modules/${KERNELRELEASE}/ 15062306a36Sopenharmony_ci cp vmlinux ${pdir}/usr/lib/debug/lib/modules/${KERNELRELEASE}/ 15162306a36Sopenharmony_ci # systemtap 15262306a36Sopenharmony_ci mkdir -p ${pdir}/usr/lib/debug/boot/ 15362306a36Sopenharmony_ci ln -s ../lib/modules/${KERNELRELEASE}/vmlinux ${pdir}/usr/lib/debug/boot/vmlinux-${KERNELRELEASE} 15462306a36Sopenharmony_ci # kdump-tools 15562306a36Sopenharmony_ci ln -s lib/modules/${KERNELRELEASE}/vmlinux ${pdir}/usr/lib/debug/vmlinux-${KERNELRELEASE} 15662306a36Sopenharmony_ci} 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ciinstall_kernel_headers () { 15962306a36Sopenharmony_ci pdir=$1 16062306a36Sopenharmony_ci version=$2 16162306a36Sopenharmony_ci 16262306a36Sopenharmony_ci rm -rf $pdir 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_ci "${srctree}/scripts/package/install-extmod-build" "${pdir}/usr/src/linux-headers-${version}" 16562306a36Sopenharmony_ci 16662306a36Sopenharmony_ci mkdir -p $pdir/lib/modules/$version/ 16762306a36Sopenharmony_ci ln -s /usr/src/linux-headers-$version $pdir/lib/modules/$version/build 16862306a36Sopenharmony_ci} 16962306a36Sopenharmony_ci 17062306a36Sopenharmony_ciinstall_libc_headers () { 17162306a36Sopenharmony_ci pdir=$1 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_ci rm -rf $pdir 17462306a36Sopenharmony_ci 17562306a36Sopenharmony_ci $MAKE -f $srctree/Makefile headers 17662306a36Sopenharmony_ci $MAKE -f $srctree/Makefile headers_install INSTALL_HDR_PATH=$pdir/usr 17762306a36Sopenharmony_ci 17862306a36Sopenharmony_ci # move asm headers to /usr/include/<libc-machine>/asm to match the structure 17962306a36Sopenharmony_ci # used by Debian-based distros (to support multi-arch) 18062306a36Sopenharmony_ci host_arch=$(dpkg-architecture -a$DEB_HOST_ARCH -qDEB_HOST_MULTIARCH) 18162306a36Sopenharmony_ci mkdir $pdir/usr/include/$host_arch 18262306a36Sopenharmony_ci mv $pdir/usr/include/asm $pdir/usr/include/$host_arch/ 18362306a36Sopenharmony_ci} 18462306a36Sopenharmony_ci 18562306a36Sopenharmony_cirm -f debian/files 18662306a36Sopenharmony_ci 18762306a36Sopenharmony_cipackages_enabled=$(dh_listpackages) 18862306a36Sopenharmony_ci 18962306a36Sopenharmony_cifor package in ${packages_enabled} 19062306a36Sopenharmony_cido 19162306a36Sopenharmony_ci case ${package} in 19262306a36Sopenharmony_ci *-dbg) 19362306a36Sopenharmony_ci # This must be done after linux-image, that is, we expect the 19462306a36Sopenharmony_ci # debug package appears after linux-image in debian/control. 19562306a36Sopenharmony_ci install_linux_image_dbg debian/linux-image-dbg debian/linux-image;; 19662306a36Sopenharmony_ci linux-image-*|user-mode-linux-*) 19762306a36Sopenharmony_ci install_linux_image debian/linux-image ${package};; 19862306a36Sopenharmony_ci linux-libc-dev) 19962306a36Sopenharmony_ci install_libc_headers debian/linux-libc-dev;; 20062306a36Sopenharmony_ci linux-headers-*) 20162306a36Sopenharmony_ci install_kernel_headers debian/linux-headers ${package#linux-headers-};; 20262306a36Sopenharmony_ci esac 20362306a36Sopenharmony_cidone 20462306a36Sopenharmony_ci 20562306a36Sopenharmony_cifor package in ${packages_enabled} 20662306a36Sopenharmony_cido 20762306a36Sopenharmony_ci case ${package} in 20862306a36Sopenharmony_ci *-dbg) 20962306a36Sopenharmony_ci create_package ${package} debian/linux-image-dbg;; 21062306a36Sopenharmony_ci linux-image-*|user-mode-linux-*) 21162306a36Sopenharmony_ci create_package ${package} debian/linux-image;; 21262306a36Sopenharmony_ci linux-libc-dev) 21362306a36Sopenharmony_ci create_package ${package} debian/linux-libc-dev;; 21462306a36Sopenharmony_ci linux-headers-*) 21562306a36Sopenharmony_ci create_package ${package} debian/linux-headers;; 21662306a36Sopenharmony_ci esac 21762306a36Sopenharmony_cidone 21862306a36Sopenharmony_ci 21962306a36Sopenharmony_ciexit 0 220