SCIENTIFIC-LINUX-USERS Archives

February 2013

SCIENTIFIC-LINUX-USERS@LISTSERV.FNAL.GOV

Options: Use Monospaced Font
Show Text Part by Default
Show All Mail Headers

Message: [<< First] [< Prev] [Next >] [Last >>]
Topic: [<< First] [< Prev] [Next >] [Last >>]
Author: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
Subject:
From:
Paul Robert Marino <[log in to unmask]>
Reply To:
Paul Robert Marino <[log in to unmask]>
Date:
Fri, 22 Feb 2013 18:42:46 -0500
Content-Type:
text/plain
Parts/Attachments:
text/plain (222 lines)
I just do this
"
clearpart --all
part /boot --fstype ext3 --size=100
part pv.01 --size=10 --grow
volgroup SystemVG00 pv.01
logvol swap --fstype swap --name=SwapVol01 --vgname=SystemVG00 --size=12288
logvol / --fstype ext4 --name=RootVol --vgname=SystemVG00 --size=5120
logvol /usr --fstype ext4 --name=UsrVol --vgname=SystemVG00 --size=5120
logvol /home --fstype ext4 --name=HomeVol --vgname=SystemVG00 --size=5120
logvol /var --fstype ext4 --name=VarVol --vgname=SystemVG00 --size=10240
logvol /log --fstype ext4 --name=VarLogVol00 --vgname=SystemVG00 --size=20480
"
Then I deal with any additional physical disks using whatever the
automation dejour for the environment happens to be after the
kickstart.
I find it a lot less aggravating than any other solution mostly
because it reliable, simple and doesn't care what your RAID controller
calls the drives.

On Fri, Feb 22, 2013 at 1:06 PM, Graham Allan <[log in to unmask]> wrote:
> On Wed, Feb 20, 2013 at 07:57:22AM -0600, Pat Riehecky wrote:
>> On 02/19/2013 10:14 AM, Graham Allan wrote:
>> >On Mon, Feb 18, 2013 at 07:33:37PM -0700, Orion Poplawski wrote:
>> >>On 02/18/2013 02:01 PM, Ken Teh wrote:
>> >>>During a kickstart install, how are drives mapped?  I notice that sata0
>> >>>is not always sda.  This is especially true when there are very large
>> >>>drives in the mix.
>> >>The sd* letters are simply handed out in order of enumeration and,
>> >>as you noted, is not deterministic.  If you need that, use the
>> >>/dev/disk/by-{id,label,path,uuid} labels.
>> >For this reason we use a script during the kickstart %pre section which
>> >attempts to examine the available drives and determine which is the
>> >appropriate one to install on (also waits for confirmation if an
>> >unexpected partition table is found).
>> >
>> >G.
>>
>> Any chance you can share that script?  It sounds interesting!
>
> Well I hope I haven't oversold this - it's not a miracle cure but it
> works for our environment.
>
> Back in the SL3/4/5 days we made some basic assumptions in kickstart
> %pre that if there was an hda device, that would be the OS drive,
> otherwise use sda. If a workstation didn't match that model, we'd
> generally beat on it until it did :-) IIRC SL6 changed so that ATA drives,
> and any connected usb drives, appeared as sd* devices, and you couldn't be
> certain about the ordering.
>
> There will be lots of deeply unfashionable things in this script such as
> using regular drive partitions instead of LVM, using separate /var,
> etc... Also please remember it's been hacked together as edge cases were
> discovered so it's not pretty, or commented as well as it might be.
>
> It tries to examine all candidate drives (after eliminating USB devices)
> and will select a drive for installation if it either contains no
> partition table, or finds a /boot directory (actually that hardly seems
> foolproof, there might be better choices). Otherwise if it finds an
> unfamiliar partition table, it prints it and asks for confirmation.
>
> The rest of the script is concerned with stashing away ssh keys and
> suchlike, for restoration after a reinstall.
>
> Here goes, hope vim didn't mangle it overmuch during pasting, and don't
> judge it too harshly!
>
> %pre
>
> ##################
> # Figure out where to install to
>
> #Make sure USB storage devices are GONE
> modprobe -r usb_storage
>
> mkdir /mnt/tmp
>
> for i in `ls /dev/sd?`; do
>     CANDIDATE_DISK="$i"
>
>     echo "UMPHYS: Checking $CANDIDATE_DISK for partition table" | tee -a /tmp/ks.log >> /dev/tty3
>
>     if parted -s "$CANDIDATE_DISK" print >/dev/null; then
>         echo "parted found a partition table" | tee -a /tmp/ks.log >> /dev/tty3
>         if mount "${CANDIDATE_DISK}1" /mnt/tmp; then
>             if [ -d /mnt/tmp/boot ]; then
>                 INSTALL_DISK=$CANDIDATE_DISK
>                 echo "Found /boot on ${CANDIDATE_DISK}1, using $CANDIDATE_DISK as system disk" | tee -a /tmp/ks.log >> /dev/tty3
>                 umount /mnt/tmp
>                 break
>             else
>                 echo "Couldn't find /boot on ${CANDIDATE_DISK}1, moving on to next disk..." | tee -a /tmp/ks.log >> /dev/tty3
>                 umount /mnt/tmp
>             fi
>                 umount /mnt/tmp
>             fi
>         else
>             echo "Failed to mount ${CANDIDATE_DISK}1, moving on to next disk..." | tee -a /tmp/ks.log >> /dev/tty3
>         fi
>     else
>         echo "parted found no partition table, using $CANDIDATE_DISK as system disk" | tee -a /tmp/ks.log >> /dev/tty3
>         INSTALL_DISK="$CANDIDATE_DISK"
>         break
>     fi
> done
>
> if [ "${INSTALL_DISK}x" = "x" ]; then
>     echo "****************************************************" >> /dev/tty1
>     echo "Initial check failed to find a suitable system disk!" >> /dev/tty1
>     echo "****************************************************" >> /dev/tty1
>     for i in `ls /dev/sd?`; do
>         CANDIDATE_DISK="$i"
>         if mount "${CANDIDATE_DISK}1" /mnt/tmp; then
>             if ! [ -d /mnt/tmp/boot ]; then
>                 echo -e "\n\nCouldn't find /boot on ${CANDIDATE_DISK}1" >> /dev/tty1
>                 echo -n "Partition table for ${CANDIDATE_DISK}:" >> /dev/tty1
>                 fdisk -l ${CANDIDATE_DISK} >> /dev/tty1
>                 doit="default"
>                 while ! echo "$doit" | grep -P "([Y|y]es|[N|n]o)" > /dev/null 2>&1; do
>                     echo -n "Install linux on ${CANDIDATE_DISK}? [Yes/No] " >> /dev/tty1
>                     read doit
>                 done
>                 if echo "$doit" | grep -P "[Y|y]es" > /dev/null 2>&1; then
>                     INSTALL_DISK="$CANDIDATE_DISK"
>                     umount /mnt/tmp
>                     break
>                 else
>                     echo "moving on to next disk..." >> /dev/tty1
>                 fi
>                 umount /mnt/tmp
>             fi
>         else
>             echo -ne "\n\nPartition table for ${CANDIDATE_DISK}:" >> /dev/tty1
>             fdisk -l ${CANDIDATE_DISK} >> /dev/tty1
>             doit="default"
>             while ! echo "$doit" | grep -P "([Y|y]es|[N|n]o)" > /dev/null 2>&1; do
>                 echo -n "Install linux on ${CANDIDATE_DISK}? [Yes/No] " >> /dev/tty1
>                 read doit
>             done
>             if echo "$doit" | grep -P "[Y|y]es" > /dev/null 2>&1; then
>                 INSTALL_DISK="$CANDIDATE_DISK"
>                 break
>             else
>                 echo "moving on to next disk..." >> /dev/tty1
>             fi
>         fi
>     done
>
>     if [ "${INSTALL_DISK}x" = "x" ]; then
>         echo -e "\n****************************************************" >> /dev/tty1
>         echo "Failed to find a suitable system disk" >> /dev/tty1
>         echo "The system will be rebooted when you press Ctrl-C or Ctrl-Alt-Delete." >> /dev/tty1
>         echo "****************************************************" >> /dev/tty1
>         while true; do
>             sleep 1
>         done
>     fi
> fi
>
> echo "Installing linux to $INSTALL_DISK" | tee -a /tmp/ks.log >> /dev/tty3
> echo "Installing linux to $INSTALL_DISK" >> /dev/tty1
> echo "****************************************************" >> /dev/tty1
> # Done figuring out where to install
> ###################
>
>
> #Write a file out to be included below for disk config
> cat << EOF > /tmp/partitions
> clearpart --drives=$INSTALL_DISK --initlabel --all
> zerombr yes
> part swap --recommended --ondisk=$INSTALL_DISK
> part /    --size=25600 --ondisk=$INSTALL_DISK
> part /var --size=4096   --ondisk=$INSTALL_DISK
> part /export/scratch --size=128 --grow --ondisk=$INSTALL_DISK
> EOF
>
> # Salvage files from an old installation if possible
> mkdir /tmp/physkeys
> echo "Attempting to salvage files..." | tee -a /tmp/ks.log >> /dev/tty3
> for i in `fdisk -l $INSTALL_DISK | grep ^/dev | grep -v '\(swap\|lvm\|extended\)' | cut -b 1-9`; do
>     echo "Mounting $i (label '`e2label $i`') to /mnt/tmp" | tee -a /tmp/ks.log >> /dev/tty3
>     mount $i /mnt/tmp
>     # SSH keys
>     if [ -d /mnt/tmp/etc/ssh ]; then
>         echo "Found ssh keys. Stashing"| tee -a /tmp/ks.log >> /dev/tty3
>         mkdir /tmp/physkeys/ssh
>         cp -p /mnt/tmp/etc/ssh/ssh_host_* /tmp/physkeys/ssh
>     fi
>     # X config
>     if [ -f /mnt/tmp/etc/X11/xorg.conf ]; then
>         echo "Found xorg.conf. Stashing"| tee -a /tmp/ks.log >> /dev/tty3
>         mkdir /tmp/physkeys/X11
>         cp -p /mnt/tmp/etc/X11/xorg.conf /tmp/physkeys/X11
>     fi
>     # Cfengine keys (sep /var partition)
>     if [ -d /mnt/tmp/cfengine/ppkeys ]; then
>         echo "Found cfengine ppkeys. Stashing"| tee -a /tmp/ks.log >> /dev/tty3
>         mkdir /tmp/physkeys/cfengine
>         cp -p /mnt/tmp/cfengine/ppkeys/* /tmp/physkeys/cfengine #*/
>     fi
>     # Cfengine keys (integrated /var)
>     if [ -d /mnt/tmp/var/cfengine/ppkeys ]; then
>         echo "Found cfengine ppkeys. Stashing"| tee -a /tmp/ks.log >> /dev/tty3
>         mkdir /tmp/physkeys/cfengine
>         cp -p /mnt/tmp/var/cfengine/ppkeys/* /tmp/physkeys/cfengine #*/
>     fi
>     # Crontabs
>     if [ -d /mnt/tmp/spool/cron ]; then
>         echo "Found cron. Stashing"| tee -a /tmp/ks.log >> /dev/tty3
>         mkdir /tmp/physkeys/cron
>         cp -p /mnt/tmp/spool/cron/* /tmp/physkeys/cron #*/
>     fi
>     umount /mnt/tmp
> done
> %end
>
> --
> -------------------------------------------------------------------------
> Graham Allan
> School of Physics and Astronomy - University of Minnesota
> -------------------------------------------------------------------------

ATOM RSS1 RSS2