Merge pull request #2301 from rn/base-ovmf

Various OVMF related fixes
This commit is contained in:
Justin Cormack 2017-07-27 10:25:24 +01:00 committed by GitHub
commit bafeac62ec
5 changed files with 23 additions and 25 deletions

View File

@ -18,7 +18,10 @@ import (
) )
// QemuImg is the version of qemu container // QemuImg is the version of qemu container
const QemuImg = "linuxkit/qemu:bc5e096d3b440509954aa9341db3ff4d3d615344" const (
QemuImg = "linuxkit/qemu:8c07b24790ac5162dfc129791f8afeace159ca20"
defaultFWPath = "/usr/share/ovmf/bios.bin"
)
// QemuConfig contains the config for Qemu // QemuConfig contains the config for Qemu
type QemuConfig struct { type QemuConfig struct {
@ -114,7 +117,8 @@ func runQemu(args []string) {
data := flags.String("data", "", "Metadata to pass to VM (either a path to a file or a string)") data := flags.String("data", "", "Metadata to pass to VM (either a path to a file or a string)")
// Paths and settings for UEFI firware // Paths and settings for UEFI firware
fw := flags.String("fw", "/usr/share/ovmf/bios.bin", "Path to OVMF firmware for UEFI boot") // Note, we do not use defaultFWPath here as we have a special case for containerised execution
fw := flags.String("fw", "", "Path to OVMF firmware for UEFI boot")
// VM configuration // VM configuration
enableKVM := flags.Bool("kvm", haveKVM(), "Enable KVM acceleration") enableKVM := flags.Bool("kvm", haveKVM(), "Enable KVM acceleration")
@ -326,6 +330,9 @@ func runQemuLocal(config QemuConfig) error {
// Check for OVMF firmware before running // Check for OVMF firmware before running
if config.UEFI { if config.UEFI {
if config.FWPath == "" {
config.FWPath = defaultFWPath
}
if _, err := os.Stat(config.FWPath); err != nil { if _, err := os.Stat(config.FWPath); err != nil {
if os.IsNotExist(err) { if os.IsNotExist(err) {
return fmt.Errorf("File [%s] does not exist, please ensure OVMF is installed", config.FWPath) return fmt.Errorf("File [%s] does not exist, please ensure OVMF is installed", config.FWPath)
@ -375,11 +382,16 @@ func runQemuContainer(config QemuConfig) error {
var args []string var args []string
config, args = buildQemuCmdline(config) config, args = buildQemuCmdline(config)
// if user specify the "-fw" parameter, this should override the default in container context, // If we are running in a container and if the the user
// with "-v" option, we will have the chance to assign an external FW binary to the containerized qemu // does not specify the "-fw" parameter, we default to using the
// instead of the fixed FW bin instealled by the build process of the image. // FW image in the container. Otherwise we bind mount the FW image
// into the container.
if config.UEFI { if config.UEFI {
if config.FWPath != "" {
binds = append(binds, "-v", fmt.Sprintf("%[1]s:%[1]s", config.FWPath)) binds = append(binds, "-v", fmt.Sprintf("%[1]s:%[1]s", config.FWPath))
} else {
config.FWPath = defaultFWPath
}
} }
dockerArgs := append([]string{"run", "--interactive", "--rm", "-w", cwd}, binds...) dockerArgs := append([]string{"run", "--interactive", "--rm", "-w", cwd}, binds...)

View File

@ -29,12 +29,6 @@ RUN apk index --rewrite-arch $(uname -m) -o /mirror/$(uname -m)/APKINDEX.unsigne
RUN cp /mirror/$(uname -m)/APKINDEX.unsigned.tar.gz /mirror/$(uname -m)/APKINDEX.tar.gz RUN cp /mirror/$(uname -m)/APKINDEX.unsigned.tar.gz /mirror/$(uname -m)/APKINDEX.tar.gz
RUN abuild-sign /mirror/$(uname -m)/APKINDEX.tar.gz RUN abuild-sign /mirror/$(uname -m)/APKINDEX.tar.gz
# fetch OVMF for qemu EFI boot (this is not added as a package)
RUN mkdir -p /usr/share/ovmf && \
if [ $(uname -m) = x86_64 ]; then \
apk add -X http://dl-cdn.alpinelinux.org/alpine/edge/community ovmf; \
fi
# set this as our repo but keep a copy of the upstream for downstream use # set this as our repo but keep a copy of the upstream for downstream use
RUN mv /etc/apk/repositories /etc/apk/repositories.upstream && echo "/mirror" > /etc/apk/repositories && apk update RUN mv /etc/apk/repositories /etc/apk/repositories.upstream && echo "/mirror" > /etc/apk/repositories && apk update
@ -53,7 +47,6 @@ COPY --from=mirror /etc/apk/repositories.upstream /etc/apk/repositories.upstream
COPY --from=mirror /etc/apk/keys /etc/apk/keys/ COPY --from=mirror /etc/apk/keys /etc/apk/keys/
COPY --from=mirror /mirror /mirror/ COPY --from=mirror /mirror /mirror/
COPY --from=mirror /go/bin /go/bin/ COPY --from=mirror /go/bin /go/bin/
COPY --from=mirror /usr/share/ovmf/ /usr/share/ovmf/
COPY --from=mirror /Dockerfile /Dockerfile COPY --from=mirror /Dockerfile /Dockerfile
RUN apk update && apk upgrade -a RUN apk update && apk upgrade -a

View File

@ -1,2 +1,3 @@
open-vm-tools open-vm-tools
ovmf
syslinux syslinux

View File

@ -1,4 +1,4 @@
# linuxkit/alpine:34af9cb1990debd17fae6d4198c62ce3910d9908 # linuxkit/alpine:77c8dfc5860012c869a19d7a2c68e701469692c8
# automatically generated list of installed packages # automatically generated list of installed packages
abuild-3.0.0_rc2-r8 abuild-3.0.0_rc2-r8
alpine-baselayout-3.0.4-r0 alpine-baselayout-3.0.4-r0
@ -182,6 +182,7 @@ openssh-keygen-7.5_p1-r1
openssh-server-7.5_p1-r1 openssh-server-7.5_p1-r1
openssl-dev-1.0.2k-r0 openssl-dev-1.0.2k-r0
opus-1.1.4-r0 opus-1.1.4-r0
ovmf-0.0.20161115-r1
p11-kit-0.23.2-r1 p11-kit-0.23.2-r1
patch-2.7.5-r1 patch-2.7.5-r1
pax-utils-1.2.2-r0 pax-utils-1.2.2-r0

View File

@ -1,4 +1,4 @@
FROM linuxkit/alpine:9bcf61f605ef0ce36cc94d59b8eac307862de6e1 AS mirror FROM linuxkit/alpine:77c8dfc5860012c869a19d7a2c68e701469692c8 AS mirror
RUN mkdir -p /out/etc/apk && cp -r /etc/apk/* /out/etc/apk/ RUN mkdir -p /out/etc/apk && cp -r /etc/apk/* /out/etc/apk/
RUN apk add --no-cache --initdb -p /out \ RUN apk add --no-cache --initdb -p /out \
alpine-baselayout \ alpine-baselayout \
@ -7,21 +7,12 @@ RUN apk add --no-cache --initdb -p /out \
qemu-img && \ qemu-img && \
case $(uname -m) in \ case $(uname -m) in \
x86_64) \ x86_64) \
apk add --no-cache --initdb -p /out qemu-system-x86_64; \ apk add --no-cache --initdb -p /out qemu-system-x86_64 ovmf; \
;; \ ;; \
aarch64) \ aarch64) \
apk add --no-cache --initdb -p /out qemu-system-aarch64; \ apk add --no-cache --initdb -p /out qemu-system-aarch64; \
;; \ ;; \
esac esac
RUN case $(uname -m) in \
x86_64) \
mkdir -p /out/usr/share/ovmf \
&& cp /usr/share/ovmf/bios.bin /out/usr/share/ovmf/bios.bin; \
;; \
aarch64) \
;; \
esac
RUN rm -rf /out/etc/apk /out/lib/apk /out/var/cache RUN rm -rf /out/etc/apk /out/lib/apk /out/var/cache
FROM scratch FROM scratch