-
Notifications
You must be signed in to change notification settings - Fork 0
/
sowerpkg.sh
executable file
·250 lines (231 loc) · 7.61 KB
/
sowerpkg.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
#!/bin/bash
#
# SowerPKG
# Copyright (C) SowerPHP (http://sowerphp.org)
#
# Este programa es software libre: usted puede redistribuirlo y/o
# modificarlo bajo los términos de la Licencia Pública General Affero de GNU
# publicada por la Fundación para el Software Libre, ya sea la versión
# 3 de la Licencia, o (a su elección) cualquier versión posterior de la
# misma.
#
# Este programa se distribuye con la esperanza de que sea útil, pero
# SIN GARANTÍA ALGUNA; ni siquiera la garantía implícita
# MERCANTIL o de APTITUD PARA UN PROPÓSITO DETERMINADO.
# Consulte los detalles de la Licencia Pública General Affero de GNU para
# obtener una información más detallada.
#
# Debería haber recibido una copia de la Licencia Pública General Affero de GNU
# junto a este programa.
# En caso contrario, consulte <http://www.gnu.org/licenses/agpl.html>.
#
#
# Administrador de paquetes para SowerPHP, permite instalar y actualizar el
# framework
#
# configuración por defecto
EXTENSIONS=""
FRAMEWORK_DIR="/usr/share/sowerphp"
WWW_DIR="/var/www"
COMPOSER="$HOME/bin/composer"
# configuraciones que no dependen del usuario
CONFIG="$HOME/.sowerpkg.conf"
LOG="/tmp/sowerpkg_`whoami`_`date +%Y%m%d%H%M%S`.log"
# función que guarda las configuraciones en el archivo de configuración
function sowerphp_config {
echo "EXTENSIONS=\"$EXTENSIONS\"" > $CONFIG
echo "FRAMEWORK_DIR=\"$FRAMEWORK_DIR\"" >> $CONFIG
echo "WWW_DIR=\"$WWW_DIR\"" >> $CONFIG
echo "COMPOSER=\"$COMPOSER\"" >> $CONFIG
}
# función que muestra ayuda del comando
function sowerphp_help {
echo -e "Administrador de paquetes de SowerPHP\n"
echo -e "\tModo de uso: $0 ACCIÓN [OPCIONES]\n"
echo -e "Acciones:"
echo -e "\thelp\t\tMuestra esta ayuda"
echo -e "\tinstall\t\tInstala SowerPHP"
echo -e "\tupdate\t\tActualiza SowerPHP"
echo -e "\nOpciones:"
echo -e "\t-e \"...\"\tExtensiones oficiales del framework (separadas por espacio)"
echo -e "\t\t\tValor actual: $EXTENSIONS"
echo -e "\t-d DIR\t\tDirectorio base del framework"
echo -e "\t\t\tValor actual: $FRAMEWORK_DIR"
echo -e "\t-w DIR\t\tDirectorio de la aplicación web"
echo -e "\t\t\tValor actual: $WWW_DIR"
echo -e "\t-W\t\tNo instalar aplicación web (sólo el framework)"
echo -e "\t-c COMPOSER\tUbicación de composer"
echo -e "\t\t\tValor actual: $COMPOSER"
echo -e "\nSi existe $CONFIG se utilizará para sobreescribir las opciones por defecto"
echo -e ""
}
# función que muestra el modo de uso del comando
function sowerphp_usemode {
echo "Modo de uso: $0 ACCIÓN [OPCIONES]"
echo "Pruebe '$0 --help' para más información."
}
# función para verificar requerimientos para la instalación
function sowerphp_req {
CMDS="php git hg"
for CMD in $CMDS; do
command -v $CMD >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo "Debe instalar $CMD antes de continuar!"
exit 1
fi
done
sowerphp_req_composer
}
# función para instalar composer si no existe
function sowerphp_req_composer {
command -v $COMPOSER >/dev/null 2>&1
if [ $? -ne 0 ]; then
COMPOSER_DIR=`dirname $COMPOSER`
COMPOSER_FILE=`basename $COMPOSER`
if [ ! -d "$COMPOSER_DIR" ]; then
mkdir -p "$COMPOSER_DIR"
fi
curl -sS https://getcomposer.org/installer | php -- --install-dir=$COMPOSER_DIR --filename=$COMPOSER_FILE > /dev/null
fi
}
# función para realizar la instalación del framework y creación de primer proyecto
function sowerphp_install {
sowerphp_install_framework
if [ ! -z "$WWW_DIR" ]; then
sowerphp_create_project "$WWW_DIR"
fi
# mostrar mensaje log guardado
echo "Log guardado en $LOG"
}
# función para realizar la instalación del framework
function sowerphp_install_framework {
# instalar framework
echo -n "Instalando SowerPHP... "
if [ -d "$FRAMEWORK_DIR" ]; then
rm -rf "$FRAMEWORK_DIR" 2> /dev/null
if [ $? -ne 0 ]; then
sudo rm -rf "$FRAMEWORK_DIR"
fi
fi
mkdir -p "$FRAMEWORK_DIR" 2> /dev/null
if [ $? -ne 0 ]; then
sudo mkdir -p "$FRAMEWORK_DIR"
sudo chown `whoami`: "$FRAMEWORK_DIR" -R
fi
git clone https://github.com/SowerPHP/sowerphp.git "$FRAMEWORK_DIR" >> $LOG 2>&1
if [ $? -eq 0 ]; then echo "OK!"; else echo "FAIL!"; fi
# instalar dependencias de composer
cd "$FRAMEWORK_DIR/lib/sowerphp/core"
echo -n " Instalando dependencias de composer... "
$COMPOSER install >> $LOG 2>&1
if [ $? -eq 0 ]; then echo "OK!"; else echo "FAIL!"; fi
# instalar extensiones
if [ ! -z "$EXTENSIONS" ]; then
echo "Instalando extensiones:"
EXTENSIONS_DIR="$FRAMEWORK_DIR/extensions/sowerphp"
mkdir -p "$EXTENSIONS_DIR"
for EXTENSION in $EXTENSIONS; do
echo -n " - Instalando extensión ${EXTENSION}... "
git clone https://github.com/SowerPHP/extension-${EXTENSION}.git "$EXTENSIONS_DIR/$EXTENSION" >> $LOG 2>&1
if [ $? -eq 0 ]; then echo "OK!"; else echo "FAIL!"; fi
# instalar dependencias de composer
cd "$EXTENSIONS_DIR/$EXTENSION"
echo -n " Instalando dependencias de composer... "
$COMPOSER install >> $LOG 2>&1
if [ $? -eq 0 ]; then echo "OK!"; else echo "FAIL!"; fi
done
fi
}
# función para crear un proyecto
function sowerphp_create_project {
echo -n "Creando proyecto web... "
WWW_DIR=$1
if [ -d "$WWW_DIR" ]; then
echo "FAIL!"
echo " Directorio $WWW_DIR ya existe!"
else
PARENT_DIR=`dirname "$WWW_DIR"`
if [ ! -d "$PARENT_DIR" ]; then
mkdir -p "$PARENT_DIR" 2> /dev/null
if [ $? -ne 0 ]; then
sudo mkdir -p "$PARENT_DIR"
sudo chown `whoami`: "$PARENT_DIR" -R
fi
fi
if [ -d "$FRAMEWORK_DIR/project" ]; then
cp -a "$FRAMEWORK_DIR/project" "$WWW_DIR" 2> /dev/null
if [ $? -ne 0 ]; then
sudo cp -a "$FRAMEWORK_DIR/project" "$WWW_DIR" > /dev/null
sudo chown `whoami`: "$WWW_DIR" -R
fi
sed -i -e 's/dirname(dirname(dirname(dirname(__FILE__))))/"'"${FRAMEWORK_DIR//\//\\/}"'"/' "$WWW_DIR/website/webroot/index.php"
if [ $? -eq 0 ]; then echo "OK!"; else echo "FAIL!"; fi
else
echo "FAIL!"
echo " Directorio $FRAMEWORK_DIR/project no existe!"
fi
fi
}
# función para realizar la actualización del framework
function sowerphp_update {
# actualizar framework
echo -n "Actualizando SowerPHP... "
cd "$FRAMEWORK_DIR"
git pull origin master >> $LOG 2>&1
if [ $? -eq 0 ]; then echo "OK!"; else echo "FAIL!"; fi
# actualizar dependencias de composer
cd "$FRAMEWORK_DIR/lib/sowerphp/core"
echo -n " Actualizando dependencias de composer... "
$COMPOSER install >> $LOG 2>&1
if [ $? -eq 0 ]; then echo "OK!"; else echo "FAIL!"; fi
# actualizar extensiones
if [ ! -z "$EXTENSIONS" ]; then
EXTENSIONS_DIR="$FRAMEWORK_DIR/extensions/sowerphp"
for EXTENSION in $EXTENSIONS; do
echo -n " - Actualizando extensión ${EXTENSION}... "
cd "$EXTENSIONS_DIR/$EXTENSION"
git pull origin master >> $LOG 2>&1
if [ $? -eq 0 ]; then echo "OK!"; else echo "FAIL!"; fi
# actualizar dependencias de composer
echo -n " Actualizando dependencias de composer... "
$COMPOSER install >> $LOG 2>&1
if [ $? -eq 0 ]; then echo "OK!"; else echo "FAIL!"; fi
done
fi
# mostrar mensaje log guardado
echo "Log guardado en $LOG"
}
# si no se pasó ninguna acción se muestra mensaje modo de uso
if [ $# -eq 0 ]; then
sowerphp_usemode
exit 1
fi
# obtener acción
ACCION=$1
shift
# cargar archivo de configuración si existe
if [ -r "$CONFIG" ]; then
. $CONFIG
fi
# parsear argumentos
while [[ $# > 0 ]]; do
case $1 in
-e) EXTENSIONS="$2"; shift;;
-d) FRAMEWORK_DIR="$2"; shift;;
-w) WWW_DIR="$2"; shift;;
-W) WWW_DIR="";;
-c) COMPOSER="$2"; shift;;
esac
shift
done
# guardar configuraciones en archivo de configuración
sowerphp_config
# verificar requerimientos para instalación
sowerphp_req
# ejecutar acción
case $ACCION in
install) sowerphp_install;;
update) sowerphp_update;;
help|--help|-h) sowerphp_help;;
*) sowerphp_usemode; exit 1;;
esac