[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH OSSTEST 03/15] Introduce mg-pxe-loader-update
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 <ian.campbell@xxxxxxxxxx> --- Osstest.pm | 3 ++ README | 4 ++- mg-pxe-loader-update | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++ production-config | 4 +++ 4 files changed, 99 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 <http://www.gnu.org/licenses/>. + + +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 <<EOF +set stage1=yes +configfile $grubcfg +EOF +for arch in $archs ; do + case $arch in + amd64) grubdeb=grub-efi-amd64-bin; platform=x86_64-efi;; + i386) grubdeb=grub-efi-ia32-bin; platform=i386-efi;; + arm64) grubdeb=grub-efi-arm64-bin; platform=arm64-efi;; + *) echo "No grub on $arch" >&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 3a0b768..344d7dd 100644 --- a/production-config +++ b/production-config @@ -85,8 +85,12 @@ TftpPxeTemplates %name%/pxelinux.cfg TftpPxeTemplatesReal pxelinux.cfg/%ipaddrhex% TftpPxeGroup osstest +# Update with /mg-debian-installer-update(-all) TftpDiVersion 2015-01-10 +# Update with /mg-pxe-loader-update +TftpGrubVersion XXXX-XX-XX + XenUsePath /usr/groups/xencore/systems/bin/xenuse XenUseUser osstest -- 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |