2021-07-13 17:45:09 +00:00
|
|
|
// Copyright (c) 2021 Tailscale Inc & AUTHORS All rights reserved.
|
|
|
|
// Use of this source code is governed by a BSD-style
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
|
|
|
package vms
|
|
|
|
|
2021-07-16 19:25:16 +00:00
|
|
|
import (
|
|
|
|
_ "embed"
|
|
|
|
"log"
|
|
|
|
|
|
|
|
"github.com/tailscale/hujson"
|
|
|
|
)
|
|
|
|
|
|
|
|
// go:generate go run ./gen
|
|
|
|
|
2021-07-13 17:45:09 +00:00
|
|
|
type Distro struct {
|
2021-07-16 19:25:16 +00:00
|
|
|
Name string // amazon-linux
|
|
|
|
URL string // URL to a qcow2 image
|
|
|
|
SHA256Sum string // hex-encoded sha256 sum of contents of URL
|
|
|
|
MemoryMegs int // VM memory in megabytes
|
|
|
|
PackageManager string // yum/apt/dnf/zypper
|
|
|
|
InitSystem string // systemd/openrc
|
2021-07-13 17:45:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (d *Distro) InstallPre() string {
|
2021-07-16 19:25:16 +00:00
|
|
|
switch d.PackageManager {
|
2021-07-13 17:45:09 +00:00
|
|
|
case "yum":
|
|
|
|
return ` - [ yum, update, gnupg2 ]
|
|
|
|
- [ yum, "-y", install, iptables ]`
|
|
|
|
case "zypper":
|
|
|
|
return ` - [ zypper, in, "-y", iptables ]`
|
|
|
|
|
|
|
|
case "dnf":
|
|
|
|
return ` - [ dnf, install, "-y", iptables ]`
|
|
|
|
|
|
|
|
case "apt":
|
|
|
|
return ` - [ apt-get, update ]
|
|
|
|
- [ apt-get, "-y", install, curl, "apt-transport-https", gnupg2 ]`
|
|
|
|
|
|
|
|
case "apk":
|
|
|
|
return ` - [ apk, "-U", add, curl, "ca-certificates", iptables, ip6tables ]
|
|
|
|
- [ modprobe, tun ]`
|
|
|
|
}
|
|
|
|
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
|
2021-07-16 19:25:16 +00:00
|
|
|
//go:embed distros.hujson
|
|
|
|
var distroData string
|
2021-07-13 17:45:09 +00:00
|
|
|
|
2021-07-16 19:25:16 +00:00
|
|
|
var Distros []Distro = func() []Distro {
|
|
|
|
var result []Distro
|
|
|
|
err := hujson.Unmarshal([]byte(distroData), &result)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalf("error decoding distros: %v", err)
|
|
|
|
}
|
2021-07-13 17:45:09 +00:00
|
|
|
|
2021-07-16 19:25:16 +00:00
|
|
|
return result
|
|
|
|
}()
|