github.com/system-transparency/u-root@v6.0.1-0.20190919065413-ed07a650de4c+incompatible/cmds/exp/esxiboot/esxiboot.go (about) 1 // Copyright 2019 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // esxiboot executes ESXi kernel over the running kernel. 6 // 7 // Synopsis: 8 // esxiboot [-d --device] [-c --config] [-r --cdrom] 9 // 10 // Description: 11 // Loads and executes ESXi kernel. 12 // 13 // Options: 14 // --config=FILE or -c=FILE: set the ESXi config 15 // --device=FILE or -d=FILE: set an ESXi disk to boot from 16 // --cdrom=FILE or -r=FILE: set an ESXI CDROM to boot from 17 // 18 // --device is required to kexec installed ESXi instance. 19 // You don't need it if you kexec ESXi installer. 20 // 21 // The config file has the following syntax: 22 // 23 // kernel=PATH 24 // kernelopt=OPTS 25 // modules=MOD1 [ARGS] --- MOD2 [ARGS] --- ... 26 // 27 // Lines starting with '#' are ignored. 28 29 package main 30 31 import ( 32 "log" 33 "os" 34 35 flag "github.com/spf13/pflag" 36 37 "github.com/u-root/u-root/pkg/boot" 38 "github.com/u-root/u-root/pkg/esxi" 39 ) 40 41 var ( 42 cfg = flag.StringP("config", "c", "", "ESXi config file") 43 cdrom = flag.StringP("cdrom", "r", "", "ESXi CDROM boot device") 44 diskDev = flag.StringP("device", "d", "", "ESXi disk boot device") 45 ) 46 47 func main() { 48 flag.Parse() 49 if *diskDev == "" && *cfg == "" && *cdrom == "" { 50 log.Printf("Either --config, --device, or --cdrom must be specified") 51 flag.PrintDefaults() 52 os.Exit(1) 53 } 54 55 if len(*diskDev) > 0 { 56 imgs, err := esxi.LoadDisk(*diskDev) 57 if err != nil { 58 log.Fatalf("Failed to load ESXi configuration: %v", err) 59 } 60 61 loaded := false 62 for _, img := range imgs { 63 if err := img.Load(false); err != nil { 64 log.Printf("Failed to load ESXi image (%v) into memory: %v", img, err) 65 } else { 66 // We loaded one, that's it. 67 loaded = true 68 break 69 } 70 } 71 if !loaded { 72 log.Fatalf("Failed to load all ESXi images found.") 73 } 74 } else { 75 var err error 76 var img *boot.MultibootImage 77 if len(*cfg) > 0 { 78 img, err = esxi.LoadConfig(*cfg) 79 } else if len(*cdrom) > 0 { 80 img, err = esxi.LoadCDROM(*cdrom) 81 } 82 if err != nil { 83 log.Fatalf("Failed to load ESXi configuration: %v", err) 84 } 85 if err := img.Load(false); err != nil { 86 log.Fatalf("Failed to load ESXi image (%v) into memory: %v", img, err) 87 } 88 } 89 90 if err := boot.Execute(); err != nil { 91 log.Fatalf("Failed to boot image: %v", err) 92 } 93 }