#!/bin/bash
+# $Id$
-gen_minkernpackage()
-{
+gen_minkernpackage() {
print_info 1 'Creating minimal kernel package'
rm -rf "${TEMP}/minkernpackage" > /dev/null 2>&1
mkdir "${TEMP}/minkernpackage" || gen_die 'Could not make a directory for the kernel package!'
- if [ "${CMD_KERNCACHE}" != "" ]
+ if [ "${KERNCACHE}" != "" ]
then
- /bin/tar -xj -C ${TEMP}/minkernpackage -f ${CMD_KERNCACHE} kernel-${ARCH}-${KV}
- /bin/tar -xj -C ${TEMP}/minkernpackage -f ${CMD_KERNCACHE} config-${ARCH}-${KV}
- if [ "${ENABLE_PEGASOS_HACKS}" = 'yes' ]
+ /bin/tar -xj -C ${TEMP}/minkernpackage -f ${KERNCACHE} kernel-${ARCH}-${KV}
+ /bin/tar -xj -C ${TEMP}/minkernpackage -f ${KERNCACHE} config-${ARCH}-${KV}
+ if isTrue "${GENZIMAGE}"
then
- /bin/tar -xj -C ${TEMP}/minkernpackage -f ${CMD_KERNCACHE} kernelz-${ARCH}-${KV}
+ /bin/tar -xj -C ${TEMP}/minkernpackage -f ${KERNCACHE} kernelz-${ARCH}-${KV}
fi
else
+ local tmp_kernel_binary=$(find_kernel_binary ${KERNEL_BINARY})
+ local tmp_kernel_binary2=$(find_kernel_binary ${KERNEL_BINARY_2})
+ if [ -z "${tmp_kernel_binary}" ]
+ then
+ gen_die "Cannot locate kernel binary"
+ fi
cd "${KERNEL_DIR}"
- cp "${KERNEL_BINARY}" "${TEMP}/minkernpackage/kernel-${KV}" || gen_die 'Could not the copy kernel for the min kernel package!'
+ cp "${tmp_kernel_binary}" "${TEMP}/minkernpackage/kernel-${KV}" || gen_die 'Could not the copy kernel for the min kernel package!'
cp ".config" "${TEMP}/minkernpackage/config-${ARCH}-${KV}" || gen_die 'Could not the copy kernel config for the min kernel package!'
- if [ "${ENABLE_PEGASOS_HACKS}" = 'yes' ]
+ if isTrue "${GENZIMAGE}"
then
- cp "${KERNEL_BINARY_2}" "${TEMP}/minkernpackage/kernelz-${KV}" || gen_die "Could not copy the kernelz for the min kernel package"
+ cp "${tmp_kernel_binary2}" "${TEMP}/minkernpackage/kernelz-${KV}" || gen_die "Could not copy the kernelz for the min kernel package"
fi
fi
-
- if [ "${ENABLE_PEGASOS_HACKS}" != 'yes' ]
+
+ if ! isTrue "${INTEGRATED_INITRAMFS}"
then
- if [ "${KERN_24}" != '1' ]
- then
- [ "${BUILD_INITRD}" -ne 0 ] && { cp "${TMPDIR}/initramfs-${KV}" "${TEMP}/minkernpackage/initramfs-${ARCH}-${KV}" || gen_die 'Could not copy the initramfs for the kernel package!'; }
- else
- [ "${BUILD_INITRD}" -ne 0 ] && { cp "${TMPDIR}/initrd-${KV}" "${TEMP}/minkernpackage/initrd-${ARCH}-${KV}" || gen_die 'Could not copy the initrd for the kernel package!'; }
- fi
+ [ "${BUILD_RAMDISK}" != '0' ] && { cp "${TMPDIR}/initramfs-${KV}" "${TEMP}/minkernpackage/initramfs-${ARCH}-${KV}" || gen_die 'Could not copy the initramfs for the kernel package!'; }
fi
- if [ "${CMD_KERNCACHE}" != "" ]
+ if [ "${KERNCACHE}" != "" ]
then
- /bin/tar -xj -C ${TEMP}/minkernpackage -f ${CMD_KERNCACHE} System.map-${ARCH}-${KV}
+ /bin/tar -xj -C ${TEMP}/minkernpackage -f ${KERNCACHE} System.map-${ARCH}-${KV}
else
cp "${KERNEL_DIR}/System.map" "${TEMP}/minkernpackage/System.map-${ARCH}-${KV}" || gen_die 'Could not copy System.map for the kernel package!';
fi
-
- cd "${TEMP}/minkernpackage"
+
+ cd "${TEMP}/minkernpackage"
/bin/tar -jcpf ${MINKERNPACKAGE} * || gen_die 'Could not compress the kernel package!'
cd "${TEMP}" && rm -rf "${TEMP}/minkernpackage" > /dev/null 2>&1
}
-gen_modulespackage()
-{
+
+gen_modulespackage() {
print_info 1 'Creating modules package'
rm -rf "${TEMP}/modulespackage" > /dev/null 2>&1
mkdir "${TEMP}/modulespackage" || gen_die 'Could not make a directory for the kernel package!'
print_info 1 'Creating kernel cache'
rm -rf "${TEMP}/kerncache" > /dev/null 2>&1
mkdir "${TEMP}/kerncache" || gen_die 'Could not make a directory for the kernel cache!'
+
+ local tmp_kernel_binary=$(find_kernel_binary ${KERNEL_BINARY})
+ local tmp_kernel_binary2=$(find_kernel_binary ${KERNEL_BINARY_2})
+ if [ -z "${tmp_kernel_binary}" ]
+ then
+ gen_die "Cannot locate kernel binary"
+ fi
+
cd "${KERNEL_DIR}"
- cp "${KERNEL_BINARY}" "${TEMP}/kerncache/kernel-${ARCH}-${KV}" || gen_die 'Could not the copy kernel for the kernel package!'
+ cp "${tmp_kernel_binary}" "${TEMP}/kerncache/kernel-${ARCH}-${KV}" || gen_die 'Could not the copy kernel for the kernel package!'
cp "${KERNEL_DIR}/.config" "${TEMP}/kerncache/config-${ARCH}-${KV}"
+
+ if [[ "$(file --brief --mime-type "${KERNEL_CONFIG}")" == application/x-gzip ]]; then
+ # Support --kernel-config=/proc/config.gz, mainly
+ zcat "${KERNEL_CONFIG}" > "${TEMP}/kerncache/config-${ARCH}-${KV}.orig"
+ else
+ cp "${KERNEL_CONFIG}" "${TEMP}/kerncache/config-${ARCH}-${KV}.orig"
+ fi
cp "${KERNEL_DIR}/System.map" "${TEMP}/kerncache/System.map-${ARCH}-${KV}"
- if [ "${ENABLE_PEGASOS_HACKS}" = 'yes' ]
- then
- cp "${KERNEL_BINARY_2}" "${TEMP}/kerncache/kernelz-${ARCH}-${KV}" || gen_die "Could not copy the kernelz for the kernel package"
- fi
-
+ if isTrue "${GENZIMAGE}"
+ then
+ cp "${tmp_kernel_binary2}" "${TEMP}/kerncache/kernelz-${ARCH}-${KV}" || gen_die "Could not copy the kernelz for the kernel package"
+ fi
+
echo "VERSION = ${VER}" > "${TEMP}/kerncache/kerncache.config"
echo "PATCHLEVEL = ${PAT}" >> "${TEMP}/kerncache/kerncache.config"
echo "SUBLEVEL = ${SUB}" >> "${TEMP}/kerncache/kerncache.config"
echo "EXTRAVERSION = ${EXV}" >> "${TEMP}/kerncache/kerncache.config"
-
+
mkdir -p "${TEMP}/kerncache/lib/modules/"
-
+
if [ -d ${INSTALL_MOD_PATH}/lib/modules/${KV} ]
then
cp -r "${INSTALL_MOD_PATH}/lib/modules/${KV}" "${TEMP}/kerncache/lib/modules"
fi
-
- cd "${TEMP}/kerncache"
+
+ cd "${TEMP}/kerncache"
/bin/tar -jcpf ${KERNCACHE} * || gen_die 'Could not compress the kernel package!'
cd "${TEMP}" && rm -rf "${TEMP}/kerncache" > /dev/null 2>&1
}
gen_kerncache_extract_kernel()
{
- /bin/tar -f ${KERNCACHE} -C ${TEMP} -xj
+ /bin/tar -f ${KERNCACHE} -C ${TEMP} -xj
copy_image_with_preserve "kernel" \
"${TEMP}/kernel-${ARCH}-${KV}" \
"kernel-${KNAME}-${ARCH}-${KV}"
- if [ "${ENABLE_PEGASOS_HACKS}" = 'yes']
+ if isTrue "${GENZIMAGE}"
then
copy_image_with_preserve "kernelz" \
"${TEMP}/kernelz-${ARCH}-${KV}" \
"kernelz-${KNAME}-${ARCH}-${KV}"
fi
-
+
copy_image_with_preserve "System.map" \
"${TEMP}/System.map-${ARCH}-${KV}" \
"System.map-${KNAME}-${ARCH}-${KV}"
gen_kerncache_extract_modules()
{
- if [ -e "${KERNCACHE}" ]
+ if [ -e "${KERNCACHE}" ]
then
print_info 1 'Extracting kerncache kernel modules'
if [ "${INSTALL_MOD_PATH}" != '' ]
gen_kerncache_extract_config()
{
- if [ -e "${KERNCACHE}" ]
+ if [ -e "${KERNCACHE}" ]
then
print_info 1 'Extracting kerncache config to /etc/kernels'
mkdir -p /etc/kernels
gen_kerncache_is_valid()
{
KERNCACHE_IS_VALID=0
- if [ "${CMD_NO_KERNEL_SOURCES}" = '1' ]
+ if [ "${NO_KERNEL_SOURCES}" = '1' ]
then
-
+
BUILD_KERNEL=0
# Can make this more secure ....
-
+
/bin/tar -xj -f ${KERNCACHE} -C ${TEMP}
- if [ -e ${TEMP}/config-${ARCH}-${KV} -a -e ${TEMP}/kernel-${ARCH}-${KV} ]
- then
+ if [ -e ${TEMP}/config-${ARCH}-${KV} -a -e ${TEMP}/kernel-${ARCH}-${KV} ]
+ then
print_info 1 'Valid kernel cache found; no sources will be used'
KERNCACHE_IS_VALID=1
fi
- else
- if [ -e "${KERNCACHE}" ]
+ else
+ if [ -e "${KERNCACHE}" ]
then
KERNEL_CONFIG="/${KERNEL_DIR}/.config"
if [ "${CMD_KERNEL_CONFIG}" != '' ]
/bin/tar -xj -f ${KERNCACHE} -C ${TEMP}
if [ -e ${TEMP}/config-${ARCH}-${KV} -a -e ${KERNEL_CONFIG} ]
then
-
- test1=$(grep -v "^#" ${TEMP}/config-${ARCH}-${KV} | md5sum | cut -d " " -f 1)
- test2=$(grep -v "^#" ${KERNEL_CONFIG} | md5sum | cut -d " " -f 1)
+
+ if [ -e ${TEMP}/config-${ARCH}-${KV}.orig ]
+ then
+ test1=$(grep -v "^#" ${TEMP}/config-${ARCH}-${KV}.orig | md5sum | cut -d " " -f 1)
+ else
+ test1=$(grep -v "^#" ${TEMP}/config-${ARCH}-${KV} | md5sum | cut -d " " -f 1)
+ fi
+
+ if [[ "$(file --brief --mime-type "${KERNEL_CONFIG}")" == application/x-gzip ]]; then
+ # Support --kernel-config=/proc/config.gz, mainly
+ local CONFGREP=zgrep
+ else
+ local CONFGREP=grep
+ fi
+ test2=$("${CONFGREP}" -v "^#" ${KERNEL_CONFIG} | md5sum | cut -d " " -f 1)
+
+
if [ "${test1}" == "${test2}" ]
then
-
echo
print_info 1 "No kernel configuration change, skipping kernel build..."
echo
fi
fi
fi
- export KERNCACHE_IS_VALID
+ export KERNCACHE_IS_VALID
return 1
}