X Tutup
Skip to content

Commit 01bf2ea

Browse files
committed
use yum repos for redhat like distros
Signed-off-by: Evan Hazlett <ejhazlett@gmail.com>
1 parent ad6d8d4 commit 01bf2ea

File tree

3 files changed

+63
-38
lines changed

3 files changed

+63
-38
lines changed

libmachine/provision/centos.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,6 @@ import (
44
"github.com/docker/machine/drivers"
55
)
66

7-
const (
8-
// TODO: eventually the RPM install process will be integrated
9-
// into the get.docker.com install script; for now
10-
// we install via vendored RPMs
11-
dockerCentosRPMPath = "https://get.docker.com/rpm/1.7.0/centos-7/RPMS/x86_64/docker-engine-1.7.0-1.el7.centos.x86_64.rpm"
12-
)
13-
147
func init() {
158
Register("Centos", &RegisteredProvisioner{
169
New: NewCentosProvisioner,
@@ -28,7 +21,6 @@ func NewCentosProvisioner(d drivers.Driver) Provisioner {
2821
p := &CentosProvisioner{
2922
RedHatProvisioner{
3023
GenericProvisioner: g,
31-
DockerRPMPath: dockerCentosRPMPath,
3224
},
3325
}
3426
return p

libmachine/provision/fedora.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,6 @@ import (
44
"github.com/docker/machine/drivers"
55
)
66

7-
const (
8-
// TODO: eventually the RPM install process will be integrated
9-
// into the get.docker.com install script; for now
10-
// we install via vendored RPMs
11-
dockerFedoraRPMPath = "https://get.docker.com/rpm/1.7.0/fedora-21/RPMS/x86_64/docker-engine-1.7.0-1.fc21.x86_64.rpm"
12-
)
13-
147
func init() {
158
Register("Fedora", &RegisteredProvisioner{
169
New: NewFedoraProvisioner,
@@ -28,7 +21,6 @@ func NewFedoraProvisioner(d drivers.Driver) Provisioner {
2821
p := &FedoraProvisioner{
2922
RedHatProvisioner{
3023
GenericProvisioner: g,
31-
DockerRPMPath: dockerFedoraRPMPath,
3224
},
3325
}
3426
return p

libmachine/provision/redhat.go

Lines changed: 63 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package provision
22

33
import (
44
"bytes"
5+
"errors"
56
"fmt"
67
"text/template"
78

@@ -15,13 +16,31 @@ import (
1516
"github.com/docker/machine/utils"
1617
)
1718

18-
const (
19-
// TODO: eventually the RPM install process will be integrated
20-
// into the get.docker.com install script; for now
21-
// we install via vendored RPMs
22-
dockerRHELRPMPath = "https://get.docker.com/rpm/1.7.0/centos-7/RPMS/x86_64/docker-engine-1.7.0-1.el7.centos.x86_64.rpm"
19+
var (
20+
ErrUnknownYumOsRelease = errors.New("unknown OS for Yum repository")
21+
22+
packageListTemplate = `[docker]
23+
name=Docker Stable Repository
24+
baseurl=https://yum.dockerproject.org/repo/main/{{.OsRelease}}/{{.OsReleaseVersion}}
25+
priority=1
26+
enabled=1
27+
gpgkey=https://yum.dockerproject.org/gpg
28+
`
29+
engineConfigTemplate = `[Service]
30+
ExecStart=/usr/bin/docker -d -H tcp://0.0.0.0:{{.DockerPort}} -H unix:///var/run/docker.sock --storage-driver {{.EngineOptions.StorageDriver}} --tlsverify --tlscacert {{.AuthOptions.CaCertRemotePath}} --tlscert {{.AuthOptions.ServerCertRemotePath}} --tlskey {{.AuthOptions.ServerKeyRemotePath}} {{ range .EngineOptions.Labels }}--label {{.}} {{ end }}{{ range .EngineOptions.InsecureRegistry }}--insecure-registry {{.}} {{ end }}{{ range .EngineOptions.RegistryMirror }}--registry-mirror {{.}} {{ end }}{{ range .EngineOptions.ArbitraryFlags }}--{{.}} {{ end }}
31+
MountFlags=slave
32+
LimitNOFILE=1048576
33+
LimitNPROC=1048576
34+
LimitCORE=infinity
35+
Environment={{range .EngineOptions.Env}}{{ printf "%q" . }} {{end}}
36+
`
2337
)
2438

39+
type PackageListInfo struct {
40+
OsRelease string
41+
OsReleaseVersion string
42+
}
43+
2544
func init() {
2645
Register("RedHat", &RegisteredProvisioner{
2746
New: NewRedHatProvisioner,
@@ -39,13 +58,11 @@ func NewRedHatProvisioner(d drivers.Driver) Provisioner {
3958
},
4059
Driver: d,
4160
},
42-
DockerRPMPath: dockerRHELRPMPath,
4361
}
4462
}
4563

4664
type RedHatProvisioner struct {
4765
GenericProvisioner
48-
DockerRPMPath string
4966
}
5067

5168
func (provisioner *RedHatProvisioner) SSHCommand(args string) (string, error) {
@@ -155,7 +172,11 @@ func installDocker(provisioner *RedHatProvisioner) error {
155172
func (provisioner *RedHatProvisioner) installOfficialDocker() error {
156173
log.Debug("installing docker")
157174

158-
if _, err := provisioner.SSHCommand(fmt.Sprintf("sudo yum install -y --nogpgcheck %s", provisioner.DockerRPMPath)); err != nil {
175+
if err := provisioner.ConfigurePackageList(); err != nil {
176+
return err
177+
}
178+
179+
if _, err := provisioner.SSHCommand("sudo yum install -y docker-engine"); err != nil {
159180
return err
160181
}
161182

@@ -230,25 +251,12 @@ func (provisioner *RedHatProvisioner) GenerateDockerOptions(dockerPort int) (*Do
230251
configPath = provisioner.DaemonOptionsFile
231252
)
232253

233-
// remove existing
234-
//if _, err := provisioner.SSHCommand(fmt.Sprintf("sudo rm %s", configPath)); err != nil {
235-
// return nil, err
236-
//}
237-
238254
driverNameLabel := fmt.Sprintf("provider=%s", provisioner.Driver.DriverName())
239255
provisioner.EngineOptions.Labels = append(provisioner.EngineOptions.Labels, driverNameLabel)
240256

241257
// systemd / redhat will not load options if they are on newlines
242258
// instead, it just continues with a different set of options; yeah...
243-
engineConfigTmpl := `[Service]
244-
ExecStart=/usr/bin/docker -d -H tcp://0.0.0.0:{{.DockerPort}} -H unix:///var/run/docker.sock --storage-driver {{.EngineOptions.StorageDriver}} --tlsverify --tlscacert {{.AuthOptions.CaCertRemotePath}} --tlscert {{.AuthOptions.ServerCertRemotePath}} --tlskey {{.AuthOptions.ServerKeyRemotePath}} {{ range .EngineOptions.Labels }}--label {{.}} {{ end }}{{ range .EngineOptions.InsecureRegistry }}--insecure-registry {{.}} {{ end }}{{ range .EngineOptions.RegistryMirror }}--registry-mirror {{.}} {{ end }}{{ range .EngineOptions.ArbitraryFlags }}--{{.}} {{ end }}
245-
MountFlags=slave
246-
LimitNOFILE=1048576
247-
LimitNPROC=1048576
248-
LimitCORE=infinity
249-
Environment={{range .EngineOptions.Env}}{{ printf "%q" . }} {{end}}
250-
`
251-
t, err := template.New("engineConfig").Parse(engineConfigTmpl)
259+
t, err := template.New("engineConfig").Parse(engineConfigTemplate)
252260
if err != nil {
253261
return nil, err
254262
}
@@ -268,3 +276,36 @@ Environment={{range .EngineOptions.Env}}{{ printf "%q" . }} {{end}}
268276
EngineOptionsPath: daemonOptsDir,
269277
}, nil
270278
}
279+
280+
func (provisioner *RedHatProvisioner) ConfigurePackageList() error {
281+
packageListInfo := &PackageListInfo{}
282+
switch provisioner.OsReleaseId {
283+
case "rhel", "centos":
284+
// rhel and centos both use the "centos" repo
285+
packageListInfo.OsRelease = "centos"
286+
packageListInfo.OsReleaseVersion = "7"
287+
case "fedora":
288+
packageListInfo.OsRelease = "fedora"
289+
packageListInfo.OsReleaseVersion = "22"
290+
default:
291+
return ErrUnknownYumOsRelease
292+
}
293+
294+
t, err := template.New("packageList").Parse(packageListTemplate)
295+
if err != nil {
296+
return err
297+
}
298+
299+
var buf bytes.Buffer
300+
301+
if err := t.Execute(&buf, packageListInfo); err != nil {
302+
return err
303+
}
304+
305+
packageCmd := fmt.Sprintf("echo \"%s\" | sudo tee /etc/yum.repos.d/docker.repo", buf.String())
306+
if _, err := provisioner.SSHCommand(packageCmd); err != nil {
307+
return err
308+
}
309+
310+
return nil
311+
}

0 commit comments

Comments
 (0)
X Tutup