forked from swehner/foos
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcheck
executable file
·151 lines (125 loc) · 3.2 KB
/
check
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
#!/bin/bash
REQUIRED_EXECS="play sound sox
avconv upload libav-tools
cec-client standby cec-utils
python3 foos python3
pip3 foos python3-pip
"
VC_INSTR="pushd video/player; make && popd"
PI_EXECS="/opt/vc/bin/raspivid camera -
video/player/player replay \$VC_INSTR"
GET_CONFIG="python3 -m foos.config_getter"
function ok {
echo -e "\e[32m[ OK]\e[0m" $*
}
function err {
echo -e "\e[31m[ERR]\e[0m" $*
}
function warn {
echo -e "\e[33m[WRN]\e[0m" $*
}
function suggest {
echo -e "\e[36m====> Try:" $* "\e[0m"
}
function neutral {
echo "[ ]" $*
}
function head {
echo -e "\n*" $*
}
function check_execs {
NEEDED_DEPS=""
while [ $# -gt 0 ]; do
if ! which $1 > /dev/null; then
err "$1 (needed for $2) not found!"
NEEDED_DEPS="$3 $NEEDED_DEPS"
else
ok "$1 (needed for $2) found"
fi
shift 3
done
[ -n "$NEEDED_DEPS" ] && suggest "sudo apt-get install $NEEDED_DEPS"
}
function check_pi_execs {
while [ $# -gt 0 ]; do
if [ ! -x $1 ]; then
err "$1 (needed for $2) not found"
[ "$3" != "-" ] && suggest $(eval echo $3)
else
ok "$1 (needed for $2)"
fi
shift 3
done
}
function check_replay_path {
REPLAY_PATH=$($GET_CONFIG replay_path)
P="$REPLAY_PATH"
while [ ! -d "$P" ]; do
P=$(dirname "$P")
if [ -z "$P" ]; then
err "replay_path $REPLAY_PATH is not in any existing directory"
return 1
fi
done
FSTYPE=$(stat --format="%T" --file-system $P)
if [ "$FSTYPE" == "tmpfs" ]; then
ok "$REPLAY_PATH is on a $FSTYPE"
else
err "Replay path $REPLAY_PATH should be on a tmpfs filesystem instead of $FSTYPE"
fi
if [ -w "$P" ]; then
ok "$REPLAY_PATH is writable"
else
err "Replay path $REPLAY_PATH is not writable"
fi
}
function check_gpu {
if ! which vcgencmd >/dev/null; then
neutral "vcgencmd not found, I guess you aren't running this on a RaspberryPi"
else
MEM=$(vcgencmd get_mem gpu | grep -o '[0-9]*')
REC="192"
if [ $MEM -ge $REC ]; then
ok "GPU memory set to $MEM"
else
err "GPU memory too low: $MEM - we recommend $REC or more"
suggest "sudo raspi-config # and raise the split memory setting"
fi
fi
}
function check_evdev {
if [ -r $(find /dev/input -type c | tail -n1) ]; then
ok "/dev/input seems readable io_evdev_keyboard should work"
else
warn "/dev/input isn't readable - io_evdev_keyboard won't work!"
fi
}
function test_replays {
REPLAY_FPS=$($GET_CONFIG replay_fps)
echo "Running camera..."
video/run-camera.sh &
sleep 4
kill %1
video/generate-replay.sh $REPLAY_PATH $($GET_CONFIG ignore_recent_chunks) $($GET_CONFIG long_chunks) $($GET_CONFIG short_chunks)
video/replay.sh $REPLAY_PATH/replay_short.h264 $REPLAY_FPS
}
echo "Checking environment..."
head "Binary deps:"
check_execs $REQUIRED_EXECS
head "RaspberryPi specific deps:"
check_pi_execs $PI_EXECS
head "Replay path:"
check_replay_path
head "GPU settings:"
check_gpu
head "evdev input:"
check_evdev
head "Python deps"
neutral "Can't check python3 deps for the moment - if you have issues:"
suggest "pip3 install -r requirements.txt"
head "Test Replays - press Y to test N to skip"
read -s -n 1 ANSWER
if [ "$ANSWER" == "y" ]; then
test_replays
fi
head "Finished!"