12 // 5 alphanumeric chars. Must be either xx*, yy*, zz*, or
16 // Hostnames or IP addresses of control hosts. Use at least 3
17 // in production. System functions only when a majority are
26 ArvadosAptRepo aptRepoConfig
29 type portsConfig struct {
43 type webguiConfig struct {
44 // addr:port to serve web-based setup/monitoring
49 type aptRepoConfig struct {
55 func (c *Config) Boot(ctx context.Context) error {
56 for _, path := range []string{c.DataDir, c.UsrDir, c.UsrDir + "/bin"} {
57 if fi, err := os.Stat(path); err != nil {
58 err = os.MkdirAll(path, 0755)
62 } else if !fi.IsDir() {
63 return fmt.Errorf("%s: is not a directory", path)
69 func DefaultConfig() *Config {
70 var repoConf aptRepoConfig
71 if rel, err := ioutil.ReadFile("/etc/os-release"); err == nil {
73 for _, try := range []string{"jessie", "precise", "xenial"} {
74 if !strings.Contains(rel, try) {
77 repoConf = aptRepoConfig{
79 URL: "http://apt.arvados.org/",
87 ArvadosAptRepo: repoConf,
88 ControlHosts: []string{"127.0.0.1"},
102 DataDir: "/var/lib/arvados",
103 UsrDir: "/usr/local/arvados",
104 RunitSvDir: "/etc/sv",
105 WebGUI: webguiConfig{
106 Listen: "127.0.0.1:18000",