153 lines
5.3 KiB
Diff
153 lines
5.3 KiB
Diff
|
From f01e862b38b3219252ee76f7a20179a20a97a0fb Mon Sep 17 00:00:00 2001
|
||
|
From: Matthias Dahl <ua_bugz_gentoo@mortal-soul.de>
|
||
|
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
|
||
|
|