-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathinstall
More file actions
executable file
·204 lines (145 loc) · 7.2 KB
/
install
File metadata and controls
executable file
·204 lines (145 loc) · 7.2 KB
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
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
#!/bin/bash
if [ $USER != "root" ]; then
echo "need root privilege"
exit 0
fi
HW_NAME=$1
if [ "$HW_NAME" = "" ]; then
echo "usage: sudo ./install [HW_NAME]"
exit 1
fi
if [ ! -d "HomeworkCodes/$HW_NAME" ]; then
echo "directory doesn't exist"
exit 1
fi
H_HW_NAME="h_$HW_NAME"
HW_NUM=$(HomeworkInspector/get_setting_value.py HomeworkCodes/$HW_NAME/homework_inspector_config HW_NUM)
HW_TITLE=$(HomeworkInspector/get_setting_value.py HomeworkCodes/$HW_NAME/homework_inspector_config HW_TITLE)
echo 'HW_NUM = '$HW_NUM
echo 'HW_TITLE = '$HW_TITLE
if [[ "$HW_NUM" = "NOT_FOUND" || "$HW_TITLE" = "NOT_FOUND" ]]; then
echo 'error!'
exit 1
fi
VALGRIND_PATH=/usr/bin
#VALGRIND_PATH=/usr/local/valgrind_coc/bin
function replace_tag() {
awk -vHW_NAME="$HW_NAME" '{gsub("<!CODESENSOR_HW_NAME!>",HW_NAME);print $0}' $1 > $1.tmp.replacetag
mv -f $1.tmp.replacetag $1
awk -vHW_NUM="$HW_NUM" '{gsub("<!CODESENSOR_HW_NUM!>",HW_NUM);print $0}' $1 > $1.tmp.replacetag
mv -f $1.tmp.replacetag $1
awk -vHW_TITLE="$HW_TITLE" '{gsub("<!CODESENSOR_HW_TITLE!>",HW_TITLE);print $0}' $1 > $1.tmp.replacetag
mv -f $1.tmp.replacetag $1
}
cp $VALGRIND_PATH/valgrind $VALGRIND_PATH/valgrind.safe
chcon -t homework_exec_t $VALGRIND_PATH/valgrind.safe
mkdir /usr/bin/HomeworkInspector > /dev/null 2>&1
cp -f tools/valgrind_zombie_hunter.py /usr/bin/HomeworkInspector/
# /usr/bin/HomeworkInspector
rm -rf /usr/bin/HomeworkInspector/{$HW_NAME,$H_HW_NAME}
mkdir /usr/bin/HomeworkInspector/$HW_NAME > /dev/null 2>&1
cp -f HomeworkInspector/build_script_phase0 /usr/bin/HomeworkInspector/$HW_NAME
cp -f HomeworkInspector/build_script_phase1 /usr/bin/HomeworkInspector/$HW_NAME
cp -f HomeworkInspector/init_script /usr/bin/HomeworkInspector/$HW_NAME
cp -f HomeworkInspector/reliable_wrapper.py /usr/bin/HomeworkInspector/$HW_NAME
cp -f HomeworkInspector/progress_log.py /usr/bin/HomeworkInspector/$HW_NAME
cp -f HomeworkInspector/callgrind_annotate_filter.py /usr/bin/HomeworkInspector/$HW_NAME
cp -f HomeworkInspector/reliable_wrapper.py /usr/bin/HomeworkInspector/$HW_NAME
cp -f HomeworkInspector/if_setting_has.py /usr/bin/HomeworkInspector/$HW_NAME
cp -f HomeworkInspector/get_setting_value.py /usr/bin/HomeworkInspector/$HW_NAME
cp -p HomeworkInspector/purge_old_submissions.py /usr/bin/HomeworkInspector/$HW_NAME
cp -p HomeworkInspector/valgrind.memcheck.supp /usr/bin/HomeworkInspector/$HW_NAME
touch /usr/bin/HomeworkInspector/$HW_NAME/code_blank.h
cd HomeworkInspector/src/
make all
cd ../../
cp -f HomeworkInspector/src/HomeworkInspector /usr/bin/HomeworkInspector/$HW_NAME
cp -f HomeworkInspector/src/test_target /usr/bin/HomeworkInspector/$HW_NAME
mkdir /usr/bin/HomeworkInspector/$HW_NAME/skeleton_code
cp -f HomeworkCodes/$HW_NAME/skeleton/{input.txt,output.txt.gold,verify.sh,verifier.py} /usr/bin/HomeworkInspector/$HW_NAME/skeleton_code/
dos2unix -q /usr/bin/HomeworkInspector/$HW_NAME/skeleton_code/verify.sh
dos2unix -q /usr/bin/HomeworkInspector/$HW_NAME/skeleton_code/verifier.py
chmod 700 /usr/bin/HomeworkInspector/$HW_NAME/*
chmod 700 /usr/bin/HomeworkInspector/$HW_NAME/skeleton_code/*
chmod 755 /usr/bin/HomeworkInspector/$HW_NAME/HomeworkInspector
chcon -t homework_inspector_exec_t /usr/bin/HomeworkInspector/$HW_NAME/HomeworkInspector
chmod u+s /usr/bin/HomeworkInspector/$HW_NAME/HomeworkInspector
cp -f HomeworkScoreboard/CreateScoreboard.php /usr/bin/HomeworkInspector/$HW_NAME/
replace_tag /usr/bin/HomeworkInspector/$HW_NAME/CreateScoreboard.php
chmod 755 /usr/bin/HomeworkInspector/$HW_NAME/CreateScoreboard.php
#cp -f HomeworkScoreboard/CreateScoreboard_v2.php /usr/bin/HomeworkInspector/$HW_NAME/
#replace_tag /usr/bin/HomeworkInspector/$HW_NAME/CreateScoreboard_v2.php
#chmod 755 /usr/bin/HomeworkInspector/$HW_NAME/CreateScoreboard_v2.php
cp -f HomeworkScoreboard/*.ttf /usr/bin/HomeworkInspector/$HW_NAME/
cp -f HomeworkScoreboard/TextToImage.php /usr/bin/HomeworkInspector/$HW_NAME/
replace_tag /usr/bin/HomeworkInspector/$HW_NAME/TextToImage.php
chmod 755 /usr/bin/HomeworkInspector/$HW_NAME/TextToImage.php
cp -frs /usr/bin/HomeworkInspector/$HW_NAME /usr/bin/HomeworkInspector/$H_HW_NAME
if [[ -f HomeworkCodes/$HW_NAME/skeleton/hidden_input.txt ]] && [[ -f HomeworkCodes/$HW_NAME/skeleton/hidden_output.txt.gold ]]; then
echo "hidden_input.txt & hidden_output.txt.gold found"
rm -f /usr/bin/HomeworkInspector/$H_HW_NAME/skeleton_code/{input.txt,output.txt.gold}
cp -f HomeworkCodes/$HW_NAME/skeleton/hidden_input.txt /usr/bin/HomeworkInspector/$H_HW_NAME/skeleton_code/input.txt
cp -f HomeworkCodes/$HW_NAME/skeleton/hidden_output.txt.gold /usr/bin/HomeworkInspector/$H_HW_NAME/skeleton_code/output.txt.gold
chmod 700 /usr/bin/HomeworkInspector/$H_HW_NAME/skeleton_code/{input.txt,output.txt.gold}
else
echo "no hidden_input & output found, using input.txt & output.txt.gold"
fi
# /var/www/html
mkdir /var/www/html/$HW_NAME/ > /dev/null 2>&1
cp -fR HomeworkInspector_php/* /var/www/html/$HW_NAME/
cp -fR HomeworkScoreboard/CreateScoreboard_release.html /var/www/html/$HW_NAME/
replace_tag /var/www/html/$HW_NAME/config.php
replace_tag /var/www/html/$HW_NAME/upload.php
# /var/homeworks
mkdir /var/homeworks > /dev/null 2>&1
mkdir /var/homeworks/{$HW_NAME,$H_HW_NAME} > /dev/null 2>&1
mkdir /var/homeworks/$HW_NAME/config > /dev/null 2>&1
mkdir /var/homeworks/{$HW_NAME,$H_HW_NAME}/queue > /dev/null 2>&1
rm -rf /var/homeworks/$HW_NAME/customized_templates
cp -fR customized_templates /var/homeworks/$HW_NAME/
cp HomeworkCodes/$HW_NAME/skeleton/data.hpp /var/homeworks/$HW_NAME/customized_templates/cpp_shm/
cp -Rf HomeworkCodes/$HW_NAME/homework_inspector_config /var/homeworks/$HW_NAME/config/
ln -fs /var/homeworks/$HW_NAME/config /var/homeworks/$H_HW_NAME
rm -rf /var/homeworks/$H_HW_NAME/customized_templates
cp -frs /var/homeworks/$HW_NAME/customized_templates /var/homeworks/$H_HW_NAME
if [[ -f HomeworkCodes/$HW_NAME/skeleton/hidden_data.hpp ]]; then
echo "hidden_data.hpp found"
rm -f /var/homeworks/$H_HW_NAME/customized_templates/cpp_shm/data.hpp
cp HomeworkCodes/$HW_NAME/skeleton/hidden_data.hpp /var/homeworks/$H_HW_NAME/customized_templates/cpp_shm/data.hpp
else
echo "no hidden_data.hpp found, using data.hpp"
fi
chmod -R 700 /var/homeworks
chown -R apache.apache /var/homeworks
chmod -R 700 /var/homeworks/{$HW_NAME,$H_HW_NAME}
chown -R apache.apache /var/homeworks/{$HW_NAME,$H_HW_NAME}
chcon -t httpd_cache_t /var/homeworks
chcon -R -t httpd_cache_t /var/homeworks/{$HW_NAME,$H_HW_NAME}
# /var/log
touch /var/log/HomeworkInspector.log
chcon -t var_log_t /var/log/HomeworkInspector.log
# /home/homeworks_workplace
mkdir /home/homeworks_workplace > /dev/null 2>&1
chown root.root /home/homeworks_workplace
chcon -t tmp_t /home/homeworks_workplace
ln -s /home/homeworks_workplace / > /dev/null 2>&1
# shared memory
cd HomeworkCodes/$HW_NAME/skeleton
mkdir tmp
cp ../../../HomeworkInspector/src/shm_makefile tmp/makefile
cp ../../../HomeworkInspector/src/shm_writer.cpp tmp
cp {data.hpp,input.txt} tmp
cd tmp
make all
./shm_writer
if [[ -f ../hidden_input.txt ]] && [[ -f ../hidden_data.hpp ]]; then
cp ../hidden_data.hpp data.hpp
cp ../hidden_input.txt input.txt
make all
./shm_writer
fi
cd ..
rm -rf tmp
cd ../../..
# crontab
sudo crontab -l | { cat; echo "*/5 * * * * /usr/bin/HomeworkInspector/$HW_NAME/CreateScoreboard.php"; } | crontab -