From 0561cc7b0eae8a2a7197a4e65a20c140721a361c Mon Sep 17 00:00:00 2001 From: Catalina Focsa Date: Mon, 20 Feb 2017 13:55:23 +0100 Subject: Add uefi image support for yardstick Add support for downloading and building an uefi single part image. Keep three part image support if needed. Keep modifications required for arm64, when using vivid. Install and use parted required for GPT partitioning. Change-Id: I1a9a20701e2fe1f6f644f2c687c5da2e09b69d89 Signed-off-by: Catalina Focsa --- tools/ubuntu-server-cloudimg-modify.sh | 20 +++++----- tools/yardstick-img-modify | 67 ++++++++++++++++++++-------------- 2 files changed, 50 insertions(+), 37 deletions(-) (limited to 'tools') diff --git a/tools/ubuntu-server-cloudimg-modify.sh b/tools/ubuntu-server-cloudimg-modify.sh index c0ae774ef..ce320a205 100755 --- a/tools/ubuntu-server-cloudimg-modify.sh +++ b/tools/ubuntu-server-cloudimg-modify.sh @@ -25,8 +25,8 @@ fi # iperf3 only available for trusty in backports if [ grep -q trusty /etc/apt/sources.list ]; then - if [ $YARD_IMG_ARCH = "arm64" ]; then - echo "deb [arch=arm64] http://ports.ubuntu.com/ trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list + if [ "${YARD_IMG_ARCH}" = "arm64" ]; then + echo "deb [arch=${YARD_IMG_ARCH}] http://ports.ubuntu.com/ trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list else echo "deb http://archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list fi @@ -46,11 +46,11 @@ chpasswd: { expire: False } ssh_pwauth: True EOF apt-get update -if [ $YARD_IMG_ARCH = "arm64" ]; then -apt-get install -y \ - linux-headers-$(echo $VIVID_KERNEL_VERSION | cut -d'-' -f3,4,5) \ - unzip -#resize root parition (/dev/vdb1) It is supposed to be default but the image is booted differently for arm64 +if [[ "${YARD_IMG_ARCH}" = "arm64" && "$release" = "vivid" ]]; then + apt-get install -y \ + linux-headers-$(echo $CLOUD_KERNEL_VERSION | cut -d'-' -f3,4,5) \ + unzip + #resize root partition (/dev/vdb1) It is supposed to be default but the image is booted differently for arm64 cat </etc/cloud/cloud.cfg.d/15_growpart.cfg #cloud-config bootcmd: @@ -76,7 +76,7 @@ apt-get install -y \ stress \ sysstat -if [ $YARD_IMG_ARCH = "arm64" ]; then +if [[ "${YARD_IMG_ARCH}" = "arm64" && "$release" = "vivid" ]]; then wget https://github.com/kdlucas/byte-unixbench/archive/master.zip unzip master.zip && rm master.zip mkdir /opt/tempT @@ -88,7 +88,7 @@ else fi make --directory /opt/tempT/UnixBench/ -if [ $YARD_IMG_ARCH = "arm64" ]; then +if [ "${YARD_IMG_ARCH}" = "arm64" ]; then wget https://github.com/beefyamoeba5/ramspeed/archive/master.zip unzip master.zip && rm master.zip mkdir /opt/tempT/RAMspeed @@ -100,7 +100,7 @@ cd /opt/tempT/RAMspeed/ramspeed-2.6.0 mkdir temp bash build.sh -if [ $YARD_IMG_ARCH = "arm64" ]; then +if [[ "${YARD_IMG_ARCH}" = "arm64" && "$release" = "vivid" ]]; then wget https://github.com/beefyamoeba5/cachestat/archive/master.zip unzip master.zip && rm master.zip mv cachestat-master/cachestat /opt/tempT diff --git a/tools/yardstick-img-modify b/tools/yardstick-img-modify index 68ce6e223..da8e1c92f 100755 --- a/tools/yardstick-img-modify +++ b/tools/yardstick-img-modify @@ -23,7 +23,6 @@ # # TODO: image resize is needed if the base image is too small # - set -e set -x @@ -42,15 +41,23 @@ mountdir="/mnt/yardstick" workspace=${WORKSPACE:-"/tmp/workspace/yardstick"} host=${HOST:-"cloud-images.ubuntu.com"} release=${RELEASE:-"xenial"} -image_path="${release}/current/${release}-server-cloudimg-${YARD_IMG_ARCH}-disk1.img" +boot_mode="disk1" +if [[ "${YARD_IMG_ARCH}" = "arm64" ]]; then + boot_mode="uefi1" +fi + +image_path="${release}/current/${release}-server-cloudimg-${YARD_IMG_ARCH}-${boot_mode}.img" image_url=${IMAGE_URL:-"https://${host}/${image_path}"} md5sums_path="${release}/current/MD5SUMS" md5sums_url=${MD5SUMS_URL:-"https://${host}/${md5sums_path}"} imgfile="${workspace}/yardstick-image.img" -raw_imgfile="${workspace}/yardstick-${release}-server.raw" +raw_imgfile_basename="yardstick-${release}-server.raw" +raw_imgfile="${workspace}/${raw_imgfile_basename}" filename=$(basename $image_url) +apt-get install -y parted + # download and checksum base image, conditionally if local copy is outdated download() { test -d $workspace || mkdir -p $workspace @@ -69,24 +76,25 @@ download() { [ -a /dev/loop$i ] || mknod -m 660 /dev/loop$i b 7 $i done - if [ $YARD_IMG_ARCH = "arm64" ]; then + if [[ "${YARD_IMG_ARCH}" = "arm64" && "$release" = "vivid" ]]; then cd /tmp - if [ ! -f /tmp/vivid-server-cloudimg-arm64-kernel-info.txt ]; then - wget http://cloud-images.ubuntu.com/vivid/current/vivid-server-cloudimg-arm64-kernel-info.txt + if [ ! -f /tmp/${release}-server-cloudimg-${YARD_IMG_ARCH}-kernel-info.txt ]; then + wget http://${host}/${release}/current/${release}-server-cloudimg-${YARD_IMG_ARCH}-kernel-info.txt fi - export VIVID_KERNEL_VERSION=$(cut -d$'\t' -f4 vivid-server-cloudimg-arm64-kernel-info.txt) - mkdir -p /tmp/vivid-modules - if [ ! -f "/tmp/vivid-server-cloudimg-arm64.tar.gz" ]; then - wget $VIVID_IMG_URL + export CLOUD_KERNEL_VERSION=$(cut -d$'\t' -f4 ${release}-server-cloudimg-${YARD_IMG_ARCH}-kernel-info.txt) + + mkdir -p /tmp/${release}-modules + if [ ! -f "/tmp/${release}-server-cloudimg-${YARD_IMG_ARCH}.tar.gz" ]; then + wget $CLOUD_IMG_URL fi - if [ ! -f "/tmp/vivid-server-cloudimg-arm64.img" ]; then - tar zxvf vivid-server-cloudimg-arm64.tar.gz vivid-server-cloudimg-arm64.img + if [ ! -f "/tmp/${release}-server-cloudimg-${YARD_IMG_ARCH}.img" ]; then + tar zxvf ${release}-server-cloudimg-${YARD_IMG_ARCH}.tar.gz ${release}-server-cloudimg-${YARD_IMG_ARCH}.img fi - mkdir -p /mnt/vivid - mount /tmp/vivid-server-cloudimg-arm64.img /mnt/vivid - cp -r /mnt/vivid/lib/modules/$(echo $VIVID_KERNEL_VERSION | cut -d'-' -f3,4,5) /tmp/vivid-modules - umount /mnt/vivid - rm /tmp/vivid-server-cloudimg-arm64.img + mkdir -p /mnt/${release} + mount /tmp/${release}-server-cloudimg-${YARD_IMG_ARCH}.img /mnt/${release} + cp -r /mnt/${release}/lib/modules/$(echo $CLOUD_KERNEL_VERSION) /tmp/${release}-modules + umount /mnt/${release} + rm /tmp/${release}-server-cloudimg-${YARD_IMG_ARCH}.img cd $workspace fi qemu-img convert $filename $raw_imgfile @@ -96,27 +104,32 @@ download() { # mount image setup() { # qemu-img resize $raw_imgfile +5GB - if [ $YARD_IMG_ARCH = "arm64" ]; then - echo -e "d\nn\np\n1\n\n\nw" | fdisk $raw_imgfile + if [ "${YARD_IMG_ARCH}" = "arm64" ]; then + echo -e "d\nn\np\n1\n\n\nw" | parted -l $raw_imgfile fi mkdir -p $mountdir - loopdevice=$(kpartx -l $raw_imgfile | head -1 | cut -f1 -d ' ') + #kpartx fails with image paths longer than 63 characters + #try shortest relative path to image as temporary workaround + cd ${workspace} + loopdevice=$(kpartx -l $raw_imgfile_basename | head -1 | cut -f1 -d ' ') + + kpartx -av $raw_imgfile_basename + cd - - kpartx -av $raw_imgfile - if [ $YARD_IMG_ARCH = "arm64" ]; then + if [[ "${YARD_IMG_ARCH}" = "arm64" && "$release" = "vivid" ]]; then e2fsck -p -f /dev/mapper/$loopdevice resize2fs /dev/mapper/$loopdevice fi # for trouble shooting sleep 2 dmsetup ls - fdisk -l /dev/${loopdevice:0:5} || true + parted -l /dev/${loopdevice:0:5} || true mount /dev/mapper/$loopdevice $mountdir mount -t proc none $mountdir/proc - if [ $YARD_IMG_ARCH = "arm64" ]; then - cp -r /tmp/vivid-modules/$(echo $VIVID_KERNEL_VERSION | cut -d'-' -f3,4,5) "$mountdir/lib/modules" + if [[ "${YARD_IMG_ARCH}" = "arm64" && "$release" = "vivid" ]]; then + cp -r /tmp/${release}-modules/$(echo $CLOUD_KERNEL_VERSION) "$mountdir/lib/modules" cp $(which "qemu-aarch64-static") "$mountdir/usr/bin" fi cp $cmd $mountdir/$(basename $cmd) @@ -151,9 +164,9 @@ cleanup() { # designed to be idempotent mount | grep $mountdir/proc && umount $mountdir/proc mount | grep $mountdir && umount $mountdir - mount | grep "/mnt/vivid" && umount "/mnt/vivid" + mount | grep "/mnt/${release}" && umount "/mnt/${release}" - if [ -f $raw_imgfile ]; then + if [ -f "${raw_imgfile}" ]; then #kpartx -dv $raw_imgfile sometimes failed, we should checked it agein. #if [ -z "$(kpartx -l $raw_imgfile | grep 'loop deleted')" ]; then # kpartx -dv $raw_imgfile -- cgit 1.2.3-korg