170 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Go
		
	
	
	
| package main
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"io"
 | |
| 	"os"
 | |
| 	"path"
 | |
| 
 | |
| 	"github.com/containers/libpod/cmd/podman/cliconfig"
 | |
| 	"github.com/containers/libpod/libpod"
 | |
| 	_ "github.com/containers/libpod/pkg/hooks/0.1.0"
 | |
| 	"github.com/containers/libpod/pkg/rootless"
 | |
| 	"github.com/containers/libpod/version"
 | |
| 	"github.com/containers/storage/pkg/reexec"
 | |
| 	"github.com/opentracing/opentracing-go"
 | |
| 	"github.com/sirupsen/logrus"
 | |
| 	"github.com/spf13/cobra"
 | |
| )
 | |
| 
 | |
| // This is populated by the Makefile from the VERSION file
 | |
| // in the repository
 | |
| var (
 | |
| 	exitCode = 125
 | |
| 	Ctx      context.Context
 | |
| 	span     opentracing.Span
 | |
| 	closer   io.Closer
 | |
| )
 | |
| 
 | |
| // Commands that the remote and local client have
 | |
| // implemented.
 | |
| var mainCommands = []*cobra.Command{
 | |
| 	_attachCommand,
 | |
| 	_buildCommand,
 | |
| 	_commitCommand,
 | |
| 	_diffCommand,
 | |
| 	_createCommand,
 | |
| 	_eventsCommand,
 | |
| 	_execCommand,
 | |
| 	_exportCommand,
 | |
| 	_generateCommand,
 | |
| 	_historyCommand,
 | |
| 	&_imagesCommand,
 | |
| 	_importCommand,
 | |
| 	_infoCommand,
 | |
| 	_initCommand,
 | |
| 	&_inspectCommand,
 | |
| 	_killCommand,
 | |
| 	_loadCommand,
 | |
| 	_logsCommand,
 | |
| 	_pauseCommand,
 | |
| 	podCommand.Command,
 | |
| 	_portCommand,
 | |
| 	&_psCommand,
 | |
| 	_pullCommand,
 | |
| 	_pushCommand,
 | |
| 	_restartCommand,
 | |
| 	_rmCommand,
 | |
| 	&_rmiCommand,
 | |
| 	_runCommand,
 | |
| 	_saveCommand,
 | |
| 	_stopCommand,
 | |
| 	_tagCommand,
 | |
| 	_topCommand,
 | |
| 	_unpauseCommand,
 | |
| 	_versionCommand,
 | |
| 	_waitCommand,
 | |
| 	imageCommand.Command,
 | |
| 	_startCommand,
 | |
| 	systemCommand.Command,
 | |
| }
 | |
| 
 | |
| var rootCmd = &cobra.Command{
 | |
| 	Use:  path.Base(os.Args[0]),
 | |
| 	Long: "manage pods and images",
 | |
| 	RunE: commandRunE(),
 | |
| 	PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
 | |
| 		return before(cmd, args)
 | |
| 	},
 | |
| 	PersistentPostRunE: func(cmd *cobra.Command, args []string) error {
 | |
| 		return after(cmd, args)
 | |
| 	},
 | |
| 	SilenceUsage:  true,
 | |
| 	SilenceErrors: true,
 | |
| }
 | |
| 
 | |
| var MainGlobalOpts cliconfig.MainFlags
 | |
| 
 | |
| func init() {
 | |
| 	cobra.OnInitialize(initConfig)
 | |
| 	rootCmd.TraverseChildren = true
 | |
| 	rootCmd.Version = version.Version
 | |
| 	// Override default --help information of `--version` global flag
 | |
| 	var dummyVersion bool
 | |
| 	rootCmd.Flags().BoolVarP(&dummyVersion, "version", "v", false, "Version of podman")
 | |
| 	rootCmd.AddCommand(mainCommands...)
 | |
| 	rootCmd.AddCommand(getMainCommands()...)
 | |
| }
 | |
| 
 | |
| func initConfig() {
 | |
| 	//	we can do more stuff in here.
 | |
| }
 | |
| 
 | |
| func before(cmd *cobra.Command, args []string) error {
 | |
| 	if err := libpod.SetXdgDirs(); err != nil {
 | |
| 		logrus.Errorf(err.Error())
 | |
| 		os.Exit(1)
 | |
| 	}
 | |
| 
 | |
| 	if err := setupRootless(cmd, args); err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	//	Set log level; if not log-level is provided, default to error
 | |
| 	logLevel := MainGlobalOpts.LogLevel
 | |
| 	if logLevel == "" {
 | |
| 		logLevel = "error"
 | |
| 	}
 | |
| 	level, err := logrus.ParseLevel(logLevel)
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	logrus.SetLevel(level)
 | |
| 	if err := setSyslog(); err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	if err := setRLimits(); err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	if rootless.IsRootless() {
 | |
| 		logrus.Info("running as rootless")
 | |
| 	}
 | |
| 	setUMask()
 | |
| 	return profileOn(cmd)
 | |
| }
 | |
| 
 | |
| func after(cmd *cobra.Command, args []string) error {
 | |
| 	return profileOff(cmd)
 | |
| }
 | |
| 
 | |
| func main() {
 | |
| 	//debug := false
 | |
| 	//cpuProfile := false
 | |
| 
 | |
| 	if reexec.Init() {
 | |
| 		return
 | |
| 	}
 | |
| 	// Hard code TMPDIR functions to use /var/tmp, if user did not override
 | |
| 	if _, ok := os.LookupEnv("TMPDIR"); !ok {
 | |
| 		os.Setenv("TMPDIR", "/var/tmp")
 | |
| 	}
 | |
| 	if err := rootCmd.Execute(); err != nil {
 | |
| 		outputError(err)
 | |
| 	} else {
 | |
| 		// The exitCode modified from 125, indicates an application
 | |
| 		// running inside of a container failed, as opposed to the
 | |
| 		// podman command failed.  Must exit with that exit code
 | |
| 		// otherwise command exited correctly.
 | |
| 		if exitCode == 125 {
 | |
| 			exitCode = 0
 | |
| 		}
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	// Check if /etc/containers/registries.conf exists when running in
 | |
| 	// in a local environment.
 | |
| 	CheckForRegistries()
 | |
| 	os.Exit(exitCode)
 | |
| }
 |