Greetings,
I have been noticing a problem with anaconda when repeatedly installing
a server with a disk configuration involving LVM. Anaconda will fail
because it cannot create the volume group VolumeGroup00. After looking
at the disk, it is clear why - the volume group still exists. To get
around this I wrote a simple %pre script that destroys all PGs, VGs, and
LVs it knows about. A copy of that script may be found at the bottom of
this email. Is this the correct solution, or should Anaconda be
handling this? I have verified this behavior on RHEL 4u2, and CentOS 4u4.
---> kickstart.cfg <----
install
text
url --url http://192.168.1.88/centos/4.4-i386
skipx
mouse none
#reboot
authconfig --enablemd5 --enableshadow
lang en_US.UTF-8
langsupport --default en_USs.UTF-8 en_US.UTF-8
keyboard us
firewall --disabled
selinux --disabled
bootloader --location=mbr
timezone --utc US/Eastern
network --device eth0 --bootproto dhcp
clearpart --all --initlabel
partition pv.00 --size 1 --grow
volgroup VolumeGroup00 pv.00
logvol / --vgname VolumeGroup00 --size 4000 --name=root.fs
logvol swap --vgname VolumeGroup00 --size 2048 --name=swap.fs
logvol /var --vgname VolumeGroup00 --size 8192 --name=var.fs
logvol /usr --vgname VolumeGroup00 --size 4096 --name=usr.fs
logvol /opt --vgname VolumeGroup00 --size 16384 --name=opt.fs
%packages --resolvedeps
@Web Server
# Destroy anything related to LVM
%pre --interpreter /usr/bin/python
import os, re, sys
lvm = "/usr/sbin/lvm.static"
fouth = open("/tmp/lvm_wipe.log", 'w')
print >>fouth, "Starting LVM wipe ..."
if not os.path.exists(lvm):
print >>fouth, "Error: cannot find %s" % lvm
sys.exit(1)
for lv in (os.popen("%s lvscan" % lvm).readlines()):
m = re.match(r".*'([^']+)'", lv)
if m:
cmd = "%s lvremove %s" % (lvm, m.group(1))
print >>fouth, cmd
print >>fouth, os.popen(cmd).read()
for vg in (os.popen("%s vgscan" % lvm).readlines()):
m = re.match(r'\s*Found volume group "([^"]+)"', vg)
if m:
cmd = "%s vgremove %s" % (lvm, m.group(1))
print >>fouth, cmd
print >>fouth, os.popen(cmd).read()
for pv in (os.popen("%s pvscan" % lvm).readlines()):
m = re.match(r'\s+PV (\S+)', pv)
if m:
cmd = "%s pvremove %s" % (lvm, m.group(1))
print >>fouth, cmd
print >>fouth, os.popen(cmd).read()
fouth.close()
Thanks,
Christopher