diff --git a/lvm2.changes b/lvm2.changes index f7ee5d0..e49255b 100644 --- a/lvm2.changes +++ b/lvm2.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Wed Jul 23 15:38:13 CEST 2008 - hare@suse.de + +- Include mkinitrd scriptlets. + ------------------------------------------------------------------- Fri Jun 27 07:51:31 CEST 2008 - xwhu@suse.de diff --git a/lvm2.spec b/lvm2.spec index 89432c7..411e965 100644 --- a/lvm2.spec +++ b/lvm2.spec @@ -20,12 +20,14 @@ Obsoletes: lvm PreReq: %fillup_prereq %insserv_prereq AutoReqProv: on Version: 2.02.38 -Release: 1 +Release: 5 Summary: LVM2 Tools Source: LVM2.%{version}.tar.bz2 Source1: lvm.conf Source2: boot.lvm Source3: sysconfig.lvm +Source4: mkinitrd-setup.sh +Source5: mkinitrd-boot.sh Patch: improve_probing.diff Patch2: no-inc-audit.diff Patch3: no_buildroot_shared.diff @@ -93,6 +95,9 @@ rm $RPM_BUILD_ROOT/%_lib/liblvm2cmd.so install -m 644 %{SOURCE1} $RPM_BUILD_ROOT/etc/lvm mkdir -p $RPM_BUILD_ROOT/etc/init.d install -m 755 %{SOURCE2} $RPM_BUILD_ROOT/etc/init.d +install -d $RPM_BUILD_ROOT/lib/mkinitrd/scripts +install -m 755 %{SOURCE4} $RPM_BUILD_ROOT/lib/mkinitrd/scripts/setup-lvm2.sh +install -m 755 %{SOURCE5} $RPM_BUILD_ROOT/lib/mkinitrd/scripts/boot-lvm2.sh mkdir -p $RPM_BUILD_ROOT/var/adm/fillup-templates install -m 644 %{SOURCE3} $RPM_BUILD_ROOT/var/adm/fillup-templates rm $RPM_BUILD_ROOT/usr/include/lvm2cmd.h @@ -125,6 +130,10 @@ rm -rf $RPM_BUILD_ROOT %dir /var/lock/lvm %config /etc/lvm/lvm.conf %config /etc/init.d/boot.lvm +%dir /lib/mkinitrd +%dir /lib/mkinitrd/scripts +/lib/mkinitrd/scripts/setup-lvm2.sh +/lib/mkinitrd/scripts/boot-lvm2.sh /var/adm/fillup-templates/sysconfig.lvm /sbin/fsadm /sbin/lvchange @@ -220,6 +229,8 @@ rm -rf $RPM_BUILD_ROOT %{_mandir}/man8/vgsplit.8.gz %changelog +* Wed Jul 23 2008 hare@suse.de +- Include mkinitrd scriptlets. * Fri Jun 27 2008 xwhu@suse.de - update to 2.02.38 Fix tracking of validity of PVs with no mdas in lvmcache. diff --git a/mkinitrd-boot.sh b/mkinitrd-boot.sh new file mode 100644 index 0000000..8fa1efd --- /dev/null +++ b/mkinitrd-boot.sh @@ -0,0 +1,76 @@ +#!/bin/bash +#%stage: volumemanager +#%depends: evms +#%programs: /sbin/vgscan /sbin/vgchange /sbin/lvm +#%modules: linear +#%if: -n "$root_lvm2" +# +##### LVM (Logical Volume Management) +## +## This activates and waits for an LVM. +## +## Command line parameters +## ----------------------- +## +## root_lvm2=1 use LVM +## root=/dev/mapper/... use this device as Volume Group +## vg_roots use this group as Volume Group +## + +lvm2_get_vg() { + local param=$1 + local vg_root vg_name + local sysdev + + case $param in + /dev/disk/by-*/*) + vg_root= + ;; + /dev/mapper/*) + vg_name=${o##root=/dev/mapper/} + vg_root=${vg_name%%-*} + ;; + /dev/*) + set -- $(IFS=/ ; echo $param) + if [ "$#" = "3" ] ; then + # Check sysfs. If there are subdirectories + # matching this name it's a block device + for d in /sys/block/$2\!* ; do + if [ -d $d ] ; then + sysdev=$d + fi + done + # Not found in sysfs, looks like a VG then + if [ -z "$sysdev" ] ; then + vg_root=$2 + fi + fi + ;; + esac + + echo $vg_root +} + +# load the necessary module before we initialize the raid system +load_modules + +if [ -n "$root_lvm2" ] ; then + o=$(get_param root) + vg_root=$(lvm2_get_vg $o) + if [ "$vg_root" ] ; then + # We are waiting for a device-mapper device + root_major=$(sed -n 's/\(.*\) device-mapper/\1/p' /proc/devices) + fi + o=$(get_param resume) + vg_resume=$(lvm2_get_vg $o) + if [ "$vg_resume" ] ; then + resume_major=$(sed -n 's/\(.*\) device-mapper/\1/p' /proc/devices) + fi +fi + +# initialize remebered and parameterized devices +for vgr in $vg_root $vg_resume $vg_roots; do + vgchange -a y $vgr +done + +unset lvm2_get_vg diff --git a/mkinitrd-setup.sh b/mkinitrd-setup.sh new file mode 100644 index 0000000..bc95211 --- /dev/null +++ b/mkinitrd-setup.sh @@ -0,0 +1,44 @@ +#!/bin/bash +# +#%stage: volumemanager +#%depends: evms +# +# get information about the current blockdev +update_blockdev + +# Check whether we are using LVM2 (only available when not using EVMS) +if [ -z "$root_evms" ] && [ -x /sbin/lvdisplay ] ; then + lvm_blockdev= + + for bd in $blockdev; do + update_blockdev $bd + + vg_name=$(lvdisplay -c 2> /dev/null | sed -n "/.*:$blockmajor:$blockminor/p") + vg_dev=${vg_name%%:*} + vg_name=${vg_name#*:} + vg_root=${vg_name%%:*} + if [ "$vg_root" ] ; then + local vg_blockdev + root_lvm2=1 + realrootdev=${vg_dev## } + vg_blockdev=$(vgs --noheadings --options pv_name $vg_root 2> /dev/null | sed "s@,@\n@g" | sed "s@([0-9]*)@@g;s@ @@g" | sort | uniq) + lvm_blockdev="$lvm_blockdev $vg_blockdev" + [ $? -eq 0 ] || return 1 + vg_roots="$vg_roots $vg_root" + else + lvm_blockdev="$lvm_blockdev $bd" + fi + done + blockdev="$lvm_blockdev" +fi + +if use_script lvm2; then + tmp_root_dm=1 # lvm needs dm + mkdir -p $tmp_mnt/etc/lvm + mkdir -p $tmp_mnt/var/lock/lvm + cp -a /etc/lvm/lvm.conf $tmp_mnt/etc/lvm +fi + +save_var root_lvm2 +save_var vg_roots +