summaryrefslogtreecommitdiff
path: root/net-p2p/freenet/files/wrapper.sh
blob: e03358a34409226f45fa4d37893ad932a9775fe6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#!/bin/sh
#
# Under a BSDL license. Copyright by Mario S F Ferreira <lioux@FreeBSD.org>
# $FreeBSD$

PREFIX="%%PREFIX%%"
# java
JAVAVM_CALL="%%JAVAVM%%"
JAR_DIR="%%JAR_DIR%%"
JAR_FILES="%%JAR_FILES%%"
JAR_START="%%JAR_START%%"
# data
DATA_DIR="%%DATA_DIR%%"
SEED_FILE=seednodes.ref
# home
HOME_DIR=${HOME}/.freenet
CONFIG_FILE=freenet.conf

configure_freenet () {
  echo "Configuring FreeNet node"
  cd ${HOME_DIR} &&
  	${JAVAVM_CALL} -jar ./${JAR_START} freenet.node.Main --config "${@}" 
}

configure_java_classpath () {
  if [ -z "${CLASSPATH}" ]; then
	CLASSPATH=./freenet.jar:./freenet-ext.jar
  else
	CLASSPATH=./freenet.jar:./freenet-ext.jar:${CLASSPATH}
  fi
}

display_usage () {
  echo "Usage: ${0} [-h] [-i|-o]"
  echo 'Options:'
  echo '  -h  Display this help message'
  echo '  -c  Configure FreeNet node'
  echo '  -i  Start a FreeNet node'
  echo '  -o  Stop a FreeNet node'
  echo ''
}

prepare_configure_freenet () {
  # do we have a config file?
  if [ ! -f ${HOME_DIR}/${CONFIG_FILE} ]; then
	# add basic information prior to configuration
	echo > ${HOME_DIR}/${CONFIG_FILE}

	# select listenPort randomly
	if [ -n "${RANDOM}" ]
	then
		DEFLP=$((${RANDOM}%30000+2000))
	else
		echo "no random in shell, enter a FNP port number + <ENTER>"
		read DEFLP
	fi
	echo "listenPort=${DEFLP}" >> ${HOME_DIR}/${CONFIG_FILE}

	# point to seednodes file
	echo 'seedNodes=seednodes.ref' >> ${HOME_DIR}/${CONFIG_FILE}

	# tell FreeNet to request configuration procedure
	CONFIGURE=yes
  fi
}

prepare_home_dir () {
  # create home dir staging area
  if [ ! -d ${HOME_DIR} ]
  then
	mkdir -p ${HOME_DIR}
  fi
  # copy a seed file if none exists
  if [ ! -f ${HOME_DIR}/${SEED_FILE} ]
  then
	rm -f ${HOME_DIR}/${SEED_FILE}
	cp -f ${PREFIX}/${DATA_DIR}/${SEED_FILE} ${HOME_DIR}/${SEED_FILE}
	# avoid unnecessary reseeding
	touch -t "197001011200" ${HOME_DIR}/${SEED_FILE}
  fi
  # link the jar files
  for jar in ${JAR_FILES}
  do
	if [ ! -h ${HOME_DIR}/${jar} ]
	then
		ln -sf ${PREFIX}/${JAR_DIR}/${jar} ${HOME_DIR}/${jar}
	fi
  done
}

start_freenet () {
  echo "Starting FreeNet node"
  cd ${HOME_DIR} &&
	nice -10 ${JAVAVM_CALL} -jar ./${JAR_START} "${@}" &
  echo $! > ${HOME_DIR}/freenet.pid
  exit 0
}

stop_freenet () {
  if [ -f ${HOME_DIR}/freenet.pid ]; then
	echo "Stopping FreeNet node"
	cd ${HOME_DIR} &&
		exec kill `cat freenet.pid` &
  else
	echo "Cannot find FreeNet node"
	echo "Where is the ${HOME_DIR}/freenet.pid file?"
  fi
}

# we require at least one command line parameter
if [ $# -lt 1 ]; then
	display_usage
	exit 1
fi

# parse command line parameters
while getopts ":io" COMMAND_LINE_ARGUMENT ; do
  case "${COMMAND_LINE_ARGUMENT}" in
  c)
	CONFIGURE=yes
	;;
  h)
	display_usage
	exit 0
	;;
  i)
	START=yes
	unset STOP
	;;
  o)
	STOP=yes
	unset START
	;;
  *)
	display_usage
	exit 1
	;;
  esac
done

# always verify that home dir staging area is pristine
prepare_home_dir

# check for proper configuration
prepare_configure_freenet

# prepare java CLASSPATH
configure_java_classpath

if [ -n "${CONFIGURE}" ]; then
  configure_freenet
fi

if [ -n "${START}" ]; then
  start_freenet
fi

if [ -n "${STOP}" ]; then
  stop_freenet
fi

# we should never get this far
exit 1