From: Matthias Dahl Date: Fri, 27 Aug 2010 15:26:52 +0000 (+0200) Subject: use mdadm instead of bundled stripped down mdassemble (v2) X-Git-Tag: v3.4.12~1^2~22 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=daed0ccebb15142265e2634262c474a2ef81201b;p=genkernel.git 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. --- diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts index ce05f4c..1c7ebf3 100755 --- a/defaults/initrd.scripts +++ b/defaults/initrd.scripts @@ -615,9 +615,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 7438f34..1c3bf97 100755 --- a/gen_compile.sh +++ b/gen_compile.sh @@ -457,6 +457,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 f830c48..548f55b 100755 --- a/gen_determineargs.sh +++ b/gen_determineargs.sh @@ -135,6 +135,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}"` @@ -147,6 +148,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 ac32516..e7d4a10 100755 --- a/gen_initramfs.sh +++ b/gen_initramfs.sh @@ -339,10 +339,22 @@ append_mdadm(){ fi cd ${TEMP} mkdir -p "${TEMP}/initramfs-mdadm-temp/etc/" + mkdir -p "${TEMP}/initramfs-mdadm-temp/sbin/" if [ "${MDADM}" = '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 2bc8183..e0c1274 100644 --- a/genkernel.conf +++ b/genkernel.conf @@ -169,6 +169,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"