diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2017-06-17 17:06:29 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2017-06-17 17:06:29 +0200 |
| commit | e130d95518bd1be7a1c24438bec60643119e5754 (patch) | |
| tree | e4e739d1a90064156b895a14f089a3d4a7393ea8 /pkg/kernel | |
| parent | de258e6d7ebf13facf7df8e92eb1a9bdf3391808 (diff) | |
vm/gce: accept un-tar-ed image
vm/gce differs from other VM types in that it accepts image
in a weird, GCE-specific format (namely, image named disk.raw
is put into .tar.gz file). This makes it impossible to write
generic code that creates images for any VM types.
Make vm/gce accept just image like e.g. vm/qemu
and handle own specifics internally.
Diffstat (limited to 'pkg/kernel')
| -rw-r--r-- | pkg/kernel/generated.go | 15 | ||||
| -rw-r--r-- | pkg/kernel/kernel.go | 14 |
2 files changed, 10 insertions, 19 deletions
diff --git a/pkg/kernel/generated.go b/pkg/kernel/generated.go index 0e6ba5b89..e9b00b345 100644 --- a/pkg/kernel/generated.go +++ b/pkg/kernel/generated.go @@ -8,17 +8,12 @@ const createImageScript = `#!/bin/bash set -eux if [ ! -e $1/sbin/init ]; then - echo "usage: create-gce-image.sh /dir/with/user/space/system /path/to/bzImage /path/to/vmlinux 'image tag'" + echo "usage: create-gce-image.sh /dir/with/user/space/system /path/to/bzImage" exit 1 fi if [ "$(basename $2)" != "bzImage" ]; then - echo "usage: create-gce-image.sh /dir/with/user/space/system /path/to/bzImage /path/to/vmlinux 'image tag'" - exit 1 -fi - -if [ "$(basename $3)" != "vmlinux" ]; then - echo "usage: create-gce-image.sh /dir/with/user/space/system /path/to/bzImage /path/to/vmlinux 'image tag'" + echo "usage: create-gce-image.sh /dir/with/user/space/system /path/to/bzImage" exit 1 fi @@ -75,10 +70,4 @@ sudo grub-install --boot-directory=disk.mnt/boot --no-floppy /dev/nbd0 sudo umount disk.mnt rm -rf disk.mnt sudo qemu-nbd -d /dev/nbd0 -tar -Szcf disk.tar.gz disk.raw -mkdir -p obj -cp $3 obj/ -echo -n "$4" > tag -tar -czvf image.tar.gz disk.tar.gz key tag obj/vmlinux -rm -rf tag obj ` diff --git a/pkg/kernel/kernel.go b/pkg/kernel/kernel.go index 9e9b4b32d..5992900f7 100644 --- a/pkg/kernel/kernel.go +++ b/pkg/kernel/kernel.go @@ -60,8 +60,8 @@ func Build(dir, compiler, config string, fullConfig bool) error { // CreateImage creates a disk image that is suitable for syzkaller. // Kernel is taken from kernelDir, userspace system is taken from userspaceDir. -// The resulting image is marked with tag and copied to the specified image file. -func CreateImage(kernelDir, userspaceDir, tag, image string) error { +// Produces image and root ssh key in the specified files. +func CreateImage(kernelDir, userspaceDir, image, sshkey string) error { tempDir, err := ioutil.TempDir("", "syz-build") if err != nil { return err @@ -71,12 +71,14 @@ func CreateImage(kernelDir, userspaceDir, tag, image string) error { if err := ioutil.WriteFile(scriptFile, []byte(createImageScript), 0700); err != nil { return fmt.Errorf("failed to write script file: %v", err) } - vmlinux := filepath.Join(kernelDir, "vmlinux") - bzImage := filepath.Join(kernelDir, "arch/x86/boot/bzImage") - if _, err := osutil.RunCmd(time.Hour, tempDir, scriptFile, userspaceDir, bzImage, vmlinux, tag); err != nil { + bzImage := filepath.Join(kernelDir, filepath.FromSlash("arch/x86/boot/bzImage")) + if _, err := osutil.RunCmd(time.Hour, tempDir, scriptFile, userspaceDir, bzImage); err != nil { return fmt.Errorf("image build failed: %v", err) } - if err := os.Rename(filepath.Join(tempDir, "image.tar.gz"), image); err != nil { + if err := os.Rename(filepath.Join(tempDir, "disk.raw"), image); err != nil { + return err + } + if err := os.Rename(filepath.Join(tempDir, "key"), sshkey); err != nil { return err } return nil |
