aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin H. Johnson <robbat2@gentoo.org>2012-02-06 08:33:10 (GMT)
committerRobin H. Johnson <robbat2@gentoo.org>2012-02-06 09:31:59 (GMT)
commit94dc288487f2cb5c993ed471ed490a0031a65acc (patch)
tree1b2614aaeb996020653f640b8dd604e7efcc910d
parentImplement ZFS Support (diff)
downloadgenkernel-94dc288487f2cb5c993ed471ed490a0031a65acc.zip
genkernel-94dc288487f2cb5c993ed471ed490a0031a65acc.tar.gz
genkernel-94dc288487f2cb5c993ed471ed490a0031a65acc.tar.bz2
Customizable initramfs compression based on Pentoo genkernel fork
This implements customizable initramfs compression, based on the Pentoo genkernel fork (SVN revs r2142, r2145, by Jens Pranaitis <jens@chaox.net>). New configuration option COMPRESS_INITRD_TYPE to allow manual selection, whereas the Pentoo fork provided auto-selection based on what was available in the kernel configuration. Auto-selection is used by default, and is available with the argument of 'best' to the new option. Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
-rw-r--r--ChangeLog4
-rwxr-xr-xdefaults/config.sh3
-rwxr-xr-xgen_cmdline.sh6
-rwxr-xr-xgen_determineargs.sh1
-rwxr-xr-xgen_initramfs.sh62
-rw-r--r--genkernel.conf3
6 files changed, 63 insertions, 16 deletions
diff --git a/ChangeLog b/ChangeLog
index d6e4dcf..e2cc9ab 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,10 @@
# Distributed under the GPL v2
# $Id$
+ 06 Feb 2012; Robin H. Johnson <robbat2@gentoo.org> defaults/config.sh,
+ gen_cmdline.sh, gen_determineargs.sh, gen_initramfs.sh, genkernel.conf:
+ Import customizable compression for initramfs, based on Pentoo development.
+
06 Feb 2012: Richard Yao <ryao@cs.stonybrook.edu> arch/alpha/modules_load,
arch/arm/modules_load, arch/ia64/modules_load, arch/mips/modules_load,
arch/parisc/modules_load, arch/parisc64/modules_load, arch/ppc/modules_load,
diff --git a/defaults/config.sh b/defaults/config.sh
index d135e0e..7ee9ef2 100755
--- a/defaults/config.sh
+++ b/defaults/config.sh
@@ -12,7 +12,8 @@ KERNEL_MAKE_DIRECTIVE_2=""
KERNEL_BINARY="arch/i386/boot/bzImage"
KERNEL_BINARY_OVERRIDE=""
-COMPRESS_INITRD=yes
+DEFAULT_COMPRESS_INITRD=yes
+DEFAULT_COMPRESS_INITRD_TYPE=best
#
# Arch-specific defaults that can be overridden in the config file or on the
diff --git a/gen_cmdline.sh b/gen_cmdline.sh
index de56a25..aabaa7e 100755
--- a/gen_cmdline.sh
+++ b/gen_cmdline.sh
@@ -537,10 +537,14 @@ parse_cmdline() {
CMD_INTEGRATED_INITRAMFS=`parse_optbool "$*"`
print_info 2 "CMD_INTEGRATED_INITRAMFS=${CMD_INTEGRATED_INITRAMFS}"
;;
- --compress-initramfs|--no-compress-initramfs)
+ --compress-initramfs|--no-compress-initramfs|--compress-initrd|--no-compress-initrd)
CMD_COMPRESS_INITRD=`parse_optbool "$*"`
print_info 2 "CMD_COMPRESS_INITRD=${CMD_COMPRESS_INITRD}"
;;
+ --compress-initramfs-type=*|--compress-initrd-type=*)
+ COMPRESS_INITRD_TYPE=`parse_opt "$*"`
+ print_info 2 "CMD_COMPRESS_INITRD_TYPE: ${CMD_LINUXRC}"
+ ;;
--config=*)
print_info 2 "CMD_GK_CONFIG: `parse_opt "$*"`"
;;
diff --git a/gen_determineargs.sh b/gen_determineargs.sh
index e6ed0a3..4a21530 100755
--- a/gen_determineargs.sh
+++ b/gen_determineargs.sh
@@ -76,6 +76,7 @@ determine_real_args() {
set_config_with_override STRING KNAME CMD_KERNNAME "genkernel"
set_config_with_override STRING COMPRESS_INITRD CMD_COMPRESS_INITRD "$DEFAULT_COMPRESS_INITRD"
+ set_config_with_override STRING COMPRESS_INITRD_TYPE CMD_COMPRESS_INITRD_TYPE "$DEFAULT_COMPRESS_INITRD_TYPE"
set_config_with_override STRING MAKEOPTS CMD_MAKEOPTS "$DEFAULT_MAKEOPTS"
set_config_with_override STRING KERNEL_MAKE CMD_KERNEL_MAKE "$DEFAULT_KERNEL_MAKE"
set_config_with_override STRING UTILS_MAKE CMD_UTILS_MAKE "$DEFAULT_UTILS_MAKE"
diff --git a/gen_initramfs.sh b/gen_initramfs.sh
index 170361b..3aab15d 100755
--- a/gen_initramfs.sh
+++ b/gen_initramfs.sh
@@ -686,23 +686,57 @@ create_initramfs() {
append_data 'overlay'
fi
- # Implement support for disabling compression
- if isTrue "${COMPRESS_INITRD}"
- then
- compress_ext=".gz"
- print_info 1 " >> Compressing cpio data..."
- gzip -9 "${CPIO}" || gen_die "Compression failed"
- mv -f "${CPIO}.gz" "${CPIO}" || gen_die "Rename failed"
- fi
-
-
if isTrue "${INTEGRATED_INITRAMFS}"
then
-# cp ${TMPDIR}/initramfs-${KV} ${KERNEL_DIR}/usr/initramfs_data.cpio.gz
- mv ${TMPDIR}/initramfs-${KV} ${TMPDIR}/initramfs-${KV}.cpio${compress_ext}
-# sed -i "s|^.*CONFIG_INITRAMFS_SOURCE=.*$|CONFIG_INITRAMFS_SOURCE=\"${TMPDIR}/initramfs-${KV}.cpio.gz\"|" ${KERNEL_DIR}/.config
+ # Explicitly do not compress if we are integrating into the kernel.
+ # The kernel will do a better job of it than us.
+ mv ${TMPDIR}/initramfs-${KV} ${TMPDIR}/initramfs-${KV}.cpio
sed -i '/^.*CONFIG_INITRAMFS_SOURCE=.*$/d' ${KERNEL_DIR}/.config
- echo -e "CONFIG_INITRAMFS_SOURCE=\"${TMPDIR}/initramfs-${KV}.cpio${compress_ext}\"\nCONFIG_INITRAMFS_ROOT_UID=0\nCONFIG_INITRAMFS_ROOT_GID=0" >> ${KERNEL_DIR}/.config
+ cat >>${KERNEL_DIR}/.config <<-EOF
+ CONFIG_INITRAMFS_SOURCE="${TMPDIR}/initramfs-${KV}.cpio${compress_ext}"
+ CONFIG_INITRAMFS_ROOT_UID=0
+ CONFIG_INITRAMFS_ROOT_GID=0
+ EOF
+ else
+ if isTrue "${COMPRESS_INITRD}"
+ then
+ cmd_xz=$(type -p xz)
+ cmd_lzma=$(type -p lzma)
+ cmd_bzip2=$(type -p bzip2)
+ cmd_gzip=$(type -p gzip)
+ cmd_lzop=$(type -p lzop)
+ local compression
+ case ${COMPRESS_INITRD_TYPE} in
+ xz|lzma|bzip2|gzip2|lzo) compression=${COMPRESS_INITRD_TYPE} ;;
+ best)
+ if grep -sq '^CONFIG_RD_XZ=y' ${KERNEL_DIR}/.config && test -n "${cmd_xz}" ;
+ compression=xz
+ elif grep -sq '^CONFIG_RD_LZMA=y' ${KERNEL_DIR}/.config && test -n "${cmd_lzma}" ;
+ compression=lzma
+ elif grep -sq '^CONFIG_RD_BZIP2=y' ${KERNEL_DIR}/.config && test -n "${cmd_bzip2}" ;
+ compression=bzip2
+ elif grep -sq '^CONFIG_RD_GZIP=y' ${KERNEL_DIR}/.config && test -n "${cmd_gzip}" ;
+ compression=gzip
+ elif grep -sq '^CONFIG_RD_LZO=y' ${KERNEL_DIR}/.config && test -n "${cmd_lzop}" ;
+ compression=lzo
+ fi ;;
+ esac
+ case $compression in
+ xz) compress_ext='.xz' compress_cmd="${cmd_xz} -e --check=none -z -f -9" ;;
+ lzma) compress_ext='.lzma' compress_cmd="${cmd_lzma} -z -f -9" ;;
+ bzip2) compress_ext='.bz2' compress_cmd="${cmd_bzip2} -z -f -9"
+ gzip) compress_ext='.gz' compress_cmd="${cmd_gzip} -f -9" ;;
+ lzo) compress_ext='.lzo' compress_cmd="${cmd_lzop} -f -9" ;;
+ esac
+
+ if [ -n "${compression}" ]; then
+ print_info 1 " >> Compressing cpio data (${compress_ext})..."
+ ${compress_cmd} "${CPIO}" || gen_die "Compression (${compress_cmd}) failed"
+ mv -f "${CPIO}${compress_ext}" "${CPIO}" || gen_die "Rename failed"
+ else
+ print_info 1 " >> Not compressing cpio data ..."
+ fi
+ fi
fi
if isTrue "${CMD_INSTALL}"
diff --git a/genkernel.conf b/genkernel.conf
index 7032ac7..22b18d7 100644
--- a/genkernel.conf
+++ b/genkernel.conf
@@ -319,6 +319,9 @@ GPG_BINCACHE="%%CACHE%%/gnupg-${GPG_VER}-%%ARCH%%.bz2"
# Compress generated initramfs
#COMPRESS_INITRD="yes"
+# Types of compression: best, xz, lzma, bzip2, gzip, lzop
+# "best" selects the best available compression method
+#COMPRESS_INITRD_TYPE="best"
# Create a self-contained env in the initramfs