-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsetup.sh
executable file
·170 lines (146 loc) · 3.82 KB
/
setup.sh
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
164
165
166
167
168
169
170
#!/bin/bash
# Script calls sudo itself so it should not be run as root
if [ "$EUID" == 0 ]; then
echo "Do not run this script as root!"
exit 1
fi
arg_new=0
arg_packages=0
arg_venv=0
arg_frp=0
arg_sensors=0
arg_processor=0
for arg in "$@"; do
if [[ "$arg" == "--new" ]]; then
arg_new=1
elif [[ "$arg" == "--packages" ]]; then
arg_packages=1
elif [[ "$arg" == "--venv" ]]; then
arg_venv=1
elif [[ "$arg" == "--frp" ]]; then
arg_frp=1
elif [[ "$arg" == "--sensors" ]]; then
arg_sensors=1
elif [[ "$arg" == "--processor" ]]; then
arg_processor=1
fi
done
#
# Set up Environment
#
THIS_HOSTNAME=$(hostname)
THIS_LOCATION="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
cd $THIS_LOCATION
source .env
#
# Create DIRS
#
if [[ $arg_new -eq 1 ]]; then
mkdir -p $PAROS_DATA_LOCATION
mkdir -p $PAROS_FRP_LOCATION
fi
#
# Install APT Packages
#
if [[ $arg_new -eq 1 ]] || [[ $arg_packages -eq 1 ]]; then
sudo apt install python3-venv python3-dev prometheus-node-exporter
fi
#
# Python Setup
#
if [[ $arg_new -eq 1 ]] || [[ $arg_venv -eq 1 ]]; then
python3 -m venv $PAROS_VENV_LOCATION
source $PAROS_VENV_LOCATION/bin/activate
pip install -r requirements.txt
fi
#
# FRPC
#
if [[ $arg_new -eq 1 ]] || [[ $arg_frp -eq 1 ]]; then
FRP_DOWNLOAD="https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_arm64.tar.gz"
wget -nv $FRP_DOWNLOAD -O /tmp/frp.tar.gz
tar -xf /tmp/frp.tar.gz -C /tmp
sudo cp /tmp/frp*/frpc /usr/local/bin/
sudo chmod +x /usr/local/bin/frpc
rm -rf /tmp/frp*
cat > $PAROS_FRP_LOCATION/run.toml << EOF
serverAddr = "$PAROS_FRP_HOST"
serverPort = $PAROS_FRP_PORT
auth.token = "$PAROS_FRP_TOKEN"
[[proxies]]
name = "${THIS_HOSTNAME}_ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = $((10000 + $PAROS_FRP_OFFSET))
[[proxies]]
name = "${THIS_HOSTNAME}_prometheus"
type = "tcp"
localIP = "127.0.0.1"
localPort = 9100
remotePort = $((11000 + $PAROS_FRP_OFFSET))
EOF
sudo tee /etc/systemd/system/frpc.service > /dev/null << EOF
[Unit]
Description=FRPC Daemon
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=frpc --config=$PAROS_FRP_LOCATION/run.toml
Restart=always
RestartSec=10
User=pi
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable frpc.service
fi
#
# Sensor Daemons
#
if [[ $arg_new -eq 1 ]] || [[ $arg_sensors -eq 1 ]]; then
jq -c '.sensors[]' sensor_configs/$THIS_HOSTNAME.json | while read -r sensor; do
driver=$(echo "$sensor" | jq -r '.driver')
sensor_id=$(echo "$sensor" | jq -r '.sensor_id')
args=$(echo "$sensor" | jq -r '.args')
sudo tee /etc/systemd/system/paros-sampler-$sensor_id.service > /dev/null << EOF
[Unit]
Description=Paros Sampler $sensor_id
After=network-online.target,time-sync.target
Wants=network-online.target,time-sync.target
[Service]
WorkingDirectory=$THIS_LOCATION
ExecStart=$PAROS_VENV_LOCATION/bin/python $THIS_LOCATION/paros_sensors/$driver $sensor_id $args
Restart=always
RestartSec=10
User=pi
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable paros-sampler-$sensor_id.service
done
fi
#
# Processor Daemon
#
if [[ $arg_new -eq 1 ]] || [[ $arg_processor -eq 1 ]]; then
sudo sudo tee /etc/systemd/system/paros-processor.service > /dev/null << EOF
[Unit]
Description=Paros Processor
After=network-online.target,time-sync.target
Wants=network-online.target,time-sync.target
[Service]
WorkingDirectory=$THIS_LOCATION
ExecStart=$PAROS_VENV_LOCATION/bin/python $THIS_LOCATION/processor.py
Restart=always
RestartSec=10
User=pi
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable paros-processor.service
echo "DONE. Reboot node!"
fi