-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathinstall.sh
executable file
·419 lines (369 loc) · 14.1 KB
/
install.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
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
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
#!/bin/bash
# script de instalação do baobáxia
USER_BBX='exu'
USER_BBX_PASSWD='abre os caminhos'
UID_BBX=10000
BBX_DIR_NAME='bbx'
DEFAULT_REPOSITORY_DIR_NAME='repositories'
DEFAULT_MEDIA_ROOT='/data/bbx/'
DEFAULT_REPOSITORY_DIR=$DEFAULT_MEDIA_ROOT$DEFAULT_REPOSITORY_DIR_NAME
DEFAULT_REPOSITORY_NAME='mocambos'
INSTALL_DIR='/srv/bbx'
LOG_DIR='log/'
PACK_DIR='/root/baobaxia'
BBX_LOCAL_REPO='/root/baobaxia'
BBX_REMOTE_REPO='https://github.com/RedeMocambos/baobaxia'
while getopts i:s:-: opts; do
case ${opts} in
-)
case "${OPTARG}" in
reconfigure-no-net) NET="no";;
esac ;;
esac
done
create_user() {
USERNAME=$1
USER_UID=$2
# checa se usuario ja existe
USER_EXISTS=`cat /etc/passwd | grep $USER_BBX`
if [[ "$USER_EXISTS" == '' ]]; then
echo "criando usuario $USER_BBX ..."
useradd --uid $USER_UID --create-home -p "$USER_BBX_PASSWD" --shell /bin/bash $USERNAME
fi
}
# PRE: pkgs:
if [[ "$NET" != "no" ]]; then
# dependencies: se for deb pkg, tirar
COMMON_PKG="git git-annex nginx supervisor python-pip rabbitmq-server libjpeg-dev libtiff5-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk python-dev python-setuptools gettext"
DEBIAN_PKG="libjpeg62-turbo-dev"
UBUNTU_PKG="libjpeg-turbo8-dev"
if [ ! -f /usr/bin/lsb_release ]; then
apt-get update
apt-get install -y lsb-release
fi
DISTRO_VERSION="$(lsb_release -c -s)"
if [ -n "$(grep -i ubuntu /etc/os-release )" ]; then
PACKAGES="$COMMON_PKG $UBUNTU_PKG"
else
PACKAGES="$COMMON_PKG $DEBIAN_PKG"
fi
apt-get update
apt-get install -y $PACKAGES || exit 1
fi
### cria diretorio basico
mkdir -p $DEFAULT_REPOSITORY_DIR
# 1) escolha do nome da mucuaLocal
echo "------------------------"
echo " /"
echo " \_ \ /"
echo " \ | /___"
echo " <== \| / ()"
echo " ==> || NPDD/Rede Mocambos"
echo " nnn ||/ "
echo " || http://wiki.mocambos.net/wiki/NPDD"
echo " || Vamos fazer um mundo digital mais do nosso jeito..."
echo "______/~~~~\_____________________________________________________________ _ _ _"
echo ""
echo " E ku abo ilê Baobáxia!"
echo " Bem vindo ao Baobáxia!"
echo " Welcome to Baobáxia!"
echo ""
echo "Esse é o instador do Baobáxia. "
echo ""
echo "----------------"
echo "Escolha o nome da sua mucua"
echo "----------------"
echo ""
read -p `hostname`" -> este é o nome da sua mucua? (s/n)" ESCOLHA
case "$ESCOLHA" in
s|S|*) MUCUA=`hostname`;;
n|N) read -p "Escolha o nome da mucua: " MUCUA ;;
esac
echo ""
echo "O nome da mucua é $MUCUA"
echo ""
echo "----------------"
echo " Escolha o endereço da sua mucua"
echo "----------------"
echo ""
MUCUA_URL=
read -p `hostname`".mocambos.net -> este é o url da sua mucua? (s/n)" ESCOLHA
case "$ESCOLHA" in
s|S|*) MUCUA_URL=`hostname`".mocambos.net";;
n|N) read -p "Escolha o url da mucua: " MUCUA_URL;;
esac
echo ""
echo "O url da mucua é $MUCUA_URL"
echo ""
echo ""
echo "Criando usuário padrão para o Baobáxia ..."
create_user $USER_BBX $UID_BBX
# define repositorioRemoto para espelhar / caminho do repositório
echo "----------------"
echo "Defina um repositório remoto para espelhar:"
echo "----------------"
echo ""
echo "É possível conectar-se de diferentes formas a um repositório:"
echo "- pela rede (ssh)"
echo "- por um dispositivo externo: pendrive, hd externo (media)"
echo "- de uma pasta local (local)"
read -p "Como você vai conectar? (ssh/media/local, padrão é local)" PROTOCOL
case "$PROTOCOL" in
# git clone via ssh
ssh|SSH) PROTOCOL='ssh';
echo "Acessar repositório via ssh..."
read -p "Defina a url do repositório para espelhar (padrão: dpadua.mocambos.net):" MIRROR_REPOSITORY_NAME
case $MIRROR_REPOSITORY_NAME in
'') MIRROR_REPOSITORY_NAME="dpadua.mocambos.net" ;;
esac
# TODO travar caso nao definir
read -p "Defina a porta do repositório para espelhar (padrão: 9022):" MIRROR_REPOSITORY_PORT
case $MIRROR_REPOSITORY_PORT in
'') MIRROR_REPOSITORY_PORT=9022 ;;
esac
read -p "Defina a pasta do repositório para espelhar (padrão: $DEFAULT_REPOSITORY_DIR/$DEFAULT_REPOSITORY_NAME):" MIRROR_REPOSITORY_FOLDER
case $MIRROR_REPOSITORY_FOLDER in
'') MIRROR_REPOSITORY_FOLDER="$DEFAULT_REPOSITORY_DIR/$DEFAULT_REPOSITORY_NAME" ;;
esac
cd $DEFAULT_REPOSITORY_DIR
git clone ssh://$USER_BBX@$MIRROR_REPOSITORY_NAME:$MIRROR_REPOSITORY_PORT/$MIRROR_REPOSITORY_FOLDER
;;
# git clone de media
media|MEDIA) PROTOCOL='media'
echo ""
echo "Conecte o drive externo ou pendrive."
echo "Aperte ENTER quando inserir"
read
# TODO: travar até que o repositorio seja inserido
# verificar se nos pontos de montagem ha algo que seja um hd de repositorio
IS_BBX_REPO=false
for USB_DEVICE in `cat /proc/mounts | grep usb | cut -d' ' -f2`; do
echo 'Dispositivo USB encontrado: '$USB_DEVICE
for REPO in `find $USB_DEVICE -name 'description' | grep .git`; do
if [[ `cat $REPO` == "baobaxia" ]]; then
IS_BBX_REPO=true
REPO_NAME=$USB_DEVICE/`echo $REPO | cut -d '/' -f4`
break
fi
done
done;
if [[ $IS_BBX_REPO == "" ]]; then
echo "Insira um dispositivo com um repositório válido."
exit 0
fi
echo ""
echo "Espelhando repositório..."
cd $DEFAULT_REPOSITORY_DIR
git clone $REPO_NAME
;;
local|LOCAL|*) PROTOCOL='local'
read -p "Defina a pasta do repositório para espelhar (padrão: /root/baobaxia/mocambos):" MIRROR_REPOSITORY_FOLDER
case $MIRROR_REPOSITORY_FOLDER in
'') MIRROR_REPOSITORY_FOLDER="/root/baobaxia/mocambos" ;;
esac
cd $DEFAULT_REPOSITORY_DIR
git clone $MIRROR_REPOSITORY_FOLDER
;;
esac
## configurar permissoes
echo ""
echo "Configurando permissões do repositório"
chown -R $USER_BBX:$USER_BBX $DEFAULT_REPOSITORY_DIR/$DEFAULT_REPOSITORY_NAME
chmod -R 775 $DEFAULT_REPOSITORY_DIR/$DEFAULT_REPOSITORY_NAME
echo ""
echo "Definindo usuário git para usuário do baobáxia ($USER_BBX) ..."
echo "Criando novo repositório na mucua $MUCUA ..."
su - $USER_BBX -c "
if [ -d $DEFAULT_REPOSITORY_DIR/$DEFAULT_REPOSITORY_NAME ]; then
cd $DEFAULT_REPOSITORY_DIR/$DEFAULT_REPOSITORY_NAME;
else
mkdir $DEFAULT_REPOSITORY_DIR/$DEFAULT_REPOSITORY_NAME;
fi
git config --global user.name 'Exu do BBX';
git config --global user.email '[email protected]';
git init . ;
git annex init $MUCUA;
git annex describe here $MUCUA;
"
# 5) criar diretórios locais
echo ""
echo "Criando diretórios locais da mucua $MUCUA ..."
mkdir -p $DEFAULT_REPOSITORY_DIR/$DEFAULT_REPOSITORY_NAME/$MUCUA/mocambolas
mkdir -p $DEFAULT_REPOSITORY_DIR/$DEFAULT_REPOSITORY_NAME/$MUCUA/requests
mkdir -p $INSTALL_DIR/bin
mkdir -p $INSTALL_DIR/media
mkdir -p $INSTALL_DIR/static
mkdir -p $INSTALL_DIR/run
mkdir -p $INSTALL_DIR/log
mkdir -p $INSTALL_DIR/log/celery
mkdir -p $INSTALL_DIR/envs
mkdir -p $DEFAULT_MEDIA_ROOT/db
mkdir -p $DEFAULT_MEDIA_ROOT/cache
chown -R $USER_BBX:$USER_BBX $DEFAULT_REPOSITORY_DIR/$DEFAULT_REPOSITORY_NAME
chmod -R 775 $DEFAULT_REPOSITORY_DIR/$DEFAULT_REPOSITORY_NAME
chown -R $USER_BBX:$USER_BBX $INSTALL_DIR
chmod -R 775 $INSTALL_DIR
chown -R $USER_BBX:$USER_BBX $DEFAULT_MEDIA_ROOT/db
chmod -R 775 $DEFAULT_MEDIA_ROOT/db
chown -R $USER_BBX:$USER_BBX $DEFAULT_MEDIA_ROOT/cache
chmod -R 775 $DEFAULT_MEDIA_ROOT/cache
echo ""
echo "Copiando arquivos do Baobáxia ..."
cd $INSTALL_DIR
# GARANTIR PERMISSAO DE GRAVACAO
# TODO: pegar futuramente um pacote offline
echo ""
read -p "De onde você vai baixar o repositório do baobáxia? (ex: https://github.com/RedeMocambos/baobaxia) - (1 - local / 2 - internet): " BBX_REPO_FROM
case "$BBX_REPO_FROM" in
2|internet) BBX_REPO_FROM=$BBX_REMOTE_REPO ;;
1|local|*) BBX_REPO_FROM=$BBX_LOCAL_REPO ;;
esac
git clone $BBX_REPO_FROM baobaxia
cd $INSTALL_DIR/baobaxia
echo ""
echo "Criando arquivo de configuração do Baobáxia ..."
cp $INSTALL_DIR/baobaxia/app/django-bbx/bbx/settings.example.py $INSTALL_DIR/baobaxia/app/django-bbx/bbx/settings.py
sed -i "s:^\(MEDIA_ROOT\s*=\s*\).*$:\1\"${DEFAULT_MEDIA_ROOT}\":" $INSTALL_DIR/baobaxia/app/django-bbx/bbx/settings.py
sed -i "s:^\(DEFAULT_MUCUA\s*=\s*\).*$:\1\"${MUCUA}\":" $INSTALL_DIR/baobaxia/app/django-bbx/bbx/settings.py
sed -i "s:^\(REPOSITORY_DIR_NAME\s*=\s*\).*$:\1\"${DEFAULT_REPOSITORY_DIR_NAME}\":" $INSTALL_DIR/baobaxia/app/django-bbx/bbx/settings.py
sed -i "s:^\(DEFAULT_REPOSITORY\s*=\s*\).*$:\1\"${DEFAULT_REPOSITORY_NAME}\":" $INSTALL_DIR/baobaxia/app/django-bbx/bbx/settings.py
sed -i "s:^\(STATIC_ROOT\s*=\s*\).*$:\1\"${INSTALL_DIR}\/static\":" $INSTALL_DIR/baobaxia/app/django-bbx/bbx/settings.py
echo ""
echo "Configurando interface web ..."
cp $INSTALL_DIR/baobaxia/app/django-bbx/bbx/static/js/config.js.example $INSTALL_DIR/baobaxia/app/django-bbx/bbx/static/js/config.js
sed -i "s/dpadua/${MUCUA}/" $INSTALL_DIR/baobaxia/app/django-bbx/bbx/static/js/config.js
### instalacao do baobaxia
if [[ "$NET" != "no" ]]; then
echo ""
echo "Criando ambiente virtual do python ..."
pip install --upgrade pip
# atualiza mapa das variaveis de ambiente
hash -r
# cria ambiente virtual
pip install virtualenv
#cp $PACK_DIR/$PACK_FILE $INSTALL_DIR/
chown root:$USER_BBX $INSTALL_DIR/envs
chmod 775 $INSTALL_DIR/envs
#xhost +
su - $USER_BBX -c "
virtualenv $INSTALL_DIR/envs/bbx ;
. $INSTALL_DIR/envs/bbx/bin/activate ;
pip install --upgrade setuptools ;
cd $INSTALL_DIR;
pip install argparse;
pip install django==1.6.7;
pip install django-extensions;
pip install djangorestframework==2.4.4;
pip install gunicorn;
pip install six;
pip install Pillow;
pip install sorl-thumbnail==12.2;
pip install south;
pip install wheel;
pip install wsgiref;
pip install python-magic;
pip install python-memcached;
pip install longerusername;
pip install djangorestframework-jwt;
pip install celery==3.1.14
"
fi
echo ""
echo "Definindo permissões do baobáxia ..."
chown -R $USER_BBX:$USER_BBX $INSTALL_DIR/baobaxia
echo ""
echo "Criando banco de dados do baobáxia ..."
su - $USER_BBX -c "
. $INSTALL_DIR/envs/bbx/bin/activate;
cd $INSTALL_DIR/baobaxia/app/django-bbx;
find . -name '000*.py' -exec rm '{}' \; && echo 'OK!';
python manage.py syncdb --noinput;
python manage.py schemamigration --initial --traceback mocambola;
python manage.py schemamigration --initial --traceback mucua;
python manage.py schemamigration --initial --traceback tag;
python manage.py schemamigration --initial --traceback media;
python manage.py schemamigration --initial --traceback repository;
python manage.py migrate --all;
python manage.py collectstatic --noinput
"
echo ""
echo "usuário do login número 1:"
echo "username: [email protected]"
echo "senha: livre"
echo ""
echo "Configurando o gunicorn ..."
cp $INSTALL_DIR/baobaxia/bin/gunicorn_start.sh.example $INSTALL_DIR/bin/gunicorn_start.sh
sed -i "s:_domain_:${BBX_DIR_NAME}:g" $INSTALL_DIR/bin/gunicorn_start.sh
touch $INSTALL_DIR/log/gunicorn_supervisor.log
chmod +x $INSTALL_DIR/bin/gunicorn_start.sh
chmod 775 $INSTALL_DIR/log/gunicorn_supervisor.log
chown $USER_BBX:$USER_BBX $INSTALL_DIR/log/gunicorn_supervisor.log
# 7) recriar mucuas da rede no django-bbx (mucuaLocal)
# sync a partir dos jsons
echo ""
echo "Primeira sincronização, criando objetos a partir dos arquivos ..."
su - $USER_BBX -c "
. $INSTALL_DIR/envs/bbx/bin/activate;
cd $INSTALL_DIR/baobaxia/app/django-bbx/;
python manage.py bbxsync mocambos
"
echo ""
echo "Criando arquivo de configuração do NGINX ..."
cp $INSTALL_DIR/baobaxia/conf/nginx/bbx /etc/nginx/sites-available/bbx
sed -i "s:_domain_:${BBX_DIR_NAME}:g" /etc/nginx/sites-available/bbx
sed -i "s:_domainaliases_:${MUCUA} ${MUCUA_URL}:g" /etc/nginx/sites-available/bbx
ln -s /etc/nginx/sites-available/bbx /etc/nginx/sites-enabled/bbx
echo ""
echo "Ativando NGINX ..."
service nginx restart
echo ""
echo "Criando arquivo de configuração do Supervisor para Celery..."
cp $INSTALL_DIR/baobaxia/conf/supervisor/celeryd /etc/supervisor/conf.d/celeryd.conf
echo ""
echo "Criando arquivo de configuração do Supervisor para BBX..."
cp $INSTALL_DIR/baobaxia/conf/supervisor/bbx /etc/supervisor/conf.d/bbx.conf
sed -i "s:_domain_:${BBX_DIR_NAME}:g" /etc/supervisor/conf.d/bbx.conf
echo ""
echo "Ativando supervisor..."
service supervisor restart
echo ""
echo "Instalando script para atualizar o BBX (update-templates) ..."
cp $INSTALL_DIR/baobaxia/bin/update-templates.sh.example $INSTALL_DIR/bin/update-templates.sh
chmod +x $INSTALL_DIR/bin/update-templates.sh
echo ""
echo "Ativando o Baobáxia ..."
supervisorctl restart bbx
supervisorctl restart celery
echo ""
echo "Instalando script de sincronização (bbx-cron) ..."
cp $INSTALL_DIR/baobaxia/bin/bbx-cron.sh.example $INSTALL_DIR/bin/bbx-cron.sh
chmod +x $INSTALL_DIR/bin/bbx-cron.sh
echo ""
echo "Instalando script para pedidos de arquivos (process-requests) ..."
cp $INSTALL_DIR/baobaxia/bin/process-requests.sh.example $INSTALL_DIR/bin/process-requests.sh
chmod +x $INSTALL_DIR/bin/process-requests.sh
echo ""
echo ""
echo " >>> Instalação completa! <<< "
echo ""
echo "Lembre-se de entrar como usuario exu e pedir pra abrir os caminhos, lançando este script..."
echo "exu@"$MUCUA': /srv/bbx/bin/update-templates.sh'
echo ""
echo "Pode acessar essa mucua por esses endereços (depende da sua rede local):"
echo " http://"$MUCUA
echo " http://127.0.0.1"
echo " http://"`hostname -I`
echo ""
echo ""
echo " / "
echo " _ \ / "
echo " \_| |/__ "
echo " <== | / () "
echo " ==> |/ NPDD/Rede Mocambos "
echo " nnn | "
echo " | http://wiki.mocambos.net/wiki/NPDD "
echo " | 'Vamos fazer um mundo digital mais do nosso jeito...' "
echo "______/~~~\________________________________________________________________ _ _ _ "
echo " / "
echo " BAOBÁXIA Software LIVRE! GPLv3 "
echo ""