func generateSnapSocketFile(app *snap.AppInfo, baseDir string) (string, error) { if err := snap.ValidateApp(app); err != nil { return "", err } // lp: #1515709, systemd will default to 0666 if no socket mode // is specified if app.SocketMode == "" { app.SocketMode = "0660" } serviceFileName := filepath.Base(app.ServiceFile()) return systemd.New(dirs.GlobalRootDir, nil).GenSocketFile( &systemd.ServiceDescription{ ServiceFileName: serviceFileName, ListenStream: app.ListenStream, SocketMode: app.SocketMode, }), nil }
func generateSnapServicesFile(app *snap.AppInfo, baseDir string) (string, error) { if err := snap.ValidateApp(app); err != nil { return "", err } desc := fmt.Sprintf("service %s for snap %s - autogenerated DO NO EDIT", app.Name, app.Snap.Name()) socketFileName := "" if app.Socket { socketFileName = filepath.Base(app.ServiceSocketFile()) } return systemd.New(dirs.GlobalRootDir, nil).GenServiceFile( &systemd.ServiceDescription{ SnapName: app.Snap.Name(), AppName: app.Name, Version: app.Snap.Version, Revision: app.Snap.Revision, Description: desc, SnapPath: baseDir, Start: app.Command, Stop: app.Stop, PostStop: app.PostStop, StopTimeout: serviceStopTimeout(app), AaProfile: app.SecurityTag(), BusName: app.BusName, Type: app.Daemon, UdevAppName: app.SecurityTag(), Socket: app.Socket, SocketFileName: socketFileName, Restart: app.RestartCond, }), nil }
func generateSnapBinaryWrapper(app *snap.AppInfo, pkgPath string) (string, error) { wrapperTemplate := `#!/bin/sh set -e # snap info {{.NewAppVars}} if [ ! -d "$SNAP_USER_DATA" ]; then mkdir -p "$SNAP_USER_DATA" fi export HOME="$SNAP_USER_DATA" # Snap name is: {{.SnapName}} # App name is: {{.AppName}} ubuntu-core-launcher {{.UdevAppName}} {{.AaProfile}} {{.Target}} "$@" ` if err := snap.ValidateApp(app); err != nil { return "", err } actualBinPath := binPathForBinary(pkgPath, app) var templateOut bytes.Buffer t := template.Must(template.New("wrapper").Parse(wrapperTemplate)) wrapperData := struct { SnapName string AppName string SnapArch string SnapPath string Version string Revision int UdevAppName string Home string Target string AaProfile string OldAppVars string NewAppVars string }{ SnapName: app.Snap.Name(), AppName: app.Name, SnapArch: arch.UbuntuArchitecture(), SnapPath: pkgPath, Version: app.Snap.Version, Revision: app.Snap.Revision, UdevAppName: app.SecurityTag(), Home: "$HOME", Target: actualBinPath, AaProfile: app.SecurityTag(), } newVars := []string{} for _, envVar := range append( snapenv.GetBasicSnapEnvVars(wrapperData), snapenv.GetUserSnapEnvVars(wrapperData)...) { newVars = append(newVars, quoteEnvVar(envVar)) } wrapperData.NewAppVars = strings.Join(newVars, "\n") t.Execute(&templateOut, wrapperData) return templateOut.String(), nil }