#encoding=UTF-8
#********************************************************************
# Wrapper Properties
#
# WARNING - for any changes to take effect, you must completely
# stop the router and the wrapper. Clicking 'Restart' on your
# router console will NOT reread this file! You must
# click "Shutdown", wait 11 minutes, then start i2p.
#
# WARNING - The wrapper is NOT run (and this file is not used)
# if you start I2P with the 'no window' icon on Windows, or
# with the runplain.sh script on Linux. Use the 'restartable'
# icon on Windows or the i2prouter script on Linux to run the wrapper.
#
# NOTE - Directory organization:
# The standard I2P Installation will set up a "split" directory structure
# with code in the install directory, data and configuration files in the
# user's home directory, and temporary files in the system temporary directory.
# To set up a single-directory "portable" installation suitable for
# a USB stick, make several changes specified below (search for PORTABLE).
#
# NOTE - The izpack installer performs variable subsitiution on this
# file upon installation. If you did not use izpack, you must
# find and replace all instances of (dollar)INSTALL_PATH and
# (dollar)SYSTEM_java_io_tmpdir with appropriate values
# (perhaps . and /var/tmp, respectively)
#
#********************************************************************
# Java Application
wrapper.java.command=/usr/local/jdk-17/bin/java
#  Specify a specific java binary:
#set.JAVA_HOME=/java/path
#wrapper.java.command=%JAVA_HOME%/bin/java
# Gentoo uses the following:
#wrapper.java.command=/etc/java-config-2/current-system-vm/bin/java
#
# Tell the Wrapper to log the full generated Java command line.
#wrapper.java.command.loglevel=INFO
##
## PORTABLE installation:
# A portable Java installation can be configured thusly:
#set.JAVA_HOME=C:\path\to\your\portable\java\installation
#wrapper.java.command=%JAVA_HOME\bin\java.exe
##

# Java Main class.  This class must implement the WrapperListener interface
#  or guarantee that the WrapperManager class is initialized.  Helper
#  classes are provided to do this for you.  See the Integration section
#  of the documentation for details.
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp

# Java Classpath (include wrapper.jar)  Add class path elements as
#  needed starting from 1
#
# Doing it this way means we can add new apps without asking people
# to update their wrapper.config.
# The downside is that we lose control over classpath order,
# This is fine for new installs (where the uninstall jars
# copy.jar, delete.jar, and exec.jar containing duplicate FileUtil
# classes, or all the classes of i2p.jar, are in a different directory).
# Be sure there are no other duplicate classes.
#
wrapper.java.classpath.1=/usr/local/share/i2p/lib/*.jar
#  uncomment this to use the system classpath as well (e.g. to get tools.jar)
wrapper.java.classpath.2=/usr/local/share/java/classes/*.jar

# Java Library Path (location of Wrapper.DLL or libwrapper.so)
wrapper.java.library.path.1=/usr/local/lib/tanukiwrapper
wrapper.java.library.path.2=/usr/local/share/i2p/lib

# Java Bits.  On applicable platforms, tells the JVM to run in 32 or 64-bit mode.
wrapper.java.additional.auto_bits=FALSE

# Java Additional Parameters
wrapper.java.additional.1=-DloggerFilenameOverride=logs/log-router-@.txt
wrapper.java.additional.2=-Di2p.dir.base=/usr/local/share/i2p
wrapper.java.additional.3=-Di2p.dir.app=/var/i2p
wrapper.java.additional.4=-Di2p.dir.config=/var/i2p
wrapper.java.additional.5=-Di2p.dir.router=/var/i2p

# Suppress JNI warning in JRE 24+, and eventual restriction
# See https://openjdk.org/jeps/472
# This will fail on JRE 11 or lower, works on JRE 17+
#wrapper.java.additional.3=--enable-native-access=ALL-UNNAMED
# Alternative that _may_ work on all JRE versions:
#set.JDK_JAVA_OPTIONS=--enable-native-access=ALL-UNNAMED

# Prevent the JVM from exporting stats (and thereby causing hundreds of
# ms long pauses during GC)
# http://www.evanjones.ca/jvm-mmap-pause.html
#wrapper.java.additional.3=-XX:+PerfDisableSharedMem

# On some IPv6 enabled systems, I2P and other network-enabled java applications
# may fail to start. For examples see
# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=560044.
# Two things that may help if you experience this issue
# 1) "echo 0 > /proc/sys/net/ipv6/bindv6only" as root; or
# 2) uncomment the next two lines:
#wrapper.java.additional.3=-Djava.net.preferIPv4Stack=true
#wrapper.java.additional.4=-Djava.net.preferIPv6Addresses=false

# Jetty says this is a security risk
# Uncommenting this won't help as the router forces it to true
# If you really need this, you have to set it in jetty.xml
# somehow - not sure exactly but here's a clue:
# org.mortbay.util.FileResource.setCheckAliases(false)
# wrapper.java.additional.8=-Dorg.mortbay.util.FileResource.checkAliases=false
# PORTABLE installation:
# uncomment the following
#wrapper.java.additional.3=-Di2p.dir.pid=$INSTALL_PATH
#wrapper.java.additional.4=-Di2p.dir.temp=$INSTALL_PATH
#wrapper.java.additional.5=-Di2p.dir.config=$INSTALL_PATH
#
# Uncomment this for better performance.
# If it doesn't work, server mode is not available in your JVM.
# This may not be required if your machine is already "server-class".
# See http://java.sun.com/j2se/1.5.0/docs/guide/vm/server-class.html
#wrapper.java.additional.5=-server

# Initial Java Heap Size (in MB)
#wrapper.java.initmemory=4

# Maximum Java Heap Size (in MB)
# The JVM's default is 64MB, and I2P can work fine in that, but to handle
# lots of I2PSnark activity in the same JVM, increasing the default max heap
# size should help.  Feel free to reduce this if not using I2PSnark in the jvm
# High-bandwidth routers may need to increase to 1024 or more.
#
# WARNING - for any changes to take effect, you must completely
# stop the router and the wrapper. Clicking 'Restart' on your
# router console will NOT reread this file! You must
# click "Shutdown", wait 11 minutes, then start i2p.
#
wrapper.java.maxmemory=512

# Application parameters.  Add parameters as needed starting from 1
wrapper.app.parameter.1=net.i2p.router.Router

#********************************************************************
# Wrapper Logging Properties
#********************************************************************
# Enables Debug output from the Wrapper.
# wrapper.debug=TRUE
# Format of output for the console. See below or https://wrapper.tanukisoftware.com/doc/english/prop-logfile-format.html
wrapper.console.format=PM

# Log Level for console output.  (See docs for log levels)
wrapper.console.loglevel=INFO

# Log file to use for wrapper output logging.
# You may wish to change this.
# NOTE: On Linux/Mac this is overridden in the i2prouter script; changes here will have no effect.
# System temp directory:
wrapper.logfile=$SYSTEM_java_io_tmpdir/wrapper.log
# PORTABLE installation:
# Use the following instead. I2P will find the logfile here,
# no need for a wrapper.java.additional line too.
#wrapper.logfile=$INSTALL_PATH/wrapper.log

# Format of output for the log file.
# The format consists of the tokens 'L' for log level, 'P' for prefix, 'D' for thread,
# 'T' for time, 'Z' for millisecond time, and 'M' for message
# Unfortunately the log timezone cannot be changed, see
# http://www.nabble.com/Log-message-timezone-td23651317.html
wrapper.logfile.format=TM

# Log Level for log file output.  (See docs for log levels)
wrapper.logfile.loglevel=INFO

# Maximum size that the log file will be allowed to grow to before
#  the log is rolled. Size is specified in bytes.  The default value
#  of 0, disables log rolling.  May abbreviate with the 'k' (kb) or
#  'm' (mb) suffix.  For example: 10m = 10 megabytes.
wrapper.logfile.maxsize=4m

# Maximum number of rolled log files which will be allowed before old
#  files are deleted.  The default value of 0 implies no limit.
wrapper.logfile.maxfiles=2

# Log Level for sys/event log output.  (See docs for log levels)
wrapper.syslog.loglevel=NONE

# these will shut down or crash the JVM
wrapper.signal.mode.usr1=IGNORE
wrapper.signal.mode.usr2=IGNORE

# choose what to do if the JVM kills itself based on the exit code
wrapper.on_exit.default=SHUTDOWN
wrapper.on_exit.0=SHUTDOWN
wrapper.on_exit.1=SHUTDOWN
# OOM
wrapper.on_exit.10=RESTART
# graceful shutdown
wrapper.on_exit.2=SHUTDOWN
# hard shutdown
wrapper.on_exit.3=SHUTDOWN
# hard restart
wrapper.on_exit.4=RESTART
# hard restart
wrapper.on_exit.5=RESTART

# the router may take a few seconds to save state, etc
wrapper.jvm_exit.timeout=60

# give the OS 60s to clear all the old sockets / etc before restarting
# Let's change the default from 60 to 15 seconds and see if anyone moans..
wrapper.restart.delay=15

wrapper.ping.interval=300
# The ping timeout must be at least 5 seconds longer than the value of wrapper.ping.interval.
# Extend this if you are getting 'JVM appears hung' shutdowns.
wrapper.ping.timeout=320

# use the wrapper's internal timer thread.  otherwise this would
# force a restart of the router during daylight savings time as well
# as any time that the OS clock changes
wrapper.use_system_time=false

# pid file for the JVM
# If you plan to have multiple wrappers running on the same machine,
# you should copy this file, change the location or file name,
# and edit the i2prouter script to change the WRAPPER_CONF setting
# to point to the new wrapper.config location.
# Windows users may wish to uncomment.
# Linux/Mac users, do not set here, see settings in the i2prouter script.
# Directory must exist or the wrapper will fail to start.
# System temp directory:
#wrapper.java.pidfile=$SYSTEM_java_io_tmpdir/routerjvm.pid
# PORTABLE installation:
# Use the following instead.
#wrapper.java.pidfile=$INSTALL_PATH/routerjvm.pid
# pid file for the service monitoring the JVM
#
# From i2prouter:
#
#     PIDDIR="."
#     APP_NAME="i2p"
#     PIDFILE="$PIDDIR/$APP_NAME.pid"
#
# This means i2prouter looks for './i2p.pid'.
# See comments above for wrapper.java.pidfile
# Windows users may wish to uncomment.
# Linux/Mac users, do not set here, see settings in the i2prouter script.
# Directory must exist or the wrapper will fail to start.
# System temp directory:
#wrapper.pidfile=$SYSTEM_java_io_tmpdir/i2p.pid
# PORTABLE installation:
# Use the following instead.
#wrapper.pidfile=$INSTALL_PATH/i2p.pid

#********************************************************************
# Wrapper General Properties
#********************************************************************
# Allow for the use of non-contiguous numbered properties
wrapper.ignore_sequence_gaps=TRUE

# Title to use when running as a console
wrapper.console.title=I2P Service

# Set permissions used when creating files
# See http://wrapper.tanukisoftware.com/doc/english/prop-umask.html
# for a detailed explanation of these settings.
wrapper.umask=0022
wrapper.java.umask=0022
wrapper.logfile.umask=0077

#********************************************************************
# Wrapper NT Service Properties
#********************************************************************
# WARNING - Do not modify any of these properties when an application
#  using this configuration file has been installed as a service.
#  Please uninstall the service before modifying this section.  The
#  service can then be reinstalled.

# Name of the service
wrapper.ntservice.name=i2p

# Display name of the service
wrapper.ntservice.displayname=I2P Service

# Description of the service
wrapper.ntservice.description=The I2P router service

# Service dependencies.  Add dependencies as needed starting from 1
wrapper.ntservice.dependency.1=

# Mode in which the service is installed.  AUTO_START or DEMAND_START
wrapper.ntservice.starttype=AUTO_START

# Allow the service to interact with the desktop.
wrapper.ntservice.interactive=false

# http://wrapper.tanukisoftware.com/doc/english/prop-check-deadlock.html
# requires wrapper 3.5.0 or higher
# interval is seconds
wrapper.check.deadlock=TRUE
wrapper.check.deadlock.interval=3699
wrapper.check.deadlock.action=DUMP,RESTART
wrapper.check.deadlock.output=FULL
