@@ -5,8 +5,11 @@ package main
55
66import (
77 "bytes"
8- "fmt "
8+ "compress/gzip "
99 "context"
10+ "errors"
11+ "fmt"
12+ "io"
1013 "os"
1114 "os/exec"
1215 "path/filepath"
@@ -82,13 +85,41 @@ func guestInstallAction(cmd *cobra.Command, args []string) error {
8285 if err != nil {
8386 return err
8487 }
88+ guestAgentFilename := filepath .Base (guestAgentBinary )
89+ if _ , err := os .Stat (guestAgentBinary ); err != nil {
90+ if ! errors .Is (err , os .ErrNotExist ) {
91+ return err
92+ }
93+ compressedGuestAgent , err := os .Open (guestAgentBinary + ".gz" )
94+ if err != nil {
95+ return err
96+ }
97+ defer compressedGuestAgent .Close ()
98+ tmpGuestAgent , err := os .CreateTemp ("" , "lima-guestagent-" )
99+ if err != nil {
100+ return err
101+ }
102+ logrus .Debugf ("Decompressing %s.gz" , guestAgentBinary )
103+ guestAgent , err := gzip .NewReader (compressedGuestAgent )
104+ if err != nil {
105+ return err
106+ }
107+ defer guestAgent .Close ()
108+ _ , err = io .Copy (tmpGuestAgent , guestAgent )
109+ if err != nil {
110+ return err
111+ }
112+ tmpGuestAgent .Close ()
113+ guestAgentBinary = tmpGuestAgent .Name ()
114+ defer os .RemoveAll (guestAgentBinary )
115+ }
85116 tmpname := "lima-guestagent"
86117 tmp , err := shell (ctx , sshExe , sshFlags , hostname , "mktemp" , "-t" , "lima-guestagent.XXXXXX" )
87118 if err != nil {
88119 return err
89120 }
90121 bin := prefix + "/bin/lima-guestagent"
91- logrus .Infof ("Copying %q to %s:%s" , guestAgentBinary , inst .Name , tmpname )
122+ logrus .Infof ("Copying %q to %s:%s" , guestAgentFilename , inst .Name , tmpname )
92123 scpArgs := []string {guestAgentBinary , hostname + ":" + tmp }
93124 if err := runCmd (ctx , scpExe , scpFlags , scpArgs ... ); err != nil {
94125 return nil
0 commit comments