---
layout: documentation
---


# Mesos Configuration

The Mesos master and slave can take a variety of configuration options
through command-line arguments, or environment variables. A list of
the available options can be seen by running `mesos-master --help` or
`mesos-slave --help`. Each option can be set in two ways:

* By passing it to the binary using `--option_name=value`, either
specifying the value directly, or specifying a file in which the value
resides (`--option_name=file://path/to/file`). The path can be
absolute or relative to the current working directory.

* By setting the environment variable `MESOS_OPTION_NAME` (the option
name with a `MESOS_` prefix added to it).

Configuration values are searched for first in the environment, then
on the command-line.

**Important Options**

If you have special compilation requirements, please refer to
`./configure --help` when configuring Mesos. Additionally, this
documentation lists only a recent snapshot of the options in Mesos. A
definitive source for which flags your version of Mesos supports can
be found by running the binary with the flag `--help`, for example
`mesos-master --help`.

## Master and Slave Options

*These options can be supplied to both masters and slaves.*
Also see the [common options for logging](logging.md#Internal).

<table class="table table-striped">
  <thead>
    <tr>
      <th width="30%">
        Flag
      </th>
      <th>
        Explanation
      </th>
    </tr>
  </thead>

  <tr>
    <td>
      --advertise_ip=VALUE
    </td>
    <td>
      IP address advertised to reach mesos master/slave. Mesos master/slave
      does not bind using this IP address. However, this IP address may be
      used to access Mesos master/slave.
    </td>
  </tr>
  <tr>
    <td>
      --advertise_port=VALUE
    </td>
    <td>
      Port advertised to reach mesos master/slave (along with
      <code>advertise_ip</code>). Mesos master/slave does not bind using this
      port. However, this port (along with <code>advertise_ip</code>) may be
      used to access Mesos master/slave.
    </td>
  </tr>
  <tr>
    <td>
      --firewall_rules=VALUE
    </td>
    <td>
      The value could be a JSON-formatted string of rules or a file path
      containing the JSON-formatted rules used in the endpoints firewall. Path
      could be of the form <code>file:///path/to/file</code> or
      <code>/path/to/file</code>.
      <p/>
      See the <code>Firewall</code> message in <code>flags.proto</code>
      for the expected format.
      <p/>
      Example:
<pre><code>{
  "disabled_endpoints" : {
    "paths" : [
      "/files/browse",
      "/slave(0)/stats.json"
    ]
  }
}</code></pre>
    </td>
  </tr>
  <tr>
    <td>
      --[no-]help
    </td>
    <td>
      Prints this help message. (default: false)
    </td>
  </tr>
  <tr>
    <td>
      --ip=VALUE
    </td>
    <td>
      IP address to listen on; this cannot be used in conjunction
      with <code>--ip_discovery_command</code>.
    </td>
  </tr>
  <tr>
    <td>
      --ip_discovery_command=VALUE
    </td>
    <td>
      Optional IP discovery command: if set, it is expected to emit
      the IP address which Master will try to bind to.  Cannot be used
      in conjunction with <code>--ip</code>.
    </td>
  </tr>
  <tr>
    <td>
      --port=VALUE
    </td>
    <td>
      Port to listen on. (master default: 5050; slave default: 5051)
    </td>
  </tr>
  <tr>
    <td>
      --[no-]version
    </td>
    <td>
      Show version and exit. (default: false)
    </td>
  </tr>
</table>

## Master Options

*Required Flags*

<table class="table table-striped">
  <thead>
    <tr>
      <th width="30%">
        Flag
      </th>
      <th>
        Explanation
      </th>
    </tr>
  </thead>
  <tr>
    <td>
      --quorum=VALUE
    </td>
    <td>
      The size of the quorum of replicas when using
      <code>replicated_log</code>-based
      registry. It is imperative to set this value to be a majority of
      masters i.e., quorum > (number of masters)/2.
      <p/>

      <b>NOTE</b> Not required if master is run in standalone mode (non-HA).
    </td>
  </tr>
  <tr>
    <td>
      --work_dir=VALUE
    </td>
    <td>
      Where to store the persistent information stored in the Registry.
    </td>
  </tr>
  <tr>
    <td>
      --zk=VALUE
    </td>
    <td>
      ZooKeeper URL (used for leader election amongst masters)
      May be one of:
<pre><code>zk://host1:port1,host2:port2,.../path
zk://username:password@host1:port1,host2:port2,.../path
file:///path/to/file (where file contains one of the above)</code></pre>
      <p/>
      <b>NOTE</b> Not required if master is run in standalone mode (non-HA).
    </td>
  </tr>
</table>

*Optional Flags*

<table class="table table-striped">
  <thead>
    <tr>
      <th width="30%">
        Flag
      </th>
      <th>
        Explanation
      </th>
    </tr>
  </thead>
  <tr>
    <td>
      --acls=VALUE
    </td>
    <td>
      Specify the ACLs used for framework/operator authentication and
      authorization. The value is a JSON-formatted string of ACLs. Remember you
      can also use the <code>file:///path/to/file</code> or
      <code>/path/to/file</code> argument value format to read the JSON from a
      file.
      <p/>
      See the ACLs protobuf in authorizer.proto for the expected format.
      <p/>
      JSON file example:
<pre><code>{
  "register_frameworks": [
    {
      "principals": { "type": "ANY" },
      "roles": { "values": ["a"] }
    }
  ],
  "run_tasks": [
    {
      "principals": { "values": ["a", "b"] },
      "users": { "values": ["c"] }
    }
  ],
  "teardown_frameworks": [
    {
      "principals": { "values": ["a", "b"] },
      "framework_principals": { "values": ["c"] }
    }
  ]
}</code></pre>
    </td>
  </tr>
  <tr>
    <td>
      --allocation_interval=VALUE
    </td>
    <td>
      Amount of time to wait between performing
      (batch) allocations (e.g., 500ms, 1sec, etc). (default: 1secs)
    </td>
  </tr>
  <tr>
    <td>
      --allocator=VALUE
    </td>
    <td>
      Allocator to use for resource allocation to frameworks.
      Use the default <code>HierarchicalDRF</code> allocator, or load
      an alternate allocator module using <code>--modules</code>.
      (default: HierarchicalDRF)
    </td>
  </tr>
  <tr>
    <td>
      --[no-]authenticate
    </td>
    <td>
      If <code>authenticate</code> is <code>true</code> only authenticated
      frameworks are allowed to register. If <code>false</code> unauthenticated
      frameworks are also allowed to register. (default: false)
    </td>
  </tr>
  <tr>
    <td>
      --[no-]authenticate_slaves
    </td>
    <td>
      If <code>true</code> only authenticated slaves are allowed to register.
      <p/>
      If <code>false</code> unauthenticated slaves are also allowed to register.
      (default: false)
    </td>
  </tr>
  <tr>
    <td>
      --[no-]authenticate_http
    </td>
    <td>
      If <code>true</code> only authenticated requests for HTTP endpoints
      supporting authentication are allowed.
      <p/>
      If <code>false</code> unauthenticated HTTP endpoint requests are also allowed.
      (default: false)
    </td>
  </tr>
  <tr>
    <td>
      --authenticators=VALUE
    </td>
    <td>
      Authenticator implementation to use when authenticating frameworks
      and/or slaves. Use the default <code>crammd5</code>, or
      load an alternate authenticator module using <code>--modules</code>.
      (default: crammd5)
    </td>
  </tr>
  <tr>
    <td>
      --http_authenticators=VALUE
    </td>
    <td>
      HTTP authenticator implementation to use when handling requests to
      authenticated endpoints. Use the default <code>basic<code>, or
      load an alternate HTTP authenticator module using <code>--modules</code>.
      <p/>
      Currently there is no support for multiple HTTP authenticators.
      (default: basic)
    </td>
  </tr>
  <tr>
    <td>
      --authorizers=VALUE
    </td>
    <td>
      Authorizer implementation to use when authorizating actions that
      required it. Use the default <code>local</code>, or load an alternate
      authorizer module using <code>--modules</code>.
      <br/>
      Note that if the flag <code>--authorizers</code> is provided with a
      value different than the default <code>local</code>, the ACLs passed
      through the <code>--acls</code> flag will be ignored.
      <br/>
      Currently there's no support for multiple authorizers.
      (default: local)
    </td>
  </tr>
  <tr>
    <td>
      --cluster=VALUE
    </td>
    <td>
      Human readable name for the cluster, displayed in the webui.
    </td>
  </tr>
  <tr>
    <td>
      --credentials=VALUE
    </td>
    <td>
      Either a path to a text file with a list of credentials,
      each line containing <code>principal</code> and <code>secret</code>
      separated by whitespace, or a path to a JSON-formatted file containing
      credentials. Path should be of the form <code>file:///path/to/file</code>
      or <code>/path/to/file</code>.
      <p/>
      JSON file Example:
<pre><code>{
  "credentials": [
    {
      "principal": "sherman",
      "secret": "kitesurf"
    }
  ]
}</code></pre>

      <p/>
      Text file Example:
<pre><code>    username secret </code></pre>

    </td>
  </tr>
  <tr>
    <td>
      --framework_sorter=VALUE
    </td>
    <td>
      Policy to use for allocating resources between a given user's frameworks.
      Options are the same as for user_allocator. (default: drf)
    </td>
  </tr>
  <tr>
    <td>
      --hooks=VALUE
    </td>
    <td>
      A comma-separated list of hook modules to be installed inside master.
    </td>
  </tr>
  <tr>
    <td>
      --hostname=VALUE
    </td>
    <td>
      The hostname the master should advertise in ZooKeeper.<br>
      If left unset, the hostname is resolved from the IP address that the slave
      binds to; unless the user explicitly prevents that, using
      <code>--no-hostname_lookup</code>, in which case the IP itself is used.
    </td>
  </tr>
  <tr>
    <td>
      --[no-]hostname_lookup
    </td>
    <td>
      Whether we should execute a lookup to find out the server's hostname, if
      not explicitly set (via, e.g., <code>--hostname</code>). If set to
      <code>false</code> it will cause Mesos to use the IP address, unless the
      hostname is explicitly set. (default: true)
    </td>
  </tr>
  <tr>
    <td>
      --[no-]log_auto_initialize
    </td>
    <td>
      Whether to automatically initialize the replicated log used for the
      registry. If this is set to false, the log has to be manually initialized
      when used for the very first time. (default: true)
    </td>
  </tr>
  <tr>
    <td>
      --max_completed_frameworks=VALUE
    </td>
    <td>
      Maximum number of completed frameworks to store in memory. (default: 50)
    </td>
  </tr>
  <tr>
    <td>
      --max_completed_tasks_per_framework=VALUE
    </td>
    <td>
      Maximum number of completed tasks per framework to store in memory.
      (default: 1000)
    </td>
  </tr>
  <tr>
    <td>
      --max_slave_ping_timeouts=VALUE
    </td>
    <td>
      The number of times a slave can fail to respond to a ping from the master.
      Slaves that incur more than <code>max_slave_ping_timeouts</code> timeouts
      will be removed. (default: 5)
    </td>
  </tr>
  <tr>
    <td>
      --modules=VALUE
    </td>
    <td>
      List of modules to be loaded and be available to the internal subsystems.
      <p/>
      Use <code>--modules=filepath</code> to specify the list of modules via a
      file containing a JSON-formatted string.
      Remember you can also use the <code>file:///path/to/file</code> or
      <code>/path/to/file</code> argument value format to write the JSON in a
      file.<p/>
      Use <code>--modules="{...}"</code> to specify the list of modules inline.
      <p/>
      JSON file example:
<pre><code>{
  "libraries": [
    {
      "file": "/path/to/libfoo.so",
      "modules": [
        {
          "name": "org_apache_mesos_bar",
          "parameters": [
            {
              "key": "X",
              "value": "Y"
            }
          ]
        },
        {
          "name": "org_apache_mesos_baz"
        }
      ]
    },
    {
      "name": "qux",
      "modules": [
        {
          "name": "org_apache_mesos_norf"
        }
      ]
    }
  ]
}</code></pre>
    </td>
  </tr>
  <tr>
    <td>
      --offer_timeout=VALUE
    </td>
    <td>
      Duration of time before an offer is rescinded from a framework.
      <p/>
      This helps fairness when running frameworks that hold on to offers,
      or frameworks that accidentally drop offers.
    </td>
  </tr>
  <tr>
    <td>
      --rate_limits=VALUE
    </td>
    <td>
      The value could be a JSON-formatted string of rate limits
      or a file path containing the JSON-formatted rate limits used
      for framework rate limiting.
      <p/>
      Remember you can also use the <code>file:///path/to/file</code> or
      <code>/path/to/file</code> argument value format to read the JSON from a
      file.
      <p/>

      See the RateLimits protobuf in mesos.proto for the expected format.
      <p/>

      Example:
<pre><code>{
  "limits": [
    {
      "principal": "foo",
      "qps": 55.5
    },
    {
      "principal": "bar"
    }
  ],
  "aggregate_default_qps": 33.3
}</code></pre>
    </td>
  </tr>
  <tr>
    <td>
      --recovery_slave_removal_limit=VALUE
    </td>
    <td>
      For failovers, limit on the percentage of slaves that can be removed
      from the registry *and* shutdown after the re-registration timeout
      elapses. If the limit is exceeded, the master will fail over rather
      than remove the slaves.
      <p/>
      This can be used to provide safety guarantees for production
      environments. Production environments may expect that across Master
      failovers, at most a certain percentage of slaves will fail
      permanently (e.g., due to rack-level failures).
      <p/>
      Setting this limit would ensure that a human needs to get
      involved should an unexpected widespread failure of slaves occur
      in the cluster.
      <p/>
      Values: [0%-100%] (default: 100%)
    </td>
  </tr>
  <tr>
    <td>
      --registry=VALUE
    </td>
    <td>
      Persistence strategy for the registry.
      <p/>
      Available options are <code>replicated_log</code>, <code>in_memory</code>
      (for testing). (default: replicated_log)
    </td>
  </tr>
  <tr>
    <td>
      --registry_fetch_timeout=VALUE
    </td>
    <td>
      Duration of time to wait in order to fetch data from the registry after
      which the operation is considered a failure. (default: 1mins)
    </td>
  </tr>
  <tr>
    <td>
      --registry_store_timeout=VALUE
    </td>
    <td>
      Duration of time to wait in order to store data in the registry after
      which the operation is considered a failure. (default: 5secs)
    </td>
  </tr>
  <tr>
    <td>
      --[no-]registry_strict
    </td>
    <td>
      Whether the Master will take actions based on the persistent
      information stored in the Registry. Setting this to false means
      that the Registrar will never reject the admission, readmission,
      or removal of a slave. Consequently, <code>false</code> can be used to
      bootstrap the persistent state on a running cluster.
      <p/>
      NOTE: This flag is *experimental* and should not be used in
      production yet. (default: false)
    </td>
  </tr>
  <tr>
    <td>
      --roles=VALUE
    </td>
    <td>
      A comma-separated list of the allocation roles that frameworks
      in this cluster may belong to. This flag is deprecated;
      if it is not specified, any role name can be used.
    </td>
  </tr>
  <tr>
    <td>
      --[no-]root_submissions
    </td>
    <td>
      Can root submit frameworks? (default: true)
    </td>
  </tr>
  <tr>
    <td>
      --slave_ping_timeout=VALUE
    </td>
    <td>
      The timeout within which each slave is expected to respond to a
      ping from the master. Slaves that do not respond within
      <code>max_slave_ping_timeouts</code> ping retries will be removed.
      (default: 15secs)
    </td>
  </tr>
  <tr>
    <td>
      --slave_removal_rate_limit=VALUE
    </td>
    <td>
      The maximum rate (e.g., <code>1/10mins</code>, <code>2/3hrs</code>, etc)
      at which slaves will be removed from the master when they fail health
      checks. By default slaves will be removed as soon as they fail the health
      checks.
      <p/>
      The value is of the form
      <code>Number of slaves</code>/<code>Duration</code>.
    </td>
  </tr>
  <tr>
    <td>
      --slave_reregister_timeout=VALUE
    </td>
    <td>
      The timeout within which all slaves are expected to re-register
      when a new master is elected as the leader. Slaves that do not
      re-register within the timeout will be removed from the registry
      and will be shutdown if they attempt to communicate with master.
      <p/>
      NOTE: This value has to be at least 10mins. (default: 10mins)
    </td>
  </tr>
  <tr>
    <td>
      --user_sorter=VALUE
    </td>
    <td>
      Policy to use for allocating resources between users. May be one of:
      <p/>
      dominant_resource_fairness (drf) (default: drf)
    </td>
  </tr>
  <tr>
    <td>
      --webui_dir=VALUE
    </td>
    <td>
      Directory path of the webui files/assets.
      (default: /usr/local/share/mesos/webui)
    </td>
  </tr>
  <tr>
    <td>
      --weights=VALUE
    </td>
    <td>
      A comma-separated list of role/weight pairs of the form
      <code>role=weight,role=weight</code>. Weights are used
      to indicate forms of priority.
    </td>
  </tr>
  <tr>
    <td>
      --whitelist=VALUE
    </td>
    <td>
      A filename which contains a list of slaves (one per line) to advertise
      offers for. The file is watched, and periodically re-read to refresh
      the slave whitelist. By default there is no whitelist / all machines are
      accepted. (default: None)
     <p/>

      Example:
      <pre><code>file:///etc/mesos/slave_whitelist</code></pre>
      <p/>
    </td>
  </tr>
  <tr>
    <td>
      --zk_session_timeout=VALUE
    </td>
    <td>
      ZooKeeper session timeout. (default: 10secs)
    </td>
  </tr>
</table>

*Flags available when configured with `--with-network-isolator`*

<table class="table table-striped">
  <thead>
    <tr>
      <th width="30%">
        Flag
      </th>
      <th>
        Explanation
      </th>
    </tr>
  </thead>
  <tr>
  <tr>
    <td>
      --max_executors_per_slave=VALUE
    </td>
    <td>
      Maximum number of executors allowed per slave. The network
      monitoring/isolation technique imposes an implicit resource
      acquisition on each executor (# ephemeral ports), as a result
      one can only run a certain number of executors on each slave.
      <p/>
      This flag was added as a hack to avoid frameworks getting offers
      when we have allocated all of the ephemeral port range on the slave.
    </td>
  </tr>
</table>

## Slave Options

*Required Flags*

<table class="table table-striped">
  <thead>
    <tr>
      <th width="30%">
        Flag
      </th>
      <th>
        Explanation
      </th>
    </tr>
  </thead>
  <tr>
    <td>
      --master=VALUE
    </td>
    <td>
      This specifies how to connect to a master or a quorum of masters. This flag works with 3 different techniques. It may be one of:
      <ol>
        <li> hostname or ip to a master, e.g.,
<pre><code>--master=localhost:5050
--master=10.0.0.5:5050
</code></pre>
        </li>

        <li> zookeeper or quorum hostname/ip + port + master registration path </li>
<pre><code>--master=zk://host1:port1,host2:port2,.../path
--master=zk://username:password@host1:port1,host2:port2,.../path
</code></pre>
        </li>

        <li> a path to a file containing either one of the above options. You
        can also use the <code>file:///path/to/file</code> syntax to read the
        argument from a file which contains one of the above.
        </li>
      </ol>
    </td>
  </tr>
</table>

*Optional Flags*

<table class="table table-striped">
  <thead>
    <tr>
      <th width="30%">
        Flag
      </th>
      <th>
        Explanation
      </th>
    </tr>
  </thead>
  <tr>
    <td>
      --attributes=VALUE
    </td>
    <td>
      Attributes of machine, in the form:
      <p/>
      <code>rack:2</code> or <code>'rack:2;u:1'</code>
    </td>
  </tr>
  <tr>
    <td>
      --authenticatee=VALUE
    </td>
    <td>
      Authenticatee implementation to use when authenticating against the
      master. Use the default <code>crammd5</code>, or
      load an alternate authenticatee module using <code>--modules</code>.
      (default: crammd5)
    </td>
  </tr>
  <tr>
    <td>
      --[no-]cgroups_cpu_enable_pids_and_tids_count
    </td>
    <td>
      Cgroups feature flag to enable counting of processes and threads
      inside a container. (default: false)
    </td>
  </tr>
  <tr>
    <td>
      --[no-]cgroups_enable_cfs
    </td>
    <td>
      Cgroups feature flag to enable hard limits on CPU resources
      via the CFS bandwidth limiting subfeature.
      (default: false)
    </td>
  </tr>
  <tr>
    <td>
      --cgroups_hierarchy=VALUE
    </td>
    <td>
      The path to the cgroups hierarchy root.
      (default: /sys/fs/cgroup)
    </td>
  </tr>
  <tr>
    <td>
      --[no-]cgroups_limit_swap
    </td>
    <td>
      Cgroups feature flag to enable memory limits on both memory and
      swap instead of just memory.
      (default: false)
    </td>
  </tr>
  <tr>
    <td>
      --cgroups_root=VALUE
    </td>
    <td>
      Name of the root cgroup.
      (default: mesos)
    </td>
  </tr>
  <tr>
    <td>
      --[no-]systemd_enable_support
    </td>
    <td>
      Top level control of systemd support. When enabled, features such as
      executor life-time extension are enabled unless there is an explicit
      flag to disable these (see other flags). This should be enabled when
      the agent is launched as a systemd unit.
      (default: true)
    </td>
  </tr>
  <tr>
    <td>
      --systemd_runtime_directory=VALUE
    </td>
    <td>
      The path to the systemd system run time directory.
      (default: /run/systemd/system)
    </td>
  </tr>
  <tr>
    <td>
      --container_disk_watch_interval=VALUE
    </td>
    <td>
      The interval between disk quota checks for containers. This flag is
      used for the <code>posix/disk</code> isolator. (default: 15secs)
    </td>
  </tr>
  <tr>
    <td>
      --containerizer_path=VALUE
    </td>
    <td>
      The path to the external containerizer executable used when
      external isolation is activated (<code>--isolation=external</code>).
    </td>
  </tr>
  <tr>
    <td>
      --containerizers=VALUE
    </td>
    <td>
      Comma-separated list of containerizer implementations
      to compose in order to provide containerization.
      <p/>
      Available options are 'mesos', 'external', and
      'docker' (on Linux). The order the containerizers
      are specified is the order they are tried
      (<code>--containerizers=mesos</code>).
      (default: mesos)
    </td>
  </tr>
  <tr>
    <td>
      --credential=VALUE
    </td>
    <td>
      A path to a text file with a single line
      containing 'principal' and 'secret' separated by whitespace.

      <p/>
      Or a path containing the JSON-formatted information used for one credential.
      <p/>
      Path should be of the form <code>file://path/to/file</code>.
      <p/>
      Remember you can also use
      the <code>file:///path/to/file</code> argument value format to read the
      value from a file.
      </p>
      JSON file example:
<pre><code>{
  "principal": "username",
  "secret": "secret"
}</code></pre>
    </td>
  </tr>
  <tr>
    <td>
      --default_container_image=VALUE
    </td>
    <td>
      The default container image to use if not specified by a task,
      when using external containerizer.
    </td>
  </tr>
  <tr>
    <td>
      --default_container_info=VALUE
    </td>
    <td>
      JSON-formatted ContainerInfo that will be included into
      any ExecutorInfo that does not specify a ContainerInfo.
      <p/>
      See the ContainerInfo protobuf in mesos.proto for
      the expected format.
      <p/>
      Example:
<pre><code>{
  "type": "MESOS",
  "volumes": [
    {
      "host_path": "./.private/tmp",
      "container_path": "/tmp",
      "mode": "RW"
    }
  ]
}</code></pre>
    </td>
  </tr>
  <tr>
    <td>
      --default_role=VALUE
    </td>
    <td>
      Any resources in the --resources flag that
      omit a role, as well as any resources that
      are not present in --resources but that are
      automatically detected, will be assigned to
      this role. (default: *)
    </td>
  </tr>
  <tr>
    <td>
      --disk_watch_interval=VALUE
    </td>
    <td>
      Periodic time interval (e.g., 10secs, 2mins, etc)
      to check the disk usage. (default: 1mins)
    </td>
  </tr>
  <tr>
    <td>
      --docker=VALUE
    </td>
    <td>
      The absolute path to the docker executable for docker
      containerizer.
      (default: docker)
    </td>
  </tr>
  <tr>
    <td>
      --docker_auth_server=VALUE
    </td>
    <td>
      Docker authentication server used to authenticate with Docker registry.
      (default: https://auth.docker.io)
    </td>
  </tr>
  <tr>
    <td>
      --docker_local_archives_dir=VALUE
    </td>
    <td>
      Directory for docker local puller to look in for image archives.
      (default: /tmp/mesos/images/docker)
    </td>
  </tr>
  <tr>
    <td>
      --docker_puller=VALUE
    </td>
    <td>
      Strategy for docker puller to fetch images.
      (default: local)
    </td>
  </tr>
  <tr>
    <td>
      --docker_puller_timeout_secs=VALUE
    </td>
    <td>
      Timeout in seconds for pulling images from the Docker registry.
      (default: 60)
    </td>
  </tr>
  <tr>
    <td>
      --docker_registry=VALUE
    </td>
    <td>
      The default url for pulling Docker images. It could either be a Docker
      registry server url (i.e: https://registry.docker.io), or a local path
      (i.e: file:///tmp/docker/images) in which Docker image archives
      (result of 'docker save') are stored.
      (default: https://registry-1.docker.io)
    </td>
  </tr>
  <tr>
    <td>
      --docker_store_dir=VALUE
    </td>
    <td>
      Directory the Docker provisioner will store images in.
      (default: /tmp/mesos/store/docker)
    </td>
  </tr>
  <tr>
    <td>
      --docker_remove_delay=VALUE
    </td>
    <td>
      The amount of time to wait before removing Docker containers
      (e.g., <code>3days</code>, <code>2weeks</code>, etc).
      (default: 6hrs)
    </td>
  </tr>
  <tr>
    <td>
      --[no-]docker_kill_orphans
    </td>
    <td>
      Enable docker containerizer to kill orphaned containers.
      You should consider setting this to false when you launch multiple
      slaves in the same OS, to avoid one of the DockerContainerizer removing
      docker tasks launched by other slaves.
      (default: true)
    </td>
  </tr>
  <tr>
    <td>
      --docker_socket=VALUE
    </td>
    <td>
      The UNIX socket path to be mounted into the docker executor container to
      provide docker CLI access to the docker daemon. This must be the path used
      by the slave's docker image.
      (default: /var/run/docker.sock)
    </td>
  </tr>
  <tr>
    <td>
      --docker_mesos_image=VALUE
    </td>
    <td>
      The docker image used to launch this mesos slave instance.
      If an image is specified, the docker containerizer assumes the slave
      is running in a docker container, and launches executors with
      docker containers in order to recover them when the slave restarts and
      recovers.
    </td>
  </tr>
  <tr>
    <td>
      --docker_stop_timeout=VALUE
    </td>
    <td>
      The time as a duration for docker to wait after stopping an instance
      before it kills that instance. (default: 0secs)
    </td>
  </tr>
  <tr>
    <td>
      --sandbox_directory=VALUE
    </td>
    <td>
      The absolute path for the directory in the container where the
      sandbox is mapped to.
      (default: /mnt/mesos/sandbox)
    </td>
  </tr>
  <tr>
    <td>
      --[no-]enforce_container_disk_quota
    </td>
    <td>
      Whether to enable disk quota enforcement for containers. This flag
      is used for the 'posix/disk' isolator. (default: false)
    </td>
  </tr>
  <tr>
    <td>
      --executor_environment_variables
    </td>
    <td>
      JSON object representing the environment variables that should be
      passed to the executor, and thus subsequently task(s).
      By default the executor will inherit the slave's environment variables.
      Example:
<pre><code>{
  "PATH": "/bin:/usr/bin",
  "LD_LIBRARY_PATH": "/usr/local/lib"
}</code></pre>
    </td>
  </tr>
  <tr>
    <td>
      --executor_registration_timeout=VALUE
    </td>
    <td>
      Amount of time to wait for an executor
      to register with the slave before considering it hung and
      shutting it down (e.g., <code>60secs</code>, <code>3mins</code>, etc)
      (default: 1mins)
    </td>
  </tr>
  <tr>
    <td>
      --executor_shutdown_grace_period=VALUE
    </td>
    <td>
      Amount of time to wait for an executor to shut down.
      (e.g., <code>60secs</code>, <code>3mins</code>, etc). (default: 5secs)
    </td>
  </tr>
  <tr>
    <td>
      --frameworks_home=VALUE
    </td>
    <td>
      Directory path prepended to relative executor URIs. (empty by default)
    </td>
  </tr>
  <tr>
    <td>
      --gc_delay=VALUE
    </td>
    <td>
      Maximum amount of time to wait before cleaning up
      executor directories (e.g., 3days, 2weeks, etc).
      <p/>
      Note that this delay may be shorter depending on
      the available disk usage. (default: 1weeks)
    </td>
  </tr>
  <tr>
    <td>
      <a name="gc_disk_headroom"></a>
      --gc_disk_headroom=VALUE
    </td>
    <td>
      Adjust disk headroom used to calculate maximum executor
      directory age. Age is calculated by:</p>
      <code>gc_delay * max(0.0, (1.0 - gc_disk_headroom - disk usage))</code>
      every <code>--disk_watch_interval</code> duration.
      <code>gc_disk_headroom</code> must be a value between 0.0 and 1.0
      (default: 0.1)
    </td>
  </tr>
  <tr>
    <td>
      --hadoop_home=VALUE
    </td>
    <td>
      Path to find Hadoop installed (for fetching framework executors from HDFS)
      (no default, look for <code>HADOOP_HOME</code> in environment or find
      hadoop on <code>PATH</code>).
    </td>
  </tr>
  <tr>
    <td>
      --hooks=VALUE
    </td>
    <td>
      A comma-separated list of hook modules to be
      installed inside master.
    </td>
  </tr>
  <tr>
    <td>
      --hostname=VALUE
    </td>
    <td>
      The hostname the agent node should report.<br>
      If left unset, the hostname is resolved from the IP address
      that the slave binds to; unless the user explicitly prevents
      that, using --no-hostname_lookup, in which case the IP itself
      is used.
    </td>
  </tr>
  <tr>
    <td>
      --[no-]hostname_lookup
    </td>
    <td>
      Whether we should execute a lookup to find out the server's hostname,
      if not explicitly set (via, e.g., `--hostname`).
      True by default; if set to 'false' it will cause Mesos
      to use the IP address, unless the hostname is explicitly set.
    </td>
  </tr>
  <tr>
    <td>
      --isolation=VALUE
    </td>
    <td>
      Isolation mechanisms to use, e.g., 'posix/cpu,posix/mem', or
      'cgroups/cpu,cgroups/mem', or network/port_mapping
      (configure with flag: --with-network-isolator to enable),
      or 'external', or load an alternate isolator module using
      the <code>--modules</code> flag. Note that this flag is only
      relevant for the Mesos Containerizer.
      (default: posix/cpu,posix/mem)
    </td>
  </tr>
  <tr>
    <td>
      --launcher=VALUE
    </td>
    <td>
      The launcher to be used for Mesos containerizer. It could either be
      'linux' or 'posix'. The Linux launcher is required for cgroups
      isolation and for any isolators that require Linux namespaces such as
      network, pid, etc. If unspecified, the slave will choose the Linux
      launcher if it's running as root on Linux.
    </td>
  </tr>
  <tr>
    <td>
      --launcher_dir=VALUE
    </td>
    <td>
      Directory path of Mesos binaries. Mesos would find health-check, fetcher,
      containerizer and executor binary files under this directory.
      (default: /usr/local/libexec/mesos)
    </td>
  </tr>
  <tr>
    <td>
      --image_providers=VALUE
    </td>
    <td>
      Comma-separated list of supported image providers, e.g., 'APPC,DOCKER'.
    </td>
  </tr>
  <tr>
    <td>
      --modules=VALUE
    </td>
    <td>
      List of modules to be loaded and be available to the internal
      subsystems.
      <p/>
      Remember you can also use the <code>file:///path/to/file</code> or
      <code>/path/to/file</code> argument value format to have the value read
      from a file.<p/>
      Use <code>--modules="{...}"</code> to specify the list of modules inline.
      <p/>
      JSON file example:
<pre><code>
{
  "libraries": [
    {
      "file": "/path/to/libfoo.so",
      "modules": [
        {
          "name": "org_apache_mesos_bar",
          "parameters": [
            {
              "key": "X",
              "value": "Y"
            }
          ]
        },
        {
          "name": "org_apache_mesos_baz"
        }
      ]
    },
    {
      "name": "qux",
      "modules": [
        {
          "name": "org_apache_mesos_norf"
        }
      ]
    }
  ]
}</code></pre>
    </td>
  </tr>
  <tr>
    <td>
      --oversubscribed_resources_interval=VALUE
    </td>
    <td>
      The slave periodically updates the master with the current estimation
      about the total amount of oversubscribed resources that are allocated
      and available. The interval between updates is controlled by this flag.
      (default: 15secs)
    </td>
  </tr>
  <tr>
    <td>
      --perf_duration=VALUE
    </td>
    <td>
      Duration of a perf stat sample. The duration must be less
      that the <code>perf_interval</code>. (default: 10secs)
    </td>
  </tr>
  <tr>
    <td>
      --perf_events=VALUE
    </td>
    <td>
      List of command-separated perf events to sample for each container
      when using the perf_event isolator. (none by default)
      <p/>
      Run command 'perf list' to see all events. Event names are
      sanitized by downcasing and replacing hyphens with underscores
      when reported in the PerfStatistics protobuf, e.g., cpu-cycles
      becomes cpu_cycles; see the PerfStatistics protobuf for all names.
    </td>
  </tr>
  <tr>
    <td>
      --perf_interval=VALUE
    </td>
    <td>
      Interval between the start of perf stat samples. Perf samples are
      obtained periodically according to <code>perf_interval</code> and the most
      recently obtained sample is returned rather than sampling on
      demand. For this reason, <code>perf_interval</code> is independent of the
      resource monitoring interval. (default: 1mins)
    </td>
  </tr>
  <tr>
    <td>
      --qos_controller=VALUE
    </td>
    <td>
      The name of the QoS Controller to use for oversubscription.
    </td>
  </tr>
  <tr>
    <td>
      --qos_correction_interval_min=VALUE
    </td>
    <td>
      The slave polls and carries out QoS corrections from the QoS
      Controller based on its observed performance of running tasks.
      The smallest interval between these corrections is controlled by
      this flag. (default: 0secs)
    </td>
  </tr>
  <tr>
    <td>
      --recover=VALUE
    </td>
    <td>
      Whether to recover status updates and reconnect with old executors.
      <p/>
      Valid values for 'recover' are
      <p/>
      reconnect: Reconnect with any old live executors.
      <p/>
      cleanup  : Kill any old live executors and exit.
      <p/>
      Use this option when doing an incompatible slave or executor upgrade.
      (default: reconnect)
    </td>
  </tr>
  <tr>
    <td>
      --recovery_timeout=VALUE
    </td>
    <td>
      Amount of time allotted for the slave to recover. If the slave takes
      longer than recovery_timeout to recover, any executors that are
      waiting to reconnect to the slave will self-terminate.
      (default: 15mins)
    </td>
  </tr>
  <tr>
    <td>
      --registration_backoff_factor=VALUE
    </td>
    <td>
      Slave initially picks a random amount of time between [0, b], where
      b = registration_backoff_factor, to (re-)register with a new master.
      <p/>
      Subsequent retries are exponentially backed off based on this
      interval (e.g., 1st retry uses a random value between [0, b * 2^1],
      2nd retry between [0, b * 2^2], 3rd retry between [0, b * 2^3] etc)
      up to a maximum of <code>1mins</code>. (default: 1secs)
    </td>
  </tr>
  <tr>
    <td>
      --resource_estimator=VALUE
    </td>
    <td>
      The name of the resource estimator to use for oversubscription.
    </td>
  </tr>
  <tr>
    <td>
      --resources=VALUE
    </td>
    <td>
      <p>
      Total consumable resources per slave. Can be provided in JSON format or as
      a semicolon-delimited list of key:value pairs, with the role optionally
      specified.
      </p><p>
      As a key:value list:
      </p><p>
      <code>name(role):value;name:value...</code>
      </p><p>
      To use JSON, pass a JSON-formatted string or use --resources=filepath to
      specify the resources via a file containing a JSON-formatted string.
      'filepath' can be of the form 'file:///path/to/file' or '/path/to/file'.
      </p><p>
      Example JSON:
</p><pre><code>[
  {
    "name": "cpus",
    "type": "SCALAR",
    "scalar": {
      "value": 24
    }
  },
  {
    "name": "mem",
    "type": "SCALAR",
    "scalar": {
      "value": 24576
    }
  }
]</code></pre>
      <p>
      See the documentation on
      <a href="/documentation/latest/attributes-resources/">Attributes and
      Resources</a> for more information.
      </p>
    </td>
  </tr>
  <tr>
    <td>
      --[no-]revocable_cpu_low_priority
    </td>
    <td>
      Run containers with revocable CPU at a lower priority than
      normal containers (non-revocable cpu). Currently only
      supported by the cgroups/cpu isolator. (default: true)
    </td>
  </tr>
  <tr>
    <td>
      --slave_subsystems=VALUE
    </td>
    <td>
      List of comma-separated cgroup subsystems to run the slave binary
      in, e.g., <code>memory,cpuacct</code>. The default is none.
      Present functionality is intended for resource monitoring and
      no cgroup limits are set, they are inherited from the root mesos
      cgroup.
    </td>
  </tr>
  <tr>
    <td>
      --[no-]strict
    </td>
    <td>
      If <code>strict=true</code>, any and all recovery errors are considered
      fatal.
      <p/>
      If <code>strict=false</code>, any expected errors (e.g., slave cannot
      recover information about an executor, because the slave died right before
      the executor registered.) during recovery are ignored and as much
      state as possible is recovered. (default: true)
    </td>
  </tr>
  <tr>
    <td>
      --[no-]switch_user
    </td>
    <td>
      If set to <code>true</code>, the agent will attempt to run tasks as
      the <code>user</code> who launched them (as defined in FrameworkInfo).
      Note that this requires <code>setuid</code> permission and that the given
      <code>user</code> exists on the agent).
      If the user does not exist, an error occurs and the task will fail.
      If set to <code>false</code>, tasks will be run as the same user as the
      Mesos agent process. (default: true)
      <b>NOTE</b> This feature is not yet supported on Windows agents, and
      therefore the flag currently does not exist on that platform.
    </td>
  </tr>
  <tr>
    <td>
      --fetcher_cache_size=VALUE
    </td>
    <td>
      Size of the fetcher cache in Bytes.
      (default: 2 GB)
    </td>
  </tr>
  <tr>
    <td>
      --fetcher_cache_dir=VALUE
    </td>
    <td>
      Parent directory for fetcher cache directories (one subdirectory
      per slave). By default this directory is held inside the work
      directory, so everything can be deleted or archived in one
      swoop, in particular during testing. However, a typical
      production scenario is to use a separate cache volume. First, it
      is not meant to be backed up. Second, you want to avoid that
      sandbox directories and the cache directory can interfere with
      each other in unpredictable ways by occupying shared space. So
      it is recommended to set the cache directory explicitly.
      (default: /tmp/mesos/fetch)
    </td>
  </tr>
  <tr>
    <td>
      --work_dir=VALUE
    </td>
    <td>
      Directory path to place framework work directories.
      (default: /tmp/mesos)
    </td>
  </tr>
</table>

*Flags available when configured with `--with-network-isolator`*

<table class="table table-striped">
  <thead>
    <tr>
      <th width="30%">
        Flag
      </th>
      <th>
        Explanation
      </th>
    </tr>
  </thead>
  <tr>
    <td>
      --ephemeral_ports_per_container=VALUE
    </td>
    <td>
      Number of ephemeral ports allocated to a container by the network
      isolator. This number has to be a power of 2.
      (default: 1024)
    </td>
  </tr>
  <tr>
    <td>
      --eth0_name=VALUE
    </td>
    <td>
      The name of the public network interface (e.g., eth0). If it is
      not specified, the network isolator will try to guess it based
      on the host default gateway.
    </td>
  </tr>
  <tr>
    <td>
      --lo_name=VALUE
    </td>
    <td>
      The name of the loopback network interface (e.g., lo). If it is
      not specified, the network isolator will try to guess it.
    </td>
  </tr>
  <tr>
    <td>
      --egress_rate_limit_per_container=VALUE
    </td>
    <td>
      The limit of the egress traffic for each container, in Bytes/s.
      If not specified or specified as zero, the network isolator will
      impose no limits to containers' egress traffic throughput.
      This flag uses the Bytes type, defined in stout.
    </td>
  </tr>
  <tr>
    <td>
      --[no-]-egress_unique_flow_per_container
    </td>
    <td>
      Whether to assign an individual flow for each container for the
      egress traffic. fq_codel qdisc is used to isolate egress traffic
      for containers. This flag is used for the 'network/port_mapping'
      isolator. Note, fq_codel qdisc is installed at root and is not
      removed after mesos slave exits. (default: false)
    </td>
  </tr>
  <tr>
    <td>
      --egress_flow_classifier_parent=root/X:Y
    </td>
    <td>
      When --egress_unique_flow_per_container is enabled, we need to install
      a flow classifier (fq_codel qdisc) on egress side. This flag specifies
      where to install it in the whole qdisc hierarchy. By default, we install
      it at root. But, for example, if you have already installed an HTB qdisc
      at root, you may want this to be installed in other place than root,
      specify an HTB class ID (X:Y) as its parent. X:Y must be hexadecimal
      numbers without "0x" prefix. Note, it is always your responsibility to
      ensure the whole qdisc hierarchy is meaningful and correct.
    </td>
  </tr>
  <tr>
    <td>
      --[no-]network_enable_socket_statistics_summary
    </td>
    <td>
      Whether to collect socket statistics summary for each container.
      This flag is used for the 'network/port_mapping' isolator.
      (default: false)
    </td>
  </tr>
  <tr>
    <td>
      --[no-]network_enable_socket_statistics_details
    </td>
    <td>
      Whether to collect socket statistics details (e.g., TCP RTT) for
      each container. This flag is used for the 'network/port_mapping'
      isolator. (default: false)
    </td>
  </tr>
</table>


## Libprocess Options

*The bundled libprocess library can be controlled with the following environment variables.*

<table class="table table-striped">
  <thead>
    <tr>
      <th width="30%">
        Variable
      </th>
      <th>
        Explanation
      </th>
    </tr>
  </thead>
  <tr>
    <td>
      LIBPROCESS_IP
    </td>
    <td>
      Sets the IP address for communication to and from libprocess.
    </td>
  </tr>
  <tr>
    <td>
      LIBPROCESS_PORT
    </td>
    <td>
      Sets the port for communication to and from libprocess.
    </td>
  </tr>
  <tr>
    <td>
      LIBPROCESS_ADVERTISE_IP
    </td>
    <td>
      If set, this provides the IP address that will be advertised to
      the outside world for communication to and from libprocess.
      This is useful, for example, for containerized tasks in which
      communication is bound locally to a non-public IP that will be
      inaccessible to the master.
    </td>
  </tr>
  <tr>
    <td>
      LIBPROCESS_ADVERTISE_PORT
    </td>
    <td>
      If set, this provides the port that will be advertised to the
      outside world for communication to and from libprocess. Note that
      this port will not actually be bound (the local LIBPROCESS_PORT
      will be), so redirection to the local IP and port must be
      provided separately.
    </td>
  </tr>
</table>


## Mesos Build Configuration Options

###The configure script has the following flags for optional features:

<table class="table table-striped">
  <thead>
    <tr>
      <th width="30%">
        Flag
      </th>
      <th>
        Explanation
      </th>
    </tr>
  </thead>
  <tr>
    <td>
      --enable-shared[=PKGS]
    </td>
    <td>
      Build shared libraries. [default=yes]
    </td>
  </tr>
  <tr>
    <td>
      --enable-static[=PKGS]
    </td>
    <td>
      Build static libraries. [default=yes]
    </td>
  </tr>
  <tr>
    <td>
      --enable-fast-install[=PKGS]
    </td>
    <td>
      Optimize for fast installation. [default=yes]
    </td>
  </tr>
  <tr>
    <td>
      --enable-libevent
    </td>
    <td>
      Use <a href="https://github.com/libevent/libevent">libevent</a>
      instead of libev for the libprocess event loop. Note that the libevent
      version 2+ development package is required. [default=no]
    </td>
  </tr>
  <tr>
    <td>
      --enable-ssl
    </td>
    <td>
      Enable <a href="/documentation/latest/ssl">SSL</a> for libprocess
      communication. Note that <code>--enable-libevent</code> is currently
      required for SSL functionality. [default=no]
    </td>
  </tr>
  <tr>
    <td>
      --disable-libtool-lock
    </td>
    <td>
      Avoid locking. Note that this might break parallel builds.
    </td>
  </tr>
  <tr>
    <td>
      --disable-java
    </td>
    <td>
      Don't build Java bindings.
    </td>
  </tr>
  <tr>
    <td>
      --disable-python
    </td>
    <td>
      Don't build Python bindings.
    </td>
  </tr>
  <tr>
    <td>
      --enable-debug
    </td>
    <td>
      Whether debugging is enabled. If CFLAGS/CXXFLAGS are set, this
      option won't change them. [default=no]
    </td>
  </tr>
  <tr>
    <td>
      --enable-optimize
    </td>
    <td>
      Whether optimizations are enabled. If CFLAGS/CXXFLAGS are set,
      this option won't change them. [default=no]
    </td>
  </tr>
  <tr>
    <td>
      --disable-bundled
    </td>
    <td>
      Configures Mesos to build against preinstalled dependencies
      instead of bundled libraries.
    </td>
  </tr>
  <tr>
    <td>
      --disable-bundled-distribute
    </td>
    <td>
      Excludes building and using the bundled distribute package in lieu of an
      installed version in <code>PYTHONPATH</code>.
    </td>
  </tr>
  <tr>
    <td>
      --disable-bundled-pip
    </td>
    <td>
      Excludes building and using the bundled pip package in lieu of an
      installed version in <code>PYTHONPATH</code>.
    </td>
  </tr>
  <tr>
    <td>
      --disable-bundled-wheel
    </td>
    <td>
      Excludes building and using the bundled wheel package in lieu of an
      installed version in <code>PYTHONPATH</code>.
    </td>
  </tr>
  <tr>
    <td>
      --disable-python-dependency-install
    </td>
    <td>
      When the python packages are installed during make install, no external
      dependencies will be downloaded or installed.
    </td>
  </tr>
</table>

### The configure script has the following flags for optional packages:

<table class="table table-striped">
  <thead>
    <tr>
      <th width="30%">
        Flag
      </th>
      <th>
        Explanation
      </th>
    </tr>
  </thead>
  <tr>
    <td>
      --with-gnu-ld
    </td>
    <td>
      Assume the C compiler uses GNU <code>ld</code>. [default=no]
    </td>
  </tr>
  <tr>
    <td>
      --with-sysroot=DIR
    </td>
    <td>
      Search for dependent libraries within <code>DIR</code>
      (or the compiler's sysroot if not specified).
    </td>
  </tr>
  <tr>
    <td>
      --with-zookeeper[=DIR]
    </td>
    <td>
      Excludes building and using the bundled ZooKeeper package in lieu of an
      installed version at a location prefixed by the given path.
    </td>
  </tr>
  <tr>
    <td>
      --with-leveldb[=DIR]
    </td>
    <td>
      Excludes building and using the bundled LevelDB package in lieu of an
      installed version at a location prefixed by the given path.
    </td>
  </tr>
  <tr>
    <td>
      --with-glog[=DIR]
    </td>
    <td>
      excludes building and using the bundled glog package in lieu of an
      installed version at a location prefixed by the given path.
    </td>
  </tr>
  <tr>
    <td>
      --with-protobuf[=DIR]
    </td>
    <td>
      Excludes building and using the bundled protobuf package in lieu of an
      installed version at a location prefixed by the given path.
    </td>
  </tr>
  <tr>
    <td>
      --with-gmock[=DIR]
    </td>
    <td>
      Excludes building and using the bundled gmock package in lieu of an
      installed version at a location prefixed by the given path.
    </td>
  </tr>
  <tr>
    <td>
      --with-curl[=DIR]
    </td>
    <td>
      Specify where to locate the curl library.
    </td>
  </tr>
  <tr>
    <td>
      --with-sasl[=DIR]
    </td>
    <td>
      Specify where to locate the sasl2 library.
    </td>
  </tr>
  <tr>
    <td>
      --with-zlib[=DIR]
    </td>
    <td>
      Specify where to locate the zlib library.
    </td>
  </tr>
  <tr>
    <td>
      --with-apr[=DIR]
    </td>
    <td>
      Specify where to locate the apr-1 library.
    </td>
  </tr>
  <tr>
    <td>
      --with-svn[=DIR]
    </td>
    <td>
      Specify where to locate the svn-1 library.
    </td>
  </tr>
  <tr>
    <td>
      --with-libevent[=DIR]
    </td>
    <td>
      Specify where to locate the libevent library.
    </td>
  </tr>
  <tr>
    <td>
      --with-ssl[=DIR]
    </td>
    <td>
      Specify where to locate the ssl library.
    </td>
  </tr>
  <tr>
    <td>
      --with-network-isolator
    </td>
    <td>
      Builds the network isolator.
    </td>
  </tr>
  <tr>
    <td>
      --with-nl[=DIR]
    </td>
    <td>
      Specify where to locate the
      <a href="https://www.infradead.org/~tgr/libnl/">libnl3</a> library,
      which is required for the network isolator.
    </td>
  </tr>
</table>

### Some influential environment variables for configure script:

Use these variables to override the choices made by `configure` or to help
it to find libraries and programs with nonstandard names/locations.

<table class="table table-striped">
  <thead>
    <tr>
      <th width="30%">
        Variable
      </th>
      <th>
        Explanation
      </th>
    </tr>
  </thead>
  <tr>
    <td>
      JAVA_HOME
    </td>
    <td>
      Location of Java Development Kit (JDK).
    </td>
  </tr>
  <tr>
    <td>
      JAVA_CPPFLAGS
    </td>
    <td>
      Preprocessor flags for JNI.
    </td>
  </tr>
  <tr>
    <td>
      JAVA_JVM_LIBRARY
    </td>
    <td>
      Full path to <code>libjvm.so</code>.
    </td>
  </tr>
  <tr>
    <td>
      MAVEN_HOME
    </td>
    <td>
      Looks for <code>mvn</code> at <code>MAVEN_HOME/bin/mvn</code>.
    </td>
  </tr>
  <tr>
    <td>
      PROTOBUF_JAR
    </td>
    <td>
      Full path to protobuf jar on prefixed builds.
    </td>
  </tr>
  <tr>
    <td>
      PYTHON
    </td>
    <td>
      Which Python interpreter to use.
    </td>
  </tr>
  <tr>
    <td>
      PYTHON_VERSION
    </td>
    <td>
      The installed Python version to use, for example '2.3'. This string will
      be appended to the Python interpreter canonical name.
    </td>
  </tr>
</table>
