// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// This file was auto-generated via go generate.
// DO NOT UPDATE MANUALLY

/*
Command deviced is used to launch, configure and manage the deviced daemon,
which implements the v.io/v23/services/device interfaces.

Usage:
   deviced
   deviced <command>

The deviced commands are:
   install     Install the device manager.
   uninstall   Uninstall the device manager.
   start       Start the device manager.
   stop        Stop the device manager.
   profile     Dumps profile for the device manager.
   help        Display help for commands or topics

The global flags are:
 -deviced-port=0
   the port number of assign to the device manager service. The hostname/IP
   address part of --v23.tcp.address is used along with this port. By default,
   the port is assigned by the OS.
 -name=
   name to publish the device manager at
 -neighborhood-name=
   if provided, it will enable sharing with the local neighborhood with the
   provided name. The address of the local mounttable will be published to the
   neighboorhood and everything in the neighborhood will be visible on the local
   mounttable.
 -proxy-port=0
   the port number to assign to the proxy service. 0 means no proxy service.
 -restart-exit-code=0
   exit code to return when device manager should be restarted
 -use-pairing-token=false
   generate a pairing token for the device manager that will need to be provided
   when a device is claimed

 -alsologtostderr=true
   log to standard error as well as files
 -chown=false
   Change owner of files and directories given as command-line arguments to the
   user specified by this flag
 -dryrun=false
   Elides root-requiring systemcalls.
 -kill=false
   Kill process ids given as command-line arguments.
 -log_backtrace_at=:0
   when logging hits line file:N, emit a stack trace
 -log_dir=
   if non-empty, write log files to this directory
 -logdir=
   Path to the log directory.
 -logtostderr=false
   log to standard error instead of files
 -max_stack_buf_size=4292608
   max size in bytes of the buffer to use for logging stack traces
 -minuid=501
   UIDs cannot be less than this number.
 -progname=unnamed_app
   Visible name of the application, used in argv[0]
 -rm=false
   Remove the file trees given as command-line arguments.
 -run=
   Path to the application to exec.
 -stderrthreshold=2
   logs at or above this threshold go to stderr
 -username=
   The UNIX user name used for the other functions of this tool.
 -v=0
   log level for V logs
 -v23.credentials=
   directory to use for storing security credentials
 -v23.i18n-catalogue=
   18n catalogue files to load, comma separated
 -v23.metadata=<just specify -v23.metadata to activate>
   Displays metadata for the program and exits.
 -v23.namespace.root=[/(dev.v.io/role/vprod/service/mounttabled)@ns.dev.v.io:8101]
   local namespace root; can be repeated to provided multiple roots
 -v23.permissions.file=map[]
   specify a perms file as <name>:<permsfile>
 -v23.permissions.literal=
   explicitly specify the runtime perms as a JSON-encoded access.Permissions.
   Overrides all --v23.permissions.file flags.
 -v23.proxy=
   object name of proxy service to use to export services across network
   boundaries
 -v23.tcp.address=
   address to listen on
 -v23.tcp.protocol=wsh
   protocol to listen with
 -v23.vtrace.cache-size=1024
   The number of vtrace traces to store in memory.
 -v23.vtrace.collect-regexp=
   Spans and annotations that match this regular expression will trigger trace
   collection.
 -v23.vtrace.dump-on-shutdown=true
   If true, dump all stored traces on runtime shutdown.
 -v23.vtrace.sample-rate=0
   Rate (from 0.0 to 1.0) to sample vtrace traces.
 -vmodule=
   comma-separated list of pattern=N settings for filename-filtered logging
 -vpath=
   comma-separated list of pattern=N settings for file pathname-filtered logging
 -workspace=
   Path to the application's workspace directory.

Deviced install

Performs installation of device manager into V23_DEVICE_DIR (if the env var
set), or into the current dir otherwise

Usage:
   deviced install [flags] [-- <arguments for device manager>]

Arguments to be passed to the installed device manager

The deviced install flags are:
 -agent=
   path to security agent
 -devuser=
   if specified, device manager will run as this user. Provided by devicex but
   ignored .
 -from=
   if specified, performs the installation from the provided application
   envelope object name
 -init_helper=
   path to sysinit helper
 -init_mode=false
   if set, installs the device manager with the system init service manager
 -origin=
   if specified, self-updates will use this origin
 -session_mode=false
   if set, installs the device manager to run a single session. Otherwise, the
   device manager is configured to get restarted upon exit
 -single_user=false
   if set, performs the installation assuming a single-user system
 -suid_helper=
   path to suid helper

Deviced uninstall

Removes the device manager installation from V23_DEVICE_DIR (if the env var
set), or the current dir otherwise

Usage:
   deviced uninstall [flags]

The deviced uninstall flags are:
 -suid_helper=
   path to suid helper

Deviced start

Starts the device manager installed under from V23_DEVICE_DIR (if the env var
set), or the current dir otherwise

Usage:
   deviced start

Deviced stop

Stops the device manager installed under from V23_DEVICE_DIR (if the env var
set), or the current dir otherwise

Usage:
   deviced stop

Deviced profile

Prints the internal profile description for the device manager.

Usage:
   deviced profile

Deviced help - Display help for commands or topics

Help with no args displays the usage of the parent command.

Help with args displays the usage of the specified sub-command or help topic.

"help ..." recursively displays help for all commands and topics.

Usage:
   deviced help [flags] [command/topic ...]

[command/topic ...] optionally identifies a specific sub-command or help topic.

The deviced help flags are:
 -style=compact
   The formatting style for help output:
      compact - Good for compact cmdline output.
      full    - Good for cmdline output, shows all global flags.
      godoc   - Good for godoc processing.
   Override the default by setting the CMDLINE_STYLE environment variable.
 -width=<terminal width>
   Format output to this target width in runes, or unlimited if width < 0.
   Defaults to the terminal width if available.  Override the default by setting
   the CMDLINE_WIDTH environment variable.
*/
package main
