Brian Elliott Finley wrote:
Andrea,

I see what your at here...

If you try to use the $flags variable in the sections just above, does it not do the right thing?


sorry... I think I've not understood well what you mean...

If it does, then I think that would be a cleaner way to go.

If it doesn't, then go ahead and commit this.

And can you send an example autoinstallscript.conf && master.script with the code you decide on?


I've attached an autoinstallscript.conf with lvm definitions and the associated master script.


Thanks, -Brian



Bye, -Andrea
<config>

  <disk dev="/dev/sda" label_type="msdos" unit_of_measurement="MB">
      <part num="1" size="24" p_type="primary" fs="ext2" p_name="-" flags="-" />
      <part num="2" size="256" p_type="primary" fs="linux-swap" p_name="-" 
flags="-" />
      <part num="3" size="3000" p_type="primary" p_name="-" flags="lvm" 
lvm_group="user" />
      <part num="4" size="end_of_disk" p_type="primary" p_name="-" flags="lvm" 
lvm_group="system" />
  </disk>
  <disk dev="/dev/sdb" label_type="msdos" unit_of_measurement="MB">
      <part num="1" size="1500" p_type="primary" fs="ext2" p_name="-" flags="-" 
/>
      <part num="2" size="1500" p_type="primary" p_name="-" flags="lvm" 
lvm_group="system" />
      <part num="3" size="end_of_disk" p_type="primary" p_name="-" flags="lvm" 
lvm_group="user" />
  </disk>
  
  <lvm>
      <lvm_group name="system">
          <lv name="usrlv" size="500" />
          <lv name="optlv" size="1500" />
          <lv name="varlv" size="256" />
      </lvm_group>
      <lvm_group name="user">
          <lv name="homelv" size="5000" />
          <lv name="scratchlv" size="2000" />
      </lvm_group>
  </lvm>

  <fsinfo line="10" real_dev="/dev/sdb1" mp="/" fs="ext3" 
options="defaults,errors=remount-ro" />
  <fsinfo line="20" real_dev="/dev/sda1" mp="/boot" fs="ext3" 
options="defaults,ro,noexec" dump="0" pass="2" />
  
  <fsinfo line="30" real_dev="/dev/system/usrlv" fs="ext3" mp="/usr" 
options="defaults,rw,user,exec" />
  <fsinfo line="40" real_dev="/dev/system/optlv" fs="reiserfs" mp="/opt" 
options="defaults,rw,user" />
  <fsinfo line="50" real_dev="/dev/system/varlv" fs="ext3" mp="/var" 
options="defaults,rw,user,noexec" />
  <fsinfo line="60" real_dev="/dev/user/homelv" fs="xfs" mp="/home" 
options="defaults,rw,user,exec" />
  <fsinfo line="70" real_dev="/dev/system/scratchlv" fs="ext3" mp="/scratch" 
options="defaults,rw,user,noexec" />

  <fsinfo line="80" real_dev="/dev/sda2" mp="swap" fs="swap" options="defaults" 
/>

  <fsinfo line="90" real_dev="/dev/fd0" mp="/floppy" fs="auto" 
options="defaults,user,noauto" dump="0" pass="0" format="no" />
  <fsinfo line="100" real_dev="proc" mp="/proc" fs="proc" options="defaults" 
dump="0" pass="0" />

</config>

#!/bin/sh
#
#   "SystemImager"
#
#   Copyright (C) 1999-2004 Brian Elliott Finley
#
#   $Id: autoinstallscript.template,v 1.18 2005/01/25 18:12:23 righiandr Exp $
#

# This master autoinstall script was created with SystemImager 
vSYSTEMIMAGER_VERSION_STRING

# Load functions and other variables
. /etc/init.d/functions

get_arch

if [ -z $NO_LISTING ]; then
    VERBOSE_OPT="v"
else
    VERBOSE_OPT=""
fi

# Pull in variables left behind by the linuxrc script.
# This information is passed from the linuxrc script on the autoinstall media 
# via /tmp/variables.txt.  Apparently the shell we use in BOEL is not 
# intelligent enough to take a "set -a" parameter.
#
. /tmp/variables.txt || shellout

[ -z $IMAGENAME ] && IMAGENAME=default
[ -z $OVERRIDES ] && OVERRIDES="default"

### BEGIN Check to be sure this not run from a working machine ###
# Test for mounted SCSI or IDE disks
mount | grep [hs]d[a-z][1-9] > /dev/null 2>&1
[ $? -eq 0 ] &&  echo Sorry.  Must not run on a working machine... && shellout

# Test for mounted software RAID devices
mount | grep md[0-9] > /dev/null 2>&1
[ $? -eq 0 ] &&  echo Sorry.  Must not run on a working machine... && shellout

# Test for mounted hardware RAID disks
mount | grep c[0-9]+d[0-9]+p > /dev/null 2>&1
[ $? -eq 0 ] &&  echo Sorry.  Must not run on a working machine... && shellout
### END Check to be sure this not run from a working machine ###


################################################################################
#
#   Stop RAID devices before partitioning begins
#
# Q1) Why did they get started in the first place?  
# A1) So we can pull a local.cfg file off a root mounted software RAID system.
#     They may not be started on your system -- they would only be started if
#     you did the stuff in Q3 below.
#
# Q2) Why didn't my local.cfg on my root mounted software RAID work for me 
#     with the standard kernel flavour?
# A2) The standard kernel flavour uses modules for the software RAID drivers --
#     therefore, software RAID is not available at the point in the boot process
#     where BOEL needs to read the local.cfg file.  They are only pulled over 
#     when this script is run, which is, of course, only runnable if it was
#     pulled over the network using the settings that you would have wanted it
#     to get from the local.cfg file, which it couldn't.  Right?
#
# Q3) Whatever.  So how do I make it work with a local.cfg file on my root
#     mounted software RAID?  
# A3) Compile an autoinstall kernel with software RAID, and any other drivers 
#     you might need built in (filesystem, SCSI drivers, etc.).
#
if [ -f /proc/mdstat ]; then
  RAID_DEVICES=` cat /proc/mdstat | grep ^md | sed 's/ .*$//g' `

  # raidstop will not run unless a raidtab file exists
  echo "" >> /etc/raidtab || shellout

  # turn dem pesky raid devices off!
  for RAID_DEVICE in ${RAID_DEVICES}
  do
    DEV="/dev/${RAID_DEVICE}"
    # we don't do a shellout here because, well I forgot why, but we don't.
    echo "raidstop ${DEV}" && raidstop ${DEV}
  done
fi
#
################################################################################

### BEGIN partition /dev/sda ###
echo "Partitioning /dev/sda..."
echo "Old partition table for /dev/sda:"
parted -s -- /dev/sda print

# Create disk label.  This ensures that all remnants of the old label, whatever
# type it was, are removed and that we're starting with a clean label.
echo "parted -s -- /dev/sda mklabel msdos || shellout"
parted -s -- /dev/sda mklabel msdos || shellout

# Get the size of the destination disk so that we can make the partitions fit 
properly.
DISK_SIZE=`parted -s /dev/sda print | grep 'Disk geometry for' | sed 
's/^.*-//g' | sed 's/\..*$//' `
[ -z $DISK_SIZE ] && shellout
if [ "$ARCH" = "alpha" ]; then
    END_OF_LAST_PRIMARY=1
else
    END_OF_LAST_PRIMARY=0
fi


echo "Creating partition /dev/sda1."
START_MB=$END_OF_LAST_PRIMARY
END_MB=$(echo "scale=3; ($START_MB + 24)" | bc)
echo "parted -s -- /dev/sda mkpart primary ext2 $START_MB $END_MB || shellout"
parted -s -- /dev/sda mkpart primary ext2 $START_MB $END_MB || shellout
END_OF_LAST_PRIMARY=$END_MB

echo "Creating partition /dev/sda2."
START_MB=$END_OF_LAST_PRIMARY
END_MB=$(echo "scale=3; ($START_MB + 256)" | bc)
echo "parted -s -- /dev/sda mkpart primary ext2 $START_MB $END_MB || shellout"
parted -s -- /dev/sda mkpart primary ext2 $START_MB $END_MB || shellout
END_OF_LAST_PRIMARY=$END_MB

echo "Creating partition /dev/sda3."
START_MB=$END_OF_LAST_PRIMARY
END_MB=$(echo "scale=3; ($START_MB + 3000)" | bc)
echo "parted -s -- /dev/sda mkpart primary ext2 $START_MB $END_MB || shellout"
parted -s -- /dev/sda mkpart primary ext2 $START_MB $END_MB || shellout
END_OF_LAST_PRIMARY=$END_MB
echo parted -s -- /dev/sda set 3 lvm on || shellout
parted -s -- /dev/sda set 3 lvm on || shellout

echo "Creating partition /dev/sda4."
START_MB=$END_OF_LAST_PRIMARY
END_MB=$(echo "scale=3; ($START_MB + end_of_disk)" | bc)
echo "parted -s -- /dev/sda mkpart primary ext2 $START_MB $END_MB || shellout"
parted -s -- /dev/sda mkpart primary ext2 $START_MB $END_MB || shellout
END_OF_LAST_PRIMARY=$END_MB
echo parted -s -- /dev/sda set 4 lvm on || shellout
parted -s -- /dev/sda set 4 lvm on || shellout

echo "New partition table for /dev/sda:"
echo "parted -s -- /dev/sda print"
parted -s -- /dev/sda print
### END partition /dev/sda ###


### BEGIN partition /dev/sdb ###
echo "Partitioning /dev/sdb..."
echo "Old partition table for /dev/sdb:"
parted -s -- /dev/sdb print

# Create disk label.  This ensures that all remnants of the old label, whatever
# type it was, are removed and that we're starting with a clean label.
echo "parted -s -- /dev/sdb mklabel msdos || shellout"
parted -s -- /dev/sdb mklabel msdos || shellout

# Get the size of the destination disk so that we can make the partitions fit 
properly.
DISK_SIZE=`parted -s /dev/sdb print | grep 'Disk geometry for' | sed 
's/^.*-//g' | sed 's/\..*$//' `
[ -z $DISK_SIZE ] && shellout
if [ "$ARCH" = "alpha" ]; then
    END_OF_LAST_PRIMARY=1
else
    END_OF_LAST_PRIMARY=0
fi


echo "Creating partition /dev/sdb1."
START_MB=$END_OF_LAST_PRIMARY
END_MB=$(echo "scale=3; ($START_MB + 1500)" | bc)
echo "parted -s -- /dev/sdb mkpart primary ext2 $START_MB $END_MB || shellout"
parted -s -- /dev/sdb mkpart primary ext2 $START_MB $END_MB || shellout
END_OF_LAST_PRIMARY=$END_MB

echo "Creating partition /dev/sdb2."
START_MB=$END_OF_LAST_PRIMARY
END_MB=$(echo "scale=3; ($START_MB + 1500)" | bc)
echo "parted -s -- /dev/sdb mkpart primary ext2 $START_MB $END_MB || shellout"
parted -s -- /dev/sdb mkpart primary ext2 $START_MB $END_MB || shellout
END_OF_LAST_PRIMARY=$END_MB
echo parted -s -- /dev/sdb set 2 lvm on || shellout
parted -s -- /dev/sdb set 2 lvm on || shellout

echo "Creating partition /dev/sdb3."
START_MB=$END_OF_LAST_PRIMARY
END_MB=$(echo "scale=3; ($START_MB + end_of_disk)" | bc)
echo "parted -s -- /dev/sdb mkpart primary ext2 $START_MB $END_MB || shellout"
parted -s -- /dev/sdb mkpart primary ext2 $START_MB $END_MB || shellout
END_OF_LAST_PRIMARY=$END_MB
echo parted -s -- /dev/sdb set 3 lvm on || shellout
parted -s -- /dev/sdb set 3 lvm on || shellout

echo "New partition table for /dev/sdb:"
echo "parted -s -- /dev/sdb print"
parted -s -- /dev/sdb print
### END partition /dev/sdb ###



echo "Load additional filesystem drivers."
modprobe reiserfs
modprobe ext2
modprobe ext3
modprobe jfs
modprobe xfs

echo "Load device mapper driver (for LVM)."
grep "dm-mod" /proc/modules > /dev/null
if [ $? -eq 1 ]; then modprobe dm-mod; fi

### BEGIN LVM initialization commands -AR- ###
echo "Initializing partition /dev/sda3 for use by LVM."
echo "pvcreate /dev/sda3 || shellout"
pvcreate /dev/sda3 || shellout
echo "Initializing partition /dev/sda4 for use by LVM."
echo "pvcreate /dev/sda4 || shellout"
pvcreate /dev/sda4 || shellout
echo "Initializing partition /dev/sdb2 for use by LVM."
echo "pvcreate /dev/sdb2 || shellout"
pvcreate /dev/sdb2 || shellout
echo "Initializing partition /dev/sdb3 for use by LVM."
echo "pvcreate /dev/sdb3 || shellout"
pvcreate /dev/sdb3 || shellout
### END LVM initialization commands ###

### BEGIN LVM groups creation commands -AR- ###
echo "vgcreate system /dev/sda4 /dev/sdb2 || shellout"
vgcreate system /dev/sda4 /dev/sdb2 || shellout
echo "vgcreate user /dev/sda3 /dev/sdb3 || shellout"
vgcreate user /dev/sda3 /dev/sdb3 || shellout
### END LVM groups creation commands ###

### BEGIN LVM volumes creation commands -AR- ###
echo "lvcreate  -L500 -n usrlv system || shellout"
lvcreate  -L500 -n usrlv system || shellout
echo "lvcreate  -L1500 -n optlv system || shellout"
lvcreate  -L1500 -n optlv system || shellout
echo "lvcreate  -L256 -n varlv system || shellout"
lvcreate  -L256 -n varlv system || shellout
echo "lvcreate  -L5000 -n homelv user || shellout"
lvcreate  -L5000 -n homelv user || shellout
echo "lvcreate  -L2000 -n scratchlv user || shellout"
lvcreate  -L2000 -n scratchlv user || shellout
### END LVM volumes creation commands ###

### BEGIN swap and filesystem creation commands ###
echo "mke2fs -j /dev/sdb1 || shellout"
mke2fs -j /dev/sdb1 || shellout
echo "mkdir -p /a/ || shellout"
mkdir -p /a/ || shellout
echo "mount /dev/sdb1 /a/ -t ext3 -o defaults || shellout"
mount /dev/sdb1 /a/ -t ext3 -o defaults || shellout

echo "mke2fs -j /dev/sda1 || shellout"
mke2fs -j /dev/sda1 || shellout
echo "mkdir -p /a/boot || shellout"
mkdir -p /a/boot || shellout
echo "mount /dev/sda1 /a/boot -t ext3 -o defaults,rw,noexec || shellout"
mount /dev/sda1 /a/boot -t ext3 -o defaults,rw,noexec || shellout

echo "mke2fs -j /dev/system/usrlv || shellout"
mke2fs -j /dev/system/usrlv || shellout
echo "mkdir -p /a/usr || shellout"
mkdir -p /a/usr || shellout
echo "mount /dev/system/usrlv /a/usr -t ext3 -o defaults,rw,user,exec || 
shellout"
mount /dev/system/usrlv /a/usr -t ext3 -o defaults,rw,user,exec || shellout

echo "echo y | mkreiserfs /dev/system/optlv || shellout"
echo y | mkreiserfs /dev/system/optlv || shellout
echo "mkdir -p /a/opt || shellout"
mkdir -p /a/opt || shellout
echo "mount /dev/system/optlv /a/opt -t reiserfs -o defaults,rw,user || 
shellout"
mount /dev/system/optlv /a/opt -t reiserfs -o defaults,rw,user || shellout

echo "mke2fs -j /dev/system/varlv || shellout"
mke2fs -j /dev/system/varlv || shellout
echo "mkdir -p /a/var || shellout"
mkdir -p /a/var || shellout
echo "mount /dev/system/varlv /a/var -t ext3 -o defaults,rw,user,noexec || 
shellout"
mount /dev/system/varlv /a/var -t ext3 -o defaults,rw,user,noexec || shellout

echo "mkfs.xfs -f -q /dev/user/homelv || shellout"
mkfs.xfs -f -q /dev/user/homelv || shellout
echo "mkdir -p /a/home || shellout"
mkdir -p /a/home || shellout
echo "mount /dev/user/homelv /a/home -t xfs -o defaults,rw,user,exec || 
shellout"
mount /dev/user/homelv /a/home -t xfs -o defaults,rw,user,exec || shellout

echo "mke2fs -j /dev/system/scratchlv || shellout"
mke2fs -j /dev/system/scratchlv || shellout
echo "mkdir -p /a/scratch || shellout"
mkdir -p /a/scratch || shellout
echo "mount /dev/system/scratchlv /a/scratch -t ext3 -o defaults,rw,user,noexec 
|| shellout"
mount /dev/system/scratchlv /a/scratch -t ext3 -o defaults,rw,user,noexec || 
shellout

echo "mkswap -v1 /dev/sda2 || shellout"
mkswap -v1 /dev/sda2 || shellout
echo "swapon /dev/sda2 || shellout"
swapon /dev/sda2 || shellout

### END swap and filesystem creation commands ###

### BEGIN mount proc in image for tools like System Configurator ###
echo "mkdir -p /a/proc || shellout"
mkdir -p /a/proc || shellout
echo "mount proc /a/proc -t proc -o defaults || shellout"
mount proc /a/proc -t proc -o defaults || shellout
### END mount proc in image for tools like System Configurator ###

################################################################################
#
#   Lay the image down on the freshly formatted disk(s)
#
if [ ! -z $FLAMETHROWER_DIRECTORY_PORTBASE ]; then 

    # Use multicast 
    MODULE_NAME="${IMAGENAME}"
    DIR=/a
    RETRY=7
    flamethrower_client
else 
    # Use rsync 
    if [ $NO_LISTING ]; then
        echo "Quietly installing image... "
        start_spinner
    fi
    if [ "${TMPFS_STAGING}" = "yes" ]; then 

        # Deposit image into tmpfs
        DIR=/tmp/tmpfs_staging
        echo
        echo "TMPFS_STAGING=${TMPFS_STAGING} -- Staging in ${DIR}"
        mkdir -p ${DIR}

        echo "rsync -aHS${VERBOSE_OPT} --exclude=lost+found/ --numeric-ids 
${IMAGESERVER}::${IMAGENAME}/ ${DIR}/" 
        rsync -aHS${VERBOSE_OPT} --exclude=lost+found/ --numeric-ids 
${IMAGESERVER}::${IMAGENAME}/ ${DIR}/ || shellout 

        # Move from staging in tmpfs to disk
        rsync -aHS${VERBOSE_OPT} --exclude=lost+found/ --numeric-ids ${DIR}/ /a/
    else
        echo "rsync -aHS${VERBOSE_OPT} --exclude=lost+found/ --numeric-ids 
${IMAGESERVER}::${IMAGENAME}/ /a/" 
        rsync -aHS${VERBOSE_OPT} --exclude=lost+found/ --numeric-ids 
${IMAGESERVER}::${IMAGENAME}/ /a/ || shellout 
    fi
fi 

beep

#
################################################################################


if [ $NO_LISTING ]; then
    stop_spinner
fi

# Leave notice of which image is installed on the client
echo $IMAGENAME > /a/etc/systemimager/IMAGE_LAST_SYNCED_TO || shellout


### BEGIN generate new fstab file from autoinstallscript.conf ###
cat <<'EOF' > /a/etc/fstab
/dev/sdb1       /       ext3    defaults,errors=remount-ro
/dev/sda1       /boot   ext3    defaults,ro,noexec      0       2
/dev/system/usrlv       /usr    ext3    defaults,rw,user,exec
/dev/system/optlv       /opt    reiserfs        defaults,rw,user
/dev/system/varlv       /var    ext3    defaults,rw,user,noexec
/dev/user/homelv        /home   xfs     defaults,rw,user,exec
/dev/system/scratchlv   /scratch        ext3    defaults,rw,user,noexec
/dev/sda2       swap    swap    defaults
/dev/fd0        /floppy auto    defaults,user,noauto    0       0
proc    /proc   proc    defaults        0       0
EOF
### END generate new fstab file from autoinstallscript.conf ###

################################################################################
#
#   Process override directories
#
for OVERRIDE in $OVERRIDES
do
    if [ ! -z $FLAMETHROWER_DIRECTORY_PORTBASE ]; then
        # Use multicast
        MODULE_NAME="override_${OVERRIDE}"
        DIR=/a
        RETRY=7
        flamethrower_client
    else
        # Use rsync
        echo "rsync -av --numeric-ids $IMAGESERVER::overrides/$OVERRIDE/ /a/"
        rsync -av --numeric-ids $IMAGESERVER::overrides/$OVERRIDE/ /a/ || echo 
"Override directory $OVERRIDE doesn't seem to exist, but that may be OK."
    fi
done

beep

#
################################################################################


##################################################################
#
# Uncomment the line below to leave your hostname blank.
# Certain distributions use this as an indication to take on the
# hostname provided by a DHCP server.  The default is to have
# SystemConfigurator assign your clients the hostname that
# corresponds to the IP address the use during the install.
# (If you used to use the static_dhcp option, this is your man.)
#
#HOSTNAME=""


################################################################################
#
# mount /dev /a/dev -o bind if needed
#
#not needed for this image
#
################################################################################


################################################################################
#
#   System Configurator
#
# Configure the client's hardware, network interface, and boot loader.
#
chroot /a/ systemconfigurator 
--excludesto=/etc/systemimager/systemconfig.local.exclude --configsi --stdin << 
EOL || shellout
[NETWORK]
HOSTNAME = $HOSTNAME
DOMAINNAME = $DOMAINNAME

[INTERFACE0]
DEVICE = eth0
TYPE = dhcp
EOL
#
################################################################################


################################################################################
#
#   Post Install Scripts
#
run_post_install_scripts
#
################################################################################


################################################################################
#
#   Unmount filesystems
#
echo "umount /a/var || shellout"
umount /a/var || shellout

echo "umount /a/usr || shellout"
umount /a/usr || shellout

echo "umount /a/scratch || shellout"
umount /a/scratch || shellout

echo "umount /a/proc || shellout"
umount /a/proc || shellout

echo "umount /a/opt || shellout"
umount /a/opt || shellout

echo "umount /a/home || shellout"
umount /a/home || shellout

echo "umount /a/boot || shellout"
umount /a/boot || shellout

echo "umount /a/ || shellout"
umount /a/ || shellout

#
################################################################################


################################################################################
#
#   Tell the image server we're done
#   
rsync $IMAGESERVER::scripts/imaging_complete > /dev/null 2>&1
#
################################################################################

# Take network interface down
ifconfig eth0 down || shellout

# Announce completion (even for non beep-incessantly --post-install options)
beep 3

beep_incessantly

Reply via email to