On 01/13/2016 01:30 PM, Konstantin Olchanski wrote:

and the same "you *must* use the disk partition tool designed by
dummies for dummies".

likewise solved by kickstart.


The kickstart disk partitioning tool is even dumber than they new GUI tool,
only useful for "one-size-fits-all" cases where you also do not mind 
accidentally
deleting the contents of all disks. (yes, open the machine, disconnect disks,
install, reconnect disks, close the machine, thanks, but no thanks).

Using %pre in the kickstart file is the way to fix this, but you do need
to do all the work yourself. I suppose I could share our %pre section which examines disks and decides which to install on (it waits for confirmation if it can't determine the drive itself). The logic is simply to look for the first drive which either has no partition table or has a /boot directory (ie reinstall). No claims that this is perfect in any way, we hacked it together over the years and it works for us (with SL6).

For the post-config stuff we use %post to set our configuration management system (cfengine) to run after reboot.

##################
# 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 "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
        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


Graham
--
-------------------------------------------------------------------------
Graham Allan
School of Physics and Astronomy - University of Minnesota
-------------------------------------------------------------------------

Reply via email to