]> Git Repo - linux.git/blob - scripts/package/builddeb
net/smc: Introduce IPPROTO_SMC
[linux.git] / scripts / package / builddeb
1 #!/bin/sh
2 #
3 # builddeb 1.3
4 # Copyright 2003 Wichert Akkerman <[email protected]>
5 #
6 # Simple script to generate a deb package for a Linux kernel. All the
7 # complexity of what to do with a kernel after it is installed or removed
8 # is left to other scripts and packages: they can install scripts in the
9 # /etc/kernel/{pre,post}{inst,rm}.d/ directories (or an alternative location
10 # specified in KDEB_HOOKDIR) that will be called on package install and
11 # removal.
12
13 set -e
14
15 is_enabled() {
16         grep -q "^$1=y" include/config/auto.conf
17 }
18
19 if_enabled_echo() {
20         if is_enabled "$1"; then
21                 echo -n "$2"
22         elif [ $# -ge 3 ]; then
23                 echo -n "$3"
24         fi
25 }
26
27 install_linux_image () {
28         pname=$1
29         pdir=debian/$1
30
31         # Only some architectures with OF support have this target
32         if is_enabled CONFIG_OF_EARLY_FLATTREE && [ -d "${srctree}/arch/${SRCARCH}/boot/dts" ]; then
33                 ${MAKE} -f ${srctree}/Makefile INSTALL_DTBS_PATH="${pdir}/usr/lib/linux-image-${KERNELRELEASE}" dtbs_install
34         fi
35
36         ${MAKE} -f ${srctree}/Makefile INSTALL_MOD_PATH="${pdir}" INSTALL_MOD_STRIP=1 modules_install
37         rm -f "${pdir}/lib/modules/${KERNELRELEASE}/build"
38
39         # Install the kernel
40         if [ "${ARCH}" = um ] ; then
41                 mkdir -p "${pdir}/usr/lib/uml/modules"
42                 mv "${pdir}/lib/modules/${KERNELRELEASE}" "${pdir}/usr/lib/uml/modules/${KERNELRELEASE}"
43                 mkdir -p "${pdir}/usr/bin" "${pdir}/usr/share/doc/${pname}"
44                 cp System.map "${pdir}/usr/lib/uml/modules/${KERNELRELEASE}/System.map"
45                 cp ${KCONFIG_CONFIG} "${pdir}/usr/share/doc/${pname}/config"
46                 gzip "${pdir}/usr/share/doc/${pname}/config"
47         else
48                 mkdir -p "${pdir}/boot"
49                 cp System.map "${pdir}/boot/System.map-${KERNELRELEASE}"
50                 cp ${KCONFIG_CONFIG} "${pdir}/boot/config-${KERNELRELEASE}"
51         fi
52
53         # Not all arches have the same installed path in debian
54         # XXX: have each arch Makefile export a variable of the canonical image install
55         # path instead
56         case "${SRCARCH}" in
57         um)
58                 installed_image_path="usr/bin/linux-${KERNELRELEASE}";;
59         parisc|mips|powerpc)
60                 installed_image_path="boot/vmlinux-${KERNELRELEASE}";;
61         *)
62                 installed_image_path="boot/vmlinuz-${KERNELRELEASE}";;
63         esac
64         cp "$(${MAKE} -s -f ${srctree}/Makefile image_name)" "${pdir}/${installed_image_path}"
65
66         # Install the maintainer scripts
67         # Note: hook scripts under /etc/kernel are also executed by official Debian
68         # kernel packages, as well as kernel packages built using make-kpkg.
69         # make-kpkg sets $INITRD to indicate whether an initramfs is wanted, and
70         # so do we; recent versions of dracut and initramfs-tools will obey this.
71         debhookdir=${KDEB_HOOKDIR:-/etc/kernel}
72         for script in postinst postrm preinst prerm; do
73                 mkdir -p "${pdir}${debhookdir}/${script}.d"
74
75                 mkdir -p "${pdir}/DEBIAN"
76                 cat <<-EOF > "${pdir}/DEBIAN/${script}"
77
78                 #!/bin/sh
79
80                 set -e
81
82                 # Pass maintainer script parameters to hook scripts
83                 export DEB_MAINT_PARAMS="\$*"
84
85                 # Tell initramfs builder whether it's wanted
86                 export INITRD=$(if_enabled_echo CONFIG_BLK_DEV_INITRD Yes No)
87
88                 test -d ${debhookdir}/${script}.d && run-parts --arg="${KERNELRELEASE}" --arg="/${installed_image_path}" ${debhookdir}/${script}.d
89                 exit 0
90                 EOF
91                 chmod 755 "${pdir}/DEBIAN/${script}"
92         done
93 }
94
95 install_linux_image_dbg () {
96         pdir=debian/$1
97
98         # Parse modules.order directly because 'make modules_install' may sign,
99         # compress modules, and then run unneeded depmod.
100         while read -r mod; do
101                 mod="${mod%.o}.ko"
102                 dbg="${pdir}/usr/lib/debug/lib/modules/${KERNELRELEASE}/kernel/${mod}"
103                 buildid=$("${READELF}" -n "${mod}" | sed -n 's@^.*Build ID: \(..\)\(.*\)@\1/\2@p')
104                 link="${pdir}/usr/lib/debug/.build-id/${buildid}.debug"
105
106                 mkdir -p "${dbg%/*}" "${link%/*}"
107                 "${OBJCOPY}" --only-keep-debug "${mod}" "${dbg}"
108                 ln -sf --relative "${dbg}" "${link}"
109         done < modules.order
110
111         # Build debug package
112         # Different tools want the image in different locations
113         # perf
114         mkdir -p ${pdir}/usr/lib/debug/lib/modules/${KERNELRELEASE}/
115         cp vmlinux ${pdir}/usr/lib/debug/lib/modules/${KERNELRELEASE}/
116         # systemtap
117         mkdir -p ${pdir}/usr/lib/debug/boot/
118         ln -s ../lib/modules/${KERNELRELEASE}/vmlinux ${pdir}/usr/lib/debug/boot/vmlinux-${KERNELRELEASE}
119         # kdump-tools
120         ln -s lib/modules/${KERNELRELEASE}/vmlinux ${pdir}/usr/lib/debug/vmlinux-${KERNELRELEASE}
121 }
122
123 install_kernel_headers () {
124         pdir=debian/$1
125         version=${1#linux-headers-}
126
127         "${srctree}/scripts/package/install-extmod-build" "${pdir}/usr/src/linux-headers-${version}"
128
129         mkdir -p $pdir/lib/modules/$version/
130         ln -s /usr/src/linux-headers-$version $pdir/lib/modules/$version/build
131 }
132
133 install_libc_headers () {
134         pdir=debian/$1
135
136         $MAKE -f $srctree/Makefile headers_install INSTALL_HDR_PATH=$pdir/usr
137
138         # move asm headers to /usr/include/<libc-machine>/asm to match the structure
139         # used by Debian-based distros (to support multi-arch)
140         mkdir "$pdir/usr/include/${DEB_HOST_MULTIARCH}"
141         mv "$pdir/usr/include/asm" "$pdir/usr/include/${DEB_HOST_MULTIARCH}"
142 }
143
144 package=$1
145
146 case "${package}" in
147 *-dbg)
148         install_linux_image_dbg "${package}";;
149 linux-image-*|user-mode-linux-*)
150         install_linux_image "${package}";;
151 linux-libc-dev)
152         install_libc_headers "${package}";;
153 linux-headers-*)
154         install_kernel_headers "${package}";;
155 esac
This page took 0.047168 seconds and 4 git commands to generate.