1
1
package main
2
2
3
3
import (
4
+ "bytes"
4
5
"fmt"
5
6
"os"
6
7
"os/exec"
@@ -36,6 +37,16 @@ func runCmd(name string, flags []string, args ...string) error {
36
37
return cmd .Run ()
37
38
}
38
39
40
+ func shell (name string , flags []string , args ... string ) (string , error ) {
41
+ cmd := exec .Command (name , append (flags , args ... )... )
42
+ out , err := cmd .Output ()
43
+ if err != nil {
44
+ return "" , err
45
+ }
46
+ out = bytes .TrimSuffix (out , []byte {'\n' })
47
+ return string (out ), nil
48
+ }
49
+
39
50
func guestInstallAction (cmd * cobra.Command , args []string ) error {
40
51
rsync , err := cmd .Flags ().GetBool ("rsync" )
41
52
if err != nil {
@@ -79,18 +90,23 @@ func guestInstallAction(cmd *cobra.Command, args []string) error {
79
90
if err != nil {
80
91
return err
81
92
}
82
- tmp := "/tmp/lima-guestagent"
93
+ tmpname := "lima-guestagent"
94
+ tmp , err := shell (sshExe , sshFlags , hostname , "mktemp" , "-t" , "lima-guestagent.XXXXXX" )
95
+ if err != nil {
96
+ return err
97
+ }
83
98
bin := prefix + "/bin/lima-guestagent"
84
- logrus .Infof ("Copying %q to %s" , guestAgentBinary , hostname )
99
+ logrus .Infof ("Copying %q to %s:%s " , guestAgentBinary , inst . Name , tmpname )
85
100
scpArgs := []string {guestAgentBinary , hostname + ":" + tmp }
86
101
if err := runCmd (scpExe , scpFlags , scpArgs ... ); err != nil {
87
102
return nil
88
103
}
89
- logrus .Infof ("Installing %s to %s" , tmp , bin )
104
+ logrus .Infof ("Installing %s to %s" , tmpname , bin )
90
105
sshArgs := []string {hostname , "sudo" , "install" , "-m" , "755" , tmp , bin }
91
106
if err := runCmd (sshExe , sshFlags , sshArgs ... ); err != nil {
92
107
return nil
93
108
}
109
+ _ , _ = shell (sshExe , sshFlags , hostname , "rm" , tmp )
94
110
95
111
// nerdctl-full.tgz
96
112
nerdctlFilename := cacheutil .NerdctlArchive (y )
@@ -99,17 +115,22 @@ func guestInstallAction(cmd *cobra.Command, args []string) error {
99
115
if err != nil {
100
116
return err
101
117
}
102
- tmp := "/tmp/nerdctl-full.tgz"
103
- logrus .Infof ("Copying %q to %s" , nerdctlFilename , hostname )
118
+ tmpname := "nerdctl-full.tgz"
119
+ tmp , err := shell (sshExe , sshFlags , hostname , "mktemp" , "-t" , "nerdctl-full.XXXXXX.tgz" )
120
+ if err != nil {
121
+ return err
122
+ }
123
+ logrus .Infof ("Copying %q to %s:%s" , nerdctlFilename , inst .Name , tmpname )
104
124
scpArgs := []string {nerdctlArchive , hostname + ":" + tmp }
105
125
if err := runCmd (scpExe , scpFlags , scpArgs ... ); err != nil {
106
126
return nil
107
127
}
108
- logrus .Infof ("Installing %s in %s" , tmp , prefix )
128
+ logrus .Infof ("Installing %s in %s" , tmpname , prefix )
109
129
sshArgs := []string {hostname , "sudo" , "tar" , "Cxzf" , prefix , tmp }
110
130
if err := runCmd (sshExe , sshFlags , sshArgs ... ); err != nil {
111
131
return nil
112
132
}
133
+ _ , _ = shell (sshExe , sshFlags , hostname , "rm" , tmp )
113
134
}
114
135
115
136
return nil
0 commit comments