Skip to content

Commit 451a4ff

Browse files
authored
support to install docker on debian (#341)
Co-authored-by: rick <[email protected]>
1 parent e423f9a commit 451a4ff

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

pkg/os/apt/docker.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ func (d *dockerInstallerInUbuntu) Available() (ok bool) {
2626

2727
// Install installs the Docker
2828
func (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
83144
func (d *dockerInstallerInUbuntu) Uninstall() (err error) {
84145
if err = d.Execer.RunCommand("apt-get", "remove", "-y",

0 commit comments

Comments
 (0)