Fixes config drive creation failure in UEFI boot mode
This fix enables creation of config drive for UEFI only whole disk images. It will not work with the hybrid images that support booting in BIOS and UEFI boot mode. Change-Id: Ib4dd8c082a50e1dbaf0df91477b062716cb780ff Closes-Bug: #1486887 Depends-On: I81400305f166d62aa4612aab54602abb8178b64c
This commit is contained in:
parent
19d21eb999
commit
2d341c7f0d
@ -13,7 +13,7 @@ RUN echo 'APT::Default-Release "jessie";' > /etc/apt/apt.conf.d/10default && \
|
||||
# image on disk
|
||||
RUN apt-get update && \
|
||||
apt-get -y upgrade && \
|
||||
apt-get install -y --no-install-recommends python2.7 python2.7-dev \
|
||||
apt-get install -y --no-install-recommends gdisk python2.7 python2.7-dev \
|
||||
python-pip qemu-utils parted hdparm util-linux genisoimage git gcc \
|
||||
bash coreutils tgt dmidecode ipmitool && \
|
||||
apt-get --only-upgrade -t testing install -y qemu-utils
|
||||
|
@ -35,6 +35,8 @@ usage() {
|
||||
exit 1
|
||||
}
|
||||
|
||||
MAX_DISK_PARTITIONS=128
|
||||
|
||||
CONFIGDRIVE="$1"
|
||||
DEVICE="$2"
|
||||
|
||||
@ -57,13 +59,41 @@ if [[ $? == 0 ]]; then
|
||||
log "Existing configdrive found on ${DEVICE} at ${EXISTING_PARTITION}"
|
||||
ISO_PARTITION=$EXISTING_PARTITION
|
||||
else
|
||||
# Create small partition at the end of the device
|
||||
log "Adding configdrive partition to $DEVICE"
|
||||
parted -a optimal -s -- $DEVICE mkpart primary ext2 -64MiB -0 || fail "creating configdrive on ${DEVICE}"
|
||||
|
||||
# Find partition we just created
|
||||
# Dump all partitions, ignore empty ones, then get the last partition ID
|
||||
ISO_PARTITION=`sfdisk --dump $DEVICE | grep -v ' 0,' | tail -n1 | awk '{print $1}'` || fail "finding ISO partition created on ${DEVICE}"
|
||||
# Check if it is GPT partition and needs to be re-sized
|
||||
partprobe $DEVICE print 2>&1 | grep "fix the GPT to use all of the space"
|
||||
if [[ $? == 0 ]]; then
|
||||
log "Fixing GPT to use all of the space on device $DEVICE"
|
||||
sgdisk -e $DEVICE || fail "move backup GPT data structures to the end of ${DEVICE}"
|
||||
|
||||
# Need to create new partition for config drive
|
||||
# Not all images have partion numbers in a sequential numbers. There are holes.
|
||||
# These holes get filled up when a new partition is created.
|
||||
TEMP_DIR="$(mktemp -d)"
|
||||
EXISTING_PARTITION_LIST=$TEMP_DIR/existing_partitions
|
||||
UPDATED_PARTITION_LIST=$TEMP_DIR/updated_partitions
|
||||
|
||||
gdisk -l $DEVICE | grep -A$MAX_DISK_PARTITIONS "Number Start" | grep -v "Number Start" > $EXISTING_PARTITION_LIST
|
||||
|
||||
# Create small partition at the end of the device
|
||||
log "Adding configdrive partition to $DEVICE"
|
||||
sgdisk -n 0:-64MB:0 $DEVICE || fail "creating configdrive on ${DEVICE}"
|
||||
|
||||
gdisk -l $DEVICE | grep -A$MAX_DISK_PARTITIONS "Number Start" | grep -v "Number Start" > $UPDATED_PARTITION_LIST
|
||||
|
||||
CONFIG_PARTITION_ID=`diff $EXISTING_PARTITION_LIST $UPDATED_PARTITION_LIST | tail -n1 |awk '{print $2}'`
|
||||
ISO_PARTITION="${DEVICE}${CONFIG_PARTITION_ID}"
|
||||
else
|
||||
log "Working on MBR only device $DEVICE"
|
||||
|
||||
# Create small partition at the end of the device
|
||||
log "Adding configdrive partition to $DEVICE"
|
||||
parted -a optimal -s -- $DEVICE mkpart primary ext2 -64MiB -0 || fail "creating configdrive on ${DEVICE}"
|
||||
|
||||
# Find partition we just created
|
||||
# Dump all partitions, ignore empty ones, then get the last partition ID
|
||||
ISO_PARTITION=`sfdisk --dump $DEVICE | grep -v ' 0,' | tail -n1 | awk '{print $1}'` || fail "finding ISO partition created on ${DEVICE}"
|
||||
fi
|
||||
fi
|
||||
|
||||
# This writes the ISO image to the config drive.
|
||||
|
Loading…
x
Reference in New Issue
Block a user