@@ -26,6 +26,10 @@ func (d *dockerInstallerInUbuntu) Available() (ok bool) {
2626
2727// Install installs the Docker 
2828func  (d  * dockerInstallerInUbuntu ) Install () (err  error ) {
29+ 	if  d .isDebian () {
30+ 		return  d .installOnDebian ()
31+ 	}
32+ 
2933	if  err  =  d .Execer .RunCommand ("apt-get" , "update" , "-y" ); err  !=  nil  {
3034		return 
3135	}
@@ -79,6 +83,63 @@ func (d *dockerInstallerInUbuntu) Install() (err error) {
7983	return 
8084}
8185
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+ 
82143// Uninstall uninstalls the Docker 
83144func  (d  * dockerInstallerInUbuntu ) Uninstall () (err  error ) {
84145	if  err  =  d .Execer .RunCommand ("apt-get" , "remove" , "-y" ,
0 commit comments