github.com/rminnich/u-root@v7.0.0+incompatible/tools/stconfig/stconfig.go (about) 1 // Copyright 2018 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 package main 6 7 // https://xkcd.com/927/ 8 9 // stconfig is a configuration tool to create and manage artifacts for 10 // System Transparency Boot. Artifacts are ment to be uploaded to a 11 // remote provisioning server. 12 13 import ( 14 "log" 15 "os" 16 17 kingpin "gopkg.in/alecthomas/kingpin.v2" 18 ) 19 20 const ( 21 // Author is the author 22 Author = "Philipp Deppenwiese, Jens Drenhaus" 23 // HelpText is the command line help 24 HelpText = "stconfig can be used for managing System Transparency boot configurations" 25 ) 26 27 var goversion string 28 29 var ( 30 create = kingpin.Command("create", "Create a boot ball from stconfig.json") 31 sign = kingpin.Command("sign", "Sign the binary inside the provided stboot.ball and add the signatures and certificates") 32 unpack = kingpin.Command("unpack", "Unpack boot ball file into directory") 33 34 createConfigFile = create.Arg("config", "Path to the manifest file in JSON format").Required().String() 35 36 signInFile = sign.Arg("bootball", "Archive created by 'stconfig create'").Required().String() 37 signPrivKeyFile = sign.Arg("privkey", "Private key for signing").Required().String() 38 signCertFile = sign.Arg("certificate", "Certificate to veryfy the signature").Required().String() 39 40 unpackInFile = unpack.Arg("bootball", "Archive containing the boot files").Required().String() 41 ) 42 43 func main() { 44 kingpin.UsageTemplate(kingpin.CompactUsageTemplate).Version(goversion).Author(Author) 45 kingpin.CommandLine.Help = HelpText 46 47 switch kingpin.Parse() { 48 case create.FullCommand(): 49 if _, err := os.Stat(*createConfigFile); os.IsNotExist(err) { 50 log.Fatalf("%s does not exist: %v", *createConfigFile, err) 51 } 52 if err := packBootBall(*createConfigFile); err != nil { 53 log.Fatalln(err.Error()) 54 } 55 case sign.FullCommand(): 56 if _, err := os.Stat(*signInFile); os.IsNotExist(err) { 57 log.Fatalf("%s does not exist: %v", *signInFile, err) 58 } 59 if _, err := os.Stat(*signPrivKeyFile); os.IsNotExist(err) { 60 log.Fatalf("%s does not exist: %v", *signPrivKeyFile, err) 61 } 62 if _, err := os.Stat(*signCertFile); os.IsNotExist(err) { 63 log.Fatalf("%s does not exist: %v", *signCertFile, err) 64 } 65 if err := addSignatureToBootBall(*signInFile, *signPrivKeyFile, *signCertFile); err != nil { 66 log.Fatalln(err.Error()) 67 } 68 case unpack.FullCommand(): 69 if _, err := os.Stat(*unpackInFile); os.IsNotExist(err) { 70 log.Fatalf("%s does not exist: %v", *signInFile, err) 71 } 72 if err := unpackBootBall(*unpackInFile); err != nil { 73 log.Fatalln(err.Error()) 74 } 75 default: 76 log.Fatal("Command not found") 77 } 78 }