From f01e862b38b3219252ee76f7a20179a20a97a0fb Mon Sep 17 00:00:00 2001 From: Matthias Dahl Date: Fri, 27 Aug 2010 17:26:52 +0200 Subject: [PATCH] use mdadm instead of bundled stripped down mdassemble (v2) mdassemble can't handle newer metadata formats and fails for partitioned arrays, among other things. This... - replaces the bundled mdassemble with proper support for mdadm - fixes raid autodetection/assemble when no mdadm.conf is available - fixes a compilation failure for newer mdadm versions Tested w/ genkernel 3.4.10.907 and mdadm 3.1.3. --- defaults/initrd.scripts | 5 +++-- gen_compile.sh | 35 +++++++++++++++++++++++++++++++++++ gen_determineargs.sh | 2 ++ gen_initramfs.sh | 12 ++++++++++++ genkernel.conf | 5 +++++ 5 files changed, 57 insertions(+), 2 deletions(-) diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts index e0710c4..531d2bd 100755 --- a/defaults/initrd.scripts +++ b/defaults/initrd.scripts @@ -608,9 +608,10 @@ startVolumes() { then if [ ! -e '/etc/mdadm.conf' ] then - /sbin/mdadm --examine > /etc/mdadm.conf + echo "DEVICE /dev/sd[a-z]* /dev/hd[a-z]*" >/etc/mdadm.conf + /sbin/mdadm --examine --scan >>/etc/mdadm.conf fi - /sbin/mdadm --assemble + /sbin/mdadm -A --scan fi if [ "${USE_DMRAID_NORMAL}" = '1' ] diff --git a/gen_compile.sh b/gen_compile.sh index 7bab9e1..ec5df4b 100755 --- a/gen_compile.sh +++ b/gen_compile.sh @@ -444,6 +444,41 @@ compile_lvm() { fi } +compile_mdadm() { + if [ ! -f "${MDADM_BINCACHE}" ] + then + [ -f "${MDADM_SRCTAR}" ] || + gen_die "Could not find MDADM source tarball: ${MDADM_SRCTAR}! Please place it there, or place another version, changing /etc/genkernel.conf as necessary!" + cd "${TEMP}" + rm -rf "${MDADM_DIR}" > /dev/null + /bin/tar -jxpf "${MDADM_SRCTAR}" || + gen_die 'Could not extract MDADM source tarball!' + [ -d "${MDADM_DIR}" ] || + gen_die 'MDADM directory ${MDADM_DIR} is invalid!' + + cd "${MDADM_DIR}" + sed -i "/^CFLAGS = /s:^CFLAGS = \(.*\)$:CFLAGS = -Os:" Makefile + sed -i "/^CXFLAGS = /s:^CXFLAGS = \(.*\)$:CXFLAGS = -Os:" Makefile + sed -i "/^CWFLAGS = /s:^CWFLAGS = \(.*\)$:CWFLAGS = -Wall:" Makefile + sed -i "s/^# LDFLAGS = -static/LDFLAGS = -static/" Makefile + + print_info 1 'mdadm: >> Compiling...' + compile_generic 'mdadm' utils + + mkdir -p "${TEMP}/mdadm/sbin" + install -m 0755 -s mdadm "${TEMP}/mdadm/sbin/mdadm" + print_info 1 ' >> Copying to bincache...' + cd "${TEMP}/mdadm" + strip "sbin/mdadm" || + gen_die 'Could not strip mdadm!' + /bin/tar -cjf "${MDADM_BINCACHE}" sbin/mdadm || + gen_die 'Could not create binary cache' + + cd "${TEMP}" + rm -rf "${MDADM_DIR}" mdadm + fi +} + compile_dmraid() { compile_device_mapper if [ ! -f "${DMRAID_BINCACHE}" ] diff --git a/gen_determineargs.sh b/gen_determineargs.sh index d911f07..b4b31fb 100755 --- a/gen_determineargs.sh +++ b/gen_determineargs.sh @@ -128,6 +128,7 @@ determine_real_args() { BUSYBOX_BINCACHE=`cache_replace "${BUSYBOX_BINCACHE}"` DEVICE_MAPPER_BINCACHE=`cache_replace "${DEVICE_MAPPER_BINCACHE}"` LVM_BINCACHE=`cache_replace "${LVM_BINCACHE}"` + MDADM_BINCACHE=`cache_replace "${MDADM_BINCACHE}"` DMRAID_BINCACHE=`cache_replace "${DMRAID_BINCACHE}"` ISCSI_BINCACHE=`cache_replace "${ISCSI_BINCACHE}"` BLKID_BINCACHE=`cache_replace "${BLKID_BINCACHE}"` @@ -139,6 +140,7 @@ determine_real_args() { BUSYBOX_BINCACHE=`arch_replace "${BUSYBOX_BINCACHE}"` DEVICE_MAPPER_BINCACHE=`arch_replace "${DEVICE_MAPPER_BINCACHE}"` LVM_BINCACHE=`arch_replace "${LVM_BINCACHE}"` + MDADM_BINCACHE=`arch_replace "${MDADM_BINCACHE}"` DMRAID_BINCACHE=`arch_replace "${DMRAID_BINCACHE}"` ISCSI_BINCACHE=`arch_replace "${ISCSI_BINCACHE}"` BLKID_BINCACHE=`arch_replace "${BLKID_BINCACHE}"` diff --git a/gen_initramfs.sh b/gen_initramfs.sh index 231411e..2400b75 100755 --- a/gen_initramfs.sh +++ b/gen_initramfs.sh @@ -328,10 +328,22 @@ append_mdadm(){ fi cd ${TEMP} mkdir -p "${TEMP}/initramfs-mdadm-temp/etc/" + mkdir -p "${TEMP}/initramfs-mdadm-temp/sbin/" if [ "${MDADM}" -eq '1' ] then cp -a /etc/mdadm.conf "${TEMP}/initramfs-mdadm-temp/etc" \ || gen_die "Could not copy mdadm.conf!" + if [ -e '/sbin/mdadm' ] && LC_ALL="C" ldd /sbin/mdadm|grep -q 'not a dynamic executable' + then + print_info 1 ' MDADM: Adding support (using local static binaries)...' + cp /sbin/mdadm "${TEMP}/initramfs-mdadm-temp/sbin/mdadm" || + gen_die 'Could not copy over mdadm!' + else + print_info 1 ' MDADM: Adding support (compiling binaries)...' + compile_mdadm + /bin/tar -jxpf "${MDADM_BINCACHE}" -C "${TEMP}/initramfs-mdadm-temp" || + gen_die "Could not extract mdadm binary cache!"; + fi fi cd "${TEMP}/initramfs-mdadm-temp/" find . -print | cpio ${CPIO_ARGS} --append -F "${CPIO}" diff --git a/genkernel.conf b/genkernel.conf index a71ce69..62b7801 100644 --- a/genkernel.conf +++ b/genkernel.conf @@ -162,6 +162,11 @@ LVM_DIR="LVM2.${LVM_VER}" LVM_SRCTAR="${DISTDIR}/LVM2.${LVM_VER}.tgz" LVM_BINCACHE="%%CACHE%%/LVM2.${LVM_VER}-%%ARCH%%.tar.bz2" +MDADM_VER="VERSION_MDADM" +MDADM_DIR="mdadm-${MDADM_VER}" +MDADM_SRCTAR="${DISTDIR}/mdadm-${MDADM_VER}.tar.bz2" +MDADM_BINCACHE="%%CACHE%%/mdadm-${MDADM_VER}-%%ARCH%%.tar.bz2" + DMRAID_VER="VERSION_DMRAID" DMRAID_DIR="dmraid/${DMRAID_VER}" DMRAID_SRCTAR="${DISTDIR}/dmraid-${DMRAID_VER}.tar.bz2" -- 1.7.2.2