// setupLocalMongoService returns the cert and key if there was no error. func (env *localEnviron) setupLocalMongoService() ([]byte, []byte, error) { journalDir := filepath.Join(env.config.mongoDir(), "journal") logger.Debugf("create mongo journal dir: %v", journalDir) if err := os.MkdirAll(journalDir, 0755); err != nil { logger.Errorf("failed to make mongo journal dir %s: %v", journalDir, err) return nil, nil, err } logger.Debugf("generate server cert") cert, key, err := env.config.GenerateStateServerCertAndKey() if err != nil { logger.Errorf("failed to generate server cert: %v", err) return nil, nil, err } if err := ioutil.WriteFile( env.config.configFile("server.pem"), append(cert, key...), 0600); err != nil { logger.Errorf("failed to write server.pem: %v", err) return nil, nil, err } mongo := upstart.MongoUpstartService( env.mongoServiceName(), env.config.rootDir(), env.config.mongoDir(), env.config.StatePort()) mongo.InitDir = upstartScriptLocation logger.Infof("installing service %s to %s", env.mongoServiceName(), mongo.InitDir) if err := mongo.Install(); err != nil { logger.Errorf("could not install mongo service: %v", err) return nil, nil, err } return cert, key, nil }
func (cfg *MachineConfig) addMongoToBoot(c *cloudinit.Config) error { dbDir := filepath.Join(cfg.DataDir, "db") addScripts(c, "mkdir -p "+dbDir+"/journal", // Otherwise we get three files with 100M+ each, which takes time. "dd bs=1M count=1 if=/dev/zero of="+dbDir+"/journal/prealloc.0", "dd bs=1M count=1 if=/dev/zero of="+dbDir+"/journal/prealloc.1", "dd bs=1M count=1 if=/dev/zero of="+dbDir+"/journal/prealloc.2", ) conf := upstart.MongoUpstartService("juju-db", cfg.DataDir, dbDir, cfg.StatePort) cmds, err := conf.InstallCommands() if err != nil { return fmt.Errorf("cannot make cloud-init upstart script for the state database: %v", err) } addScripts(c, cmds...) return nil }