genkernel: Add --kconfig to set specific kernel config options
[genkernel.git] / gen_package.sh
1 #!/bin/bash
2 # $Id$
3
4 gen_minkernpackage() {
5         print_info 1 'Creating minimal kernel package'
6         rm -rf "${TEMP}/minkernpackage" > /dev/null 2>&1
7         mkdir "${TEMP}/minkernpackage" || gen_die 'Could not make a directory for the kernel package!'
8         if [ "${KERNCACHE}" != "" ]
9         then
10                 /bin/tar -xj -C ${TEMP}/minkernpackage -f ${KERNCACHE} kernel-${ARCH}-${KV}
11                 /bin/tar -xj -C ${TEMP}/minkernpackage -f ${KERNCACHE} config-${ARCH}-${KV}
12                 if isTrue "${GENZIMAGE}"
13                 then
14                         /bin/tar -xj -C ${TEMP}/minkernpackage -f ${KERNCACHE} kernelz-${ARCH}-${KV}
15                 fi
16         else
17                 local tmp_kernel_binary=$(find_kernel_binary ${KERNEL_BINARY})
18                 local tmp_kernel_binary2=$(find_kernel_binary ${KERNEL_BINARY_2})
19                 if [ -z "${tmp_kernel_binary}" ]
20                 then
21                         gen_die "Cannot locate kernel binary"
22                 fi
23                 cd "${KERNEL_OUTPUTDIR}"
24                 cp "${tmp_kernel_binary}" "${TEMP}/minkernpackage/kernel-${KV}" || gen_die 'Could not the copy kernel for the min kernel package!'
25                 cp ".config" "${TEMP}/minkernpackage/config-${ARCH}-${KV}" || gen_die 'Could not the copy kernel config for the min kernel package!'
26                 if isTrue "${GENZIMAGE}"
27                 then
28                         cp "${tmp_kernel_binary2}" "${TEMP}/minkernpackage/kernelz-${KV}" || gen_die "Could not copy the kernelz for the min kernel package"
29                 fi
30         fi
31
32         if ! isTrue "${INTEGRATED_INITRAMFS}"
33         then
34                 [ "${BUILD_RAMDISK}" != '0' ] && { cp "${TMPDIR}/initramfs-${KV}" "${TEMP}/minkernpackage/initramfs-${ARCH}-${KV}" || gen_die 'Could not copy the initramfs for the kernel package!'; }
35         fi
36
37         if [ "${KERNCACHE}" != "" ]
38         then
39                 /bin/tar -xj -C ${TEMP}/minkernpackage -f ${KERNCACHE} System.map-${ARCH}-${KV}
40         else
41                 cp "${KERNEL_OUTPUTDIR}/System.map" "${TEMP}/minkernpackage/System.map-${ARCH}-${KV}" || gen_die 'Could not copy System.map for the kernel package!';
42         fi
43
44         cd "${TEMP}/minkernpackage"
45         /bin/tar -jcpf ${MINKERNPACKAGE} * || gen_die 'Could not compress the kernel package!'
46         cd "${TEMP}" && rm -rf "${TEMP}/minkernpackage" > /dev/null 2>&1
47 }
48
49 gen_modulespackage() {
50         print_info 1 'Creating modules package'
51         rm -rf "${TEMP}/modulespackage" > /dev/null 2>&1
52         mkdir "${TEMP}/modulespackage" || gen_die 'Could not make a directory for the kernel package!'
53
54         if [ -d ${INSTALL_MOD_PATH}/lib/modules/${KV} ]
55         then
56             mkdir -p ${TEMP}/modulespackage/lib/modules
57             cp -r "${INSTALL_MOD_PATH}/lib/modules/${KV}" "${TEMP}/modulespackage/lib/modules"
58             cd "${TEMP}/modulespackage" 
59             /bin/tar -jcpf ${MODULESPACKAGE} * || gen_die 'Could not compress the modules package!'
60         else
61             print_info 1 "Could not create a modules package ${INSTALL_MOD_PATH}/lib/modules/${KV} was not found"
62         fi
63         cd "${TEMP}" && rm -rf "${TEMP}/modulespackage" > /dev/null 2>&1
64 }
65 gen_kerncache()
66 {
67         print_info 1 'Creating kernel cache'
68         rm -rf "${TEMP}/kerncache" > /dev/null 2>&1
69         mkdir "${TEMP}/kerncache" || gen_die 'Could not make a directory for the kernel cache!'
70
71         local tmp_kernel_binary=$(find_kernel_binary ${KERNEL_BINARY})
72         local tmp_kernel_binary2=$(find_kernel_binary ${KERNEL_BINARY_2})
73         if [ -z "${tmp_kernel_binary}" ]
74         then
75                 gen_die "Cannot locate kernel binary"
76         fi
77
78         cd "${KERNEL_OUTPUTDIR}"
79         cp "${tmp_kernel_binary}" "${TEMP}/kerncache/kernel-${ARCH}-${KV}" || gen_die 'Could not the copy kernel for the kernel package!'
80         cp "${KERNEL_OUTPUTDIR}/.config" "${TEMP}/kerncache/config-${ARCH}-${KV}"
81
82         if [[ "$(file --brief --mime-type "${KERNEL_CONFIG}")" == application/x-gzip ]]; then
83                 # Support --kernel-config=/proc/config.gz, mainly
84                 zcat "${KERNEL_CONFIG}" > "${TEMP}/kerncache/config-${ARCH}-${KV}.orig"
85         else
86                 cp "${KERNEL_CONFIG}" "${TEMP}/kerncache/config-${ARCH}-${KV}.orig"
87         fi
88         cp "${KERNEL_OUTPUTDIR}/System.map" "${TEMP}/kerncache/System.map-${ARCH}-${KV}"
89         if isTrue "${GENZIMAGE}"
90         then
91                 cp "${tmp_kernel_binary2}" "${TEMP}/kerncache/kernelz-${ARCH}-${KV}" || gen_die "Could not copy the kernelz for the kernel package"
92         fi
93
94         echo "VERSION = ${VER}" > "${TEMP}/kerncache/kerncache.config"
95         echo "PATCHLEVEL = ${PAT}" >> "${TEMP}/kerncache/kerncache.config"
96         echo "SUBLEVEL = ${SUB}" >> "${TEMP}/kerncache/kerncache.config"
97         echo "EXTRAVERSION = ${EXV}" >> "${TEMP}/kerncache/kerncache.config"
98
99         mkdir -p "${TEMP}/kerncache/lib/modules/"
100
101         if [ -d ${INSTALL_MOD_PATH}/lib/modules/${KV} ]
102         then
103             cp -r "${INSTALL_MOD_PATH}/lib/modules/${KV}" "${TEMP}/kerncache/lib/modules"
104         fi
105
106         cd "${TEMP}/kerncache"
107         /bin/tar -jcpf ${KERNCACHE} * || gen_die 'Could not compress the kernel package!'
108         cd "${TEMP}" && rm -rf "${TEMP}/kerncache" > /dev/null 2>&1
109 }
110
111 gen_kerncache_extract_kernel()
112 {
113         /bin/tar -f ${KERNCACHE} -C ${TEMP} -xj
114         copy_image_with_preserve "kernel" \
115                 "${TEMP}/kernel-${ARCH}-${KV}" \
116                 "kernel-${KNAME}-${ARCH}-${KV}"
117
118         if isTrue "${GENZIMAGE}"
119         then
120                 copy_image_with_preserve "kernelz" \
121                         "${TEMP}/kernelz-${ARCH}-${KV}" \
122                         "kernelz-${KNAME}-${ARCH}-${KV}"
123         fi
124
125         copy_image_with_preserve "System.map" \
126                 "${TEMP}/System.map-${ARCH}-${KV}" \
127                 "System.map-${KNAME}-${ARCH}-${KV}"
128 }
129
130 gen_kerncache_extract_modules()
131 {
132         if [ -e "${KERNCACHE}" ]
133         then
134                 print_info 1 'Extracting kerncache kernel modules'
135                 if [ "${INSTALL_MOD_PATH}" != '' ]
136                 then
137                         /bin/tar -xjf ${KERNCACHE} -C ${INSTALL_MOD_PATH} lib
138                 else
139                         /bin/tar -xjf ${KERNCACHE} -C / lib
140                 fi
141         fi
142 }
143
144 gen_kerncache_extract_config()
145 {
146         if [ -e "${KERNCACHE}" ]
147         then
148                 print_info 1 'Extracting kerncache config to /etc/kernels'
149                 mkdir -p /etc/kernels
150                 /bin/tar -xjf ${KERNCACHE} -C /etc/kernels config-${ARCH}-${KV}
151                 mv /etc/kernels/config-${ARCH}-${KV} /etc/kernels/kernel-config-${ARCH}-${KV}
152         fi
153 }
154
155 gen_kerncache_is_valid()
156 {
157         KERNCACHE_IS_VALID=0
158         if [ "${NO_KERNEL_SOURCES}" = '1' ]
159         then
160
161                 BUILD_KERNEL=0
162                 # Can make this more secure ....
163
164                 /bin/tar -xj -f ${KERNCACHE} -C ${TEMP}
165                 if [ -e ${TEMP}/config-${ARCH}-${KV} -a -e ${TEMP}/kernel-${ARCH}-${KV} ]
166                 then
167                         print_info 1 'Valid kernel cache found; no sources will be used'
168                         KERNCACHE_IS_VALID=1
169                 fi
170         else
171                 if [ -e "${KERNCACHE}" ]
172                 then
173                         KERNEL_CONFIG="/${KERNEL_OUTPUTDIR}/.config"
174                         if [ "${CMD_KERNEL_CONFIG}" != '' ]
175                         then
176                                 KERNEL_CONFIG="${CMD_KERNEL_CONFIG}"
177                         fi
178
179                         /bin/tar -xj -f ${KERNCACHE} -C ${TEMP}
180                         if [ -e ${TEMP}/config-${ARCH}-${KV} -a -e ${KERNEL_CONFIG} ]
181                         then
182
183                                 if [ -e ${TEMP}/config-${ARCH}-${KV}.orig ]
184                                 then
185                                         test1=$(grep -v "^#" ${TEMP}/config-${ARCH}-${KV}.orig | md5sum | cut -d " " -f 1)
186                                 else
187                                         test1=$(grep -v "^#" ${TEMP}/config-${ARCH}-${KV} | md5sum | cut -d " " -f 1)
188                                 fi
189
190                                 if [[ "$(file --brief --mime-type "${KERNEL_CONFIG}")" == application/x-gzip ]]; then
191                                         # Support --kernel-config=/proc/config.gz, mainly
192                                         local CONFGREP=zgrep
193                                 else
194                                         local CONFGREP=grep
195                                 fi
196                                 test2=$("${CONFGREP}" -v "^#" ${KERNEL_CONFIG} | md5sum | cut -d " " -f 1)
197
198
199                                 if [ "${test1}" == "${test2}" ]
200                                 then
201                                         echo
202                                         print_info 1 "No kernel configuration change, skipping kernel build..."
203                                         echo
204                                         KERNCACHE_IS_VALID=1
205                                 fi
206                         fi
207                 fi
208         fi
209         export KERNCACHE_IS_VALID
210         return 1
211 }