blob: b6a4de8a9660f027213229748ebf9222bd04ee8a [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001#!/bin/sh /etc/rc.common
2# Copyright (C) 2017 OpenWrt.org
3# Copyright (C) 2021-2022 PurpleI2P team
4
5USE_PROCD=1
6
7START=90
8STOP=10
9
10# default params
11PROG=/usr/sbin/i2pd
12USER="i2pd"
13GROUP="i2pd"
14PIDFILE=/var/run/i2pd.pid
15DATADIR=/var/lib/i2pd
16CONFFILE=/etc/i2pd/i2pd.conf
17
18start_instance() {
19 local data_dir netdb_dir addressbook_dir cfg="$1"
20
21 config_get data_dir "$cfg" data_dir "$DATADIR"
22 config_get netdb_dir "$cfg" netdb_dir
23 config_get addressbook_dir "$cfg" addressbook_dir
24
25 ## Setting up data dir
26 if [ ! -d "$data_dir" ]; then
27 mkdir -p "$data_dir"
28 ln -s /usr/share/i2pd/certificates "$data_dir/certificates"
29 ln -s /etc/i2pd/i2pd.conf "$data_dir/i2pd.conf"
30 ln -s /etc/i2pd/tunnels.conf "$data_dir/tunnels.conf"
31 ln -s /etc/i2pd/tunnels.d "$data_dir/tunnels.d"
32 fi
33
34 if [ -n "$netdb_dir" ]; then
35 if [ ! -d "$netdb_dir" ]; then
36 mkdir -p "$netdb_dir"
37 fi
38 ln -s "$netdb_dir" "$data_dir/netDb"
39 fi
40
41 if [ -n "$addressbook_dir" ]; then
42 if [ ! -d "$addressbook_dir" ]; then
43 mkdir -p "$addressbook_dir"
44 fi
45 ln -s "$addressbook_dir" "$data_dir/addressbook"
46 fi
47
48 ## We need permissions
49 chown "$USER:$GROUP" "$data_dir"
50
51 if [ -n "$netdb_dir" ]; then
52 chown "$USER:$GROUP" "$netdb_dir"
53 fi
54
55 if [ -n "$addressbook_dir" ]; then
56 chown "$USER:$GROUP" "$addressbook_dir"
57 fi
58
59 touch "$PIDFILE"
60 chown "$USER:adm" "$PIDFILE"
61
62 procd_open_instance
63 procd_set_param command "$PROG" --datadir="$data_dir" --conf="$CONFFILE" --pidfile "$PIDFILE"
64 ## Don't know about i2pd user's HOME
65 procd_set_param env "HOME=$data_dir"
66 procd_set_param limits nofile=4096
67 procd_set_param stdout 1
68 procd_set_param stderr 1
69 procd_set_param user "$USER"
70 procd_set_param pidfile "$PIDFILE"
71 procd_close_instance
72}
73
74start_service() {
75 config_load "i2pd"
76 config_foreach start_instance "i2pd"
77}
78
79reload_service() {
80 procd_send_signal i2pd
81}