[packages] utils/boxbackup: Added boxbackup. Currently only the server is fully...
[packages.git] / utils / boxbackup / files / bbstored.sh
1 #!/bin/sh
2 # Copyright (C) 2011 Openwrt.org
3 # Copyright (C) 2011 Daniel Dickinson <openwrt@cshore.neomailbox.net>
4
5 BXBK_CONFIG_PATH=/var/etc/boxbackup
6 PID_FILE=/var/run/bbstored.pid
7
8 EXTERNAL_CONFIG=0
9
10 EXTERNAL_CONF_FILE=
11 RUNAS_USER=
12 RUNAS_GROUP=
13 BXBK_RAIDFILE_CONF=
14
15 bbstored_global() {
16         local cfg="$1"
17         local get_config="$2"
18
19         local external_config
20         local raidfileconf
21         local user
22         local group
23         local config_path
24         local pidfile
25         local accountdb
26         local extended_logging
27         local housekeep_time
28         local address
29         local certfile
30         local keyfile
31         local cafile
32
33         config_get external_config "$cfg" external_config
34         if [ -n "$external_config" ]; then
35                 EXTERNAL_CONFIG=1
36                 EXTERNAL_CONF_FILE="$external_config"
37         fi
38
39         config_get config_path "$cfg" config_path
40         [ -n "$config_path" ] && {
41                 BXBK_CONFIG_PATH="$config_path"
42         }
43
44         [ "$get_config" = "1" ] && return 0
45         [ -z "$BXBK_CONFIG_FILE" ] && return 1
46         
47         rm -f "$BXBK_CONFIG_FILE"
48         touch "$BXBK_CONFIG_FILE"
49
50         config_get raidfileconf "$cfg" raidfileconf "$BXBK_CONFIG_PATH/raidfile.conf"
51         echo "RaidFileConf = $raidfileconf" >>$BXBK_CONFIG_FILE
52         BXBK_RAIDFILE_CONF="$raidfileconf"
53
54         config_get accountdb "$cfg" accountdb "/etc/bbstored/accounts.txt"
55         echo "AccountDatabase = $accountdb" >>$BXBK_CONFIG_FILE
56         [ ! -r "$accountdb" ] && {
57                 echo "Account database missing"
58                 NORUN=1
59                 return 1
60         }
61
62         local extlog
63         config_get extended_logging "$cfg" extended_logging 1
64         if [ "$extended_logging" = "1" ]; then
65                 extlog=yes
66         else
67                 extlog=no
68         fi
69         echo "ExtendedLogging = $extlog" >>$BXBK_CONFIG_FILE
70
71         config_get housekeep_time "$cfg" housekeep_time 900
72         echo "TimeBetweenHousekeeping = $housekeep_time" >>$BXBK_CONFIG_FILE    
73
74         echo "" >>$BXBK_CONFIG_FILE
75         echo "Server" >>$BXBK_CONFIG_FILE
76         echo "{" >>$BXBK_CONFIG_FILE
77
78         config_get user "$cfg" user 
79         config_get group "$cfg" group
80         [ -n "$user" ] && [ "$group" ] && {
81                 RUNAS_USER=$user
82                 RUNAS_GROUP=$group
83         }
84         echo "    User = ${RUNAS_USER:-nobody}" >>$BXBK_CONFIG_FILE
85         
86         config_get address "$cfg" address
87         [ -z "$address" ] && NORUN=1
88
89         echo "    ListenAddresses = inet:$address" >>$BXBK_CONFIG_FILE
90         
91         config_get certfile "$cfg" certfile
92         [ -z  "$certfile" ] && NORUN=1
93
94         echo "    CertificateFile = $certfile" >>$BXBK_CONFIG_FILE
95
96         config_get keyfile "$cfg" keyfile
97         [ -z  "$keyfile" ] && NORUN=1
98
99         echo "    PrivateKeyFile = $keyfile" >>$BXBK_CONFIG_FILE
100
101         config_get cafile "$cfg" cafile
102         [ -z  "$cafile" ] && NORUN=1
103
104         echo "    TrustedCAsFile = $cafile" >>$BXBK_CONFIG_FILE
105
106         config_get pidfile "$cfg" pidfile 
107         [ -n "$pidfile" ] && {
108                 PID_FILE="$pidfile"
109         }
110         echo "    PidFile = $PID_FILE" >>$BXBK_CONFIG_FILE
111
112         echo "}" >>$BXBK_CONFIG_FILE
113 }
114
115 raidfile_section() {
116         local cfg="$1"
117
118         [ -z "$BXBK_RAIDFILE_CONF" ] && return 1
119         rm -f "$BXBK_RAIDFILE_CONF"
120         touch "$BXBK_RAIDFILE_CONF"
121         
122         local setnum
123         local blocksize
124         local path
125         
126         config_get setnum "$cfg" setnum
127         [ -z "$setnum" ] && return 1
128
129         config_get blocksize "$cfg" blocksize
130
131         config_get path "$cfg" path
132         [ -z "$path" ] && return 1
133
134         echo "disc${setnum}" >>$BXBK_RAIDFILE_CONF
135         echo "{" >>$BXBK_RAIDFILE_CONF
136         echo "    SetNumber = ${setnum}" >>$BXBK_RAIDFILE_CONF
137         [ -n "$blocksize" ] && echo "    BlockSize = ${blocksize}" >>$BXBK_RAIDFILE_CONF
138         for i in 0 1 2; do
139                 echo "    Dir${i} = $path" >>$BXBK_RAIDFILE_CONF
140         done
141
142         echo "}" >>$BXBK_RAIDFILE_CONF
143
144 }
145
146 create_config() {
147         config_load bbstored
148         config_foreach bbstored_global bbstored 1
149
150         if [ "$EXTERNAL_CONFIG" -eq 0 ]
151         then
152                 mkdir -p "$BXBK_CONFIG_PATH/bbstored"
153                 BXBK_CONFIG_FILE="$BXBK_CONFIG_PATH/bbstored.conf"
154                 touch "$BXBK_CONFIG_FILE"
155
156                 config_load bbstored
157                 config_foreach bbstored_global bbstored
158                 config_foreach raidfile_section raidfile
159
160                 chown -R ${RUNAS_USER:-nobody}:${RUNAS_GROUP:-nogroup} "$BXBK_CONFIG_PATH"
161         fi
162 }
163