@@ -26,6 +26,10 @@ func (d *dockerInstallerInUbuntu) Available() (ok bool) {
26
26
27
27
// Install installs the Docker
28
28
func (d * dockerInstallerInUbuntu ) Install () (err error ) {
29
+ if d .isDebian () {
30
+ return d .installOnDebian ()
31
+ }
32
+
29
33
if err = d .Execer .RunCommand ("apt-get" , "update" , "-y" ); err != nil {
30
34
return
31
35
}
@@ -79,6 +83,63 @@ func (d *dockerInstallerInUbuntu) Install() (err error) {
79
83
return
80
84
}
81
85
86
+ func (d * dockerInstallerInUbuntu ) isDebian () bool {
87
+ output , err := d .Execer .RunCommandAndReturn ("lsb_release" , "" , "-d" )
88
+ if err == nil {
89
+ return strings .Contains (output , "Debian" )
90
+ }
91
+ return false
92
+ }
93
+
94
+ // see also https://docs.docker.com/engine/install/debian/
95
+ func (d * dockerInstallerInUbuntu ) installOnDebian () (err error ) {
96
+ if err = d .Execer .RunCommand ("apt-get" , "update" , "-y" ); err != nil {
97
+ return
98
+ }
99
+
100
+ if err = d .Execer .RunCommand ("apt-get" , "install" , "-y" ,
101
+ "ca-certificates" , "curl" , "gnupg" , "lsb-release" ); err != nil {
102
+ return
103
+ }
104
+
105
+ const dockerGPG = "docker.gpg"
106
+ defer func () {
107
+ _ = d .Execer .RunCommand ("rm" , "-rf" , dockerGPG )
108
+ }()
109
+ if err = d .Execer .RunCommand ("curl" , "-fsSL" ,
110
+ "https://download.docker.com/linux/debian/gpg" , "-o" , dockerGPG ); err == nil {
111
+ if err = d .Execer .RunCommand ("gpg" ,
112
+ "--dearmor" ,
113
+ "-o" ,
114
+ "/etc/apt/keyrings/docker.gpg" , dockerGPG ); err != nil {
115
+ err = fmt .Errorf ("failed to install docker-archive-keyring.gpg, error: %v" , err )
116
+ return
117
+ }
118
+ } else {
119
+ err = fmt .Errorf ("failed to download docker gpg file, error: %v" , err )
120
+ return
121
+ }
122
+
123
+ var release string
124
+ if release , err = d .Execer .RunCommandAndReturn ("lsb_release" , "" , "-cs" ); err == nil {
125
+ item := fmt .Sprintf ("deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian %s stable" ,
126
+ strings .TrimSpace (release ))
127
+ if err = os .WriteFile ("/etc/apt/sources.list.d/docker.list" , []byte (item ), 0622 ); err != nil {
128
+ err = fmt .Errorf ("failed to write docker.list, error: %v" , err )
129
+ return
130
+ }
131
+ } else {
132
+ err = fmt .Errorf ("failed to run command lsb_release -cs, error: %v" , err )
133
+ return
134
+ }
135
+
136
+ if err = d .Execer .RunCommand ("apt-get" , "update" , "-y" ); err != nil {
137
+ return
138
+ }
139
+ err = d .Execer .RunCommand ("apt-get" , "install" , "docker-ce" , "docker-ce-cli" , "containerd.io" , "-y" )
140
+ return
141
+ }
142
+
82
143
// Uninstall uninstalls the Docker
83
144
func (d * dockerInstallerInUbuntu ) Uninstall () (err error ) {
84
145
if err = d .Execer .RunCommand ("apt-get" , "remove" , "-y" ,
0 commit comments