Browse Source
Cirros partition images are not compatible with local boot since they don't ship grub (nor a normal root partition). This change adds a script that builds a partition image with UEFI artifacts present. It still cannot be booted in legacy mode, but it's a progress. Set the tempest plugin's partition_netboot option. We need it to inform the tempest plugin about the ability to do local boot. This option already exists but is never set. Also set the new default_boot_option parameter, which will be introduced and used in Iaba563a2ecbca029889bc6894b2a7f0754d27b88. Remove netboot from most of the UEFI jobs. Change-Id: I15189e7f5928126c6b336b1416ce6408a4950062changes/82/827882/17
5 changed files with 129 additions and 6 deletions
@ -0,0 +1,69 @@
|
||||
#!/bin/bash |
||||
|
||||
set -eu -o pipefail |
||||
|
||||
VERBOSE=${VERBOSE:-True} |
||||
if [[ "$VERBOSE" == True ]]; then |
||||
set -x |
||||
guestfish_args="--verbose" |
||||
fi |
||||
|
||||
CIRROS_VERSION=${CIRROS_VERSION:-0.5.2} |
||||
CIRROS_ARCH=${CIRROS_ARCH:-x86_64} |
||||
# TODO(dtantsur): use the image cached on infra images in the CI |
||||
DISK_URL=http://download.cirros-cloud.net/${CIRROS_VERSION}/cirros-${CIRROS_VERSION}-${CIRROS_ARCH}-disk.img |
||||
OUT=$(realpath ${1:-rootfs.img}) |
||||
|
||||
IRONIC_TTY_DEV=${IRONIC_TTY_DEV:-ttyS0,115200} |
||||
# rdroot : boot from the ramdisk present on the root partition instead of |
||||
# mounting the root partition. |
||||
# dslist : disable Nova metadata support, it takes a long time on boot. |
||||
KARGS=${KARGS:-nofb nomodeset vga=normal console=${IRONIC_TTY_DEV} rdroot dslist=configdrive} |
||||
|
||||
workdir=$(mktemp -d) |
||||
root_mp=$workdir/root |
||||
efi_mp=$workdir/efi |
||||
dest=$workdir/dest |
||||
|
||||
cd $workdir |
||||
|
||||
curl -Lf -o disk.qcow2 $DISK_URL |
||||
qemu-img convert -O raw disk.qcow2 disk.img |
||||
rm disk.qcow2 |
||||
|
||||
# kpartx automatically allocates loop devices for all partitions in the image |
||||
device=$(sudo kpartx -av disk.img | grep -oE 'loop[0-9]+p' | head -1) |
||||
|
||||
function clean_up { |
||||
set +e |
||||
sudo umount $efi_mp |
||||
sudo umount $root_mp |
||||
sudo kpartx -d $workdir/disk.img |
||||
sudo rm -rf $workdir |
||||
} |
||||
trap clean_up EXIT |
||||
|
||||
# TODO(dtantsur): some logic instead of hardcoding numbers 1 and 15? |
||||
rootdev=/dev/mapper/${device}1 |
||||
efidev=/dev/mapper/${device}15 |
||||
|
||||
mkdir -p $root_mp $efi_mp $dest/boot/efi |
||||
sudo mount $rootdev $root_mp |
||||
sudo mount $efidev $efi_mp |
||||
|
||||
sudo cp -aR $root_mp/* $dest/ |
||||
sudo cp -aR $efi_mp/EFI $dest/boot/efi/ |
||||
|
||||
# These locations are required by IPA even when it does not really run |
||||
# grub-install. |
||||
sudo mkdir -p $dest/{dev,proc,run,sys} |
||||
|
||||
# The default arguments don't work for us, update grub configuration. |
||||
sudo sed -i "/^ *linux /s/\$/ $KARGS/" $dest/boot/efi/EFI/ubuntu/grub.cfg |
||||
|
||||
LIBGUESTFS_BACKEND=direct sudo -E \ |
||||
virt-make-fs --size +50M --type ext3 --label cirros-rootfs \ |
||||
${guestfish_args:-} "$dest" "$OUT" |
||||
|
||||
sudo chown $USER "$OUT" |
||||
qemu-img info "$OUT" |
Loading…
Reference in new issue