From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Campbell Subject: [PATCH OSSTEST v2 01/19] Introduce mg-pxe-loader-update Date: Thu, 18 Jun 2015 17:24:52 +0100 Message-ID: <1434644710-28881-1-git-send-email-ian.campbell@citrix.com> References: <1434644687.28264.53.camel@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1434644687.28264.53.camel@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: ian.jackson@eu.citrix.com Cc: Ian Campbell , xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org The story for PXE booting via UEFI (at least on arm64) is not so straightforward as with pxelinux on x86. There seems to no good bootloader to launch via UEFI+pxe, in fact all I could find was grub (syslinux, and by extension pxelinux.efi, is x86 only). Add mg-pxe-loader-update modelled on mg-debian-installer-update which will download the necessary grub binaries and produce a grub image which can be used to pxe boot. grub lacks the convenient ability to search for config file based on (substrings of) the MAC or IP address. So we arrange for the grub.cfg in TftpGrubBase to chain load another config file from TftpTmpDir/'$net_default_mac' where $net_default_mac is a grub variable which is substituted at boot time. Actually using this requires that bootp/dhcp provide a next-file so UEFI knows what to boot (usually this would be pxelinux.0 which we can't use here). Locally we have configured this as $name/pxe.img, so we can use different loaders. Signed-off-by: Ian Campbell --- Osstest.pm | 3 ++ README | 4 ++- mg-pxe-loader-update | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++ production-config | 5 +++ 4 files changed, 100 insertions(+), 1 deletion(-) create mode 100755 mg-pxe-loader-update diff --git a/Osstest.pm b/Osstest.pm index e8bd77b..e668b3c 100644 --- a/Osstest.pm +++ b/Osstest.pm @@ -199,6 +199,9 @@ sub readglobalconfig () { $c{TftpDiBase} ||= "$c{TftpPlayDir}debian-installer"; $c{TftpDiVersion} ||= 'current'; + $c{TftpGrubBase} ||= "$c{TftpPlayDir}grub"; + $c{TftpGrubVersion} ||= 'current'; + $c{WebspaceFile} ||= "$ENV{'HOME'}/public_html/"; $c{WebspaceUrl} ||= "http://$myfqdn/~$whoami/"; $c{WebspaceCommon} ||= 'osstest/'; diff --git a/README b/README index 44e2989..503d15d 100644 --- a/README +++ b/README @@ -206,7 +206,9 @@ To run osstest in standalone mode: netcat chiark-utils-bin - - Optional: ipmitool + - Optional: + ipmitool -- for hosts which use IPMI for power control + grub-common -- for mg-pxe-loader-update - Write a config file ~/.xen-osstest/config diff --git a/mg-pxe-loader-update b/mg-pxe-loader-update new file mode 100755 index 0000000..b336fdb --- /dev/null +++ b/mg-pxe-loader-update @@ -0,0 +1,89 @@ +#!/bin/bash +# usage +# ./mg-pxe-loader-update jessie +# +# Requires grub-mkimage (Debian package: grub-common) + +# This is part of "osstest", an automated testing framework for Xen. +# Copyright (C) 2015 Citrix Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + + +set -e + +. cri-getconfig + +suite=$1 + +fail () { echo >&2 "$0: $1"; exit 1; } + +site=http://ftp.debian.org/debian/ +sbase=$site/dists/$suite + +archs="amd64 i386 arm64" + +dstroot=`getconfig TftpPath`/`getconfig TftpGrubBase`/ +date=`date +%Y-%m-%d` +dst=$date + +grubpfx=`getconfig TftpGrubBase`/$date/grub +grubcfg=`getconfig TftpTmpDir`/grub.cfg-'$net_default_mac' + +mkdir -p $dstroot +cd $dstroot +mkdir -p $dst +cd $dst +rm -rf grub +mkdir grub + +cat >grub/grub.cfg <&2; exit 0;; + esac + + pfile=$sbase/main/binary-$arch/Packages.gz + + curl -s $pfile >Packages.gz + + echo >&2 "collecting $grubdeb" + pkgfile=`zcat Packages.gz | grep-dctrl -PX $grubdeb -nsFilename | sort -n -r | head -n1` + rc=$? + set -e + if [ $rc -ne 0 ] || [ x$pkgfile = x ]; then fail "$grubdeb package not found"; fi + curl -s "$site/$pkgfile" >$grubdeb.deb + + dpkg-deb -x $grubdeb.deb x + + mv x/usr/lib/grub/* grub/ + + rm -rf x + + rm Packages.gz + + grub-mkimage -O "$platform" \ + -d ./grub/$platform \ + -o pxegrub-$arch.efi -p "$grubpfx" \ + search configfile normal efinet tftp net +done + +echo $date +echo >&2 "downloaded $dstroot/$date" diff --git a/production-config b/production-config index 47c0c4c..46fedc9 100644 --- a/production-config +++ b/production-config @@ -85,12 +85,17 @@ TftpPxeTemplates %name%/pxelinux.cfg TftpPxeTemplatesReal pxelinux.cfg/%ipaddrhex% TftpPxeGroup osstest +# Update with ./mg-debian-installer-update(-all) TftpDiVersion 2015-01-10 # These should normally be the same. +# Update with ./mg-cpu-microcode-update MicrocodeUpdateAmd64 microcode.x86.2015-06-12.cpio MicrocodeUpdateI386 microcode.x86.2015-06-12.cpio +# Update with ./mg-pxe-loader-update +TftpGrubVersion XXXX-XX-XX + XenUsePath /usr/groups/xencore/systems/bin/xenuse XenUseUser osstest -- 2.1.4