// 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 import ( _ "embed" "encoding/json" "log" "github.com/tailscale/hujson" ) // go:generate go run ./gen type Distro struct { 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 HostGenerated bool // generated image rather than downloaded } func (d *Distro) InstallPre() string { switch d.PackageManager { case "yum": return ` - [ yum, update, gnupg2 ] - [ yum, "-y", install, iptables ] - [ sh, "-c", "printf '\n\nUseDNS no\n\n' | tee -a /etc/ssh/sshd_config" ] - [ systemctl, restart, "sshd.service" ]` 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 "" } //go:embed distros.hujson var distroData string var Distros []Distro = func() []Distro { var result []Distro b, err := hujson.Standardize([]byte(distroData)) if err != nil { log.Fatalf("error decoding distros: %v", err) } if err := json.Unmarshal(b, &result); err != nil { log.Fatalf("error decoding distros: %v", err) } return result }()