summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorskydrome2015-06-01 10:21:28 -0400
committerskydrome2015-06-01 10:21:28 -0400
commit44822ddfd71ee12aa45cb9ff01eb200ec5d87f7f (patch)
tree89886691be09601c15ec2fdaea1cc7e8c3b0f771
downloadaur-44822ddfd71ee12aa45cb9ff01eb200ec5d87f7f.tar.gz
Initial commit
-rw-r--r--.SRCINFO70
-rw-r--r--PKGBUILD249
-rw-r--r--contrib.properties9
-rw-r--r--fred.properties11
-rw-r--r--freenet.ini30
-rw-r--r--freenet.install24
-rw-r--r--freenet.service13
-rw-r--r--run.sh189
-rw-r--r--wrapper.config146
9 files changed, 741 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..b146a651d9c9
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,70 @@
+pkgbase = freenet
+ pkgdesc = An encrypted network without censorship
+ pkgver = 0.7.5.1468
+ pkgrel = 2
+ url = https://downloads.freenetproject.org
+ install = freenet.install
+ arch = any
+ license = GPL2
+ checkdepends = junit
+ makedepends = java-environment
+ makedepends = unzip
+ makedepends = apache-ant
+ makedepends = apache-ant-contrib
+ makedepends = git
+ depends = java-runtime
+ depends = bcprov151
+ depends = gmp
+ depends = java-service-wrapper
+ noextract = lzma465.tar.bz2
+ noextract = league-lzmajio-0.95-0-gd38bf5c.tar.gz
+ noextract = jBitcollider-0.8.zip
+ noextract = mantissa-7.2-src.zip
+ noextract = *.jar
+ backup = opt/freenet/wrapper.config
+ backup = opt/freenet/conf/freenet.ini
+ source = git+https://github.com/freenet/fred.git#commit=ad3fc4a
+ source = git+https://github.com/freenet/contrib.git
+ source = git+https://github.com/freenet/plugin-JSTUN.git
+ source = git+https://github.com/freenet/plugin-UPnP.git
+ source = git+https://github.com/freenet/plugin-KeyUtils.git
+ source = https://downloads.freenetproject.org/alpha/opennet/seednodes.fref
+ source = WebOfTrust.jar::https://downloads.freenetproject.org/alpha/plugins/WebOfTrust/WebOfTrust-build0013.jar
+ source = https://downloads.freenetproject.org/contrib/jar/latest/commons-compress.jar
+ source = https://downloads.freenetproject.org/contrib/jar/latest/db4o.jar
+ source = https://raw.githubusercontent.com/i2p/i2p.i2p/master/core/c/jcpuid/src/jcpuid.c
+ source = https://raw.githubusercontent.com/i2p/i2p.i2p/master/core/c/jcpuid/include/jcpuid.h
+ source = fred.properties
+ source = contrib.properties
+ source = run.sh
+ source = freenet.service
+ source = freenet.ini
+ source = wrapper.config
+ source = https://downloads.sourceforge.net/project/sevenzip/LZMA%20SDK/4.65/lzma465.tar.bz2
+ source = league-lzmajio-0.95-0-gd38bf5c.tar.gz::https://codeload.github.com/league/lzmajio/legacy.tar.gz/0.95
+ source = https://downloads.sourceforge.net/project/bitcollider/jBitcollider%20%28Java%29/0.8/jBitcollider-0.8.zip
+ source = https://www.spaceroots.org/software/mantissa/mantissa-7.2-src.zip
+ sha256sums = SKIP
+ sha256sums = SKIP
+ sha256sums = SKIP
+ sha256sums = SKIP
+ sha256sums = SKIP
+ sha256sums = SKIP
+ sha256sums = c8a96950fe4c469084905a3de54a0f89e811d39e50d46b91d052ec1d2985512d
+ sha256sums = 16924be3c8f1322b659f3ff08060a43f45f2e8de6f95af28d86fe9876e79008d
+ sha256sums = bb98650344e65138d694dfa54f89b5690088cc14f42d1ace2ae0063d35f417bd
+ sha256sums = f1ecddb5395892e0b2e6282bc3a1437d06afa52758057850ecccfa0a79c45c5d
+ sha256sums = 9ec758801a9864ae10caf851ee60ed22c3ef44428e77689c203d9b890921a6d2
+ sha256sums = 24fed7935fcbfc6eb022e04abe8b9d22fda88eae8c1f73daf99e8f28a420d05f
+ sha256sums = 10ee7592556225883e11bc13019736f77ba27e5fcce8cdc82048975317ca8c8b
+ sha256sums = 3e48a77324277569b93a6e4082ddcf4303435c86ebd005594f164cb0047997b3
+ sha256sums = c449771efa8819b31565ae7e46787e9aee7afbbc4664e27a96d1fd2f2a4ca4fa
+ sha256sums = 60930e055217f885135ff016175aeebc2582dcc391ff9f6340717e20ef597ec3
+ sha256sums = ac83d727d6301e75cf1d441a1a1e72ba06ea119fa53a3bae65b3373108abf213
+ sha256sums = c935fd04dd8e0e8c688a3078f3675d699679a90be81c12686837e0880aa0fa1e
+ sha256sums = 265f7ed2dd4fecb058884d3f8974674b06e0be46131c3b2bc6a310373937d2ef
+ sha256sums = b36482ee9e919c669bb1797ff7e50f57edf505af67664e280fe1dff361861044
+ sha256sums = e438135d69139ed4fa44400f416ea73935d16afe50dfe490b7bba0602ee89476
+
+pkgname = freenet
+
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..2eeff5606c2f
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,249 @@
+# Maintainer: skydrome <skydrome at@at i2pmail do.t org>
+# Contributors:
+#
+
+#_fred=#tag=build01467 # build-1467 2014-11-23
+_fred=#commit=ad3fc4a # allow building keyutils plugin from source
+#_fred=#branch=next # git HEAD
+
+# comment out to run unit tests
+BUILDENV+=('!check')
+
+# plugins failing to build:
+# 'WebOfTrust'
+_plugins=('JSTUN' 'UPnP' 'KeyUtils')
+
+pkgname=freenet
+pkgver=0.7.5.1468
+pkgrel=2
+
+_pkgver=0.7.5
+pkgdesc="An encrypted network without censorship"
+url="https://downloads.freenetproject.org"
+license=('GPL2')
+arch=('any')
+install='freenet.install'
+
+depends=('java-runtime' 'bcprov151' 'gmp' 'java-service-wrapper')
+makedepends=('java-environment' 'unzip' 'apache-ant' 'apache-ant-contrib' 'git')
+checkdepends=('junit')
+
+backup=('opt/freenet/wrapper.config'
+ 'opt/freenet/conf/freenet.ini')
+
+# these are packages we need to download to prevent ant from
+# downloading them itself we are also going to build as much
+# as we can from source, including this array
+_deps=("https://downloads.sourceforge.net/project/sevenzip/LZMA%20SDK/4.65/lzma465.tar.bz2"
+ "league-lzmajio-0.95-0-gd38bf5c.tar.gz::https://codeload.github.com/league/lzmajio/legacy.tar.gz/0.95"
+ "https://downloads.sourceforge.net/project/bitcollider/jBitcollider%20%28Java%29/0.8/jBitcollider-0.8.zip"
+ "https://www.spaceroots.org/software/mantissa/mantissa-7.2-src.zip")
+
+noextract=('lzma465.tar.bz2'
+ 'league-lzmajio-0.95-0-gd38bf5c.tar.gz'
+ 'jBitcollider-0.8.zip'
+ 'mantissa-7.2-src.zip'
+ *."jar")
+
+# here we have only java-commons-compress and java-db4o coming
+# prebuilt by the freenetproject, the rest we attempt to build ourselves
+source=("git+https://github.com/freenet/fred.git${_fred}"
+ "git+https://github.com/freenet/contrib.git"
+ "git+https://github.com/freenet/plugin-JSTUN.git"
+ "git+https://github.com/freenet/plugin-UPnP.git"
+ "git+https://github.com/freenet/plugin-KeyUtils.git"
+ #"git+https://github.com/freenet/plugin-WebOfTrust.git"
+ "${url}/alpha/opennet/seednodes.fref"
+ "WebOfTrust.jar::${url}/alpha/plugins/WebOfTrust/WebOfTrust-build0013.jar"
+ "${url}/contrib/jar/latest/commons-compress.jar"
+ "${url}/contrib/jar/latest/db4o.jar"
+ "https://raw.githubusercontent.com/i2p/i2p.i2p/master/core/c/jcpuid/src/jcpuid.c"
+ "https://raw.githubusercontent.com/i2p/i2p.i2p/master/core/c/jcpuid/include/jcpuid.h"
+ 'fred.properties' 'contrib.properties' 'run.sh'
+ 'freenet.service' 'freenet.ini' 'wrapper.config'
+ "${_deps[@]}"
+)
+
+sha256sums=('SKIP'
+ 'SKIP'
+ 'SKIP'
+ 'SKIP'
+ 'SKIP'
+ 'SKIP'
+ 'c8a96950fe4c469084905a3de54a0f89e811d39e50d46b91d052ec1d2985512d'
+ '16924be3c8f1322b659f3ff08060a43f45f2e8de6f95af28d86fe9876e79008d'
+ 'bb98650344e65138d694dfa54f89b5690088cc14f42d1ace2ae0063d35f417bd'
+ 'f1ecddb5395892e0b2e6282bc3a1437d06afa52758057850ecccfa0a79c45c5d'
+ '9ec758801a9864ae10caf851ee60ed22c3ef44428e77689c203d9b890921a6d2'
+ '24fed7935fcbfc6eb022e04abe8b9d22fda88eae8c1f73daf99e8f28a420d05f'
+ '10ee7592556225883e11bc13019736f77ba27e5fcce8cdc82048975317ca8c8b'
+ '3e48a77324277569b93a6e4082ddcf4303435c86ebd005594f164cb0047997b3'
+ 'c449771efa8819b31565ae7e46787e9aee7afbbc4664e27a96d1fd2f2a4ca4fa'
+ '60930e055217f885135ff016175aeebc2582dcc391ff9f6340717e20ef597ec3'
+ 'ac83d727d6301e75cf1d441a1a1e72ba06ea119fa53a3bae65b3373108abf213'
+ 'c935fd04dd8e0e8c688a3078f3675d699679a90be81c12686837e0880aa0fa1e'
+ '265f7ed2dd4fecb058884d3f8974674b06e0be46131c3b2bc6a310373937d2ef'
+ 'b36482ee9e919c669bb1797ff7e50f57edf505af67664e280fe1dff361861044'
+ 'e438135d69139ed4fa44400f416ea73935d16afe50dfe490b7bba0602ee89476')
+
+pkgver() {
+ cd "$srcdir/fred"
+ echo "${_pkgver}.$(git describe |cut -d- -f3 |sed 's/build0//')"
+}
+
+prepare() {
+ cd "$srcdir/fred"
+
+ if [[ "$CARCH" = 'i686' ]]; then
+ _arch=x86
+ __arch=i386
+ else
+ _arch=x86_64
+ __arch=amd64
+ fi
+
+ rm -rf contrib
+ ln -sf ../contrib contrib
+ mkdir -p contrib/freenet-ext/{dist,lib}
+
+ # had a hard time building these two sources, we'll use the binaries
+ for dep in db4o commons-compress ;do
+ cp "$srcdir/${dep}.jar" contrib/freenet-ext/dist
+ done
+
+ # this is done to satisfy ant
+ ln -sf /usr/share/java/wrapper.jar contrib/freenet-ext/dist/
+ ln -sf /usr/share/java/{bcprov,hamcrest-core,junit}.jar lib/
+ cp "$srcdir"/{lzma465.tar.bz2,league-lzmajio-0.95-0-gd38bf5c.tar.gz,jBitcollider-0.8.zip,mantissa-7.2-src.zip} contrib/freenet-ext/lib
+
+ # we're going to compile our own c libraries
+ cd "$srcdir/contrib"
+ rm -rf NativeBigInteger/lib/net/i2p/util/*
+ rm -rf onion-fec/bin/lib/{freebsd,linux,win32}-*
+
+ cd "$srcdir/contrib/jcpuid"
+ rm -rf lib/freenet/support/CPUInformation/* include/jcpuid.h
+
+ # these are from the I2P project
+ ln -sf "$srcdir"/jcpuid.h include/
+ ln -sf "$srcdir"/jcpuid.c src/
+
+ # append wrapper.jar location to JSTUN build
+ sed -i "$srcdir/plugin-JSTUN/build.xml" \
+ -e 's|<pathelement location="${freenet-ext.location}"/>|<pathelement location="${freenet-ext.location}"/>\n<pathelement location="/usr/share/java/wrapper.jar"/>|'
+}
+
+build() {
+ source /etc/profile.d/apache-ant.sh
+ source /etc/profile.d/jre.sh
+
+ build_jbigi
+ build_jcpuid
+ build_fec
+
+ msg "Building Freenet-ext..."
+ cd "$srcdir/fred/contrib/freenet-ext"
+ ant package -propertyfile "$srcdir/contrib.properties"
+
+ msg "Building Freenet..."
+ cd "$srcdir/fred"
+ ant package-only -propertyfile "$srcdir/fred.properties" \
+ -f build-clean.xml
+
+ build_plugins
+
+ # not needed anymore
+ rm -f contrib/freenet-ext/dist/wrapper.jar
+}
+
+build_jbigi() {
+ msg "Building libjbigi..."
+ cd "$srcdir/contrib/NativeBigInteger"
+
+ _objdir='net/i2p/util'
+ CFLAGS+=" -fPIC -Wall"
+ INCLUDES="-I./jbigi/include -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux"
+ LDFLAGS="-shared -Wl,-O1,--sort-common,-z,relro,-soname,libjbigi.so -lgmp"
+ gcc -c $CFLAGS $INCLUDES jbigi/src/jbigi.c
+ gcc $LDFLAGS $INCLUDES -o lib/"$_objdir"/libjbigi-linux-none.so jbigi.o
+ plain "done"
+}
+
+build_jcpuid() {
+ msg "Building libjcpuid..."
+ cd "$srcdir/contrib/jcpuid"
+
+ _objdir='freenet/support/CPUInformation'
+ INCLUDES="-I./include -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux"
+ LDFLAGS="-shared -Wl,-O1,--sort-common,-z,relro,-soname,libjcpuid-x86-linux.so"
+ gcc $CFLAGS $LDFLAGS $INCLUDES src/jcpuid.c -o lib/"$_objdir"/libjcpuid-${_arch}-linux.so
+ plain "done"
+}
+
+build_fec() {
+ msg "Building onion-fec..."
+ cd "$srcdir/contrib/onion-fec/src/csrc"
+
+ CFLAGS+=" -I${JAVA_HOME}/include" make
+ _DEST="../../bin/lib/linux-${_arch}"
+ mkdir -p "$_DEST"
+ cp libfec*.so "$_DEST"
+ plain "done"
+}
+
+build_plugins() {
+ for plugin in ${_plugins[@]}; do
+ msg "Building Plugin ${plugin}..."
+ cd "$srcdir/plugin-${plugin}"
+ ant dist \
+ -Dfreenet-cvs-snapshot.location=../fred/dist/freenet.jar \
+ -Dfreenet-ext.location=../contrib/freenet-ext/dist/freenet-ext.jar \
+ -Djunit.location=/usr/share/java/junit.jar
+ done
+}
+
+check() {
+ cd "$srcdir/fred"
+
+ # these tests use alot of memory and can cause OOM's
+ rm -f test/freenet/client/async/{*Storage,ClientRequestSelector}Test.java
+
+ ant unit -propertyfile "$srcdir/fred.properties" \
+ -f build-clean.xml
+}
+
+package() {
+ cd "$srcdir/fred"
+
+ # freenet
+ install -dm755 "$pkgdir"/usr/bin
+ install -dm700 "$pkgdir"/run/freenet
+ install -dm750 "$pkgdir"/opt/freenet/{downloads,lib,conf/node,persistent-temp,tmp,plugins/data,user/{data,certs}}
+
+ install -m640 "$srcdir"/{wrapper.config,run.sh} "$pkgdir"/opt/freenet
+ install -m640 "$srcdir"/freenet.ini "$pkgdir"/opt/freenet/conf
+ install -m640 "$srcdir"/seednodes.fref "$pkgdir"/opt/freenet/conf/node
+ install -m640 contrib/freenet-ext/dist/* dist/freenet.jar "$pkgdir"/opt/freenet/lib
+
+ # plugins
+ for plugin in ${_plugins[@]}; do
+ install -m640 "$srcdir"/plugin-${plugin}/dist/${plugin}.jar "$pkgdir"/opt/freenet/plugins
+ done
+ install -m640 "$srcdir"/WebOfTrust.jar "$pkgdir"/opt/freenet/plugins
+
+ echo "pluginmanager.loadplugin=$(echo ${_plugins[@]}|sed 's| |;|g')" \
+ >>"$pkgdir"/opt/freenet/conf/freenet.ini
+
+ # launcher
+ chmod +x "$pkgdir"/opt/freenet/run.sh
+ ln -s /opt/freenet/run.sh "$pkgdir"/usr/bin/freenet
+
+ # systemd
+ install -dm755 "$pkgdir"/usr/lib/tmpfiles.d
+ install -Dm644 "$srcdir"/freenet.service "$pkgdir"/usr/lib/systemd/system/freenet.service
+ echo 'd /run/freenet 0700 freenet freenet' >"$pkgdir"/usr/lib/tmpfiles.d/freenet.conf
+
+ # license
+ install -dm755 "$pkgdir"/usr/share/licenses/freenet
+ install -m644 LICENSE "$pkgdir"/usr/share/licenses/freenet/LICENSE
+}
diff --git a/contrib.properties b/contrib.properties
new file mode 100644
index 000000000000..c6b4d212cc13
--- /dev/null
+++ b/contrib.properties
@@ -0,0 +1,9 @@
+javac.target.version = 1.6
+extlib.use-mirrors = local
+
+extlib.wrapper.suppress = true
+extlib.db4o.suppress = true
+extlib.lzma.suppress = false
+extlib.lzmajio.suppress = false
+extlib.mantissa.suppress = false
+extlib.commons-compress.suppress = true
diff --git a/fred.properties b/fred.properties
new file mode 100644
index 000000000000..0c2c2466ca25
--- /dev/null
+++ b/fred.properties
@@ -0,0 +1,11 @@
+javac.target.version = 1.6
+
+lib.contrib.dir = contrib/freenet-ext/dist
+
+libtest.jars = junit.jar hamcrest-core.jar
+bc.jar = bcprov.jar
+
+pmd.skip = true
+cpd.skip = true
+doc.skip = true
+findbugs.skip = true
diff --git a/freenet.ini b/freenet.ini
new file mode 100644
index 000000000000..d3323be598e5
--- /dev/null
+++ b/freenet.ini
@@ -0,0 +1,30 @@
+node.install.runDir=/opt/freenet
+node.install.cfgDir=/opt/freenet/conf
+node.install.nodeDir=/opt/freenet/conf/node
+node.install.persistentTempDir=/opt/freenet/persistent-temp
+node.install.pluginDir=/opt/freenet/plugins
+node.install.pluginStoresDir=/opt/freenet/plugins/data
+node.install.userDir=/opt/freenet/user
+node.masterKeyFile=/opt/freenet/user/master.keys
+node.install.storeDir=/opt/freenet/user/data
+node.clientThrottleFile=/opt/freenet/user/data/client-throttle.dat
+node.load.nodeThrottleFile=/opt/freenet/user/data/node-throttle.dat
+ssl.sslKeyStore=/opt/freenet/user/certs
+node.downloadsDir=/opt/freenet/downloads
+node.install.tempDir=/opt/freenet/tmp
+node.uploadAllowedDirs=all
+node.downloadAllowedDirs=all
+node.updater.enabled=false
+node.updater.updateSeednodes=true
+node.updater.autoupdate=false
+node.updater.updateInstallers=false
+node.l10n=English
+logger.dirname=/opt/freenet/logs
+logger.priority=ERROR
+fproxy.enabled=true
+fproxy.advancedModeEnabled=true
+fproxy.port=8888
+fcp.enabled=true
+fcp.port=9481
+security-levels.physicalThreatLevel=LOW
+security-levels.networkThreatLevel=NORMAL
diff --git a/freenet.install b/freenet.install
new file mode 100644
index 000000000000..91ab82eb3c5d
--- /dev/null
+++ b/freenet.install
@@ -0,0 +1,24 @@
+post_install() {
+ getent passwd freenet &>/dev/null || {
+ echo -n ">>> Creating freenet system user... "
+ useradd --system \
+ --user-group \
+ --home /opt/freenet \
+ freenet &&
+ echo "ok" || echo "fail"
+ }
+ chown -R freenet:freenet /opt/freenet /run/freenet
+ echo "Please visit http://127.0.0.1:8888/ to configure your node"
+}
+
+post_upgrade() {
+ chown -R freenet:freenet /opt/freenet /run/freenet
+}
+
+pre_remove() {
+ getent passwd freenet &>/dev/null && {
+ echo -n ">>> Removing freenet system user... "
+ userdel freenet
+ echo "ok"
+ }
+}
diff --git a/freenet.service b/freenet.service
new file mode 100644
index 000000000000..0f2f2ffcff3e
--- /dev/null
+++ b/freenet.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=An encrypted network without censorship and monitoring.
+After=network.target
+
+[Service]
+Type=forking
+User=freenet
+ExecStart=/opt/freenet/run.sh start
+ExecStop=/opt/freenet/run.sh stop
+WorkingDirectory=/opt/freenet
+
+[Install]
+WantedBy=multi-user.target
diff --git a/run.sh b/run.sh
new file mode 100644
index 000000000000..97acd33c82fa
--- /dev/null
+++ b/run.sh
@@ -0,0 +1,189 @@
+#!/bin/bash
+
+#-----------------------------------------------------------------------------
+_USER="freenet"
+WRAPPER_CMD="/usr/bin/java-service-wrapper"
+WRAPPER_CONF="/opt/freenet/wrapper.config"
+PIDDIR="/run/freenet"
+PIDFILE="$PIDDIR/freenet.pid"
+TIMEOUT=30
+#-----------------------------------------------------------------------------
+
+fail() {
+ printf "\e[1;31m>>> ERROR:\033[0m %s\n" "$*"
+ exit 1
+}
+
+check_user() {
+ if [[ "$(id -un)" != "$_USER" ]]; then
+ if [[ ! -d "$PIDDIR" ]]; then
+ install -dm700 "$PIDDIR"
+ chown ${_USER}:${_USER} "$PIDDIR"
+ fi
+ SCRIPT_PATH="$(cd $(dirname $0) && pwd)/$(basename $0)"
+ su - "$_USER" -c "${SCRIPT_PATH} $@"
+ exit $?
+ fi
+}
+
+init_vars() {
+ [[ ! -r "$WRAPPER_CONF" ]] &&
+ fail "Unable to read \$WRAPPER_CONF: ${WRAPPER_CONF}"
+ [[ ! -x "$WRAPPER_CMD" ]] &&
+ fail "Unable to find or execute \$WRAPPER_CMD: ${WRAPPER_CMD}"
+ [[ ! $(grep -E ^_USER $0) && "$EUID" = "0" ]] &&
+ fail "Attempting to start as root! Please edit $(basename $0) and set the variable \$_USER"
+ [[ "$(id -un "$_USER")" != "$_USER" ]] &&
+ fail "\$_USER does not exist: $_USER"
+ COMMAND_LINE="\"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"freenet\" wrapper.name=\"freenet\""
+}
+
+get_wrapper_pid() {
+ pgrep -u "$_USER" -f 'wrapper.name=freenet'
+}
+get_pid() {
+ pgrep -u "$_USER" -f 'jar'
+}
+
+check_if_running() {
+ unset pid
+ if [[ -f "$PIDFILE" ]]; then
+ if [[ -r "$PIDFILE" ]]; then
+ pid=$(cat "$PIDFILE")
+ #echo "debug: pid:$pid get_pid:$(get_pid)"
+ if [[ ! "$pid" ]]; then
+ pid=$(get_pid)
+ if [[ ! "$pid" ]]; then
+ echo "Removing stale pid file: $PIDFILE"
+ rm -f "$PIDFILE"
+ fi
+ else
+ [[ "$pid" != "$(get_pid)" ]] &&
+ fail "\$PIDFILE $PIDFILE differs from what is actually running!"
+ fi
+ else
+ fail "Cannot read \$PIDFILE: $PIDFILE"
+ fi
+ fi
+}
+
+_console() {
+ if [[ ! "$pid" ]]; then
+ trap '' INT QUIT
+ eval $COMMAND_LINE
+ [[ $? != 0 ]] && fail "Failed to launch the wrapper!"
+ else
+ echo "Freenet is already running"
+ fi
+}
+
+_start() {
+ if [[ ! "$pid" ]]; then
+ echo -n "Starting Freenet"
+ COMMAND_LINE+=" wrapper.daemonize=TRUE"
+ eval $COMMAND_LINE
+ [[ $? != 0 ]] && fail "Failed to launch the wrapper!"
+ i=0
+ while [[ ! "$pid" || $i < $TIMEOUT ]]; do
+ echo -n "."
+ sleep 1
+ check_if_running
+ ((i++))
+ done
+ [[ $(get_pid) ]] &&
+ echo " done" || fail "timeout: Failed to start wrapper!"
+ else
+ echo "Freenet is already running"
+ fi
+}
+
+_restart() {
+ [[ "$pid" ]] &&
+ kill -USR1 $(get_wrapper_pid) || echo "Freenet is not running"
+}
+
+_stop() {
+ if [[ "$pid" ]]; then
+ echo -n "Stopping Freenet"
+ kill -TERM $pid
+ [[ $? != 0 ]] && fail "Unable to stop Freenet: kill -TERM $pid"
+ i=0
+ while [[ "$pid" || $i > $TIMEOUT ]]; do
+ echo -n "."
+ sleep 1
+ [[ ! $(get_pid) ]] && unset pid
+ ((i++))
+ done
+ if [[ "$pid" ]]; then
+ fail "timeout: Failed to stop wrapper!"
+ else
+ echo " done"
+ [[ "$1" = 'start' ]] && _start
+ fi
+ else
+ echo "Freenet is not running."
+ fi
+}
+
+_graceful() {
+ if [[ "$pid" ]]; then
+ echo "Stopping Freenet gracefully..."
+ kill -HUP $pid
+ [[ $? != 0 ]] && fail "Unable to stop Freenet."
+ else
+ echo "Freenet is not running."
+ fi
+}
+
+_status() {
+ [[ "$pid" ]] &&
+ echo "Freenet is running: PID:$pid" || echo "Freenet is not running."
+}
+
+_dump() {
+ if [[ "$pid" ]]; then
+ echo "Dumping threads..."
+ kill -QUIT $pid
+ [[ $? != 0 ]] &&
+ fail "Failed to dump Freenet Service" || echo "Dumped Freenet Service."
+ else
+ echo "Freenet is not running."
+ fi
+}
+#-----------------------------------------------------------------------------
+
+check_user "$@"
+init_vars
+check_if_running
+
+case "$1" in
+ 'console') _console
+ ;;
+ 'start') _start
+ ;;
+ 'stop') _stop
+ ;;
+ 'graceful') _graceful
+ ;;
+ 'restart') _restart
+ ;;
+ 'status') _status
+ ;;
+ 'dump') _dump
+ ;;
+
+ *) echo "Usage: $(basename $0) [command]"
+ echo
+ echo "Commands:"
+ echo " console Launch in the current console"
+ echo " start Start in the background as a daemon process"
+ echo " stop Stop if running as a daemon or in another console"
+ echo " graceful Stop gracefully, may take up to 11 minutes for all tunnels to close"
+ echo " restart Restart the JVM"
+ echo " status Query the current status"
+ echo " dump Request a Java thread dump if running"
+ echo
+ ;;
+esac
+exit 0
+
diff --git a/wrapper.config b/wrapper.config
new file mode 100644
index 000000000000..c180b73e2066
--- /dev/null
+++ b/wrapper.config
@@ -0,0 +1,146 @@
+#encoding=UTF-8
+
+# Java Application
+wrapper.java.command=/usr/lib/jvm/default/bin/java
+
+# 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
+wrapper.java.mainclass=freenet.node.NodeStarter
+
+# Java Classpath (include wrapper.jar) Add class path elements as
+# needed starting from 1
+# Be sure there are no other duplicate classes.
+wrapper.java.classpath.1=/opt/freenet/lib/*.jar
+wrapper.java.classpath.2=/usr/share/java/*.jar
+
+# Java Library Path (location of libwrapper.so)
+wrapper.java.library.path.1=/opt/freenet/lib
+wrapper.java.library.path.2=/usr/lib/java-service-wrapper
+
+# Java Bits. On applicable platforms, tells the JVM to run in 32 or 64-bit mode.
+wrapper.java.additional.auto_bits=TRUE
+
+wrapper.java.additional.1=-Dnetworkaddress.cache.ttl=0
+wrapper.java.additional.2=-Dnetworkaddress.cache.negative.ttl=0
+# Needed for some linux distros? Shouldn't prevent using IPv6, just make it prefer IPv4?
+wrapper.java.additional.3=-Djava.net.preferIPv4Stack=true
+# You could enable this for debugging, but Freenet will use more CPU if you do.
+#wrapper.java.additional.4=-enableassertions:freenet
+# You might want to set the following line if you have changed java.maxmemory
+# wrapper.java.additional.5=-XX:MaxPermSize=
+
+# Initial Java Heap Size (in MB)
+# If a non-zero value is specified for this property then an appropriate -Xms
+# parameter will be added. The initial memory must be less than or equal to
+# the value set for the maxmemory property
+wrapper.java.initmemory=32
+
+# Maximum Java Heap Size (in MB)
+wrapper.java.maxmemory=192
+
+# Application parameters. Add parameters as needed starting from 1
+wrapper.app.parameter.1=/opt/freenet/conf/freenet.ini
+
+#********************************************************************
+# Wrapper Logging Properties
+#********************************************************************
+# Enables Debug output from the Wrapper.
+# wrapper.debug=TRUE
+# Format of output for the console. (See docs for formats)
+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.
+wrapper.logfile=/opt/freenet/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=LPTM
+
+# 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=1m
+
+# 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=5
+
+# 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=RESTART
+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
+
+wrapper.restart.reload_configuration=TRUE
+wrapper.filter.trigger.1=java.lang.OutOfMemoryError
+wrapper.filter.action.1=RESTART
+
+# give the OS 60s to clear all the old sockets / etc before restarting
+# Let's change the default from 60 to 10 seconds and see if anyone moans..
+wrapper.restart.delay=5
+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
+# Directory must exist or the wrapper will fail to start.
+wrapper.java.pidfile=/run/freenet/freenet.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=Freenet 0.7
+
+#wrapper.anchorfile=Freenet.anchor
+#wrapper.anchor.poll_interval=1
+
+# 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=077